{"version":3,"sources":["../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/regenerator/index.js","../node_modules/react/index.js","../node_modules/@babel/runtime/helpers/esm/get.js","../node_modules/@babel/runtime/helpers/esm/superPropBase.js","../node_modules/react/jsx-runtime.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../modules/HistoryContext.js","../../modules/createNameContext.js","../../modules/RouterContext.js","../../modules/Router.js","../../modules/MemoryRouter.js","../../modules/Lifecycle.js","../../modules/matchPath.js","../../modules/Route.js","../../modules/StaticRouter.js","../../modules/Switch.js","../../modules/hooks.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/axios/lib/utils.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/tiny-invariant/dist/tiny-invariant.esm.js","../node_modules/resolve-pathname/esm/resolve-pathname.js","../node_modules/value-equal/esm/value-equal.js","../node_modules/history/esm/history.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/prop-types/index.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/axios/index.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/object-assign/index.js","../../modules/BrowserRouter.js","../../modules/HashRouter.js","../../modules/utils/locationUtils.js","../../modules/Link.js","../../modules/NavLink.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/mini-create-react-context/dist/esm/index.js","../node_modules/react-router/node_modules/path-to-regexp/index.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/defaults.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/core/createError.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/cancel/Cancel.js","../node_modules/webpack/buildin/global.js","../node_modules/react-dom/index.js","../node_modules/@google/model-viewer/dist/model-viewer.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/scheduler/index.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/transformData.js","../node_modules/process/browser.js","../node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/core/enhanceError.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/buffer/index.js","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/isarray/index.js","../node_modules/regenerator-runtime/runtime.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-router/node_modules/isarray/index.js","../node_modules/react-router/node_modules/react-is/index.js","../node_modules/react-router/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","prototype","_inherits","subClass","superClass","create","constructor","value","_createSuper","Derived","hasNativeReflectConstruct","result","Super","NewTarget","this","Reflect","construct","arguments","apply","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","module","exports","require","property","receiver","get","base","object","hasOwnProperty","call","desc","getOwnPropertyDescriptor","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","info","error","done","Promise","then","_asyncToGenerator","fn","self","args","err","undefined","_defineProperty","obj","_createForOfIteratorHelper","allowArrayLike","it","Symbol","iterator","Array","isArray","F","s","n","e","_e","f","normalCompletion","didErr","step","next","_e2","_slicedToArray","arr","_arr","_n","_d","_s","_i","push","unsupportedIterableToArray","_assertThisInitialized","ReferenceError","historyContext","name","context","createContext","createNamedContext","Router","location","computeRootMatch","path","url","params","isExact","pathname","componentDidMount","_pendingLocation","componentWillUnmount","unlisten","render","RouterContext","history","state","match","staticContext","HistoryContext","children","React","Component","cache","cacheCount","matchPath","options","exact","strict","sensitive","concat","matched","cacheKey","pathCache","keys","regexp","pathToRegexp","compilePath","end","values","memo","Route","component","addLeadingSlash","stripBasename","basename","createURL","createPath","staticHandler","methodName","invariant","noop","Switch","child","element","computedMatch","useContext","useParams","_extends","assign","source","bind","toString","val","isUndefined","isObject","isPlainObject","isFunction","forEach","l","isArrayBuffer","isBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","window","document","merge","assignValue","slice","extend","a","b","thisArg","trim","str","replace","stripBOM","content","charCodeAt","_inheritsLoose","prefix","condition","message","Error","isAbsolute","charAt","spliceOne","list","index","k","pop","resolvePathname","to","from","hasTrailingSlash","toParts","split","fromParts","isToAbs","isFromAbs","mustEndAbs","last","up","part","unshift","join","substr","valueOf","valueEqual","every","item","aValue","bValue","stripLeadingSlash","toLowerCase","indexOf","hasBasename","stripTrailingSlash","search","hash","createLocation","currentLocation","hashIndex","searchIndex","parsePath","decodeURI","URIError","locationsAreEqual","createTransitionManager","prompt","listeners","setPrompt","nextPrompt","confirmTransitionTo","action","getUserConfirmation","callback","appendListener","isActive","listener","filter","notifyListeners","_len","_key","canUseDOM","createElement","getConfirmation","confirm","PopStateEvent","HashChangeEvent","getHistoryState","createBrowserHistory","globalHistory","canUseHistory","ua","userAgent","supportsHistory","needsHashChangeListener","_props","_props$forceRefresh","forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","getDOMLocation","historyState","_ref","_window$location","createKey","Math","random","transitionManager","setState","nextState","handlePopState","event","isExtraneousPopstateEvent","handlePop","handleHashChange","forceNextPop","ok","fromLocation","toLocation","toIndex","allKeys","fromIndex","delta","go","revertPop","initialLocation","createHref","listenerCount","checkDOMListeners","addEventListener","removeEventListener","isBlocked","href","pushState","prevIndex","nextKeys","replaceState","goBack","goForward","block","unblock","listen","HashChangeEvent$1","HashPathCoders","hashbang","encodePath","decodePath","noslash","slash","stripHash","getHashPath","substring","replaceHashPath","createHashHistory","_props$hashType","hashType","_HashPathCoders$hashT","ignorePath","encodedPath","prevLocation","allPaths","lastIndexOf","baseTag","querySelector","getAttribute","pushHashPath","nextPaths","clamp","lowerBound","upperBound","min","max","createMemoryHistory","_props$initialEntries","initialEntries","_props$initialIndex","initialIndex","entries","map","entry","nextIndex","nextEntries","splice","canGo","_typeof","_possibleConstructorReturn","assertThisInitialized","_objectWithoutPropertiesLoose","excluded","sourceKeys","_unsupportedIterableToArray","minLen","test","_setPrototypeOf","p","_arrayLikeToArray","len","arr2","_toConsumableArray","arrayLikeToArray","iter","_isNativeReflectConstruct","sham","Proxy","Date","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","toObject","test1","String","getOwnPropertyNames","test2","fromCharCode","test3","letter","shouldUseNative","symbols","BrowserRouter","createHistory","resolveToLocation","normalizeToLocation","forwardRefShim","C","forwardRef","LinkAnchor","innerRef","navigate","onClick","rest","ex","isModifiedEvent","forwardedRef","Link","method","ariaCurrent","activeClassName","activeStyle","classNameProp","className","isActiveProp","locationProp","styleProp","style","escapedPath","classnames","joinClassnames","ownKeys","enumerableOnly","sym","_objectSpread2","getOwnPropertyDescriptors","defineProperties","MAX_SIGNED_31_BIT_INT","commonjsGlobal","globalThis","global","createEventEmitter","handlers","on","handler","off","h","set","newValue","changedBits","defaultValue","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","getUniqueId","Provider","_Component","_this","emitter","_proto","getChildContext","componentWillReceiveProps","nextProps","oldValue","x","y","childContextTypes","PropTypes","isRequired","Consumer","_Component2","_this2","getValue","onUpdate","observedBits","_proto2","contextTypes","isarray","parse","compile","tokensToFunction","tokensToRegExp","PATH_REGEXP","RegExp","res","tokens","defaultDelimiter","delimiter","exec","m","escaped","offset","capture","group","modifier","asterisk","partial","repeat","optional","pattern","escapeGroup","escapeString","encodeURIComponentPretty","encodeURI","c","toUpperCase","matches","flags","opts","data","encode","pretty","encodeURIComponent","token","segment","JSON","stringify","j","attachKeys","re","route","endsWithDelimiter","groups","regexpToRegexp","parts","arrayToRegexp","stringToRegexp","utils","paramsSerializer","serializedParams","v","toISOString","hashmarkIndex","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","headers","defaults","adapter","XMLHttpRequest","process","getDefaultAdapter","transformRequest","transformResponse","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","status","common","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","config","requestData","requestHeaders","request","auth","username","password","unescape","Authorization","btoa","fullPath","baseURL","open","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","response","responseType","responseText","statusText","onabort","onerror","ontimeout","timeoutErrorMessage","xsrfValue","withCredentials","read","setRequestHeader","onDownloadProgress","onUploadProgress","upload","cancelToken","promise","cancel","abort","send","enhanceError","code","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","directMergeKeys","getMergedValue","mergeDeepProperties","prop","axiosKeys","otherKeys","Cancel","g","Function","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","console","trustedTypes","createPolicy","createHTML","ShadyCSS","prepareTemplateDom","warn","JSCompiler_renameProperty","_obj","defaultConverter","toAttribute","type","Boolean","fromAttribute","Number","notEqual","old","defaultPropertyDeclaration","attribute","converter","reflect","hasChanged","finalized","UpdatingElement","initialize","_updateState","_updatePromise","_enableUpdatingResolver","_changedProperties","Map","_saveInstanceProperties","requestUpdateInternal","_classProperties","_v","_instanceProperties","enableUpdating","_attributeToProperty","ctor","attr","_attributeNameForProperty","attrValue","_propertyValueToAttribute","removeAttribute","setAttribute","propName","_attributeToPropertyMap","getPropertyOptions","_propertyValueFromAttribute","shouldRequestUpdate","_valueHasChanged","has","_reflectingProperties","_hasRequestedUpdate","_enqueueUpdate","updateComplete","performUpdate","_applyInstanceProperties","shouldUpdate","changedProperties","update","_markUpdated","firstUpdated","updated","_getUpdateComplete","size","_propertyToAttribute","finalize","attributes","superProperties","_ensureClassProperties","noAccessor","getPropertyDescriptor","superCtor","properties","propKeys","createProperty","HTMLElement","protoOrDescriptor","proto","legacyProperty","kind","finisher","clazz","placement","initializer","standardProperty","ShadowRoot","nativeShadow","Document","CSSStyleSheet","HAS_WEBXR_DEVICE_API","xr","XRSession","isSessionSupported","HAS_WEBXR_HIT_TEST_API","requestHitTestSource","HAS_RESIZE_OBSERVER","ResizeObserver","HAS_INTERSECTION_OBSERVER","IntersectionObserver","IS_WEBXR_AR_CANDIDATE","vendor","opera","check","IS_ANDROID","IS_IOS","MSStream","platform","maxTouchPoints","IS_AR_QUICKLOOK_CANDIDATE","tempAnchor","relList","supports","IS_FIREFOX","IS_OCULUS","IS_SCENEVIEWER_CANDIDATE","template","innerHTML","AddEquation","EquirectangularReflectionMapping","CubeUVReflectionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipmapNearestFilter","NearestMipmapLinearFilter","LinearFilter","LinearMipmapNearestFilter","LinearMipmapLinearFilter","UnsignedByteType","UnsignedShortType","UnsignedIntType","FloatType","HalfFloatType","UnsignedInt248Type","RGBFormat","RGBAFormat","DepthFormat","DepthStencilFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGB_ETC2_Format","RGBA_ETC2_EAC_Format","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","NormalAnimationBlendMode","AdditiveAnimationBlendMode","LinearEncoding","sRGBEncoding","GammaEncoding","RGBEEncoding","KeepStencilOp","StaticDrawUsage","DynamicDrawUsage","GLSL3","EventDispatcher","_listeners","listenerArray","array","_lut","_seed","DEG2RAD","PI","RAD2DEG","generateUUID","d0","d1","d2","d3","clamp$1","euclideanModulo","lerp","t","isPowerOfTwo","ceilPowerOfTwo","pow","ceil","log","LN2","floorPowerOfTwo","floor","MathUtils","freeze","mapLinear","a1","a2","b1","b2","inverseLerp","damp","lambda","dt","exp","pingpong","abs","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","seededRandom","degToRad","degrees","radToDeg","radians","setQuaternionFromProperEuler","q","order","cos","sin","c2","s2","c13","s13","c1_3","s1_3","c3_1","s3_1","Vector2","scalar","w","addVectors","subVectors","multiplyScalar","elements","minVal","maxVal","divideScalar","round","sqrt","angle","atan2","distanceToSquared","dx","dy","normalize","alpha","v1","v2","getX","getY","center","isVector2","_canvas","Matrix3","n11","n12","n13","n21","n22","n23","n31","n32","n33","te","me","xAxis","yAxis","zAxis","setFromMatrix3Column","multiplyMatrices","ae","be","a11","a12","a13","a21","a22","a23","a31","a32","a33","b11","b12","b13","b21","b22","b23","b31","b32","b33","d","t11","t12","t13","det","detInv","tmp","matrix4","setFromMatrix4","invert","transpose","r","tx","ty","sx","sy","rotation","cx","cy","theta","matrix","fromArray","isMatrix3","ImageUtils","image","src","HTMLCanvasElement","canvas","createElementNS","width","height","getContext","ImageData","putImageData","drawImage","toDataURL","textureId","Texture$1","DEFAULT_IMAGE","mapping","DEFAULT_MAPPING","wrapS","wrapT","magFilter","minFilter","format","anisotropy","encoding","uuid","mipmaps","internalFormat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","version","setUvTransform","copy","meta","isRootObject","textures","output","metadata","generator","wrap","images","isDataTexture","serializeImage","dispatchEvent","uv","applyMatrix3","HTMLImageElement","ImageBitmap","getDataURL","isTexture","Vector4","z","acos","epsilon","epsilon2","m11","m12","m13","m21","m22","m23","m31","m32","m33","xx","yy","zz","xy","xz","yz","getZ","getW","isVector4","WebGLRenderTarget","depth","scissor","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","dispose","clone","isWebGLRenderTarget","Quaternion","_x","_y","_z","_w","_onChangeCallback","quaternion","euler","isEuler","_order","c1","c3","s1","s3","axis","halfAngle","trace","vFrom","vTo","dot","EPSILON","angleTo","slerp","conjugate","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","qb","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","qa","qm","slerpQuaternions","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","tDir","isQuaternion","Vector3","multiplyVectors","applyQuaternion","_quaternion$4","setFromEuler","setFromAxisAngle","qx","qy","qz","qw","ix","iy","iz","iw","camera","applyMatrix4","matrixWorldInverse","projectionMatrix","projectionMatrixInverse","matrixWorld","crossVectors","ax","ay","az","bx","by","bz","denominator","lengthSq","planeNormal","_vector$c","projectOnVector","sub","normal","dz","setFromSphericalCoords","radius","phi","sinPhiRadius","setFromCylindricalCoords","setFromMatrixColumn","sz","isVector3","Box3","Infinity","minX","minY","minZ","maxX","maxY","maxZ","count","points","makeEmpty","il","expandByPoint","halfSize","_vector$b","add","expandByObject","box","isEmpty","point","vector","addScalar","updateWorldMatrix","geometry","boundingBox","computeBoundingBox","_box$3","union","sphere","clampPoint","plane","constant","triangle","getCenter","_center","_extents","_v0$2","_v1$7","_v2$3","_f0","_f1","_f2","axes","satForAxes","_triangleNormal","getSize","_points","setFromPoints","equals","isBox3","_testAxis","v0","extents","p0","p1","p2","_box$2","_v1$6","_toFarthestPoint","_toPoint","Sphere","optionalCenter","maxRadiusSq","distanceTo","radiusSum","intersectsSphere","distanceToPoint","deltaLengthSq","expandByScalar","getMaxScaleOnAxis","missingRadiusHalf","_vector$a","_segCenter","_segDir","_diff","_edge1","_edge2","_normal$1","Ray","origin","direction","ray","at","directionDistance","distanceSqToPoint","optionalPointOnRay","optionalPointOnSegment","s0","sqrDist","extDet","segExtent","a01","b0","invDet","tca","radius2","thc","t0","t1","distanceToPlane","distToPoint","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectBox","backfaceCulling","sign","DdN","DdQxE2","DdE1xQ","cross","QdN","transformDirection","Matrix4","n14","n24","n34","n41","n42","n43","n44","scaleX","_v1$5","scaleY","scaleZ","af","bf","ce","cf","de","df","ac","ad","bc","bd","compose","_zero","_one","eye","a14","a24","a34","a41","a42","a43","a44","b14","b24","b34","b41","b42","b43","b44","t14","scaleXSq","scaleYSq","scaleZSq","position","scale","x2","y2","z2","wx","wy","wz","determinant","_m1$2","invSX","invSY","invSZ","setFromRotationMatrix","left","right","top","bottom","near","far","isMatrix4","_matrix$1","_quaternion$3","Euler","DefaultOrder","asin","makeRotationFromQuaternion","newOrder","setFromQuaternion","optionalResult","RotationOrders","Layers","mask","channel","layers","_object3DId","_v1$4","_q1","_m1$1","_target","_position$3","_scale$2","_quaternion$2","_xAxis","_yAxis","_zAxis","_addedEvent","_removedEvent","Object3D","parent","DefaultUp","_onChange","modelViewMatrix","normalMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","visible","castShadow","receiveShadow","frustumCulled","renderOrder","animations","userData","updateMatrix","premultiply","decompose","multiply","rotateOnAxis","distance","translateOnAxis","setFromMatrixPosition","isCamera","isLight","lookAt","extractRotation","isObject3D","remove","id","getObjectByProperty","traverse","traverseVisible","traverseAncestors","force","updateMatrixWorld","updateParents","updateChildren","geometries","materials","shapes","skeletons","serialize","library","toJSON","toArray","isInstancedMesh","instanceMatrix","instanceColor","isMesh","isLine","isPoints","parameters","shape","isSkinnedMesh","bindMode","bindMatrix","skeleton","material","uuids","animation","extractFromCache","recursive","_vector1","_vector2$1","_normalMatrix","Plane","setFromNormalAndCoplanarPoint","inverseNormalLength","negate","line","start","startSign","endSign","intersectsPlane","optionalNormalMatrix","getNormalMatrix","referencePoint","coplanarPoint","isPlane","_v0$1","_v1$3","_v2$2","_v3$1","_vab","_vac","_vbc","_vap","_vbp","_vcp","Triangle","i0","i1","i2","getNormal","setFromCoplanarPoints","getBarycoord","uv1","uv2","uv3","getUV","containsPoint","isFrontFacing","intersectsTriangle","d4","vc","addScaledVector","d5","d6","vb","va","denom","targetLengthSq","dot00","dot01","dot02","dot11","dot12","invDenom","u","p3","materialId","Material$1","fog","blending","side","vertexColors","opacity","transparent","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","depthTest","depthWrite","stencilWriteMask","stencilFunc","stencilRef","stencilFuncMask","stencilFail","stencilZFail","stencilZPass","stencilWrite","clippingPlanes","clipIntersection","clipShadows","shadowSide","colorWrite","precision","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaTest","alphaToCoverage","premultipliedAlpha","toneMapped","isMaterial","onBuild","onBeforeCompile","customProgramCacheKey","setValues","currentValue","isColor","flatShading","isRoot","color","getHex","roughness","metalness","sheen","emissive","emissiveIntensity","specular","shininess","clearcoat","clearcoatRoughness","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","clearcoatNormalScale","matcap","alphaMap","lightMap","lightMapIntensity","aoMap","aoMapIntensity","bumpMap","bumpScale","normalMap","normalMapType","normalScale","displacementMap","displacementScale","displacementBias","roughnessMap","metalnessMap","emissiveMap","specularMap","envMap","combine","envMapIntensity","reflectivity","refractionRatio","gradientMap","sizeAttenuation","linewidth","dashSize","gapSize","wireframe","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","morphTargets","morphNormals","skinning","srcPlanes","dstPlanes","_colorKeywords","_hslA","_hslB","hue2rgb","SRGBToLinear","LinearToSRGB","Color","setRGB","setHex","setStyle","hex","handleAlpha","string","parseFloat","components","parseInt","setHSL","setColorName","gammaFactor","safeInverse","copyGammaToLinear","copyLinearToGamma","copySRGBToLinear","copyLinearToSRGB","hue","saturation","lightness","getHSL","color1","color2","normalized","NAMES","MeshBasicMaterial","isMeshBasicMaterial","_vector$9","_vector2","BufferAttribute","itemSize","usage","updateRange","onUploadCallback","index1","index2","colors","vectors","fromBufferAttribute","setXY","setXYZ","applyNormalMatrix","isBufferAttribute","Uint16BufferAttribute","Uint16Array","Uint32BufferAttribute","Uint32Array","Float32BufferAttribute","Float32Array","arrayMax","_id","_m1","_offset","_box$1","_boxMorphTargets","_vector$8","BufferGeometry","morphAttributes","morphTargetsRelative","boundingSphere","drawRange","materialIndex","needsUpdate","tangent","computeBoundingSphere","makeRotationX","makeRotationY","makeRotationZ","makeTranslation","makeScale","translate","morphAttributesPosition","isGLBufferAttribute","setFromBufferAttribute","morphAttribute","isNaN","jl","indices","positions","normals","uvs","nVertices","tangents","tan1","tan2","vA","vB","vC","uvA","uvB","uvC","sdir","tdir","handleTriangle","tmp2","n2","handleVertex","isFinite","positionAttribute","normalAttribute","pA","pB","pC","nA","nB","nC","cb","ab","normalizeNormals","isBufferGeometry","attributeArray1","attribute2","attributeArray2","attributeOffset","convertBufferAttribute","array2","geometry2","newAttribute","morphArray","addGroup","hasMorphAttributes","attributeArray","setIndex","_inverseMatrix$2","_ray$2","_sphere$3","_vA$1","_vB$1","_vC$1","_tempA","_tempB","_tempC","_morphA","_morphB","_morphC","_uvA$1","_uvB$1","_uvC$1","_intersectionPoint","_intersectionPointWorld","Mesh","updateMorphTargets","morphTargetInfluences","morphTargetDictionary","ml","raycaster","intersects","intersection","intersectsBox","morphPosition","groupMaterial","checkBufferGeometryIntersection","faceIndex","face","isGeometry","morphInfluences","influence","boneTransform","intersectTriangle","checkIntersection","BoxGeometry","widthSegments","heightSegments","depthSegments","scope","vertices","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","cloneUniforms","mergeUniforms","uniforms","merged","UniformsUtils","ShaderMaterial","defines","vertexShader","fragmentShader","lights","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","glslVersion","isShaderMaterial","Camera","PerspectiveCamera","fov","aspect","zoom","focus","view","filmGauge","filmOffset","updateProjectionMatrix","focalLength","vExtentSlope","getFilmHeight","atan","tan","fullWidth","fullHeight","enabled","offsetX","offsetY","skew","getFilmWidth","makePerspective","isPerspectiveCamera","CubeCamera","renderTarget","isWebGLCubeRenderTarget","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","renderer","scene","currentXrEnabled","currentRenderTarget","getRenderTarget","setRenderTarget","CubeTexture","_needsFlipEnvMap","isCubeTexture","WebGLCubeRenderTarget","dummy","isInteger","shader","tEquirect","mesh","currentMinFilter","stencil","clear","DataTexture","_sphere$2","_vector$7","Frustum","p4","p5","planes","frustum","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","setComponents","sprite","negRadius","WebGLAnimation","isAnimating","animationLoop","requestId","onAnimationFrame","time","frame","requestAnimationFrame","stop","cancelAnimationFrame","setAnimationLoop","setContext","WebGLAttributes","gl","capabilities","isWebGL2","buffers","WeakMap","isInterleavedBufferAttribute","deleteBuffer","delete","bufferType","cached","bytesPerElement","elementSize","createBuffer","bindBuffer","bufferData","Float64Array","isFloat16BufferAttribute","Int16Array","Int32Array","Int8Array","Uint8Array","BYTES_PER_ELEMENT","bufferSubData","subarray","updateBuffer","PlaneGeometry","width_half","height_half","segment_width","segment_height","ShaderChunk","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","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_common_pars_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_physical_pars_fragment","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_toon_fragment","lights_toon_pars_fragment","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","clearcoat_normal_fragment_begin","clearcoat_normal_fragment_maps","clearcoat_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","transmissionmap_fragment","transmissionmap_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","background_frag","background_vert","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","meshmatcap_frag","meshmatcap_vert","meshtoon_frag","meshtoon_vert","meshphong_frag","meshphong_vert","meshphysical_frag","meshphysical_vert","normal_frag","normal_vert","points_frag","points_vert","shadow_frag","shadow_vert","sprite_frag","sprite_vert","UniformsLib","diffuse","uvTransform","uv2Transform","specularmap","envmap","flipEnvMap","maxMipLevel","aomap","lightmap","emissivemap","bumpmap","normalmap","displacementmap","roughnessmap","metalnessmap","gradientmap","fogDensity","fogNear","fogFar","fogColor","ambientLightColor","lightProbe","directionalLights","directionalLightShadows","shadowBias","shadowNormalBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotLightShadows","spotShadowMap","spotShadowMatrix","pointLights","pointLightShadows","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","ltc_1","ltc_2","ShaderLib","basic","lambert","phong","standard","toon","dashed","totalSize","background","t2D","cube","equirect","distanceRGBA","referencePosition","nearDistance","farDistance","shadow","WebGLBackground","cubemaps","objects","planeMesh","boxMesh","clearColor","clearAlpha","currentBackground","currentBackgroundVersion","currentTonemapping","setClear","getClearColor","setClearColor","getClearAlpha","setClearAlpha","renderList","forceClear","isScene","session","getSession","environmentBlendMode","autoClear","autoClearColor","autoClearDepth","autoClearStencil","deleteAttribute","onBeforeRender","copyPosition","toneMapping","WebGLBindingStates","maxVertexAttributes","getParameter","extension","vaoAvailable","bindingStates","defaultState","createBindingState","currentState","bindVertexArrayObject","vao","bindVertexArray","bindVertexArrayOES","deleteVertexArrayObject","deleteVertexArray","deleteVertexArrayOES","newAttributes","enabledAttributes","attributeDivisors","program","initAttributes","enableAttribute","enableAttributeAndDivisor","meshPerAttribute","enableVertexAttribArray","disableUnusedAttributes","disableVertexAttribArray","vertexAttribPointer","stride","vertexAttribIPointer","reset","resetDefaultState","setup","updateBuffers","programMap","stateMap","createVertexArray","createVertexArrayOES","getBindingState","cachedAttributes","geometryAttributes","attributesNum","cachedAttribute","geometryAttribute","saveCache","isInstancedBufferGeometry","programAttributes","getAttributes","materialDefaultAttributeValues","programAttribute","isInstancedInterleavedBuffer","_maxInstanceCount","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","setupVertexAttributes","geometryId","programId","releaseStatesOfGeometry","releaseStatesOfProgram","WebGLBufferRenderer","mode","setMode","drawArrays","renderInstances","primcount","WebGLCapabilities","maxAnisotropy","getMaxPrecision","getShaderPrecisionFormat","WebGL2RenderingContext","WebGL2ComputeRenderingContext","maxPrecision","logarithmicDepthBuffer","maxTextures","maxVertexTextures","maxTextureSize","maxCubemapSize","maxAttributes","maxVertexUniforms","maxVaryings","maxFragmentUniforms","vertexTextures","floatFragmentTextures","getMaxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","floatVertexTextures","maxSamples","WebGLClipping","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","uniform","resetGlobalState","numPlanes","numIntersection","projectPlanes","skipTransform","nPlanes","dstArray","flatSize","viewMatrix","i4","init","enableLocalClipping","beginShadows","endShadows","useCache","materialProperties","nGlobal","lGlobal","clippingState","WebGLCubeMaps","mapTextureMapping","onTextureDispose","cubemap","fromEquirectangularTexture","WebGLExtensions","getExtension","WebGLGeometries","wireframeAttributes","onGeometryDispose","memory","updateWireframeAttribute","geometryIndex","geometryPosition","previousAttribute","getWireframeAttribute","currentAttribute","WebGLIndexedBufferRenderer","drawElements","WebGLInfo","calls","triangles","lines","programs","autoReset","instanceCount","numericalSort","absNumericalSort","WebGLMorphtargets","influencesList","workInfluences","objectInfluences","influences","sort","MAX_SAFE_INTEGER","morphInfluencesSum","hasAttribute","morphBaseInfluence","getUniforms","setValue","WebGLObjects","updateMap","onInstancedMeshDispose","instancedMesh","buffergeometry","hasEventListener","physical","transmission","transmissionMap","DataTexture2DArray","wrapR","isDataTexture2DArray","DataTexture3D","isDataTexture3D","emptyTexture","emptyTexture2dArray","emptyTexture3d","emptyCubeTexture","arrayCacheF32","arrayCacheI32","mat4array","mat3array","mat2array","flatten","nBlocks","blockSize","firstElem","arraysEqual","copyArray","allocTexUnits","allocateTextureUnit","setValueV1f","uniform1f","addr","setValueV2f","uniform2f","uniform2fv","setValueV3f","uniform3f","uniform3fv","setValueV4f","uniform4f","uniform4fv","setValueM2","uniformMatrix2fv","setValueM3","uniformMatrix3fv","setValueM4","uniformMatrix4fv","setValueV1i","uniform1i","setValueV2i","uniform2iv","setValueV3i","uniform3iv","setValueV4i","uniform4iv","setValueV1ui","uniform1ui","setValueV2ui","uniform2uiv","setValueV3ui","uniform3uiv","setValueV4ui","uniform4uiv","setValueT1","unit","safeSetTexture2D","setValueT3D1","setTexture3D","setValueT6","safeSetTextureCube","setValueT2DArray1","setTexture2DArray","setValueV1fArray","uniform1fv","setValueV2fArray","setValueV3fArray","setValueV4fArray","setValueM2Array","setValueM3Array","setValueM4Array","setValueV1iArray","uniform1iv","setValueV2iArray","setValueV3iArray","setValueV4iArray","setValueV1uiArray","uniform1uiv","setValueV2uiArray","setValueV3uiArray","setValueV4uiArray","setValueT1Array","units","setValueT6Array","SingleUniform","activeInfo","getSingularSetter","PureArrayUniform","getPureArraySetter","StructuredUniform","seq","updateCache","RePathPart","addUniform","container","uniformObject","parseUniform","pathLength","lastIndex","matchEnd","idIsIndex","subscript","WebGLUniforms","getProgramParameter","getActiveUniform","getUniformLocation","WebGLShader","createShader","shaderSource","compileShader","setOptional","seqWithValue","programIdCount","getEncodingComponents","getShaderErrors","getShaderParameter","getShaderInfoLog","addLineNumbers","getShaderSource","getTexelDecodingFunction","functionName","getTexelEncodingFunction","getToneMappingFunction","toneMappingName","filterEmptyLine","replaceLightNums","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","numDirLightShadows","numSpotLightShadows","numPointLightShadows","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","includePattern","resolveIncludes","includeReplacer","include","deprecatedUnrollLoopPattern","unrollLoopPattern","unrollLoops","loopReplacer","deprecatedLoopReplacer","snippet","generatePrecision","precisionstring","WebGLProgram","prefixVertex","prefixFragment","shadowMapTypeDefine","shadowMapType","generateShadowMapTypeDefine","envMapTypeDefine","envMapMode","generateEnvMapTypeDefine","envMapModeDefine","generateEnvMapModeDefine","envMapBlendingDefine","generateEnvMapBlendingDefine","gammaFactorDefine","customExtensions","extensionDerivatives","envMapCubeUV","tangentSpaceNormalMap","shaderID","extensionFragDepth","rendererExtensionFragDepth","extensionDrawBuffers","rendererExtensionDrawBuffers","extensionShaderTextureLOD","rendererExtensionShaderTextureLod","generateExtensions","customDefines","chunks","generateDefines","createProgram","versionString","isRawShaderMaterial","shaderName","instancing","instancingColor","supportsVertexTextures","maxBones","useFog","fogExp2","objectSpaceNormalMap","vertexTangents","vertexAlphas","vertexUvs","uvsVertexOnly","useVertexTexture","doubleSided","flipSided","shadowMapEnabled","physicallyCorrectLights","mapEncoding","matcapEncoding","envMapEncoding","emissiveMapEncoding","lightMapEncoding","outputEncoding","depthPacking","cachedUniforms","fragmentGlsl","glVertexShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","debug","checkShaderErrors","programLog","getProgramInfoLog","vertexLog","fragmentLog","runnable","haveDiagnostics","vertexErrors","fragmentErrors","getError","diagnostics","deleteShader","getActiveAttrib","getAttribLocation","fetchAttributeLocations","destroy","deleteProgram","usedTimes","WebGLPrograms","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","MeshMatcapMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","SpriteMaterial","parameterNames","getTextureEncodingFromMap","getParameters","shadows","environment","isMeshStandardMaterial","bones","nVertexUniforms","nVertexMatrices","getMaxBones","isFogExp2","directional","spot","rectArea","hemi","shadowMap","getProgramCacheKey","acquireProgram","pl","preexistingProgram","releaseProgram","WebGLProperties","painterSortStable","groupOrder","reversePainterSortStable","WebGLRenderList","renderItems","renderItemsIndex","opaque","defaultProgram","getNextRenderItem","renderItem","finish","customOpaqueSort","customTransparentSort","WebGLRenderLists","lists","renderCallDepth","UniformsCache","light","halfWidth","halfHeight","nextVersion","shadowCastingLightsFirst","lightA","lightB","WebGLLights","shadowCache","ShadowUniformsCache","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","numDirectionalShadows","numPointShadows","numSpotShadows","ambient","probe","directionalShadow","spotShadow","rectAreaLTC1","rectAreaLTC2","pointShadow","vector3","matrix42","intensity","isAmbientLight","isLightProbe","sh","coefficients","isDirectionalLight","shadowUniforms","bias","normalBias","mapSize","isSpotLight","penumbra","isRectAreaLight","isPointLight","isHemisphereLight","LTC_FLOAT_1","LTC_FLOAT_2","LTC_HALF_1","LTC_HALF_2","setupView","identity","WebGLRenderState","lightsArray","shadowsArray","setupLights","setupLightsView","pushLight","pushShadow","shadowLight","WebGLRenderStates","renderStates","renderState","isMeshDepthMaterial","isMeshDistanceMaterial","WebGLShadowMap","_renderer","_objects","_capabilities","_frustum","_shadowMapSize","_viewportSize","_viewport","_depthMaterials","_distanceMaterials","_materialCache","_maxTextureSize","0","1","2","shadowMaterialVertical","SAMPLE_RATE","HALF_SAMPLE_RATE","shadow_pass","resolution","shadowMaterialHorizontal","HORIZONTAL_PASS","fullScreenTri","fullScreenMesh","VSMPass","mapPass","renderBufferDirect","getDepthMaterialVariant","useMorphing","useSkinning","useInstancing","getDistanceMaterialVariant","getDepthMaterial","getMaterialVariant","customMaterial","customDepthMaterial","customDistanceMaterial","keyA","keyB","materialsForVariant","cachedMaterial","renderObject","shadowCamera","intersectsObject","kl","depthMaterial","autoUpdate","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","_state","setBlending","setTest","setScissorTest","shadowFrameExtents","getFrameExtents","isPointLightShadow","pars","viewportCount","getViewportCount","vp","getViewport","updateMatrices","getFrustum","WebGLState","colorBuffer","locked","currentColorMask","currentColorClear","setMask","colorMask","setLocked","lock","currentDepthMask","currentDepthFunc","currentDepthClear","enable","disable","depthMask","setFunc","clearDepth","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","stencilMask","setOp","stencilOp","clearStencil","enabledCapabilities","xrFramebuffer","currentBoundFramebuffers","currentProgram","currentBlendingEnabled","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","lineWidthAvailable","glVersion","currentTextureSlot","currentBoundTextures","currentScissor","currentViewport","createTexture","bindTexture","texParameteri","texImage2D","emptyTextures","setFlipSided","setCullFace","equationToGL","MIN_EXT","MAX_EXT","factorToGL","blendEquationSeparate","blendFuncSeparate","blendFunc","frontFace","cullFace","setPolygonOffset","factor","activeTexture","webglSlot","bindFramebuffer","framebuffer","bindXRFramebuffer","useProgram","setMaterial","frontFaceCW","setLineWidth","lineWidth","webglType","webglTexture","boundTexture","unbindTexture","compressedTexImage2D","texImage3D","WebGLTextures","_gl","_videoTextures","useOffscreenCanvas","OffscreenCanvas","createCanvas","resizeImage","needsPowerOfTwo","needsNewCanvas","maxSize","isPowerOfTwo$1","textureNeedsGenerateMipmaps","supportsMips","generateMipmap","__maxMipLevel","log2","getInternalFormat","internalFormatName","glFormat","glType","filterFallback","textureProperties","__webglInit","deleteTexture","__webglTexture","deallocateTexture","isVideoTexture","onRenderTargetDispose","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","__webglMultisampledFramebuffer","__webglColorRenderbuffer","__webglDepthRenderbuffer","deallocateRenderTarget","textureUnits","setTexture2D","slot","updateVideoTexture","__version","complete","uploadTexture","setTextureCube","initTexture","pixelStorei","isCompressed","isCompressedTexture","cubeImage","convert","glInternalFormat","setTextureParameters","mipmap","mipmapImage","uploadCubeTexture","wrappingToGL","filterToGL","textureType","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","textureNeedsPowerOfTwo","isDepthTexture","setupFrameBufferTexture","attachment","textureTarget","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","isMultisample","bindRenderbuffer","samples","getRenderTargetSamples","renderbufferStorageMultisample","renderbufferStorage","framebufferRenderbuffer","setupDepthRenderbuffer","isCube","webglDepthTexture","setupDepthTexture","createRenderbuffer","isWebGLMultisampleRenderTarget","warnedTexture2D","warnedTextureCube","textureUnit","resetTextureUnits","setupRenderTarget","isRenderTarget3D","createFramebuffer","glTextureType","updateRenderTargetMipmap","updateMultisampleRenderTarget","blitFramebuffer","WebGLUtils","HALF_FLOAT_OES","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","COMPRESSED_RGB8_ETC2","COMPRESSED_RGBA8_ETC2_EAC","UNSIGNED_INT_24_8_WEBGL","ArrayCamera","cameras","isArrayCamera","Group","isGroup","_moveEvent","WebXRController","_targetRay","_grip","_hand","joints","inputState","pinching","hasLinearVelocity","linearVelocity","hasAngularVelocity","angularVelocity","inputSource","referenceSpace","inputPose","gripPose","handPose","targetRay","grip","hand","visibilityState","getPose","targetRaySpace","transform","inputjoint","jointPose","getJointPose","jointName","joint","jointRadius","indexTip","thumbTip","distanceToPinch","handedness","gripSpace","WebXRManager","framebufferScaleFactor","referenceSpaceType","pose","controllers","inputSourcesMap","cameraL","cameraR","cameraVR","_currentDepthNear","_currentDepthFar","onSessionEvent","controller","onSessionEnd","disconnect","isPresenting","onInputSourcesChange","inputSources","removed","added","getController","getTargetRaySpace","getControllerGrip","getGripSpace","getHand","getHandSpace","setFramebufferScaleFactor","setReferenceSpaceType","getReferenceSpace","setSession","getContextAttributes","xrCompatible","makeXRCompatible","layerInit","antialias","baseLayer","XRWebGLLayer","updateRenderState","requestReferenceSpace","cameraLPos","cameraRPos","updateCamera","getCamera","depthNear","depthFar","ipd","projL","projR","topFov","bottomFov","leftFov","rightFov","zOffset","xOffset","translateX","translateZ","near2","far2","left2","right2","top2","bottom2","setProjectionFromUnion","onAnimationFrameCallback","getViewerPose","views","cameraVRNeedsUpdate","WebGLMaterials","refreshUniformsCommon","uvScaleMap","uv2ScaleMap","refreshUniformsStandard","refreshFogUniforms","isFog","density","refreshMaterialUniforms","pixelRatio","isMeshLambertMaterial","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsToon","isMeshPhongMaterial","refreshUniformsPhong","isMeshPhysicalMaterial","refreshUniformsPhysical","isMeshMatcapMaterial","refreshUniformsMatcap","refreshUniformsDepth","refreshUniformsDistance","isMeshNormalMaterial","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isSpriteMaterial","refreshUniformsSprites","isShadowMaterial","WebGLRenderer","display","createCanvasElement","_context","_alpha","_depth","_stencil","_antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","_failIfMajorPerformanceCaveat","failIfMajorPerformanceCaveat","currentRenderList","currentRenderState","renderListStack","renderStateStack","domElement","sortObjects","toneMappingExposure","_isContextLost","_currentActiveCubeFace","_currentActiveMipmapLevel","_currentRenderTarget","_currentMaterialId","_currentCamera","_currentViewport","_currentScissor","_currentScissorTest","_width","_height","_pixelRatio","_opaqueSort","_transparentSort","_scissor","_scissorTest","_clippingEnabled","_localClippingEnabled","_projScreenMatrix","_vector3","_emptyScene","overrideMaterial","getTargetPixelRatio","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","contextNames","contextAttributes","contextName","onContextLost","onContextRestore","isWebGL1Renderer","shift","initGLContext","preventDefault","infoAutoReset","shadowMapAutoUpdate","shadowMapNeedsUpdate","onMaterialDispose","releaseMaterialProgramReferences","deallocateMaterial","forceContextLoss","loseContext","forceContextRestore","restoreContext","getPixelRatio","setPixelRatio","setSize","updateStyle","setViewport","getDrawingBufferSize","setDrawingBufferSize","getCurrentViewport","getScissor","setScissor","getScissorTest","boolean","setOpaqueSort","setTransparentSort","bits","onXRSessionStart","onXRSessionEnd","renderBufferImmediate","hasPositions","hasNormals","hasUvs","hasColors","positionArray","normalArray","uvArray","colorArray","setProgram","rangeFactor","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","isSprite","getProgram","projectObject","isLOD","intersectsSprite","isImmediateRenderObject","renderObjects","camera2","renderObjectImmediate","onAfterRender","lightsStateVersion","programCacheKey","updateCommonMaterialProperties","needsLights","materialNeedsLights","progUniforms","uniformsList","needsProgramChange","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","uCamPos","cameraPosition","isOrthographicCamera","boneTexture","boneMatrices","boneTextureSize","setFromProjectionMatrix","opaqueObjects","transparentObjects","layer","framebufferTextureLayer","readRenderTargetPixels","activeCubeFaceIndex","textureFormat","halfFloatSupportedByExt","checkFramebufferStatus","readPixels","copyFramebufferToTexture","level","levelScale","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","texSubImage2D","compressedTexSubImage2D","copyTextureToTexture3D","sourceBox","glTarget","unpackRowLen","unpackImageHeight","unpackSkipPixels","unpackSkipRows","unpackSkipImages","texSubImage3D","resetState","__THREE_DEVTOOLS__","CustomEvent","detail","WebGL1Renderer","Scene","InterleavedBuffer","arrayBuffers","_uuid","ib","setUsage","isInterleavedBuffer","_vector$6","InterleavedBufferAttribute","interleavedBuffer","interleavedBuffers","_basePosition","_skinIndex","_skinWeight","_vector$5","_matrix","SkinnedMesh","bindMatrixInverse","calculateInverses","skinWeight","manhattanLength","setXYZW","skinIndex","weight","getComponent","boneIndex","boneInverses","Bone","isBone","_offsetMatrix","_identityMatrix","Skeleton","inverse","bone","json","boneInverse","linecap","linejoin","_start$1","_end$1","_inverseMatrix$1","_ray$1","_sphere$1","Line","lineDistances","threshold","localThreshold","localThresholdSq","vStart","vEnd","interSegment","interRay","distanceSqToSegment","_start","_end","LineSegments","LineLoop","_inverseMatrix","_ray","_sphere","_position$2","Points","testPoint","rayPointDistanceSq","intersectPoint","closestPointToPoint","distanceToRay","CompressedTexture","CanvasTexture","isCanvasTexture","RawShaderMaterial","ior","AnimationUtils","arraySlice","isTypedArray","convertArray","forceClone","DataView","getKeyframeOrder","times","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","subclip","sourceClip","startFrame","endFrame","fps","clip","tracks","track","valueSize","getValueSize","minStartTime","resetDuration","makeClipAdditive","targetClip","referenceFrame","referenceClip","numTracks","referenceTime","referenceTrack","referenceTrackType","ValueTypeName","targetTrack","find","referenceOffset","referenceValueSize","createInterpolant","isInterpolantFactoryMethodGLTFCubicSpline","targetOffset","targetValueSize","referenceValue","startIndex","endIndex","interpolant","evaluate","resultBuffer","numTimes","valueStart","multiplyQuaternionsFlat","valueEnd","blendMode","Interpolant","parameterPositions","sampleValues","sampleSize","_cachedIndex","settings","DefaultSettings_","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","mid","intervalChanged_","interpolate_","copySampleValue_","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","getSettings_","halfDt","o1","o0","oP","oN","wP","wN","ppp","sP","sN","LinearInterpolant","offset1","offset0","weight1","weight0","DiscreteInterpolant","KeyframeTrack","interpolation","TimeBufferType","ValueBufferType","setInterpolation","DefaultInterpolation","factoryMethod","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","timeOffset","timeScale","startTime","endTime","nKeys","valid","prevTime","currTime","smoothInterpolation","getInterpolation","writeIndex","keep","offsetP","offsetN","readOffset","writeOffset","TypedKeyframeTrack","trackType","BooleanKeyframeTrack","ColorKeyframeTrack","NumberKeyframeTrack","QuaternionLinearInterpolant","slerpFlat","QuaternionKeyframeTrack","StringKeyframeTrack","VectorKeyframeTrack","AnimationClip","duration","validate","optimize","jsonTracks","frameTime","parseKeyframeTrack","clipTracks","morphTargetSequence","noLoop","numMorphTargets","objectOrClipArray","clipArray","animationToMorphTargets","morphTarget","animationMorphTargets","clips","CreateFromMorphTargetSequence","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","typeName","getTrackTypeForValueTypeName","Cache","files","file","DefaultLoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","addHandler","regex","loader","removeHandler","getHandler","Loader","manager","crossOrigin","resourcePath","requestHeader","load","loading","FileLoader","setTimeout","dataUriRegexResult","mimeType","isBase64","decodeURIComponent","atob","Blob","parser","DOMParser","parseFromString","header","callbacks","overrideMimeType","CompressedTextureLoader","setPath","setResponseType","setWithCredentials","loaded","loadTexture","texDatas","mipmapCount","isCubemap","faces","ImageLoader","onImageLoad","onImageError","CubeTextureLoader","urls","setCrossOrigin","DataTextureLoader","texData","TextureLoader","isJPEG","Light","_projScreenMatrix$1","_lightPositionWorld$1","_lookTarget$1","LightShadow","_frameExtents","_viewportCount","_viewports","shadowMatrix","viewportIndex","SpotLightShadow","isSpotLightShadow","SpotLight","power","_lightPositionWorld","_lookTarget","PointLightShadow","_cubeDirections","_cubeUps","PointLight","OrthographicCamera","scaleW","scaleH","makeOrthographic","DirectionalLightShadow","isDirectionalLightShadow","DirectionalLight","LoaderUtils","TextDecoder","decode","escape","ImageBitmapLoader","createImageBitmap","fetch","fetchOptions","credentials","blob","colorSpaceConversion","imageBitmap","catch","isImageBitmapLoader","PropertyMixer","binding","mixFunction","mixFunctionAdditive","setIdentity","_slerp","_slerpAdditive","_setAdditiveIdentityQuaternion","_workIndex","_select","_setAdditiveIdentityOther","_lerp","_lerpAdditive","_setAdditiveIdentityNumeric","_mixBufferRegion","_mixBufferRegionAdditive","_setIdentity","_origIndex","_addIndex","cumulativeWeight","cumulativeWeightAdditive","useCount","referenceCount","accuIndex","currentWeight","mix","weightAdditive","originalValueOffset","targetIndex","workOffset","_RESERVED_CHARS_RE","_reservedRe","_wordChar","_wordCharOrDot","_directoryRe","_nodeRe","_objectRe","_propertyRe","_trackRe","_supportedObjectNames","Composite","targetGroup","optionalParsedPath","parsedPath","PropertyBinding","parseTrackName","_targetGroup","_bindings","subscribe_","firstValidIndex","nCachedObjects_","bindings","unbind","rootNode","node","findNode","nodeName","_getValue_unbound","_setValue_unbound","resolvedProperty","propertyIndex","targetObject","dest","targetArray","sourceArray","objectName","_getValue_unavailable","_setValue_unavailable","objectIndex","nodeProperty","versioning","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","bindingType","BindingType","Direct","ArrayElement","HasFromToArray","EntireArray","GetterByBindingType","SetterByBindingTypeAndVersioning","root","isAnimationObjectGroup","results","lastDot","getBoneByName","subTreeNode","searchNodeSubtree","childNode","_getValue_direct","_getValue_array","_getValue_arrayElement","_getValue_toArray","_setValue_direct","_setValue_direct_setNeedsUpdate","_setValue_direct_setMatrixWorldNeedsUpdate","_setValue_array","_setValue_array_setNeedsUpdate","_setValue_array_setMatrixWorldNeedsUpdate","_setValue_arrayElement","_setValue_arrayElement_setNeedsUpdate","_setValue_arrayElement_setMatrixWorldNeedsUpdate","_setValue_fromArray","_setValue_fromArray_setNeedsUpdate","_setValue_fromArray_setMatrixWorldNeedsUpdate","AnimationAction","mixer","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","loop","_loopCount","_startTime","_effectiveTimeScale","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","_activateAction","_deactivateAction","stopFading","stopWarping","_isActiveAction","_scheduleFading","fadeOutAction","warp","fadeOut","fadeIn","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","fadeInAction","crossFadeFrom","weightInterpolant","_takeBackControlInterpolant","startTimeScale","endTimeScale","now","_lendControlInterpolant","timeScaleInterpolant","_root","deltaTime","timeDirection","timeRunning","_updateTimeScale","clipTime","_updateTime","_updateWeight","propertyMixers","accumulateAdditive","accumulate","interpolantValue","loopCount","pingPong","_setEndings","handle_stop","loopDelta","pending","atStart","atEnd","weightNow","weightThen","AnimationMixer","_initMemoryManager","_accuIndex","prototypeAction","rootUuid","bindingsByRoot","_bindingsByRootAndName","bindingsByName","_addInactiveBinding","clipUuid","actionsForClip","_actionsByClip","_bindAction","knownActions","_addInactiveAction","_lendBinding","saveOriginalState","_lendAction","restoreOriginalState","_takeBackBinding","_takeBackAction","_actions","_nActiveActions","_nActiveBindings","_controlInterpolants","_nActiveControlInterpolants","stats","actions","controlInterpolants","actionsByClip","actionByRoot","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","_removeInactiveBindingsForAction","_removeInactiveBinding","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","optionalRoot","clipObject","findByName","existingAction","newAction","nActions","_update","nBindings","timeInSeconds","actionsToRemove","_removeInactiveAction","Raycaster","LOD","Sprite","coords","unproject","intersectObject","ascSort","raycast","Spherical","other","EPS","setFromCartesianCoords","_vector$2","_boneMatrix","_matrixWorldInv","SkeletonHelper","getBoneList","isSkeletonHelper","boneList","_floatView","_int32View","DataUtils","SIZE_MAX","EXTRA_LOD_SIGMA","TOTAL_LODS","LOD_MAX","MAX_SAMPLES","ENCODINGS","backgroundMaterial","backgroundBox","_flatCamera$1","_createPlanes","_lodPlanes","_sizeLods","_sigmas","_clearColor","_oldTarget","PHI","INV_PHI","_axisDirections","convertLinearToRGBE","maxComponent","fExp","PMREMGenerator","_pingPongRenderTarget","_blurMaterial","weights","poleAxis","_getBlurShader","_equirectShader","_cubemapShader","_compileMaterial","sigma","cubeUVRenderTarget","_allocateTargets","_sceneToCubeUV","_blur","_applyPMREM","_cleanup","equirectangular","_fromTexture","_getCubemapShader","_getEquirectShader","outputTarget","_setViewport","_textureToCubeUV","_isLDR","_createRenderTarget","tmpMesh","cubeCamera","upSign","forwardSign","originalAutoClear","useSolidColor","convertSRGBToLinear","col","lodIn","lodOut","pingPongRenderTarget","_halfBlur","targetIn","targetOut","sigmaRadians","blurMaterial","blurMesh","blurUniforms","pixels","radiansPerPixel","sigmaPixels","sum","outputSize","lod","sizeLod","texelSize","positionSize","uvSize","faceIndexSize","coordinates","fill","extractUrlBase","Handlers","optionalTarget","empty","isIntersectionBox","isIntersectionSphere","setFromMatrix","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBufferAttribute","applyToVector3Array","getInverse","extractPosition","getPosition","setRotationFromQuaternion","multiplyToArray","multiplyVector4","rotateAxis","crossVector","rotateX","rotateY","rotateZ","rotateByAxis","makeFrustum","isIntersectionLine","intersectsLine","isIntersectionPlane","area","getArea","barycoordFromPoint","midpoint","getMidpoint","prototypenormal","getPlane","distanceToManhattan","manhattanDistanceTo","lengthManhattan","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","setFromMatrixScale","getColumnFromMatrix","applyProjection","getChildByName","getObjectByName","renderDepth","getWorldRotation","applyMatrix","eulerOrder","useQuaternion","setDrawMode","drawMode","initBones","setLens","setFocalLength","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","dynamic","setDynamic","copyIndicesArray","setArray","addIndex","addAttribute","addDrawCall","indexOffset","clearDrawCalls","clearGroups","computeOffsets","drawcalls","offsets","wrapAround","overdraw","wrapRGB","shading","clearTarget","animate","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","initMaterial","addPrePlugin","addPostPlugin","updateShadowMap","setFaceCulling","allocTextureUnit","setTexture","getActiveMipMapLevel","shadowMapCullFace","vr","gammaInput","gammaOutput","toneMappingWhitePoint","renderReverseSided","renderSingleSided","updateCubeMap","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","revision","__THREE__","_taskCache$1","DRACOLoader","decoderPath","decoderConfig","decoderBinary","decoderPending","workerLimit","workerPool","workerNextTaskID","workerSourceURL","defaultAttributeIDs","defaultAttributeTypes","taskConfig","attributeIDs","attributeTypes","useUniqueIDs","decodeGeometry","worker","taskKey","cachedTask","byteLength","taskID","taskCost","geometryPending","_getWorker","_worker","_callbacks","postMessage","_createGeometry","_releaseTask","geometryData","_initDecoder","useJS","WebAssembly","librariesPending","_loadLibrary","all","libraries","jsContent","wasmBinary","DRACOWorker","body","URL","createObjectURL","Worker","_taskCosts","_taskLoad","onmessage","terminate","decodeAttribute","draco","decoder","dracoGeometry","attributeName","attributeType","numComponents","num_components","numValues","num_points","dataType","DT_FLOAT32","DT_INT8","DT_INT16","DT_INT32","DT_UINT8","DT_UINT16","DT_UINT32","getDracoDataType","ptr","_malloc","GetAttributeDataArrayForAllPoints","HEAPF32","_free","onModuleLoaded","DracoDecoderModule","Decoder","decoderBuffer","DecoderBuffer","Init","decodingStatus","geometryType","GetEncodedGeometryType","TRIANGULAR_MESH","DecodeBufferToMesh","POINT_CLOUD","PointCloud","DecodeBufferToPointCloud","error_msg","attributeID","GetAttributeByUniqueId","GetAttributeId","GetAttribute","numIndices","num_faces","GetTrianglesUInt32Array","decodeIndex","GLTFLoader","dracoLoader","ktx2Loader","meshoptDecoder","pluginCallbacks","register","GLTFMaterialsClearcoatExtension","GLTFTextureBasisUExtension","GLTFTextureWebPExtension","GLTFMaterialsTransmissionExtension","GLTFLightsExtension","GLTFMeshoptCompression","_onError","gltf","plugins","decodeText","BINARY_EXTENSION_HEADER_MAGIC","EXTENSIONS","KHR_BINARY_GLTF","GLTFBinaryExtension","asset","GLTFParser","fileLoader","plugin","extensionsUsed","extensionName","extensionsRequired","KHR_MATERIALS_UNLIT","GLTFMaterialsUnlitExtension$1","KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS","GLTFMaterialsPbrSpecularGlossinessExtension","KHR_DRACO_MESH_COMPRESSION","GLTFDracoMeshCompressionExtension","KHR_TEXTURE_TRANSFORM","GLTFTextureTransformExtension","KHR_MESH_QUANTIZATION","GLTFMeshQuantizationExtension","setExtensions","setPlugins","GLTFRegistry","removeAll","KHR_LIGHTS_PUNCTUAL","KHR_MATERIALS_CLEARCOAT","KHR_MATERIALS_TRANSMISSION","KHR_TEXTURE_BASISU","EXT_TEXTURE_WEBP","EXT_MESHOPT_COMPRESSION","refs","uses","nodeDefs","nodes","nodeIndex","nodeLength","nodeDef","_addNodeRef","lightIndex","dependency","lightNode","lightDef","innerConeAngle","outerConeAngle","createUniqueName","_loadLight","_getNodeRef","materialParams","materialDef","metallicRoughness","pbrMetallicRoughness","baseColorFactor","baseColorTexture","assignTexture","clearcoatFactor","clearcoatTexture","clearcoatRoughnessFactor","clearcoatRoughnessTexture","clearcoatNormalTexture","transmissionFactor","transmissionTexture","textureIndex","textureDef","loadTextureImage","isSupported","textureLoader","uri","detectSupport","Image","onload","bufferView","bufferViews","extensionDef","getDependency","supported","ready","byteOffset","byteStride","decodeGltfBuffer","BINARY_EXTENSION_CHUNK_TYPES","headerView","magic","getUint32","chunkContentsLength","chunkView","chunkIndex","chunkLength","chunkType","contentArray","preload","primitive","bufferViewIndex","gltfAttributeMap","threeAttributeMap","attributeNormalizedMap","attributeTypeMap","threeAttributeName","ATTRIBUTES","accessorDef","accessors","componentType","WEBGL_COMPONENT_TYPES","decodeDracoFile","texCoord","GLTFMeshStandardSGMaterial","isGLTFSpecularGlossinessMaterial","specularMapParsFragmentChunk","glossinessMapParsFragmentChunk","specularMapFragmentChunk","glossinessMapFragmentChunk","lightPhysicalFragmentChunk","glossiness","glossinessMap","_extraUniforms","uniformName","USE_SPECULARMAP","USE_GLOSSINESSMAP","USE_UV","specularGlossinessParams","pbrSpecularGlossiness","diffuseFactor","diffuseTexture","glossinessFactor","specularFactor","specularGlossinessTexture","specGlossMapDef","GLTFCubicSplineInterpolant","stride2","stride3","td","m0","m1","WEBGL_CONSTANTS$1","5120","5121","5122","5123","5125","5126","WEBGL_FILTERS","9728","9729","9984","9985","9986","9987","WEBGL_WRAPPINGS","33071","33648","10497","WEBGL_TYPE_SIZES","POSITION","NORMAL","TANGENT","TEXCOORD_0","TEXCOORD_1","COLOR_0","WEIGHTS_0","JOINTS_0","PATH_PROPERTIES$1","translation","INTERPOLATION","CUBICSPLINE","LINEAR","STEP","ALPHA_MODES","createDefaultMaterial","addUnknownExtensionsToUserData","knownExtensions","objectDef","gltfExtensions","assignExtrasToUserData","gltfDef","extras","meshDef","targetNames","createPrimitiveKey","primitiveDef","dracoExtension","createAttributesKey","attributesKey","getNormalizedComponentScale","associations","primitiveCache","meshCache","cameraCache","lightCache","nodeNamesUsed","_invokeAll","ext","_markDefs","beforeRoot","getDependencies","dependencies","scenes","afterRoot","skinDefs","skins","meshDefs","meshes","skinLength","skin","ref","func","loadScene","loadNode","_invokeOne","loadMesh","loadAccessor","loadBufferView","loadBuffer","loadMaterial","loadSkin","loadAnimation","loadCamera","defs","def","bufferIndex","bufferDef","bufferViewDef","accessorIndex","sparse","pendingBufferViews","bufferAttribute","TypedArray","elementBytes","itemBytes","ibSlice","ibCacheKey","itemSizeIndices","SCALAR","TypedArrayIndices","byteOffsetIndices","byteOffsetValues","sparseIndices","sparseValues","setX","setY","setZ","setW","webkitURL","sourceURI","isObjectURL","hasAlpha","colorType","getUint8","revokeObjectURL","sampler","samplers","mapName","mapDef","gltfReference","extendTexture","useVertexTangents","useVertexColors","useFlatShading","useMorphTargets","useMorphNormals","pointsMaterial","lineMaterial","materialType","materialExtensions","sgExtension","getMaterialType","extendParams","kmuExtension","metallicFactor","roughnessFactor","metallicRoughnessTexture","extendMaterialParams","alphaMode","alphaCutoff","normalTexture","occlusionTexture","strength","emissiveFactor","emissiveTexture","createMaterial","originalName","sanitizedName","sanitizeNodeName","primitives","createDracoPrimitive","decodePrimitive","addPrimitiveAttributes","geometryPromise","meshIndex","loadGeometries","normalizeSkinWeights","toTrianglesDrawMode","assignFinalMaterial","cameraIndex","cameraDef","yfov","aspectRatio","znear","zfar","xmag","ymag","skinDef","skinEntry","inverseBindMatrices","accessor","animationIndex","animationDef","pendingNodes","pendingInputAccessors","pendingOutputAccessors","pendingSamplers","pendingTargets","channels","input","inputAccessors","outputAccessors","targets","inputAccessor","outputAccessor","targetName","outputArray","scaled","meshPromise","createNodeMesh","createNodeAttachment","sceneIndex","sceneDef","nodeIds","buildNodeHierachy","nodeId","parentObject","pendingJoints","jointNodes","jointNode","mat","assignAttributeAccessor","gltfAttributeName","boxScale","maxDisplacement","expandByVector","computeBounds","hasMorphPosition","hasMorphNormal","pendingPositionAccessors","pendingNormalAccessors","pendingAccessor","morphPositions","addMorphTargets","getIndex","numberOfTriangles","newIndices","newGeometry","i$1","NONE","BASISLZ","ZSTD","ZLIB","BASICFORMAT","UNSPECIFIED","ETC1S","UASTC","SRGB","ITU","NTSC","SLOG","SLOG2","ALPHA_STRAIGHT","ALPHA_PREMULTIPLIED","RGB","RRR","GGG","AAA","RGBA","RRRG","U","vkFormat","typeSize","pixelWidth","pixelHeight","pixelDepth","layerCount","faceCount","supercompressionScheme","levels","dataFormatDescriptor","vendorId","descriptorType","versionNumber","descriptorBlockSize","colorModel","colorPrimaries","transferFunction","texelBlockDimension","bytesPlane","keyValue","globalData","_dataView","_littleEndian","getUint16","_","Buffer","heap","_taskCache","BasisTextureLoader","transcoderPath","transcoderBinary","transcoderPending","workerConfig","astcSupported","etc1Supported","etc2Supported","dxtSupported","bptcSupported","pvrtcSupported","_createTexture","_texture","Set","lowLevel","texturePending","_allocateWorker","jsLoader","binaryLoader","binaryContent","BasisWorker","EngineFormat","TranscoderFormat","BasisFormat","_initTranscoder","UASTC_4x4","ETC1","ETC2","BC1","BC3","BC4","BC5","BC7_M6_OPAQUE_ONLY","BC7_M5","PVRTC1_4_RGB","PVRTC1_4_RGBA","ASTC_4x4","ATC_RGB","ATC_RGBA_INTERPOLATED_ALPHA","RGBA32","RGB565","BGR565","RGBA4444","RGBA_ASTC_4x4_Format","RGBA_BPTC_Format","RGB_ETC1_Format","BasisModule","_EngineFormat","_TranscoderFormat","_BasisFormat","onRuntimeInitialized","BASIS","initializeBasis","basisFormat","getTranscoderFormat","transcoderFormat","engineFormat","blockByteLength","getBytesPerBlockOrPixel","assert","isFormatSupported","transcoder","LowLevelETC1SImageTranscoder","endpointCount","endpointsData","selectorCount","selectorsData","tablesData","decodePalettes","decodeTables","imageDesc","imageDescs","dstByteLength","getTranscodedImageByteLength","transcodeImage","getWidthInBlocks","getHeightInBlocks","rgbSliceByteOffset","rgbSliceByteLength","alphaSliceByteOffset","alphaSliceByteLength","imageFlags","transcodeUASTCImage","transcodeLowLevel","basisFile","BasisFile","isUASTC","getImageWidth","getImageHeight","getNumLevels","getHasAlpha","cleanup","close","startTranscoding","mip","mipWidth","mipHeight","getImageTranscodedSizeInBytes","transcode","FORMAT_OPTIONS","if","priorityETC1S","priorityUASTC","ETC1S_OPTIONS","UASTC_OPTIONS","opt","includes","getFormatBlockWidth","getFormatBlockHeight","formatIsUncompressed","paddedWidth","paddedHeight","_a$c","_b$b","_a$b","_b$a","dracoDecoderLocation","ktx2TranscoderLocation","importObject","env","emscripten_notify_memory_growth","ZSTDDecoder","wasm","arrayBuffer","instantiate","uncompressedSize","compressedSize","compressedPtr","malloc","ZSTD_findDecompressedSize","uncompressedPtr","actualSize","ZSTD_decompress","dec","free","KTX2Loader","basisLoader","zstd","MSC_TRANSCODER","setTranscoderPath","setWorkerLimit","ktx","_nextUint32","_nextUint64","levelData","uncompressedByteLength","_skip","_nextUint16","_nextUint8","D","bitOffset","bitLength","channelID","samplePosition","sampleLower","sampleUpper","_scan","B","A","S","L","I","R","E","T","O","P","G","extendedData","dfd","KTX2Utils","getBasicDFD","createLevels","parseConfig","getAlpha","parseInternalAsync","getPremultiplyAlpha","levelIndex","levelWidth","levelHeight","$retainerCount","$recentlyUsed","$evict","$evictionThreshold","$cache","CacheEvictionPolicy","evictionThreshold","recentlyUsedIndex","loadWithLoader","progressCallback","fraction","total","preloaded","$loader","$evictionPolicy","$GLTFInstance","CachingGLTFLoader","GLTFInstance","setDRACOLoader","setKTX2Loader","rawGLTFLoads","progress","gltfInstanceLoads","rawGLTF","prepare","preparedGLTF","retain","originalDispose","disposed","release","setDecoderPath","_value","gltfLoads","CSS2DObject","Element","parentNode","removeChild","cloneNode","isCSS2DObject","_vector","_viewMatrix","_viewProjectionMatrix","_a$a","_b$9","CSS2DRenderer","_widthHalf","_heightHalf","objectData","distanceToCameraSquared","getDistanceToSquared","appendChild","object1","object2","overflow","sorted","filterAndFlatten","zMax","zIndex","zOrder","deserializeUrl","toFullUrl","assertIsArCandidate","missingApis","partialUrl","throttle","ms","timer","throttled","flush","clearTimeout","debounce","lowerLimit","upperLimit","resolveDpr","HAS_META_VIEWPORT_TAG","metas","head","querySelectorAll","devicePixelRatio","isDebugMode","debugQueryParameter","ModelViewerElement","debugMode","timePasses","waitForEvent","eventName","predicate","DECAY_MILLISECONDS","Damper","decayMilliseconds","velocity","naturalFrequency","setDecayTime","xGoal","timeStepMilliseconds","xNormalization","nilSpeed","deltaX","intermediateVelocity","intermediateX","newVelocity","acceleration","numberNode","number","parseExpressions","inputString","expressions","parseIterations","expressionParseResult","parseExpression","expression","terms","remainingInput","IS_IDENT_RE","IS_OPERATOR_RE","IS_EXPRESSION_END_RE","parseFunctionArguments","identParseResult","parseIdent","identNode","parseHex","parseNumber","NOT_IDENT_RE","VALUE_RE","UNIT_RE","ALLOWED_UNITS","valueMatch","unitMatch","HEX_RE","hexMatch","expressionNodes","$visitedTypes","ASTWalker","visitedTypes","ast","remaining","ZERO","degreesToRadians","fallbackRadianValue","valueIsDegrees","lengthToBaseMeters","fallbackMeterValue","normalizeUnit","unitNormalizers","fallback","Hotspot","initialized","pivot","classList","updatePosition","updateNormal","contains","facingCamera","updateVisibility","positionNodes","setComponent","normalNodes","show","assignedNodes","nodeType","Node","ELEMENT_NODE","visibilityAttribute","dataset","reduceVertices","model","initialValue","vertex","Shadow","softness","shadowMaterial","shadowScale","isAnimated","setScene","animationNames","maxDimension","subScalar","shadowOffset","setSoftness","setMapSize","maxMapSize","widthPad","heightPad","setScaleAndOffset","radiansY","sizeY","setScalar","DEFAULT_HALF_FOV","DEFAULT_FOV_DEG","SAFE_RADIUS_RATIO","DEFAULT_TAN_FOV","normalWorld","vector3$1","ModelScene","annotationRenderer","isDirty","renderCount","externalRenderer","modelContainer","idealCameraDistance","fieldOfViewAspect","framedFieldOfView","shadowIntensity","shadowSoftness","exposure","canScale","tightBounds","goalTarget","targetDamperX","targetDamperY","targetDamperZ","_currentGLTF","cancelPendingSourceChange","animationsByName","currentAnimationAction","pointerEvents","shadowRoot","setupScene","framingInfo","framedRadius","frameModel","$renderer","updateBoundingBox","requestUpdate","getTarget","updateFraming","setShadowIntensity","setIntensity","stopAllAction","uncacheRoot","dpr","resize","setFromObject","radiusSquared","horizontalFov","radiusXZ","vertical","modelX","modelY","modelZ","updateTarget","goal","setShadowRotation","yaw","worldX","worldZ","setTime","getClip","crossfadeTime","animationClip","lastAnimationAction","clipAction","play","arPlacement","setRotation","pixelPosition","setFromCamera","hits","hit","hotspot","viewerPosition","forHotspots","hide","orient","updateHotspots","_mipmapMaterial","shaderMaterial","_getMipmapMaterial","_mesh","_flatCamera","_tempTarget","RoughnessMipmapper","roughnessUpdated","oldTarget","newRoughnessTarget","RADIUS","DELTA_PHI","vector2","addCorner","cornerX","cornerY","PlacementBox","numVertices","goalOpacity","opacityDamper","hitPlane","shadowHeight","screenX","screenY","hitResult","positionAndNormalFromPoint","_a","ARStatus","ARTracking","hitPosition","ARRenderer","currentSession","placeOnWall","placementBox","lastTick","turntableRotation","oldShadowIntensity","oldBackground","initialHitSource","transientHitTestSource","_presentedScene","resolveCleanup","exitWebXRButtonContainer","overlay","tracking","frames","placementComplete","isTranslating","isRotating","isTwoFingering","lastDragPosition","firstRatio","lastAngle","goalPosition","goalYaw","goalScale","xDamper","yDamper","zDamper","yawDamper","scaleDamper","onExitWebXRButtonContainerClick","stopPresenting","onUpdateScene","presentedScene","onSelectStart","hitSource","fingers","getHitTestResultsForTransientInput","gamepad","getHit","separation","fingerPolar","onSelectEnd","offsetHeight","threeRenderer","requestSession","requiredFeatures","optionalFeatures","domOverlay","waitForAnimationFrame","_reject","setHotspotsVisibility","resolveARSession","postSessionCleanup","once","exitButton","viewerRefSpace","XRRay","DOMPoint","space","offsetRay","hitTestSource","performance","cleanupPromise","setTarget","setShadowScaleAndOffset","orientHotspots","$onResize","getBoundingClientRect","hitSourceInitial","getCameraOrbit","cameraDirection","requestViewportScale","recommendedViewportScale","hitTestResults","getHitTestResults","hitPoint","getHitPoint","placeModel","requestHitTestSourceForTransientInput","profile","refSpace","hitMatrix","fingerOne","fingerTwo","deltaY","deltaYaw","finger","oldScale","newScale","updateOpacity","$sceneIsReady","isFirstView","updateView","placeInitially","processInput","moveScene","preRender","DEPTH_BUFFER_BIT","Debugger","THREE","Texture","PlaneBufferGeometry","SkeletonUtils","pos","quat","bindBoneMatrix","relativeMatrix","globalMatrix","preserveMatrix","preservePosition","preserveHipPosition","useTargetMatrix","hip","names","bindBones","boneTo","bonesPosition","sourceBones","getBones","wBindMatrix","setPosition","useFirstFramePosition","getHelperFromSkeleton","positionOffset","boneData","numFrames","convertedTracks","boneDatas","retarget","uncacheAction","targetParentPos","targetPos","sourceParentPos","sourcePos","targetDir","sourceDir","nameKeys","nameValues","boneParent","getNearestBone","boneToParent","laterialAngle","makeRotationFromEuler","trackData","targetSkeleton","targetBones","sourceLookup","cloneLookup","parallelTraverse","sourceNode","clonedNode","clonedMesh","sourceMesh","$prepared","$prepare","$preparedGLTF","$clone","GLTFInstanceConstructor","prepared","alphaChunk","$threeGLTF","$gltf","$gltfElementMap","$threeObjectMap","$parallelTraverseThreeScene","$correlateOriginalThreeGLTF","$correlateCloneThreeGLTF","CorrelatedSceneGraph","threeGLTF","threeObjectMap","gltfElementMap","variantIndex","updatedMaterials","meshVariantData","mappings","variants","gltfElement","threeObjects","upstreamCorrelatedSceneGraph","defaultMaterial","defaultReference","gltfElementReference","threeObject","cloneThreeGLTF","originalThreeGLTF","originalGLTF","cloneGLTF","cloneThreeObjectMap","cloneGLTFELementMap","cloneObject","elementReference","cloneElement","cloneObjects","sceneOne","sceneTwo","$cloneAndPatchMaterial","$correlatedSceneGraph","ModelViewerGLTFInstance","sourceUUIDToClonedMaterial","correlatedSceneGraph","Renderer","singleton","roughnessMipmapper","oldOnBeforeCompile","meshesToDuplicate","duplicateMaterials","backMaterial","duplicateMaterial","meshBack","RGBELoader","rgbe_error","rgbe_error_code","msg","fgets","lineLimit","consume","chunk","RGBEByteToRGBFloat","sourceOffset","destArray","destOffset","RGBEByteToRGBHalf","toHalfFloat","byteArray","rgbe_header_info","gamma_re","exposure_re","format_re","dimensions_re","comments","programtype","gamma","RGBE_ReadHeader","image_rgba_data","scanline_width","data_rgba","ptr_end","rgbeStart","scanline_buffer","num_scanlines","isEncodedRun","byteValue","RGBE_ReadPixels_RLE","numElements","floatArray","halfArray","EnvironmentScene","roomMaterial","boxMaterial","mainLight","room","box1","box2","box3","box4","box5","box6","light1","createAreaLightMaterial","light2","light3","light4","light5","light6","EnvironmentSceneAlt","light7","HDR_FILE_RE","ldrLoader","hdrLoader","TextureUtils","generatedEnvironmentMap","generatedEnvironmentMapAlt","skyboxCache","environmentMapCache","isHDR","addMetadata","skyboxUrl","environmentMap","progressTracker","updateGenerationProgress","beginActivity","useAltEnvironment","environmentMapUrl","skyboxLoads","loadSkyboxFromUrl","environmentMapLoads","loadEnvironmentMapFromUrl","loadGeneratedEnvironmentMapAlt","loadGeneratedEnvironmentMap","skybox","skyboxMapLoads","cubeUV","fromEquirectangular","compileEquirectangularShader","defaultScene","fromScene","allTargetsLoad","targetLoads","SCALE_STEPS","debugger","multipleScenesVisible","scaleStep","lastStep","avgFrameDuration","onWebGLContextLost","sourceEvent","canvasElement","canvas3D","arRenderer","textureUtils","canRender","initializeKTX2Loader","updateRendererSize","$updateSize","scaleFactor","widthCSS","heightCSS","addScene","removeScene","$canvas","visibleScenes","visibleCanvas","modelIsVisible","parentElement","$tick","exposureIsNumber","isShadowDirty","onWebXRFrame","postRender","selectCanvas","updateRendererScale","orderedScenes","visibleScene","context2D","clearRect","_singleton","_a$9","_b$8","_a$8","_b$7","_c$3","_d$1","_f","_g","_h","_j","_k","dataUrlToBlob","base64DataUrl","typeMatch","base64","byteCharacters","byteArrays","byteNumbers","$ongoingActivities","$announceTotalProgress","$eventDelegate","ProgressTracker","createDocumentFragment","activity","ongoingActivityCount","nextProgress","totalProgress","statusCount","completedActivities","__decorate$7","decorators","blobCanvas","blobContext","$template","$fallbackResizeHandler","$defaultAriaLabel","$resizeObserver","$clearModelTimeout","$onContextLost","$loaded","$intersectionObserver","$isElementInViewport","$announceModelVisibility","$ariaLabel","$loadedTime","$updateSource","$markLoaded","$container","$userInputElement","$scene","$needsRender","$onModelLoad","$progressTracker","$getLoaded","$getModelIsVisible","$shouldAttemptPreload","$hasTransitioned","toVector3D","ModelViewerElementBase","alt","boundingRect","oldVisibility","newVisibility","sourceError","styleElement","attachShadow","isConnected","rect","contentRect","isIntersecting","rootMargin","observe","registerScene","unobserve","unregisterScene","ariaLabel","encoderOptions","displayCanvas","qualityArgument","idealAspect","outputWidth","outputHeight","oldHeight","oldWidth","msToBlob","toBlob","_time","_delta","updateSourceProgress","setSource","tagName","prepareTemplate","makeTemplate","is","minScale","__decorate$6","$changeAnimation","$paused","$hotspotMap","$mutationCallback","$observer","$addHotspot","$removeHotspot","worldToModel","worldToModelNormal","durl","u8","u16","u32","fleb","fdeb","clim","freb","eb","_a$7","fl","revfl","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","flt","fdt","flm","fdm","shft","slc","wbits","wbits16","hTree","t2","et","maxSym","tr","mbt","ln","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","wfblk","out","dat","wblk","final","syms","lf","li","bs","bl","dlt","mlb","_b","ddt","mdb","_c","lclt","nlc","lcdt","ndc","lcfreq","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","clct","deo","crct","crc","cr","dopt","pre","post","st","lvl","plvl","lst","msk_1","prev","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","nl","mmd","md","ti","lin","din","dflt","mem","mrg","wbytes","deflateSync","fltn","TextEncoder","stream","strToU8","latin1","ar_1","ar","ai","exfl","wzh","extra","exl","os","flag","compression","mtime","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","attrs","exf","zipSync","tot","com","comment","oe","cdl","badd","wzf","USDZExporter","buildXform","buildMesh","buildMaterials","buildTextures","imgToU8","filename","headerSize","offsetMod64","padding","12345","define","buildMatrixRow","buildMatrix","buildMeshVertexCount","buildMeshVertexIndices","buildVector3Array","toPrecision","buildVector2Array","buildMaterial","pad","buildColor","buildTexture","allowedNames","_a$6","_b$5","_c$2","__decorate$5","isWebXRBlocked","isSceneViewerBlocked","noArViewerSigil","deserializeARModes","valueString","valueNode","_error","DEFAULT_AR_MODES","ARMode","$arButtonContainer","$enterARWithWebXR","$openSceneViewer","$openIOSARQuickLook","$canActivateAR","$arMode","$arModes","$arAnchor","$preload","$onARButtonContainerClick","$onARStatus","$onARTracking","$onARTap","$selectARMode","$triggerLoad","$evaluate","$lastValue","Evaluator","isConstant","basis","PercentageEvaluator","CalcEvaluator","EnvEvaluator","evaluatable","evaluated","intrinsics","keywords","auto","basisNode","autoSubstituteNode","evaluatedNode","keyword","_a$5","_b$4","_c$1","$percentage","$basis","percentage","$identNode","envFunction","pageYOffset","scrollHeight","documentElement","clientHeight","innerHeight","IS_MULTIPLICATION_RE","$evaluator","calcFunction","secondOrderTerms","term","previousTerm","operator","leftValue","OperatorEvaluator","evaluatableFor","$operator","$left","$right","leftNode","rightNode","leftUnit","rightValue","rightUnit","$evaluatables","$intrinsics","StyleEvaluator","firstExpression","applyIntrinsics","$instances","$activateListener","$deactivateListener","$notifyInstances","$notify","$scrollCallback","ScrollObserver","passive","$computeStyleCallback","$astWalker","$dependencies","$onScroll","StyleEffector","relatedState","newDependencies","oldDependencies","environmentState","walk","functionNode","firstTerm","observer","_a$4","_b$3","observeEffects","getIntrinsics","originalUpdated","originalConnectedCallback","connectedCallback","originalDisconnectedCallback","disconnectedCallback","$styleEffector","$styleEvaluator","$updateEvaluator","$evaluateAndSync","observeEffectsFor","updateHandler","DEFAULT_OPTIONS","minimumRadius","maximumRadius","minimumPolarAngle","maximumPolarAngle","minimumAzimuthalAngle","maximumAzimuthalAngle","minimumFieldOfView","maximumFieldOfView","interactionPolicy","touchAction","TOUCH_EVENT_RE","KEYBOARD_ORBIT_INCREMENT","ZOOM_SENSITIVITY","KeyCode","ChangeSource","SmoothControls","sensitivity","_interactionEnabled","_disableZoom","isUserChange","isUserPointing","spherical","goalSpherical","thetaDamper","phiDamper","radiusDamper","logFov","goalLogFov","fovDamper","pointerIsDown","lastPointerPosition","clientX","clientY","touchMode","touchDecided","onPointerMove","canInteract","touches","lastTouches","lastTouchDistance","twoTouchDistance","touchDistance","deltaZoom","userAdjustOrbit","_options","handleSinglePointerMove","cancelable","onPointerDown","handleSinglePointerDown","onPointerUp","_event","cursor","pointer","onWheel","deltaMode","onKeyDown","relevantKey","keyCode","setOrbit","setFieldOfView","jumpToGoal","nearPlane","farPlane","goalTheta","goalPhi","goalRadius","nextTheta","wrapAngle","nextPhi","nextRadius","makeSafe","deltaTheta","deltaPhi","dTheta","dThetaLimit","deltaRatio","isStationary","moveCamera","setFromSpherical","setRotationFromEuler","getRootNode","activeElement","adjustOrbit","pixelLength","touchOne","touchTwo","xOne","yOne","xDelta","yDelta","pixelLengthToSphericalAngle","easeInOutQuad","interpolate","ease","timeline","keyframes","lastValue","keyframe","totalWeight","reduce","ratios","ratio","sequence","__decorate$4","wiggle","fade","DEFAULT_CAMERA_ORBIT","DEFAULT_CAMERA_TARGET","DEFAULT_FIELD_OF_VIEW","MINIMUM_RADIUS_RATIO","AZIMUTHAL_QUADRANT_LABELS","POLAR_TRIENT_LABELS","InteractionPromptStrategy","InteractionPromptStyle","InteractionPolicy","TouchAction","fieldOfViewIntrinsics","$zoomAdjustedFieldOfView","minFieldOfViewIntrinsics","maxFieldOfViewIntrinsics","cameraOrbitIntrinsics","defaultTerms","minCameraOrbitIntrinsics","maxCameraOrbitIntrinsics","orbitIntrinsics","defaultRadius","cameraTargetIntrinsics","HALF_PI","THIRD_PI","QUARTER_PI","TAU","$controls","$promptElement","$promptAnimatedContainer","$deferInteractionPrompt","$updateAria","$updateCameraForRadius","$onBlur","$onFocus","$onChange","$onPointerChange","$waitingToPromptUser","$userHasInteracted","$promptElementVisibleTime","$lastPromptOffset","$focusedTime","$lastSpherical","$jumpCamera","$initialized","$maintainThetaPhi","$syncCameraOrbit","$syncFieldOfView","$syncCameraTarget","$syncMinCameraOrbit","$syncMaxCameraOrbit","$syncMinFieldOfView","$syncMaxFieldOfView","__decorate$3","$currentEnvironmentMap","$applyEnvironmentMap","$updateEnvironment","$cancelEnvironmentUpdate","$onPreload","$modelViewerStatusInstance","$updateStatus","LoadingStatusAnnouncer","registeredInstanceStatuses","loadingPromises","statusElement","statusUpdateInProgress","updateStatus","modelViewer","onUnregistered","loadShouldBeMeasured","loadAttemptCompletes","resolveHandler","modelViewerStatusInstance","statuses","instanceStatus","firstKey","_map","getFirstMapKey","textContent","__decorate$2","DEFAULT_DRACO_DECODER_LOCATION","DEFAULT_KTX2_TRANSCODER_LOCATION","RevealStrategy","LoadingStrategy","PosterDismissalSource","loadingStatusAnnouncer","$defaultProgressBarElement","$defaultProgressMaskElement","$posterContainerElement","$defaultPosterElement","$posterDismissalSource","$hidePoster","$modelIsRevealed","$updateProgressBar","$lastReportedProgress","$transitioned","$ariaLabelCallToAction","$onClick","$onKeydown","$onProgress","GLTFExporter","writer","GLTFLightExtension","GLTFMaterialsUnlitExtension","GLTFMaterialsPBRSpecularGlossiness","onDone","GLTFWriter","write","WEBGL_CONSTANTS","THREE_TO_WEBGL","PATH_PROPERTIES","equalArray","array1","getPaddedBufferSize","bufferSize","getPaddedArrayBuffer","paddingByte","paddedLength","cachedCanvas","nodeMap","uids","uid","attributesNormalized","binary","trs","onlyVisible","truncateDrawRange","embedImages","includeCustomExtensions","extensionsUsedList","reader","FileReader","readAsArrayBuffer","onloadend","binaryChunk","binaryChunkPrefix","setUint32","jsonChunk","text","stringToArrayBuffer","jsonChunkPrefix","totalByteLength","glbBlob","glbReader","readAsDataURL","base64data","didTransform","transformDef","componentSize","dataView","setFloat32","setUint16","setUint8","processBuffer","end2","bufferViewTarget","minMax","POSITIVE_INFINITY","NEGATIVE_INFINITY","getMinMax","processBufferView","3","4","16","cachedImages","imageDef","ctx","Uint8ClampedArray","processBufferViewImage","samplerDef","processSampler","processImage","writeTexture","metalRoughMapDef","processTexture","applyTextureTransform","baseColorMapDef","emissiveMapDef","normalMapDef","occlusionMapDef","serializeUserData","writeMaterial","meshCacheKeyParts","meshCacheKey","nameConversion","originalNormal","isNormalizedNormalAttribute","createNormalizedNormalAttribute","modifiedAttribute","getUID","processAccessor","reverseDictionary","warned","baseAttribute","relativeAttribute","isMultiMaterial","processMaterial","writeMesh","isOrtho","orthographic","perspective","Utils","mergeMorphTargetTracks","trackBinding","trackNode","trackProperty","outputItemSize","rootJoint","temporaryBoneInverse","processMesh","processCamera","processNode","writeNode","processScene","beforeParse","objectsWithoutScene","processObjects","processSkin","processAnimation","afterParse","specularMapDef","insertKeyframe","tolerance","mergedTracks","sourceTracks","sourceTrack","sourceTrackBinding","sourceTrackNode","targetCount","mergedTrack","sourceInterpolant","keyframeIndex","_a$3","_b$2","$correlatedObjects","$sourceObject","$onUpdate","ThreeDOMElement","correlatedObjects","$threeTextures$1","$uri","$bufferViewImages","Image$1","correlatedTextures","_a$2","_b$1","_a$1","isMinFilter","minFilterValues","isMagFilter","magFilterValues","isWrapMode","wrapModes","$threeTextures","$setProperty","Sampler","isValidSamplerValue","$source","$sampler","samplerIndex","imageIndex","$texture","TextureInfo","textureInfo","$threeMaterials","$baseColorTexture","$metallicRoughnessTexture","PBRMetallicRoughness","correlatedMaterials","baseColorTextures","metallicRoughnessTextures","rgba","$pbrMetallicRoughness","$normalTexture","$occlusionTexture","$emissiveTexture","Material","normalTextures","occlusionTextures","emissiveTextures","rgb","$materials","Model","__decorate$1","$currentGLTF","$model","$variants","__decorate","DEFAULT_ROTATION_SPEED","rotationRateIntrinsics","$autoRotateStartTime","$radiansPerSecond","$syncRotationRate","$onCameraChange","mutations","mutation","MutationRecord","addedNodes","removedNodes","MutationObserver","ShadyDOM","childList","observeChildren","unobserveChildren","pixelX","pixelY","increment","addHotspot","decrement","removeHotspot","AnnotationMixin","SceneGraphModelViewerElement","variantName","orientation","findIndex","loadVariant","roll","pitch","updateShadow","currentGLTF","variant","forcePowerOfTwoTextures","SceneGraphMixin","StagingModelViewerElement","autoRotate","autoRotateDelay","rotationPerSecond","rotationDelta","StagingMixin","EnvironmentModelViewerElement","environmentImage","skyboxImage","setShadowSoftness","texturesLoad","generateEnvironmentMapAndSkybox","EnvironmentMixin","_l","_m","_o","_p","_q","_r","ControlsModelViewerElement","cameraControls","cameraOrbit","cameraTarget","fieldOfView","minCameraOrbit","maxCameraOrbit","minFieldOfView","maxFieldOfView","interactionPromptThreshold","interactionPromptStyle","interactionPrompt","orbitSensitivity","disableZoom","interpolationDecay","bounds","getFieldOfView","controls","enableInteraction","disableInteraction","toggle","applyOptions","setDamperDecayTime","setTargetDamperDecayTime","oldFramedFieldOfView","newFramedFieldOfView","jumpCameraToGoal","thresholdTime","animationTime","updateNearFar","lastTheta","lastPhi","getCameraSpherical","lastAzimuthalQuadrant","azimuthalQuadrant","lastPolarTrient","polarTrient","azimuthalQuadrantLabel","updateAspect","ControlsMixin","ARModelViewerElement","arScale","arModes","iosSrc","activateAR","supportsPresentation","canActivateAR","present","locationUrl","modelUrl","soundUrl","linkUrl","intent","back","click","generateUsdz","prepareUSDZ","objectURL","anchor","img","exporter","arraybuffer","ARMixin","LoadingModelViewerElement","poster","reveal","dismissPoster","setDRACODecoderLocation","setKTX2TranscoderLocation","posterContainerElement","defaultPosterElement","registerInstance","unregisterInstance","backgroundImage","tabIndex","showPoster","getDRACODecoderLocation","getKTX2TranscoderLocation","LoadingMixin","AnimationModelViewerElement","autoplay","animationName","animationCrossfadeDuration","availableAnimations","hasActiveAnimation","updateAnimation","stopAnimation","playAnimation","AnimationMixin","SuperClass","$endPolyfillCoordination","FocusVisibleCoordinator","applyFocusVisiblePolyfill","coordinationHandler","coordinateWithPolyfill","FocusVisiblePolyfillMixin","customElements","reactIs","REACT_STATICS","contextType","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","isMemo","ForwardRef","Memo","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","Parent","Class","isNativeReflectConstruct","_cache","Wrapper","Fragment","StrictMode","Profiler","Suspense","for","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","updater","isReactComponent","forceUpdate","isPureReactComponent","current","H","__self","__source","J","$$typeof","_owner","M","N","K","Q","_status","_result","default","ReactCurrentDispatcher","ReactCurrentBatchConfig","transition","ReactCurrentOwner","IsSomeRendererActing","Children","only","PureComponent","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","createFactory","createRef","isValidElement","lazy","_payload","_init","useCallback","useDebugValue","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useState","aa","ba","ca","da","ea","fa","ha","ia","ja","ka","acceptsBooleans","attributeNamespace","mustUseProperty","sanitizeURL","removeEmptyString","oa","pa","ma","na","la","setAttributeNS","xlinkHref","ra","sa","ta","wa","xa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ma","Ka","La","Na","stack","Oa","Pa","prepareStackTrace","Qa","tag","_render","Ra","Sa","Ta","Va","_valueTracker","stopTracking","Ua","Wa","checked","Xa","Ya","defaultChecked","_wrapperState","initialChecked","Za","controlled","$a","bb","ownerDocument","db","fb","selected","defaultSelected","disabled","gb","dangerouslySetInnerHTML","hb","jb","kb","lb","nb","ob","namespaceURI","firstChild","MSApp","execUnsafeLocalFunction","pb","lastChild","nodeValue","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","orphans","tabSize","widows","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","rb","sb","tb","setProperty","ub","menuitem","br","embed","hr","keygen","link","param","wbr","wb","xb","srcElement","correspondingUseElement","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Ob","Pb","Qb","Rb","Sb","Tb","Ub","Vb","Wb","Xb","Zb","alternate","return","$b","memoizedState","dehydrated","cc","sibling","dc","ec","fc","gc","hc","ic","jc","kc","mc","nc","oc","pc","qc","rc","blockedOn","domEventName","eventSystemFlags","nativeEvent","targetContainers","sc","pointerId","tc","wc","lanePriority","unstable_runWithPriority","priority","hydrate","containerInfo","xc","yc","zc","Ac","Bc","unstable_scheduleCallback","unstable_NormalPriority","Cc","Dc","Ec","animationend","animationiteration","animationstart","transitionend","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","unstable_now","Rc","Uc","pendingLanes","expiredLanes","suspendedLanes","pingedLanes","Vc","entangledLanes","entanglements","Wc","Xc","Yc","Zc","$c","eventTimes","clz32","dd","unstable_UserBlockingPriority","ed","fd","gd","hd","uc","jd","kd","ld","nd","od","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","stopPropagation","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","timeStamp","isTrusted","ud","vd","Ad","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","elapsedTime","pseudoElement","Jd","clipboardData","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","8","9","12","13","17","18","19","20","27","32","33","34","35","36","37","38","39","40","45","46","112","113","114","115","116","117","118","119","120","121","122","123","144","145","224","Od","Alt","Control","Meta","Shift","Pd","Rd","locale","which","Td","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","targetTouches","changedTouches","Xd","Zd","wheelDeltaX","wheelDeltaY","wheelDelta","deltaZ","$d","documentMode","ee","fe","ge","he","ie","date","datetime","email","month","tel","week","ne","pe","qe","se","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","Le","nextSibling","Me","compareDocumentPosition","Ne","HTMLIFrameElement","contentWindow","Oe","contentEditable","Pe","Qe","Re","Se","Te","Ue","selectionStart","selectionEnd","anchorNode","defaultView","getSelection","anchorOffset","focusNode","focusOffset","Ve","We","Xe","Ye","Ze","Yb","$e","Nb","ef","ff","parentWindow","gf","hf","je","char","ke","jf","kf","mf","autoFocus","nf","__html","of","pf","qf","rf","sf","previousSibling","tf","vf","wf","xf","yf","zf","Af","Bf","Cf","Df","Ef","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Ff","Gf","Hf","If","Jf","__reactInternalMemoizedMergedChildContext","Kf","Lf","Mf","Nf","Of","Pf","unstable_cancelCallback","Qf","unstable_shouldYield","Rf","unstable_requestPaint","Sf","Tf","unstable_getCurrentPriorityLevel","Uf","unstable_ImmediatePriority","Vf","Wf","Xf","unstable_LowPriority","Yf","unstable_IdlePriority","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","childLanes","tg","firstContext","lanes","ug","vg","responders","wg","xg","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","effects","yg","zg","eventTime","lane","payload","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Kg","_reactInternals","Hg","Ig","Jg","Lg","shouldComponentUpdate","Mg","Ng","UNSAFE_componentWillReceiveProps","Og","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","Pg","Qg","_stringRef","Rg","Sg","lastEffect","nextEffect","firstEffect","Tg","Ug","elementType","Vg","implementation","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","ih","memoizedProps","revealOrder","jh","kh","lh","mh","nh","oh","pendingProps","ph","qh","rh","th","uh","_workInProgressVersionPrimary","vh","wh","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","baseQueue","queue","Ih","Jh","Kh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","dispatch","Lh","Mh","_getVersion","_source","mutableReadLanes","Nh","getSnapshot","subscribe","setSnapshot","Oh","Ph","Qh","Rh","deps","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","bi","ci","di","readContext","useDeferredValue","useTransition","useMutableSource","useOpaqueIdentifier","unstable_isNewReconciler","uf","ei","fi","gi","hi","ii","ji","ki","mi","baseLanes","ni","oi","pi","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","qi","ri","pendingContext","Bi","Di","Ei","si","retryLane","unstable_avoidThisFallback","ui","unstable_expectedLoadTime","vi","xi","yi","zi","isBackwards","rendering","renderingStartTime","tail","tailMode","Ai","Fi","Gi","wasMultiple","multiple","onclick","createTextNode","V","Hi","Ii","W","Ji","Ki","Li","Mi","Ni","Oi","Pi","Qi","Ri","Si","componentDidCatch","Ti","componentStack","Ui","WeakSet","Vi","Wi","Xi","__reactInternalSnapshotBeforeUpdate","Yi","Zi","$i","aj","bj","onCommitFiberUnmount","cj","dj","ej","fj","gj","hj","insertBefore","_reactRootContainer","ij","jj","kj","lj","mj","nj","oj","pj","X","Y","qj","rj","sj","tj","uj","vj","wj","ck","Z","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Sc","Kj","Lj","Mj","callbackNode","expirationTimes","callbackPriority","Tc","Nj","Oj","Pj","Qj","Rj","Sj","Tj","finishedWork","finishedLanes","Uj","timeoutHandle","Wj","Xj","pingCache","Yj","Zj","ak","bk","dk","focusedElem","selectionRange","ek","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","scrollTop","onCommitFiberRoot","fk","gk","ik","pendingChildren","jk","mutableSourceEagerHydrationData","kk","lk","mk","nk","qk","hydrationOptions","mutableSources","_internalRoot","rk","tk","sk","uk","hk","unstable_observedBits","unmount","form","Vj","vk","Events","wk","findFiberByHostInstance","bundleType","rendererPackageName","xk","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","yk","isDisabled","supportsFiber","inject","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","MessageChannel","unstable_forceFrameRate","port2","port1","sortIndex","expirationTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","delay","unstable_wrapCallback","Axios","mergeConfig","createInstance","defaultConfig","axios","instanceConfig","CancelToken","isCancel","promises","spread","isAxiosError","InterceptorManager","dispatchRequest","interceptors","chain","interceptor","fulfilled","rejected","getUri","use","eject","transformData","throwIfCancellationRequested","throwIfRequested","reason","fns","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","nextTick","title","browser","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","cwd","chdir","umask","normalizedName","description","fileName","lineNumber","columnNumber","expires","domain","secure","cookie","toGMTString","isAbsoluteURL","combineURLs","requestedURL","relativeURL","ignoreDuplicateOf","parsed","originURL","msie","urlParsingNode","protocol","host","hostname","port","requestURL","executor","resolvePromise","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","that","RangeError","encodingOrOffset","allocUnsafe","fromArrayLike","fromArrayBuffer","isEncoding","actual","fromString","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","buf","readUInt16BE","foundIndex","found","hexWrite","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","lo","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","inspect","thisStart","thisEnd","thisCopy","targetCopy","ret","toHex","bytes","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","maxChunkLength","len2","encodeChunk","lookup","num","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","innerFn","outerFn","tryLocsList","protoGenerator","Generator","Context","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","isGeneratorFunction","genFun","mark","awrap","async","reverse","skipTempReset","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","jsx","jsxs","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","componentName","propFullName","secret","getShim","ReactPropTypes","bool","symbol","any","arrayOf","instanceOf","objectOf","oneOf","oneOfType","checkPropTypes","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Lazy","Portal","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf"],"mappings":";kGAAe,SAASA,EAAgBC,EAAUC,GAChD,KAAMD,aAAoBC,GACxB,MAAM,IAAIC,UAAU,qCAFxB,mC,6BCAA,SAASC,EAAkBC,EAAQC,GACjC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CACrC,IAAIE,EAAaH,EAAMC,GACvBE,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAInC,SAASO,EAAad,EAAae,EAAYC,GAG5D,OAFID,GAAYb,EAAkBF,EAAYiB,UAAWF,GACrDC,GAAad,EAAkBF,EAAagB,GACzChB,EAbT,mC,6BCAA,8CACe,SAASkB,EAAUC,EAAUC,GAC1C,GAA0B,oBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAInB,UAAU,sDAGtBkB,EAASF,UAAYN,OAAOU,OAAOD,GAAcA,EAAWH,UAAW,CACrEK,YAAa,CACXC,MAAOJ,EACPT,UAAU,EACVD,cAAc,KAGdW,GAAY,YAAeD,EAAUC,K,6BCb3C,6DAGe,SAASI,EAAaC,GACnC,IAAIC,EAA4B,cAChC,OAAO,WACL,IACIC,EADAC,EAAQ,YAAeH,GAG3B,GAAIC,EAA2B,CAC7B,IAAIG,EAAY,YAAeC,MAAMR,YACrCK,EAASI,QAAQC,UAAUJ,EAAOK,UAAWJ,QAE7CF,EAASC,EAAMM,MAAMJ,KAAMG,WAG7B,OAAO,YAA0BH,KAAMH,M,6BChB5B,SAASQ,EAAgBC,GAItC,OAHAD,EAAkBxB,OAAO0B,eAAiB1B,OAAO2B,eAAiB,SAAyBF,GACzF,OAAOA,EAAEG,WAAa5B,OAAO2B,eAAeF,KAEvBA,GAJzB,mC,gBCAAI,EAAOC,QAAU,EAAQ,K,6BCGvBD,EAAOC,QAAUC,EAAQ,K,0ECFZ,SAAS,EAAKvC,EAAQwC,EAAUC,GAiB7C,OAfE,EADqB,qBAAZb,SAA2BA,QAAQc,IACrCd,QAAQc,IAER,SAAc1C,EAAQwC,EAAUC,GACrC,IAAIE,ECLK,SAAwBC,EAAQJ,GAC7C,MAAQhC,OAAOM,UAAU+B,eAAeC,KAAKF,EAAQJ,IAEpC,QADfI,EAAS,OAAAT,EAAA,GAAeS,MAI1B,OAAOA,EDDQ,CAAc5C,EAAQwC,GACjC,GAAKG,EAAL,CACA,IAAII,EAAOvC,OAAOwC,yBAAyBL,EAAMH,GAEjD,OAAIO,EAAKL,IACAK,EAAKL,IAAII,KAAKL,GAGhBM,EAAK3B,SAIJpB,EAAQwC,EAAUC,GAAYzC,K,6BEf1CqC,EAAOC,QAAUC,EAAQ,K,6BCH3B,SAASU,EAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ5C,EAAK6C,GACpE,IACE,IAAIC,EAAON,EAAIxC,GAAK6C,GAChBnC,EAAQoC,EAAKpC,MACjB,MAAOqC,GAEP,YADAL,EAAOK,GAILD,EAAKE,KACPP,EAAQ/B,GAERuC,QAAQR,QAAQ/B,GAAOwC,KAAKP,EAAOC,GAIxB,SAASO,EAAkBC,GACxC,OAAO,WACL,IAAIC,EAAOpC,KACPqC,EAAOlC,UACX,OAAO,IAAI6B,SAAQ,SAAUR,EAASC,GACpC,IAAIF,EAAMY,EAAG/B,MAAMgC,EAAMC,GAEzB,SAASX,EAAMjC,GACb6B,EAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQlC,GAGlE,SAASkC,EAAOW,GACdhB,EAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASW,GAGnEZ,OAAMa,OA/BZ,mC,6BCAe,SAASC,EAAgBC,EAAK1D,EAAKU,GAYhD,OAXIV,KAAO0D,EACT5D,OAAOC,eAAe2D,EAAK1D,EAAK,CAC9BU,MAAOA,EACPf,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZ6D,EAAI1D,GAAOU,EAGNgD,EAZT,mC,6BCAA,8CACe,SAASC,EAA2BpC,EAAGqC,GACpD,IAAIC,EAEJ,GAAsB,qBAAXC,QAAgD,MAAtBvC,EAAEuC,OAAOC,UAAmB,CAC/D,GAAIC,MAAMC,QAAQ1C,KAAOsC,EAAK,YAA2BtC,KAAOqC,GAAkBrC,GAAyB,kBAAbA,EAAE9B,OAAqB,CAC/GoE,IAAItC,EAAIsC,GACZ,IAAIrE,EAAI,EAEJ0E,EAAI,aAER,MAAO,CACLC,EAAGD,EACHE,EAAG,WACD,OAAI5E,GAAK+B,EAAE9B,OAAe,CACxBuD,MAAM,GAED,CACLA,MAAM,EACNtC,MAAOa,EAAE/B,OAGb6E,EAAG,SAAWC,GACZ,MAAMA,GAERC,EAAGL,GAIP,MAAM,IAAI9E,UAAU,yIAGtB,IAEImE,EAFAiB,GAAmB,EACnBC,GAAS,EAEb,MAAO,CACLN,EAAG,WACDN,EAAKtC,EAAEuC,OAAOC,aAEhBK,EAAG,WACD,IAAIM,EAAOb,EAAGc,OAEd,OADAH,EAAmBE,EAAK1B,KACjB0B,GAETL,EAAG,SAAWO,GACZH,GAAS,EACTlB,EAAMqB,GAERL,EAAG,WACD,IACOC,GAAoC,MAAhBX,EAAW,QAAWA,EAAW,SAC1D,QACA,GAAIY,EAAQ,MAAMlB,O,2EChDX,SAASsB,EAAeC,EAAKtF,GAC1C,OCLa,SAAyBsF,GACtC,GAAId,MAAMC,QAAQa,GAAM,OAAOA,EDIxB,CAAeA,IELT,SAA+BA,EAAKtF,GACjD,GAAsB,qBAAXsE,QAA4BA,OAAOC,YAAYjE,OAAOgF,GAAjE,CACA,IAAIC,EAAO,GACPC,GAAK,EACLC,GAAK,EACLX,OAAKd,EAET,IACE,IAAK,IAAiC0B,EAA7BC,EAAKL,EAAIhB,OAAOC,cAAmBiB,GAAME,EAAKC,EAAGR,QAAQ3B,QAChE+B,EAAKK,KAAKF,EAAGxE,QAETlB,GAAKuF,EAAKtF,SAAWD,GAH8CwF,GAAK,IAK9E,MAAOzB,GACP0B,GAAK,EACLX,EAAKf,EACL,QACA,IACOyB,GAAsB,MAAhBG,EAAW,QAAWA,EAAW,SAC5C,QACA,GAAIF,EAAI,MAAMX,GAIlB,OAAOS,GFnBuB,CAAqBD,EAAKtF,IAAM,OAAA6F,EAAA,GAA2BP,EAAKtF,IGLjF,WACb,MAAM,IAAIJ,UAAU,6IHIgF,K,6BILvF,SAASkG,EAAuBjC,GAC7C,QAAa,IAATA,EACF,MAAM,IAAIkC,eAAe,6DAG3B,OAAOlC,EALT,mC,8UCEMmC,G,MCCqB,SAAAC,G,IACnBC,EAAUC,c,OAChBD,gBAEA,EDLmCE,CAArC,mBEQMF,EAPqB,SAAAD,G,IACnBC,EAAUC,c,OAChBD,gBAEA,EAG4BE,CAA9B,UCAMC,E,uBAKJ,G,2BACE,UAEA,MAAa,CACXC,SAAUvG,UAAcuG,U,EAQ1B,c,EACA,sBAEKvG,EAAL,gB,EACE,SAAgBA,EAAA,gBAAqB,SAAAuG,GAC/B,EAAJ,W,EACE,SAAc,CAAEA,a,EAEhB,uB,qBAxBDC,iBAAP,Y,MACS,CAAEC,KAAF,IAAaC,IAAb,IAAuBC,OAAvB,GAAmCC,QAAsB,MAAbC,I,2BA6BrDC,6B,KACE,cAEIpF,KAAJ,kB,KACE,SAAc,CAAE6E,SAAU7E,KAAKqF,oB,EAInCC,gCACMtF,KAAJ,UAAmBA,KAAKuF,Y,EAG1BC,kB,OAEI,kBAACC,EAAD,UACEhG,MAAO,CACLiG,QAAS1F,KAAK1B,MADT,QAELuG,SAAU7E,KAAK2F,MAFV,SAGLC,MAAOhB,mBAAwB5E,KAAK2F,MAAMd,SAHrC,UAILgB,cAAe7F,KAAK1B,MAAMuH,gBAG5B,kBAACC,EAAD,UACEC,SAAU/F,KAAK1B,MAAMyH,UADvB,KAEEtG,MAAOO,KAAK1B,MAAMoH,Y,GAvDPM,IAAMC,WCAAD,IAAMC,UCRTD,IAAMC,UCA9B,IAAMC,EAAN,GAEIC,EAAJ,EAuBA,SAASC,EAAUjB,EAAUkB,QAAc,IAAdA,MAAU,KACd,kBAAZA,GAAwBtD,cAAnC,MACEsD,EAAU,CAAEtB,KAAMsB,I,MAFqB,EAKjCtB,EALiC,O,IAAA,MAK3BuB,OAL2B,S,IAAA,OAKZC,OALY,S,IAAA,UAKIC,OALJ,S,MAO3B,GAAGC,OAAjB,GAEO,QAAa,c,IACb1B,GAAL,KAAaA,EAAa,OAAO,K,GACjC,EAAa,OAAO2B,E,MAhCxB,c,IACQC,EAAW,GAAGN,EAAN,IAAoBA,EAApB,OAAqCA,EAAnD,UACMO,EAAYV,OAAoBA,KAAtC,I,GAEIU,EAAJ,GAAqB,OAAOA,EAAP,G,IAEfC,EAAN,GAEMhH,EAAS,CAAEiH,OADFC,IAAahC,EAAM8B,EAAlC,GACyBA,Q,OAErBV,EAbN,MAcIS,OACAT,KAGF,EAmB2Ba,CAAYjC,EAAM,CACzCkC,IADyC,EAEzCV,OAFyC,EAGzCC,cAHMM,EAJ6B,SAIrBD,EAJqB,OAS/BjB,EAAQkB,OAAd,G,IAEA,EAAY,OAAO,K,IAEZ9B,EAAkBY,EAbY,GAatBsB,EAAUtB,EAbY,SAc/BV,EAAUC,IAAhB,E,OAEImB,IAAJ,EAA8B,KAEvB,CACLvB,KADK,EAELC,IAAKD,cAAgBC,EAAhBD,IAFA,EAGLG,QAHK,EAILD,OAAQ4B,EAAA,QAAY,gB,OAClBM,EAAKpI,EAALoI,MAAiBD,EAAjBC,GACA,IAFM,OAtBZ,M,ICPIC,E,kGACJ5B,kB,kBAEI,kBAACC,EAAD,eACG,YACC,mB,IAEMZ,EAAW,kBAAuBJ,EAAxC,SACMmB,EAAQ,sBACV,QADU,cAEV,aACAQ,EAAUvB,EAAD,SAAoB,EAD7B,OAEAJ,EAJJ,MAMMnG,EAAQ,OAAH,IAAG,CAAH,MAAiBuG,SAAjB,EAA2Be,U,EAEA,EAZ5B,MAYJG,EAZI,WAYMsB,EAZN,YAYiB7B,EAZjB,S,OAgBNzC,kBAAJ,IAA+BgD,WAC7BA,QAIA,kBAACN,EAAD,UAAwBhG,MAAOnB,GAC5BA,QACGyH,EACsB,oBAAbA,EAGHA,EAHJ,GADM,EAMNsB,EACArB,oBADS,GAETR,EACAA,EADM,GATXlH,KAYuB,oBAAbyH,EAGLA,EAHF,GAdR,U,GAxBUC,IAAMC,WCrB1B,SAASqB,EAAgBvC,G,MAChBA,oBAAgC,IAAvC,EAYF,SAASwC,EAAcC,EAAU3C,G,IAC/B,EAAe,OAAOA,E,IAEhB7D,EAAOsG,EAAb,G,OAEA,IAAIzC,sBAA8CA,E,eAElD,GAEEM,SAAUN,kBAAyB7D,EAAzB6D,UAId,SAAS4C,EAAU5C,G,MACU,kBAAbA,EAAwBA,EAAW6C,YAAjD,GAGF,SAASC,EAAcC,G,OACd,WACLC,iBAIJ,SAASC,KAQkB9B,IAAMC,U,ICzC3B8B,E,kGACJvC,kB,kBAEI,kBAACC,EAAD,eACG,SAAAhB,GACC,mB,IAIA,EALU,EAGJI,EAAW,kBAAuBJ,EAAxC,S,OAQAuB,qBAAuB,QAAvBA,UAA4C,SAAAgC,G,GACtCpC,SAAiBI,mBAArB,GAAkD,CAChDiC,I,IAEMlD,EAAOiD,cAAoBA,QAAjC,KAEApC,EAAQb,EACJqB,EAAUvB,EAAD,wBAAyBmD,EAAzB,OAAsCjD,UAC/CN,EAFJmB,UAMGA,EACH,mBAA4B,CAAEf,SAAF,EAAYqD,cAAetC,IAD3D,S,GA3BWI,IAAMC,WCJ3B,IAAMkC,EAAanC,IAAnB,WAwBO,SAASoC,I,IAQRxC,EAAQuC,KAAd,M,OACOvC,EAAQA,EAAH,OAAZ,K,6BCxCa,SAASyC,IAetB,OAdAA,EAAWxJ,OAAOyJ,QAAU,SAAUjK,GACpC,IAAK,IAAIE,EAAI,EAAGA,EAAI4B,UAAU3B,OAAQD,IAAK,CACzC,IAAIgK,EAASpI,UAAU5B,GAEvB,IAAK,IAAIQ,KAAOwJ,EACV1J,OAAOM,UAAU+B,eAAeC,KAAKoH,EAAQxJ,KAC/CV,EAAOU,GAAOwJ,EAAOxJ,IAK3B,OAAOV,IAGO+B,MAAMJ,KAAMG,WAf9B,mC,6BCEA,IAAIqI,EAAO5H,EAAQ,IAMf6H,EAAW5J,OAAOM,UAAUsJ,SAQhC,SAASzF,EAAQ0F,GACf,MAA8B,mBAAvBD,EAAStH,KAAKuH,GASvB,SAASC,EAAYD,GACnB,MAAsB,qBAARA,EA4EhB,SAASE,EAASF,GAChB,OAAe,OAARA,GAA+B,kBAARA,EAShC,SAASG,EAAcH,GACrB,GAA2B,oBAAvBD,EAAStH,KAAKuH,GAChB,OAAO,EAGT,IAAIvJ,EAAYN,OAAO2B,eAAekI,GACtC,OAAqB,OAAdvJ,GAAsBA,IAAcN,OAAOM,UAuCpD,SAAS2J,EAAWJ,GAClB,MAA8B,sBAAvBD,EAAStH,KAAKuH,GAwEvB,SAASK,EAAQtG,EAAKN,GAEpB,GAAY,OAARM,GAA+B,qBAARA,EAU3B,GALmB,kBAARA,IAETA,EAAM,CAACA,IAGLO,EAAQP,GAEV,IAAK,IAAIlE,EAAI,EAAGyK,EAAIvG,EAAIjE,OAAQD,EAAIyK,EAAGzK,IACrC4D,EAAGhB,KAAK,KAAMsB,EAAIlE,GAAIA,EAAGkE,QAI3B,IAAK,IAAI1D,KAAO0D,EACV5D,OAAOM,UAAU+B,eAAeC,KAAKsB,EAAK1D,IAC5CoD,EAAGhB,KAAK,KAAMsB,EAAI1D,GAAMA,EAAK0D,GA2ErC/B,EAAOC,QAAU,CACfqC,QAASA,EACTiG,cA1RF,SAAuBP,GACrB,MAA8B,yBAAvBD,EAAStH,KAAKuH,IA0RrBQ,SAtSF,SAAkBR,GAChB,OAAe,OAARA,IAAiBC,EAAYD,IAA4B,OAApBA,EAAIlJ,cAAyBmJ,EAAYD,EAAIlJ,cAChD,oBAA7BkJ,EAAIlJ,YAAY0J,UAA2BR,EAAIlJ,YAAY0J,SAASR,IAqShFS,WAlRF,SAAoBT,GAClB,MAA4B,qBAAbU,UAA8BV,aAAeU,UAkR5DC,kBAzQF,SAA2BX,GAOzB,MAL4B,qBAAhBY,aAAiCA,YAAYC,OAC9CD,YAAYC,OAAOb,GAElBA,GAASA,EAAIc,QAAYd,EAAIc,kBAAkBF,aAqQ3DG,SA1PF,SAAkBf,GAChB,MAAsB,kBAARA,GA0PdgB,SAjPF,SAAkBhB,GAChB,MAAsB,kBAARA,GAiPdE,SAAUA,EACVC,cAAeA,EACfF,YAAaA,EACbgB,OAlNF,SAAgBjB,GACd,MAA8B,kBAAvBD,EAAStH,KAAKuH,IAkNrBkB,OAzMF,SAAgBlB,GACd,MAA8B,kBAAvBD,EAAStH,KAAKuH,IAyMrBmB,OAhMF,SAAgBnB,GACd,MAA8B,kBAAvBD,EAAStH,KAAKuH,IAgMrBI,WAAYA,EACZgB,SA9KF,SAAkBpB,GAChB,OAAOE,EAASF,IAAQI,EAAWJ,EAAIqB,OA8KvCC,kBArKF,SAA2BtB,GACzB,MAAkC,qBAApBuB,iBAAmCvB,aAAeuB,iBAqKhEC,qBAzIF,WACE,OAAyB,qBAAdC,WAAoD,gBAAtBA,UAAUC,SACY,iBAAtBD,UAAUC,SACY,OAAtBD,UAAUC,WAI/B,qBAAXC,QACa,qBAAbC,WAkITvB,QAASA,EACTwB,MAvEF,SAASA,IACP,IAAI1K,EAAS,GACb,SAAS2K,EAAY9B,EAAK3J,GACpB8J,EAAchJ,EAAOd,KAAS8J,EAAcH,GAC9C7I,EAAOd,GAAOwL,EAAM1K,EAAOd,GAAM2J,GACxBG,EAAcH,GACvB7I,EAAOd,GAAOwL,EAAM,GAAI7B,GACf1F,EAAQ0F,GACjB7I,EAAOd,GAAO2J,EAAI+B,QAElB5K,EAAOd,GAAO2J,EAIlB,IAAK,IAAInK,EAAI,EAAGyK,EAAI7I,UAAU3B,OAAQD,EAAIyK,EAAGzK,IAC3CwK,EAAQ5I,UAAU5B,GAAIiM,GAExB,OAAO3K,GAuDP6K,OA5CF,SAAgBC,EAAGC,EAAGC,GAQpB,OAPA9B,EAAQ6B,GAAG,SAAqBlC,EAAK3J,GAEjC4L,EAAE5L,GADA8L,GAA0B,oBAARnC,EACXF,EAAKE,EAAKmC,GAEVnC,KAGNiC,GAqCPG,KAhKF,SAAcC,GACZ,OAAOA,EAAIC,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,KAgK/CC,SA7BF,SAAkBC,GAIhB,OAH8B,QAA1BA,EAAQC,WAAW,KACrBD,EAAUA,EAAQT,MAAM,IAEnBS,K,6BCpUM,SAASE,EAAe/L,EAAUC,GAC/CD,EAASF,UAAYN,OAAOU,OAAOD,EAAWH,WAC9CE,EAASF,UAAUK,YAAcH,EACjCA,EAASoB,UAAYnB,EAHvB,mC,6BCAA,IACI+L,EAAS,mBAWExD,IAVf,SAAmByD,EAAWC,GAC1B,IAAID,EAIA,MAAM,IAAIE,MAAMH,K,qPCPxB,SAASI,EAAWtG,GAClB,MAA8B,MAAvBA,EAASuG,OAAO,GAIzB,SAASC,EAAUC,EAAMC,GACvB,IAAK,IAAItN,EAAIsN,EAAOC,EAAIvN,EAAI,EAAG4E,EAAIyI,EAAKpN,OAAQsN,EAAI3I,EAAG5E,GAAK,EAAGuN,GAAK,EAClEF,EAAKrN,GAAKqN,EAAKE,GAGjBF,EAAKG,MAgEQC,MA5Df,SAAyBC,EAAIC,QACd3J,IAAT2J,IAAoBA,EAAO,IAE/B,IAkBIC,EAlBAC,EAAWH,GAAMA,EAAGI,MAAM,MAAS,GACnCC,EAAaJ,GAAQA,EAAKG,MAAM,MAAS,GAEzCE,EAAUN,GAAMR,EAAWQ,GAC3BO,EAAYN,GAAQT,EAAWS,GAC/BO,EAAaF,GAAWC,EAW5B,GATIP,GAAMR,EAAWQ,GAEnBK,EAAYF,EACHA,EAAQ5N,SAEjB8N,EAAUP,MACVO,EAAYA,EAAU7F,OAAO2F,KAG1BE,EAAU9N,OAAQ,MAAO,IAG9B,GAAI8N,EAAU9N,OAAQ,CACpB,IAAIkO,EAAOJ,EAAUA,EAAU9N,OAAS,GACxC2N,EAA4B,MAATO,GAAyB,OAATA,GAA0B,KAATA,OAEpDP,GAAmB,EAIrB,IADA,IAAIQ,EAAK,EACApO,EAAI+N,EAAU9N,OAAQD,GAAK,EAAGA,IAAK,CAC1C,IAAIqO,EAAON,EAAU/N,GAER,MAATqO,EACFjB,EAAUW,EAAW/N,GACH,OAATqO,GACTjB,EAAUW,EAAW/N,GACrBoO,KACSA,IACThB,EAAUW,EAAW/N,GACrBoO,KAIJ,IAAKF,EAAY,KAAOE,IAAMA,EAAIL,EAAUO,QAAQ,OAGlDJ,GACiB,KAAjBH,EAAU,IACRA,EAAU,IAAOb,EAAWa,EAAU,KAExCA,EAAUO,QAAQ,IAEpB,IAAIhN,EAASyM,EAAUQ,KAAK,KAI5B,OAFIX,GAA0C,MAAtBtM,EAAOkN,QAAQ,KAAYlN,GAAU,KAEtDA,GCvET,SAASmN,EAAQvK,GACf,OAAOA,EAAIuK,QAAUvK,EAAIuK,UAAYnO,OAAOM,UAAU6N,QAAQ7L,KAAKsB,GAkCtDwK,MA/Bf,SAASA,EAAWtC,EAAGC,GAErB,GAAID,IAAMC,EAAG,OAAO,EAGpB,GAAS,MAALD,GAAkB,MAALC,EAAW,OAAO,EAEnC,GAAI7H,MAAMC,QAAQ2H,GAChB,OACE5H,MAAMC,QAAQ4H,IACdD,EAAEnM,SAAWoM,EAAEpM,QACfmM,EAAEuC,OAAM,SAASC,EAAMtB,GACrB,OAAOoB,EAAWE,EAAMvC,EAAEiB,OAKhC,GAAiB,kBAANlB,GAA+B,kBAANC,EAAgB,CAClD,IAAIwC,EAASJ,EAAQrC,GACjB0C,EAASL,EAAQpC,GAErB,OAAIwC,IAAWzC,GAAK0C,IAAWzC,EAAUqC,EAAWG,EAAQC,GAErDxO,OAAOgI,KAAKhI,OAAOyJ,OAAO,GAAIqC,EAAGC,IAAIsC,OAAM,SAASnO,GACzD,OAAOkO,EAAWtC,EAAE5L,GAAM6L,EAAE7L,OAIhC,OAAO,G,QC1BT,SAASuI,EAAgBvC,GACvB,MAA0B,MAAnBA,EAAK2G,OAAO,GAAa3G,EAAO,IAAMA,EAE/C,SAASuI,EAAkBvI,GACzB,MAA0B,MAAnBA,EAAK2G,OAAO,GAAa3G,EAAKgI,OAAO,GAAKhI,EAKnD,SAASwC,EAAcxC,EAAMsG,GAC3B,OAJF,SAAqBtG,EAAMsG,GACzB,OAA4D,IAArDtG,EAAKwI,cAAcC,QAAQnC,EAAOkC,iBAAuE,IAA/C,MAAMC,QAAQzI,EAAK2G,OAAOL,EAAO7M,SAG3FiP,CAAY1I,EAAMsG,GAAUtG,EAAKgI,OAAO1B,EAAO7M,QAAUuG,EAElE,SAAS2I,EAAmB3I,GAC1B,MAAwC,MAAjCA,EAAK2G,OAAO3G,EAAKvG,OAAS,GAAauG,EAAK0F,MAAM,GAAI,GAAK1F,EA0BpE,SAAS2C,EAAW7C,GAClB,IAAIM,EAAWN,EAASM,SACpBwI,EAAS9I,EAAS8I,OAClBC,EAAO/I,EAAS+I,KAChB7I,EAAOI,GAAY,IAGvB,OAFIwI,GAAqB,MAAXA,IAAgB5I,GAA6B,MAArB4I,EAAOjC,OAAO,GAAaiC,EAAS,IAAMA,GAC5EC,GAAiB,MAATA,IAAc7I,GAA2B,MAAnB6I,EAAKlC,OAAO,GAAakC,EAAO,IAAMA,GACjE7I,EAGT,SAAS8I,EAAe9I,EAAMY,EAAO5G,EAAK+O,GACxC,IAAIjJ,EAEgB,kBAATE,GAETF,EAvCJ,SAAmBE,GACjB,IAAII,EAAWJ,GAAQ,IACnB4I,EAAS,GACTC,EAAO,GACPG,EAAY5I,EAASqI,QAAQ,MAEd,IAAfO,IACFH,EAAOzI,EAAS4H,OAAOgB,GACvB5I,EAAWA,EAAS4H,OAAO,EAAGgB,IAGhC,IAAIC,EAAc7I,EAASqI,QAAQ,KAOnC,OALqB,IAAjBQ,IACFL,EAASxI,EAAS4H,OAAOiB,GACzB7I,EAAWA,EAAS4H,OAAO,EAAGiB,IAGzB,CACL7I,SAAUA,EACVwI,OAAmB,MAAXA,EAAiB,GAAKA,EAC9BC,KAAe,MAATA,EAAe,GAAKA,GAkBfK,CAAUlJ,IACZY,MAAQA,QAISpD,KAD1BsC,EAAWwD,YAAS,GAAItD,IACXI,WAAwBN,EAASM,SAAW,IAErDN,EAAS8I,OACuB,MAA9B9I,EAAS8I,OAAOjC,OAAO,KAAY7G,EAAS8I,OAAS,IAAM9I,EAAS8I,QAExE9I,EAAS8I,OAAS,GAGhB9I,EAAS+I,KACqB,MAA5B/I,EAAS+I,KAAKlC,OAAO,KAAY7G,EAAS+I,KAAO,IAAM/I,EAAS+I,MAEpE/I,EAAS+I,KAAO,QAGJrL,IAAVoD,QAA0CpD,IAAnBsC,EAASc,QAAqBd,EAASc,MAAQA,IAG5E,IACEd,EAASM,SAAW+I,UAAUrJ,EAASM,UACvC,MAAO/B,GACP,MAAIA,aAAa+K,SACT,IAAIA,SAAS,aAAetJ,EAASM,SAAxB,iFAEb/B,EAoBV,OAhBIrE,IAAK8F,EAAS9F,IAAMA,GAEpB+O,EAEGjJ,EAASM,SAE6B,MAAhCN,EAASM,SAASuG,OAAO,KAClC7G,EAASM,SAAW6G,EAAgBnH,EAASM,SAAU2I,EAAgB3I,WAFvEN,EAASM,SAAW2I,EAAgB3I,SAMjCN,EAASM,WACZN,EAASM,SAAW,KAIjBN,EAET,SAASuJ,EAAkBzD,EAAGC,GAC5B,OAAOD,EAAExF,WAAayF,EAAEzF,UAAYwF,EAAEgD,SAAW/C,EAAE+C,QAAUhD,EAAEiD,OAAShD,EAAEgD,MAAQjD,EAAE5L,MAAQ6L,EAAE7L,KAAOkO,EAAWtC,EAAEhF,MAAOiF,EAAEjF,OAG7H,SAAS0I,IACP,IAAIC,EAAS,KAiCb,IAAIC,EAAY,GA4BhB,MAAO,CACLC,UA5DF,SAAmBC,GAGjB,OADAH,EAASG,EACF,WACDH,IAAWG,IAAYH,EAAS,QAyDtCI,oBArDF,SAA6B7J,EAAU8J,EAAQC,EAAqBC,GAIlE,GAAc,MAAVP,EAAgB,CAClB,IAAIzO,EAA2B,oBAAXyO,EAAwBA,EAAOzJ,EAAU8J,GAAUL,EAEjD,kBAAXzO,EAC0B,oBAAxB+O,EACTA,EAAoB/O,EAAQgP,GAG5BA,GAAS,GAIXA,GAAoB,IAAXhP,QAGXgP,GAAS,IAmCXC,eA7BF,SAAwB3M,GACtB,IAAI4M,GAAW,EAEf,SAASC,IACHD,GAAU5M,EAAG/B,WAAM,EAAQD,WAIjC,OADAoO,EAAUpK,KAAK6K,GACR,WACLD,GAAW,EACXR,EAAYA,EAAUU,QAAO,SAAU9B,GACrC,OAAOA,IAAS6B,OAmBpBE,gBAdF,WACE,IAAK,IAAIC,EAAOhP,UAAU3B,OAAQ6D,EAAO,IAAIU,MAAMoM,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/E/M,EAAK+M,GAAQjP,UAAUiP,GAGzBb,EAAUxF,SAAQ,SAAUiG,GAC1B,OAAOA,EAAS5O,WAAM,EAAQiC,QAYpC,IAAIgN,IAAiC,qBAAXhF,SAA0BA,OAAOC,WAAYD,OAAOC,SAASgF,eACvF,SAASC,EAAgBhE,EAASsD,GAChCA,EAASxE,OAAOmF,QAAQjE,IAwC1B,IAAIkE,EAAgB,WAChBC,EAAkB,aAEtB,SAASC,IACP,IACE,OAAOtF,OAAO3E,QAAQC,OAAS,GAC/B,MAAOvC,GAGP,MAAO,IASX,SAASwM,EAAqBtR,QACd,IAAVA,IACFA,EAAQ,IAGT+Q,GAAsGxH,aAAU,GACjH,IAAIgI,EAAgBxF,OAAO3E,QACvBoK,EAvDN,WACE,IAAIC,EAAK1F,OAAOF,UAAU6F,UAC1B,QAAmC,IAA9BD,EAAGvC,QAAQ,gBAAuD,IAA/BuC,EAAGvC,QAAQ,iBAA2D,IAAjCuC,EAAGvC,QAAQ,mBAAqD,IAA1BuC,EAAGvC,QAAQ,YAAqD,IAAjCuC,EAAGvC,QAAQ,mBACtJnD,OAAO3E,SAAW,cAAe2E,OAAO3E,QAoD3BuK,GAChBC,KA7CsD,IAAnD7F,OAAOF,UAAU6F,UAAUxC,QAAQ,YA8CtC2C,EAAS7R,EACT8R,EAAsBD,EAAOE,aAC7BA,OAAuC,IAAxBD,GAAyCA,EACxDE,EAAwBH,EAAOvB,oBAC/BA,OAAgD,IAA1B0B,EAAmCf,EAAkBe,EAC3EC,EAAmBJ,EAAOK,UAC1BA,OAAiC,IAArBD,EAA8B,EAAIA,EAC9C/I,EAAWlJ,EAAMkJ,SAAWkG,EAAmBpG,EAAgBhJ,EAAMkJ,WAAa,GAEtF,SAASiJ,EAAeC,GACtB,IAAIC,EAAOD,GAAgB,GACvB3R,EAAM4R,EAAK5R,IACX4G,EAAQgL,EAAKhL,MAEbiL,EAAmBvG,OAAOxF,SAI1BE,EAHW6L,EAAiBzL,SACnByL,EAAiBjD,OACnBiD,EAAiBhD,KAI5B,OADIpG,IAAUzC,EAAOwC,EAAcxC,EAAMyC,IAClCqG,EAAe9I,EAAMY,EAAO5G,GAGrC,SAAS8R,IACP,OAAOC,KAAKC,SAAStI,SAAS,IAAIsE,OAAO,EAAGyD,GAG9C,IAAIQ,EAAoB3C,IAExB,SAAS4C,EAASC,GAChB7I,YAAS3C,EAASwL,GAElBxL,EAAQlH,OAASqR,EAAcrR,OAC/BwS,EAAkB9B,gBAAgBxJ,EAAQb,SAAUa,EAAQiJ,QAG9D,SAASwC,EAAeC,IApE1B,SAAmCA,GACjC,YAAuB7O,IAAhB6O,EAAMzL,QAAiE,IAA1CwE,UAAU6F,UAAUxC,QAAQ,UAqE1D6D,CAA0BD,IAC9BE,EAAUb,EAAeW,EAAMzL,QAGjC,SAAS4L,IACPD,EAAUb,EAAed,MAG3B,IAAI6B,GAAe,EAEnB,SAASF,EAAUzM,GACjB,GAAI2M,EACFA,GAAe,EACfP,QACK,CAELD,EAAkBtC,oBAAoB7J,EADzB,MAC2C+J,GAAqB,SAAU6C,GACjFA,EACFR,EAAS,CACPtC,OAJO,MAKP9J,SAAUA,IASpB,SAAmB6M,GACjB,IAAIC,EAAajM,EAAQb,SAIrB+M,EAAUC,EAAQrE,QAAQmE,EAAW5S,MACxB,IAAb6S,IAAgBA,EAAU,GAC9B,IAAIE,EAAYD,EAAQrE,QAAQkE,EAAa3S,MAC1B,IAAf+S,IAAkBA,EAAY,GAClC,IAAIC,EAAQH,EAAUE,EAElBC,IACFP,GAAe,EACfQ,EAAGD,IAnBCE,CAAUpN,OAuBlB,IAAIqN,EAAkBzB,EAAed,KACjCkC,EAAU,CAACK,EAAgBnT,KAE/B,SAASoT,EAAWtN,GAClB,OAAO2C,EAAWE,EAAW7C,GAuE/B,SAASmN,EAAG7O,GACV0M,EAAcmC,GAAG7O,GAWnB,IAAIiP,EAAgB,EAEpB,SAASC,EAAkBN,GAGH,KAFtBK,GAAiBL,IAEoB,IAAVA,GACzB1H,OAAOiI,iBAAiB7C,EAAe0B,GACnCjB,GAAyB7F,OAAOiI,iBAAiB5C,EAAiB6B,IAC3C,IAAlBa,IACT/H,OAAOkI,oBAAoB9C,EAAe0B,GACtCjB,GAAyB7F,OAAOkI,oBAAoB7C,EAAiB6B,IAI7E,IAAIiB,GAAY,EAiChB,IAAI9M,EAAU,CACZlH,OAAQqR,EAAcrR,OACtBmQ,OAAQ,MACR9J,SAAUqN,EACVC,WAAYA,EACZhO,KApIF,SAAcY,EAAMY,GAElB,IAAIgJ,EAAS,OACT9J,EAAWgJ,EAAe9I,EAAMY,EAAOkL,IAAanL,EAAQb,UAChEmM,EAAkBtC,oBAAoB7J,EAAU8J,EAAQC,GAAqB,SAAU6C,GACrF,GAAKA,EAAL,CACA,IAAIgB,EAAON,EAAWtN,GAClB9F,EAAM8F,EAAS9F,IACf4G,EAAQd,EAASc,MAErB,GAAImK,EAMF,GALAD,EAAc6C,UAAU,CACtB3T,IAAKA,EACL4G,MAAOA,GACN,KAAM8M,GAELpC,EACFhG,OAAOxF,SAAS4N,KAAOA,MAClB,CACL,IAAIE,EAAYd,EAAQrE,QAAQ9H,EAAQb,SAAS9F,KAC7C6T,EAAWf,EAAQpH,MAAM,EAAGkI,EAAY,GAC5CC,EAASzO,KAAKU,EAAS9F,KACvB8S,EAAUe,EACV3B,EAAS,CACPtC,OAAQA,EACR9J,SAAUA,SAKdwF,OAAOxF,SAAS4N,KAAOA,OAuG3BzH,QAlGF,SAAiBjG,EAAMY,GAErB,IAAIgJ,EAAS,UACT9J,EAAWgJ,EAAe9I,EAAMY,EAAOkL,IAAanL,EAAQb,UAChEmM,EAAkBtC,oBAAoB7J,EAAU8J,EAAQC,GAAqB,SAAU6C,GACrF,GAAKA,EAAL,CACA,IAAIgB,EAAON,EAAWtN,GAClB9F,EAAM8F,EAAS9F,IACf4G,EAAQd,EAASc,MAErB,GAAImK,EAMF,GALAD,EAAcgD,aAAa,CACzB9T,IAAKA,EACL4G,MAAOA,GACN,KAAM8M,GAELpC,EACFhG,OAAOxF,SAASmG,QAAQyH,OACnB,CACL,IAAIE,EAAYd,EAAQrE,QAAQ9H,EAAQb,SAAS9F,MAC9B,IAAf4T,IAAkBd,EAAQc,GAAa9N,EAAS9F,KACpDkS,EAAS,CACPtC,OAAQA,EACR9J,SAAUA,SAKdwF,OAAOxF,SAASmG,QAAQyH,QAuE5BT,GAAIA,EACJc,OA/DF,WACEd,GAAI,IA+DJe,UA5DF,WACEf,EAAG,IA4DHgB,MAzCF,SAAe1E,QACE,IAAXA,IACFA,GAAS,GAGX,IAAI2E,EAAUjC,EAAkBxC,UAAUF,GAO1C,OALKkE,IACHH,EAAkB,GAClBG,GAAY,GAGP,WAML,OALIA,IACFA,GAAY,EACZH,GAAmB,IAGdY,MAwBTC,OApBF,SAAgBlE,GACd,IAAIzJ,EAAWyL,EAAkBlC,eAAeE,GAEhD,OADAqD,EAAkB,GACX,WACLA,GAAmB,GACnB9M,OAiBJ,OAAOG,EAGT,IAAIyN,EAAoB,aACpBC,EAAiB,CACnBC,SAAU,CACRC,WAAY,SAAoBvO,GAC9B,MAA0B,MAAnBA,EAAK2G,OAAO,GAAa3G,EAAO,KAAOuI,EAAkBvI,IAElEwO,WAAY,SAAoBxO,GAC9B,MAA0B,MAAnBA,EAAK2G,OAAO,GAAa3G,EAAKgI,OAAO,GAAKhI,IAGrDyO,QAAS,CACPF,WAAYhG,EACZiG,WAAYjM,GAEdmM,MAAO,CACLH,WAAYhM,EACZiM,WAAYjM,IAIhB,SAASoM,EAAU1O,GACjB,IAAI+I,EAAY/I,EAAIwI,QAAQ,KAC5B,OAAsB,IAAfO,EAAmB/I,EAAMA,EAAIyF,MAAM,EAAGsD,GAG/C,SAAS4F,IAGP,IAAIlB,EAAOpI,OAAOxF,SAAS4N,KACvB1E,EAAY0E,EAAKjF,QAAQ,KAC7B,OAAsB,IAAfO,EAAmB,GAAK0E,EAAKmB,UAAU7F,EAAY,GAO5D,SAAS8F,EAAgB9O,GACvBsF,OAAOxF,SAASmG,QAAQ0I,EAAUrJ,OAAOxF,SAAS4N,MAAQ,IAAM1N,GAGlE,SAAS+O,EAAkBxV,QACX,IAAVA,IACFA,EAAQ,IAGT+Q,GAAmGxH,aAAU,GAC9G,IAAIgI,EAAgBxF,OAAO3E,QAEvByK,GAnUG9F,OAAOF,UAAU6F,UAAUxC,QAAQ,WAmU7BlP,GACTgS,EAAwBH,EAAOvB,oBAC/BA,OAAgD,IAA1B0B,EAAmCf,EAAkBe,EAC3EyD,EAAkB5D,EAAO6D,SACzBA,OAA+B,IAApBD,EAA6B,QAAUA,EAClDvM,EAAWlJ,EAAMkJ,SAAWkG,EAAmBpG,EAAgBhJ,EAAMkJ,WAAa,GAClFyM,EAAwBb,EAAeY,GACvCV,EAAaW,EAAsBX,WACnCC,EAAaU,EAAsBV,WAEvC,SAAS9C,IACP,IAAI1L,EAAOwO,EAAWI,KAGtB,OADInM,IAAUzC,EAAOwC,EAAcxC,EAAMyC,IAClCqG,EAAe9I,GAGxB,IAAIiM,EAAoB3C,IAExB,SAAS4C,EAASC,GAChB7I,YAAS3C,EAASwL,GAElBxL,EAAQlH,OAASqR,EAAcrR,OAC/BwS,EAAkB9B,gBAAgBxJ,EAAQb,SAAUa,EAAQiJ,QAG9D,IAAI6C,GAAe,EACf0C,EAAa,KAMjB,SAAS3C,IACP,IAL4B5G,EAAGC,EAK3B7F,EAAO4O,IACPQ,EAAcb,EAAWvO,GAE7B,GAAIA,IAASoP,EAEXN,EAAgBM,OACX,CACL,IAAItP,EAAW4L,IACX2D,EAAe1O,EAAQb,SAC3B,IAAK2M,IAdwB5G,EAc2B/F,GAd9B8F,EAcgByJ,GAbnCjP,WAAayF,EAAEzF,UAAYwF,EAAEgD,SAAW/C,EAAE+C,QAAUhD,EAAEiD,OAAShD,EAAEgD,MAaL,OAEnE,GAAIsG,IAAexM,EAAW7C,GAAW,OAEzCqP,EAAa,KAKjB,SAAmBrP,GACjB,GAAI2M,EACFA,GAAe,EACfP,QACK,CACL,IAAItC,EAAS,MACbqC,EAAkBtC,oBAAoB7J,EAAU8J,EAAQC,GAAqB,SAAU6C,GACjFA,EACFR,EAAS,CACPtC,OAAQA,EACR9J,SAAUA,IASpB,SAAmB6M,GACjB,IAAIC,EAAajM,EAAQb,SAIrB+M,EAAUyC,EAASC,YAAY5M,EAAWiK,KAC7B,IAAbC,IAAgBA,EAAU,GAC9B,IAAIE,EAAYuC,EAASC,YAAY5M,EAAWgK,KAC7B,IAAfI,IAAkBA,EAAY,GAClC,IAAIC,EAAQH,EAAUE,EAElBC,IACFP,GAAe,EACfQ,EAAGD,IAnBCE,CAAUpN,OAjBdyM,CAAUzM,IAyCd,IAAIE,EAAO4O,IACPQ,EAAcb,EAAWvO,GACzBA,IAASoP,GAAaN,EAAgBM,GAC1C,IAAIjC,EAAkBzB,IAClB4D,EAAW,CAAC3M,EAAWwK,IAuE3B,SAASF,EAAG7O,GAEV0M,EAAcmC,GAAG7O,GAWnB,IAAIiP,EAAgB,EAEpB,SAASC,EAAkBN,GAGH,KAFtBK,GAAiBL,IAEoB,IAAVA,EACzB1H,OAAOiI,iBAAiBa,EAAmB5B,GAChB,IAAlBa,GACT/H,OAAOkI,oBAAoBY,EAAmB5B,GAIlD,IAAIiB,GAAY,EAiChB,IAAI9M,EAAU,CACZlH,OAAQqR,EAAcrR,OACtBmQ,OAAQ,MACR9J,SAAUqN,EACVC,WAnIF,SAAoBtN,GAClB,IAAI0P,EAAUjK,SAASkK,cAAc,QACjC/B,EAAO,GAMX,OAJI8B,GAAWA,EAAQE,aAAa,UAClChC,EAAOiB,EAAUrJ,OAAOxF,SAAS4N,OAG5BA,EAAO,IAAMa,EAAW9L,EAAWE,EAAW7C,KA4HrDV,KAzHF,SAAcY,EAAMY,GAElB,IAAIgJ,EAAS,OACT9J,EAAWgJ,EAAe9I,OAAMxC,OAAWA,EAAWmD,EAAQb,UAClEmM,EAAkBtC,oBAAoB7J,EAAU8J,EAAQC,GAAqB,SAAU6C,GACrF,GAAKA,EAAL,CACA,IAAI1M,EAAO2C,EAAW7C,GAClBsP,EAAcb,EAAW9L,EAAWzC,GAGxC,GAFkB4O,MAAkBQ,EAEnB,CAIfD,EAAanP,EAxIrB,SAAsBA,GACpBsF,OAAOxF,SAAS+I,KAAO7I,EAwIjB2P,CAAaP,GACb,IAAIxB,EAAY0B,EAASC,YAAY5M,EAAWhC,EAAQb,WACpD8P,EAAYN,EAAS5J,MAAM,EAAGkI,EAAY,GAC9CgC,EAAUxQ,KAAKY,GACfsP,EAAWM,EACX1D,EAAS,CACPtC,OAAQA,EACR9J,SAAUA,SAIZoM,SAgGJjG,QA3FF,SAAiBjG,EAAMY,GAErB,IAAIgJ,EAAS,UACT9J,EAAWgJ,EAAe9I,OAAMxC,OAAWA,EAAWmD,EAAQb,UAClEmM,EAAkBtC,oBAAoB7J,EAAU8J,EAAQC,GAAqB,SAAU6C,GACrF,GAAKA,EAAL,CACA,IAAI1M,EAAO2C,EAAW7C,GAClBsP,EAAcb,EAAW9L,EAAWzC,GACtB4O,MAAkBQ,IAMlCD,EAAanP,EACb8O,EAAgBM,IAGlB,IAAIxB,EAAY0B,EAAS7G,QAAQ9F,EAAWhC,EAAQb,YACjC,IAAf8N,IAAkB0B,EAAS1B,GAAa5N,GAC5CkM,EAAS,CACPtC,OAAQA,EACR9J,SAAUA,SAsEdmN,GAAIA,EACJc,OA7DF,WACEd,GAAI,IA6DJe,UA1DF,WACEf,EAAG,IA0DHgB,MAzCF,SAAe1E,QACE,IAAXA,IACFA,GAAS,GAGX,IAAI2E,EAAUjC,EAAkBxC,UAAUF,GAO1C,OALKkE,IACHH,EAAkB,GAClBG,GAAY,GAGP,WAML,OALIA,IACFA,GAAY,EACZH,GAAmB,IAGdY,MAwBTC,OApBF,SAAgBlE,GACd,IAAIzJ,EAAWyL,EAAkBlC,eAAeE,GAEhD,OADAqD,EAAkB,GACX,WACLA,GAAmB,GACnB9M,OAiBJ,OAAOG,EAGT,SAASkP,EAAMzR,EAAG0R,EAAYC,GAC5B,OAAOhE,KAAKiE,IAAIjE,KAAKkE,IAAI7R,EAAG0R,GAAaC,GAO3C,SAASG,EAAoB3W,QACb,IAAVA,IACFA,EAAQ,IAGV,IAAI6R,EAAS7R,EACTsQ,EAAsBuB,EAAOvB,oBAC7BsG,EAAwB/E,EAAOgF,eAC/BA,OAA2C,IAA1BD,EAAmC,CAAC,KAAOA,EAC5DE,EAAsBjF,EAAOkF,aAC7BA,OAAuC,IAAxBD,EAAiC,EAAIA,EACpD7E,EAAmBJ,EAAOK,UAC1BA,OAAiC,IAArBD,EAA8B,EAAIA,EAC9CS,EAAoB3C,IAExB,SAAS4C,EAASC,GAChB7I,YAAS3C,EAASwL,GAElBxL,EAAQlH,OAASkH,EAAQ4P,QAAQ9W,OACjCwS,EAAkB9B,gBAAgBxJ,EAAQb,SAAUa,EAAQiJ,QAG9D,SAASkC,IACP,OAAOC,KAAKC,SAAStI,SAAS,IAAIsE,OAAO,EAAGyD,GAG9C,IAAI3E,EAAQ+I,EAAMS,EAAc,EAAGF,EAAe3W,OAAS,GACvD8W,EAAUH,EAAeI,KAAI,SAAUC,GACzC,OAAmC3H,EAAe2H,OAAOjT,EAAjC,kBAAViT,EAAsD3E,IAAgD2E,EAAMzW,KAAO8R,QAG/HsB,EAAazK,EAyCjB,SAASsK,EAAG7O,GACV,IAAIsS,EAAYb,EAAMlP,EAAQmG,MAAQ1I,EAAG,EAAGuC,EAAQ4P,QAAQ9W,OAAS,GAEjEqG,EAAWa,EAAQ4P,QAAQG,GAC/BzE,EAAkBtC,oBAAoB7J,EAFzB,MAE2C+J,GAAqB,SAAU6C,GACjFA,EACFR,EAAS,CACPtC,OALO,MAMP9J,SAAUA,EACVgH,MAAO4J,IAKTxE,OA8BN,IAAIvL,EAAU,CACZlH,OAAQ8W,EAAQ9W,OAChBmQ,OAAQ,MACR9J,SAAUyQ,EAAQzJ,GAClBA,MAAOA,EACPyJ,QAASA,EACTnD,WAAYA,EACZhO,KA1FF,SAAcY,EAAMY,GAElB,IAAIgJ,EAAS,OACT9J,EAAWgJ,EAAe9I,EAAMY,EAAOkL,IAAanL,EAAQb,UAChEmM,EAAkBtC,oBAAoB7J,EAAU8J,EAAQC,GAAqB,SAAU6C,GACrF,GAAKA,EAAL,CACA,IACIgE,EADY/P,EAAQmG,MACI,EACxB6J,EAAchQ,EAAQ4P,QAAQ7K,MAAM,GAEpCiL,EAAYlX,OAASiX,EACvBC,EAAYC,OAAOF,EAAWC,EAAYlX,OAASiX,EAAW5Q,GAE9D6Q,EAAYvR,KAAKU,GAGnBoM,EAAS,CACPtC,OAAQA,EACR9J,SAAUA,EACVgH,MAAO4J,EACPH,QAASI,SAuEb1K,QAlEF,SAAiBjG,EAAMY,GAErB,IAAIgJ,EAAS,UACT9J,EAAWgJ,EAAe9I,EAAMY,EAAOkL,IAAanL,EAAQb,UAChEmM,EAAkBtC,oBAAoB7J,EAAU8J,EAAQC,GAAqB,SAAU6C,GAChFA,IACL/L,EAAQ4P,QAAQ5P,EAAQmG,OAAShH,EACjCoM,EAAS,CACPtC,OAAQA,EACR9J,SAAUA,SA0DdmN,GAAIA,EACJc,OAnCF,WACEd,GAAI,IAmCJe,UAhCF,WACEf,EAAG,IAgCH4D,MA7BF,SAAezS,GACb,IAAIsS,EAAY/P,EAAQmG,MAAQ1I,EAChC,OAAOsS,GAAa,GAAKA,EAAY/P,EAAQ4P,QAAQ9W,QA4BrDwU,MAzBF,SAAe1E,GAKb,YAJe,IAAXA,IACFA,GAAS,GAGJ0C,EAAkBxC,UAAUF,IAqBnC4E,OAlBF,SAAgBlE,GACd,OAAOgC,EAAkBlC,eAAeE,KAmB1C,OAAOtJ,I,6BCn5BM,SAASmQ,EAAQpT,GAa9B,OATEoT,EADoB,oBAAXhT,QAAoD,kBAApBA,OAAOC,SACtC,SAAiBL,GACzB,cAAcA,GAGN,SAAiBA,GACzB,OAAOA,GAAyB,oBAAXI,QAAyBJ,EAAIjD,cAAgBqD,QAAUJ,IAAQI,OAAO1D,UAAY,gBAAkBsD,IAI9GA,G,8CCXF,SAASqT,EAA2B1T,EAAMjB,GACvD,OAAIA,GAA2B,WAAlB0U,EAAQ1U,IAAsC,oBAATA,EAI3C,OAAA4U,EAAA,GAAsB3T,GAHpBjB,I,6BCJI,SAAS6U,EAA8BzN,EAAQ0N,GAC5D,GAAc,MAAV1N,EAAgB,MAAO,GAC3B,IAEIxJ,EAAKR,EAFLF,EAAS,GACT6X,EAAarX,OAAOgI,KAAK0B,GAG7B,IAAKhK,EAAI,EAAGA,EAAI2X,EAAW1X,OAAQD,IACjCQ,EAAMmX,EAAW3X,GACb0X,EAASzI,QAAQzO,IAAQ,IAC7BV,EAAOU,GAAOwJ,EAAOxJ,IAGvB,OAAOV,EAZT,mC,6BCAA,8CACe,SAAS8X,EAA4B7V,EAAG8V,GACrD,GAAK9V,EAAL,CACA,GAAiB,kBAANA,EAAgB,OAAO,YAAiBA,EAAG8V,GACtD,IAAIjT,EAAItE,OAAOM,UAAUsJ,SAAStH,KAAKb,GAAGmK,MAAM,GAAI,GAEpD,MADU,WAANtH,GAAkB7C,EAAEd,cAAa2D,EAAI7C,EAAEd,YAAYgF,MAC7C,QAANrB,GAAqB,QAANA,EAAoBJ,MAAMmJ,KAAK5L,GACxC,cAAN6C,GAAqB,2CAA2CkT,KAAKlT,GAAW,YAAiB7C,EAAG8V,QAAxG,K,6BCPa,SAASE,EAAgBhW,EAAGiW,GAMzC,OALAD,EAAkBzX,OAAO0B,gBAAkB,SAAyBD,EAAGiW,GAErE,OADAjW,EAAEG,UAAY8V,EACPjW,IAGcA,EAAGiW,GAN5B,mC,gBCiBE7V,EAAOC,QAAUC,EAAQ,GAARA,I,6BCjBJ,SAAS4V,EAAkB3S,EAAK4S,IAClC,MAAPA,GAAeA,EAAM5S,EAAIrF,UAAQiY,EAAM5S,EAAIrF,QAE/C,IAAK,IAAID,EAAI,EAAGmY,EAAO,IAAI3T,MAAM0T,GAAMlY,EAAIkY,EAAKlY,IAC9CmY,EAAKnY,GAAKsF,EAAItF,GAGhB,OAAOmY,EAPT,mC,gBCAAhW,EAAOC,QAAUC,EAAQ,K,uFCIV,SAAS+V,EAAmB9S,GACzC,OCJa,SAA4BA,GACzC,GAAId,MAAMC,QAAQa,GAAM,OAAO,OAAA+S,EAAA,GAAiB/S,GDGzC,CAAkBA,IELZ,SAA0BgT,GACvC,GAAsB,qBAAXhU,QAA0BA,OAAOC,YAAYjE,OAAOgY,GAAO,OAAO9T,MAAMmJ,KAAK2K,GFIvD,CAAgBhT,IAAQ,OAAAO,EAAA,GAA2BP,IGLvE,WACb,MAAM,IAAI1F,UAAU,wIHIwE,K,6BIL/E,SAAS2Y,IACtB,GAAuB,qBAAZ7W,UAA4BA,QAAQC,UAAW,OAAO,EACjE,GAAID,QAAQC,UAAU6W,KAAM,OAAO,EACnC,GAAqB,oBAAVC,MAAsB,OAAO,EAExC,IAEE,OADAC,KAAK9X,UAAUsJ,SAAStH,KAAKlB,QAAQC,UAAU+W,KAAM,IAAI,iBAClD,EACP,MAAO7T,GACP,OAAO,GATX,mC,8BCQA,IAAI8T,EAAwBrY,OAAOqY,sBAC/BhW,EAAiBrC,OAAOM,UAAU+B,eAClCiW,EAAmBtY,OAAOM,UAAUiY,qBAExC,SAASC,EAAS3O,GACjB,GAAY,OAARA,QAAwBnG,IAARmG,EACnB,MAAM,IAAIvK,UAAU,yDAGrB,OAAOU,OAAO6J,GA+CfhI,EAAOC,QA5CP,WACC,IACC,IAAK9B,OAAOyJ,OACX,OAAO,EAMR,IAAIgP,EAAQ,IAAIC,OAAO,OAEvB,GADAD,EAAM,GAAK,KACkC,MAAzCzY,OAAO2Y,oBAAoBF,GAAO,GACrC,OAAO,EAKR,IADA,IAAIG,EAAQ,GACHlZ,EAAI,EAAGA,EAAI,GAAIA,IACvBkZ,EAAM,IAAMF,OAAOG,aAAanZ,IAAMA,EAKvC,GAAwB,eAHXM,OAAO2Y,oBAAoBC,GAAOlC,KAAI,SAAUpS,GAC5D,OAAOsU,EAAMtU,MAEH2J,KAAK,IACf,OAAO,EAIR,IAAI6K,EAAQ,GAIZ,MAHA,uBAAuBtL,MAAM,IAAItD,SAAQ,SAAU6O,GAClDD,EAAMC,GAAUA,KAGf,yBADE/Y,OAAOgI,KAAKhI,OAAOyJ,OAAO,GAAIqP,IAAQ7K,KAAK,IAM9C,MAAOxK,GAER,OAAO,GAIQuV,GAAoBhZ,OAAOyJ,OAAS,SAAUjK,EAAQkK,GAKtE,IAJA,IAAI2D,EAEA4L,EADA7L,EAAKoL,EAAShZ,GAGT6E,EAAI,EAAGA,EAAI/C,UAAU3B,OAAQ0E,IAAK,CAG1C,IAAK,IAAInE,KAFTmN,EAAOrN,OAAOsB,UAAU+C,IAGnBhC,EAAeC,KAAK+K,EAAMnN,KAC7BkN,EAAGlN,GAAOmN,EAAKnN,IAIjB,GAAImY,EAAuB,CAC1BY,EAAUZ,EAAsBhL,GAChC,IAAK,IAAI3N,EAAI,EAAGA,EAAIuZ,EAAQtZ,OAAQD,IAC/B4Y,EAAiBhW,KAAK+K,EAAM4L,EAAQvZ,MACvC0N,EAAG6L,EAAQvZ,IAAM2N,EAAK4L,EAAQvZ,MAMlC,OAAO0N,I,2IC/EF8L,E,oJACJrS,QAAUsS,YAAc,EAAD,O,sCAEvBxS,kB,OACS,uBAAQE,QAAS1F,KAAjB,QAA+B+F,SAAU/F,KAAK1B,MAAMyH,Y,GAJnCC,IAAMC,WCATD,IAAMC,UCPxB,IAAMgS,EAAoB,SAAChM,EAAI6B,G,MACtB,oBAAP7B,EAAoBA,EAA3B,GAD+B,GAGpBiM,EAAsB,SAACjM,EAAI6B,G,MACjB,kBAAP7B,EACV4B,YAAe5B,EAAI,KAAM,KADtB,GAAP,GCIIkM,EAAiB,SAAAC,G,OAAC,GAClBC,EAAerS,IAAfqS,WACN,qBAAWA,IACTA,KAOF,IAAMC,EAAaD,GACjB,c,IAEIE,EAMC,EANDA,SACAC,EAKC,EALDA,SACAC,EAIC,EAJDA,QACGC,EAGF,iDACKra,EAAWqa,EADhB,OAGCpa,EAAQ,OAAH,IAAG,CAAH,MAEPma,QAAS,SAAArH,G,IAEL,GAAaqH,KACb,MAAOE,G,MACPvH,mBACA,EAICA,EAAD,sBACAA,UACC,GAFD,UAEY/S,GA7BtB,SAAyB+S,G,SACbA,WAAiBA,EAAjBA,QAAiCA,EAAjCA,SAAkDA,EAA5D,UA6BSwH,CAJH,KAMExH,mBACAoH,Q,OAOJla,MADE6Z,IAAJ,GACcU,GAEZva,EAIK,sBAAP,MAWJ,IAAMwa,EAAOT,GACX,c,QAEIhR,iBAOC,MAPWiR,EAOX,EANDtN,EAMC,EANDA,QACAiB,EAKC,EALDA,GACAsM,EAIC,EAJDA,SACGG,EAGF,uD,OAED,kBAACjT,IAAD,eACG,SAAAhB,GACC,mB,IAEQiB,EAAYjB,EAHV,QAKJI,EAAWqT,EACfD,EAAkBhM,EAAIxH,EADY,UAElCA,EAFF,UAKMgO,EAAO5N,EAAWa,aAAH,GAArB,GACMpH,EAAQ,OAAH,IAAG,CAAH,MAETmU,KAFS,EAGT+F,SAHS,W,IAID3T,EAAWoT,EAAkBhM,EAAIxH,EAAvC,WACeuG,EAAUtF,EAAH,QAAqBA,EAA3C,MAEAqT,M,OAKAZ,IAAJ,EACE7Z,MAAYua,GAAZva,EAEAA,aAGK0H,oBAAP,SCxGJmS,EAAiB,SAAAC,G,OAAC,GAClBC,EAAerS,IAAfqS,WACN,qBAAW,IACTA,KAUcA,GACd,c,QAEI,gBAAgBW,OAef,MAf6B,OAe7B,E,IAdDC,uBAcC,MAdiB,SAcjB,EAbDC,EAaC,EAbDA,YACWC,EAYV,EAZDC,UACA9S,EAWC,EAXDA,MACU+S,EAUT,EAVDtK,SACUuK,EAST,EATDzU,SACA2B,EAQC,EARDA,UACAD,EAOC,EAPDA,OACOgT,EAMN,EANDC,MACAvN,EAKC,EALDA,GACAsM,EAIC,EAJDA,SACGG,EAGF,uJ,OAED,kBAACjT,IAAD,eACG,SAAAhB,GACC,mB,IAEMqJ,EAAkBwL,GAAgB7U,EAAxC,SACMkN,EAAauG,EACjBD,EAAkBhM,EADkB,GAAtC,GAIkBlH,EAAS4M,EARjB,SAUJ8H,EACJ1U,GAAQA,sCADV,QAGMa,EAAQ6T,EACVrT,YAAU0H,EAAD,SAA2B,CAClC/I,KADkC,EAElCuB,MAFkC,EAGlCE,UAHkC,EAIlCD,WALN,KAQMwI,KAAcsK,EAChBA,EAAazT,EADe,GAAhC,GAIMwT,EAAYrK,EArD5B,W,2BAA2B2K,EAAY,yBAAZA,EAAY,gB,OAC9BA,EAAA,QAAkB,SAAAnb,G,OAAC,KAAnB,KAAP,KAqDYob,CAAeR,EADO,GAA1B,EAGMK,EAAQzK,EAAW,OAAH,IAAG,CAAH,WAAtB,EAEMzQ,EAAQ,OAAH,IAAG,CAAH,C,eACQyQ,GAAD,GADP,KAETqK,UAFS,EAGTI,MAHS,EAITvN,GAAI0F,GAlCI,G,OAuCNwG,IAAJ,EACE7Z,MAAYua,GAAZva,EAEAA,aAGK,oBAAP,U,6BC1FV,8CAEA,SAASsb,EAAQ3Y,EAAQ4Y,GACvB,IAAIhT,EAAOhI,OAAOgI,KAAK5F,GAEvB,GAAIpC,OAAOqY,sBAAuB,CAChC,IAAIY,EAAUjZ,OAAOqY,sBAAsBjW,GACvC4Y,IAAgB/B,EAAUA,EAAQ7I,QAAO,SAAU6K,GACrD,OAAOjb,OAAOwC,yBAAyBJ,EAAQ6Y,GAAKpb,eAEtDmI,EAAK1C,KAAK/D,MAAMyG,EAAMiR,GAGxB,OAAOjR,EAGM,SAASkT,EAAe1b,GACrC,IAAK,IAAIE,EAAI,EAAGA,EAAI4B,UAAU3B,OAAQD,IAAK,CACzC,IAAIgK,EAAyB,MAAhBpI,UAAU5B,GAAa4B,UAAU5B,GAAK,GAE/CA,EAAI,EACNqb,EAAQ/a,OAAO0J,IAAS,GAAMQ,SAAQ,SAAUhK,GAC9C,YAAeV,EAAQU,EAAKwJ,EAAOxJ,OAE5BF,OAAOmb,0BAChBnb,OAAOob,iBAAiB5b,EAAQQ,OAAOmb,0BAA0BzR,IAEjEqR,EAAQ/a,OAAO0J,IAASQ,SAAQ,SAAUhK,GACxCF,OAAOC,eAAeT,EAAQU,EAAKF,OAAOwC,yBAAyBkH,EAAQxJ,OAKjF,OAAOV,I,8BCjCT,yDAKI6b,EAAwB,WACxBC,EAAuC,qBAAfC,WAA6BA,WAA+B,qBAAX/P,OAAyBA,OAA2B,qBAAXgQ,EAAyBA,EAAS,GAexJ,SAASC,EAAmB7a,GAC1B,IAAI8a,EAAW,GACf,MAAO,CACLC,GAAI,SAAYC,GACdF,EAASpW,KAAKsW,IAEhBC,IAAK,SAAaD,GAChBF,EAAWA,EAAStL,QAAO,SAAU0L,GACnC,OAAOA,IAAMF,MAGjB1Z,IAAK,WACH,OAAOtB,GAETmb,IAAK,SAAaC,EAAUC,GAC1Brb,EAAQob,EACRN,EAASxR,SAAQ,SAAU0R,GACzB,OAAOA,EAAQhb,EAAOqb,QAuI9B,IAAIjP,EAAQ7F,IAAMtB,eA7HlB,SAA4BqW,EAAcC,GACxC,IAAIC,EAAuBC,EAEvBC,EAAc,0BA3CpB,WACE,IAAIpc,EAAM,uBACV,OAAOob,EAAepb,IAAQob,EAAepb,IAAQ,GAAK,EAyCZqc,GAAgB,KAE1DC,EAAwB,SAAUC,GAGpC,SAASD,IACP,IAAIE,EAIJ,OAFAA,EAAQD,EAAWlb,MAAMJ,KAAMG,YAAcH,MACvCwb,QAAUlB,EAAmBiB,EAAMjd,MAAMmB,OACxC8b,EAPTnQ,YAAeiQ,EAAUC,GAUzB,IAAIG,EAASJ,EAASlc,UAoCtB,OAlCAsc,EAAOC,gBAAkB,WACvB,IAAI/K,EAEJ,OAAOA,EAAO,IAASwK,GAAenb,KAAKwb,QAAS7K,GAGtD8K,EAAOE,0BAA4B,SAAmCC,GACpE,GAAI5b,KAAK1B,MAAMmB,QAAUmc,EAAUnc,MAAO,CACxC,IAEIqb,EAFAe,EAAW7b,KAAK1B,MAAMmB,MACtBob,EAAWe,EAAUnc,QA9Dfqc,EAiEGD,MAjEAE,EAiEUlB,GA/Dd,IAANiB,GAAW,EAAIA,IAAM,EAAIC,EAEzBD,IAAMA,GAAKC,IAAMA,GA8DlBjB,EAAc,GAEdA,EAA8C,oBAAzBE,EAAsCA,EAAqBa,EAAUhB,GAAYX,EAQlF,KAFpBY,GAAe,IAGb9a,KAAKwb,QAAQZ,IAAIgB,EAAUnc,MAAOqb,IA7E9C,IAAkBgB,EAAGC,GAmFjBN,EAAOjW,OAAS,WACd,OAAOxF,KAAK1B,MAAMyH,UAGbsV,EA/CmB,CAgD1BpV,aAEFoV,EAASW,oBAAqBf,EAAwB,IAA0BE,GAAec,IAAUhb,OAAOib,WAAYjB,GAE5H,IAAIkB,EAAwB,SAAUC,GAGpC,SAASD,IACP,IAAIE,EAiBJ,OAfAA,EAASD,EAAYhc,MAAMJ,KAAMG,YAAcH,MACxC2F,MAAQ,CACblG,MAAO4c,EAAOC,YAGhBD,EAAOE,SAAW,SAAU1B,EAAUC,GAGC,MAFI,EAAtBuB,EAAOG,cAEN1B,IAClBuB,EAAOpL,SAAS,CACdxR,MAAO4c,EAAOC,cAKbD,EApBTjR,YAAe+Q,EAAUC,GAuBzB,IAAIK,EAAUN,EAAShd,UAkCvB,OAhCAsd,EAAQd,0BAA4B,SAAmCC,GACrE,IAAIY,EAAeZ,EAAUY,aAC7Bxc,KAAKwc,kBAAgCja,IAAjBia,GAA+C,OAAjBA,EAAwBtC,EAAwBsC,GAGpGC,EAAQrX,kBAAoB,WACtBpF,KAAKyE,QAAQ0W,IACfnb,KAAKyE,QAAQ0W,GAAaX,GAAGxa,KAAKuc,UAGpC,IAAIC,EAAexc,KAAK1B,MAAMke,aAC9Bxc,KAAKwc,kBAAgCja,IAAjBia,GAA+C,OAAjBA,EAAwBtC,EAAwBsC,GAGpGC,EAAQnX,qBAAuB,WACzBtF,KAAKyE,QAAQ0W,IACfnb,KAAKyE,QAAQ0W,GAAaT,IAAI1a,KAAKuc,WAIvCE,EAAQH,SAAW,WACjB,OAAItc,KAAKyE,QAAQ0W,GACRnb,KAAKyE,QAAQ0W,GAAapa,MAE1Bga,GAIX0B,EAAQjX,OAAS,WACf,OApHaO,EAoHI/F,KAAK1B,MAAMyH,SAnHzBhD,MAAMC,QAAQ+C,GAAYA,EAAS,GAAKA,GAmHL/F,KAAK2F,MAAMlG,OApHvD,IAAmBsG,GAuHRoW,EA1DmB,CA2D1BlW,aAGF,OADAkW,EAASO,eAAgBxB,EAAwB,IAA0BC,GAAec,IAAUhb,OAAQia,GACrG,CACLG,SAAUA,EACVc,SAAUA,IAMCtQ,Q,kCC/Kf,IAAI8Q,EAAU/b,EAAQ,IAKtBF,EAAOC,QAAUoG,EACjBrG,EAAOC,QAAQic,MAAQA,EACvBlc,EAAOC,QAAQkc,QAsGf,SAAkB9R,EAAK1E,GACrB,OAAOyW,EAAiBF,EAAM7R,EAAK1E,GAAUA,IAtG/C3F,EAAOC,QAAQmc,iBAAmBA,EAClCpc,EAAOC,QAAQoc,eAAiBA,EAOhC,IAAIC,EAAc,IAAIC,OAAO,CAG3B,UAOA,0GACAnQ,KAAK,KAAM,KASb,SAAS8P,EAAO7R,EAAK1E,GAQnB,IAPA,IAKI6W,EALAC,EAAS,GACTpe,EAAM,EACN8M,EAAQ,EACR9G,EAAO,GACPqY,EAAmB/W,GAAWA,EAAQgX,WAAa,IAGf,OAAhCH,EAAMF,EAAYM,KAAKvS,KAAe,CAC5C,IAAIwS,EAAIL,EAAI,GACRM,EAAUN,EAAI,GACdO,EAASP,EAAIrR,MAKjB,GAJA9G,GAAQgG,EAAIN,MAAMoB,EAAO4R,GACzB5R,EAAQ4R,EAASF,EAAE/e,OAGfgf,EACFzY,GAAQyY,EAAQ,OADlB,CAKA,IAAI9Z,EAAOqH,EAAIc,GACXR,EAAS6R,EAAI,GACb1Y,EAAO0Y,EAAI,GACXQ,EAAUR,EAAI,GACdS,EAAQT,EAAI,GACZU,EAAWV,EAAI,GACfW,EAAWX,EAAI,GAGfnY,IACFoY,EAAOhZ,KAAKY,GACZA,EAAO,IAGT,IAAI+Y,EAAoB,MAAVzS,GAA0B,MAAR3H,GAAgBA,IAAS2H,EACrD0S,EAAsB,MAAbH,GAAiC,MAAbA,EAC7BI,EAAwB,MAAbJ,GAAiC,MAAbA,EAC/BP,EAAYH,EAAI,IAAME,EACtBa,EAAUP,GAAWC,EAEzBR,EAAOhZ,KAAK,CACVK,KAAMA,GAAQzF,IACdsM,OAAQA,GAAU,GAClBgS,UAAWA,EACXW,SAAUA,EACVD,OAAQA,EACRD,QAASA,EACTD,WAAYA,EACZI,QAASA,EAAUC,EAAYD,GAAYJ,EAAW,KAAO,KAAOM,EAAad,GAAa,SAclG,OATIxR,EAAQd,EAAIvM,SACduG,GAAQgG,EAAIgC,OAAOlB,IAIjB9G,GACFoY,EAAOhZ,KAAKY,GAGPoY,EAoBT,SAASiB,EAA0BrT,GACjC,OAAOsT,UAAUtT,GAAKC,QAAQ,WAAW,SAAUsT,GACjD,MAAO,IAAMA,EAAEnT,WAAW,GAAG1C,SAAS,IAAI8V,iBAmB9C,SAASzB,EAAkBK,EAAQ9W,GAKjC,IAHA,IAAImY,EAAU,IAAIzb,MAAMoa,EAAO3e,QAGtBD,EAAI,EAAGA,EAAI4e,EAAO3e,OAAQD,IACR,kBAAd4e,EAAO5e,KAChBigB,EAAQjgB,GAAK,IAAI0e,OAAO,OAASE,EAAO5e,GAAG0f,QAAU,KAAMQ,EAAMpY,KAIrE,OAAO,SAAU5D,EAAKic,GAMpB,IALA,IAAI3Z,EAAO,GACP4Z,EAAOlc,GAAO,GAEdmc,GADUF,GAAQ,IACDG,OAAST,EAA2BU,mBAEhDvgB,EAAI,EAAGA,EAAI4e,EAAO3e,OAAQD,IAAK,CACtC,IAAIwgB,EAAQ5B,EAAO5e,GAEnB,GAAqB,kBAAVwgB,EAAX,CAMA,IACIC,EADAvf,EAAQkf,EAAKI,EAAMva,MAGvB,GAAa,MAAT/E,EAAe,CACjB,GAAIsf,EAAMf,SAAU,CAEde,EAAMjB,UACR/Y,GAAQga,EAAM1T,QAGhB,SAEA,MAAM,IAAIlN,UAAU,aAAe4gB,EAAMva,KAAO,mBAIpD,GAAImY,EAAQld,GAAZ,CACE,IAAKsf,EAAMhB,OACT,MAAM,IAAI5f,UAAU,aAAe4gB,EAAMva,KAAO,kCAAoCya,KAAKC,UAAUzf,GAAS,KAG9G,GAAqB,IAAjBA,EAAMjB,OAAc,CACtB,GAAIugB,EAAMf,SACR,SAEA,MAAM,IAAI7f,UAAU,aAAe4gB,EAAMva,KAAO,qBAIpD,IAAK,IAAI2a,EAAI,EAAGA,EAAI1f,EAAMjB,OAAQ2gB,IAAK,CAGrC,GAFAH,EAAUJ,EAAOnf,EAAM0f,KAElBX,EAAQjgB,GAAG8X,KAAK2I,GACnB,MAAM,IAAI7gB,UAAU,iBAAmB4gB,EAAMva,KAAO,eAAiBua,EAAMd,QAAU,oBAAsBgB,KAAKC,UAAUF,GAAW,KAGvIja,IAAe,IAANoa,EAAUJ,EAAM1T,OAAS0T,EAAM1B,WAAa2B,OApBzD,CA4BA,GAFAA,EAAUD,EAAMlB,SA5EbQ,UA4EuC5e,GA5ExBuL,QAAQ,SAAS,SAAUsT,GAC/C,MAAO,IAAMA,EAAEnT,WAAW,GAAG1C,SAAS,IAAI8V,iBA2EWK,EAAOnf,IAErD+e,EAAQjgB,GAAG8X,KAAK2I,GACnB,MAAM,IAAI7gB,UAAU,aAAe4gB,EAAMva,KAAO,eAAiBua,EAAMd,QAAU,oBAAsBe,EAAU,KAGnHja,GAAQga,EAAM1T,OAAS2T,QArDrBja,GAAQga,EAwDZ,OAAOha,GAUX,SAASoZ,EAAcpT,GACrB,OAAOA,EAAIC,QAAQ,6BAA8B,QASnD,SAASkT,EAAaP,GACpB,OAAOA,EAAM3S,QAAQ,gBAAiB,QAUxC,SAASoU,EAAYC,EAAIxY,GAEvB,OADAwY,EAAGxY,KAAOA,EACHwY,EAST,SAASZ,EAAOpY,GACd,OAAOA,GAAWA,EAAQG,UAAY,GAAK,IAwE7C,SAASuW,EAAgBI,EAAQtW,EAAMR,GAChCsW,EAAQ9V,KACXR,EAAkCQ,GAAQR,EAC1CQ,EAAO,IAUT,IALA,IAAIN,GAFJF,EAAUA,GAAW,IAEAE,OACjBU,GAAsB,IAAhBZ,EAAQY,IACdqY,EAAQ,GAGH/gB,EAAI,EAAGA,EAAI4e,EAAO3e,OAAQD,IAAK,CACtC,IAAIwgB,EAAQ5B,EAAO5e,GAEnB,GAAqB,kBAAVwgB,EACTO,GAASnB,EAAaY,OACjB,CACL,IAAI1T,EAAS8S,EAAaY,EAAM1T,QAC5BqS,EAAU,MAAQqB,EAAMd,QAAU,IAEtCpX,EAAK1C,KAAK4a,GAENA,EAAMhB,SACRL,GAAW,MAAQrS,EAASqS,EAAU,MAaxC4B,GANI5B,EAJAqB,EAAMf,SACHe,EAAMjB,QAGCzS,EAAS,IAAMqS,EAAU,KAFzB,MAAQrS,EAAS,IAAMqS,EAAU,MAKnCrS,EAAS,IAAMqS,EAAU,KAOzC,IAAIL,EAAYc,EAAa9X,EAAQgX,WAAa,KAC9CkC,EAAoBD,EAAM7U,OAAO4S,EAAU7e,UAAY6e,EAkB3D,OAZK9W,IACH+Y,GAASC,EAAoBD,EAAM7U,MAAM,GAAI4S,EAAU7e,QAAU8gB,GAAS,MAAQjC,EAAY,WAI9FiC,GADErY,EACO,IAIAV,GAAUgZ,EAAoB,GAAK,MAAQlC,EAAY,MAG3D+B,EAAW,IAAInC,OAAO,IAAMqC,EAAOb,EAAMpY,IAAWQ,GAe7D,SAASE,EAAchC,EAAM8B,EAAMR,GAQjC,OAPKsW,EAAQ9V,KACXR,EAAkCQ,GAAQR,EAC1CQ,EAAO,IAGTR,EAAUA,GAAW,GAEjBtB,aAAgBkY,OAlJtB,SAAyBlY,EAAM8B,GAE7B,IAAI2Y,EAASza,EAAKwD,OAAO3C,MAAM,aAE/B,GAAI4Z,EACF,IAAK,IAAIjhB,EAAI,EAAGA,EAAIihB,EAAOhhB,OAAQD,IACjCsI,EAAK1C,KAAK,CACRK,KAAMjG,EACN8M,OAAQ,KACRgS,UAAW,KACXW,UAAU,EACVD,QAAQ,EACRD,SAAS,EACTD,UAAU,EACVI,QAAS,OAKf,OAAOmB,EAAWra,EAAM8B,GAgIf4Y,CAAe1a,EAA6B8B,GAGjD8V,EAAQ5X,GAxHd,SAAwBA,EAAM8B,EAAMR,GAGlC,IAFA,IAAIqZ,EAAQ,GAEHnhB,EAAI,EAAGA,EAAIwG,EAAKvG,OAAQD,IAC/BmhB,EAAMvb,KAAK4C,EAAahC,EAAKxG,GAAIsI,EAAMR,GAASkC,QAKlD,OAAO6W,EAFM,IAAInC,OAAO,MAAQyC,EAAM5S,KAAK,KAAO,IAAK2R,EAAMpY,IAEnCQ,GAgHjB8Y,CAAqC5a,EAA8B8B,EAAOR,GArGrF,SAAyBtB,EAAM8B,EAAMR,GACnC,OAAO0W,EAAeH,EAAM7X,EAAMsB,GAAUQ,EAAMR,GAuG3CuZ,CAAsC7a,EAA8B8B,EAAOR,K,6BCtapF3F,EAAOC,QAAU,SAAcwB,EAAI0I,GACjC,OAAO,WAEL,IADA,IAAIxI,EAAO,IAAIU,MAAM5C,UAAU3B,QACtBD,EAAI,EAAGA,EAAI8D,EAAK7D,OAAQD,IAC/B8D,EAAK9D,GAAK4B,UAAU5B,GAEtB,OAAO4D,EAAG/B,MAAMyK,EAASxI,M,6BCN7B,IAAIwd,EAAQjf,EAAQ,IAEpB,SAASge,EAAOlW,GACd,OAAOoW,mBAAmBpW,GACxBsC,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KAUrBtK,EAAOC,QAAU,SAAkBqE,EAAKC,EAAQ6a,GAE9C,IAAK7a,EACH,OAAOD,EAGT,IAAI+a,EACJ,GAAID,EACFC,EAAmBD,EAAiB7a,QAC/B,GAAI4a,EAAM7V,kBAAkB/E,GACjC8a,EAAmB9a,EAAOwD,eACrB,CACL,IAAIiX,EAAQ,GAEZG,EAAM9W,QAAQ9D,GAAQ,SAAmByD,EAAK3J,GAChC,OAAR2J,GAA+B,qBAARA,IAIvBmX,EAAM7c,QAAQ0F,GAChB3J,GAAY,KAEZ2J,EAAM,CAACA,GAGTmX,EAAM9W,QAAQL,GAAK,SAAoBsX,GACjCH,EAAMlW,OAAOqW,GACfA,EAAIA,EAAEC,cACGJ,EAAMjX,SAASoX,KACxBA,EAAIf,KAAKC,UAAUc,IAErBN,EAAMvb,KAAKya,EAAO7f,GAAO,IAAM6f,EAAOoB,WAI1CD,EAAmBL,EAAM5S,KAAK,KAGhC,GAAIiT,EAAkB,CACpB,IAAIG,EAAgBlb,EAAIwI,QAAQ,MACT,IAAnB0S,IACFlb,EAAMA,EAAIyF,MAAM,EAAGyV,IAGrBlb,KAA8B,IAAtBA,EAAIwI,QAAQ,KAAc,IAAM,KAAOuS,EAGjD,OAAO/a,I,6BClETtE,EAAOC,QAAU,SAAkBlB,GACjC,SAAUA,IAASA,EAAM0gB,c,8BCH3B,YAEA,IAAIN,EAAQjf,EAAQ,IAChBwf,EAAsBxf,EAAQ,IAE9Byf,EAAuB,CACzB,eAAgB,qCAGlB,SAASC,EAAsBC,EAAS9gB,IACjCogB,EAAMlX,YAAY4X,IAAYV,EAAMlX,YAAY4X,EAAQ,mBAC3DA,EAAQ,gBAAkB9gB,GAgB9B,IAAI+gB,EAAW,CACbC,QAbF,WACE,IAAIA,EAQJ,OAP8B,qBAAnBC,gBAGmB,qBAAZC,GAAuE,qBAA5C9hB,OAAOM,UAAUsJ,SAAStH,KAAKwf,MAD1EF,EAAU7f,EAAQ,KAKb6f,EAIEG,GAETC,iBAAkB,CAAC,SAA0BlC,EAAM4B,GAGjD,OAFAH,EAAoBG,EAAS,UAC7BH,EAAoBG,EAAS,gBACzBV,EAAM1W,WAAWwV,IACnBkB,EAAM5W,cAAc0V,IACpBkB,EAAM3W,SAASyV,IACfkB,EAAM/V,SAAS6U,IACfkB,EAAMjW,OAAO+U,IACbkB,EAAMhW,OAAO8U,GAENA,EAELkB,EAAMxW,kBAAkBsV,GACnBA,EAAKnV,OAEVqW,EAAM7V,kBAAkB2U,IAC1B2B,EAAsBC,EAAS,mDACxB5B,EAAKlW,YAEVoX,EAAMjX,SAAS+V,IACjB2B,EAAsBC,EAAS,kCACxBtB,KAAKC,UAAUP,IAEjBA,IAGTmC,kBAAmB,CAAC,SAA2BnC,GAE7C,GAAoB,kBAATA,EACT,IACEA,EAAOM,KAAKrC,MAAM+B,GAClB,MAAOvb,IAEX,OAAOub,IAOToC,QAAS,EAETC,eAAgB,aAChBC,eAAgB,eAEhBC,kBAAmB,EACnBC,eAAgB,EAEhBC,eAAgB,SAAwBC,GACtC,OAAOA,GAAU,KAAOA,EAAS,KAIrCb,QAAmB,CACjBc,OAAQ,CACN,OAAU,uCAIdzB,EAAM9W,QAAQ,CAAC,SAAU,MAAO,SAAS,SAA6BgQ,GACpEyH,EAASD,QAAQxH,GAAU,MAG7B8G,EAAM9W,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BgQ,GACrEyH,EAASD,QAAQxH,GAAU8G,EAAMtV,MAAM8V,MAGzC3f,EAAOC,QAAU6f,I,+CC/FjB,IAAIX,EAAQjf,EAAQ,IAChB2gB,EAAS3gB,EAAQ,IACjB4gB,EAAU5gB,EAAQ,IAClB6gB,EAAW7gB,EAAQ,IACnB8gB,EAAgB9gB,EAAQ,IACxB+gB,EAAe/gB,EAAQ,IACvBghB,EAAkBhhB,EAAQ,IAC1BihB,EAAcjhB,EAAQ,IAE1BF,EAAOC,QAAU,SAAoBmhB,GACnC,OAAO,IAAI9f,SAAQ,SAA4BR,EAASC,GACtD,IAAIsgB,EAAcD,EAAOnD,KACrBqD,EAAiBF,EAAOvB,QAExBV,EAAM1W,WAAW4Y,WACZC,EAAe,gBAGxB,IAAIC,EAAU,IAAIvB,eAGlB,GAAIoB,EAAOI,KAAM,CACf,IAAIC,EAAWL,EAAOI,KAAKC,UAAY,GACnCC,EAAWN,EAAOI,KAAKE,SAAWC,SAASvD,mBAAmBgD,EAAOI,KAAKE,WAAa,GAC3FJ,EAAeM,cAAgB,SAAWC,KAAKJ,EAAW,IAAMC,GAGlE,IAAII,EAAWd,EAAcI,EAAOW,QAASX,EAAO9c,KA4EpD,GA3EAid,EAAQS,KAAKZ,EAAO/I,OAAOwF,cAAekD,EAASe,EAAUV,EAAO7c,OAAQ6c,EAAOhC,mBAAmB,GAGtGmC,EAAQlB,QAAUe,EAAOf,QAGzBkB,EAAQU,mBAAqB,WAC3B,GAAKV,GAAkC,IAAvBA,EAAQW,aAQD,IAAnBX,EAAQZ,QAAkBY,EAAQY,aAAwD,IAAzCZ,EAAQY,YAAYrV,QAAQ,UAAjF,CAKA,IAAIsV,EAAkB,0BAA2Bb,EAAUN,EAAaM,EAAQc,yBAA2B,KAEvGC,EAAW,CACbrE,KAFkBmD,EAAOmB,cAAwC,SAAxBnB,EAAOmB,aAAiDhB,EAAQe,SAA/Bf,EAAQiB,aAGlF7B,OAAQY,EAAQZ,OAChB8B,WAAYlB,EAAQkB,WACpB5C,QAASuC,EACThB,OAAQA,EACRG,QAASA,GAGXV,EAAO/f,EAASC,EAAQuhB,GAGxBf,EAAU,OAIZA,EAAQmB,QAAU,WACXnB,IAILxgB,EAAOogB,EAAY,kBAAmBC,EAAQ,eAAgBG,IAG9DA,EAAU,OAIZA,EAAQoB,QAAU,WAGhB5hB,EAAOogB,EAAY,gBAAiBC,EAAQ,KAAMG,IAGlDA,EAAU,MAIZA,EAAQqB,UAAY,WAClB,IAAIC,EAAsB,cAAgBzB,EAAOf,QAAU,cACvDe,EAAOyB,sBACTA,EAAsBzB,EAAOyB,qBAE/B9hB,EAAOogB,EAAY0B,EAAqBzB,EAAQ,eAC9CG,IAGFA,EAAU,MAMRpC,EAAM3V,uBAAwB,CAEhC,IAAIsZ,GAAa1B,EAAO2B,iBAAmB7B,EAAgBY,KAAcV,EAAOd,eAC9EQ,EAAQkC,KAAK5B,EAAOd,qBACpBze,EAEEihB,IACFxB,EAAeF,EAAOb,gBAAkBuC,GAuB5C,GAlBI,qBAAsBvB,GACxBpC,EAAM9W,QAAQiZ,GAAgB,SAA0BtZ,EAAK3J,GAChC,qBAAhBgjB,GAAqD,iBAAtBhjB,EAAIwO,qBAErCyU,EAAejjB,GAGtBkjB,EAAQ0B,iBAAiB5kB,EAAK2J,MAM/BmX,EAAMlX,YAAYmZ,EAAO2B,mBAC5BxB,EAAQwB,kBAAoB3B,EAAO2B,iBAIjC3B,EAAOmB,aACT,IACEhB,EAAQgB,aAAenB,EAAOmB,aAC9B,MAAO7f,GAGP,GAA4B,SAAxB0e,EAAOmB,aACT,MAAM7f,EAM6B,oBAA9B0e,EAAO8B,oBAChB3B,EAAQ3P,iBAAiB,WAAYwP,EAAO8B,oBAIP,oBAA5B9B,EAAO+B,kBAAmC5B,EAAQ6B,QAC3D7B,EAAQ6B,OAAOxR,iBAAiB,WAAYwP,EAAO+B,kBAGjD/B,EAAOiC,aAETjC,EAAOiC,YAAYC,QAAQ/hB,MAAK,SAAoBgiB,GAC7ChC,IAILA,EAAQiC,QACRziB,EAAOwiB,GAEPhC,EAAU,SAITF,IACHA,EAAc,MAIhBE,EAAQkC,KAAKpC,Q,6BC9KjB,IAAIqC,EAAexjB,EAAQ,IAY3BF,EAAOC,QAAU,SAAqB4K,EAASuW,EAAQuC,EAAMpC,EAASe,GACpE,IAAIlhB,EAAQ,IAAI0J,MAAMD,GACtB,OAAO6Y,EAAatiB,EAAOggB,EAAQuC,EAAMpC,EAASe,K,6BCdpD,IAAInD,EAAQjf,EAAQ,IAUpBF,EAAOC,QAAU,SAAqB2jB,EAASC,GAE7CA,EAAUA,GAAW,GACrB,IAAIzC,EAAS,GAET0C,EAAuB,CAAC,MAAO,SAAU,QACzCC,EAA0B,CAAC,UAAW,OAAQ,QAAS,UACvDC,EAAuB,CACzB,UAAW,mBAAoB,oBAAqB,mBACpD,UAAW,iBAAkB,kBAAmB,UAAW,eAAgB,iBAC3E,iBAAkB,mBAAoB,qBAAsB,aAC5D,mBAAoB,gBAAiB,eAAgB,YAAa,YAClE,aAAc,cAAe,aAAc,oBAEzCC,EAAkB,CAAC,kBAEvB,SAASC,EAAevmB,EAAQkK,GAC9B,OAAIsX,EAAMhX,cAAcxK,IAAWwhB,EAAMhX,cAAcN,GAC9CsX,EAAMtV,MAAMlM,EAAQkK,GAClBsX,EAAMhX,cAAcN,GACtBsX,EAAMtV,MAAM,GAAIhC,GACdsX,EAAM7c,QAAQuF,GAChBA,EAAOkC,QAETlC,EAGT,SAASsc,EAAoBC,GACtBjF,EAAMlX,YAAY4b,EAAQO,IAEnBjF,EAAMlX,YAAY2b,EAAQQ,MACpChD,EAAOgD,GAAQF,OAAeriB,EAAW+hB,EAAQQ,KAFjDhD,EAAOgD,GAAQF,EAAeN,EAAQQ,GAAOP,EAAQO,IAMzDjF,EAAM9W,QAAQyb,GAAsB,SAA0BM,GACvDjF,EAAMlX,YAAY4b,EAAQO,MAC7BhD,EAAOgD,GAAQF,OAAeriB,EAAWgiB,EAAQO,QAIrDjF,EAAM9W,QAAQ0b,EAAyBI,GAEvChF,EAAM9W,QAAQ2b,GAAsB,SAA0BI,GACvDjF,EAAMlX,YAAY4b,EAAQO,IAEnBjF,EAAMlX,YAAY2b,EAAQQ,MACpChD,EAAOgD,GAAQF,OAAeriB,EAAW+hB,EAAQQ,KAFjDhD,EAAOgD,GAAQF,OAAeriB,EAAWgiB,EAAQO,OAMrDjF,EAAM9W,QAAQ4b,GAAiB,SAAeG,GACxCA,KAAQP,EACVzC,EAAOgD,GAAQF,EAAeN,EAAQQ,GAAOP,EAAQO,IAC5CA,KAAQR,IACjBxC,EAAOgD,GAAQF,OAAeriB,EAAW+hB,EAAQQ,QAIrD,IAAIC,EAAYP,EACb/d,OAAOge,GACPhe,OAAOie,GACPje,OAAOke,GAENK,EAAYnmB,OACbgI,KAAKyd,GACL7d,OAAO5H,OAAOgI,KAAK0d,IACnBtV,QAAO,SAAyBlQ,GAC/B,OAAmC,IAA5BgmB,EAAUvX,QAAQzO,MAK7B,OAFA8gB,EAAM9W,QAAQic,EAAWH,GAElB/C,I,6BC7ET,SAASmD,EAAO1Z,GACdvL,KAAKuL,QAAUA,EAGjB0Z,EAAO9lB,UAAUsJ,SAAW,WAC1B,MAAO,UAAYzI,KAAKuL,QAAU,KAAOvL,KAAKuL,QAAU,KAG1D0Z,EAAO9lB,UAAUghB,YAAa,EAE9Bzf,EAAOC,QAAUskB,G,cClBjB,IAAIC,EAGJA,EAAK,WACJ,OAAOllB,KADH,GAIL,IAECklB,EAAIA,GAAK,IAAIC,SAAS,cAAb,GACR,MAAO/hB,GAEc,kBAAXiH,SAAqB6a,EAAI7a,QAOrC3J,EAAOC,QAAUukB,G,8BCjBjB,SAASE,IAEP,GAC4C,qBAAnCC,gCAC4C,oBAA5CA,+BAA+BD,SAcxC,IAEEC,+BAA+BD,SAASA,GACxC,MAAO9iB,GAGPgjB,QAAQxjB,MAAMQ,IAOhB8iB,GACA1kB,EAAOC,QAAUC,EAAQ,K,oNCjB3B,gBAAS2W,OAAOzG,KAAKC,UAAUtG,MAAM,GAArC,MAuBAJ,OAAOkb,cACHA,aAAaC,aAAa,WAAY,CAAEC,WAAY,SAACviB,GAAD,OAAOA,MAsB/D,WACI,IACI,IAAMmD,EAAU,CACZ,cAEI,OADwB,GACjB,IAIfgE,OAAOiI,iBAAiB,OAAQjM,EAASA,GAEzCgE,OAAOkI,oBAAoB,OAAQlM,EAASA,GAEhD,MAAOhD,MAbX,GAkCsB,qBAAXgH,SACNA,OAAM,kBAAwBA,OAAM,gBAAsB,KAAKlG,KAAK,SAgB1C,qBAApBkG,OAAOqb,UACqC,qBAAvCrb,OAAOqb,SAASC,oBAC5BL,QAAQM,KAAK,6IA8BjBvb,OAAOwb,0BACH,SAACf,EAAMgB,GAAP,OAAgBhB,GACpB,IAAMiB,EAAmB,CACrBC,YADqB,SACTvmB,EAAOwmB,GACf,OAAQA,GACJ,KAAKC,QACD,OAAOzmB,EAAQ,GAAK,KACxB,KAAKZ,OACL,KAAKkE,MAGD,OAAgB,MAATtD,EAAgBA,EAAQwf,KAAKC,UAAUzf,GAEtD,OAAOA,GAEX0mB,cAbqB,SAaP1mB,EAAOwmB,GACjB,OAAQA,GACJ,KAAKC,QACD,OAAiB,OAAVzmB,EACX,KAAK2mB,OACD,OAAiB,OAAV3mB,EAAiB,KAAO2mB,OAAO3mB,GAC1C,KAAKZ,OACL,KAAKkE,MACD,OAAOkc,KAAKrC,MAAMnd,GAE1B,OAAOA,IAOT4mB,EAAW,SAAC5mB,EAAO6mB,GAErB,OAAOA,IAAQ7mB,IAAU6mB,IAAQA,GAAO7mB,IAAUA,IAEhD8mB,EAA6B,CAC/BC,WAAW,EACXP,KAAM1O,OACNkP,UAAWV,EACXW,SAAS,EACTC,WAAYN,GAYVO,EAAY,YAOZC,E,kDACF,aAAc,kCACV,gBACKC,aAFK,E,8CAsOd,WAAa,WACT9mB,KAAK+mB,aAAe,EACpB/mB,KAAKgnB,eACD,IAAIhlB,SAAQ,SAACkb,GAAD,OAAS,EAAK+J,wBAA0B/J,KACxDld,KAAKknB,mBAAqB,IAAIC,IAC9BnnB,KAAKonB,0BAGLpnB,KAAKqnB,0B,qCAcT,WAA0B,WAGtBrnB,KAAKR,YACA8nB,iBAAiBve,SAAQ,SAACwe,EAAIhR,GAC/B,GAAI,EAAKrV,eAAeqV,GAAI,CACxB,IAAM9W,EAAQ,EAAK8W,UACZ,EAAKA,GACP,EAAKiR,sBACN,EAAKA,oBAAsB,IAAIL,KAEnC,EAAKK,oBAAoB5M,IAAIrE,EAAG9W,S,sCAO5C,WAA2B,WAIvBO,KAAKwnB,oBAAoBze,SAAQ,SAACiX,EAAGzJ,GAAJ,OAAU,EAAKA,GAAKyJ,KACrDhgB,KAAKwnB,yBAAsBjlB,I,+BAE/B,WAGIvC,KAAKynB,mB,4BAET,gBACyCllB,IAAjCvC,KAAKinB,0BACLjnB,KAAKinB,0BACLjnB,KAAKinB,6BAA0B1kB,K,kCAQvC,c,sCAKA,SAAyBiC,EAAM8hB,EAAK7mB,GAC5B6mB,IAAQ7mB,GACRO,KAAK0nB,qBAAqBljB,EAAM/E,K,kCAGxC,SAAqB+E,EAAM/E,GAA6C,IAAtC4G,EAAsC,uDAA5BkgB,EAClCoB,EAAO3nB,KAAKR,YACZooB,EAAOD,EAAKE,0BAA0BrjB,EAAM6B,GAClD,QAAa9D,IAATqlB,EAAoB,CACpB,IAAME,EAAYH,EAAKI,0BAA0BtoB,EAAO4G,GAExD,QAAkB9D,IAAdulB,EACA,OAUJ9nB,KAAK+mB,aAhVwB,EAgVT/mB,KAAK+mB,aACR,MAAbe,EACA9nB,KAAKgoB,gBAAgBJ,GAGrB5nB,KAAKioB,aAAaL,EAAME,GAG5B9nB,KAAK+mB,cAAmC,EAApB/mB,KAAK+mB,gB,kCAGjC,SAAqBviB,EAAM/E,GAGvB,KA9ViC,EA8V7BO,KAAK+mB,cAAT,CAGA,IAAMY,EAAO3nB,KAAKR,YAIZ0oB,EAAWP,EAAKQ,wBAAwBpnB,IAAIyD,GAClD,QAAiBjC,IAAb2lB,EAAwB,CACxB,IAAM7hB,EAAUshB,EAAKS,mBAAmBF,GAExCloB,KAAK+mB,aAxWuB,GAwWR/mB,KAAK+mB,aACzB/mB,KAAKkoB,GAEDP,EAAKU,4BAA4B5oB,EAAO4G,GAE5CrG,KAAK+mB,cAAmC,GAApB/mB,KAAK+mB,iB,mCAQjC,SAAsBviB,EAAMqX,EAAUxV,GAClC,IAAIiiB,GAAsB,EAE1B,QAAa/lB,IAATiC,EAAoB,CACpB,IAAMmjB,EAAO3nB,KAAKR,YAClB6G,EAAUA,GAAWshB,EAAKS,mBAAmB5jB,GACzCmjB,EAAKY,iBAAiBvoB,KAAKwE,GAAOqX,EAAUxV,EAAQsgB,aAC/C3mB,KAAKknB,mBAAmBsB,IAAIhkB,IAC7BxE,KAAKknB,mBAAmBtM,IAAIpW,EAAMqX,IAMd,IAApBxV,EAAQqgB,SAnYY,GAoYlB1mB,KAAK+mB,oBAC4BxkB,IAA/BvC,KAAKyoB,wBACLzoB,KAAKyoB,sBAAwB,IAAItB,KAErCnnB,KAAKyoB,sBAAsB7N,IAAIpW,EAAM6B,KAKzCiiB,GAAsB,GAGzBtoB,KAAK0oB,qBAAuBJ,IAC7BtoB,KAAKgnB,eAAiBhnB,KAAK2oB,oB,2BAgBnC,SAAcnkB,EAAMqX,GAEhB,OADA7b,KAAKqnB,sBAAsB7iB,EAAMqX,GAC1B7b,KAAK4oB,iB,mEAKhB,4BAAAje,EAAA,6DACI3K,KAAK+mB,aA3akB,EA2aH/mB,KAAK+mB,aAD7B,kBAKc/mB,KAAKgnB,eALnB,gEAekB,OAJRnnB,EAASG,KAAK6oB,iBAXxB,kCAgBchpB,EAhBd,kCAkBYG,KAAK0oB,qBAlBjB,yD,qFAoBA,WACI,OA/buB,EA+bf1oB,KAAK+mB,e,sBAEjB,WACI,OAnckB,EAmcV/mB,KAAK+mB,e,2BAkBjB,WAII,GAAK/mB,KAAK0oB,oBAAV,CAII1oB,KAAKwnB,qBACLxnB,KAAK8oB,2BAET,IAAIC,GAAe,EACbC,EAAoBhpB,KAAKknB,mBAC/B,KACI6B,EAAe/oB,KAAK+oB,aAAaC,IAE7BhpB,KAAKipB,OAAOD,GAGZhpB,KAAKkpB,eAGb,MAAO9lB,IAMH,MAHA2lB,GAAe,EAEf/oB,KAAKkpB,eACC9lB,GAEN2lB,IAnfc,EAofR/oB,KAAK+mB,eACP/mB,KAAK+mB,aArfK,EAqfU/mB,KAAK+mB,aACzB/mB,KAAKmpB,aAAaH,IAEtBhpB,KAAKopB,QAAQJ,O,0BAGrB,WACIhpB,KAAKknB,mBAAqB,IAAIC,IAC9BnnB,KAAK+mB,cAAmC,EAApB/mB,KAAK+mB,e,0BAiB7B,WACI,OAAO/mB,KAAKqpB,uB,gCAkBhB,WACI,OAAOrpB,KAAKgnB,iB,0BAShB,SAAaE,GACT,OAAO,I,oBAUX,SAAOA,GAAoB,gBACY3kB,IAA/BvC,KAAKyoB,uBACLzoB,KAAKyoB,sBAAsBa,KAAO,IAGlCtpB,KAAKyoB,sBAAsB1f,SAAQ,SAACiX,EAAGlU,GAAJ,OAAU,EAAKyd,qBAAqBzd,EAAG,EAAKA,GAAIkU,MACnFhgB,KAAKyoB,2BAAwBlmB,GAEjCvC,KAAKkpB,iB,qBAWT,SAAQhC,M,0BAWR,SAAaA,O,+BA1jBb,WAAgC,WAE5BlnB,KAAKwpB,WACL,IAAMC,EAAa,GAUnB,OAPAzpB,KAAKsnB,iBAAiBve,SAAQ,SAACiX,EAAGzJ,GAC9B,IAAMqR,EAAO,EAAKC,0BAA0BtR,EAAGyJ,QAClCzd,IAATqlB,IACA,EAAKO,wBAAwBvN,IAAIgN,EAAMrR,GACvCkT,EAAWtlB,KAAKyjB,OAGjB6B,I,oCAQX,WAAgC,WAE5B,IAAKzpB,KAAKkB,eAAe2kB,0BAA0B,mBAAoB7lB,OAAQ,CAC3EA,KAAKsnB,iBAAmB,IAAIH,IAE5B,IAAMuC,EAAkB7qB,OAAO2B,eAAeR,MAAMsnB,sBAC5B/kB,IAApBmnB,GACAA,EAAgB3gB,SAAQ,SAACiX,EAAGlU,GAAJ,OAAU,EAAKwb,iBAAiB1M,IAAI9O,EAAGkU,S,4BA0B3E,SAAsBxb,GAA4C,IAAtC6B,EAAsC,uDAA5BkgB,EAWlC,GAPAvmB,KAAK2pB,yBACL3pB,KAAKsnB,iBAAiB1M,IAAIpW,EAAM6B,IAM5BA,EAAQujB,aAAc5pB,KAAKb,UAAU+B,eAAesD,GAAxD,CAGA,IAAMzF,EAAsB,kBAATyF,EAAoB3B,SAA3B,YAA2C2B,GACjD/F,EAAauB,KAAK6pB,sBAAsBrlB,EAAMzF,EAAKsH,QACtC9D,IAAf9D,GACAI,OAAOC,eAAekB,KAAKb,UAAWqF,EAAM/F,M,mCA2BpD,SAA6B+F,EAAMzF,EAAKsH,GACpC,MAAO,CAEHtF,IAFG,WAGC,OAAOf,KAAKjB,IAEhB6b,IALG,SAKCnb,GACA,IAAMoc,EAAW7b,KAAKwE,GACtBxE,KAAKjB,GAAOU,EACZO,KACKqnB,sBAAsB7iB,EAAMqX,EAAUxV,IAE/C1H,cAAc,EACdD,YAAY,K,gCAepB,SAA0B8F,GACtB,OAAOxE,KAAKsnB,kBAAoBtnB,KAAKsnB,iBAAiBvmB,IAAIyD,IACtD+hB,I,sBAOR,WAEI,IAAMuD,EAAYjrB,OAAO2B,eAAeR,MAYxC,GAXK8pB,EAAU5oB,eAAe0lB,IAC1BkD,EAAUN,WAEdxpB,KAAA,WAAkB,EAClBA,KAAK2pB,yBAEL3pB,KAAKmoB,wBAA0B,IAAIhB,IAK/BnnB,KAAKkB,eAAe2kB,0BAA0B,aAAc7lB,OAAQ,CACpE,IADoE,EAC9D1B,EAAQ0B,KAAK+pB,WAEbC,EAAW,GAAH,mBACPnrB,OAAO2Y,oBAAoBlZ,IADpB,YAEkC,oBAAjCO,OAAOqY,sBACdrY,OAAOqY,sBAAsB5Y,GAC7B,KAP4D,cAUpD0rB,GAVoD,IAUpE,2BAA0B,KAAfzT,EAAe,QAItBvW,KAAKiqB,eAAe1T,EAAGjY,EAAMiY,KAdmC,kC,uCAsB5E,SAAiC/R,EAAM6B,GACnC,IAAMmgB,EAAYngB,EAAQmgB,UAC1B,OAAqB,IAAdA,OACHjkB,EACsB,kBAAdikB,EACJA,EACiB,kBAAThiB,EAAoBA,EAAK+I,mBAAgBhL,I,8BAQ7D,SAAwB9C,EAAO6mB,GAA4B,IAAvBK,EAAuB,uDAAVN,EAC7C,OAAOM,EAAWlnB,EAAO6mB,K,yCAQ7B,SAAmC7mB,EAAO4G,GACtC,IAAM4f,EAAO5f,EAAQ4f,KACfQ,EAAYpgB,EAAQogB,WAAaV,EACjCI,EAAsC,oBAAdM,EAA2BA,EAAYA,EAAUN,cAC/E,OAAOA,EAAgBA,EAAc1mB,EAAOwmB,GAAQxmB,I,uCAUxD,SAAiCA,EAAO4G,GACpC,QAAwB9D,IAApB8D,EAAQqgB,QAAZ,CAGA,IAAMT,EAAO5f,EAAQ4f,KACfQ,EAAYpgB,EAAQogB,UAG1B,OAFoBA,GAAaA,EAAUT,aACvCD,EAAiBC,aACFvmB,EAAOwmB,Q,eAjOJiE,cA0kB9BrD,EAAe,WAAS,EA4ExB,SAAShmB,EAASwF,GAEd,OAAO,SAAC8jB,EAAmB3lB,GAApB,YAAuCjC,IAATiC,EAxBlB,SAAC6B,EAAS+jB,EAAO5lB,GACpC4lB,EAAM5qB,YACDyqB,eAAezlB,EAAM6B,GAuBtBgkB,CAAehkB,EAAS8jB,EAAmB3lB,GAhE1B,SAAC6B,EAAS4B,GAI/B,MAAqB,WAAjBA,EAAQqiB,MAAqBriB,EAAQxJ,cACnC,UAAWwJ,EAAQxJ,YACdI,OAAOyJ,OAAOzJ,OAAOyJ,OAAO,GAAIL,GAAU,CAAEsiB,SAAF,SAAWC,GACpDA,EAAMP,eAAehiB,EAAQlJ,IAAKsH,MAOnC,CACHikB,KAAM,QACNvrB,IAAK8D,SACL4nB,UAAW,MACXhsB,WAAY,GAUZisB,YAdG,WAeoC,oBAAxBziB,EAAQyiB,cACf1qB,KAAKiI,EAAQlJ,KAAOkJ,EAAQyiB,YAAYvpB,KAAKnB,QAGrDuqB,SAnBG,SAmBMC,GACLA,EAAMP,eAAehiB,EAAQlJ,IAAKsH,KA+B1CskB,CAAiBtkB,EAAS8jB,IAgBjC9f,OAAOugB,kBACiBroB,IAApB8H,OAAOqb,UAA0Brb,OAAOqb,SAASmF,eACjD,uBAAwBC,SAAS3rB,WACpB4rB,cAAc5rB,WAkB/BkL,OAAM,qBAA2BA,OAAM,mBAAyB,KAC5DlG,KAAK,SAmBV,IAAM6mB,EAAuC,MAAhB7gB,UAAU8gB,IACjB,MAAlB7oB,KAAK8oB,WAAwD,MAAnC/gB,UAAU8gB,GAAGE,mBACrCC,EAAyBJ,GAAwB5oB,KAAK8oB,UAAU/rB,UAAUksB,qBAC1EC,EAA6C,MAAvBlpB,KAAKmpB,eAC3BC,EAAyD,MAA7BppB,KAAKqpB,qBACjCC,EAAwBN,GAC9B,WACI,IAAMpb,EAAY7F,UAAU6F,WAAa7F,UAAUwhB,QAAUvpB,KAAKwpB,MAC9DC,GAAQ,GAER,2TACCxV,KAAKrG,IACN,0kDACKqG,KAAKrG,EAAUjD,OAAO,EAAG,OAC9B8e,GAAQ,GARhB,GAYA,WAAWxV,KAAKlM,UAAU6F,WAG1B,IAIM8b,EAAa,WAAWzV,KAAKlM,UAAU6F,WAYvC+b,EAAU,mBAAmB1V,KAAKlM,UAAU6F,aAAe5N,KAAK4pB,UAC1C,aAAvB7hB,UAAU8hB,UAA2B9hB,UAAU+hB,eAAiB,EAC/DC,EAA6B,WAC/B,IAAMC,EAAa9hB,SAASgF,cAAc,KAC1C,OAAO4W,QAAQkG,EAAWC,SAAWD,EAAWC,QAAQC,UACpDF,EAAWC,QAAQC,SAAS,OAHD,GAMnC,WAAWjW,KAAKlM,UAAU6F,WAC1B,IAAMuc,EAAa,WAAWlW,KAAKlM,UAAU6F,WACvCwc,EAAY,gBAAgBnW,KAAKlM,UAAU6F,WACjD+b,GAAU,UAAU1V,KAAKlM,UAAU6F,WACnC,IAAMyc,EAA2BX,IAAeS,IAAeC,EAqHzDE,EAAWpiB,SAASgF,cAAc,YACxCod,EAASC,UAAT,qzLAjCc,+gCAiCd,oMApEqB,0rKAoErB,2qBAtGgB,83BAsGhB,+DAglBA,IA5QA,IA+BMC,EAAc,IAqCdC,EAAmC,IAEnCC,EAA0B,IAE1BC,EAAiB,IACjBC,EAAsB,KACtBC,EAAyB,KACzBC,EAAgB,KAChBC,EAA6B,KAC7BC,EAA4B,KAC5BC,EAAe,KACfC,EAA4B,KAC5BC,EAA2B,KAC3BC,EAAmB,KAGnBC,EAAoB,KAEpBC,EAAkB,KAClBC,GAAY,KACZC,GAAgB,KAIhBC,GAAqB,KAErBC,GAAY,KACZC,GAAa,KAIbC,GAAc,KACdC,GAAqB,KAQrBC,GAAuB,MAGvBC,GAAwB,MACxBC,GAA0B,MAE1BC,GAA2B,MAG3BC,GAAkB,MAClBC,GAAuB,MAiCvBC,GAAsB,KACtBC,GAAoB,KACpBC,GAAoB,KACpBC,GAAsB,KACtBC,GAAkB,KAClBC,GAAmB,KACnBC,GAA2B,KAC3BC,GAA6B,KAI7BC,GAAiB,IACjBC,GAAe,KACfC,GAAgB,KAChBC,GAAe,KASfC,GAAgB,KAGhBC,GAAkB,MAClBC,GAAmB,MACnBC,GAAQ,SAMRC,G,gGAEL,SAAkBvJ,EAAMjX,QAEEzM,IAApBvC,KAAKyvB,aAA2BzvB,KAAKyvB,WAAa,IAEvD,IAAMlhB,EAAYvO,KAAKyvB,gBAEIltB,IAAtBgM,EAAW0X,KAEf1X,EAAW0X,GAAS,KAI4B,IAA5C1X,EAAW0X,GAAOzY,QAASwB,IAE/BT,EAAW0X,GAAO9hB,KAAM6K,K,8BAM1B,SAAkBiX,EAAMjX,GAEvB,QAAyBzM,IAApBvC,KAAKyvB,WAA2B,OAAO,EAE5C,IAAMlhB,EAAYvO,KAAKyvB,WAEvB,YAA6BltB,IAAtBgM,EAAW0X,KAAoE,IAA5C1X,EAAW0X,GAAOzY,QAASwB,K,iCAItE,SAAqBiX,EAAMjX,GAE1B,QAAyBzM,IAApBvC,KAAKyvB,WAAV,CAEA,IACMC,EADY1vB,KAAKyvB,WACUxJ,GAEjC,QAAuB1jB,IAAlBmtB,EAA8B,CAElC,IAAM7jB,EAAQ6jB,EAAcliB,QAASwB,IAEpB,IAAZnD,GAEJ6jB,EAAc/Z,OAAQ9J,EAAO,O,2BAQhC,SAAeuF,GAEd,QAAyB7O,IAApBvC,KAAKyvB,WAAV,CAEA,IACMC,EADY1vB,KAAKyvB,WACUre,EAAM6U,MAEvC,QAAuB1jB,IAAlBmtB,EAA8B,CAElCte,EAAM/S,OAAS2B,KAKf,IAFA,IAAM2vB,EAAQD,EAAcjlB,MAAO,GAEzBlM,EAAI,EAAGyK,EAAI2mB,EAAMnxB,OAAQD,EAAIyK,EAAGzK,IAEzCoxB,EAAOpxB,GAAI4C,KAAMnB,KAAMoR,GAIxBA,EAAM/S,OAAS,W,KAQZuxB,GAAO,GAEHrxB,GAAI,EAAGA,GAAI,IAAKA,KAEzBqxB,GAAMrxB,KAAQA,GAAI,GAAK,IAAM,IAASA,GAAIkK,SAAU,IAIrD,IAAIonB,GAAQ,QAGNC,GAAUhf,KAAKif,GAAK,IACpBC,GAAU,IAAMlf,KAAKif,GAG3B,SAASE,KAER,IAAMC,EAAqB,WAAhBpf,KAAKC,SAAwB,EAClCof,EAAqB,WAAhBrf,KAAKC,SAAwB,EAClCqf,EAAqB,WAAhBtf,KAAKC,SAAwB,EAClCsf,EAAqB,WAAhBvf,KAAKC,SAAwB,EAOxC,OANa6e,GAAW,IAALM,GAAcN,GAAMM,GAAM,EAAI,KAASN,GAAMM,GAAM,GAAK,KAASN,GAAMM,GAAM,GAAK,KAAS,IAC5GN,GAAW,IAALO,GAAcP,GAAMO,GAAM,EAAI,KAAS,IAAMP,GAAMO,GAAM,GAAK,GAAO,IAASP,GAAMO,GAAM,GAAK,KAAS,IAC9GP,GAAW,GAALQ,EAAY,KAASR,GAAMQ,GAAM,EAAI,KAAS,IAAMR,GAAMQ,GAAM,GAAK,KAASR,GAAMQ,GAAM,GAAK,KACrGR,GAAW,IAALS,GAAcT,GAAMS,GAAM,EAAI,KAAST,GAAMS,GAAM,GAAK,KAAST,GAAMS,GAAM,GAAK,MAG9E9R,cAIb,SAAS+R,GAAS7wB,EAAOsV,EAAKC,GAE7B,OAAOlE,KAAKkE,IAAKD,EAAKjE,KAAKiE,IAAKC,EAAKvV,IAMtC,SAAS8wB,GAAiBptB,EAAGoa,GAE5B,OAAWpa,EAAIoa,EAAMA,GAAMA,EA2B5B,SAASiT,GAAM1U,EAAGC,EAAG0U,GAEpB,OAAS,EAAIA,GAAM3U,EAAI2U,EAAI1U,EAuF5B,SAAS2U,GAAcjxB,GAEtB,OAAqC,KAA5BA,EAAUA,EAAQ,IAAyB,IAAVA,EAI3C,SAASkxB,GAAgBlxB,GAExB,OAAOqR,KAAK8f,IAAK,EAAG9f,KAAK+f,KAAM/f,KAAKggB,IAAKrxB,GAAUqR,KAAKigB,MAIzD,SAASC,GAAiBvxB,GAEzB,OAAOqR,KAAK8f,IAAK,EAAG9f,KAAKmgB,MAAOngB,KAAKggB,IAAKrxB,GAAUqR,KAAKigB,MA4D1D,IAAIG,GAAyBryB,OAAOsyB,OAAO,CAC1C1wB,UAAW,KACXqvB,QAASA,GACTE,QAASA,GACTC,aAAcA,GACdrb,MAAO0b,GACPC,gBAAiBA,GACjBa,UAhMD,SAAoBtV,EAAGuV,EAAIC,EAAIC,EAAIC,GAElC,OAAOD,GAAOzV,EAAIuV,IAASG,EAAKD,IAASD,EAAKD,IA+L9CI,YA1LD,SAAsB3V,EAAGC,EAAGtc,GAE3B,OAAKqc,IAAMC,GAEDtc,EAAQqc,IAAQC,EAAID,GAItB,GAmLR0U,KAAMA,GACNkB,KAtKD,SAAe5V,EAAGC,EAAG4V,EAAQC,GAE5B,OAAOpB,GAAM1U,EAAGC,EAAG,EAAIjL,KAAK+gB,KAAOF,EAASC,KAqK5CE,SAhKD,SAAmBhW,GAAgB,IAAbtd,EAAa,uDAAJ,EAE9B,OAAOA,EAASsS,KAAKihB,IAAKxB,GAAiBzU,EAAY,EAATtd,GAAeA,IA+J7DwzB,WA1JD,SAAqBlW,EAAG/G,EAAKC,GAE5B,OAAK8G,GAAK/G,EAAa,EAClB+G,GAAK9G,EAAa,GAEvB8G,GAAMA,EAAI/G,IAAUC,EAAMD,IAEf+G,GAAM,EAAI,EAAIA,IAoJzBmW,aAhJD,SAAuBnW,EAAG/G,EAAKC,GAE9B,OAAK8G,GAAK/G,EAAa,EAClB+G,GAAK9G,EAAa,GAEvB8G,GAAMA,EAAI/G,IAAUC,EAAMD,IAEf+G,EAAIA,GAAMA,GAAU,EAAJA,EAAQ,IAAO,KA0I1CoW,QArID,SAAkBC,EAAKC,GAEtB,OAAOD,EAAMrhB,KAAKmgB,MAAOngB,KAAKC,UAAaqhB,EAAOD,EAAM,KAoIxDE,UA/HD,SAAoBF,EAAKC,GAExB,OAAOD,EAAMrhB,KAAKC,UAAaqhB,EAAOD,IA8HtCG,gBAzHD,SAA0BC,GAEzB,OAAOA,GAAU,GAAMzhB,KAAKC,WAwH5ByhB,aAnHD,SAAuBtvB,GAQtB,YANWX,IAANW,IAAkB2sB,GAAQ3sB,EAAI,cAInC2sB,GAAgB,MAARA,GAAgB,YAEP,GAAM,YA4GvB4C,SAxGD,SAAmBC,GAElB,OAAOA,EAAU5C,IAuGjB6C,SAnGD,SAAmBC,GAElB,OAAOA,EAAU5C,IAkGjBU,aAAcA,GACdC,eAAgBA,GAChBK,gBAAiBA,GACjB6B,6BA/ED,SAAuCC,EAAGnoB,EAAGC,EAAG0T,EAAGyU,GAQlD,IAAMC,EAAMliB,KAAKkiB,IACXC,EAAMniB,KAAKmiB,IAEXC,EAAKF,EAAKpoB,EAAI,GACduoB,EAAKF,EAAKroB,EAAI,GAEdwoB,EAAMJ,GAAOroB,EAAI2T,GAAM,GACvB+U,EAAMJ,GAAOtoB,EAAI2T,GAAM,GAEvBgV,EAAON,GAAOroB,EAAI2T,GAAM,GACxBiV,EAAON,GAAOtoB,EAAI2T,GAAM,GAExBkV,EAAOR,GAAO1U,EAAI3T,GAAM,GACxB8oB,EAAOR,GAAO3U,EAAI3T,GAAM,GAE9B,OAASooB,GAER,IAAK,MACJD,EAAElY,IAAKsY,EAAKG,EAAKF,EAAKG,EAAMH,EAAKI,EAAML,EAAKE,GAC5C,MAED,IAAK,MACJN,EAAElY,IAAKuY,EAAKI,EAAML,EAAKG,EAAKF,EAAKG,EAAMJ,EAAKE,GAC5C,MAED,IAAK,MACJN,EAAElY,IAAKuY,EAAKG,EAAMH,EAAKI,EAAML,EAAKG,EAAKH,EAAKE,GAC5C,MAED,IAAK,MACJN,EAAElY,IAAKsY,EAAKG,EAAKF,EAAKM,EAAMN,EAAKK,EAAMN,EAAKE,GAC5C,MAED,IAAK,MACJN,EAAElY,IAAKuY,EAAKK,EAAMN,EAAKG,EAAKF,EAAKM,EAAMP,EAAKE,GAC5C,MAED,IAAK,MACJN,EAAElY,IAAKuY,EAAKM,EAAMN,EAAKK,EAAMN,EAAKG,EAAKH,EAAKE,GAC5C,MAED,QACC9N,QAAQM,KAAM,kFAAoFmN,OAgC/FW,G,WAEL,aAA4B,IAAf5X,EAAe,uDAAX,EAAGC,EAAQ,uDAAJ,EAAI,oBAE3B/b,KAAK8b,EAAIA,EACT9b,KAAK+b,EAAIA,E,uCAIV,WAEC,OAAO/b,KAAK8b,G,IAIb,SAAWrc,GAEVO,KAAK8b,EAAIrc,I,kBAIV,WAEC,OAAOO,KAAK+b,G,IAIb,SAAYtc,GAEXO,KAAK+b,EAAItc,I,iBAIV,SAAKqc,EAAGC,GAKP,OAHA/b,KAAK8b,EAAIA,EACT9b,KAAK+b,EAAIA,EAEF/b,O,uBAIR,SAAW2zB,GAKV,OAHA3zB,KAAK8b,EAAI6X,EACT3zB,KAAK+b,EAAI4X,EAEF3zB,O,kBAIR,SAAM8b,GAIL,OAFA9b,KAAK8b,EAAIA,EAEF9b,O,kBAIR,SAAM+b,GAIL,OAFA/b,KAAK+b,EAAIA,EAEF/b,O,0BAIR,SAAc6L,EAAOpM,GAEpB,OAASoM,GAER,KAAK,EAAG7L,KAAK8b,EAAIrc,EAAO,MACxB,KAAK,EAAGO,KAAK+b,EAAItc,EAAO,MACxB,QAAS,MAAM,IAAI+L,MAAO,0BAA4BK,GAIvD,OAAO7L,O,0BAIR,SAAc6L,GAEb,OAASA,GAER,KAAK,EAAG,OAAO7L,KAAK8b,EACpB,KAAK,EAAG,OAAO9b,KAAK+b,EACpB,QAAS,MAAM,IAAIvQ,MAAO,0BAA4BK,M,mBAMxD,WAEC,OAAO,IAAI7L,KAAKR,YAAaQ,KAAK8b,EAAG9b,KAAK+b,K,kBAI3C,SAAMiE,GAKL,OAHAhgB,KAAK8b,EAAIkE,EAAElE,EACX9b,KAAK+b,EAAIiE,EAAEjE,EAEJ/b,O,iBAIR,SAAKggB,EAAG4T,GAEP,YAAWrxB,IAANqxB,GAEJtO,QAAQM,KAAM,yFACP5lB,KAAK6zB,WAAY7T,EAAG4T,KAI5B5zB,KAAK8b,GAAKkE,EAAElE,EACZ9b,KAAK+b,GAAKiE,EAAEjE,EAEL/b,Q,uBAIR,SAAWkD,GAKV,OAHAlD,KAAK8b,GAAK5Y,EACVlD,KAAK+b,GAAK7Y,EAEHlD,O,wBAIR,SAAY2K,EAAGC,GAKd,OAHA5K,KAAK8b,EAAInR,EAAEmR,EAAIlR,EAAEkR,EACjB9b,KAAK+b,EAAIpR,EAAEoR,EAAInR,EAAEmR,EAEV/b,O,6BAIR,SAAiBggB,EAAG9c,GAKnB,OAHAlD,KAAK8b,GAAKkE,EAAElE,EAAI5Y,EAChBlD,KAAK+b,GAAKiE,EAAEjE,EAAI7Y,EAETlD,O,iBAIR,SAAKggB,EAAG4T,GAEP,YAAWrxB,IAANqxB,GAEJtO,QAAQM,KAAM,yFACP5lB,KAAK8zB,WAAY9T,EAAG4T,KAI5B5zB,KAAK8b,GAAKkE,EAAElE,EACZ9b,KAAK+b,GAAKiE,EAAEjE,EAEL/b,Q,uBAIR,SAAWkD,GAKV,OAHAlD,KAAK8b,GAAK5Y,EACVlD,KAAK+b,GAAK7Y,EAEHlD,O,wBAIR,SAAY2K,EAAGC,GAKd,OAHA5K,KAAK8b,EAAInR,EAAEmR,EAAIlR,EAAEkR,EACjB9b,KAAK+b,EAAIpR,EAAEoR,EAAInR,EAAEmR,EAEV/b,O,sBAIR,SAAUggB,GAKT,OAHAhgB,KAAK8b,GAAKkE,EAAElE,EACZ9b,KAAK+b,GAAKiE,EAAEjE,EAEL/b,O,4BAIR,SAAgB2zB,GAKf,OAHA3zB,KAAK8b,GAAK6X,EACV3zB,KAAK+b,GAAK4X,EAEH3zB,O,oBAIR,SAAQggB,GAKP,OAHAhgB,KAAK8b,GAAKkE,EAAElE,EACZ9b,KAAK+b,GAAKiE,EAAEjE,EAEL/b,O,0BAIR,SAAc2zB,GAEb,OAAO3zB,KAAK+zB,eAAgB,EAAIJ,K,0BAIjC,SAAcpW,GAEb,IAAMzB,EAAI9b,KAAK8b,EAAGC,EAAI/b,KAAK+b,EACrB3Y,EAAIma,EAAEyW,SAKZ,OAHAh0B,KAAK8b,EAAI1Y,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,GACtCpD,KAAK+b,EAAI3Y,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,GAE/BpD,O,iBAIR,SAAKggB,GAKJ,OAHAhgB,KAAK8b,EAAIhL,KAAKiE,IAAK/U,KAAK8b,EAAGkE,EAAElE,GAC7B9b,KAAK+b,EAAIjL,KAAKiE,IAAK/U,KAAK+b,EAAGiE,EAAEjE,GAEtB/b,O,iBAIR,SAAKggB,GAKJ,OAHAhgB,KAAK8b,EAAIhL,KAAKkE,IAAKhV,KAAK8b,EAAGkE,EAAElE,GAC7B9b,KAAK+b,EAAIjL,KAAKkE,IAAKhV,KAAK+b,EAAGiE,EAAEjE,GAEtB/b,O,mBAIR,SAAO+U,EAAKC,GAOX,OAHAhV,KAAK8b,EAAIhL,KAAKkE,IAAKD,EAAI+G,EAAGhL,KAAKiE,IAAKC,EAAI8G,EAAG9b,KAAK8b,IAChD9b,KAAK+b,EAAIjL,KAAKkE,IAAKD,EAAIgH,EAAGjL,KAAKiE,IAAKC,EAAI+G,EAAG/b,KAAK+b,IAEzC/b,O,yBAIR,SAAai0B,EAAQC,GAKpB,OAHAl0B,KAAK8b,EAAIhL,KAAKkE,IAAKif,EAAQnjB,KAAKiE,IAAKmf,EAAQl0B,KAAK8b,IAClD9b,KAAK+b,EAAIjL,KAAKkE,IAAKif,EAAQnjB,KAAKiE,IAAKmf,EAAQl0B,KAAK+b,IAE3C/b,O,yBAIR,SAAa+U,EAAKC,GAEjB,IAAMxW,EAASwB,KAAKxB,SAEpB,OAAOwB,KAAKm0B,aAAc31B,GAAU,GAAIu1B,eAAgBjjB,KAAKkE,IAAKD,EAAKjE,KAAKiE,IAAKC,EAAKxW,O,mBAIvF,WAKC,OAHAwB,KAAK8b,EAAIhL,KAAKmgB,MAAOjxB,KAAK8b,GAC1B9b,KAAK+b,EAAIjL,KAAKmgB,MAAOjxB,KAAK+b,GAEnB/b,O,kBAIR,WAKC,OAHAA,KAAK8b,EAAIhL,KAAK+f,KAAM7wB,KAAK8b,GACzB9b,KAAK+b,EAAIjL,KAAK+f,KAAM7wB,KAAK+b,GAElB/b,O,mBAIR,WAKC,OAHAA,KAAK8b,EAAIhL,KAAKsjB,MAAOp0B,KAAK8b,GAC1B9b,KAAK+b,EAAIjL,KAAKsjB,MAAOp0B,KAAK+b,GAEnB/b,O,yBAIR,WAKC,OAHAA,KAAK8b,EAAM9b,KAAK8b,EAAI,EAAMhL,KAAK+f,KAAM7wB,KAAK8b,GAAMhL,KAAKmgB,MAAOjxB,KAAK8b,GACjE9b,KAAK+b,EAAM/b,KAAK+b,EAAI,EAAMjL,KAAK+f,KAAM7wB,KAAK+b,GAAMjL,KAAKmgB,MAAOjxB,KAAK+b,GAE1D/b,O,oBAIR,WAKC,OAHAA,KAAK8b,GAAM9b,KAAK8b,EAChB9b,KAAK+b,GAAM/b,KAAK+b,EAET/b,O,iBAIR,SAAKggB,GAEJ,OAAOhgB,KAAK8b,EAAIkE,EAAElE,EAAI9b,KAAK+b,EAAIiE,EAAEjE,I,mBAIlC,SAAOiE,GAEN,OAAOhgB,KAAK8b,EAAIkE,EAAEjE,EAAI/b,KAAK+b,EAAIiE,EAAElE,I,sBAIlC,WAEC,OAAO9b,KAAK8b,EAAI9b,KAAK8b,EAAI9b,KAAK+b,EAAI/b,KAAK+b,I,oBAIxC,WAEC,OAAOjL,KAAKujB,KAAMr0B,KAAK8b,EAAI9b,KAAK8b,EAAI9b,KAAK+b,EAAI/b,KAAK+b,K,6BAInD,WAEC,OAAOjL,KAAKihB,IAAK/xB,KAAK8b,GAAMhL,KAAKihB,IAAK/xB,KAAK+b,K,uBAI5C,WAEC,OAAO/b,KAAKm0B,aAAcn0B,KAAKxB,UAAY,K,mBAI5C,WAIC,IAAM81B,EAAQxjB,KAAKyjB,OAASv0B,KAAK+b,GAAK/b,KAAK8b,GAAMhL,KAAKif,GAEtD,OAAOuE,I,wBAIR,SAAYtU,GAEX,OAAOlP,KAAKujB,KAAMr0B,KAAKw0B,kBAAmBxU,M,+BAI3C,SAAmBA,GAElB,IAAMyU,EAAKz0B,KAAK8b,EAAIkE,EAAElE,EAAG4Y,EAAK10B,KAAK+b,EAAIiE,EAAEjE,EACzC,OAAO0Y,EAAKA,EAAKC,EAAKA,I,iCAIvB,SAAqB1U,GAEpB,OAAOlP,KAAKihB,IAAK/xB,KAAK8b,EAAIkE,EAAElE,GAAMhL,KAAKihB,IAAK/xB,KAAK+b,EAAIiE,EAAEjE,K,uBAIxD,SAAWvd,GAEV,OAAOwB,KAAK20B,YAAYZ,eAAgBv1B,K,kBAIzC,SAAMwhB,EAAG4U,GAKR,OAHA50B,KAAK8b,IAAOkE,EAAElE,EAAI9b,KAAK8b,GAAM8Y,EAC7B50B,KAAK+b,IAAOiE,EAAEjE,EAAI/b,KAAK+b,GAAM6Y,EAEtB50B,O,yBAIR,SAAa60B,EAAIC,EAAIF,GAKpB,OAHA50B,KAAK8b,EAAI+Y,EAAG/Y,GAAMgZ,EAAGhZ,EAAI+Y,EAAG/Y,GAAM8Y,EAClC50B,KAAK+b,EAAI8Y,EAAG9Y,GAAM+Y,EAAG/Y,EAAI8Y,EAAG9Y,GAAM6Y,EAE3B50B,O,oBAIR,SAAQggB,GAEP,OAAWA,EAAElE,IAAM9b,KAAK8b,GAASkE,EAAEjE,IAAM/b,KAAK+b,I,uBAI/C,SAAW4T,GAAoB,IAAblS,EAAa,uDAAJ,EAK1B,OAHAzd,KAAK8b,EAAI6T,EAAOlS,GAChBzd,KAAK+b,EAAI4T,EAAOlS,EAAS,GAElBzd,O,qBAIR,WAAkC,IAAzB2vB,EAAyB,uDAAjB,GAAIlS,EAAa,uDAAJ,EAK7B,OAHAkS,EAAOlS,GAAWzd,KAAK8b,EACvB6T,EAAOlS,EAAS,GAAMzd,KAAK+b,EAEpB4T,I,iCAIR,SAAqBnJ,EAAW3a,EAAO4R,GAWtC,YATgBlb,IAAXkb,GAEJ6H,QAAQM,KAAM,uEAIf5lB,KAAK8b,EAAI0K,EAAUuO,KAAMlpB,GACzB7L,KAAK+b,EAAIyK,EAAUwO,KAAMnpB,GAElB7L,O,0BAIR,SAAci1B,EAAQX,GAErB,IAAMhW,EAAIxN,KAAKkiB,IAAKsB,GAASpxB,EAAI4N,KAAKmiB,IAAKqB,GAErCxY,EAAI9b,KAAK8b,EAAImZ,EAAOnZ,EACpBC,EAAI/b,KAAK+b,EAAIkZ,EAAOlZ,EAK1B,OAHA/b,KAAK8b,EAAIA,EAAIwC,EAAIvC,EAAI7Y,EAAI+xB,EAAOnZ,EAChC9b,KAAK+b,EAAID,EAAI5Y,EAAI6Y,EAAIuC,EAAI2W,EAAOlZ,EAEzB/b,O,oBAIR,WAKC,OAHAA,KAAK8b,EAAIhL,KAAKC,SACd/Q,KAAK+b,EAAIjL,KAAKC,SAEP/Q,S,KAMT0zB,GAAQv0B,UAAU+1B,WAAY,E,IAoV1BC,GAlVEC,G,WAEL,aAAc,oBAEbp1B,KAAKg0B,SAAW,CAEf,EAAG,EAAG,EACN,EAAG,EAAG,EACN,EAAG,EAAG,GAIF7zB,UAAU3B,OAAS,GAEvB8mB,QAAQxjB,MAAO,iF,uCAMjB,SAAKuzB,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,GAE5C,IAAMC,EAAK91B,KAAKg0B,SAMhB,OAJA8B,EAAI,GAAMT,EAAKS,EAAI,GAAMN,EAAKM,EAAI,GAAMH,EACxCG,EAAI,GAAMR,EAAKQ,EAAI,GAAML,EAAKK,EAAI,GAAMF,EACxCE,EAAI,GAAMP,EAAKO,EAAI,GAAMJ,EAAKI,EAAI,GAAMD,EAEjC71B,O,sBAIR,WAUC,OARAA,KAAK4a,IAEJ,EAAG,EAAG,EACN,EAAG,EAAG,EACN,EAAG,EAAG,GAIA5a,O,kBAIR,SAAMud,GAEL,IAAMuY,EAAK91B,KAAKg0B,SACV+B,EAAKxY,EAAEyW,SAMb,OAJA8B,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GACpDD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GACpDD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAE7C/1B,O,0BAIR,SAAcg2B,EAAOC,EAAOC,GAM3B,OAJAF,EAAMG,qBAAsBn2B,KAAM,GAClCi2B,EAAME,qBAAsBn2B,KAAM,GAClCk2B,EAAMC,qBAAsBn2B,KAAM,GAE3BA,O,4BAIR,SAAgBud,GAEf,IAAMwY,EAAKxY,EAAEyW,SAUb,OARAh0B,KAAK4a,IAEJmb,EAAI,GAAKA,EAAI,GAAKA,EAAI,GACtBA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GACtBA,EAAI,GAAKA,EAAI,GAAKA,EAAI,KAIhB/1B,O,sBAIR,SAAUud,GAET,OAAOvd,KAAKo2B,iBAAkBp2B,KAAMud,K,yBAIrC,SAAaA,GAEZ,OAAOvd,KAAKo2B,iBAAkB7Y,EAAGvd,Q,8BAIlC,SAAkB2K,EAAGC,GAEpB,IAAMyrB,EAAK1rB,EAAEqpB,SACPsC,EAAK1rB,EAAEopB,SACP8B,EAAK91B,KAAKg0B,SAEVuC,EAAMF,EAAI,GAAKG,EAAMH,EAAI,GAAKI,EAAMJ,EAAI,GACxCK,EAAML,EAAI,GAAKM,EAAMN,EAAI,GAAKO,EAAMP,EAAI,GACxCQ,EAAMR,EAAI,GAAKS,EAAMT,EAAI,GAAKU,EAAMV,EAAI,GAExCW,EAAMV,EAAI,GAAKW,EAAMX,EAAI,GAAKY,EAAMZ,EAAI,GACxCa,EAAMb,EAAI,GAAKc,EAAMd,EAAI,GAAKe,EAAMf,EAAI,GACxCgB,EAAMhB,EAAI,GAAKiB,EAAMjB,EAAI,GAAKkB,EAAMlB,EAAI,GAc9C,OAZAR,EAAI,GAAMS,EAAMS,EAAMR,EAAMW,EAAMV,EAAMa,EACxCxB,EAAI,GAAMS,EAAMU,EAAMT,EAAMY,EAAMX,EAAMc,EACxCzB,EAAI,GAAMS,EAAMW,EAAMV,EAAMa,EAAMZ,EAAMe,EAExC1B,EAAI,GAAMY,EAAMM,EAAML,EAAMQ,EAAMP,EAAMU,EACxCxB,EAAI,GAAMY,EAAMO,EAAMN,EAAMS,EAAMR,EAAMW,EACxCzB,EAAI,GAAMY,EAAMQ,EAAMP,EAAMU,EAAMT,EAAMY,EAExC1B,EAAI,GAAMe,EAAMG,EAAMF,EAAMK,EAAMJ,EAAMO,EACxCxB,EAAI,GAAMe,EAAMI,EAAMH,EAAMM,EAAML,EAAMQ,EACxCzB,EAAI,GAAMe,EAAMK,EAAMJ,EAAMO,EAAMN,EAAMS,EAEjCx3B,O,4BAIR,SAAgBkD,GAEf,IAAM4yB,EAAK91B,KAAKg0B,SAMhB,OAJA8B,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EACvC4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EACvC4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EAEhClD,O,yBAIR,WAEC,IAAM81B,EAAK91B,KAAKg0B,SAEVrpB,EAAImrB,EAAI,GAAKlrB,EAAIkrB,EAAI,GAAKxX,EAAIwX,EAAI,GACvC2B,EAAI3B,EAAI,GAAK1yB,EAAI0yB,EAAI,GAAKxyB,EAAIwyB,EAAI,GAClC5Q,EAAI4Q,EAAI,GAAKnb,EAAImb,EAAI,GAAKv3B,EAAIu3B,EAAI,GAEnC,OAAOnrB,EAAIvH,EAAI7E,EAAIoM,EAAIrH,EAAIqX,EAAI/P,EAAI6sB,EAAIl5B,EAAIqM,EAAItH,EAAI4hB,EAAI5G,EAAImZ,EAAI9c,EAAI2D,EAAIlb,EAAI8hB,I,oBAI5E,WAEC,IAAM4Q,EAAK91B,KAAKg0B,SAEfqB,EAAMS,EAAI,GAAKN,EAAMM,EAAI,GAAKH,EAAMG,EAAI,GACxCR,EAAMQ,EAAI,GAAKL,EAAMK,EAAI,GAAKF,EAAME,EAAI,GACxCP,EAAMO,EAAI,GAAKJ,EAAMI,EAAI,GAAKD,EAAMC,EAAI,GAExC4B,EAAM7B,EAAMJ,EAAMG,EAAMF,EACxBiC,EAAM/B,EAAML,EAAMM,EAAMP,EACxBsC,EAAMlC,EAAMJ,EAAMG,EAAMF,EAExBsC,EAAMxC,EAAMqC,EAAMlC,EAAMmC,EAAMhC,EAAMiC,EAErC,GAAa,IAARC,EAAY,OAAO73B,KAAK4a,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAE1D,IAAMkd,EAAS,EAAID,EAcnB,OAZA/B,EAAI,GAAM4B,EAAMI,EAChBhC,EAAI,IAAQH,EAAMD,EAAMG,EAAML,GAAQsC,EACtChC,EAAI,IAAQF,EAAMJ,EAAMG,EAAMF,GAAQqC,EAEtChC,EAAI,GAAM6B,EAAMG,EAChBhC,EAAI,IAAQD,EAAMR,EAAMM,EAAMJ,GAAQuC,EACtChC,EAAI,IAAQH,EAAML,EAAMM,EAAMP,GAAQyC,EAEtChC,EAAI,GAAM8B,EAAME,EAChBhC,EAAI,IAAQN,EAAMD,EAAMG,EAAML,GAAQyC,EACtChC,EAAI,IAAQL,EAAMJ,EAAMG,EAAMF,GAAQwC,EAE/B93B,O,uBAIR,WAEC,IAAI+3B,EACExa,EAAIvd,KAAKg0B,SAMf,OAJA+D,EAAMxa,EAAG,GAAKA,EAAG,GAAMA,EAAG,GAAKA,EAAG,GAAMwa,EACxCA,EAAMxa,EAAG,GAAKA,EAAG,GAAMA,EAAG,GAAKA,EAAG,GAAMwa,EACxCA,EAAMxa,EAAG,GAAKA,EAAG,GAAMA,EAAG,GAAKA,EAAG,GAAMwa,EAEjC/3B,O,6BAIR,SAAiBg4B,GAEhB,OAAOh4B,KAAKi4B,eAAgBD,GAAUE,SAASC,c,gCAIhD,SAAoBC,GAEnB,IAAM7a,EAAIvd,KAAKg0B,SAYf,OAVAoE,EAAG,GAAM7a,EAAG,GACZ6a,EAAG,GAAM7a,EAAG,GACZ6a,EAAG,GAAM7a,EAAG,GACZ6a,EAAG,GAAM7a,EAAG,GACZ6a,EAAG,GAAM7a,EAAG,GACZ6a,EAAG,GAAM7a,EAAG,GACZ6a,EAAG,GAAM7a,EAAG,GACZ6a,EAAG,GAAM7a,EAAG,GACZ6a,EAAG,GAAM7a,EAAG,GAELvd,O,4BAIR,SAAgBq4B,EAAIC,EAAIC,EAAIC,EAAIC,EAAUC,EAAIC,GAE7C,IAAMra,EAAIxN,KAAKkiB,IAAKyF,GACdv1B,EAAI4N,KAAKmiB,IAAKwF,GAQpB,OANAz4B,KAAK4a,IACJ2d,EAAKja,EAAGia,EAAKr1B,GAAKq1B,GAAOja,EAAIoa,EAAKx1B,EAAIy1B,GAAOD,EAAKL,GAChDG,EAAKt1B,EAAGs1B,EAAKla,GAAKka,IAASt1B,EAAIw1B,EAAKpa,EAAIqa,GAAOA,EAAKL,EACtD,EAAG,EAAG,GAGAt4B,O,mBAIR,SAAOu4B,EAAIC,GAEV,IAAM1C,EAAK91B,KAAKg0B,SAKhB,OAHA8B,EAAI,IAAOyC,EAAIzC,EAAI,IAAOyC,EAAIzC,EAAI,IAAOyC,EACzCzC,EAAI,IAAO0C,EAAI1C,EAAI,IAAO0C,EAAI1C,EAAI,IAAO0C,EAElCx4B,O,oBAIR,SAAQ44B,GAEP,IAAMta,EAAIxN,KAAKkiB,IAAK4F,GACd11B,EAAI4N,KAAKmiB,IAAK2F,GAEd9C,EAAK91B,KAAKg0B,SAEVuC,EAAMT,EAAI,GAAKU,EAAMV,EAAI,GAAKW,EAAMX,EAAI,GACxCY,EAAMZ,EAAI,GAAKa,EAAMb,EAAI,GAAKc,EAAMd,EAAI,GAU9C,OARAA,EAAI,GAAMxX,EAAIiY,EAAMrzB,EAAIwzB,EACxBZ,EAAI,GAAMxX,EAAIkY,EAAMtzB,EAAIyzB,EACxBb,EAAI,GAAMxX,EAAImY,EAAMvzB,EAAI0zB,EAExBd,EAAI,IAAQ5yB,EAAIqzB,EAAMjY,EAAIoY,EAC1BZ,EAAI,IAAQ5yB,EAAIszB,EAAMlY,EAAIqY,EAC1Bb,EAAI,IAAQ5yB,EAAIuzB,EAAMnY,EAAIsY,EAEnB52B,O,uBAIR,SAAWq4B,EAAIC,GAEd,IAAMxC,EAAK91B,KAAKg0B,SAKhB,OAHA8B,EAAI,IAAOuC,EAAKvC,EAAI,GAAKA,EAAI,IAAOuC,EAAKvC,EAAI,GAAKA,EAAI,IAAOuC,EAAKvC,EAAI,GACtEA,EAAI,IAAOwC,EAAKxC,EAAI,GAAKA,EAAI,IAAOwC,EAAKxC,EAAI,GAAKA,EAAI,IAAOwC,EAAKxC,EAAI,GAE/D91B,O,oBAIR,SAAQ64B,GAKP,IAHA,IAAM/C,EAAK91B,KAAKg0B,SACV+B,EAAK8C,EAAO7E,SAERz1B,EAAI,EAAGA,EAAI,EAAGA,IAEvB,GAAKu3B,EAAIv3B,KAAQw3B,EAAIx3B,GAAM,OAAO,EAInC,OAAO,I,uBAIR,SAAWoxB,GAEV,IAF8B,IAAblS,EAAa,uDAAJ,EAEhBlf,EAAI,EAAGA,EAAI,EAAGA,IAEvByB,KAAKg0B,SAAUz1B,GAAMoxB,EAAOpxB,EAAIkf,GAIjC,OAAOzd,O,qBAIR,WAAkC,IAAzB2vB,EAAyB,uDAAjB,GAAIlS,EAAa,uDAAJ,EAEvBqY,EAAK91B,KAAKg0B,SAchB,OAZArE,EAAOlS,GAAWqY,EAAI,GACtBnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAE1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAE1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAEnBnG,I,mBAIR,WAEC,OAAO,IAAI3vB,KAAKR,aAAcs5B,UAAW94B,KAAKg0B,c,KAMhDoB,GAAQj2B,UAAU45B,WAAY,E,IAIxBC,G,+FAEL,SAAmBC,GAElB,GAAK,UAAU5iB,KAAM4iB,EAAMC,KAE1B,OAAOD,EAAMC,IAId,GAAiC,oBAArBC,kBAEX,OAAOF,EAAMC,IAId,IAAIE,EAEJ,GAAKH,aAAiBE,kBAErBC,EAASH,MAEH,MAEW12B,IAAZ4yB,KAAwBA,GAAU7qB,SAAS+uB,gBAAiB,+BAAgC,WAEjGlE,GAAQmE,MAAQL,EAAMK,MACtBnE,GAAQoE,OAASN,EAAMM,OAEvB,IAAM90B,EAAU0wB,GAAQqE,WAAY,MAE/BP,aAAiBQ,UAErBh1B,EAAQi1B,aAAcT,EAAO,EAAG,GAIhCx0B,EAAQk1B,UAAWV,EAAO,EAAG,EAAGA,EAAMK,MAAOL,EAAMM,QAIpDH,EAASjE,GAIV,OAAKiE,EAAOE,MAAQ,MAAQF,EAAOG,OAAS,MAE3CjU,QAAQM,KAAM,8EAA+EqT,GAEtFG,EAAOQ,UAAW,aAAc,KAIhCR,EAAOQ,UAAW,iB,KAQxBC,GAAY,EAEVC,G,kDAEL,aAAuS,MAA1Rb,EAA0R,uDAAlRa,EAAUC,cAAeC,EAAyP,uDAA/OF,EAAUG,gBAAiBC,EAAoN,uDAA5MlN,EAAqBmN,EAAuL,uDAA/KnN,EAAqBoN,EAA0J,uDAA9I/M,EAAcgN,EAAgI,uDAApH9M,EAA0B+M,EAA0F,uDAAjFvM,GAAY9H,EAAqE,uDAA9DuH,EAAkB+M,EAA4C,uDAA/B,EAAGC,EAA4B,uDAAjBxL,GAAiB,2BAEtS,eAEAnwB,OAAOC,eAAPD,OAAA,IAAAA,CAAA,GAA6B,KAAM,CAAEY,MAAOo6B,OAE5C,EAAKY,KAAOxK,KAEZ,EAAKzrB,KAAO,GAEZ,EAAKy0B,MAAQA,EACb,EAAKyB,QAAU,GAEf,EAAKV,QAAUA,EAEf,EAAKE,MAAQA,EACb,EAAKC,MAAQA,EAEb,EAAKC,UAAYA,EACjB,EAAKC,UAAYA,EAEjB,EAAKE,WAAaA,EAElB,EAAKD,OAASA,EACd,EAAKK,eAAiB,KACtB,EAAK1U,KAAOA,EAEZ,EAAKxI,OAAS,IAAIiW,GAAS,EAAG,GAC9B,EAAK3V,OAAS,IAAI2V,GAAS,EAAG,GAC9B,EAAKuB,OAAS,IAAIvB,GAAS,EAAG,GAC9B,EAAK+E,SAAW,EAEhB,EAAKmC,kBAAmB,EACxB,EAAK/B,OAAS,IAAIzD,GAElB,EAAKyF,iBAAkB,EACvB,EAAKC,kBAAmB,EACxB,EAAKC,OAAQ,EACb,EAAKC,gBAAkB,EAMvB,EAAKR,SAAWA,EAEhB,EAAKS,QAAU,EACf,EAAK1e,SAAW,KA/CsR,E,gDAmDvS,WAECvc,KAAK64B,OAAOqC,eAAgBl7B,KAAKyd,OAAO3B,EAAG9b,KAAKyd,OAAO1B,EAAG/b,KAAK+d,OAAOjC,EAAG9b,KAAK+d,OAAOhC,EAAG/b,KAAKy4B,SAAUz4B,KAAKi1B,OAAOnZ,EAAG9b,KAAKi1B,OAAOlZ,K,mBAInI,WAEC,OAAO,IAAI/b,KAAKR,aAAc27B,KAAMn7B,Q,kBAIrC,SAAMuI,GAmCL,OAjCAvI,KAAKwE,KAAO+D,EAAO/D,KAEnBxE,KAAKi5B,MAAQ1wB,EAAO0wB,MACpBj5B,KAAK06B,QAAUnyB,EAAOmyB,QAAQjwB,MAAO,GAErCzK,KAAKg6B,QAAUzxB,EAAOyxB,QAEtBh6B,KAAKk6B,MAAQ3xB,EAAO2xB,MACpBl6B,KAAKm6B,MAAQ5xB,EAAO4xB,MAEpBn6B,KAAKo6B,UAAY7xB,EAAO6xB,UACxBp6B,KAAKq6B,UAAY9xB,EAAO8xB,UAExBr6B,KAAKu6B,WAAahyB,EAAOgyB,WAEzBv6B,KAAKs6B,OAAS/xB,EAAO+xB,OACrBt6B,KAAK26B,eAAiBpyB,EAAOoyB,eAC7B36B,KAAKimB,KAAO1d,EAAO0d,KAEnBjmB,KAAKyd,OAAO0d,KAAM5yB,EAAOkV,QACzBzd,KAAK+d,OAAOod,KAAM5yB,EAAOwV,QACzB/d,KAAKi1B,OAAOkG,KAAM5yB,EAAO0sB,QACzBj1B,KAAKy4B,SAAWlwB,EAAOkwB,SAEvBz4B,KAAK46B,iBAAmBryB,EAAOqyB,iBAC/B56B,KAAK64B,OAAOsC,KAAM5yB,EAAOswB,QAEzB74B,KAAK66B,gBAAkBtyB,EAAOsyB,gBAC9B76B,KAAK86B,iBAAmBvyB,EAAOuyB,iBAC/B96B,KAAK+6B,MAAQxyB,EAAOwyB,MACpB/6B,KAAKg7B,gBAAkBzyB,EAAOyyB,gBAC9Bh7B,KAAKw6B,SAAWjyB,EAAOiyB,SAEhBx6B,O,oBAIR,SAAQo7B,GAEP,IAAMC,OAA0B94B,IAAT64B,GAAsC,kBAATA,EAEpD,IAAOC,QAA+C94B,IAA/B64B,EAAKE,SAAUt7B,KAAKy6B,MAE1C,OAAOW,EAAKE,SAAUt7B,KAAKy6B,MAI5B,IAAMc,EAAS,CAEdC,SAAU,CACTP,QAAS,IACThV,KAAM,UACNwV,UAAW,kBAGZhB,KAAMz6B,KAAKy6B,KACXj2B,KAAMxE,KAAKwE,KAEXw1B,QAASh6B,KAAKg6B,QAEdjc,OAAQ,CAAE/d,KAAK+d,OAAOjC,EAAG9b,KAAK+d,OAAOhC,GACrC0B,OAAQ,CAAEzd,KAAKyd,OAAO3B,EAAG9b,KAAKyd,OAAO1B,GACrCkZ,OAAQ,CAAEj1B,KAAKi1B,OAAOnZ,EAAG9b,KAAKi1B,OAAOlZ,GACrC0c,SAAUz4B,KAAKy4B,SAEfiD,KAAM,CAAE17B,KAAKk6B,MAAOl6B,KAAKm6B,OAEzBG,OAAQt6B,KAAKs6B,OACbrU,KAAMjmB,KAAKimB,KACXuU,SAAUx6B,KAAKw6B,SAEfH,UAAWr6B,KAAKq6B,UAChBD,UAAWp6B,KAAKo6B,UAChBG,WAAYv6B,KAAKu6B,WAEjBQ,MAAO/6B,KAAK+6B,MAEZD,iBAAkB96B,KAAK86B,iBACvBE,gBAAiBh7B,KAAKg7B,iBAIvB,QAAoBz4B,IAAfvC,KAAKi5B,MAAsB,CAI/B,IAAMA,EAAQj5B,KAAKi5B,MAQnB,QANoB12B,IAAf02B,EAAMwB,OAEVxB,EAAMwB,KAAOxK,OAIPoL,QAA8C94B,IAA9B64B,EAAKO,OAAQ1C,EAAMwB,MAAuB,CAEhE,IAAIz1B,EAEJ,GAAKjC,MAAMC,QAASi2B,GAAU,CAI7Bj0B,EAAM,GAEN,IAAM,IAAIzG,EAAI,EAAGyK,EAAIiwB,EAAMz6B,OAAQD,EAAIyK,EAAGzK,IAIpC06B,EAAO16B,GAAIq9B,cAEf52B,EAAIb,KAAM03B,GAAgB5C,EAAO16B,GAAI06B,QAIrCj0B,EAAIb,KAAM03B,GAAgB5C,EAAO16B,UAUnCyG,EAAM62B,GAAgB5C,GAIvBmC,EAAKO,OAAQ1C,EAAMwB,MAAS,CAC3BA,KAAMxB,EAAMwB,KACZz1B,IAAKA,GAKPu2B,EAAOtC,MAAQA,EAAMwB,KAUtB,OANOY,IAEND,EAAKE,SAAUt7B,KAAKy6B,MAASc,GAIvBA,I,qBAIR,WAECv7B,KAAK87B,cAAe,CAAE7V,KAAM,c,yBAI7B,SAAa8V,GAEZ,GAzhDgB,MAyhDX/7B,KAAKg6B,QAAwB,OAAO+B,EAIzC,GAFAA,EAAGC,aAAch8B,KAAK64B,QAEjBkD,EAAGjgB,EAAI,GAAKigB,EAAGjgB,EAAI,EAEvB,OAAS9b,KAAKk6B,OAEb,KAAKnN,EAEJgP,EAAGjgB,EAAIigB,EAAGjgB,EAAIhL,KAAKmgB,MAAO8K,EAAGjgB,GAC7B,MAED,KAAKkR,EAEJ+O,EAAGjgB,EAAIigB,EAAGjgB,EAAI,EAAI,EAAI,EACtB,MAED,KAAKmR,EAEwC,IAAvCnc,KAAKihB,IAAKjhB,KAAKmgB,MAAO8K,EAAGjgB,GAAM,GAEnCigB,EAAGjgB,EAAIhL,KAAK+f,KAAMkL,EAAGjgB,GAAMigB,EAAGjgB,EAI9BigB,EAAGjgB,EAAIigB,EAAGjgB,EAAIhL,KAAKmgB,MAAO8K,EAAGjgB,GAUjC,GAAKigB,EAAGhgB,EAAI,GAAKggB,EAAGhgB,EAAI,EAEvB,OAAS/b,KAAKm6B,OAEb,KAAKpN,EAEJgP,EAAGhgB,EAAIggB,EAAGhgB,EAAIjL,KAAKmgB,MAAO8K,EAAGhgB,GAC7B,MAED,KAAKiR,EAEJ+O,EAAGhgB,EAAIggB,EAAGhgB,EAAI,EAAI,EAAI,EACtB,MAED,KAAKkR,EAEwC,IAAvCnc,KAAKihB,IAAKjhB,KAAKmgB,MAAO8K,EAAGhgB,GAAM,GAEnCggB,EAAGhgB,EAAIjL,KAAK+f,KAAMkL,EAAGhgB,GAAMggB,EAAGhgB,EAI9BggB,EAAGhgB,EAAIggB,EAAGhgB,EAAIjL,KAAKmgB,MAAO8K,EAAGhgB,GAgBjC,OANK/b,KAAK+6B,QAETgB,EAAGhgB,EAAI,EAAIggB,EAAGhgB,GAIRggB,I,uBAIR,SAAiBt8B,IAED,IAAVA,GAAiBO,KAAKi7B,c,GAhTLzL,IA2TxB,SAASqM,GAAgB5C,GAExB,MAAmC,qBAArBgD,kBAAoChD,aAAiBgD,kBACnC,qBAAtB9C,mBAAqCF,aAAiBE,mBACtC,qBAAhB+C,aAA+BjD,aAAiBiD,YAIlDlD,GAAWmD,WAAYlD,GAIzBA,EAAMta,KAIH,CACNA,KAAM5b,MAAM5D,UAAUsL,MAAMtJ,KAAM83B,EAAMta,MACxC2a,MAAOL,EAAMK,MACbC,OAAQN,EAAMM,OACdtT,KAAMgT,EAAMta,KAAKnf,YAAYgF,OAK9B8gB,QAAQM,KAAM,+CACP,IA/BVkU,GAAUC,mBAAgBx3B,EAC1Bu3B,GAAUG,gBAhnDQ,IAknDlBH,GAAU36B,UAAUi9B,WAAY,E,IAoC1BC,G,WAEL,aAA0C,IAA7BvgB,EAA6B,uDAAzB,EAAGC,EAAsB,uDAAlB,EAAGugB,EAAe,uDAAX,EAAG1I,EAAQ,uDAAJ,EAAI,oBAEzC5zB,KAAK8b,EAAIA,EACT9b,KAAK+b,EAAIA,EACT/b,KAAKs8B,EAAIA,EACTt8B,KAAK4zB,EAAIA,E,uCAIV,WAEC,OAAO5zB,KAAKs8B,G,IAIb,SAAW78B,GAEVO,KAAKs8B,EAAI78B,I,kBAIV,WAEC,OAAOO,KAAK4zB,G,IAIb,SAAYn0B,GAEXO,KAAK4zB,EAAIn0B,I,iBAIV,SAAKqc,EAAGC,EAAGugB,EAAG1I,GAOb,OALA5zB,KAAK8b,EAAIA,EACT9b,KAAK+b,EAAIA,EACT/b,KAAKs8B,EAAIA,EACTt8B,KAAK4zB,EAAIA,EAEF5zB,O,uBAIR,SAAW2zB,GAOV,OALA3zB,KAAK8b,EAAI6X,EACT3zB,KAAK+b,EAAI4X,EACT3zB,KAAKs8B,EAAI3I,EACT3zB,KAAK4zB,EAAID,EAEF3zB,O,kBAIR,SAAM8b,GAIL,OAFA9b,KAAK8b,EAAIA,EAEF9b,O,kBAIR,SAAM+b,GAIL,OAFA/b,KAAK+b,EAAIA,EAEF/b,O,kBAIR,SAAMs8B,GAIL,OAFAt8B,KAAKs8B,EAAIA,EAEFt8B,O,kBAIR,SAAM4zB,GAIL,OAFA5zB,KAAK4zB,EAAIA,EAEF5zB,O,0BAIR,SAAc6L,EAAOpM,GAEpB,OAASoM,GAER,KAAK,EAAG7L,KAAK8b,EAAIrc,EAAO,MACxB,KAAK,EAAGO,KAAK+b,EAAItc,EAAO,MACxB,KAAK,EAAGO,KAAKs8B,EAAI78B,EAAO,MACxB,KAAK,EAAGO,KAAK4zB,EAAIn0B,EAAO,MACxB,QAAS,MAAM,IAAI+L,MAAO,0BAA4BK,GAIvD,OAAO7L,O,0BAIR,SAAc6L,GAEb,OAASA,GAER,KAAK,EAAG,OAAO7L,KAAK8b,EACpB,KAAK,EAAG,OAAO9b,KAAK+b,EACpB,KAAK,EAAG,OAAO/b,KAAKs8B,EACpB,KAAK,EAAG,OAAOt8B,KAAK4zB,EACpB,QAAS,MAAM,IAAIpoB,MAAO,0BAA4BK,M,mBAMxD,WAEC,OAAO,IAAI7L,KAAKR,YAAaQ,KAAK8b,EAAG9b,KAAK+b,EAAG/b,KAAKs8B,EAAGt8B,KAAK4zB,K,kBAI3D,SAAM5T,GAOL,OALAhgB,KAAK8b,EAAIkE,EAAElE,EACX9b,KAAK+b,EAAIiE,EAAEjE,EACX/b,KAAKs8B,EAAItc,EAAEsc,EACXt8B,KAAK4zB,OAAcrxB,IAARyd,EAAE4T,EAAoB5T,EAAE4T,EAAI,EAEhC5zB,O,iBAIR,SAAKggB,EAAG4T,GAEP,YAAWrxB,IAANqxB,GAEJtO,QAAQM,KAAM,yFACP5lB,KAAK6zB,WAAY7T,EAAG4T,KAI5B5zB,KAAK8b,GAAKkE,EAAElE,EACZ9b,KAAK+b,GAAKiE,EAAEjE,EACZ/b,KAAKs8B,GAAKtc,EAAEsc,EACZt8B,KAAK4zB,GAAK5T,EAAE4T,EAEL5zB,Q,uBAIR,SAAWkD,GAOV,OALAlD,KAAK8b,GAAK5Y,EACVlD,KAAK+b,GAAK7Y,EACVlD,KAAKs8B,GAAKp5B,EACVlD,KAAK4zB,GAAK1wB,EAEHlD,O,wBAIR,SAAY2K,EAAGC,GAOd,OALA5K,KAAK8b,EAAInR,EAAEmR,EAAIlR,EAAEkR,EACjB9b,KAAK+b,EAAIpR,EAAEoR,EAAInR,EAAEmR,EACjB/b,KAAKs8B,EAAI3xB,EAAE2xB,EAAI1xB,EAAE0xB,EACjBt8B,KAAK4zB,EAAIjpB,EAAEipB,EAAIhpB,EAAEgpB,EAEV5zB,O,6BAIR,SAAiBggB,EAAG9c,GAOnB,OALAlD,KAAK8b,GAAKkE,EAAElE,EAAI5Y,EAChBlD,KAAK+b,GAAKiE,EAAEjE,EAAI7Y,EAChBlD,KAAKs8B,GAAKtc,EAAEsc,EAAIp5B,EAChBlD,KAAK4zB,GAAK5T,EAAE4T,EAAI1wB,EAETlD,O,iBAIR,SAAKggB,EAAG4T,GAEP,YAAWrxB,IAANqxB,GAEJtO,QAAQM,KAAM,yFACP5lB,KAAK8zB,WAAY9T,EAAG4T,KAI5B5zB,KAAK8b,GAAKkE,EAAElE,EACZ9b,KAAK+b,GAAKiE,EAAEjE,EACZ/b,KAAKs8B,GAAKtc,EAAEsc,EACZt8B,KAAK4zB,GAAK5T,EAAE4T,EAEL5zB,Q,uBAIR,SAAWkD,GAOV,OALAlD,KAAK8b,GAAK5Y,EACVlD,KAAK+b,GAAK7Y,EACVlD,KAAKs8B,GAAKp5B,EACVlD,KAAK4zB,GAAK1wB,EAEHlD,O,wBAIR,SAAY2K,EAAGC,GAOd,OALA5K,KAAK8b,EAAInR,EAAEmR,EAAIlR,EAAEkR,EACjB9b,KAAK+b,EAAIpR,EAAEoR,EAAInR,EAAEmR,EACjB/b,KAAKs8B,EAAI3xB,EAAE2xB,EAAI1xB,EAAE0xB,EACjBt8B,KAAK4zB,EAAIjpB,EAAEipB,EAAIhpB,EAAEgpB,EAEV5zB,O,sBAIR,SAAUggB,GAOT,OALAhgB,KAAK8b,GAAKkE,EAAElE,EACZ9b,KAAK+b,GAAKiE,EAAEjE,EACZ/b,KAAKs8B,GAAKtc,EAAEsc,EACZt8B,KAAK4zB,GAAK5T,EAAE4T,EAEL5zB,O,4BAIR,SAAgB2zB,GAOf,OALA3zB,KAAK8b,GAAK6X,EACV3zB,KAAK+b,GAAK4X,EACV3zB,KAAKs8B,GAAK3I,EACV3zB,KAAK4zB,GAAKD,EAEH3zB,O,0BAIR,SAAcud,GAEb,IAAMzB,EAAI9b,KAAK8b,EAAGC,EAAI/b,KAAK+b,EAAGugB,EAAIt8B,KAAKs8B,EAAG1I,EAAI5zB,KAAK4zB,EAC7CxwB,EAAIma,EAAEyW,SAOZ,OALAh0B,KAAK8b,EAAI1Y,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,GAAMk5B,EAAIl5B,EAAG,IAAOwwB,EAC1D5zB,KAAK+b,EAAI3Y,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,GAAMk5B,EAAIl5B,EAAG,IAAOwwB,EAC1D5zB,KAAKs8B,EAAIl5B,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,IAAOk5B,EAAIl5B,EAAG,IAAOwwB,EAC3D5zB,KAAK4zB,EAAIxwB,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,IAAOk5B,EAAIl5B,EAAG,IAAOwwB,EAEpD5zB,O,0BAIR,SAAc2zB,GAEb,OAAO3zB,KAAK+zB,eAAgB,EAAIJ,K,wCAIjC,SAA4Bb,GAM3B9yB,KAAK4zB,EAAI,EAAI9iB,KAAKyrB,KAAMzJ,EAAEc,GAE1B,IAAM1wB,EAAI4N,KAAKujB,KAAM,EAAIvB,EAAEc,EAAId,EAAEc,GAgBjC,OAdK1wB,EAAI,MAERlD,KAAK8b,EAAI,EACT9b,KAAK+b,EAAI,EACT/b,KAAKs8B,EAAI,IAITt8B,KAAK8b,EAAIgX,EAAEhX,EAAI5Y,EACflD,KAAK+b,EAAI+W,EAAE/W,EAAI7Y,EACflD,KAAKs8B,EAAIxJ,EAAEwJ,EAAIp5B,GAITlD,O,4CAIR,SAAgCud,GAM/B,IAAI+W,EAAOxY,EAAGC,EAAGugB,EACXE,EAAU,IACfC,EAAW,GAEX3G,EAAKvY,EAAEyW,SAEP0I,EAAM5G,EAAI,GAAK6G,EAAM7G,EAAI,GAAK8G,EAAM9G,EAAI,GACxC+G,EAAM/G,EAAI,GAAKgH,EAAMhH,EAAI,GAAKiH,EAAMjH,EAAI,GACxCkH,EAAMlH,EAAI,GAAKmH,EAAMnH,EAAI,GAAKoH,EAAMpH,EAAI,IAEzC,GAAOhlB,KAAKihB,IAAK4K,EAAME,GAAQL,GACxB1rB,KAAKihB,IAAK6K,EAAMI,GAAQR,GACxB1rB,KAAKihB,IAAKgL,EAAME,GAAQT,EAAY,CAM1C,GAAO1rB,KAAKihB,IAAK4K,EAAME,GAAQJ,GACxB3rB,KAAKihB,IAAK6K,EAAMI,GAAQP,GACxB3rB,KAAKihB,IAAKgL,EAAME,GAAQR,GACxB3rB,KAAKihB,IAAK2K,EAAMI,EAAMI,EAAM,GAAMT,EAMxC,OAFAz8B,KAAK4a,IAAK,EAAG,EAAG,EAAG,GAEZ5a,KAMRs0B,EAAQxjB,KAAKif,GAEb,IAAMoN,GAAOT,EAAM,GAAM,EACnBU,GAAON,EAAM,GAAM,EACnBO,GAAOH,EAAM,GAAM,EACnBI,GAAOX,EAAME,GAAQ,EACrBU,GAAOX,EAAMI,GAAQ,EACrBQ,GAAOT,EAAME,GAAQ,EA4D3B,OA1DOE,EAAKC,GAAUD,EAAKE,EAIrBF,EAAKX,GAET1gB,EAAI,EACJC,EAAI,WACJugB,EAAI,aAKJvgB,EAAIuhB,GADJxhB,EAAIhL,KAAKujB,KAAM8I,IAEfb,EAAIiB,EAAKzhB,GAICshB,EAAKC,EAIXD,EAAKZ,GAET1gB,EAAI,WACJC,EAAI,EACJugB,EAAI,aAKJxgB,EAAIwhB,GADJvhB,EAAIjL,KAAKujB,KAAM+I,IAEfd,EAAIkB,EAAKzhB,GAQLshB,EAAKb,GAET1gB,EAAI,WACJC,EAAI,WACJugB,EAAI,IAKJxgB,EAAIyhB,GADJjB,EAAIxrB,KAAKujB,KAAMgJ,IAEfthB,EAAIyhB,EAAKlB,GAMXt8B,KAAK4a,IAAKkB,EAAGC,EAAGugB,EAAGhI,GAEZt0B,KAMR,IAAIkD,EAAI4N,KAAKujB,MAAQ4I,EAAMF,IAAUE,EAAMF,IACxCH,EAAMI,IAAUJ,EAAMI,IACtBH,EAAMF,IAAUE,EAAMF,IAYzB,OAVK7rB,KAAKihB,IAAK7uB,GAAM,OAAQA,EAAI,GAKjClD,KAAK8b,GAAMmhB,EAAMF,GAAQ75B,EACzBlD,KAAK+b,GAAM6gB,EAAMI,GAAQ95B,EACzBlD,KAAKs8B,GAAMO,EAAMF,GAAQz5B,EACzBlD,KAAK4zB,EAAI9iB,KAAKyrB,MAAQG,EAAMI,EAAMI,EAAM,GAAM,GAEvCl9B,O,iBAIR,SAAKggB,GAOJ,OALAhgB,KAAK8b,EAAIhL,KAAKiE,IAAK/U,KAAK8b,EAAGkE,EAAElE,GAC7B9b,KAAK+b,EAAIjL,KAAKiE,IAAK/U,KAAK+b,EAAGiE,EAAEjE,GAC7B/b,KAAKs8B,EAAIxrB,KAAKiE,IAAK/U,KAAKs8B,EAAGtc,EAAEsc,GAC7Bt8B,KAAK4zB,EAAI9iB,KAAKiE,IAAK/U,KAAK4zB,EAAG5T,EAAE4T,GAEtB5zB,O,iBAIR,SAAKggB,GAOJ,OALAhgB,KAAK8b,EAAIhL,KAAKkE,IAAKhV,KAAK8b,EAAGkE,EAAElE,GAC7B9b,KAAK+b,EAAIjL,KAAKkE,IAAKhV,KAAK+b,EAAGiE,EAAEjE,GAC7B/b,KAAKs8B,EAAIxrB,KAAKkE,IAAKhV,KAAKs8B,EAAGtc,EAAEsc,GAC7Bt8B,KAAK4zB,EAAI9iB,KAAKkE,IAAKhV,KAAK4zB,EAAG5T,EAAE4T,GAEtB5zB,O,mBAIR,SAAO+U,EAAKC,GASX,OALAhV,KAAK8b,EAAIhL,KAAKkE,IAAKD,EAAI+G,EAAGhL,KAAKiE,IAAKC,EAAI8G,EAAG9b,KAAK8b,IAChD9b,KAAK+b,EAAIjL,KAAKkE,IAAKD,EAAIgH,EAAGjL,KAAKiE,IAAKC,EAAI+G,EAAG/b,KAAK+b,IAChD/b,KAAKs8B,EAAIxrB,KAAKkE,IAAKD,EAAIunB,EAAGxrB,KAAKiE,IAAKC,EAAIsnB,EAAGt8B,KAAKs8B,IAChDt8B,KAAK4zB,EAAI9iB,KAAKkE,IAAKD,EAAI6e,EAAG9iB,KAAKiE,IAAKC,EAAI4e,EAAG5zB,KAAK4zB,IAEzC5zB,O,yBAIR,SAAai0B,EAAQC,GAOpB,OALAl0B,KAAK8b,EAAIhL,KAAKkE,IAAKif,EAAQnjB,KAAKiE,IAAKmf,EAAQl0B,KAAK8b,IAClD9b,KAAK+b,EAAIjL,KAAKkE,IAAKif,EAAQnjB,KAAKiE,IAAKmf,EAAQl0B,KAAK+b,IAClD/b,KAAKs8B,EAAIxrB,KAAKkE,IAAKif,EAAQnjB,KAAKiE,IAAKmf,EAAQl0B,KAAKs8B,IAClDt8B,KAAK4zB,EAAI9iB,KAAKkE,IAAKif,EAAQnjB,KAAKiE,IAAKmf,EAAQl0B,KAAK4zB,IAE3C5zB,O,yBAIR,SAAa+U,EAAKC,GAEjB,IAAMxW,EAASwB,KAAKxB,SAEpB,OAAOwB,KAAKm0B,aAAc31B,GAAU,GAAIu1B,eAAgBjjB,KAAKkE,IAAKD,EAAKjE,KAAKiE,IAAKC,EAAKxW,O,mBAIvF,WAOC,OALAwB,KAAK8b,EAAIhL,KAAKmgB,MAAOjxB,KAAK8b,GAC1B9b,KAAK+b,EAAIjL,KAAKmgB,MAAOjxB,KAAK+b,GAC1B/b,KAAKs8B,EAAIxrB,KAAKmgB,MAAOjxB,KAAKs8B,GAC1Bt8B,KAAK4zB,EAAI9iB,KAAKmgB,MAAOjxB,KAAK4zB,GAEnB5zB,O,kBAIR,WAOC,OALAA,KAAK8b,EAAIhL,KAAK+f,KAAM7wB,KAAK8b,GACzB9b,KAAK+b,EAAIjL,KAAK+f,KAAM7wB,KAAK+b,GACzB/b,KAAKs8B,EAAIxrB,KAAK+f,KAAM7wB,KAAKs8B,GACzBt8B,KAAK4zB,EAAI9iB,KAAK+f,KAAM7wB,KAAK4zB,GAElB5zB,O,mBAIR,WAOC,OALAA,KAAK8b,EAAIhL,KAAKsjB,MAAOp0B,KAAK8b,GAC1B9b,KAAK+b,EAAIjL,KAAKsjB,MAAOp0B,KAAK+b,GAC1B/b,KAAKs8B,EAAIxrB,KAAKsjB,MAAOp0B,KAAKs8B,GAC1Bt8B,KAAK4zB,EAAI9iB,KAAKsjB,MAAOp0B,KAAK4zB,GAEnB5zB,O,yBAIR,WAOC,OALAA,KAAK8b,EAAM9b,KAAK8b,EAAI,EAAMhL,KAAK+f,KAAM7wB,KAAK8b,GAAMhL,KAAKmgB,MAAOjxB,KAAK8b,GACjE9b,KAAK+b,EAAM/b,KAAK+b,EAAI,EAAMjL,KAAK+f,KAAM7wB,KAAK+b,GAAMjL,KAAKmgB,MAAOjxB,KAAK+b,GACjE/b,KAAKs8B,EAAMt8B,KAAKs8B,EAAI,EAAMxrB,KAAK+f,KAAM7wB,KAAKs8B,GAAMxrB,KAAKmgB,MAAOjxB,KAAKs8B,GACjEt8B,KAAK4zB,EAAM5zB,KAAK4zB,EAAI,EAAM9iB,KAAK+f,KAAM7wB,KAAK4zB,GAAM9iB,KAAKmgB,MAAOjxB,KAAK4zB,GAE1D5zB,O,oBAIR,WAOC,OALAA,KAAK8b,GAAM9b,KAAK8b,EAChB9b,KAAK+b,GAAM/b,KAAK+b,EAChB/b,KAAKs8B,GAAMt8B,KAAKs8B,EAChBt8B,KAAK4zB,GAAM5zB,KAAK4zB,EAET5zB,O,iBAIR,SAAKggB,GAEJ,OAAOhgB,KAAK8b,EAAIkE,EAAElE,EAAI9b,KAAK+b,EAAIiE,EAAEjE,EAAI/b,KAAKs8B,EAAItc,EAAEsc,EAAIt8B,KAAK4zB,EAAI5T,EAAE4T,I,sBAIhE,WAEC,OAAO5zB,KAAK8b,EAAI9b,KAAK8b,EAAI9b,KAAK+b,EAAI/b,KAAK+b,EAAI/b,KAAKs8B,EAAIt8B,KAAKs8B,EAAIt8B,KAAK4zB,EAAI5zB,KAAK4zB,I,oBAI5E,WAEC,OAAO9iB,KAAKujB,KAAMr0B,KAAK8b,EAAI9b,KAAK8b,EAAI9b,KAAK+b,EAAI/b,KAAK+b,EAAI/b,KAAKs8B,EAAIt8B,KAAKs8B,EAAIt8B,KAAK4zB,EAAI5zB,KAAK4zB,K,6BAIvF,WAEC,OAAO9iB,KAAKihB,IAAK/xB,KAAK8b,GAAMhL,KAAKihB,IAAK/xB,KAAK+b,GAAMjL,KAAKihB,IAAK/xB,KAAKs8B,GAAMxrB,KAAKihB,IAAK/xB,KAAK4zB,K,uBAItF,WAEC,OAAO5zB,KAAKm0B,aAAcn0B,KAAKxB,UAAY,K,uBAI5C,SAAWA,GAEV,OAAOwB,KAAK20B,YAAYZ,eAAgBv1B,K,kBAIzC,SAAMwhB,EAAG4U,GAOR,OALA50B,KAAK8b,IAAOkE,EAAElE,EAAI9b,KAAK8b,GAAM8Y,EAC7B50B,KAAK+b,IAAOiE,EAAEjE,EAAI/b,KAAK+b,GAAM6Y,EAC7B50B,KAAKs8B,IAAOtc,EAAEsc,EAAIt8B,KAAKs8B,GAAM1H,EAC7B50B,KAAK4zB,IAAO5T,EAAE4T,EAAI5zB,KAAK4zB,GAAMgB,EAEtB50B,O,yBAIR,SAAa60B,EAAIC,EAAIF,GAOpB,OALA50B,KAAK8b,EAAI+Y,EAAG/Y,GAAMgZ,EAAGhZ,EAAI+Y,EAAG/Y,GAAM8Y,EAClC50B,KAAK+b,EAAI8Y,EAAG9Y,GAAM+Y,EAAG/Y,EAAI8Y,EAAG9Y,GAAM6Y,EAClC50B,KAAKs8B,EAAIzH,EAAGyH,GAAMxH,EAAGwH,EAAIzH,EAAGyH,GAAM1H,EAClC50B,KAAK4zB,EAAIiB,EAAGjB,GAAMkB,EAAGlB,EAAIiB,EAAGjB,GAAMgB,EAE3B50B,O,oBAIR,SAAQggB,GAEP,OAAWA,EAAElE,IAAM9b,KAAK8b,GAASkE,EAAEjE,IAAM/b,KAAK+b,GAASiE,EAAEsc,IAAMt8B,KAAKs8B,GAAStc,EAAE4T,IAAM5zB,KAAK4zB,I,uBAI3F,SAAWjE,GAAoB,IAAblS,EAAa,uDAAJ,EAO1B,OALAzd,KAAK8b,EAAI6T,EAAOlS,GAChBzd,KAAK+b,EAAI4T,EAAOlS,EAAS,GACzBzd,KAAKs8B,EAAI3M,EAAOlS,EAAS,GACzBzd,KAAK4zB,EAAIjE,EAAOlS,EAAS,GAElBzd,O,qBAIR,WAAkC,IAAzB2vB,EAAyB,uDAAjB,GAAIlS,EAAa,uDAAJ,EAO7B,OALAkS,EAAOlS,GAAWzd,KAAK8b,EACvB6T,EAAOlS,EAAS,GAAMzd,KAAK+b,EAC3B4T,EAAOlS,EAAS,GAAMzd,KAAKs8B,EAC3B3M,EAAOlS,EAAS,GAAMzd,KAAK4zB,EAEpBjE,I,iCAIR,SAAqBnJ,EAAW3a,EAAO4R,GAatC,YAXgBlb,IAAXkb,GAEJ6H,QAAQM,KAAM,uEAIf5lB,KAAK8b,EAAI0K,EAAUuO,KAAMlpB,GACzB7L,KAAK+b,EAAIyK,EAAUwO,KAAMnpB,GACzB7L,KAAKs8B,EAAI9V,EAAUiX,KAAM5xB,GACzB7L,KAAK4zB,EAAIpN,EAAUkX,KAAM7xB,GAElB7L,O,oBAIR,WAOC,OALAA,KAAK8b,EAAIhL,KAAKC,SACd/Q,KAAK+b,EAAIjL,KAAKC,SACd/Q,KAAKs8B,EAAIxrB,KAAKC,SACd/Q,KAAK4zB,EAAI9iB,KAAKC,SAEP/Q,S,KAMTq8B,GAAQl9B,UAAUw+B,WAAY,E,IAOxBC,G,kDAEL,WAAatE,EAAOC,EAAQlzB,GAAU,kCAErC,gBAEKizB,MAAQA,EACb,EAAKC,OAASA,EACd,EAAKsE,MAAQ,EAEb,EAAKC,QAAU,IAAIzB,GAAS,EAAG,EAAG/C,EAAOC,GACzC,EAAKwE,aAAc,EAEnB,EAAKC,SAAW,IAAI3B,GAAS,EAAG,EAAG/C,EAAOC,GAE1ClzB,EAAUA,GAAW,GAErB,EAAK43B,QAAU,IAAInE,QAAWv3B,EAAW8D,EAAQ2zB,QAAS3zB,EAAQ6zB,MAAO7zB,EAAQ8zB,MAAO9zB,EAAQ+zB,UAAW/zB,EAAQg0B,UAAWh0B,EAAQi0B,OAAQj0B,EAAQ4f,KAAM5f,EAAQk0B,WAAYl0B,EAAQm0B,UAExL,EAAKyD,QAAQhF,MAAQ,GACrB,EAAKgF,QAAQhF,MAAMK,MAAQA,EAC3B,EAAK2E,QAAQhF,MAAMM,OAASA,EAC5B,EAAK0E,QAAQhF,MAAM4E,MAAQ,EAE3B,EAAKI,QAAQpD,qBAA8Ct4B,IAA5B8D,EAAQw0B,iBAAgCx0B,EAAQw0B,gBAC/E,EAAKoD,QAAQ5D,eAAkC93B,IAAtB8D,EAAQg0B,UAA0Bh0B,EAAQg0B,UAAYhN,EAE/E,EAAK6Q,iBAAsC37B,IAAxB8D,EAAQ63B,aAA4B73B,EAAQ63B,YAC/D,EAAKC,mBAA0C57B,IAA1B8D,EAAQ83B,eAA8B93B,EAAQ83B,cACnE,EAAKC,kBAAwC77B,IAAzB8D,EAAQ+3B,aAA6B/3B,EAAQ+3B,aAAe,KA3B3C,E,8CA+BtC,SAAYH,GAEXA,EAAQhF,MAAQ,CACfK,MAAOt5B,KAAKs5B,MACZC,OAAQv5B,KAAKu5B,OACbsE,MAAO79B,KAAK69B,OAGb79B,KAAKi+B,QAAUA,I,qBAIhB,SAAS3E,EAAOC,GAAoB,IAAZsE,EAAY,uDAAJ,EAE1B79B,KAAKs5B,QAAUA,GAASt5B,KAAKu5B,SAAWA,GAAUv5B,KAAK69B,QAAUA,IAErE79B,KAAKs5B,MAAQA,EACbt5B,KAAKu5B,OAASA,EACdv5B,KAAK69B,MAAQA,EAEb79B,KAAKi+B,QAAQhF,MAAMK,MAAQA,EAC3Bt5B,KAAKi+B,QAAQhF,MAAMM,OAASA,EAC5Bv5B,KAAKi+B,QAAQhF,MAAM4E,MAAQA,EAE3B79B,KAAKq+B,WAINr+B,KAAKg+B,SAASpjB,IAAK,EAAG,EAAG0e,EAAOC,GAChCv5B,KAAK89B,QAAQljB,IAAK,EAAG,EAAG0e,EAAOC,K,mBAIhC,WAEC,OAAO,IAAIv5B,KAAKR,aAAc27B,KAAMn7B,Q,kBAIrC,SAAMuI,GAcL,OAZAvI,KAAKs5B,MAAQ/wB,EAAO+wB,MACpBt5B,KAAKu5B,OAAShxB,EAAOgxB,OACrBv5B,KAAK69B,MAAQt1B,EAAOs1B,MAEpB79B,KAAKg+B,SAAS7C,KAAM5yB,EAAOy1B,UAE3Bh+B,KAAKi+B,QAAU11B,EAAO01B,QAAQK,QAE9Bt+B,KAAKk+B,YAAc31B,EAAO21B,YAC1Bl+B,KAAKm+B,cAAgB51B,EAAO41B,cAC5Bn+B,KAAKo+B,aAAe71B,EAAO61B,aAEpBp+B,O,qBAIR,WAECA,KAAK87B,cAAe,CAAE7V,KAAM,gB,GA5FEuJ,IAkGhCoO,GAAkBz+B,UAAUo/B,qBAAsB,E,IAE5CC,G,WAEL,aAA0C,IAA7B1iB,EAA6B,uDAAzB,EAAGC,EAAsB,uDAAlB,EAAGugB,EAAe,uDAAX,EAAG1I,EAAQ,uDAAJ,EAAI,oBAEzC5zB,KAAKy+B,GAAK3iB,EACV9b,KAAK0+B,GAAK3iB,EACV/b,KAAK2+B,GAAKrC,EACVt8B,KAAK4+B,GAAKhL,E,mCAgHX,WAEC,OAAO5zB,KAAKy+B,I,IAIb,SAAOh/B,GAENO,KAAKy+B,GAAKh/B,EACVO,KAAK6+B,sB,aAIN,WAEC,OAAO7+B,KAAK0+B,I,IAIb,SAAOj/B,GAENO,KAAK0+B,GAAKj/B,EACVO,KAAK6+B,sB,aAIN,WAEC,OAAO7+B,KAAK2+B,I,IAIb,SAAOl/B,GAENO,KAAK2+B,GAAKl/B,EACVO,KAAK6+B,sB,aAIN,WAEC,OAAO7+B,KAAK4+B,I,IAIb,SAAOn/B,GAENO,KAAK4+B,GAAKn/B,EACVO,KAAK6+B,sB,iBAIN,SAAK/iB,EAAGC,EAAGugB,EAAG1I,GASb,OAPA5zB,KAAKy+B,GAAK3iB,EACV9b,KAAK0+B,GAAK3iB,EACV/b,KAAK2+B,GAAKrC,EACVt8B,KAAK4+B,GAAKhL,EAEV5zB,KAAK6+B,oBAEE7+B,O,mBAIR,WAEC,OAAO,IAAIA,KAAKR,YAAaQ,KAAKy+B,GAAIz+B,KAAK0+B,GAAI1+B,KAAK2+B,GAAI3+B,KAAK4+B,M,kBAI9D,SAAME,GASL,OAPA9+B,KAAKy+B,GAAKK,EAAWhjB,EACrB9b,KAAK0+B,GAAKI,EAAW/iB,EACrB/b,KAAK2+B,GAAKG,EAAWxC,EACrBt8B,KAAK4+B,GAAKE,EAAWlL,EAErB5zB,KAAK6+B,oBAEE7+B,O,0BAIR,SAAc++B,EAAO9V,GAEpB,IAAS8V,IAASA,EAAMC,QAEvB,MAAM,IAAIxzB,MAAO,oGAIlB,IAAMsQ,EAAIijB,EAAMN,GAAI1iB,EAAIgjB,EAAML,GAAIpC,EAAIyC,EAAMJ,GAAI5L,EAAQgM,EAAME,OAMxDjM,EAAMliB,KAAKkiB,IACXC,EAAMniB,KAAKmiB,IAEXiM,EAAKlM,EAAKlX,EAAI,GACdoX,EAAKF,EAAKjX,EAAI,GACdojB,EAAKnM,EAAKsJ,EAAI,GAEd8C,EAAKnM,EAAKnX,EAAI,GACdqX,EAAKF,EAAKlX,EAAI,GACdsjB,EAAKpM,EAAKqJ,EAAI,GAEpB,OAASvJ,GAER,IAAK,MACJ/yB,KAAKy+B,GAAKW,EAAKlM,EAAKiM,EAAKD,EAAK/L,EAAKkM,EACnCr/B,KAAK0+B,GAAKQ,EAAK/L,EAAKgM,EAAKC,EAAKlM,EAAKmM,EACnCr/B,KAAK2+B,GAAKO,EAAKhM,EAAKmM,EAAKD,EAAKjM,EAAKgM,EACnCn/B,KAAK4+B,GAAKM,EAAKhM,EAAKiM,EAAKC,EAAKjM,EAAKkM,EACnC,MAED,IAAK,MACJr/B,KAAKy+B,GAAKW,EAAKlM,EAAKiM,EAAKD,EAAK/L,EAAKkM,EACnCr/B,KAAK0+B,GAAKQ,EAAK/L,EAAKgM,EAAKC,EAAKlM,EAAKmM,EACnCr/B,KAAK2+B,GAAKO,EAAKhM,EAAKmM,EAAKD,EAAKjM,EAAKgM,EACnCn/B,KAAK4+B,GAAKM,EAAKhM,EAAKiM,EAAKC,EAAKjM,EAAKkM,EACnC,MAED,IAAK,MACJr/B,KAAKy+B,GAAKW,EAAKlM,EAAKiM,EAAKD,EAAK/L,EAAKkM,EACnCr/B,KAAK0+B,GAAKQ,EAAK/L,EAAKgM,EAAKC,EAAKlM,EAAKmM,EACnCr/B,KAAK2+B,GAAKO,EAAKhM,EAAKmM,EAAKD,EAAKjM,EAAKgM,EACnCn/B,KAAK4+B,GAAKM,EAAKhM,EAAKiM,EAAKC,EAAKjM,EAAKkM,EACnC,MAED,IAAK,MACJr/B,KAAKy+B,GAAKW,EAAKlM,EAAKiM,EAAKD,EAAK/L,EAAKkM,EACnCr/B,KAAK0+B,GAAKQ,EAAK/L,EAAKgM,EAAKC,EAAKlM,EAAKmM,EACnCr/B,KAAK2+B,GAAKO,EAAKhM,EAAKmM,EAAKD,EAAKjM,EAAKgM,EACnCn/B,KAAK4+B,GAAKM,EAAKhM,EAAKiM,EAAKC,EAAKjM,EAAKkM,EACnC,MAED,IAAK,MACJr/B,KAAKy+B,GAAKW,EAAKlM,EAAKiM,EAAKD,EAAK/L,EAAKkM,EACnCr/B,KAAK0+B,GAAKQ,EAAK/L,EAAKgM,EAAKC,EAAKlM,EAAKmM,EACnCr/B,KAAK2+B,GAAKO,EAAKhM,EAAKmM,EAAKD,EAAKjM,EAAKgM,EACnCn/B,KAAK4+B,GAAKM,EAAKhM,EAAKiM,EAAKC,EAAKjM,EAAKkM,EACnC,MAED,IAAK,MACJr/B,KAAKy+B,GAAKW,EAAKlM,EAAKiM,EAAKD,EAAK/L,EAAKkM,EACnCr/B,KAAK0+B,GAAKQ,EAAK/L,EAAKgM,EAAKC,EAAKlM,EAAKmM,EACnCr/B,KAAK2+B,GAAKO,EAAKhM,EAAKmM,EAAKD,EAAKjM,EAAKgM,EACnCn/B,KAAK4+B,GAAKM,EAAKhM,EAAKiM,EAAKC,EAAKjM,EAAKkM,EACnC,MAED,QACC/Z,QAAQM,KAAM,mEAAqEmN,GAMrF,OAFgB,IAAX9J,GAAmBjpB,KAAK6+B,oBAEtB7+B,O,8BAIR,SAAkBs/B,EAAMhL,GAMvB,IAAMiL,EAAYjL,EAAQ,EAAGpxB,EAAI4N,KAAKmiB,IAAKsM,GAS3C,OAPAv/B,KAAKy+B,GAAKa,EAAKxjB,EAAI5Y,EACnBlD,KAAK0+B,GAAKY,EAAKvjB,EAAI7Y,EACnBlD,KAAK2+B,GAAKW,EAAKhD,EAAIp5B,EACnBlD,KAAK4+B,GAAK9tB,KAAKkiB,IAAKuM,GAEpBv/B,KAAK6+B,oBAEE7+B,O,mCAIR,SAAuBud,GAMtB,IAAMuY,EAAKvY,EAAEyW,SAEZ0I,EAAM5G,EAAI,GAAK6G,EAAM7G,EAAI,GAAK8G,EAAM9G,EAAI,GACxC+G,EAAM/G,EAAI,GAAKgH,EAAMhH,EAAI,GAAKiH,EAAMjH,EAAI,GACxCkH,EAAMlH,EAAI,GAAKmH,EAAMnH,EAAI,GAAKoH,EAAMpH,EAAI,IAExC0J,EAAQ9C,EAAMI,EAAMI,EAErB,GAAKsC,EAAQ,EAAI,CAEhB,IAAMt8B,EAAI,GAAM4N,KAAKujB,KAAMmL,EAAQ,GAEnCx/B,KAAK4+B,GAAK,IAAO17B,EACjBlD,KAAKy+B,IAAOxB,EAAMF,GAAQ75B,EAC1BlD,KAAK0+B,IAAO9B,EAAMI,GAAQ95B,EAC1BlD,KAAK2+B,IAAO9B,EAAMF,GAAQz5B,OAEpB,GAAKw5B,EAAMI,GAAOJ,EAAMQ,EAAM,CAEpC,IAAMh6B,EAAI,EAAM4N,KAAKujB,KAAM,EAAMqI,EAAMI,EAAMI,GAE7Cl9B,KAAK4+B,IAAO3B,EAAMF,GAAQ75B,EAC1BlD,KAAKy+B,GAAK,IAAOv7B,EACjBlD,KAAK0+B,IAAO/B,EAAME,GAAQ35B,EAC1BlD,KAAK2+B,IAAO/B,EAAMI,GAAQ95B,OAEpB,GAAK45B,EAAMI,EAAM,CAEvB,IAAMh6B,EAAI,EAAM4N,KAAKujB,KAAM,EAAMyI,EAAMJ,EAAMQ,GAE7Cl9B,KAAK4+B,IAAOhC,EAAMI,GAAQ95B,EAC1BlD,KAAKy+B,IAAO9B,EAAME,GAAQ35B,EAC1BlD,KAAK0+B,GAAK,IAAOx7B,EACjBlD,KAAK2+B,IAAO5B,EAAME,GAAQ/5B,MAEpB,CAEN,IAAMA,EAAI,EAAM4N,KAAKujB,KAAM,EAAM6I,EAAMR,EAAMI,GAE7C98B,KAAK4+B,IAAO/B,EAAMF,GAAQz5B,EAC1BlD,KAAKy+B,IAAO7B,EAAMI,GAAQ95B,EAC1BlD,KAAK0+B,IAAO3B,EAAME,GAAQ/5B,EAC1BlD,KAAK2+B,GAAK,IAAOz7B,EAMlB,OAFAlD,KAAK6+B,oBAEE7+B,O,gCAIR,SAAoBy/B,EAAOC,GAI1B,IAAItH,EAAIqH,EAAME,IAAKD,GAAQ,EAmC3B,OAjCKtH,EAAIhS,OAAOwZ,SAIfxH,EAAI,EAECtnB,KAAKihB,IAAK0N,EAAM3jB,GAAMhL,KAAKihB,IAAK0N,EAAMnD,IAE1Ct8B,KAAKy+B,IAAOgB,EAAM1jB,EAClB/b,KAAK0+B,GAAKe,EAAM3jB,EAChB9b,KAAK2+B,GAAK,EACV3+B,KAAK4+B,GAAKxG,IAIVp4B,KAAKy+B,GAAK,EACVz+B,KAAK0+B,IAAOe,EAAMnD,EAClBt8B,KAAK2+B,GAAKc,EAAM1jB,EAChB/b,KAAK4+B,GAAKxG,KAQXp4B,KAAKy+B,GAAKgB,EAAM1jB,EAAI2jB,EAAIpD,EAAImD,EAAMnD,EAAIoD,EAAI3jB,EAC1C/b,KAAK0+B,GAAKe,EAAMnD,EAAIoD,EAAI5jB,EAAI2jB,EAAM3jB,EAAI4jB,EAAIpD,EAC1Ct8B,KAAK2+B,GAAKc,EAAM3jB,EAAI4jB,EAAI3jB,EAAI0jB,EAAM1jB,EAAI2jB,EAAI5jB,EAC1C9b,KAAK4+B,GAAKxG,GAIJp4B,KAAK20B,c,qBAIb,SAAS7B,GAER,OAAO,EAAIhiB,KAAKyrB,KAAMzrB,KAAKihB,IAAKzB,GAAStwB,KAAK2/B,IAAK7M,IAAO,EAAG,O,2BAI9D,SAAeA,EAAGrvB,GAEjB,IAAM6wB,EAAQt0B,KAAK6/B,QAAS/M,GAE5B,GAAe,IAAVwB,EAAc,OAAOt0B,KAE1B,IAAMywB,EAAI3f,KAAKiE,IAAK,EAAGtR,EAAO6wB,GAI9B,OAFAt0B,KAAK8/B,MAAOhN,EAAGrC,GAERzwB,O,sBAIR,WAEC,OAAOA,KAAK4a,IAAK,EAAG,EAAG,EAAG,K,oBAI3B,WAIC,OAAO5a,KAAK+/B,c,uBAIb,WAQC,OANA//B,KAAKy+B,KAAQ,EACbz+B,KAAK0+B,KAAQ,EACb1+B,KAAK2+B,KAAQ,EAEb3+B,KAAK6+B,oBAEE7+B,O,iBAIR,SAAKggB,GAEJ,OAAOhgB,KAAKy+B,GAAKze,EAAEye,GAAKz+B,KAAK0+B,GAAK1e,EAAE0e,GAAK1+B,KAAK2+B,GAAK3e,EAAE2e,GAAK3+B,KAAK4+B,GAAK5e,EAAE4e,K,sBAIvE,WAEC,OAAO5+B,KAAKy+B,GAAKz+B,KAAKy+B,GAAKz+B,KAAK0+B,GAAK1+B,KAAK0+B,GAAK1+B,KAAK2+B,GAAK3+B,KAAK2+B,GAAK3+B,KAAK4+B,GAAK5+B,KAAK4+B,K,oBAInF,WAEC,OAAO9tB,KAAKujB,KAAMr0B,KAAKy+B,GAAKz+B,KAAKy+B,GAAKz+B,KAAK0+B,GAAK1+B,KAAK0+B,GAAK1+B,KAAK2+B,GAAK3+B,KAAK2+B,GAAK3+B,KAAK4+B,GAAK5+B,KAAK4+B,M,uBAI9F,WAEC,IAAI51B,EAAIhJ,KAAKxB,SAsBb,OApBW,IAANwK,GAEJhJ,KAAKy+B,GAAK,EACVz+B,KAAK0+B,GAAK,EACV1+B,KAAK2+B,GAAK,EACV3+B,KAAK4+B,GAAK,IAIV51B,EAAI,EAAIA,EAERhJ,KAAKy+B,GAAKz+B,KAAKy+B,GAAKz1B,EACpBhJ,KAAK0+B,GAAK1+B,KAAK0+B,GAAK11B,EACpBhJ,KAAK2+B,GAAK3+B,KAAK2+B,GAAK31B,EACpBhJ,KAAK4+B,GAAK5+B,KAAK4+B,GAAK51B,GAIrBhJ,KAAK6+B,oBAEE7+B,O,sBAIR,SAAU8yB,EAAGvc,GAEZ,YAAWhU,IAANgU,GAEJ+O,QAAQM,KAAM,0GACP5lB,KAAKggC,oBAAqBlN,EAAGvc,IAI9BvW,KAAKggC,oBAAqBhgC,KAAM8yB,K,yBAIxC,SAAaA,GAEZ,OAAO9yB,KAAKggC,oBAAqBlN,EAAG9yB,Q,iCAIrC,SAAqB2K,EAAGC,GAIvB,IAAMq1B,EAAMt1B,EAAE8zB,GAAIyB,EAAMv1B,EAAE+zB,GAAIyB,EAAMx1B,EAAEg0B,GAAIyB,EAAMz1B,EAAEi0B,GAC5CyB,EAAMz1B,EAAE6zB,GAAI6B,EAAM11B,EAAE8zB,GAAI6B,EAAM31B,EAAE+zB,GAAI6B,EAAM51B,EAAEg0B,GASlD,OAPA5+B,KAAKy+B,GAAKwB,EAAMO,EAAMJ,EAAMC,EAAMH,EAAMK,EAAMJ,EAAMG,EACpDtgC,KAAK0+B,GAAKwB,EAAMM,EAAMJ,EAAME,EAAMH,EAAME,EAAMJ,EAAMM,EACpDvgC,KAAK2+B,GAAKwB,EAAMK,EAAMJ,EAAMG,EAAMN,EAAMK,EAAMJ,EAAMG,EACpDrgC,KAAK4+B,GAAKwB,EAAMI,EAAMP,EAAMI,EAAMH,EAAMI,EAAMH,EAAMI,EAEpDvgC,KAAK6+B,oBAEE7+B,O,mBAIR,SAAOygC,EAAIhQ,GAEV,GAAW,IAANA,EAAU,OAAOzwB,KACtB,GAAW,IAANywB,EAAU,OAAOzwB,KAAKm7B,KAAMsF,GAEjC,IAAM3kB,EAAI9b,KAAKy+B,GAAI1iB,EAAI/b,KAAK0+B,GAAIpC,EAAIt8B,KAAK2+B,GAAI/K,EAAI5zB,KAAK4+B,GAIlD8B,EAAe9M,EAAI6M,EAAG7B,GAAK9iB,EAAI2kB,EAAGhC,GAAK1iB,EAAI0kB,EAAG/B,GAAKpC,EAAImE,EAAG9B,GAiB9D,GAfK+B,EAAe,GAEnB1gC,KAAK4+B,IAAO6B,EAAG7B,GACf5+B,KAAKy+B,IAAOgC,EAAGhC,GACfz+B,KAAK0+B,IAAO+B,EAAG/B,GACf1+B,KAAK2+B,IAAO8B,EAAG9B,GAEf+B,GAAiBA,GAIjB1gC,KAAKm7B,KAAMsF,GAIPC,GAAgB,EAOpB,OALA1gC,KAAK4+B,GAAKhL,EACV5zB,KAAKy+B,GAAK3iB,EACV9b,KAAK0+B,GAAK3iB,EACV/b,KAAK2+B,GAAKrC,EAEHt8B,KAIR,IAAM2gC,EAAkB,EAAMD,EAAeA,EAE7C,GAAKC,GAAmBva,OAAOwZ,QAAU,CAExC,IAAM18B,EAAI,EAAIutB,EASd,OARAzwB,KAAK4+B,GAAK17B,EAAI0wB,EAAInD,EAAIzwB,KAAK4+B,GAC3B5+B,KAAKy+B,GAAKv7B,EAAI4Y,EAAI2U,EAAIzwB,KAAKy+B,GAC3Bz+B,KAAK0+B,GAAKx7B,EAAI6Y,EAAI0U,EAAIzwB,KAAK0+B,GAC3B1+B,KAAK2+B,GAAKz7B,EAAIo5B,EAAI7L,EAAIzwB,KAAK2+B,GAE3B3+B,KAAK20B,YACL30B,KAAK6+B,oBAEE7+B,KAIR,IAAM4gC,EAAe9vB,KAAKujB,KAAMsM,GAC1BE,EAAY/vB,KAAKyjB,MAAOqM,EAAcF,GACtCI,EAAShwB,KAAKmiB,KAAO,EAAIxC,GAAMoQ,GAAcD,EAClDG,EAASjwB,KAAKmiB,IAAKxC,EAAIoQ,GAAcD,EAStC,OAPA5gC,KAAK4+B,GAAOhL,EAAIkN,EAAS9gC,KAAK4+B,GAAKmC,EACnC/gC,KAAKy+B,GAAO3iB,EAAIglB,EAAS9gC,KAAKy+B,GAAKsC,EACnC/gC,KAAK0+B,GAAO3iB,EAAI+kB,EAAS9gC,KAAK0+B,GAAKqC,EACnC/gC,KAAK2+B,GAAOrC,EAAIwE,EAAS9gC,KAAK2+B,GAAKoC,EAEnC/gC,KAAK6+B,oBAEE7+B,O,8BAIR,SAAkBghC,EAAIP,EAAIhQ,GAEzBzwB,KAAKm7B,KAAM6F,GAAKlB,MAAOW,EAAIhQ,K,oBAI5B,SAAQqO,GAEP,OAASA,EAAWL,KAAOz+B,KAAKy+B,IAAUK,EAAWJ,KAAO1+B,KAAK0+B,IAAUI,EAAWH,KAAO3+B,KAAK2+B,IAAUG,EAAWF,KAAO5+B,KAAK4+B,K,uBAIpI,SAAWjP,GAAoB,IAAblS,EAAa,uDAAJ,EAS1B,OAPAzd,KAAKy+B,GAAK9O,EAAOlS,GACjBzd,KAAK0+B,GAAK/O,EAAOlS,EAAS,GAC1Bzd,KAAK2+B,GAAKhP,EAAOlS,EAAS,GAC1Bzd,KAAK4+B,GAAKjP,EAAOlS,EAAS,GAE1Bzd,KAAK6+B,oBAEE7+B,O,qBAIR,WAAkC,IAAzB2vB,EAAyB,uDAAjB,GAAIlS,EAAa,uDAAJ,EAO7B,OALAkS,EAAOlS,GAAWzd,KAAKy+B,GACvB9O,EAAOlS,EAAS,GAAMzd,KAAK0+B,GAC3B/O,EAAOlS,EAAS,GAAMzd,KAAK2+B,GAC3BhP,EAAOlS,EAAS,GAAMzd,KAAK4+B,GAEpBjP,I,iCAIR,SAAqBnJ,EAAW3a,GAO/B,OALA7L,KAAKy+B,GAAKjY,EAAUuO,KAAMlpB,GAC1B7L,KAAK0+B,GAAKlY,EAAUwO,KAAMnpB,GAC1B7L,KAAK2+B,GAAKnY,EAAUiX,KAAM5xB,GAC1B7L,KAAK4+B,GAAKpY,EAAUkX,KAAM7xB,GAEnB7L,O,uBAIR,SAAW6O,GAIV,OAFA7O,KAAK6+B,kBAAoBhwB,EAElB7O,O,+BAIR,e,oBAtoBA,SAAcghC,EAAIP,EAAIQ,EAAIxQ,GAGzB,OADAnL,QAAQM,KAAM,wGACPqb,EAAGC,iBAAkBF,EAAIP,EAAIhQ,K,uBAIrC,SAAkB0Q,EAAKC,EAAWC,EAAMC,EAAYC,EAAMC,EAAY/Q,GAIrE,IAAIgR,EAAKJ,EAAMC,EAAa,GAC3BI,EAAKL,EAAMC,EAAa,GACxBK,EAAKN,EAAMC,EAAa,GACxBM,EAAKP,EAAMC,EAAa,GAEnBO,EAAKN,EAAMC,EAAa,GAC7BM,EAAKP,EAAMC,EAAa,GACxBO,EAAKR,EAAMC,EAAa,GACxBQ,EAAKT,EAAMC,EAAa,GAEzB,GAAW,IAAN/Q,EAMJ,OAJA0Q,EAAKC,EAAY,GAAMK,EACvBN,EAAKC,EAAY,GAAMM,EACvBP,EAAKC,EAAY,GAAMO,OACvBR,EAAKC,EAAY,GAAMQ,GAKxB,GAAW,IAANnR,EAMJ,OAJA0Q,EAAKC,EAAY,GAAMS,EACvBV,EAAKC,EAAY,GAAMU,EACvBX,EAAKC,EAAY,GAAMW,OACvBZ,EAAKC,EAAY,GAAMY,GAKxB,GAAKJ,IAAOI,GAAMP,IAAOI,GAAMH,IAAOI,GAAMH,IAAOI,EAAK,CAEvD,IAAI7+B,EAAI,EAAIutB,EACNuC,EAAMyO,EAAKI,EAAKH,EAAKI,EAAKH,EAAKI,EAAKH,EAAKI,EAC9CC,EAAQjP,GAAO,EAAI,GAAM,EACzBkP,EAAS,EAAIlP,EAAMA,EAGpB,GAAKkP,EAAS9b,OAAOwZ,QAAU,CAE9B,IAAM3M,EAAMniB,KAAKujB,KAAM6N,GACtBzrB,EAAM3F,KAAKyjB,MAAOtB,EAAKD,EAAMiP,GAE9B/+B,EAAI4N,KAAKmiB,IAAK/vB,EAAIuT,GAAQwc,EAC1BxC,EAAI3f,KAAKmiB,IAAKxC,EAAIha,GAAQwc,EAI3B,IAAMkP,EAAO1R,EAAIwR,EAQjB,GANAR,EAAKA,EAAKv+B,EAAI2+B,EAAKM,EACnBT,EAAKA,EAAKx+B,EAAI4+B,EAAKK,EACnBR,EAAKA,EAAKz+B,EAAI6+B,EAAKI,EACnBP,EAAKA,EAAK1+B,EAAI8+B,EAAKG,EAGdj/B,IAAM,EAAIutB,EAAI,CAElB,IAAMntB,EAAI,EAAIwN,KAAKujB,KAAMoN,EAAKA,EAAKC,EAAKA,EAAKC,EAAKA,EAAKC,EAAKA,GAE5DH,GAAMn+B,EACNo+B,GAAMp+B,EACNq+B,GAAMr+B,EACNs+B,GAAMt+B,GAMR69B,EAAKC,GAAcK,EACnBN,EAAKC,EAAY,GAAMM,EACvBP,EAAKC,EAAY,GAAMO,EACvBR,EAAKC,EAAY,GAAMQ,I,qCAIxB,SAAgCT,EAAKC,EAAWC,EAAMC,EAAYC,EAAMC,GAEvE,IAAMC,EAAKJ,EAAMC,GACXI,EAAKL,EAAMC,EAAa,GACxBK,EAAKN,EAAMC,EAAa,GACxBM,EAAKP,EAAMC,EAAa,GAExBO,EAAKN,EAAMC,GACXM,EAAKP,EAAMC,EAAa,GACxBO,EAAKR,EAAMC,EAAa,GACxBQ,EAAKT,EAAMC,EAAa,GAO9B,OALAL,EAAKC,GAAcK,EAAKO,EAAKJ,EAAKC,EAAKH,EAAKK,EAAKJ,EAAKG,EACtDX,EAAKC,EAAY,GAAMM,EAAKM,EAAKJ,EAAKE,EAAKH,EAAKE,EAAKJ,EAAKM,EAC1DZ,EAAKC,EAAY,GAAMO,EAAKK,EAAKJ,EAAKG,EAAKN,EAAKK,EAAKJ,EAAKG,EAC1DV,EAAKC,EAAY,GAAMQ,EAAKI,EAAKP,EAAKI,EAAKH,EAAKI,EAAKH,EAAKI,EAEnDZ,M,KAkiBT3C,GAAWr/B,UAAUijC,cAAe,E,IAE9BC,G,WAEL,aAAmC,IAAtBvmB,EAAsB,uDAAlB,EAAGC,EAAe,uDAAX,EAAGugB,EAAQ,uDAAJ,EAAI,oBAElCt8B,KAAK8b,EAAIA,EACT9b,KAAK+b,EAAIA,EACT/b,KAAKs8B,EAAIA,E,uCAIV,SAAKxgB,EAAGC,EAAGugB,GAQV,YANW/5B,IAAN+5B,IAAkBA,EAAIt8B,KAAKs8B,GAEhCt8B,KAAK8b,EAAIA,EACT9b,KAAK+b,EAAIA,EACT/b,KAAKs8B,EAAIA,EAEFt8B,O,uBAIR,SAAW2zB,GAMV,OAJA3zB,KAAK8b,EAAI6X,EACT3zB,KAAK+b,EAAI4X,EACT3zB,KAAKs8B,EAAI3I,EAEF3zB,O,kBAIR,SAAM8b,GAIL,OAFA9b,KAAK8b,EAAIA,EAEF9b,O,kBAIR,SAAM+b,GAIL,OAFA/b,KAAK+b,EAAIA,EAEF/b,O,kBAIR,SAAMs8B,GAIL,OAFAt8B,KAAKs8B,EAAIA,EAEFt8B,O,0BAIR,SAAc6L,EAAOpM,GAEpB,OAASoM,GAER,KAAK,EAAG7L,KAAK8b,EAAIrc,EAAO,MACxB,KAAK,EAAGO,KAAK+b,EAAItc,EAAO,MACxB,KAAK,EAAGO,KAAKs8B,EAAI78B,EAAO,MACxB,QAAS,MAAM,IAAI+L,MAAO,0BAA4BK,GAIvD,OAAO7L,O,0BAIR,SAAc6L,GAEb,OAASA,GAER,KAAK,EAAG,OAAO7L,KAAK8b,EACpB,KAAK,EAAG,OAAO9b,KAAK+b,EACpB,KAAK,EAAG,OAAO/b,KAAKs8B,EACpB,QAAS,MAAM,IAAI9wB,MAAO,0BAA4BK,M,mBAMxD,WAEC,OAAO,IAAI7L,KAAKR,YAAaQ,KAAK8b,EAAG9b,KAAK+b,EAAG/b,KAAKs8B,K,kBAInD,SAAMtc,GAML,OAJAhgB,KAAK8b,EAAIkE,EAAElE,EACX9b,KAAK+b,EAAIiE,EAAEjE,EACX/b,KAAKs8B,EAAItc,EAAEsc,EAEJt8B,O,iBAIR,SAAKggB,EAAG4T,GAEP,YAAWrxB,IAANqxB,GAEJtO,QAAQM,KAAM,yFACP5lB,KAAK6zB,WAAY7T,EAAG4T,KAI5B5zB,KAAK8b,GAAKkE,EAAElE,EACZ9b,KAAK+b,GAAKiE,EAAEjE,EACZ/b,KAAKs8B,GAAKtc,EAAEsc,EAELt8B,Q,uBAIR,SAAWkD,GAMV,OAJAlD,KAAK8b,GAAK5Y,EACVlD,KAAK+b,GAAK7Y,EACVlD,KAAKs8B,GAAKp5B,EAEHlD,O,wBAIR,SAAY2K,EAAGC,GAMd,OAJA5K,KAAK8b,EAAInR,EAAEmR,EAAIlR,EAAEkR,EACjB9b,KAAK+b,EAAIpR,EAAEoR,EAAInR,EAAEmR,EACjB/b,KAAKs8B,EAAI3xB,EAAE2xB,EAAI1xB,EAAE0xB,EAEVt8B,O,6BAIR,SAAiBggB,EAAG9c,GAMnB,OAJAlD,KAAK8b,GAAKkE,EAAElE,EAAI5Y,EAChBlD,KAAK+b,GAAKiE,EAAEjE,EAAI7Y,EAChBlD,KAAKs8B,GAAKtc,EAAEsc,EAAIp5B,EAETlD,O,iBAIR,SAAKggB,EAAG4T,GAEP,YAAWrxB,IAANqxB,GAEJtO,QAAQM,KAAM,yFACP5lB,KAAK8zB,WAAY9T,EAAG4T,KAI5B5zB,KAAK8b,GAAKkE,EAAElE,EACZ9b,KAAK+b,GAAKiE,EAAEjE,EACZ/b,KAAKs8B,GAAKtc,EAAEsc,EAELt8B,Q,uBAIR,SAAWkD,GAMV,OAJAlD,KAAK8b,GAAK5Y,EACVlD,KAAK+b,GAAK7Y,EACVlD,KAAKs8B,GAAKp5B,EAEHlD,O,wBAIR,SAAY2K,EAAGC,GAMd,OAJA5K,KAAK8b,EAAInR,EAAEmR,EAAIlR,EAAEkR,EACjB9b,KAAK+b,EAAIpR,EAAEoR,EAAInR,EAAEmR,EACjB/b,KAAKs8B,EAAI3xB,EAAE2xB,EAAI1xB,EAAE0xB,EAEVt8B,O,sBAIR,SAAUggB,EAAG4T,GAEZ,YAAWrxB,IAANqxB,GAEJtO,QAAQM,KAAM,mGACP5lB,KAAKsiC,gBAAiBtiB,EAAG4T,KAIjC5zB,KAAK8b,GAAKkE,EAAElE,EACZ9b,KAAK+b,GAAKiE,EAAEjE,EACZ/b,KAAKs8B,GAAKtc,EAAEsc,EAELt8B,Q,4BAIR,SAAgB2zB,GAMf,OAJA3zB,KAAK8b,GAAK6X,EACV3zB,KAAK+b,GAAK4X,EACV3zB,KAAKs8B,GAAK3I,EAEH3zB,O,6BAIR,SAAiB2K,EAAGC,GAMnB,OAJA5K,KAAK8b,EAAInR,EAAEmR,EAAIlR,EAAEkR,EACjB9b,KAAK+b,EAAIpR,EAAEoR,EAAInR,EAAEmR,EACjB/b,KAAKs8B,EAAI3xB,EAAE2xB,EAAI1xB,EAAE0xB,EAEVt8B,O,wBAIR,SAAY++B,GAQX,OANSA,GAASA,EAAMC,SAEvB1Z,QAAQxjB,MAAO,+FAIT9B,KAAKuiC,gBAAiBC,GAAcC,aAAc1D,M,4BAI1D,SAAgBO,EAAMhL,GAErB,OAAOt0B,KAAKuiC,gBAAiBC,GAAcE,iBAAkBpD,EAAMhL,M,0BAIpE,SAAc/W,GAEb,IAAMzB,EAAI9b,KAAK8b,EAAGC,EAAI/b,KAAK+b,EAAGugB,EAAIt8B,KAAKs8B,EACjCl5B,EAAIma,EAAEyW,SAMZ,OAJAh0B,KAAK8b,EAAI1Y,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,GAAMk5B,EAC5Ct8B,KAAK+b,EAAI3Y,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,GAAMk5B,EAC5Ct8B,KAAKs8B,EAAIl5B,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,GAAMk5B,EAErCt8B,O,+BAIR,SAAmBud,GAElB,OAAOvd,KAAKg8B,aAAcze,GAAIoX,c,0BAI/B,SAAcpX,GAEb,IAAMzB,EAAI9b,KAAK8b,EAAGC,EAAI/b,KAAK+b,EAAGugB,EAAIt8B,KAAKs8B,EACjCl5B,EAAIma,EAAEyW,SAENJ,EAAI,GAAMxwB,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,IAAOk5B,EAAIl5B,EAAG,KAM3D,OAJApD,KAAK8b,GAAM1Y,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,GAAMk5B,EAAIl5B,EAAG,KAASwwB,EAC9D5zB,KAAK+b,GAAM3Y,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,GAAMk5B,EAAIl5B,EAAG,KAASwwB,EAC9D5zB,KAAKs8B,GAAMl5B,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,IAAOk5B,EAAIl5B,EAAG,KAASwwB,EAExD5zB,O,6BAIR,SAAiB8yB,GAEhB,IAAMhX,EAAI9b,KAAK8b,EAAGC,EAAI/b,KAAK+b,EAAGugB,EAAIt8B,KAAKs8B,EACjCqG,EAAK7P,EAAEhX,EAAG8mB,EAAK9P,EAAE/W,EAAG8mB,EAAK/P,EAAEwJ,EAAGwG,EAAKhQ,EAAEc,EAIrCmP,EAAKD,EAAKhnB,EAAI8mB,EAAKtG,EAAIuG,EAAK9mB,EAC5BinB,EAAKF,EAAK/mB,EAAI8mB,EAAK/mB,EAAI6mB,EAAKrG,EAC5B2G,EAAKH,EAAKxG,EAAIqG,EAAK5mB,EAAI6mB,EAAK9mB,EAC5BonB,GAAOP,EAAK7mB,EAAI8mB,EAAK7mB,EAAI8mB,EAAKvG,EAQpC,OAJAt8B,KAAK8b,EAAIinB,EAAKD,EAAKI,GAAOP,EAAKK,GAAOH,EAAKI,GAAOL,EAClD5iC,KAAK+b,EAAIinB,EAAKF,EAAKI,GAAON,EAAKK,GAAON,EAAKI,GAAOF,EAClD7iC,KAAKs8B,EAAI2G,EAAKH,EAAKI,GAAOL,EAAKE,GAAOH,EAAKI,GAAOL,EAE3C3iC,O,qBAIR,SAASmjC,GAER,OAAOnjC,KAAKojC,aAAcD,EAAOE,oBAAqBD,aAAcD,EAAOG,oB,uBAI5E,SAAWH,GAEV,OAAOnjC,KAAKojC,aAAcD,EAAOI,yBAA0BH,aAAcD,EAAOK,e,gCAIjF,SAAoBjmB,GAKnB,IAAMzB,EAAI9b,KAAK8b,EAAGC,EAAI/b,KAAK+b,EAAGugB,EAAIt8B,KAAKs8B,EACjCl5B,EAAIma,EAAEyW,SAMZ,OAJAh0B,KAAK8b,EAAI1Y,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,GAAMk5B,EAC5Ct8B,KAAK+b,EAAI3Y,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,GAAMk5B,EAC5Ct8B,KAAKs8B,EAAIl5B,EAAG,GAAM0Y,EAAI1Y,EAAG,GAAM2Y,EAAI3Y,EAAG,IAAOk5B,EAEtCt8B,KAAK20B,c,oBAIb,SAAQ3U,GAMP,OAJAhgB,KAAK8b,GAAKkE,EAAElE,EACZ9b,KAAK+b,GAAKiE,EAAEjE,EACZ/b,KAAKs8B,GAAKtc,EAAEsc,EAELt8B,O,0BAIR,SAAc2zB,GAEb,OAAO3zB,KAAK+zB,eAAgB,EAAIJ,K,iBAIjC,SAAK3T,GAMJ,OAJAhgB,KAAK8b,EAAIhL,KAAKiE,IAAK/U,KAAK8b,EAAGkE,EAAElE,GAC7B9b,KAAK+b,EAAIjL,KAAKiE,IAAK/U,KAAK+b,EAAGiE,EAAEjE,GAC7B/b,KAAKs8B,EAAIxrB,KAAKiE,IAAK/U,KAAKs8B,EAAGtc,EAAEsc,GAEtBt8B,O,iBAIR,SAAKggB,GAMJ,OAJAhgB,KAAK8b,EAAIhL,KAAKkE,IAAKhV,KAAK8b,EAAGkE,EAAElE,GAC7B9b,KAAK+b,EAAIjL,KAAKkE,IAAKhV,KAAK+b,EAAGiE,EAAEjE,GAC7B/b,KAAKs8B,EAAIxrB,KAAKkE,IAAKhV,KAAKs8B,EAAGtc,EAAEsc,GAEtBt8B,O,mBAIR,SAAO+U,EAAKC,GAQX,OAJAhV,KAAK8b,EAAIhL,KAAKkE,IAAKD,EAAI+G,EAAGhL,KAAKiE,IAAKC,EAAI8G,EAAG9b,KAAK8b,IAChD9b,KAAK+b,EAAIjL,KAAKkE,IAAKD,EAAIgH,EAAGjL,KAAKiE,IAAKC,EAAI+G,EAAG/b,KAAK+b,IAChD/b,KAAKs8B,EAAIxrB,KAAKkE,IAAKD,EAAIunB,EAAGxrB,KAAKiE,IAAKC,EAAIsnB,EAAGt8B,KAAKs8B,IAEzCt8B,O,yBAIR,SAAai0B,EAAQC,GAMpB,OAJAl0B,KAAK8b,EAAIhL,KAAKkE,IAAKif,EAAQnjB,KAAKiE,IAAKmf,EAAQl0B,KAAK8b,IAClD9b,KAAK+b,EAAIjL,KAAKkE,IAAKif,EAAQnjB,KAAKiE,IAAKmf,EAAQl0B,KAAK+b,IAClD/b,KAAKs8B,EAAIxrB,KAAKkE,IAAKif,EAAQnjB,KAAKiE,IAAKmf,EAAQl0B,KAAKs8B,IAE3Ct8B,O,yBAIR,SAAa+U,EAAKC,GAEjB,IAAMxW,EAASwB,KAAKxB,SAEpB,OAAOwB,KAAKm0B,aAAc31B,GAAU,GAAIu1B,eAAgBjjB,KAAKkE,IAAKD,EAAKjE,KAAKiE,IAAKC,EAAKxW,O,mBAIvF,WAMC,OAJAwB,KAAK8b,EAAIhL,KAAKmgB,MAAOjxB,KAAK8b,GAC1B9b,KAAK+b,EAAIjL,KAAKmgB,MAAOjxB,KAAK+b,GAC1B/b,KAAKs8B,EAAIxrB,KAAKmgB,MAAOjxB,KAAKs8B,GAEnBt8B,O,kBAIR,WAMC,OAJAA,KAAK8b,EAAIhL,KAAK+f,KAAM7wB,KAAK8b,GACzB9b,KAAK+b,EAAIjL,KAAK+f,KAAM7wB,KAAK+b,GACzB/b,KAAKs8B,EAAIxrB,KAAK+f,KAAM7wB,KAAKs8B,GAElBt8B,O,mBAIR,WAMC,OAJAA,KAAK8b,EAAIhL,KAAKsjB,MAAOp0B,KAAK8b,GAC1B9b,KAAK+b,EAAIjL,KAAKsjB,MAAOp0B,KAAK+b,GAC1B/b,KAAKs8B,EAAIxrB,KAAKsjB,MAAOp0B,KAAKs8B,GAEnBt8B,O,yBAIR,WAMC,OAJAA,KAAK8b,EAAM9b,KAAK8b,EAAI,EAAMhL,KAAK+f,KAAM7wB,KAAK8b,GAAMhL,KAAKmgB,MAAOjxB,KAAK8b,GACjE9b,KAAK+b,EAAM/b,KAAK+b,EAAI,EAAMjL,KAAK+f,KAAM7wB,KAAK+b,GAAMjL,KAAKmgB,MAAOjxB,KAAK+b,GACjE/b,KAAKs8B,EAAMt8B,KAAKs8B,EAAI,EAAMxrB,KAAK+f,KAAM7wB,KAAKs8B,GAAMxrB,KAAKmgB,MAAOjxB,KAAKs8B,GAE1Dt8B,O,oBAIR,WAMC,OAJAA,KAAK8b,GAAM9b,KAAK8b,EAChB9b,KAAK+b,GAAM/b,KAAK+b,EAChB/b,KAAKs8B,GAAMt8B,KAAKs8B,EAETt8B,O,iBAIR,SAAKggB,GAEJ,OAAOhgB,KAAK8b,EAAIkE,EAAElE,EAAI9b,KAAK+b,EAAIiE,EAAEjE,EAAI/b,KAAKs8B,EAAItc,EAAEsc,I,sBAMjD,WAEC,OAAOt8B,KAAK8b,EAAI9b,KAAK8b,EAAI9b,KAAK+b,EAAI/b,KAAK+b,EAAI/b,KAAKs8B,EAAIt8B,KAAKs8B,I,oBAI1D,WAEC,OAAOxrB,KAAKujB,KAAMr0B,KAAK8b,EAAI9b,KAAK8b,EAAI9b,KAAK+b,EAAI/b,KAAK+b,EAAI/b,KAAKs8B,EAAIt8B,KAAKs8B,K,6BAIrE,WAEC,OAAOxrB,KAAKihB,IAAK/xB,KAAK8b,GAAMhL,KAAKihB,IAAK/xB,KAAK+b,GAAMjL,KAAKihB,IAAK/xB,KAAKs8B,K,uBAIjE,WAEC,OAAOt8B,KAAKm0B,aAAcn0B,KAAKxB,UAAY,K,uBAI5C,SAAWA,GAEV,OAAOwB,KAAK20B,YAAYZ,eAAgBv1B,K,kBAIzC,SAAMwhB,EAAG4U,GAMR,OAJA50B,KAAK8b,IAAOkE,EAAElE,EAAI9b,KAAK8b,GAAM8Y,EAC7B50B,KAAK+b,IAAOiE,EAAEjE,EAAI/b,KAAK+b,GAAM6Y,EAC7B50B,KAAKs8B,IAAOtc,EAAEsc,EAAIt8B,KAAKs8B,GAAM1H,EAEtB50B,O,yBAIR,SAAa60B,EAAIC,EAAIF,GAMpB,OAJA50B,KAAK8b,EAAI+Y,EAAG/Y,GAAMgZ,EAAGhZ,EAAI+Y,EAAG/Y,GAAM8Y,EAClC50B,KAAK+b,EAAI8Y,EAAG9Y,GAAM+Y,EAAG/Y,EAAI8Y,EAAG9Y,GAAM6Y,EAClC50B,KAAKs8B,EAAIzH,EAAGyH,GAAMxH,EAAGwH,EAAIzH,EAAGyH,GAAM1H,EAE3B50B,O,mBAIR,SAAOggB,EAAG4T,GAET,YAAWrxB,IAANqxB,GAEJtO,QAAQM,KAAM,6FACP5lB,KAAKyjC,aAAczjB,EAAG4T,IAIvB5zB,KAAKyjC,aAAczjC,KAAMggB,K,0BAIjC,SAAcrV,EAAGC,GAEhB,IAAM84B,EAAK/4B,EAAEmR,EAAG6nB,EAAKh5B,EAAEoR,EAAG6nB,EAAKj5B,EAAE2xB,EAC3BuH,EAAKj5B,EAAEkR,EAAGgoB,EAAKl5B,EAAEmR,EAAGgoB,EAAKn5B,EAAE0xB,EAMjC,OAJAt8B,KAAK8b,EAAI6nB,EAAKI,EAAKH,EAAKE,EACxB9jC,KAAK+b,EAAI6nB,EAAKC,EAAKH,EAAKK,EACxB/jC,KAAKs8B,EAAIoH,EAAKI,EAAKH,EAAKE,EAEjB7jC,O,6BAIR,SAAiBggB,GAEhB,IAAMgkB,EAAchkB,EAAEikB,WAEtB,GAAqB,IAAhBD,EAAoB,OAAOhkC,KAAK4a,IAAK,EAAG,EAAG,GAEhD,IAAM+Y,EAAS3T,EAAE2f,IAAK3/B,MAASgkC,EAE/B,OAAOhkC,KAAKm7B,KAAMnb,GAAI+T,eAAgBJ,K,4BAIvC,SAAgBuQ,GAIf,OAFAC,GAAUhJ,KAAMn7B,MAAOokC,gBAAiBF,GAEjClkC,KAAKqkC,IAAKF,M,qBAIlB,SAASG,GAKR,OAAOtkC,KAAKqkC,IAAKF,GAAUhJ,KAAMmJ,GAASvQ,eAAgB,EAAI/zB,KAAK2/B,IAAK2E,O,qBAIzE,SAAStkB,GAER,IAAMgkB,EAAclzB,KAAKujB,KAAMr0B,KAAKikC,WAAajkB,EAAEikB,YAEnD,GAAqB,IAAhBD,EAAoB,OAAOlzB,KAAKif,GAAK,EAE1C,IAAM6I,EAAQ54B,KAAK2/B,IAAK3f,GAAMgkB,EAI9B,OAAOlzB,KAAKyrB,KAAMjM,GAASsI,GAAS,EAAG,M,wBAIxC,SAAY5Y,GAEX,OAAOlP,KAAKujB,KAAMr0B,KAAKw0B,kBAAmBxU,M,+BAI3C,SAAmBA,GAElB,IAAMyU,EAAKz0B,KAAK8b,EAAIkE,EAAElE,EAAG4Y,EAAK10B,KAAK+b,EAAIiE,EAAEjE,EAAGwoB,EAAKvkC,KAAKs8B,EAAItc,EAAEsc,EAE5D,OAAO7H,EAAKA,EAAKC,EAAKA,EAAK6P,EAAKA,I,iCAIjC,SAAqBvkB,GAEpB,OAAOlP,KAAKihB,IAAK/xB,KAAK8b,EAAIkE,EAAElE,GAAMhL,KAAKihB,IAAK/xB,KAAK+b,EAAIiE,EAAEjE,GAAMjL,KAAKihB,IAAK/xB,KAAKs8B,EAAItc,EAAEsc,K,8BAInF,SAAkBp5B,GAEjB,OAAOlD,KAAKwkC,uBAAwBthC,EAAEuhC,OAAQvhC,EAAEwhC,IAAKxhC,EAAE01B,S,oCAIxD,SAAwB6L,EAAQC,EAAK9L,GAEpC,IAAM+L,EAAe7zB,KAAKmiB,IAAKyR,GAAQD,EAMvC,OAJAzkC,KAAK8b,EAAI6oB,EAAe7zB,KAAKmiB,IAAK2F,GAClC54B,KAAK+b,EAAIjL,KAAKkiB,IAAK0R,GAAQD,EAC3BzkC,KAAKs8B,EAAIqI,EAAe7zB,KAAKkiB,IAAK4F,GAE3B54B,O,gCAIR,SAAoBse,GAEnB,OAAOte,KAAK4kC,yBAA0BtmB,EAAEmmB,OAAQnmB,EAAEsa,MAAOta,EAAEvC,K,sCAI5D,SAA0B0oB,EAAQ7L,EAAO7c,GAMxC,OAJA/b,KAAK8b,EAAI2oB,EAAS3zB,KAAKmiB,IAAK2F,GAC5B54B,KAAK+b,EAAIA,EACT/b,KAAKs8B,EAAImI,EAAS3zB,KAAKkiB,IAAK4F,GAErB54B,O,mCAIR,SAAuBud,GAEtB,IAAMna,EAAIma,EAAEyW,SAMZ,OAJAh0B,KAAK8b,EAAI1Y,EAAG,IACZpD,KAAK+b,EAAI3Y,EAAG,IACZpD,KAAKs8B,EAAIl5B,EAAG,IAELpD,O,gCAIR,SAAoBud,GAEnB,IAAMgb,EAAKv4B,KAAK6kC,oBAAqBtnB,EAAG,GAAI/e,SACtCg6B,EAAKx4B,KAAK6kC,oBAAqBtnB,EAAG,GAAI/e,SACtCsmC,EAAK9kC,KAAK6kC,oBAAqBtnB,EAAG,GAAI/e,SAM5C,OAJAwB,KAAK8b,EAAIyc,EACTv4B,KAAK+b,EAAIyc,EACTx4B,KAAKs8B,EAAIwI,EAEF9kC,O,iCAIR,SAAqBud,EAAG1R,GAEvB,OAAO7L,KAAK84B,UAAWvb,EAAEyW,SAAkB,EAARnoB,K,kCAIpC,SAAsB0R,EAAG1R,GAExB,OAAO7L,KAAK84B,UAAWvb,EAAEyW,SAAkB,EAARnoB,K,oBAIpC,SAAQmU,GAEP,OAAWA,EAAElE,IAAM9b,KAAK8b,GAASkE,EAAEjE,IAAM/b,KAAK+b,GAASiE,EAAEsc,IAAMt8B,KAAKs8B,I,uBAIrE,SAAW3M,GAAoB,IAAblS,EAAa,uDAAJ,EAM1B,OAJAzd,KAAK8b,EAAI6T,EAAOlS,GAChBzd,KAAK+b,EAAI4T,EAAOlS,EAAS,GACzBzd,KAAKs8B,EAAI3M,EAAOlS,EAAS,GAElBzd,O,qBAIR,WAAkC,IAAzB2vB,EAAyB,uDAAjB,GAAIlS,EAAa,uDAAJ,EAM7B,OAJAkS,EAAOlS,GAAWzd,KAAK8b,EACvB6T,EAAOlS,EAAS,GAAMzd,KAAK+b,EAC3B4T,EAAOlS,EAAS,GAAMzd,KAAKs8B,EAEpB3M,I,iCAIR,SAAqBnJ,EAAW3a,EAAO4R,GAYtC,YAVgBlb,IAAXkb,GAEJ6H,QAAQM,KAAM,uEAIf5lB,KAAK8b,EAAI0K,EAAUuO,KAAMlpB,GACzB7L,KAAK+b,EAAIyK,EAAUwO,KAAMnpB,GACzB7L,KAAKs8B,EAAI9V,EAAUiX,KAAM5xB,GAElB7L,O,oBAIR,WAMC,OAJAA,KAAK8b,EAAIhL,KAAKC,SACd/Q,KAAK+b,EAAIjL,KAAKC,SACd/Q,KAAKs8B,EAAIxrB,KAAKC,SAEP/Q,S,KAMTqiC,GAAQljC,UAAU4lC,WAAY,EAE9B,IAAMZ,GAA0B,IAAI9B,GAC9BG,GAA8B,IAAIhE,GAElCwG,G,WAEL,aAAgI,IAAnHjwB,EAAmH,uDAA7G,IAAIstB,GAAW4C,IAAYA,IAAYA,KAAYjwB,EAA0D,uDAApD,IAAIqtB,IAAW4C,KAAYA,KAAYA,KAAa,oBAE/HjlC,KAAK+U,IAAMA,EACX/U,KAAKgV,IAAMA,E,uCAIZ,SAAKD,EAAKC,GAKT,OAHAhV,KAAK+U,IAAIomB,KAAMpmB,GACf/U,KAAKgV,IAAImmB,KAAMnmB,GAERhV,O,0BAIR,SAAc2vB,GAUb,IARA,IAAIuV,EAASD,IACTE,EAASF,IACTG,EAASH,IAETI,GAASJ,IACTK,GAASL,IACTM,GAASN,IAEH1mC,EAAI,EAAGyK,EAAI2mB,EAAMnxB,OAAQD,EAAIyK,EAAGzK,GAAK,EAAI,CAElD,IAAMud,EAAI6T,EAAOpxB,GACXwd,EAAI4T,EAAOpxB,EAAI,GACf+9B,EAAI3M,EAAOpxB,EAAI,GAEhBud,EAAIopB,IAAOA,EAAOppB,GAClBC,EAAIopB,IAAOA,EAAOppB,GAClBugB,EAAI8I,IAAOA,EAAO9I,GAElBxgB,EAAIupB,IAAOA,EAAOvpB,GAClBC,EAAIupB,IAAOA,EAAOvpB,GAClBugB,EAAIiJ,IAAOA,EAAOjJ,GAOxB,OAHAt8B,KAAK+U,IAAI6F,IAAKsqB,EAAMC,EAAMC,GAC1BplC,KAAKgV,IAAI4F,IAAKyqB,EAAMC,EAAMC,GAEnBvlC,O,oCAIR,SAAwBwmB,GAUvB,IARA,IAAI0e,EAASD,IACTE,EAASF,IACTG,EAASH,IAETI,GAASJ,IACTK,GAASL,IACTM,GAASN,IAEH1mC,EAAI,EAAGyK,EAAIwd,EAAUgf,MAAOjnC,EAAIyK,EAAGzK,IAAO,CAEnD,IAAMud,EAAI0K,EAAUuO,KAAMx2B,GACpBwd,EAAIyK,EAAUwO,KAAMz2B,GACpB+9B,EAAI9V,EAAUiX,KAAMl/B,GAErBud,EAAIopB,IAAOA,EAAOppB,GAClBC,EAAIopB,IAAOA,EAAOppB,GAClBugB,EAAI8I,IAAOA,EAAO9I,GAElBxgB,EAAIupB,IAAOA,EAAOvpB,GAClBC,EAAIupB,IAAOA,EAAOvpB,GAClBugB,EAAIiJ,IAAOA,EAAOjJ,GAOxB,OAHAt8B,KAAK+U,IAAI6F,IAAKsqB,EAAMC,EAAMC,GAC1BplC,KAAKgV,IAAI4F,IAAKyqB,EAAMC,EAAMC,GAEnBvlC,O,2BAIR,SAAeylC,GAEdzlC,KAAK0lC,YAEL,IAAM,IAAInnC,EAAI,EAAGonC,EAAKF,EAAOjnC,OAAQD,EAAIonC,EAAIpnC,IAE5CyB,KAAK4lC,cAAeH,EAAQlnC,IAI7B,OAAOyB,O,kCAIR,SAAsBi1B,EAAQ3L,GAE7B,IAAMuc,EAAWC,GAAU3K,KAAM7R,GAAOyK,eAAgB,IAKxD,OAHA/zB,KAAK+U,IAAIomB,KAAMlG,GAASoP,IAAKwB,GAC7B7lC,KAAKgV,IAAImmB,KAAMlG,GAAS8Q,IAAKF,GAEtB7lC,O,2BAIR,SAAeiB,GAId,OAFAjB,KAAK0lC,YAEE1lC,KAAKgmC,eAAgB/kC,K,mBAI7B,WAEC,OAAO,IAAIjB,KAAKR,aAAc27B,KAAMn7B,Q,kBAIrC,SAAMimC,GAKL,OAHAjmC,KAAK+U,IAAIomB,KAAM8K,EAAIlxB,KACnB/U,KAAKgV,IAAImmB,KAAM8K,EAAIjxB,KAEZhV,O,uBAIR,WAKC,OAHAA,KAAK+U,IAAI+G,EAAI9b,KAAK+U,IAAIgH,EAAI/b,KAAK+U,IAAIunB,EAAM2I,IACzCjlC,KAAKgV,IAAI8G,EAAI9b,KAAKgV,IAAI+G,EAAI/b,KAAKgV,IAAIsnB,GAAM2I,IAElCjlC,O,qBAIR,WAIC,OAASA,KAAKgV,IAAI8G,EAAI9b,KAAK+U,IAAI+G,GAAS9b,KAAKgV,IAAI+G,EAAI/b,KAAK+U,IAAIgH,GAAS/b,KAAKgV,IAAIsnB,EAAIt8B,KAAK+U,IAAIunB,I,uBAI9F,SAAWj+B,GASV,YAPgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,mDACdvnB,EAAS,IAAIgkC,IAIPriC,KAAKkmC,UAAY7nC,EAAOuc,IAAK,EAAG,EAAG,GAAMvc,EAAOw1B,WAAY7zB,KAAK+U,IAAK/U,KAAKgV,KAAM+e,eAAgB,M,qBAIzG,SAAS11B,GASR,YAPgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,iDACdvnB,EAAS,IAAIgkC,IAIPriC,KAAKkmC,UAAY7nC,EAAOuc,IAAK,EAAG,EAAG,GAAMvc,EAAOy1B,WAAY9zB,KAAKgV,IAAKhV,KAAK+U,O,2BAInF,SAAeoxB,GAKd,OAHAnmC,KAAK+U,IAAIA,IAAKoxB,GACdnmC,KAAKgV,IAAIA,IAAKmxB,GAEPnmC,O,4BAIR,SAAgBomC,GAKf,OAHApmC,KAAK+U,IAAIsvB,IAAK+B,GACdpmC,KAAKgV,IAAI+wB,IAAKK,GAEPpmC,O,4BAIR,SAAgB2zB,GAKf,OAHA3zB,KAAK+U,IAAIsxB,WAAa1S,GACtB3zB,KAAKgV,IAAIqxB,UAAW1S,GAEb3zB,O,4BAIR,SAAgBiB,GAKfA,EAAOqlC,mBAAmB,GAAO,GAEjC,IAAMC,EAAWtlC,EAAOslC,cAENhkC,IAAbgkC,IAE0B,OAAzBA,EAASC,aAEbD,EAASE,qBAIVC,GAAOvL,KAAMoL,EAASC,aACtBE,GAAOtD,aAAcniC,EAAOuiC,aAE5BxjC,KAAK2mC,MAAOD,KAMb,IAFA,IAAM3gC,EAAW9E,EAAO8E,SAEdxH,EAAI,EAAGyK,EAAIjD,EAASvH,OAAQD,EAAIyK,EAAGzK,IAE5CyB,KAAKgmC,eAAgBjgC,EAAUxH,IAIhC,OAAOyB,O,2BAIR,SAAemmC,GAEd,QAAOA,EAAMrqB,EAAI9b,KAAK+U,IAAI+G,GAAKqqB,EAAMrqB,EAAI9b,KAAKgV,IAAI8G,GACjDqqB,EAAMpqB,EAAI/b,KAAK+U,IAAIgH,GAAKoqB,EAAMpqB,EAAI/b,KAAKgV,IAAI+G,GAC3CoqB,EAAM7J,EAAIt8B,KAAK+U,IAAIunB,GAAK6J,EAAM7J,EAAIt8B,KAAKgV,IAAIsnB,K,yBAI7C,SAAa2J,GAEZ,OAAOjmC,KAAK+U,IAAI+G,GAAKmqB,EAAIlxB,IAAI+G,GAAKmqB,EAAIjxB,IAAI8G,GAAK9b,KAAKgV,IAAI8G,GACvD9b,KAAK+U,IAAIgH,GAAKkqB,EAAIlxB,IAAIgH,GAAKkqB,EAAIjxB,IAAI+G,GAAK/b,KAAKgV,IAAI+G,GACjD/b,KAAK+U,IAAIunB,GAAK2J,EAAIlxB,IAAIunB,GAAK2J,EAAIjxB,IAAIsnB,GAAKt8B,KAAKgV,IAAIsnB,I,0BAInD,SAAc6J,EAAO9nC,GAYpB,YAPgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,sDACdvnB,EAAS,IAAIgkC,IAIPhkC,EAAOuc,KACXurB,EAAMrqB,EAAI9b,KAAK+U,IAAI+G,IAAQ9b,KAAKgV,IAAI8G,EAAI9b,KAAK+U,IAAI+G,IACjDqqB,EAAMpqB,EAAI/b,KAAK+U,IAAIgH,IAAQ/b,KAAKgV,IAAI+G,EAAI/b,KAAK+U,IAAIgH,IACjDoqB,EAAM7J,EAAIt8B,KAAK+U,IAAIunB,IAAQt8B,KAAKgV,IAAIsnB,EAAIt8B,KAAK+U,IAAIunB,M,2BAKrD,SAAe2J,GAGd,QAAOA,EAAIjxB,IAAI8G,EAAI9b,KAAK+U,IAAI+G,GAAKmqB,EAAIlxB,IAAI+G,EAAI9b,KAAKgV,IAAI8G,GACrDmqB,EAAIjxB,IAAI+G,EAAI/b,KAAK+U,IAAIgH,GAAKkqB,EAAIlxB,IAAIgH,EAAI/b,KAAKgV,IAAI+G,GAC/CkqB,EAAIjxB,IAAIsnB,EAAIt8B,KAAK+U,IAAIunB,GAAK2J,EAAIlxB,IAAIunB,EAAIt8B,KAAKgV,IAAIsnB,K,8BAIjD,SAAkBsK,GAMjB,OAHA5mC,KAAK6mC,WAAYD,EAAO3R,OAAQ6Q,IAGzBA,GAAUtR,kBAAmBoS,EAAO3R,SAAc2R,EAAOnC,OAASmC,EAAOnC,S,6BAIjF,SAAiBqC,GAKhB,IAAI/xB,EAAKC,EAsCT,OApCK8xB,EAAMxC,OAAOxoB,EAAI,GAErB/G,EAAM+xB,EAAMxC,OAAOxoB,EAAI9b,KAAK+U,IAAI+G,EAChC9G,EAAM8xB,EAAMxC,OAAOxoB,EAAI9b,KAAKgV,IAAI8G,IAIhC/G,EAAM+xB,EAAMxC,OAAOxoB,EAAI9b,KAAKgV,IAAI8G,EAChC9G,EAAM8xB,EAAMxC,OAAOxoB,EAAI9b,KAAK+U,IAAI+G,GAI5BgrB,EAAMxC,OAAOvoB,EAAI,GAErBhH,GAAO+xB,EAAMxC,OAAOvoB,EAAI/b,KAAK+U,IAAIgH,EACjC/G,GAAO8xB,EAAMxC,OAAOvoB,EAAI/b,KAAKgV,IAAI+G,IAIjChH,GAAO+xB,EAAMxC,OAAOvoB,EAAI/b,KAAKgV,IAAI+G,EACjC/G,GAAO8xB,EAAMxC,OAAOvoB,EAAI/b,KAAK+U,IAAIgH,GAI7B+qB,EAAMxC,OAAOhI,EAAI,GAErBvnB,GAAO+xB,EAAMxC,OAAOhI,EAAIt8B,KAAK+U,IAAIunB,EACjCtnB,GAAO8xB,EAAMxC,OAAOhI,EAAIt8B,KAAKgV,IAAIsnB,IAIjCvnB,GAAO+xB,EAAMxC,OAAOhI,EAAIt8B,KAAKgV,IAAIsnB,EACjCtnB,GAAO8xB,EAAMxC,OAAOhI,EAAIt8B,KAAK+U,IAAIunB,GAIzBvnB,IAAS+xB,EAAMC,UAAY/xB,IAAS8xB,EAAMC,W,gCAIpD,SAAoBC,GAEnB,GAAKhnC,KAAKkmC,UAET,OAAO,EAKRlmC,KAAKinC,UAAWC,IAChBC,GAASrT,WAAY9zB,KAAKgV,IAAKkyB,IAG/BE,GAAMtT,WAAYkT,EAASr8B,EAAGu8B,IAC9BG,GAAMvT,WAAYkT,EAASp8B,EAAGs8B,IAC9BI,GAAMxT,WAAYkT,EAAS1oB,EAAG4oB,IAG9BK,GAAIzT,WAAYuT,GAAOD,IACvBI,GAAI1T,WAAYwT,GAAOD,IACvBI,GAAI3T,WAAYsT,GAAOE,IAKvB,IAAII,EAAO,CACV,GAAKH,GAAIjL,EAAGiL,GAAIxrB,EAAG,GAAKyrB,GAAIlL,EAAGkL,GAAIzrB,EAAG,GAAK0rB,GAAInL,EAAGmL,GAAI1rB,EACtDwrB,GAAIjL,EAAG,GAAKiL,GAAIzrB,EAAG0rB,GAAIlL,EAAG,GAAKkL,GAAI1rB,EAAG2rB,GAAInL,EAAG,GAAKmL,GAAI3rB,GACpDyrB,GAAIxrB,EAAGwrB,GAAIzrB,EAAG,GAAK0rB,GAAIzrB,EAAGyrB,GAAI1rB,EAAG,GAAK2rB,GAAI1rB,EAAG0rB,GAAI3rB,EAAG,GAEvD,QAAO6rB,GAAYD,EAAMN,GAAOC,GAAOC,GAAOH,QAQvCQ,GADPD,EAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACRN,GAAOC,GAAOC,GAAOH,MAQ9CS,GAAgBnE,aAAc8D,GAAKC,IAG5BG,GAFPD,EAAO,CAAEE,GAAgB9rB,EAAG8rB,GAAgB7rB,EAAG6rB,GAAgBtL,GAEtC8K,GAAOC,GAAOC,GAAOH,Q,wBAI/C,SAAYhB,EAAO9nC,GASlB,YAPgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,oDACdvnB,EAAS,IAAIgkC,IAIPhkC,EAAO88B,KAAMgL,GAAQvxB,MAAO5U,KAAK+U,IAAK/U,KAAKgV,O,6BAInD,SAAiBmxB,GAIhB,OAFqBL,GAAU3K,KAAMgL,GAAQvxB,MAAO5U,KAAK+U,IAAK/U,KAAKgV,KAE/CqvB,IAAK8B,GAAQ3nC,W,+BAIlC,SAAmBH,GAalB,YAXgBkE,IAAXlE,GAEJinB,QAAQxjB,MAAO,2DAKhB9B,KAAKinC,UAAW5oC,EAAO42B,QAEvB52B,EAAOomC,OAA8C,GAArCzkC,KAAK6nC,QAAS/B,IAAYtnC,SAEnCH,I,uBAIR,SAAW4nC,GAQV,OANAjmC,KAAK+U,IAAIC,IAAKixB,EAAIlxB,KAClB/U,KAAKgV,IAAID,IAAKkxB,EAAIjxB,KAGbhV,KAAKkmC,WAAYlmC,KAAK0lC,YAEpB1lC,O,mBAIR,SAAOimC,GAKN,OAHAjmC,KAAK+U,IAAIA,IAAKkxB,EAAIlxB,KAClB/U,KAAKgV,IAAIA,IAAKixB,EAAIjxB,KAEXhV,O,0BAIR,SAAc64B,GAGb,OAAK74B,KAAKkmC,YAGV4B,GAAS,GAAIltB,IAAK5a,KAAK+U,IAAI+G,EAAG9b,KAAK+U,IAAIgH,EAAG/b,KAAK+U,IAAIunB,GAAI8G,aAAcvK,GACrEiP,GAAS,GAAIltB,IAAK5a,KAAK+U,IAAI+G,EAAG9b,KAAK+U,IAAIgH,EAAG/b,KAAKgV,IAAIsnB,GAAI8G,aAAcvK,GACrEiP,GAAS,GAAIltB,IAAK5a,KAAK+U,IAAI+G,EAAG9b,KAAKgV,IAAI+G,EAAG/b,KAAK+U,IAAIunB,GAAI8G,aAAcvK,GACrEiP,GAAS,GAAIltB,IAAK5a,KAAK+U,IAAI+G,EAAG9b,KAAKgV,IAAI+G,EAAG/b,KAAKgV,IAAIsnB,GAAI8G,aAAcvK,GACrEiP,GAAS,GAAIltB,IAAK5a,KAAKgV,IAAI8G,EAAG9b,KAAK+U,IAAIgH,EAAG/b,KAAK+U,IAAIunB,GAAI8G,aAAcvK,GACrEiP,GAAS,GAAIltB,IAAK5a,KAAKgV,IAAI8G,EAAG9b,KAAK+U,IAAIgH,EAAG/b,KAAKgV,IAAIsnB,GAAI8G,aAAcvK,GACrEiP,GAAS,GAAIltB,IAAK5a,KAAKgV,IAAI8G,EAAG9b,KAAKgV,IAAI+G,EAAG/b,KAAK+U,IAAIunB,GAAI8G,aAAcvK,GACrEiP,GAAS,GAAIltB,IAAK5a,KAAKgV,IAAI8G,EAAG9b,KAAKgV,IAAI+G,EAAG/b,KAAKgV,IAAIsnB,GAAI8G,aAAcvK,GAErE74B,KAAK+nC,cAAeD,KAZS9nC,O,uBAkB9B,SAAWyd,GAKV,OAHAzd,KAAK+U,IAAIgxB,IAAKtoB,GACdzd,KAAKgV,IAAI+wB,IAAKtoB,GAEPzd,O,oBAIR,SAAQimC,GAEP,OAAOA,EAAIlxB,IAAIizB,OAAQhoC,KAAK+U,MAASkxB,EAAIjxB,IAAIgzB,OAAQhoC,KAAKgV,S,KAM5DgwB,GAAK7lC,UAAU8oC,QAAS,EAExB,IAAMH,GAAU,CACD,IAAIzF,GACJ,IAAIA,GACJ,IAAIA,GACJ,IAAIA,GACJ,IAAIA,GACJ,IAAIA,GACJ,IAAIA,GACJ,IAAIA,IAGbyD,GAA0B,IAAIzD,GAE9BqE,GAAuB,IAAI1B,GAI3BoC,GAAsB,IAAI/E,GAC1BgF,GAAsB,IAAIhF,GAC1BiF,GAAsB,IAAIjF,GAI1BkF,GAAoB,IAAIlF,GACxBmF,GAAoB,IAAInF,GACxBoF,GAAoB,IAAIpF,GAExB6E,GAAwB,IAAI7E,GAC5B8E,GAAyB,IAAI9E,GAC7BuF,GAAgC,IAAIvF,GACpC6F,GAA0B,IAAI7F,GAEpC,SAASsF,GAAYD,EAAMS,EAAItT,EAAIC,EAAIsT,GAEtC,IAAM,IAAI7pC,EAAI,EAAG4gB,EAAIuoB,EAAKlpC,OAAS,EAAGD,GAAK4gB,EAAG5gB,GAAK,EAAI,CAEtD2pC,GAAUpP,UAAW4O,EAAMnpC,GAE3B,IAAM65B,EAAIgQ,EAAQtsB,EAAIhL,KAAKihB,IAAKmW,GAAUpsB,GAAMssB,EAAQrsB,EAAIjL,KAAKihB,IAAKmW,GAAUnsB,GAAMqsB,EAAQ9L,EAAIxrB,KAAKihB,IAAKmW,GAAU5L,GAEhH+L,EAAKF,EAAGxI,IAAKuI,IACbI,EAAKzT,EAAG8K,IAAKuI,IACbK,EAAKzT,EAAG6K,IAAKuI,IAEnB,GAAKp3B,KAAKkE,KAAOlE,KAAKkE,IAAKqzB,EAAIC,EAAIC,GAAMz3B,KAAKiE,IAAKszB,EAAIC,EAAIC,IAASnQ,EAInE,OAAO,EAMT,OAAO,EAIR,IAAMoQ,GAAuB,IAAIxD,GAC3ByD,GAAsB,IAAIpG,GAC1BqG,GAAiC,IAAIrG,GACrCsG,GAAyB,IAAItG,GAE7BuG,G,WAEL,aAAoD,IAAvC3T,EAAuC,uDAA9B,IAAIoN,GAAWoC,EAAe,wDAAJ,EAAI,oBAEnDzkC,KAAKi1B,OAASA,EACdj1B,KAAKykC,OAASA,E,uCAIf,SAAKxP,EAAQwP,GAKZ,OAHAzkC,KAAKi1B,OAAOkG,KAAMlG,GAClBj1B,KAAKykC,OAASA,EAEPzkC,O,2BAIR,SAAeylC,EAAQoD,GAEtB,IAAM5T,EAASj1B,KAAKi1B,YAEI1yB,IAAnBsmC,EAEJ5T,EAAOkG,KAAM0N,GAIbL,GAAOT,cAAetC,GAASwB,UAAWhS,GAM3C,IAFA,IAAI6T,EAAc,EAERvqC,EAAI,EAAGonC,EAAKF,EAAOjnC,OAAQD,EAAIonC,EAAIpnC,IAE5CuqC,EAAch4B,KAAKkE,IAAK8zB,EAAa7T,EAAOT,kBAAmBiR,EAAQlnC,KAMxE,OAFAyB,KAAKykC,OAAS3zB,KAAKujB,KAAMyU,GAElB9oC,O,kBAIR,SAAM4mC,GAKL,OAHA5mC,KAAKi1B,OAAOkG,KAAMyL,EAAO3R,QACzBj1B,KAAKykC,OAASmC,EAAOnC,OAEdzkC,O,qBAIR,WAEC,OAASA,KAAKykC,OAAS,I,uBAIxB,WAKC,OAHAzkC,KAAKi1B,OAAOra,IAAK,EAAG,EAAG,GACvB5a,KAAKykC,QAAW,EAETzkC,O,2BAIR,SAAemmC,GAEd,OAASA,EAAM3R,kBAAmBx0B,KAAKi1B,SAAcj1B,KAAKykC,OAASzkC,KAAKykC,S,6BAIzE,SAAiB0B,GAEhB,OAASA,EAAM4C,WAAY/oC,KAAKi1B,QAAWj1B,KAAKykC,S,8BAIjD,SAAkBmC,GAEjB,IAAMoC,EAAYhpC,KAAKykC,OAASmC,EAAOnC,OAEvC,OAAOmC,EAAO3R,OAAOT,kBAAmBx0B,KAAKi1B,SAAc+T,EAAYA,I,2BAIxE,SAAe/C,GAEd,OAAOA,EAAIgD,iBAAkBjpC,Q,6BAI9B,SAAiB8mC,GAEhB,OAAOh2B,KAAKihB,IAAK+U,EAAMoC,gBAAiBlpC,KAAKi1B,UAAcj1B,KAAKykC,S,wBAIjE,SAAY0B,EAAO9nC,GAElB,IAAM8qC,EAAgBnpC,KAAKi1B,OAAOT,kBAAmB2R,GAkBrD,YAhBgB5jC,IAAXlE,IAEJinB,QAAQM,KAAM,sDACdvnB,EAAS,IAAIgkC,IAIdhkC,EAAO88B,KAAMgL,GAERgD,EAAkBnpC,KAAKykC,OAASzkC,KAAKykC,SAEzCpmC,EAAOgmC,IAAKrkC,KAAKi1B,QAASN,YAC1Bt2B,EAAO01B,eAAgB/zB,KAAKykC,QAASsB,IAAK/lC,KAAKi1B,SAIzC52B,I,4BAIR,SAAgBA,GASf,YAPgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,0DACdvnB,EAAS,IAAI2mC,IAIThlC,KAAKkmC,WAGT7nC,EAAOqnC,YACArnC,IAIRA,EAAOuc,IAAK5a,KAAKi1B,OAAQj1B,KAAKi1B,QAC9B52B,EAAO+qC,eAAgBppC,KAAKykC,QAErBpmC,K,0BAIR,SAAcw6B,GAKb,OAHA74B,KAAKi1B,OAAOmO,aAAcvK,GAC1B74B,KAAKykC,OAASzkC,KAAKykC,OAAS5L,EAAOwQ,oBAE5BrpC,O,uBAIR,SAAWyd,GAIV,OAFAzd,KAAKi1B,OAAO8Q,IAAKtoB,GAEVzd,O,2BAIR,SAAemmC,GAIdwC,GAAS7U,WAAYqS,EAAOnmC,KAAKi1B,QAEjC,IAAMgP,EAAW0E,GAAS1E,WAE1B,GAAKA,EAAajkC,KAAKykC,OAASzkC,KAAKykC,OAAW,CAE/C,IAAMjmC,EAASsS,KAAKujB,KAAM4P,GACpBqF,EAA+C,IAAzB9qC,EAASwB,KAAKykC,QAM1CzkC,KAAKi1B,OAAO8Q,IAAK4C,GAAS5U,eAAgBuV,EAAoB9qC,IAC9DwB,KAAKykC,QAAU6E,EAIhB,OAAOtpC,O,mBAIR,SAAO4mC,GAaN,OALA8B,GAAiB5U,WAAY8S,EAAO3R,OAAQj1B,KAAKi1B,QAASN,YAAYZ,eAAgB6S,EAAOnC,QAE7FzkC,KAAK4lC,cAAe6C,GAAMtN,KAAMyL,EAAO3R,QAAS8Q,IAAK2C,KACrD1oC,KAAK4lC,cAAe6C,GAAMtN,KAAMyL,EAAO3R,QAASoP,IAAKqE,KAE9C1oC,O,oBAIR,SAAQ4mC,GAEP,OAAOA,EAAO3R,OAAO+S,OAAQhoC,KAAKi1B,SAAc2R,EAAOnC,SAAWzkC,KAAKykC,S,mBAIxE,WAEC,OAAO,IAAIzkC,KAAKR,aAAc27B,KAAMn7B,U,KAMhCupC,GAA0B,IAAIlH,GAC9BmH,GAA2B,IAAInH,GAC/BoH,GAAwB,IAAIpH,GAC5BqH,GAAsB,IAAIrH,GAE1BsH,GAAuB,IAAItH,GAC3BuH,GAAuB,IAAIvH,GAC3BwH,GAA0B,IAAIxH,GAE9ByH,G,WAEL,aAA4E,IAA/DC,EAA+D,uDAAtD,IAAI1H,GAAW2H,EAAuC,uDAA3B,IAAI3H,GAAS,EAAG,GAAK,GAAM,oBAE3EriC,KAAK+pC,OAASA,EACd/pC,KAAKgqC,UAAYA,E,uCAIlB,SAAKD,EAAQC,GAKZ,OAHAhqC,KAAK+pC,OAAO5O,KAAM4O,GAClB/pC,KAAKgqC,UAAU7O,KAAM6O,GAEdhqC,O,kBAIR,SAAMiqC,GAKL,OAHAjqC,KAAK+pC,OAAO5O,KAAM8O,EAAIF,QACtB/pC,KAAKgqC,UAAU7O,KAAM8O,EAAID,WAElBhqC,O,gBAIR,SAAIywB,EAAGpyB,GASN,YAPgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,2CACdvnB,EAAS,IAAIgkC,IAIPhkC,EAAO88B,KAAMn7B,KAAKgqC,WAAYjW,eAAgBtD,GAAIsV,IAAK/lC,KAAK+pC,U,oBAIpE,SAAQ/pB,GAIP,OAFAhgB,KAAKgqC,UAAU7O,KAAMnb,GAAIqkB,IAAKrkC,KAAK+pC,QAASpV,YAErC30B,O,oBAIR,SAAQywB,GAIP,OAFAzwB,KAAK+pC,OAAO5O,KAAMn7B,KAAKkqC,GAAIzZ,EAAG8Y,KAEvBvpC,O,iCAIR,SAAqBmmC,EAAO9nC,QAEXkE,IAAXlE,IAEJinB,QAAQM,KAAM,4DACdvnB,EAAS,IAAIgkC,IAIdhkC,EAAOy1B,WAAYqS,EAAOnmC,KAAK+pC,QAE/B,IAAMI,EAAoB9rC,EAAOshC,IAAK3/B,KAAKgqC,WAE3C,OAAKG,EAAoB,EAEjB9rC,EAAO88B,KAAMn7B,KAAK+pC,QAInB1rC,EAAO88B,KAAMn7B,KAAKgqC,WAAYjW,eAAgBoW,GAAoBpE,IAAK/lC,KAAK+pC,U,6BAIpF,SAAiB5D,GAEhB,OAAOr1B,KAAKujB,KAAMr0B,KAAKoqC,kBAAmBjE,M,+BAI3C,SAAmBA,GAElB,IAAMgE,EAAoBZ,GAAUzV,WAAYqS,EAAOnmC,KAAK+pC,QAASpK,IAAK3/B,KAAKgqC,WAI/E,OAAKG,EAAoB,EAEjBnqC,KAAK+pC,OAAOvV,kBAAmB2R,IAIvCoD,GAAUpO,KAAMn7B,KAAKgqC,WAAYjW,eAAgBoW,GAAoBpE,IAAK/lC,KAAK+pC,QAExER,GAAU/U,kBAAmB2R,M,iCAIrC,SAAqBgC,EAAItT,EAAIwV,EAAoBC,GAShDd,GAAWrO,KAAMgN,GAAKpC,IAAKlR,GAAKd,eAAgB,IAChD0V,GAAQtO,KAAMtG,GAAKwP,IAAK8D,GAAKxT,YAC7B+U,GAAMvO,KAAMn7B,KAAK+pC,QAAS1F,IAAKmF,IAE/B,IAMIe,EAAInL,EAAIoL,EAASC,EANfC,EAAkC,GAAtBvC,EAAGY,WAAYlU,GAC3B8V,GAAQ3qC,KAAKgqC,UAAUrK,IAAK8J,IAC5BmB,EAAKlB,GAAM/J,IAAK3/B,KAAKgqC,WACrBzY,GAAOmY,GAAM/J,IAAK8J,IAClBnrB,EAAIorB,GAAMzF,WACVpM,EAAM/mB,KAAKihB,IAAK,EAAI4Y,EAAMA,GAGhC,GAAK9S,EAAM,EAQV,GAHAuH,EAAKuL,EAAMC,EAAKrZ,EAChBkZ,EAASC,EAAY7S,GAFrB0S,EAAKI,EAAMpZ,EAAKqZ,IAIL,EAEV,GAAKxL,IAAQqL,EAEZ,GAAKrL,GAAMqL,EAAS,CAKnB,IAAMI,EAAS,EAAIhT,EAGnB2S,GAFAD,GAAMM,IAEWN,EAAKI,GADtBvL,GAAMyL,GAC2B,EAAID,GAAOxL,GAAOuL,EAAMJ,EAAKnL,EAAK,EAAI7N,GAAOjT,OAM9E8gB,EAAKsL,EAELF,IADAD,EAAKz5B,KAAKkE,IAAK,IAAO21B,EAAMvL,EAAKwL,KAChBL,EAAKnL,GAAOA,EAAK,EAAI7N,GAAOjT,OAQ9C8gB,GAAOsL,EAEPF,IADAD,EAAKz5B,KAAKkE,IAAK,IAAO21B,EAAMvL,EAAKwL,KAChBL,EAAKnL,GAAOA,EAAK,EAAI7N,GAAOjT,OAMzC8gB,IAAQqL,EAMZD,IAFAD,EAAKz5B,KAAKkE,IAAK,KAAS21B,EAAMD,EAAYE,KAEzBL,GADjBnL,EAAOmL,EAAK,GAAQG,EAAY55B,KAAKiE,IAAKjE,KAAKkE,KAAO01B,GAAanZ,GAAMmZ,KAC5CtL,EAAK,EAAI7N,GAAOjT,EAElC8gB,GAAMqL,GAIjBF,EAAK,EAELC,GADApL,EAAKtuB,KAAKiE,IAAKjE,KAAKkE,KAAO01B,GAAanZ,GAAMmZ,KAC7BtL,EAAK,EAAI7N,GAAOjT,GAQjCksB,IAFAD,EAAKz5B,KAAKkE,IAAK,IAAO21B,EAAMD,EAAYE,KAEvBL,GADjBnL,EAAOmL,EAAK,EAAMG,EAAY55B,KAAKiE,IAAKjE,KAAKkE,KAAO01B,GAAanZ,GAAMmZ,KAC1CtL,EAAK,EAAI7N,GAAOjT,OAU/C8gB,EAAOuL,EAAM,GAAQD,EAAYA,EAEjCF,IADAD,EAAKz5B,KAAKkE,IAAK,IAAO21B,EAAMvL,EAAKwL,KAChBL,EAAKnL,GAAOA,EAAK,EAAI7N,GAAOjT,EAgB9C,OAZK+rB,GAEJA,EAAmBlP,KAAMn7B,KAAKgqC,WAAYjW,eAAgBwW,GAAKxE,IAAK/lC,KAAK+pC,QAIrEO,GAEJA,EAAuBnP,KAAMsO,IAAU1V,eAAgBqL,GAAK2G,IAAKyD,IAI3DgB,I,6BAIR,SAAiB5D,EAAQvoC,GAExBkrC,GAAUzV,WAAY8S,EAAO3R,OAAQj1B,KAAK+pC,QAC1C,IAAMe,EAAMvB,GAAU5J,IAAK3/B,KAAKgqC,WAC1B5Z,EAAKmZ,GAAU5J,IAAK4J,IAAcuB,EAAMA,EACxCC,EAAUnE,EAAOnC,OAASmC,EAAOnC,OAEvC,GAAKrU,EAAK2a,EAAU,OAAO,KAE3B,IAAMC,EAAMl6B,KAAKujB,KAAM0W,EAAU3a,GAG3B6a,EAAKH,EAAME,EAGXE,EAAKJ,EAAME,EAGjB,OAAKC,EAAK,GAAKC,EAAK,EAAW,KAK1BD,EAAK,EAAWjrC,KAAKkqC,GAAIgB,EAAI7sC,GAG3B2B,KAAKkqC,GAAIe,EAAI5sC,K,8BAIrB,SAAkBuoC,GAEjB,OAAO5mC,KAAKoqC,kBAAmBxD,EAAO3R,SAAc2R,EAAOnC,OAASmC,EAAOnC,S,6BAI5E,SAAiBqC,GAEhB,IAAM9C,EAAc8C,EAAMxC,OAAO3E,IAAK3/B,KAAKgqC,WAE3C,GAAqB,IAAhBhG,EAGJ,OAA8C,IAAzC8C,EAAMoC,gBAAiBlpC,KAAK+pC,QAEzB,EAMD,KAIR,IAAMtZ,IAAQzwB,KAAK+pC,OAAOpK,IAAKmH,EAAMxC,QAAWwC,EAAMC,UAAa/C,EAInE,OAAOvT,GAAK,EAAIA,EAAI,O,4BAIrB,SAAgBqW,EAAOzoC,GAEtB,IAAMoyB,EAAIzwB,KAAKmrC,gBAAiBrE,GAEhC,OAAW,OAANrW,EAEG,KAIDzwB,KAAKkqC,GAAIzZ,EAAGpyB,K,6BAIpB,SAAiByoC,GAIhB,IAAMsE,EAActE,EAAMoC,gBAAiBlpC,KAAK+pC,QAEhD,OAAqB,IAAhBqB,GAMetE,EAAMxC,OAAO3E,IAAK3/B,KAAKgqC,WAExBoB,EAAc,I,0BAYlC,SAAcnF,EAAK5nC,GAElB,IAAIgtC,EAAMC,EAAMC,EAAOC,EAAOC,EAAOC,EAE/BC,EAAU,EAAI3rC,KAAKgqC,UAAUluB,EAClC8vB,EAAU,EAAI5rC,KAAKgqC,UAAUjuB,EAC7B8vB,EAAU,EAAI7rC,KAAKgqC,UAAU1N,EAExByN,EAAS/pC,KAAK+pC,OA0BpB,OAxBK4B,GAAW,GAEfN,GAASpF,EAAIlxB,IAAI+G,EAAIiuB,EAAOjuB,GAAM6vB,EAClCL,GAASrF,EAAIjxB,IAAI8G,EAAIiuB,EAAOjuB,GAAM6vB,IAIlCN,GAASpF,EAAIjxB,IAAI8G,EAAIiuB,EAAOjuB,GAAM6vB,EAClCL,GAASrF,EAAIlxB,IAAI+G,EAAIiuB,EAAOjuB,GAAM6vB,GAI9BC,GAAW,GAEfL,GAAUtF,EAAIlxB,IAAIgH,EAAIguB,EAAOhuB,GAAM6vB,EACnCJ,GAAUvF,EAAIjxB,IAAI+G,EAAIguB,EAAOhuB,GAAM6vB,IAInCL,GAAUtF,EAAIjxB,IAAI+G,EAAIguB,EAAOhuB,GAAM6vB,EACnCJ,GAAUvF,EAAIlxB,IAAIgH,EAAIguB,EAAOhuB,GAAM6vB,GAI7BP,EAAOG,GAAaD,EAAQD,EAAgB,OAK9CC,EAAQF,GAAQA,IAASA,KAAOA,EAAOE,IAEvCC,EAAQF,GAAQA,IAASA,KAAOA,EAAOE,GAEvCK,GAAW,GAEfJ,GAAUxF,EAAIlxB,IAAIunB,EAAIyN,EAAOzN,GAAMuP,EACnCH,GAAUzF,EAAIjxB,IAAIsnB,EAAIyN,EAAOzN,GAAMuP,IAInCJ,GAAUxF,EAAIjxB,IAAIsnB,EAAIyN,EAAOzN,GAAMuP,EACnCH,GAAUzF,EAAIlxB,IAAIunB,EAAIyN,EAAOzN,GAAMuP,GAI7BR,EAAOK,GAAaD,EAAQH,EAAgB,OAE9CG,EAAQJ,GAAQA,IAASA,KAAOA,EAAOI,IAEvCC,EAAQJ,GAAQA,IAASA,KAAOA,EAAOI,GAIvCJ,EAAO,EAAW,KAEhBtrC,KAAKkqC,GAAImB,GAAQ,EAAIA,EAAOC,EAAMjtC,O,2BAI1C,SAAe4nC,GAEd,OAA+C,OAAxCjmC,KAAK8rC,aAAc7F,EAAKsD,M,+BAIhC,SAAmB5+B,EAAGC,EAAG0T,EAAGytB,EAAiB1tC,GAM5CsrC,GAAO7V,WAAYlpB,EAAGD,GACtBi/B,GAAO9V,WAAYxV,EAAG3T,GACtBk/B,GAAUpG,aAAckG,GAAQC,IAOhC,IACIoC,EADAC,EAAMjsC,KAAKgqC,UAAUrK,IAAKkK,IAG9B,GAAKoC,EAAM,EAAI,CAEd,GAAKF,EAAkB,OAAO,KAC9BC,EAAO,MAED,MAAKC,EAAM,GAOjB,OAAO,KALPD,GAAS,EACTC,GAAQA,EAQTvC,GAAM5V,WAAY9zB,KAAK+pC,OAAQp/B,GAC/B,IAAMuhC,EAASF,EAAOhsC,KAAKgqC,UAAUrK,IAAKiK,GAAOnG,aAAciG,GAAOE,KAGtE,GAAKsC,EAAS,EAEb,OAAO,KAIR,IAAMC,EAASH,EAAOhsC,KAAKgqC,UAAUrK,IAAKgK,GAAOyC,MAAO1C,KAGxD,GAAKyC,EAAS,EAEb,OAAO,KAKR,GAAKD,EAASC,EAASF,EAEtB,OAAO,KAKR,IAAMI,GAAQL,EAAOtC,GAAM/J,IAAKkK,IAGhC,OAAKwC,EAAM,EAEH,KAKDrsC,KAAKkqC,GAAImC,EAAMJ,EAAK5tC,K,0BAI5B,SAAc25B,GAKb,OAHAh4B,KAAK+pC,OAAO3G,aAAcpL,GAC1Bh4B,KAAKgqC,UAAUsC,mBAAoBtU,GAE5Bh4B,O,oBAIR,SAAQiqC,GAEP,OAAOA,EAAIF,OAAO/B,OAAQhoC,KAAK+pC,SAAYE,EAAID,UAAUhC,OAAQhoC,KAAKgqC,a,mBAIvE,WAEC,OAAO,IAAIhqC,KAAKR,aAAc27B,KAAMn7B,U,KAMhCusC,G,WAEL,aAAc,oBAEbvsC,KAAKg0B,SAAW,CAEf,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GAIL7zB,UAAU3B,OAAS,GAEvB8mB,QAAQxjB,MAAO,iF,uCAMjB,SAAKuzB,EAAKC,EAAKC,EAAKiX,EAAKhX,EAAKC,EAAKC,EAAK+W,EAAK9W,EAAKC,EAAKC,EAAK6W,EAAKC,EAAKC,EAAKC,EAAKC,GAE/E,IAAMhX,EAAK91B,KAAKg0B,SAOhB,OALA8B,EAAI,GAAMT,EAAKS,EAAI,GAAMR,EAAKQ,EAAI,GAAMP,EAAKO,EAAI,IAAO0W,EACxD1W,EAAI,GAAMN,EAAKM,EAAI,GAAML,EAAKK,EAAI,GAAMJ,EAAKI,EAAI,IAAO2W,EACxD3W,EAAI,GAAMH,EAAKG,EAAI,GAAMF,EAAKE,EAAI,IAAOD,EAAKC,EAAI,IAAO4W,EACzD5W,EAAI,GAAM6W,EAAK7W,EAAI,GAAM8W,EAAK9W,EAAI,IAAO+W,EAAK/W,EAAI,IAAOgX,EAElD9sC,O,sBAIR,WAWC,OATAA,KAAK4a,IAEJ,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GAIH5a,O,mBAIR,WAEC,OAAO,IAAIusC,GAAUzT,UAAW94B,KAAKg0B,Y,kBAItC,SAAMzW,GAEL,IAAMuY,EAAK91B,KAAKg0B,SACV+B,EAAKxY,EAAEyW,SAOb,OALA8B,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GACvED,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GACvED,EAAI,GAAMC,EAAI,GAAKD,EAAI,GAAMC,EAAI,GAAKD,EAAI,IAAOC,EAAI,IAAMD,EAAI,IAAOC,EAAI,IAC1ED,EAAI,IAAOC,EAAI,IAAMD,EAAI,IAAOC,EAAI,IAAMD,EAAI,IAAOC,EAAI,IAAMD,EAAI,IAAOC,EAAI,IAEvE/1B,O,0BAIR,SAAcud,GAEb,IAAMuY,EAAK91B,KAAKg0B,SAAU+B,EAAKxY,EAAEyW,SAMjC,OAJA8B,EAAI,IAAOC,EAAI,IACfD,EAAI,IAAOC,EAAI,IACfD,EAAI,IAAOC,EAAI,IAER/1B,O,4BAIR,SAAgBud,GAEf,IAAMwY,EAAKxY,EAAEyW,SAWb,OATAh0B,KAAK4a,IAEJmb,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAK,EAC3BA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAK,EAC3BA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAK,EAC3B,EAAG,EAAG,EAAG,GAIH/1B,O,0BAIR,SAAcg2B,EAAOC,EAAOC,GAM3B,OAJAF,EAAM6O,oBAAqB7kC,KAAM,GACjCi2B,EAAM4O,oBAAqB7kC,KAAM,GACjCk2B,EAAM2O,oBAAqB7kC,KAAM,GAE1BA,O,uBAIR,SAAWg2B,EAAOC,EAAOC,GASxB,OAPAl2B,KAAK4a,IACJob,EAAMla,EAAGma,EAAMna,EAAGoa,EAAMpa,EAAG,EAC3Bka,EAAMja,EAAGka,EAAMla,EAAGma,EAAMna,EAAG,EAC3Bia,EAAMsG,EAAGrG,EAAMqG,EAAGpG,EAAMoG,EAAG,EAC3B,EAAG,EAAG,EAAG,GAGHt8B,O,6BAIR,SAAiBud,GAIhB,IAAMuY,EAAK91B,KAAKg0B,SACV+B,EAAKxY,EAAEyW,SAEP+Y,EAAS,EAAIC,GAAMnI,oBAAqBtnB,EAAG,GAAI/e,SAC/CyuC,EAAS,EAAID,GAAMnI,oBAAqBtnB,EAAG,GAAI/e,SAC/C0uC,EAAS,EAAIF,GAAMnI,oBAAqBtnB,EAAG,GAAI/e,SAsBrD,OApBAs3B,EAAI,GAAMC,EAAI,GAAMgX,EACpBjX,EAAI,GAAMC,EAAI,GAAMgX,EACpBjX,EAAI,GAAMC,EAAI,GAAMgX,EACpBjX,EAAI,GAAM,EAEVA,EAAI,GAAMC,EAAI,GAAMkX,EACpBnX,EAAI,GAAMC,EAAI,GAAMkX,EACpBnX,EAAI,GAAMC,EAAI,GAAMkX,EACpBnX,EAAI,GAAM,EAEVA,EAAI,GAAMC,EAAI,GAAMmX,EACpBpX,EAAI,GAAMC,EAAI,GAAMmX,EACpBpX,EAAI,IAAOC,EAAI,IAAOmX,EACtBpX,EAAI,IAAO,EAEXA,EAAI,IAAO,EACXA,EAAI,IAAO,EACXA,EAAI,IAAO,EACXA,EAAI,IAAO,EAEJ91B,O,mCAIR,SAAuB++B,GAEbA,GAASA,EAAMC,SAEvB1Z,QAAQxjB,MAAO,yGAIhB,IAAMg0B,EAAK91B,KAAKg0B,SAEVlY,EAAIijB,EAAMjjB,EAAGC,EAAIgjB,EAAMhjB,EAAGugB,EAAIyC,EAAMzC,EACpC3xB,EAAImG,KAAKkiB,IAAKlX,GAAKlR,EAAIkG,KAAKmiB,IAAKnX,GACjCwC,EAAIxN,KAAKkiB,IAAKjX,GAAK0b,EAAI3mB,KAAKmiB,IAAKlX,GACjC3Y,EAAI0N,KAAKkiB,IAAKsJ,GAAKh5B,EAAIwN,KAAKmiB,IAAKqJ,GAEvC,GAAqB,QAAhByC,EAAMhM,MAAkB,CAE5B,IAAMsD,EAAK1rB,EAAIvH,EAAG+pC,EAAKxiC,EAAIrH,EAAGgzB,EAAK1rB,EAAIxH,EAAGgqC,EAAKxiC,EAAItH,EAEnDwyB,EAAI,GAAMxX,EAAIlb,EACd0yB,EAAI,IAAQxX,EAAIhb,EAChBwyB,EAAI,GAAM2B,EAEV3B,EAAI,GAAMqX,EAAK7W,EAAKmB,EACpB3B,EAAI,GAAMO,EAAK+W,EAAK3V,EACpB3B,EAAI,IAAQlrB,EAAI0T,EAEhBwX,EAAI,GAAMsX,EAAK/W,EAAKoB,EACpB3B,EAAI,GAAMQ,EAAK6W,EAAK1V,EACpB3B,EAAI,IAAOnrB,EAAI2T,OAET,GAAqB,QAAhBygB,EAAMhM,MAAkB,CAEnC,IAAMsa,EAAK/uB,EAAIlb,EAAGkqC,EAAKhvB,EAAIhb,EAAGiqC,EAAK9V,EAAIr0B,EAAGoqC,EAAK/V,EAAIn0B,EAEnDwyB,EAAI,GAAMuX,EAAKG,EAAK5iC,EACpBkrB,EAAI,GAAMyX,EAAK3iC,EAAI0iC,EACnBxX,EAAI,GAAMnrB,EAAI8sB,EAEd3B,EAAI,GAAMnrB,EAAIrH,EACdwyB,EAAI,GAAMnrB,EAAIvH,EACd0yB,EAAI,IAAQlrB,EAEZkrB,EAAI,GAAMwX,EAAK1iC,EAAI2iC,EACnBzX,EAAI,GAAM0X,EAAKH,EAAKziC,EACpBkrB,EAAI,IAAOnrB,EAAI2T,OAET,GAAqB,QAAhBygB,EAAMhM,MAAkB,CAEnC,IAAMsa,EAAK/uB,EAAIlb,EAAGkqC,EAAKhvB,EAAIhb,EAAGiqC,EAAK9V,EAAIr0B,EAAGoqC,EAAK/V,EAAIn0B,EAEnDwyB,EAAI,GAAMuX,EAAKG,EAAK5iC,EACpBkrB,EAAI,IAAQnrB,EAAIrH,EAChBwyB,EAAI,GAAMyX,EAAKD,EAAK1iC,EAEpBkrB,EAAI,GAAMwX,EAAKC,EAAK3iC,EACpBkrB,EAAI,GAAMnrB,EAAIvH,EACd0yB,EAAI,GAAM0X,EAAKH,EAAKziC,EAEpBkrB,EAAI,IAAQnrB,EAAI8sB,EAChB3B,EAAI,GAAMlrB,EACVkrB,EAAI,IAAOnrB,EAAI2T,OAET,GAAqB,QAAhBygB,EAAMhM,MAAkB,CAEnC,IAAMsD,EAAK1rB,EAAIvH,EAAG+pC,EAAKxiC,EAAIrH,EAAGgzB,EAAK1rB,EAAIxH,EAAGgqC,EAAKxiC,EAAItH,EAEnDwyB,EAAI,GAAMxX,EAAIlb,EACd0yB,EAAI,GAAMQ,EAAKmB,EAAI0V,EACnBrX,EAAI,GAAMO,EAAKoB,EAAI2V,EAEnBtX,EAAI,GAAMxX,EAAIhb,EACdwyB,EAAI,GAAMsX,EAAK3V,EAAIpB,EACnBP,EAAI,GAAMqX,EAAK1V,EAAInB,EAEnBR,EAAI,IAAQ2B,EACZ3B,EAAI,GAAMlrB,EAAI0T,EACdwX,EAAI,IAAOnrB,EAAI2T,OAET,GAAqB,QAAhBygB,EAAMhM,MAAkB,CAEnC,IAAM0a,EAAK9iC,EAAI2T,EAAGovB,EAAK/iC,EAAI8sB,EAAGkW,EAAK/iC,EAAI0T,EAAGsvB,EAAKhjC,EAAI6sB,EAEnD3B,EAAI,GAAMxX,EAAIlb,EACd0yB,EAAI,GAAM8X,EAAKH,EAAKnqC,EACpBwyB,EAAI,GAAM6X,EAAKrqC,EAAIoqC,EAEnB5X,EAAI,GAAMxyB,EACVwyB,EAAI,GAAMnrB,EAAIvH,EACd0yB,EAAI,IAAQlrB,EAAIxH,EAEhB0yB,EAAI,IAAQ2B,EAAIr0B,EAChB0yB,EAAI,GAAM4X,EAAKpqC,EAAIqqC,EACnB7X,EAAI,IAAO2X,EAAKG,EAAKtqC,OAEf,GAAqB,QAAhBy7B,EAAMhM,MAAkB,CAEnC,IAAM0a,EAAK9iC,EAAI2T,EAAGovB,EAAK/iC,EAAI8sB,EAAGkW,EAAK/iC,EAAI0T,EAAGsvB,EAAKhjC,EAAI6sB,EAEnD3B,EAAI,GAAMxX,EAAIlb,EACd0yB,EAAI,IAAQxyB,EACZwyB,EAAI,GAAM2B,EAAIr0B,EAEd0yB,EAAI,GAAM2X,EAAKnqC,EAAIsqC,EACnB9X,EAAI,GAAMnrB,EAAIvH,EACd0yB,EAAI,GAAM4X,EAAKpqC,EAAIqqC,EAEnB7X,EAAI,GAAM6X,EAAKrqC,EAAIoqC,EACnB5X,EAAI,GAAMlrB,EAAIxH,EACd0yB,EAAI,IAAO8X,EAAKtqC,EAAImqC,EAerB,OAVA3X,EAAI,GAAM,EACVA,EAAI,GAAM,EACVA,EAAI,IAAO,EAGXA,EAAI,IAAO,EACXA,EAAI,IAAO,EACXA,EAAI,IAAO,EACXA,EAAI,IAAO,EAEJ91B,O,wCAIR,SAA4B8yB,GAE3B,OAAO9yB,KAAK6tC,QAASC,GAAOhb,EAAGib,M,oBAIhC,SAAQC,EAAK3vC,EAAQsO,GAEpB,IAAMmpB,EAAK91B,KAAKg0B,SAyChB,OAvCA2K,GAAG7K,WAAYka,EAAK3vC,GAEG,IAAlBsgC,GAAGsF,aAIPtF,GAAGrC,EAAI,GAIRqC,GAAGhK,YACH8J,GAAGgF,aAAc92B,EAAIgyB,IAEE,IAAlBF,GAAGwF,aAImB,IAArBnzB,KAAKihB,IAAKplB,EAAG2vB,GAEjBqC,GAAG7iB,GAAK,KAIR6iB,GAAGrC,GAAK,KAITqC,GAAGhK,YACH8J,GAAGgF,aAAc92B,EAAIgyB,KAItBF,GAAG9J,YACH+J,GAAG+E,aAAc9E,GAAIF,IAErB3I,EAAI,GAAM2I,GAAG3iB,EAAGga,EAAI,GAAM4I,GAAG5iB,EAAGga,EAAI,GAAM6I,GAAG7iB,EAC7Cga,EAAI,GAAM2I,GAAG1iB,EAAG+Z,EAAI,GAAM4I,GAAG3iB,EAAG+Z,EAAI,GAAM6I,GAAG5iB,EAC7C+Z,EAAI,GAAM2I,GAAGnC,EAAGxG,EAAI,GAAM4I,GAAGpC,EAAGxG,EAAI,IAAO6I,GAAGrC,EAEvCt8B,O,sBAIR,SAAUud,EAAGpa,GAEZ,YAAWZ,IAANY,GAEJmiB,QAAQM,KAAM,oGACP5lB,KAAKo2B,iBAAkB7Y,EAAGpa,IAI3BnD,KAAKo2B,iBAAkBp2B,KAAMud,K,yBAIrC,SAAaA,GAEZ,OAAOvd,KAAKo2B,iBAAkB7Y,EAAGvd,Q,8BAIlC,SAAkB2K,EAAGC,GAEpB,IAAMyrB,EAAK1rB,EAAEqpB,SACPsC,EAAK1rB,EAAEopB,SACP8B,EAAK91B,KAAKg0B,SAEVuC,EAAMF,EAAI,GAAKG,EAAMH,EAAI,GAAKI,EAAMJ,EAAI,GAAK4X,EAAM5X,EAAI,IACvDK,EAAML,EAAI,GAAKM,EAAMN,EAAI,GAAKO,EAAMP,EAAI,GAAK6X,EAAM7X,EAAI,IACvDQ,EAAMR,EAAI,GAAKS,EAAMT,EAAI,GAAKU,EAAMV,EAAI,IAAM8X,EAAM9X,EAAI,IACxD+X,EAAM/X,EAAI,GAAKgY,EAAMhY,EAAI,GAAKiY,EAAMjY,EAAI,IAAMkY,EAAMlY,EAAI,IAExDW,EAAMV,EAAI,GAAKW,EAAMX,EAAI,GAAKY,EAAMZ,EAAI,GAAKkY,EAAMlY,EAAI,IACvDa,EAAMb,EAAI,GAAKc,EAAMd,EAAI,GAAKe,EAAMf,EAAI,GAAKmY,EAAMnY,EAAI,IACvDgB,EAAMhB,EAAI,GAAKiB,EAAMjB,EAAI,GAAKkB,EAAMlB,EAAI,IAAMoY,EAAMpY,EAAI,IACxDqY,EAAMrY,EAAI,GAAKsY,EAAMtY,EAAI,GAAKuY,EAAMvY,EAAI,IAAMwY,EAAMxY,EAAI,IAsB9D,OApBAR,EAAI,GAAMS,EAAMS,EAAMR,EAAMW,EAAMV,EAAMa,EAAM2W,EAAMU,EACpD7Y,EAAI,GAAMS,EAAMU,EAAMT,EAAMY,EAAMX,EAAMc,EAAM0W,EAAMW,EACpD9Y,EAAI,GAAMS,EAAMW,EAAMV,EAAMa,EAAMZ,EAAMe,EAAMyW,EAAMY,EACpD/Y,EAAI,IAAOS,EAAMiY,EAAMhY,EAAMiY,EAAMhY,EAAMiY,EAAMT,EAAMa,EAErDhZ,EAAI,GAAMY,EAAMM,EAAML,EAAMQ,EAAMP,EAAMU,EAAM4W,EAAMS,EACpD7Y,EAAI,GAAMY,EAAMO,EAAMN,EAAMS,EAAMR,EAAMW,EAAM2W,EAAMU,EACpD9Y,EAAI,GAAMY,EAAMQ,EAAMP,EAAMU,EAAMT,EAAMY,EAAM0W,EAAMW,EACpD/Y,EAAI,IAAOY,EAAM8X,EAAM7X,EAAM8X,EAAM7X,EAAM8X,EAAMR,EAAMY,EAErDhZ,EAAI,GAAMe,EAAMG,EAAMF,EAAMK,EAAMJ,EAAMO,EAAM6W,EAAMQ,EACpD7Y,EAAI,GAAMe,EAAMI,EAAMH,EAAMM,EAAML,EAAMQ,EAAM4W,EAAMS,EACpD9Y,EAAI,IAAOe,EAAMK,EAAMJ,EAAMO,EAAMN,EAAMS,EAAM2W,EAAMU,EACrD/Y,EAAI,IAAOe,EAAM2X,EAAM1X,EAAM2X,EAAM1X,EAAM2X,EAAMP,EAAMW,EAErDhZ,EAAI,GAAMsY,EAAMpX,EAAMqX,EAAMlX,EAAMmX,EAAMhX,EAAMiX,EAAMI,EACpD7Y,EAAI,GAAMsY,EAAMnX,EAAMoX,EAAMjX,EAAMkX,EAAM/W,EAAMgX,EAAMK,EACpD9Y,EAAI,IAAOsY,EAAMlX,EAAMmX,EAAMhX,EAAMiX,EAAM9W,EAAM+W,EAAMM,EACrD/Y,EAAI,IAAOsY,EAAMI,EAAMH,EAAMI,EAAMH,EAAMI,EAAMH,EAAMO,EAE9C9uC,O,4BAIR,SAAgBkD,GAEf,IAAM4yB,EAAK91B,KAAKg0B,SAOhB,OALA8B,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,KAAQ5yB,EACtD4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,KAAQ5yB,EACtD4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,KAAQ5yB,EAAG4yB,EAAI,KAAQ5yB,EACvD4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,IAAO5yB,EAAG4yB,EAAI,KAAQ5yB,EAAG4yB,EAAI,KAAQ5yB,EAEhDlD,O,yBAIR,WAEC,IAAM81B,EAAK91B,KAAKg0B,SAEVqB,EAAMS,EAAI,GAAKR,EAAMQ,EAAI,GAAKP,EAAMO,EAAI,GAAK0W,EAAM1W,EAAI,IACvDN,EAAMM,EAAI,GAAKL,EAAMK,EAAI,GAAKJ,EAAMI,EAAI,GAAK2W,EAAM3W,EAAI,IACvDH,EAAMG,EAAI,GAAKF,EAAME,EAAI,GAAKD,EAAMC,EAAI,IAAM4W,EAAM5W,EAAI,IAM9D,OALYA,EAAI,KAOZ0W,EAAM9W,EAAME,EACXL,EAAMkX,EAAM7W,EACZ4W,EAAM/W,EAAMI,EACZP,EAAMmX,EAAM5W,EACZN,EAAME,EAAMiX,EACZpX,EAAMI,EAAMgX,GAZU5W,EAAI,KAe3BT,EAAMK,EAAMgX,EACXrX,EAAMoX,EAAM5W,EACZ2W,EAAMhX,EAAMK,EACZN,EAAMC,EAAMkX,EACZnX,EAAMkX,EAAM9W,EACZ6W,EAAM9W,EAAMC,GApByBG,EAAI,MAuB1CT,EAAMoX,EAAM7W,EACXP,EAAMI,EAAMiX,EACZF,EAAMhX,EAAMI,EACZN,EAAME,EAAMkX,EACZF,EAAM/W,EAAME,EACZL,EAAMmX,EAAM9W,GA5ByCG,EAAI,MA+B1DP,EAAME,EAAME,EACXN,EAAMK,EAAME,EACZP,EAAMI,EAAMI,EACZN,EAAMC,EAAMI,EACZN,EAAME,EAAMK,EACZP,EAAMI,EAAMC,K,uBAOlB,WAEC,IACIoC,EADEjC,EAAK91B,KAAKg0B,SAWhB,OARA+D,EAAMjC,EAAI,GAAKA,EAAI,GAAMA,EAAI,GAAKA,EAAI,GAAMiC,EAC5CA,EAAMjC,EAAI,GAAKA,EAAI,GAAMA,EAAI,GAAKA,EAAI,GAAMiC,EAC5CA,EAAMjC,EAAI,GAAKA,EAAI,GAAMA,EAAI,GAAKA,EAAI,GAAMiC,EAE5CA,EAAMjC,EAAI,GAAKA,EAAI,GAAMA,EAAI,IAAMA,EAAI,IAAOiC,EAC9CA,EAAMjC,EAAI,GAAKA,EAAI,GAAMA,EAAI,IAAMA,EAAI,IAAOiC,EAC9CA,EAAMjC,EAAI,IAAMA,EAAI,IAAOA,EAAI,IAAMA,EAAI,IAAOiC,EAEzC/3B,O,yBAIR,SAAa8b,EAAGC,EAAGugB,GAElB,IAAMxG,EAAK91B,KAAKg0B,SAgBhB,OAdKlY,EAAEipB,WAENjP,EAAI,IAAOha,EAAEA,EACbga,EAAI,IAAOha,EAAEC,EACb+Z,EAAI,IAAOha,EAAEwgB,IAIbxG,EAAI,IAAOha,EACXga,EAAI,IAAO/Z,EACX+Z,EAAI,IAAOwG,GAILt8B,O,oBAIR,WAGC,IAAM81B,EAAK91B,KAAKg0B,SAEfqB,EAAMS,EAAI,GAAKN,EAAMM,EAAI,GAAKH,EAAMG,EAAI,GAAK6W,EAAM7W,EAAI,GACvDR,EAAMQ,EAAI,GAAKL,EAAMK,EAAI,GAAKF,EAAME,EAAI,GAAK8W,EAAM9W,EAAI,GACvDP,EAAMO,EAAI,GAAKJ,EAAMI,EAAI,GAAKD,EAAMC,EAAI,IAAM+W,EAAM/W,EAAI,IACxD0W,EAAM1W,EAAI,IAAM2W,EAAM3W,EAAI,IAAM4W,EAAM5W,EAAI,IAAMgX,EAAMhX,EAAI,IAE1D4B,EAAMhC,EAAMgX,EAAME,EAAMH,EAAM5W,EAAM+W,EAAMH,EAAM7W,EAAMiX,EAAMpX,EAAMiX,EAAMG,EAAMnX,EAAME,EAAMkX,EAAMrX,EAAMI,EAAMiX,EAC5GnV,EAAM6U,EAAM3W,EAAM+W,EAAMrX,EAAMmX,EAAME,EAAMJ,EAAM5W,EAAMiX,EAAMvX,EAAMoX,EAAMG,EAAMtX,EAAMK,EAAMkX,EAAMxX,EAAMO,EAAMiX,EAC5GlV,EAAMrC,EAAMkX,EAAMG,EAAMJ,EAAM9W,EAAMkX,EAAMJ,EAAM/W,EAAMoX,EAAMvX,EAAMmX,EAAMI,EAAMtX,EAAME,EAAMqX,EAAMxX,EAAMI,EAAMoX,EAC5GiC,EAAMvC,EAAM9W,EAAME,EAAML,EAAMkX,EAAM7W,EAAM4W,EAAM/W,EAAMI,EAAMP,EAAMmX,EAAM5W,EAAMN,EAAME,EAAMiX,EAAMpX,EAAMI,EAAMgX,EAEvG7U,EAAMxC,EAAMqC,EAAMlC,EAAMmC,EAAMhC,EAAMiC,EAAM+U,EAAMoC,EAEtD,GAAa,IAARlX,EAAY,OAAO73B,KAAK4a,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAE/E,IAAMkd,EAAS,EAAID,EAsBnB,OApBA/B,EAAI,GAAM4B,EAAMI,EAChBhC,EAAI,IAAQ2W,EAAM5W,EAAM8W,EAAMjX,EAAMgX,EAAMC,EAAMF,EAAM9W,EAAMkX,EAAMrX,EAAMkX,EAAMG,EAAMnX,EAAMC,EAAMmX,EAAMtX,EAAMK,EAAMiX,GAAQhV,EAC1HhC,EAAI,IAAQL,EAAMiX,EAAMC,EAAMF,EAAM7W,EAAM+W,EAAMF,EAAM9W,EAAMiX,EAAMpX,EAAMkX,EAAME,EAAMnX,EAAME,EAAMmX,EAAMtX,EAAMI,EAAMkX,GAAQhV,EAC1HhC,EAAI,IAAQJ,EAAME,EAAM+W,EAAMlX,EAAMI,EAAM8W,EAAMjX,EAAMC,EAAMiX,EAAMpX,EAAMK,EAAM+W,EAAMnX,EAAME,EAAMkX,EAAMrX,EAAMI,EAAMiX,GAAQ/U,EAE1HhC,EAAI,GAAM6B,EAAMG,EAChBhC,EAAI,IAAQP,EAAMmX,EAAMC,EAAMH,EAAM3W,EAAM8W,EAAMH,EAAM7W,EAAMkX,EAAMxX,EAAMqX,EAAMG,EAAMtX,EAAMI,EAAMmX,EAAMzX,EAAMQ,EAAMiX,GAAQhV,EAC1HhC,EAAI,IAAQ0W,EAAM5W,EAAM+W,EAAMrX,EAAMoX,EAAMC,EAAMH,EAAM7W,EAAMiX,EAAMvX,EAAMqX,EAAME,EAAMtX,EAAMK,EAAMmX,EAAMzX,EAAMO,EAAMkX,GAAQhV,EAC1HhC,EAAI,IAAQR,EAAMO,EAAM8W,EAAMpX,EAAMK,EAAM+W,EAAMpX,EAAMI,EAAMiX,EAAMvX,EAAMQ,EAAM+W,EAAMtX,EAAMK,EAAMkX,EAAMxX,EAAMO,EAAMiX,GAAQ/U,EAE1HhC,EAAI,GAAM8B,EAAME,EAChBhC,EAAI,IAAQ0W,EAAM9W,EAAMiX,EAAMpX,EAAMkX,EAAME,EAAMH,EAAMhX,EAAMqX,EAAMxX,EAAMoX,EAAMI,EAAMtX,EAAMC,EAAMsX,EAAMzX,EAAMK,EAAMoX,GAAQhV,EAC1HhC,EAAI,KAASR,EAAMmX,EAAME,EAAMH,EAAM/W,EAAMkX,EAAMH,EAAMhX,EAAMoX,EAAMvX,EAAMoX,EAAMG,EAAMtX,EAAME,EAAMsX,EAAMzX,EAAMI,EAAMqX,GAAQhV,EAC3HhC,EAAI,KAASP,EAAME,EAAMkX,EAAMrX,EAAMI,EAAMiX,EAAMpX,EAAMC,EAAMoX,EAAMvX,EAAMK,EAAMkX,EAAMtX,EAAME,EAAMqX,EAAMxX,EAAMI,EAAMoX,GAAQ/U,EAE3HhC,EAAI,IAAOiZ,EAAMjX,EACjBhC,EAAI,KAASP,EAAMkX,EAAM9W,EAAM6W,EAAM9W,EAAMC,EAAM6W,EAAMhX,EAAMK,EAAMR,EAAMoX,EAAM5W,EAAMN,EAAMC,EAAMkX,EAAMrX,EAAMK,EAAMgX,GAAQ5U,EAC3HhC,EAAI,KAAS0W,EAAM/W,EAAME,EAAML,EAAMmX,EAAM9W,EAAM6W,EAAMhX,EAAMI,EAAMP,EAAMoX,EAAM7W,EAAMN,EAAME,EAAMkX,EAAMrX,EAAMI,EAAMiX,GAAQ5U,EAC3HhC,EAAI,KAASR,EAAMI,EAAMC,EAAMJ,EAAME,EAAME,EAAMJ,EAAMC,EAAMI,EAAMP,EAAMK,EAAME,EAAMN,EAAME,EAAMK,EAAMR,EAAMI,EAAMI,GAAQiC,EAEpH93B,O,mBAIR,SAAOggB,GAEN,IAAM8V,EAAK91B,KAAKg0B,SACVlY,EAAIkE,EAAElE,EAAGC,EAAIiE,EAAEjE,EAAGugB,EAAItc,EAAEsc,EAO9B,OALAxG,EAAI,IAAOha,EAAGga,EAAI,IAAO/Z,EAAG+Z,EAAI,IAAOwG,EACvCxG,EAAI,IAAOha,EAAGga,EAAI,IAAO/Z,EAAG+Z,EAAI,IAAOwG,EACvCxG,EAAI,IAAOha,EAAGga,EAAI,IAAO/Z,EAAG+Z,EAAI,KAAQwG,EACxCxG,EAAI,IAAOha,EAAGga,EAAI,IAAO/Z,EAAG+Z,EAAI,KAAQwG,EAEjCt8B,O,+BAIR,WAEC,IAAM81B,EAAK91B,KAAKg0B,SAEVgb,EAAWlZ,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GACjEmZ,EAAWnZ,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GACjEoZ,EAAWpZ,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,GAAMA,EAAI,IAAOA,EAAI,IAExE,OAAOhlB,KAAKujB,KAAMvjB,KAAKkE,IAAKg6B,EAAUC,EAAUC,M,6BAIjD,SAAiBpzB,EAAGC,EAAGugB,GAWtB,OATAt8B,KAAK4a,IAEJ,EAAG,EAAG,EAAGkB,EACT,EAAG,EAAG,EAAGC,EACT,EAAG,EAAG,EAAGugB,EACT,EAAG,EAAG,EAAG,GAIHt8B,O,2BAIR,SAAe44B,GAEd,IAAMta,EAAIxN,KAAKkiB,IAAK4F,GAAS11B,EAAI4N,KAAKmiB,IAAK2F,GAW3C,OATA54B,KAAK4a,IAEJ,EAAG,EAAG,EAAG,EACT,EAAG0D,GAAKpb,EAAG,EACX,EAAGA,EAAGob,EAAG,EACT,EAAG,EAAG,EAAG,GAIHte,O,2BAIR,SAAe44B,GAEd,IAAMta,EAAIxN,KAAKkiB,IAAK4F,GAAS11B,EAAI4N,KAAKmiB,IAAK2F,GAW3C,OATA54B,KAAK4a,IAEH0D,EAAG,EAAGpb,EAAG,EACT,EAAG,EAAG,EAAG,GACRA,EAAG,EAAGob,EAAG,EACV,EAAG,EAAG,EAAG,GAIJte,O,2BAIR,SAAe44B,GAEd,IAAMta,EAAIxN,KAAKkiB,IAAK4F,GAAS11B,EAAI4N,KAAKmiB,IAAK2F,GAW3C,OATA54B,KAAK4a,IAEJ0D,GAAKpb,EAAG,EAAG,EACXA,EAAGob,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GAIHte,O,8BAIR,SAAkBs/B,EAAMhL,GAIvB,IAAMhW,EAAIxN,KAAKkiB,IAAKsB,GACdpxB,EAAI4N,KAAKmiB,IAAKqB,GACd7D,EAAI,EAAInS,EACRxC,EAAIwjB,EAAKxjB,EAAGC,EAAIujB,EAAKvjB,EAAGugB,EAAIgD,EAAKhD,EACjCjE,EAAK5H,EAAI3U,EAAGwc,EAAK7H,EAAI1U,EAW3B,OATA/b,KAAK4a,IAEJyd,EAAKvc,EAAIwC,EAAG+Z,EAAKtc,EAAI7Y,EAAIo5B,EAAGjE,EAAKiE,EAAIp5B,EAAI6Y,EAAG,EAC5Csc,EAAKtc,EAAI7Y,EAAIo5B,EAAGhE,EAAKvc,EAAIuC,EAAGga,EAAKgE,EAAIp5B,EAAI4Y,EAAG,EAC5Cuc,EAAKiE,EAAIp5B,EAAI6Y,EAAGuc,EAAKgE,EAAIp5B,EAAI4Y,EAAG2U,EAAI6L,EAAIA,EAAIhe,EAAG,EAC/C,EAAG,EAAG,EAAG,GAIHte,O,uBAIR,SAAW8b,EAAGC,EAAGugB,GAWhB,OATAt8B,KAAK4a,IAEJkB,EAAG,EAAG,EAAG,EACT,EAAGC,EAAG,EAAG,EACT,EAAG,EAAGugB,EAAG,EACT,EAAG,EAAG,EAAG,GAIHt8B,O,uBAIR,SAAW8b,EAAGC,EAAGugB,GAWhB,OATAt8B,KAAK4a,IAEJ,EAAGmB,EAAGugB,EAAG,EACTxgB,EAAG,EAAGwgB,EAAG,EACTxgB,EAAGC,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GAIH/b,O,qBAIR,SAASmvC,EAAUrQ,EAAYsQ,GAE9B,IAAMtZ,EAAK91B,KAAKg0B,SAEVlY,EAAIgjB,EAAWL,GAAI1iB,EAAI+iB,EAAWJ,GAAIpC,EAAIwC,EAAWH,GAAI/K,EAAIkL,EAAWF,GACxEyQ,EAAKvzB,EAAIA,EAAGwzB,EAAKvzB,EAAIA,EAAGwzB,EAAKjT,EAAIA,EACjCa,EAAKrhB,EAAIuzB,EAAI/R,EAAKxhB,EAAIwzB,EAAI/R,EAAKzhB,EAAIyzB,EACnCnS,EAAKrhB,EAAIuzB,EAAI9R,EAAKzhB,EAAIwzB,EAAIlS,EAAKf,EAAIiT,EACnCC,EAAK5b,EAAIyb,EAAII,EAAK7b,EAAI0b,EAAII,EAAK9b,EAAI2b,EAEnChX,EAAK6W,EAAMtzB,EAAG0c,EAAK4W,EAAMrzB,EAAG+oB,EAAKsK,EAAM9S,EAsB7C,OApBAxG,EAAI,IAAQ,GAAMsH,EAAKC,IAAS9E,EAChCzC,EAAI,IAAQwH,EAAKoS,GAAOnX,EACxBzC,EAAI,IAAQyH,EAAKkS,GAAOlX,EACxBzC,EAAI,GAAM,EAEVA,EAAI,IAAQwH,EAAKoS,GAAOlX,EACxB1C,EAAI,IAAQ,GAAMqH,EAAKE,IAAS7E,EAChC1C,EAAI,IAAQ0H,EAAKgS,GAAOhX,EACxB1C,EAAI,GAAM,EAEVA,EAAI,IAAQyH,EAAKkS,GAAO3K,EACxBhP,EAAI,IAAQ0H,EAAKgS,GAAO1K,EACxBhP,EAAI,KAAS,GAAMqH,EAAKC,IAAS0H,EACjChP,EAAI,IAAO,EAEXA,EAAI,IAAOqZ,EAASrzB,EACpBga,EAAI,IAAOqZ,EAASpzB,EACpB+Z,EAAI,IAAOqZ,EAAS7S,EACpBxG,EAAI,IAAO,EAEJ91B,O,uBAIR,SAAWmvC,EAAUrQ,EAAYsQ,GAEhC,IAAMtZ,EAAK91B,KAAKg0B,SAEZuE,EAAKyU,GAAMpyB,IAAKkb,EAAI,GAAKA,EAAI,GAAKA,EAAI,IAAMt3B,SAC1Cg6B,EAAKwU,GAAMpyB,IAAKkb,EAAI,GAAKA,EAAI,GAAKA,EAAI,IAAMt3B,SAC5CsmC,EAAKkI,GAAMpyB,IAAKkb,EAAI,GAAKA,EAAI,GAAKA,EAAI,KAAOt3B,SAGvCwB,KAAK2vC,cACN,IAAIpX,GAAOA,GAEtB4W,EAASrzB,EAAIga,EAAI,IACjBqZ,EAASpzB,EAAI+Z,EAAI,IACjBqZ,EAAS7S,EAAIxG,EAAI,IAGjB8Z,GAAMzU,KAAMn7B,MAEZ,IAAM6vC,EAAQ,EAAItX,EACZuX,EAAQ,EAAItX,EACZuX,EAAQ,EAAIjL,EAoBlB,OAlBA8K,GAAM5b,SAAU,IAAO6b,EACvBD,GAAM5b,SAAU,IAAO6b,EACvBD,GAAM5b,SAAU,IAAO6b,EAEvBD,GAAM5b,SAAU,IAAO8b,EACvBF,GAAM5b,SAAU,IAAO8b,EACvBF,GAAM5b,SAAU,IAAO8b,EAEvBF,GAAM5b,SAAU,IAAO+b,EACvBH,GAAM5b,SAAU,IAAO+b,EACvBH,GAAM5b,SAAU,KAAQ+b,EAExBjR,EAAWkR,sBAAuBJ,IAElCR,EAAMtzB,EAAIyc,EACV6W,EAAMrzB,EAAIyc,EACV4W,EAAM9S,EAAIwI,EAEH9kC,O,6BAIR,SAAiBiwC,EAAMC,EAAOC,EAAKC,EAAQC,EAAMC,QAEnC/tC,IAAR+tC,GAEJhrB,QAAQM,KAAM,wGAIf,IAAMkQ,EAAK91B,KAAKg0B,SACVlY,EAAI,EAAIu0B,GAASH,EAAQD,GACzBl0B,EAAI,EAAIs0B,GAASF,EAAMC,GAEvBzlC,GAAMulC,EAAQD,IAAWC,EAAQD,GACjCrlC,GAAMulC,EAAMC,IAAaD,EAAMC,GAC/B9xB,IAAQgyB,EAAMD,IAAWC,EAAMD,GAC/B5Y,GAAM,EAAI6Y,EAAMD,GAASC,EAAMD,GAOrC,OALAva,EAAI,GAAMha,EAAGga,EAAI,GAAM,EAAGA,EAAI,GAAMnrB,EAAGmrB,EAAI,IAAO,EAClDA,EAAI,GAAM,EAAGA,EAAI,GAAM/Z,EAAG+Z,EAAI,GAAMlrB,EAAGkrB,EAAI,IAAO,EAClDA,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAGA,EAAI,IAAOxX,EAAGwX,EAAI,IAAO2B,EACnD3B,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAGA,EAAI,KAAS,EAAGA,EAAI,IAAO,EAE9C91B,O,8BAIR,SAAkBiwC,EAAMC,EAAOC,EAAKC,EAAQC,EAAMC,GAEjD,IAAMxa,EAAK91B,KAAKg0B,SACVJ,EAAI,GAAQsc,EAAQD,GACpBt1B,EAAI,GAAQw1B,EAAMC,GAClB75B,EAAI,GAAQ+5B,EAAMD,GAElBv0B,GAAMo0B,EAAQD,GAASrc,EACvB7X,GAAMo0B,EAAMC,GAAWz1B,EACvB2hB,GAAMgU,EAAMD,GAAS95B,EAO3B,OALAuf,EAAI,GAAM,EAAIlC,EAAGkC,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAGA,EAAI,KAASha,EACxDga,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAInb,EAAGmb,EAAI,GAAM,EAAGA,EAAI,KAAS/Z,EACxD+Z,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAGA,EAAI,KAAS,EAAIvf,EAAGuf,EAAI,KAASwG,EAC3DxG,EAAI,GAAM,EAAGA,EAAI,GAAM,EAAGA,EAAI,IAAO,EAAGA,EAAI,IAAO,EAE5C91B,O,oBAIR,SAAQ64B,GAKP,IAHA,IAAM/C,EAAK91B,KAAKg0B,SACV+B,EAAK8C,EAAO7E,SAERz1B,EAAI,EAAGA,EAAI,GAAIA,IAExB,GAAKu3B,EAAIv3B,KAAQw3B,EAAIx3B,GAAM,OAAO,EAInC,OAAO,I,uBAIR,SAAWoxB,GAEV,IAF8B,IAAblS,EAAa,uDAAJ,EAEhBlf,EAAI,EAAGA,EAAI,GAAIA,IAExByB,KAAKg0B,SAAUz1B,GAAMoxB,EAAOpxB,EAAIkf,GAIjC,OAAOzd,O,qBAIR,WAAkC,IAAzB2vB,EAAyB,uDAAjB,GAAIlS,EAAa,uDAAJ,EAEvBqY,EAAK91B,KAAKg0B,SAsBhB,OApBArE,EAAOlS,GAAWqY,EAAI,GACtBnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAE1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAE1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,GAAMqY,EAAI,GAC1BnG,EAAOlS,EAAS,IAAOqY,EAAI,IAC3BnG,EAAOlS,EAAS,IAAOqY,EAAI,IAE3BnG,EAAOlS,EAAS,IAAOqY,EAAI,IAC3BnG,EAAOlS,EAAS,IAAOqY,EAAI,IAC3BnG,EAAOlS,EAAS,IAAOqY,EAAI,IAC3BnG,EAAOlS,EAAS,IAAOqY,EAAI,IAEpBnG,M,KAMT4c,GAAQptC,UAAUoxC,WAAY,EAE9B,IAAMvD,GAAsB,IAAI3K,GAC1BuN,GAAsB,IAAIrD,GAC1BuB,GAAsB,IAAIzL,GAAS,EAAG,EAAG,GACzC0L,GAAqB,IAAI1L,GAAS,EAAG,EAAG,GACxC5D,GAAmB,IAAI4D,GACvB3D,GAAmB,IAAI2D,GACvB1D,GAAmB,IAAI0D,GAEvBmO,GAA0B,IAAIjE,GAC9BkE,GAA8B,IAAIjS,GAElCkS,G,WAEL,aAA+D,IAAlD50B,EAAkD,uDAA9C,EAAGC,EAA2C,uDAAvC,EAAGugB,EAAoC,uDAAhC,EAAGvJ,EAA6B,uDAArB2d,EAAMC,aAAe,oBAE9D3wC,KAAKy+B,GAAK3iB,EACV9b,KAAK0+B,GAAK3iB,EACV/b,KAAK2+B,GAAKrC,EACVt8B,KAAKi/B,OAASlM,E,mCAIf,WAEC,OAAO/yB,KAAKy+B,I,IAIb,SAAOh/B,GAENO,KAAKy+B,GAAKh/B,EACVO,KAAK6+B,sB,aAIN,WAEC,OAAO7+B,KAAK0+B,I,IAIb,SAAOj/B,GAENO,KAAK0+B,GAAKj/B,EACVO,KAAK6+B,sB,aAIN,WAEC,OAAO7+B,KAAK2+B,I,IAIb,SAAOl/B,GAENO,KAAK2+B,GAAKl/B,EACVO,KAAK6+B,sB,iBAIN,WAEC,OAAO7+B,KAAKi/B,Q,IAIb,SAAWx/B,GAEVO,KAAKi/B,OAASx/B,EACdO,KAAK6+B,sB,iBAIN,SAAK/iB,EAAGC,EAAGugB,EAAGvJ,GASb,OAPA/yB,KAAKy+B,GAAK3iB,EACV9b,KAAK0+B,GAAK3iB,EACV/b,KAAK2+B,GAAKrC,EACVt8B,KAAKi/B,OAASlM,GAAS/yB,KAAKi/B,OAE5Bj/B,KAAK6+B,oBAEE7+B,O,mBAIR,WAEC,OAAO,IAAIA,KAAKR,YAAaQ,KAAKy+B,GAAIz+B,KAAK0+B,GAAI1+B,KAAK2+B,GAAI3+B,KAAKi/B,U,kBAI9D,SAAMF,GASL,OAPA/+B,KAAKy+B,GAAKM,EAAMN,GAChBz+B,KAAK0+B,GAAKK,EAAML,GAChB1+B,KAAK2+B,GAAKI,EAAMJ,GAChB3+B,KAAKi/B,OAASF,EAAME,OAEpBj/B,KAAK6+B,oBAEE7+B,O,mCAIR,SAAuBud,EAAGwV,EAAO9J,GAIhC,IAAM6M,EAAKvY,EAAEyW,SACP0I,EAAM5G,EAAI,GAAK6G,EAAM7G,EAAI,GAAK8G,EAAM9G,EAAI,GACxC+G,EAAM/G,EAAI,GAAKgH,EAAMhH,EAAI,GAAKiH,EAAMjH,EAAI,GACxCkH,EAAMlH,EAAI,GAAKmH,EAAMnH,EAAI,GAAKoH,EAAMpH,EAAI,IAI9C,OAFA/C,EAAQA,GAAS/yB,KAAKi/B,QAIrB,IAAK,MAEJj/B,KAAK0+B,GAAK5tB,KAAK8/B,KAAMtgB,GAASsM,GAAO,EAAG,IAEnC9rB,KAAKihB,IAAK6K,GAAQ,UAEtB58B,KAAKy+B,GAAK3tB,KAAKyjB,OAASwI,EAAKG,GAC7Bl9B,KAAK2+B,GAAK7tB,KAAKyjB,OAASoI,EAAKD,KAI7B18B,KAAKy+B,GAAK3tB,KAAKyjB,MAAO0I,EAAKH,GAC3B98B,KAAK2+B,GAAK,GAIX,MAED,IAAK,MAEJ3+B,KAAKy+B,GAAK3tB,KAAK8/B,MAAQtgB,GAASyM,GAAO,EAAG,IAErCjsB,KAAKihB,IAAKgL,GAAQ,UAEtB/8B,KAAK0+B,GAAK5tB,KAAKyjB,MAAOqI,EAAKM,GAC3Bl9B,KAAK2+B,GAAK7tB,KAAKyjB,MAAOsI,EAAKC,KAI3B98B,KAAK0+B,GAAK5tB,KAAKyjB,OAASyI,EAAKN,GAC7B18B,KAAK2+B,GAAK,GAIX,MAED,IAAK,MAEJ3+B,KAAKy+B,GAAK3tB,KAAK8/B,KAAMtgB,GAAS2M,GAAO,EAAG,IAEnCnsB,KAAKihB,IAAKkL,GAAQ,UAEtBj9B,KAAK0+B,GAAK5tB,KAAKyjB,OAASyI,EAAKE,GAC7Bl9B,KAAK2+B,GAAK7tB,KAAKyjB,OAASoI,EAAKG,KAI7B98B,KAAK0+B,GAAK,EACV1+B,KAAK2+B,GAAK7tB,KAAKyjB,MAAOsI,EAAKH,IAI5B,MAED,IAAK,MAEJ18B,KAAK0+B,GAAK5tB,KAAK8/B,MAAQtgB,GAAS0M,GAAO,EAAG,IAErClsB,KAAKihB,IAAKiL,GAAQ,UAEtBh9B,KAAKy+B,GAAK3tB,KAAKyjB,MAAO0I,EAAKC,GAC3Bl9B,KAAK2+B,GAAK7tB,KAAKyjB,MAAOsI,EAAKH,KAI3B18B,KAAKy+B,GAAK,EACVz+B,KAAK2+B,GAAK7tB,KAAKyjB,OAASoI,EAAKG,IAI9B,MAED,IAAK,MAEJ98B,KAAK2+B,GAAK7tB,KAAK8/B,KAAMtgB,GAASuM,GAAO,EAAG,IAEnC/rB,KAAKihB,IAAK8K,GAAQ,UAEtB78B,KAAKy+B,GAAK3tB,KAAKyjB,OAASwI,EAAKD,GAC7B98B,KAAK0+B,GAAK5tB,KAAKyjB,OAASyI,EAAKN,KAI7B18B,KAAKy+B,GAAK,EACVz+B,KAAK0+B,GAAK5tB,KAAKyjB,MAAOqI,EAAKM,IAI5B,MAED,IAAK,MAEJl9B,KAAK2+B,GAAK7tB,KAAK8/B,MAAQtgB,GAASqM,GAAO,EAAG,IAErC7rB,KAAKihB,IAAK4K,GAAQ,UAEtB38B,KAAKy+B,GAAK3tB,KAAKyjB,MAAO0I,EAAKH,GAC3B98B,KAAK0+B,GAAK5tB,KAAKyjB,MAAOqI,EAAKF,KAI3B18B,KAAKy+B,GAAK3tB,KAAKyjB,OAASwI,EAAKG,GAC7Bl9B,KAAK0+B,GAAK,GAIX,MAED,QAECpZ,QAAQM,KAAM,uEAAyEmN,GAQzF,OAJA/yB,KAAKi/B,OAASlM,GAEE,IAAX9J,GAAmBjpB,KAAK6+B,oBAEtB7+B,O,+BAIR,SAAmB8yB,EAAGC,EAAO9J,GAI5B,OAFAunB,GAAUK,2BAA4B/d,GAE/B9yB,KAAKgwC,sBAAuBQ,GAAWzd,EAAO9J,K,4BAItD,SAAgBjJ,EAAG+S,GAElB,OAAO/yB,KAAK4a,IAAKoF,EAAElE,EAAGkE,EAAEjE,EAAGiE,EAAEsc,EAAGvJ,GAAS/yB,KAAKi/B,U,qBAI/C,SAAS6R,GAMR,OAFAL,GAAchO,aAAcziC,MAErBA,KAAK+wC,kBAAmBN,GAAeK,K,oBAI/C,SAAQ/R,GAEP,OAASA,EAAMN,KAAOz+B,KAAKy+B,IAAUM,EAAML,KAAO1+B,KAAK0+B,IAAUK,EAAMJ,KAAO3+B,KAAK2+B,IAAUI,EAAME,SAAWj/B,KAAKi/B,S,uBAIpH,SAAWtP,GASV,OAPA3vB,KAAKy+B,GAAK9O,EAAO,GACjB3vB,KAAK0+B,GAAK/O,EAAO,GACjB3vB,KAAK2+B,GAAKhP,EAAO,QACGptB,IAAfotB,EAAO,KAAoB3vB,KAAKi/B,OAAStP,EAAO,IAErD3vB,KAAK6+B,oBAEE7+B,O,qBAIR,WAAkC,IAAzB2vB,EAAyB,uDAAjB,GAAIlS,EAAa,uDAAJ,EAO7B,OALAkS,EAAOlS,GAAWzd,KAAKy+B,GACvB9O,EAAOlS,EAAS,GAAMzd,KAAK0+B,GAC3B/O,EAAOlS,EAAS,GAAMzd,KAAK2+B,GAC3BhP,EAAOlS,EAAS,GAAMzd,KAAKi/B,OAEpBtP,I,uBAIR,SAAWqhB,GAEV,OAAKA,EAEGA,EAAep2B,IAAK5a,KAAKy+B,GAAIz+B,KAAK0+B,GAAI1+B,KAAK2+B,IAI3C,IAAI0D,GAASriC,KAAKy+B,GAAIz+B,KAAK0+B,GAAI1+B,KAAK2+B,M,uBAM7C,SAAW9vB,GAIV,OAFA7O,KAAK6+B,kBAAoBhwB,EAElB7O,O,+BAIR,gB,KAID0wC,GAAMvxC,UAAU6/B,SAAU,EAE1B0R,GAAMC,aAAe,MACrBD,GAAMO,eAAiB,CAAE,MAAO,MAAO,MAAO,MAAO,MAAO,O,IAEtDC,G,WAEL,aAAc,oBAEblxC,KAAKmxC,KAAO,E,uCAIb,SAAKC,GAEJpxC,KAAKmxC,KAAO,GAAKC,EAAU,I,oBAI5B,SAAQA,GAEPpxC,KAAKmxC,MAAQ,GAAKC,EAAU,I,uBAI7B,WAECpxC,KAAKmxC,MAAO,I,oBAIb,SAAQC,GAEPpxC,KAAKmxC,MAAQ,GAAKC,EAAU,I,qBAI7B,SAASA,GAERpxC,KAAKmxC,QAAY,GAAKC,EAAU,K,wBAIjC,WAECpxC,KAAKmxC,KAAO,I,kBAIb,SAAME,GAEL,OAAuC,KAA9BrxC,KAAKmxC,KAAOE,EAAOF,U,KAM1BG,GAAc,EAEZC,GAAQ,IAAkBlP,GAC1BmP,GAAM,IAAkBhT,GACxBiT,GAAQ,IAAkBlF,GAC1BmF,GAAU,IAAkBrP,GAE5BsP,GAAc,IAAkBtP,GAChCuP,GAAW,IAAkBvP,GAC7BwP,GAAgB,IAAkBrT,GAElCsT,GAAS,IAAkBzP,GAAS,EAAG,EAAG,GAC1C0P,GAAS,IAAkB1P,GAAS,EAAG,EAAG,GAC1C2P,GAAS,IAAkB3P,GAAS,EAAG,EAAG,GAE1C4P,GAAc,CAAEhsB,KAAM,SACtBisB,GAAgB,CAAEjsB,KAAM,WAExBksB,G,kDAEL,aAAc,0BAEb,eAEAtzC,OAAOC,eAAPD,OAAA,IAAAA,CAAA,GAA6B,KAAM,CAAEY,MAAO6xC,OAE5C,EAAK7W,KAAOxK,KAEZ,EAAKzrB,KAAO,GACZ,EAAKyhB,KAAO,WAEZ,EAAKmsB,OAAS,KACd,EAAKrsC,SAAW,GAEhB,EAAK4G,GAAKwlC,EAASE,UAAU/T,QAE7B,IAAM6Q,EAAW,IAAI9M,GACf5J,EAAW,IAAIiY,GACf5R,EAAa,IAAIN,GACjB4Q,EAAQ,IAAI/M,GAAS,EAAG,EAAG,GAnBpB,OAiCb5J,EAAS6Z,WAZT,WAECxT,EAAW2D,aAAchK,GAAU,MAWpCqG,EAAWwT,WAPX,WAEC7Z,EAASsY,kBAAmBjS,OAAYv8B,GAAW,MAOpD1D,OAAOob,iBAAPpb,OAAA,IAAAA,CAAA,GAA+B,CAC9BswC,SAAU,CACTxwC,cAAc,EACdD,YAAY,EACZe,MAAO0vC,GAER1W,SAAU,CACT95B,cAAc,EACdD,YAAY,EACZe,MAAOg5B,GAERqG,WAAY,CACXngC,cAAc,EACdD,YAAY,EACZe,MAAOq/B,GAERsQ,MAAO,CACNzwC,cAAc,EACdD,YAAY,EACZe,MAAO2vC,GAERmD,gBAAiB,CAChB9yC,MAAO,IAAI8sC,IAEZiG,aAAc,CACb/yC,MAAO,IAAI21B,MAIb,EAAKyD,OAAS,IAAI0T,GAClB,EAAK/I,YAAc,IAAI+I,GAEvB,EAAK3R,iBAAmBuX,EAASM,wBACjC,EAAKC,wBAAyB,EAE9B,EAAKrB,OAAS,IAAIH,GAClB,EAAKyB,SAAU,EAEf,EAAKC,YAAa,EAClB,EAAKC,eAAgB,EAErB,EAAKC,eAAgB,EACrB,EAAKC,YAAc,EAEnB,EAAKC,WAAa,GAElB,EAAKC,SAAW,GAlFH,E,kDAsFd,c,2BACA,c,0BAEA,SAAcpa,GAER74B,KAAK46B,kBAAmB56B,KAAKkzC,eAElClzC,KAAK64B,OAAOsa,YAAata,GAEzB74B,KAAK64B,OAAOua,UAAWpzC,KAAKmvC,SAAUnvC,KAAK8+B,WAAY9+B,KAAKovC,S,6BAI7D,SAAiBtc,GAIhB,OAFA9yB,KAAK8+B,WAAWqU,YAAargB,GAEtB9yB,O,sCAIR,SAA0Bs/B,EAAMhL,GAI/Bt0B,KAAK8+B,WAAW4D,iBAAkBpD,EAAMhL,K,kCAIzC,SAAsByK,GAErB/+B,KAAK8+B,WAAW2D,aAAc1D,GAAO,K,mCAItC,SAAuBxhB,GAItBvd,KAAK8+B,WAAWkR,sBAAuBzyB,K,uCAIxC,SAA2BuV,GAI1B9yB,KAAK8+B,WAAW3D,KAAMrI,K,0BAIvB,SAAcwM,EAAMhL,GASnB,OAJAkd,GAAI9O,iBAAkBpD,EAAMhL,GAE5Bt0B,KAAK8+B,WAAWuU,SAAU7B,IAEnBxxC,O,+BAIR,SAAmBs/B,EAAMhL,GAUxB,OAJAkd,GAAI9O,iBAAkBpD,EAAMhL,GAE5Bt0B,KAAK8+B,WAAWqU,YAAa3B,IAEtBxxC,O,qBAIR,SAASs0B,GAER,OAAOt0B,KAAKszC,aAAcxB,GAAQxd,K,qBAInC,SAASA,GAER,OAAOt0B,KAAKszC,aAAcvB,GAAQzd,K,qBAInC,SAASA,GAER,OAAOt0B,KAAKszC,aAActB,GAAQ1d,K,6BAInC,SAAiBgL,EAAMiU,GAStB,OAJAhC,GAAMpW,KAAMmE,GAAOiD,gBAAiBviC,KAAK8+B,YAEzC9+B,KAAKmvC,SAASpJ,IAAKwL,GAAMxd,eAAgBwf,IAElCvzC,O,wBAIR,SAAYuzC,GAEX,OAAOvzC,KAAKwzC,gBAAiB1B,GAAQyB,K,wBAItC,SAAYA,GAEX,OAAOvzC,KAAKwzC,gBAAiBzB,GAAQwB,K,wBAItC,SAAYA,GAEX,OAAOvzC,KAAKwzC,gBAAiBxB,GAAQuB,K,0BAItC,SAAcnN,GAEb,OAAOA,EAAOhD,aAAcpjC,KAAKwjC,e,0BAIlC,SAAc4C,GAEb,OAAOA,EAAOhD,aAAcqO,GAAMtW,KAAMn7B,KAAKwjC,aAActL,Y,oBAI5D,SAAQpc,EAAGC,EAAGugB,GAIRxgB,EAAEipB,UAEN2M,GAAQvW,KAAMrf,GAId41B,GAAQ92B,IAAKkB,EAAGC,EAAGugB,GAIpB,IAAM8V,EAASpyC,KAAKoyC,OAEpBpyC,KAAKsmC,mBAAmB,GAAM,GAE9BqL,GAAY8B,sBAAuBzzC,KAAKwjC,aAEnCxjC,KAAK0zC,UAAY1zC,KAAK2zC,QAE1BlC,GAAMmC,OAAQjC,GAAaD,GAAS1xC,KAAK2M,IAIzC8kC,GAAMmC,OAAQlC,GAASC,GAAa3xC,KAAK2M,IAI1C3M,KAAK8+B,WAAWkR,sBAAuByB,IAElCW,IAEJX,GAAMoC,gBAAiBzB,EAAO5O,aAC9BgO,GAAIxB,sBAAuByB,IAC3BzxC,KAAK8+B,WAAWqU,YAAa3B,GAAItZ,a,iBAMnC,SAAKj3B,GAEJ,GAAKd,UAAU3B,OAAS,EAAI,CAE3B,IAAM,IAAID,EAAI,EAAGA,EAAI4B,UAAU3B,OAAQD,IAEtCyB,KAAK+lC,IAAK5lC,UAAW5B,IAItB,OAAOyB,KAIR,OAAKiB,IAAWjB,MAEfslB,QAAQxjB,MAAO,kEAAoEb,GAC5EjB,OAIHiB,GAAUA,EAAO6yC,YAEE,OAAlB7yC,EAAOmxC,QAEXnxC,EAAOmxC,OAAO2B,OAAQ9yC,GAIvBA,EAAOmxC,OAASpyC,KAChBA,KAAK+F,SAAS5B,KAAMlD,GAEpBA,EAAO66B,cAAemW,KAItB3sB,QAAQxjB,MAAO,gEAAiEb,GAI1EjB,Q,oBAIR,SAAQiB,GAEP,GAAKd,UAAU3B,OAAS,EAAI,CAE3B,IAAM,IAAID,EAAI,EAAGA,EAAI4B,UAAU3B,OAAQD,IAEtCyB,KAAK+zC,OAAQ5zC,UAAW5B,IAIzB,OAAOyB,KAIR,IAAM6L,EAAQ7L,KAAK+F,SAASyH,QAASvM,GAWrC,OATiB,IAAZ4K,IAEJ5K,EAAOmxC,OAAS,KAChBpyC,KAAK+F,SAAS4P,OAAQ9J,EAAO,GAE7B5K,EAAO66B,cAAeoW,KAIhBlyC,O,mBAIR,WAEC,IAAM,IAAIzB,EAAI,EAAGA,EAAIyB,KAAK+F,SAASvH,OAAQD,IAAO,CAEjD,IAAM0C,EAASjB,KAAK+F,SAAUxH,GAE9B0C,EAAOmxC,OAAS,KAEhBnxC,EAAO66B,cAAeoW,IAMvB,OAFAlyC,KAAK+F,SAASvH,OAAS,EAEhBwB,O,oBAKR,SAAQiB,GAsBP,OAlBAjB,KAAKsmC,mBAAmB,GAAM,GAE9BmL,GAAMtW,KAAMn7B,KAAKwjC,aAActL,SAER,OAAlBj3B,EAAOmxC,SAEXnxC,EAAOmxC,OAAO9L,mBAAmB,GAAM,GAEvCmL,GAAM4B,SAAUpyC,EAAOmxC,OAAO5O,cAI/BviC,EAAOmiC,aAAcqO,IAErBzxC,KAAK+lC,IAAK9kC,GAEVA,EAAOqlC,mBAAmB,GAAO,GAE1BtmC,O,2BAIR,SAAeg0C,GAEd,OAAOh0C,KAAKi0C,oBAAqB,KAAMD,K,6BAIxC,SAAiBxvC,GAEhB,OAAOxE,KAAKi0C,oBAAqB,OAAQzvC,K,iCAI1C,SAAqBA,EAAM/E,GAE1B,GAAKO,KAAMwE,KAAW/E,EAAQ,OAAOO,KAErC,IAAM,IAAIzB,EAAI,EAAGyK,EAAIhJ,KAAK+F,SAASvH,OAAQD,EAAIyK,EAAGzK,IAAO,CAExD,IACM0C,EADQjB,KAAK+F,SAAUxH,GACR01C,oBAAqBzvC,EAAM/E,GAEhD,QAAgB8C,IAAXtB,EAEJ,OAAOA,K,8BAUV,SAAkB5C,GAWjB,YATgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,8DACdvnB,EAAS,IAAIgkC,IAIdriC,KAAKsmC,mBAAmB,GAAM,GAEvBjoC,EAAOo1C,sBAAuBzzC,KAAKwjC,e,gCAI3C,SAAoBnlC,GAanB,YAXgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,gEACdvnB,EAAS,IAAImgC,IAIdx+B,KAAKsmC,mBAAmB,GAAM,GAE9BtmC,KAAKwjC,YAAY4P,UAAWzB,GAAatzC,EAAQuzC,IAE1CvzC,I,2BAIR,SAAeA,GAad,YAXgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,2DACdvnB,EAAS,IAAIgkC,IAIdriC,KAAKsmC,mBAAmB,GAAM,GAE9BtmC,KAAKwjC,YAAY4P,UAAWzB,GAAaE,GAAexzC,GAEjDA,I,+BAIR,SAAmBA,QAEFkE,IAAXlE,IAEJinB,QAAQM,KAAM,+DACdvnB,EAAS,IAAIgkC,IAIdriC,KAAKsmC,mBAAmB,GAAM,GAE9B,IAAMljC,EAAIpD,KAAKwjC,YAAYxP,SAE3B,OAAO31B,EAAOuc,IAAKxX,EAAG,GAAKA,EAAG,GAAKA,EAAG,KAAOuxB,c,qBAI9C,c,sBAEA,SAAU9lB,GAETA,EAAU7O,MAIV,IAFA,IAAM+F,EAAW/F,KAAK+F,SAEZxH,EAAI,EAAGyK,EAAIjD,EAASvH,OAAQD,EAAIyK,EAAGzK,IAE5CwH,EAAUxH,GAAI21C,SAAUrlC,K,6BAM1B,SAAiBA,GAEhB,IAAsB,IAAjB7O,KAAK2yC,QAAV,CAEA9jC,EAAU7O,MAIV,IAFA,IAAM+F,EAAW/F,KAAK+F,SAEZxH,EAAI,EAAGyK,EAAIjD,EAASvH,OAAQD,EAAIyK,EAAGzK,IAE5CwH,EAAUxH,GAAI41C,gBAAiBtlC,M,+BAMjC,SAAmBA,GAElB,IAAMujC,EAASpyC,KAAKoyC,OAEJ,OAAXA,IAEJvjC,EAAUujC,GAEVA,EAAOgC,kBAAmBvlC,M,0BAM5B,WAEC7O,KAAK64B,OAAOgV,QAAS7tC,KAAKmvC,SAAUnvC,KAAK8+B,WAAY9+B,KAAKovC,OAE1DpvC,KAAK0yC,wBAAyB,I,+BAI/B,SAAmB2B,GAEbr0C,KAAK46B,kBAAmB56B,KAAKkzC,gBAE7BlzC,KAAK0yC,wBAA0B2B,KAEd,OAAhBr0C,KAAKoyC,OAETpyC,KAAKwjC,YAAYrI,KAAMn7B,KAAK64B,QAI5B74B,KAAKwjC,YAAYpN,iBAAkBp2B,KAAKoyC,OAAO5O,YAAaxjC,KAAK64B,QAIlE74B,KAAK0yC,wBAAyB,EAE9B2B,GAAQ,GAQT,IAFA,IAAMtuC,EAAW/F,KAAK+F,SAEZxH,EAAI,EAAGyK,EAAIjD,EAASvH,OAAQD,EAAIyK,EAAGzK,IAE5CwH,EAAUxH,GAAI+1C,kBAAmBD,K,+BAMnC,SAAmBE,EAAeC,GAEjC,IAAMpC,EAASpyC,KAAKoyC,OAsBpB,IApBuB,IAAlBmC,GAAqC,OAAXnC,GAE9BA,EAAO9L,mBAAmB,GAAM,GAI5BtmC,KAAK46B,kBAAmB56B,KAAKkzC,eAEb,OAAhBlzC,KAAKoyC,OAETpyC,KAAKwjC,YAAYrI,KAAMn7B,KAAK64B,QAI5B74B,KAAKwjC,YAAYpN,iBAAkBp2B,KAAKoyC,OAAO5O,YAAaxjC,KAAK64B,SAM1C,IAAnB2b,EAIJ,IAFA,IAAMzuC,EAAW/F,KAAK+F,SAEZxH,EAAI,EAAGyK,EAAIjD,EAASvH,OAAQD,EAAIyK,EAAGzK,IAE5CwH,EAAUxH,GAAI+nC,mBAAmB,GAAO,K,oBAQ3C,SAAQlL,GAGP,IAAMC,OAA0B94B,IAAT64B,GAAsC,kBAATA,EAE9CG,EAAS,GAKVF,IAGJD,EAAO,CACNqZ,WAAY,GACZC,UAAW,GACXpZ,SAAU,GACVK,OAAQ,GACRgZ,OAAQ,GACRC,UAAW,GACX5B,WAAY,IAGbzX,EAAOC,SAAW,CACjBP,QAAS,IACThV,KAAM,SACNwV,UAAW,oBAOb,IAAMx6B,EAAS,GA+Bf,SAAS4zC,EAAWC,EAAS7sC,GAQ5B,YANiC1F,IAA5BuyC,EAAS7sC,EAAQwyB,QAErBqa,EAAS7sC,EAAQwyB,MAASxyB,EAAQ8sC,OAAQ3Z,IAIpCnzB,EAAQwyB,KAIhB,GAzCAx5B,EAAOw5B,KAAOz6B,KAAKy6B,KACnBx5B,EAAOglB,KAAOjmB,KAAKimB,KAEA,KAAdjmB,KAAKwE,OAAcvD,EAAOuD,KAAOxE,KAAKwE,OAClB,IAApBxE,KAAK4yC,aAAsB3xC,EAAO2xC,YAAa,IACxB,IAAvB5yC,KAAK6yC,gBAAyB5xC,EAAO4xC,eAAgB,IACpC,IAAjB7yC,KAAK2yC,UAAoB1xC,EAAO0xC,SAAU,IACnB,IAAvB3yC,KAAK8yC,gBAA0B7xC,EAAO6xC,eAAgB,GACjC,IAArB9yC,KAAK+yC,cAAoB9xC,EAAO8xC,YAAc/yC,KAAK+yC,aACf,OAApC9zB,KAAKC,UAAWlf,KAAKizC,YAAsBhyC,EAAOgyC,SAAWjzC,KAAKizC,UAEvEhyC,EAAOowC,OAASrxC,KAAKqxC,OAAOF,KAC5BlwC,EAAO43B,OAAS74B,KAAK64B,OAAOmc,WAEG,IAA1Bh1C,KAAK46B,mBAA6B35B,EAAO25B,kBAAmB,GAI5D56B,KAAKi1C,kBAETh0C,EAAOglB,KAAO,gBACdhlB,EAAOukC,MAAQxlC,KAAKwlC,MACpBvkC,EAAOi0C,eAAiBl1C,KAAKk1C,eAAeH,SAChB,OAAvB/0C,KAAKm1C,gBAAyBl0C,EAAOk0C,cAAgBn1C,KAAKm1C,cAAcJ,WAkBzE/0C,KAAKo1C,QAAUp1C,KAAKq1C,QAAUr1C,KAAKs1C,SAAW,CAElDr0C,EAAOslC,SAAWsO,EAAWzZ,EAAKqZ,WAAYz0C,KAAKumC,UAEnD,IAAMgP,EAAav1C,KAAKumC,SAASgP,WAEjC,QAAoBhzC,IAAfgzC,QAAkDhzC,IAAtBgzC,EAAWZ,OAAuB,CAElE,IAAMA,EAASY,EAAWZ,OAE1B,GAAK5xC,MAAMC,QAAS2xC,GAEnB,IAAM,IAAIp2C,EAAI,EAAGyK,EAAI2rC,EAAOn2C,OAAQD,EAAIyK,EAAGzK,IAAO,CAEjD,IAAMi3C,EAAQb,EAAQp2C,GAEtBs2C,EAAWzZ,EAAKuZ,OAAQa,QAMzBX,EAAWzZ,EAAKuZ,OAAQA,IAuB3B,GAfK30C,KAAKy1C,gBAETx0C,EAAOy0C,SAAW11C,KAAK01C,SACvBz0C,EAAO00C,WAAa31C,KAAK21C,WAAWX,eAEbzyC,IAAlBvC,KAAK41C,WAETf,EAAWzZ,EAAKwZ,UAAW50C,KAAK41C,UAEhC30C,EAAO20C,SAAW51C,KAAK41C,SAASnb,YAMXl4B,IAAlBvC,KAAK61C,SAET,GAAK9yC,MAAMC,QAAShD,KAAK61C,UAAa,CAIrC,IAFA,IAAMC,EAAQ,GAEJv3C,EAAI,EAAGyK,EAAIhJ,KAAK61C,SAASr3C,OAAQD,EAAIyK,EAAGzK,IAEjDu3C,EAAM3xC,KAAM0wC,EAAWzZ,EAAKsZ,UAAW10C,KAAK61C,SAAUt3C,KAIvD0C,EAAO40C,SAAWC,OAIlB70C,EAAO40C,SAAWhB,EAAWzZ,EAAKsZ,UAAW10C,KAAK61C,UAQpD,GAAK71C,KAAK+F,SAASvH,OAAS,EAAI,CAE/ByC,EAAO8E,SAAW,GAElB,IAAM,IAAIxH,EAAI,EAAGA,EAAIyB,KAAK+F,SAASvH,OAAQD,IAE1C0C,EAAO8E,SAAS5B,KAAMnE,KAAK+F,SAAUxH,GAAIw2C,OAAQ3Z,GAAOn6B,QAQ1D,GAAKjB,KAAKgzC,WAAWx0C,OAAS,EAAI,CAEjCyC,EAAO+xC,WAAa,GAEpB,IAAM,IAAIz0C,EAAI,EAAGA,EAAIyB,KAAKgzC,WAAWx0C,OAAQD,IAAO,CAEnD,IAAMw3C,EAAY/1C,KAAKgzC,WAAYz0C,GAEnC0C,EAAO+xC,WAAW7uC,KAAM0wC,EAAWzZ,EAAK4X,WAAY+C,KAMtD,GAAK1a,EAAe,CAEnB,IAAMoZ,EAAauB,EAAkB5a,EAAKqZ,YACpCC,EAAYsB,EAAkB5a,EAAKsZ,WACnCpZ,EAAW0a,EAAkB5a,EAAKE,UAClCK,EAASqa,EAAkB5a,EAAKO,QAChCgZ,EAASqB,EAAkB5a,EAAKuZ,QAChCC,EAAYoB,EAAkB5a,EAAKwZ,WACnC5B,EAAagD,EAAkB5a,EAAK4X,YAErCyB,EAAWj2C,OAAS,IAAI+8B,EAAOkZ,WAAaA,GAC5CC,EAAUl2C,OAAS,IAAI+8B,EAAOmZ,UAAYA,GAC1CpZ,EAAS98B,OAAS,IAAI+8B,EAAOD,SAAWA,GACxCK,EAAOn9B,OAAS,IAAI+8B,EAAOI,OAASA,GACpCgZ,EAAOn2C,OAAS,IAAI+8B,EAAOoZ,OAASA,GACpCC,EAAUp2C,OAAS,IAAI+8B,EAAOqZ,UAAYA,GAC1C5B,EAAWx0C,OAAS,IAAI+8B,EAAOyX,WAAaA,GAMlD,OAFAzX,EAAOt6B,OAASA,EAETs6B,EAKP,SAASya,EAAkB9vC,GAE1B,IAAMgB,EAAS,GACf,IAAM,IAAMnI,KAAOmH,EAAQ,CAE1B,IAAMyY,EAAOzY,EAAOnH,UACb4f,EAAK6c,SACZt0B,EAAO/C,KAAMwa,GAId,OAAOzX,K,mBAMT,SAAO+uC,GAEN,OAAO,IAAIj2C,KAAKR,aAAc27B,KAAMn7B,KAAMi2C,K,kBAI3C,SAAM1tC,GAA2B,IAAnB0tC,IAAmB,yDA4BhC,GA1BAj2C,KAAKwE,KAAO+D,EAAO/D,KAEnBxE,KAAK2M,GAAGwuB,KAAM5yB,EAAOoE,IAErB3M,KAAKmvC,SAAShU,KAAM5yB,EAAO4mC,UAC3BnvC,KAAKy4B,SAAS1F,MAAQxqB,EAAOkwB,SAAS1F,MACtC/yB,KAAK8+B,WAAW3D,KAAM5yB,EAAOu2B,YAC7B9+B,KAAKovC,MAAMjU,KAAM5yB,EAAO6mC,OAExBpvC,KAAK64B,OAAOsC,KAAM5yB,EAAOswB,QACzB74B,KAAKwjC,YAAYrI,KAAM5yB,EAAOi7B,aAE9BxjC,KAAK46B,iBAAmBryB,EAAOqyB,iBAC/B56B,KAAK0yC,uBAAyBnqC,EAAOmqC,uBAErC1yC,KAAKqxC,OAAOF,KAAO5oC,EAAO8oC,OAAOF,KACjCnxC,KAAK2yC,QAAUpqC,EAAOoqC,QAEtB3yC,KAAK4yC,WAAarqC,EAAOqqC,WACzB5yC,KAAK6yC,cAAgBtqC,EAAOsqC,cAE5B7yC,KAAK8yC,cAAgBvqC,EAAOuqC,cAC5B9yC,KAAK+yC,YAAcxqC,EAAOwqC,YAE1B/yC,KAAKizC,SAAWh0B,KAAKrC,MAAOqC,KAAKC,UAAW3W,EAAO0qC,YAEhC,IAAdgD,EAEJ,IAAM,IAAI13C,EAAI,EAAGA,EAAIgK,EAAOxC,SAASvH,OAAQD,IAAO,CAEnD,IAAMyJ,EAAQO,EAAOxC,SAAUxH,GAC/ByB,KAAK+lC,IAAK/9B,EAAMs2B,SAMlB,OAAOt+B,S,GA12BcwvB,IAg3BvB2iB,GAASE,UAAY,IAAIhQ,GAAS,EAAG,EAAG,GACxC8P,GAASM,yBAA0B,EAEnCN,GAAShzC,UAAU20C,YAAa,EAEhC,IAAMoC,GAAyB,IAAI7T,GAC7B8T,GAA2B,IAAI9T,GAC/B+T,GAA8B,IAAIhhB,GAElCihB,G,WAEL,aAA6D,IAAhD/R,EAAgD,uDAAvC,IAAIjC,GAAS,EAAG,EAAG,GAAK0E,EAAe,uDAAJ,EAAI,oBAI5D/mC,KAAKskC,OAASA,EACdtkC,KAAK+mC,SAAWA,E,uCAIjB,SAAKzC,EAAQyC,GAKZ,OAHA/mC,KAAKskC,OAAOnJ,KAAMmJ,GAClBtkC,KAAK+mC,SAAWA,EAET/mC,O,2BAIR,SAAe8b,EAAGC,EAAGugB,EAAG1I,GAKvB,OAHA5zB,KAAKskC,OAAO1pB,IAAKkB,EAAGC,EAAGugB,GACvBt8B,KAAK+mC,SAAWnT,EAET5zB,O,2CAIR,SAA+BskC,EAAQ6B,GAKtC,OAHAnmC,KAAKskC,OAAOnJ,KAAMmJ,GAClBtkC,KAAK+mC,UAAaZ,EAAMxG,IAAK3/B,KAAKskC,QAE3BtkC,O,mCAIR,SAAuB2K,EAAGC,EAAG0T,GAE5B,IAAMgmB,EAAS4R,GAASpiB,WAAYxV,EAAG1T,GAAIwhC,MAAO+J,GAAWriB,WAAYnpB,EAAGC,IAAM+pB,YAMlF,OAFA30B,KAAKs2C,8BAA+BhS,EAAQ35B,GAErC3K,O,kBAIR,SAAM8mC,GAKL,OAHA9mC,KAAKskC,OAAOnJ,KAAM2L,EAAMxC,QACxBtkC,KAAK+mC,SAAWD,EAAMC,SAEf/mC,O,uBAIR,WAIC,IAAMu2C,EAAsB,EAAMv2C,KAAKskC,OAAO9lC,SAI9C,OAHAwB,KAAKskC,OAAOvQ,eAAgBwiB,GAC5Bv2C,KAAK+mC,UAAYwP,EAEVv2C,O,oBAIR,WAKC,OAHAA,KAAK+mC,WAAc,EACnB/mC,KAAKskC,OAAOkS,SAELx2C,O,6BAIR,SAAiBmmC,GAEhB,OAAOnmC,KAAKskC,OAAO3E,IAAKwG,GAAUnmC,KAAK+mC,W,8BAIxC,SAAkBH,GAEjB,OAAO5mC,KAAKkpC,gBAAiBtC,EAAO3R,QAAW2R,EAAOnC,S,0BAIvD,SAAc0B,EAAO9nC,GASpB,YAPgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,uDACdvnB,EAAS,IAAIgkC,IAIPhkC,EAAO88B,KAAMn7B,KAAKskC,QAASvQ,gBAAkB/zB,KAAKkpC,gBAAiB/C,IAAUJ,IAAKI,K,2BAI1F,SAAesQ,EAAMp4C,QAEJkE,IAAXlE,IAEJinB,QAAQM,KAAM,wDACdvnB,EAAS,IAAIgkC,IAId,IAAM2H,EAAYyM,EAAK1kC,MAAOmkC,IAExBlS,EAAchkC,KAAKskC,OAAO3E,IAAKqK,GAErC,GAAqB,IAAhBhG,EAGJ,OAA4C,IAAvChkC,KAAKkpC,gBAAiBuN,EAAKC,OAExBr4C,EAAO88B,KAAMsb,EAAKC,OAKnB,KAIR,IAAMjmB,IAAQgmB,EAAKC,MAAM/W,IAAK3/B,KAAKskC,QAAWtkC,KAAK+mC,UAAa/C,EAEhE,OAAKvT,EAAI,GAAKA,EAAI,EAEV,KAIDpyB,EAAO88B,KAAM6O,GAAYjW,eAAgBtD,GAAIsV,IAAK0Q,EAAKC,S,4BAI/D,SAAgBD,GAIf,IAAME,EAAY32C,KAAKkpC,gBAAiBuN,EAAKC,OACvCE,EAAU52C,KAAKkpC,gBAAiBuN,EAAKxvC,KAE3C,OAAS0vC,EAAY,GAAKC,EAAU,GAASA,EAAU,GAAKD,EAAY,I,2BAIzE,SAAe1Q,GAEd,OAAOA,EAAI4Q,gBAAiB72C,Q,8BAI7B,SAAkB4mC,GAEjB,OAAOA,EAAOiQ,gBAAiB72C,Q,2BAIhC,SAAe3B,GASd,YAPgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,wDACdvnB,EAAS,IAAIgkC,IAIPhkC,EAAO88B,KAAMn7B,KAAKskC,QAASvQ,gBAAkB/zB,KAAK+mC,Y,0BAI1D,SAAclO,EAAQie,GAErB,IAAMtE,EAAesE,GAAwBV,GAAcW,gBAAiBle,GAEtEme,EAAiBh3C,KAAKi3C,cAAef,IAAW9S,aAAcvK,GAE9DyL,EAAStkC,KAAKskC,OAAOtI,aAAcwW,GAAe7d,YAIxD,OAFA30B,KAAK+mC,UAAaiQ,EAAerX,IAAK2E,GAE/BtkC,O,uBAIR,SAAWyd,GAIV,OAFAzd,KAAK+mC,UAAYtpB,EAAOkiB,IAAK3/B,KAAKskC,QAE3BtkC,O,oBAIR,SAAQ8mC,GAEP,OAAOA,EAAMxC,OAAO0D,OAAQhoC,KAAKskC,SAAcwC,EAAMC,WAAa/mC,KAAK+mC,W,mBAIxE,WAEC,OAAO,IAAI/mC,KAAKR,aAAc27B,KAAMn7B,U,KAMtCq2C,GAAMl3C,UAAU+3C,SAAU,EAE1B,IAAMC,GAAsB,IAAI9U,GAC1B+U,GAAsB,IAAI/U,GAC1BgV,GAAsB,IAAIhV,GAC1BiV,GAAsB,IAAIjV,GAE1BkV,GAAqB,IAAIlV,GACzBmV,GAAqB,IAAInV,GACzBoV,GAAqB,IAAIpV,GACzBqV,GAAqB,IAAIrV,GACzBsV,GAAqB,IAAItV,GACzBuV,GAAqB,IAAIvV,GAEzBwV,G,WAEL,aAAuE,IAA1DltC,EAA0D,uDAAtD,IAAI03B,GAAWz3B,EAAuC,uDAAnC,IAAIy3B,GAAW/jB,EAAoB,uDAAhB,IAAI+jB,GAAY,oBAEtEriC,KAAK2K,EAAIA,EACT3K,KAAK4K,EAAIA,EACT5K,KAAKse,EAAIA,E,uCAoGV,SAAK3T,EAAGC,EAAG0T,GAMV,OAJAte,KAAK2K,EAAEwwB,KAAMxwB,GACb3K,KAAK4K,EAAEuwB,KAAMvwB,GACb5K,KAAKse,EAAE6c,KAAM7c,GAENte,O,qCAIR,SAAyBylC,EAAQqS,EAAIC,EAAIC,GAMxC,OAJAh4C,KAAK2K,EAAEwwB,KAAMsK,EAAQqS,IACrB93C,KAAK4K,EAAEuwB,KAAMsK,EAAQsS,IACrB/3C,KAAKse,EAAE6c,KAAMsK,EAAQuS,IAEdh4C,O,mBAIR,WAEC,OAAO,IAAIA,KAAKR,aAAc27B,KAAMn7B,Q,kBAIrC,SAAMgnC,GAML,OAJAhnC,KAAK2K,EAAEwwB,KAAM6L,EAASr8B,GACtB3K,KAAK4K,EAAEuwB,KAAM6L,EAASp8B,GACtB5K,KAAKse,EAAE6c,KAAM6L,EAAS1oB,GAEfte,O,qBAIR,WAKC,OAHAm3C,GAAMrjB,WAAY9zB,KAAKse,EAAGte,KAAK4K,GAC/BwsC,GAAMtjB,WAAY9zB,KAAK2K,EAAG3K,KAAK4K,GAEQ,GAAhCusC,GAAM/K,MAAOgL,IAAQ54C,W,yBAI7B,SAAaH,GASZ,YAPgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,yDACdvnB,EAAS,IAAIgkC,IAIPhkC,EAAOw1B,WAAY7zB,KAAK2K,EAAG3K,KAAK4K,GAAIm7B,IAAK/lC,KAAKse,GAAIyV,eAAgB,EAAI,K,uBAI9E,SAAW11B,GAEV,OAAOw5C,EAASI,UAAWj4C,KAAK2K,EAAG3K,KAAK4K,EAAG5K,KAAKse,EAAGjgB,K,sBAIpD,SAAUA,GAST,YAPgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,sDACdvnB,EAAS,IAAIg4C,IAIPh4C,EAAO65C,sBAAuBl4C,KAAK2K,EAAG3K,KAAK4K,EAAG5K,KAAKse,K,0BAI3D,SAAc6nB,EAAO9nC,GAEpB,OAAOw5C,EAASM,aAAchS,EAAOnmC,KAAK2K,EAAG3K,KAAK4K,EAAG5K,KAAKse,EAAGjgB,K,mBAI9D,SAAO8nC,EAAOiS,EAAKC,EAAKC,EAAKj6C,GAE5B,OAAOw5C,EAASU,MAAOpS,EAAOnmC,KAAK2K,EAAG3K,KAAK4K,EAAG5K,KAAKse,EAAG85B,EAAKC,EAAKC,EAAKj6C,K,2BAItE,SAAe8nC,GAEd,OAAO0R,EAASW,cAAerS,EAAOnmC,KAAK2K,EAAG3K,KAAK4K,EAAG5K,KAAKse,K,2BAI5D,SAAe0rB,GAEd,OAAO6N,EAASY,cAAez4C,KAAK2K,EAAG3K,KAAK4K,EAAG5K,KAAKse,EAAG0rB,K,2BAIxD,SAAe/D,GAEd,OAAOA,EAAIyS,mBAAoB14C,Q,iCAIhC,SAAqBuW,EAAGlY,QAEPkE,IAAXlE,IAEJinB,QAAQM,KAAM,iEACdvnB,EAAS,IAAIgkC,IAId,IACIriB,EAAG4T,EADDjpB,EAAI3K,KAAK2K,EAAGC,EAAI5K,KAAK4K,EAAG0T,EAAIte,KAAKse,EASvCi5B,GAAKzjB,WAAYlpB,EAAGD,GACpB6sC,GAAK1jB,WAAYxV,EAAG3T,GACpB+sC,GAAK5jB,WAAYvd,EAAG5L,GACpB,IAAMwlB,EAAKonB,GAAK5X,IAAK+X,IACftnB,EAAKonB,GAAK7X,IAAK+X,IACrB,GAAKvnB,GAAM,GAAKC,GAAM,EAGrB,OAAO/xB,EAAO88B,KAAMxwB,GAIrBgtC,GAAK7jB,WAAYvd,EAAG3L,GACpB,IAAMylB,EAAKknB,GAAK5X,IAAKgY,IACfgB,EAAKnB,GAAK7X,IAAKgY,IACrB,GAAKtnB,GAAM,GAAKsoB,GAAMtoB,EAGrB,OAAOhyB,EAAO88B,KAAMvwB,GAIrB,IAAMguC,EAAKzoB,EAAKwoB,EAAKtoB,EAAKD,EAC1B,GAAKwoB,GAAM,GAAKzoB,GAAM,GAAKE,GAAM,EAIhC,OAFArQ,EAAImQ,GAAOA,EAAKE,GAEThyB,EAAO88B,KAAMxwB,GAAIkuC,gBAAiBtB,GAAMv3B,GAIhD43B,GAAK9jB,WAAYvd,EAAG+H,GACpB,IAAMw6B,EAAKvB,GAAK5X,IAAKiY,IACfmB,EAAKvB,GAAK7X,IAAKiY,IACrB,GAAKmB,GAAM,GAAKD,GAAMC,EAGrB,OAAO16C,EAAO88B,KAAM7c,GAIrB,IAAM06B,EAAKF,EAAK1oB,EAAKD,EAAK4oB,EAC1B,GAAKC,GAAM,GAAK5oB,GAAM,GAAK2oB,GAAM,EAIhC,OAFAnlB,EAAIxD,GAAOA,EAAK2oB,GAET16C,EAAO88B,KAAMxwB,GAAIkuC,gBAAiBrB,GAAM5jB,GAIhD,IAAMqlB,EAAK5oB,EAAK0oB,EAAKD,EAAKH,EAC1B,GAAKM,GAAM,GAAON,EAAKtoB,GAAQ,GAAOyoB,EAAKC,GAAQ,EAKlD,OAHAtB,GAAK3jB,WAAYxV,EAAG1T,GACpBgpB,GAAM+kB,EAAKtoB,IAAWsoB,EAAKtoB,GAASyoB,EAAKC,IAElC16C,EAAO88B,KAAMvwB,GAAIiuC,gBAAiBpB,GAAM7jB,GAKhD,IAAMslB,EAAQ,GAAMD,EAAKD,EAAKJ,GAK9B,OAHA54B,EAAIg5B,EAAKE,EACTtlB,EAAIglB,EAAKM,EAEF76C,EAAO88B,KAAMxwB,GAAIkuC,gBAAiBtB,GAAMv3B,GAAI64B,gBAAiBrB,GAAM5jB,K,oBAI3E,SAAQoT,GAEP,OAAOA,EAASr8B,EAAEq9B,OAAQhoC,KAAK2K,IAAOq8B,EAASp8B,EAAEo9B,OAAQhoC,KAAK4K,IAAOo8B,EAAS1oB,EAAE0pB,OAAQhoC,KAAKse,M,wBArS9F,SAAkB3T,EAAGC,EAAG0T,EAAGjgB,QAEVkE,IAAXlE,IAEJinB,QAAQM,KAAM,uDACdvnB,EAAS,IAAIgkC,IAIdhkC,EAAOy1B,WAAYxV,EAAG1T,GACtBusC,GAAMrjB,WAAYnpB,EAAGC,GACrBvM,EAAO+tC,MAAO+K,IAEd,IAAMgC,EAAiB96C,EAAO4lC,WAC9B,OAAKkV,EAAiB,EAEd96C,EAAO01B,eAAgB,EAAIjjB,KAAKujB,KAAM8kB,IAIvC96C,EAAOuc,IAAK,EAAG,EAAG,K,0BAM1B,SAAqBurB,EAAOx7B,EAAGC,EAAG0T,EAAGjgB,GAEpC84C,GAAMrjB,WAAYxV,EAAG3T,GACrBysC,GAAMtjB,WAAYlpB,EAAGD,GACrB0sC,GAAMvjB,WAAYqS,EAAOx7B,GAEzB,IAAMyuC,EAAQjC,GAAMxX,IAAKwX,IACnBkC,EAAQlC,GAAMxX,IAAKyX,IACnBkC,EAAQnC,GAAMxX,IAAK0X,IACnBkC,EAAQnC,GAAMzX,IAAKyX,IACnBoC,EAAQpC,GAAMzX,IAAK0X,IAEnB6B,EAAUE,EAAQG,EAAQF,EAAQA,EAUxC,QARgB92C,IAAXlE,IAEJinB,QAAQM,KAAM,0DACdvnB,EAAS,IAAIgkC,IAKC,IAAV6W,EAIJ,OAAO76C,EAAOuc,KAAO,GAAK,GAAK,GAIhC,IAAM6+B,EAAW,EAAIP,EACfQ,GAAMH,EAAQD,EAAQD,EAAQG,GAAUC,EACxCz5B,GAAMo5B,EAAQI,EAAQH,EAAQC,GAAUG,EAG9C,OAAOp7C,EAAOuc,IAAK,EAAI8+B,EAAI15B,EAAGA,EAAG05B,K,2BAIlC,SAAsBvT,EAAOx7B,EAAGC,EAAG0T,GAIlC,OAFAte,KAAKm4C,aAAchS,EAAOx7B,EAAGC,EAAG0T,EAAGg5B,IAE1BA,GAAMx7B,GAAK,GAASw7B,GAAMv7B,GAAK,GAAWu7B,GAAMx7B,EAAIw7B,GAAMv7B,GAAO,I,mBAI3E,SAAcoqB,EAAOmC,EAAIC,EAAIoR,EAAIvB,EAAKC,EAAKC,EAAKj6C,GAS/C,OAPA2B,KAAKm4C,aAAchS,EAAOmC,EAAIC,EAAIoR,EAAIrC,IAEtCj5C,EAAOuc,IAAK,EAAG,GACfvc,EAAOw6C,gBAAiBT,EAAKd,GAAMx7B,GACnCzd,EAAOw6C,gBAAiBR,EAAKf,GAAMv7B,GACnC1d,EAAOw6C,gBAAiBP,EAAKhB,GAAMhb,GAE5Bj+B,I,2BAIR,SAAsBsM,EAAGC,EAAG0T,EAAG0rB,GAM9B,OAJAmN,GAAMrjB,WAAYxV,EAAG1T,GACrBwsC,GAAMtjB,WAAYnpB,EAAGC,GAGZusC,GAAM/K,MAAOgL,IAAQzX,IAAKqK,GAAc,M,KA+M/C4P,GAAa,EAEjB,SAASC,KAERh7C,OAAOC,eAAgBkB,KAAM,KAAM,CAAEP,MAAOm6C,OAE5C55C,KAAKy6B,KAAOxK,KAEZjwB,KAAKwE,KAAO,GACZxE,KAAKimB,KAAO,WAEZjmB,KAAK85C,KAAM,EAEX95C,KAAK+5C,SArrPiB,EAsrPtB/5C,KAAKg6C,KA3rPY,EA4rPjBh6C,KAAKi6C,cAAe,EAEpBj6C,KAAKk6C,QAAU,EACfl6C,KAAKm6C,aAAc,EAEnBn6C,KAAKo6C,SA9qPiB,IA+qPtBp6C,KAAKq6C,SA9qPyB,IA+qP9Br6C,KAAKs6C,cAAgB1tB,EACrB5sB,KAAKu6C,cAAgB,KACrBv6C,KAAKw6C,cAAgB,KACrBx6C,KAAKy6C,mBAAqB,KAE1Bz6C,KAAK06C,UA3qPiB,EA4qPtB16C,KAAK26C,WAAY,EACjB36C,KAAK46C,YAAa,EAElB56C,KAAK66C,iBAAmB,IACxB76C,KAAK86C,YAnjPoB,IAojPzB96C,KAAK+6C,WAAa,EAClB/6C,KAAKg7C,gBAAkB,IACvBh7C,KAAKi7C,YAAc7rB,GACnBpvB,KAAKk7C,aAAe9rB,GACpBpvB,KAAKm7C,aAAe/rB,GACpBpvB,KAAKo7C,cAAe,EAEpBp7C,KAAKq7C,eAAiB,KACtBr7C,KAAKs7C,kBAAmB,EACxBt7C,KAAKu7C,aAAc,EAEnBv7C,KAAKw7C,WAAa,KAElBx7C,KAAKy7C,YAAa,EAElBz7C,KAAK07C,UAAY,KAEjB17C,KAAK27C,eAAgB,EACrB37C,KAAK47C,oBAAsB,EAC3B57C,KAAK67C,mBAAqB,EAE1B77C,KAAK87C,WAAY,EAEjB97C,KAAK+7C,UAAY,EACjB/7C,KAAKg8C,iBAAkB,EACvBh8C,KAAKi8C,oBAAqB,EAE1Bj8C,KAAK2yC,SAAU,EAEf3yC,KAAKk8C,YAAa,EAElBl8C,KAAKizC,SAAW,GAEhBjzC,KAAKi7B,QAAU,EAIhB4e,GAAW16C,UAAYN,OAAOyJ,OAAQzJ,OAAOU,OAAQiwB,GAAgBrwB,WAAa,CAEjFK,YAAaq6C,GAEbsC,YAAY,EAEZC,QAAS,aAETC,gBAAiB,aAEjBC,sBAAuB,WAEtB,OAAOt8C,KAAKq8C,gBAAgB5zC,YAI7B8zC,UAAW,SAAWr1C,GAErB,QAAgB3E,IAAX2E,EAEL,IAAM,IAAMnI,KAAOmI,EAAS,CAE3B,IAAM2T,EAAW3T,EAAQnI,GAEzB,QAAkBwD,IAAbsY,EAQL,GAAa,YAAR9b,EAAL,CAQA,IAAMy9C,EAAex8C,KAAMjB,QAELwD,IAAjBi6C,EAOAA,GAAgBA,EAAaC,QAEjCD,EAAa5hC,IAAKC,GAEL2hC,GAAgBA,EAAazX,WAAiBlqB,GAAYA,EAASkqB,UAEhFyX,EAAarhB,KAAMtgB,GAInB7a,KAAMjB,GAAQ8b,EAfdyK,QAAQM,KAAM,SAAW5lB,KAAKimB,KAAO,MAASlnB,EAAM,8CAVpDumB,QAAQM,KAAM,SAAW5lB,KAAKimB,KAAO,sEACrCjmB,KAAK08C,YAnxPW,IAmxPK7hC,OATrByK,QAAQM,KAAM,oBAAuB7mB,EAAM,+BAyC9Cg2C,OAAQ,SAAW3Z,GAElB,IAAMuhB,OAAoBp6C,IAAT64B,GAAsC,kBAATA,EAEzCuhB,IAEJvhB,EAAO,CACNE,SAAU,GACVK,OAAQ,KAKV,IAAMhd,EAAO,CACZ6c,SAAU,CACTP,QAAS,IACThV,KAAM,WACNwV,UAAW,oBA0Kb,SAASua,EAAkB9vC,GAE1B,IAAMgB,EAAS,GAEf,IAAM,IAAMnI,KAAOmH,EAAQ,CAE1B,IAAMyY,EAAOzY,EAAOnH,UACb4f,EAAK6c,SACZt0B,EAAO/C,KAAMwa,GAId,OAAOzX,EAIR,GArLAyX,EAAK8b,KAAOz6B,KAAKy6B,KACjB9b,EAAKsH,KAAOjmB,KAAKimB,KAEE,KAAdjmB,KAAKwE,OAAcma,EAAKna,KAAOxE,KAAKwE,MAEpCxE,KAAK48C,OAAS58C,KAAK48C,MAAMH,UAAU99B,EAAKi+B,MAAQ58C,KAAK48C,MAAMC,eAExCt6C,IAAnBvC,KAAK88C,YAA0Bn+B,EAAKm+B,UAAY98C,KAAK88C,gBAClCv6C,IAAnBvC,KAAK+8C,YAA0Bp+B,EAAKo+B,UAAY/8C,KAAK+8C,WAErD/8C,KAAKg9C,OAASh9C,KAAKg9C,MAAMP,UAAU99B,EAAKq+B,MAAQh9C,KAAKg9C,MAAMH,UAC3D78C,KAAKi9C,UAAYj9C,KAAKi9C,SAASR,UAAU99B,EAAKs+B,SAAWj9C,KAAKi9C,SAASJ,UACvE78C,KAAKk9C,mBAAgD,IAA3Bl9C,KAAKk9C,oBAA0Bv+B,EAAKu+B,kBAAoBl9C,KAAKk9C,mBAEvFl9C,KAAKm9C,UAAYn9C,KAAKm9C,SAASV,UAAU99B,EAAKw+B,SAAWn9C,KAAKm9C,SAASN,eACpDt6C,IAAnBvC,KAAKo9C,YAA0Bz+B,EAAKy+B,UAAYp9C,KAAKo9C,gBAClC76C,IAAnBvC,KAAKq9C,YAA0B1+B,EAAK0+B,UAAYr9C,KAAKq9C,gBACzB96C,IAA5BvC,KAAKs9C,qBAAmC3+B,EAAK2+B,mBAAqBt9C,KAAKs9C,oBAEvEt9C,KAAKu9C,cAAgBv9C,KAAKu9C,aAAanhB,YAE3Czd,EAAK4+B,aAAev9C,KAAKu9C,aAAaxI,OAAQ3Z,GAAOX,MAIjDz6B,KAAKw9C,uBAAyBx9C,KAAKw9C,sBAAsBphB,YAE7Dzd,EAAK6+B,sBAAwBx9C,KAAKw9C,sBAAsBzI,OAAQ3Z,GAAOX,MAInEz6B,KAAKy9C,oBAAsBz9C,KAAKy9C,mBAAmBrhB,YAEvDzd,EAAK8+B,mBAAqBz9C,KAAKy9C,mBAAmB1I,OAAQ3Z,GAAOX,KACjE9b,EAAK++B,qBAAuB19C,KAAK09C,qBAAqB1I,WAIlDh1C,KAAKuV,KAAOvV,KAAKuV,IAAI6mB,YAAYzd,EAAKpJ,IAAMvV,KAAKuV,IAAIw/B,OAAQ3Z,GAAOX,MACpEz6B,KAAK29C,QAAU39C,KAAK29C,OAAOvhB,YAAYzd,EAAKg/B,OAAS39C,KAAK29C,OAAO5I,OAAQ3Z,GAAOX,MAChFz6B,KAAK49C,UAAY59C,KAAK49C,SAASxhB,YAAYzd,EAAKi/B,SAAW59C,KAAK49C,SAAS7I,OAAQ3Z,GAAOX,MAExFz6B,KAAK69C,UAAY79C,KAAK69C,SAASzhB,YAEnCzd,EAAKk/B,SAAW79C,KAAK69C,SAAS9I,OAAQ3Z,GAAOX,KAC7C9b,EAAKm/B,kBAAoB99C,KAAK89C,mBAI1B99C,KAAK+9C,OAAS/9C,KAAK+9C,MAAM3hB,YAE7Bzd,EAAKo/B,MAAQ/9C,KAAK+9C,MAAMhJ,OAAQ3Z,GAAOX,KACvC9b,EAAKq/B,eAAiBh+C,KAAKg+C,gBAIvBh+C,KAAKi+C,SAAWj+C,KAAKi+C,QAAQ7hB,YAEjCzd,EAAKs/B,QAAUj+C,KAAKi+C,QAAQlJ,OAAQ3Z,GAAOX,KAC3C9b,EAAKu/B,UAAYl+C,KAAKk+C,WAIlBl+C,KAAKm+C,WAAan+C,KAAKm+C,UAAU/hB,YAErCzd,EAAKw/B,UAAYn+C,KAAKm+C,UAAUpJ,OAAQ3Z,GAAOX,KAC/C9b,EAAKy/B,cAAgBp+C,KAAKo+C,cAC1Bz/B,EAAK0/B,YAAcr+C,KAAKq+C,YAAYrJ,WAIhCh1C,KAAKs+C,iBAAmBt+C,KAAKs+C,gBAAgBliB,YAEjDzd,EAAK2/B,gBAAkBt+C,KAAKs+C,gBAAgBvJ,OAAQ3Z,GAAOX,KAC3D9b,EAAK4/B,kBAAoBv+C,KAAKu+C,kBAC9B5/B,EAAK6/B,iBAAmBx+C,KAAKw+C,kBAIzBx+C,KAAKy+C,cAAgBz+C,KAAKy+C,aAAariB,YAAYzd,EAAK8/B,aAAez+C,KAAKy+C,aAAa1J,OAAQ3Z,GAAOX,MACxGz6B,KAAK0+C,cAAgB1+C,KAAK0+C,aAAatiB,YAAYzd,EAAK+/B,aAAe1+C,KAAK0+C,aAAa3J,OAAQ3Z,GAAOX,MAExGz6B,KAAK2+C,aAAe3+C,KAAK2+C,YAAYviB,YAAYzd,EAAKggC,YAAc3+C,KAAK2+C,YAAY5J,OAAQ3Z,GAAOX,MACpGz6B,KAAK4+C,aAAe5+C,KAAK4+C,YAAYxiB,YAAYzd,EAAKigC,YAAc5+C,KAAK4+C,YAAY7J,OAAQ3Z,GAAOX,MAEpGz6B,KAAK6+C,QAAU7+C,KAAK6+C,OAAOziB,YAE/Bzd,EAAKkgC,OAAS7+C,KAAK6+C,OAAO9J,OAAQ3Z,GAAOX,UAEnBl4B,IAAjBvC,KAAK8+C,UAAwBngC,EAAKmgC,QAAU9+C,KAAK8+C,eAIzBv8C,IAAzBvC,KAAK++C,kBAAgCpgC,EAAKogC,gBAAkB/+C,KAAK++C,sBAC3Cx8C,IAAtBvC,KAAKg/C,eAA6BrgC,EAAKqgC,aAAeh/C,KAAKg/C,mBAClCz8C,IAAzBvC,KAAKi/C,kBAAgCtgC,EAAKsgC,gBAAkBj/C,KAAKi/C,iBAEjEj/C,KAAKk/C,aAAel/C,KAAKk/C,YAAY9iB,YAEzCzd,EAAKugC,YAAcl/C,KAAKk/C,YAAYnK,OAAQ3Z,GAAOX,WAIjCl4B,IAAdvC,KAAKspB,OAAqB3K,EAAK2K,KAAOtpB,KAAKspB,MACvB,OAApBtpB,KAAKw7C,aAAsB78B,EAAK68B,WAAax7C,KAAKw7C,iBACzBj5C,IAAzBvC,KAAKm/C,kBAAgCxgC,EAAKwgC,gBAAkBn/C,KAAKm/C,iBAh7PjD,IAk7PhBn/C,KAAK+5C,WAA8Bp7B,EAAKo7B,SAAW/5C,KAAK+5C,UAv7P7C,IAw7PX/5C,KAAKg6C,OAAqBr7B,EAAKq7B,KAAOh6C,KAAKg6C,MAC3Ch6C,KAAKi6C,eAAet7B,EAAKs7B,cAAe,GAExCj6C,KAAKk6C,QAAU,IAAIv7B,EAAKu7B,QAAUl6C,KAAKk6C,UAClB,IAArBl6C,KAAKm6C,cAAuBx7B,EAAKw7B,YAAcn6C,KAAKm6C,aAEzDx7B,EAAK+7B,UAAY16C,KAAK06C,UACtB/7B,EAAKg8B,UAAY36C,KAAK26C,UACtBh8B,EAAKi8B,WAAa56C,KAAK46C,WACvBj8B,EAAK88B,WAAaz7C,KAAKy7C,WAEvB98B,EAAKy8B,aAAep7C,KAAKo7C,aACzBz8B,EAAKk8B,iBAAmB76C,KAAK66C,iBAC7Bl8B,EAAKm8B,YAAc96C,KAAK86C,YACxBn8B,EAAKo8B,WAAa/6C,KAAK+6C,WACvBp8B,EAAKq8B,gBAAkBh7C,KAAKg7C,gBAC5Br8B,EAAKs8B,YAAcj7C,KAAKi7C,YACxBt8B,EAAKu8B,aAAel7C,KAAKk7C,aACzBv8B,EAAKw8B,aAAen7C,KAAKm7C,aAGpBn7C,KAAKy4B,UAA8B,IAAlBz4B,KAAKy4B,WAAiB9Z,EAAK8Z,SAAWz4B,KAAKy4B,WAErC,IAAvBz4B,KAAK27C,gBAAyBh9B,EAAKg9B,eAAgB,GACtB,IAA7B37C,KAAK47C,sBAA4Bj9B,EAAKi9B,oBAAsB57C,KAAK47C,qBACrC,IAA5B57C,KAAK67C,qBAA2Bl9B,EAAKk9B,mBAAqB77C,KAAK67C,oBAE/D77C,KAAKo/C,WAAgC,IAAnBp/C,KAAKo/C,YAAkBzgC,EAAKygC,UAAYp/C,KAAKo/C,gBAC7C78C,IAAlBvC,KAAKq/C,WAAyB1gC,EAAK0gC,SAAWr/C,KAAKq/C,eAClC98C,IAAjBvC,KAAKs/C,UAAwB3gC,EAAK2gC,QAAUt/C,KAAKs/C,cAClC/8C,IAAfvC,KAAKovC,QAAsBzwB,EAAKywB,MAAQpvC,KAAKovC,QAE1B,IAAnBpvC,KAAK87C,YAAqBn9B,EAAKm9B,WAAY,GAE3C97C,KAAK+7C,UAAY,IAAIp9B,EAAKo9B,UAAY/7C,KAAK+7C,YAClB,IAAzB/7C,KAAKg8C,kBAA2Br9B,EAAKq9B,gBAAkBh8C,KAAKg8C,kBAChC,IAA5Bh8C,KAAKi8C,qBAA8Bt9B,EAAKs9B,mBAAqBj8C,KAAKi8C,qBAE/C,IAAnBj8C,KAAKu/C,YAAqB5gC,EAAK4gC,UAAYv/C,KAAKu/C,WAChDv/C,KAAKw/C,mBAAqB,IAAI7gC,EAAK6gC,mBAAqBx/C,KAAKw/C,oBACnC,UAA1Bx/C,KAAKy/C,mBAA+B9gC,EAAK8gC,iBAAmBz/C,KAAKy/C,kBACtC,UAA3Bz/C,KAAK0/C,oBAAgC/gC,EAAK+gC,kBAAoB1/C,KAAK0/C,oBAE7C,IAAtB1/C,KAAK2/C,eAAwBhhC,EAAKghC,cAAe,IAC3B,IAAtB3/C,KAAK4/C,eAAwBjhC,EAAKihC,cAAe,IAC/B,IAAlB5/C,KAAK6/C,WAAoBlhC,EAAKkhC,UAAW,IAEpB,IAArB7/C,KAAK08C,cAAuB/9B,EAAK+9B,YAAc18C,KAAK08C,cAEnC,IAAjB18C,KAAK2yC,UAAoBh0B,EAAKg0B,SAAU,IAEpB,IAApB3yC,KAAKk8C,aAAuBv9B,EAAKu9B,YAAa,GAEV,OAApCj9B,KAAKC,UAAWlf,KAAKizC,YAAsBt0B,EAAKs0B,SAAWjzC,KAAKizC,UAoBhE0J,EAAS,CAEb,IAAMrhB,EAAW0a,EAAkB5a,EAAKE,UAClCK,EAASqa,EAAkB5a,EAAKO,QAEjCL,EAAS98B,OAAS,IAAImgB,EAAK2c,SAAWA,GACtCK,EAAOn9B,OAAS,IAAImgB,EAAKgd,OAASA,GAIxC,OAAOhd,GAIR2f,MAAO,WAEN,OAAO,IAAIt+B,KAAKR,aAAc27B,KAAMn7B,OAIrCm7B,KAAM,SAAW5yB,GAEhBvI,KAAKwE,KAAO+D,EAAO/D,KAEnBxE,KAAK85C,IAAMvxC,EAAOuxC,IAElB95C,KAAK+5C,SAAWxxC,EAAOwxC,SACvB/5C,KAAKg6C,KAAOzxC,EAAOyxC,KACnBh6C,KAAKi6C,aAAe1xC,EAAO0xC,aAE3Bj6C,KAAKk6C,QAAU3xC,EAAO2xC,QACtBl6C,KAAKm6C,YAAc5xC,EAAO4xC,YAE1Bn6C,KAAKo6C,SAAW7xC,EAAO6xC,SACvBp6C,KAAKq6C,SAAW9xC,EAAO8xC,SACvBr6C,KAAKs6C,cAAgB/xC,EAAO+xC,cAC5Bt6C,KAAKu6C,cAAgBhyC,EAAOgyC,cAC5Bv6C,KAAKw6C,cAAgBjyC,EAAOiyC,cAC5Bx6C,KAAKy6C,mBAAqBlyC,EAAOkyC,mBAEjCz6C,KAAK06C,UAAYnyC,EAAOmyC,UACxB16C,KAAK26C,UAAYpyC,EAAOoyC,UACxB36C,KAAK46C,WAAaryC,EAAOqyC,WAEzB56C,KAAK66C,iBAAmBtyC,EAAOsyC,iBAC/B76C,KAAK86C,YAAcvyC,EAAOuyC,YAC1B96C,KAAK+6C,WAAaxyC,EAAOwyC,WACzB/6C,KAAKg7C,gBAAkBzyC,EAAOyyC,gBAC9Bh7C,KAAKi7C,YAAc1yC,EAAO0yC,YAC1Bj7C,KAAKk7C,aAAe3yC,EAAO2yC,aAC3Bl7C,KAAKm7C,aAAe5yC,EAAO4yC,aAC3Bn7C,KAAKo7C,aAAe7yC,EAAO6yC,aAE3B,IAAM0E,EAAYv3C,EAAO8yC,eACrB0E,EAAY,KAEhB,GAAmB,OAAdD,EAAqB,CAEzB,IAAM38C,EAAI28C,EAAUthD,OACpBuhD,EAAY,IAAIh9C,MAAOI,GAEvB,IAAM,IAAI5E,EAAI,EAAGA,IAAM4E,IAAM5E,EAE5BwhD,EAAWxhD,GAAMuhD,EAAWvhD,GAAI+/B,QAgClC,OA1BAt+B,KAAKq7C,eAAiB0E,EACtB//C,KAAKs7C,iBAAmB/yC,EAAO+yC,iBAC/Bt7C,KAAKu7C,YAAchzC,EAAOgzC,YAE1Bv7C,KAAKw7C,WAAajzC,EAAOizC,WAEzBx7C,KAAKy7C,WAAalzC,EAAOkzC,WAEzBz7C,KAAK07C,UAAYnzC,EAAOmzC,UAExB17C,KAAK27C,cAAgBpzC,EAAOozC,cAC5B37C,KAAK47C,oBAAsBrzC,EAAOqzC,oBAClC57C,KAAK67C,mBAAqBtzC,EAAOszC,mBAEjC77C,KAAK87C,UAAYvzC,EAAOuzC,UAExB97C,KAAK+7C,UAAYxzC,EAAOwzC,UACxB/7C,KAAKg8C,gBAAkBzzC,EAAOyzC,gBAC9Bh8C,KAAKi8C,mBAAqB1zC,EAAO0zC,mBAEjCj8C,KAAK2yC,QAAUpqC,EAAOoqC,QAEtB3yC,KAAKk8C,WAAa3zC,EAAO2zC,WAEzBl8C,KAAKizC,SAAWh0B,KAAKrC,MAAOqC,KAAKC,UAAW3W,EAAO0qC,WAE5CjzC,MAIRq+B,QAAS,WAERr+B,KAAK87B,cAAe,CAAE7V,KAAM,eAM9BpnB,OAAOC,eAAgB+6C,GAAW16C,UAAW,cAAe,CAE3Dyb,IAAK,SAAWnb,IAEA,IAAVA,GAAiBO,KAAKi7B,aAM7B,IAAM+kB,GAAiB,CAAE,UAAa,SAAU,aAAgB,SAAU,KAAQ,MAAU,WAAc,QAAU,MAAS,SAC5H,MAAS,SAAU,OAAU,SAAU,MAAS,EAAU,eAAkB,SAAU,KAAQ,IAAU,WAAc,QACtH,MAAS,SAAU,UAAa,SAAU,UAAa,QAAU,WAAc,QAAU,UAAa,SAAU,MAAS,SACzH,eAAkB,QAAU,SAAY,SAAU,QAAW,SAAU,KAAQ,MAAU,SAAY,IAAU,SAAY,MAC3H,cAAiB,SAAU,SAAY,SAAU,UAAa,MAAU,SAAY,SAAU,UAAa,SAAU,YAAe,QACpI,eAAkB,QAAU,WAAc,SAAU,WAAc,SAAU,QAAW,QAAU,WAAc,SAAU,aAAgB,QACzI,cAAiB,QAAU,cAAiB,QAAU,cAAiB,QAAU,cAAiB,MAAU,WAAc,QAC1H,SAAY,SAAU,YAAe,MAAU,QAAW,QAAU,QAAW,QAAU,WAAc,QAAU,UAAa,SAC9H,YAAe,SAAU,YAAe,QAAU,QAAW,SAAU,UAAa,SAAU,WAAc,SAAU,KAAQ,SAC9H,UAAa,SAAU,KAAQ,QAAU,MAAS,MAAU,YAAe,SAAU,KAAQ,QAAU,SAAY,SAAU,QAAW,SACxI,UAAa,SAAU,OAAU,QAAU,MAAS,SAAU,MAAS,SAAU,SAAY,SAAU,cAAiB,SAAU,UAAa,QAC/I,aAAgB,SAAU,UAAa,SAAU,WAAc,SAAU,UAAa,SAAU,qBAAwB,SAAU,UAAa,SAC/I,WAAc,QAAU,UAAa,SAAU,UAAa,SAAU,YAAe,SAAU,cAAiB,QAAU,aAAgB,QAC1I,eAAkB,QAAU,eAAkB,QAAU,eAAkB,SAAU,YAAe,SAAU,KAAQ,MAAU,UAAa,QAC5I,MAAS,SAAU,QAAW,SAAU,OAAU,QAAU,iBAAoB,QAAU,WAAc,IAAU,aAAgB,SAClI,aAAgB,QAAU,eAAkB,QAAU,gBAAmB,QAAU,kBAAqB,MAAU,gBAAmB,QACrI,gBAAmB,SAAU,aAAgB,QAAU,UAAa,SAAU,UAAa,SAAU,SAAY,SAAU,YAAe,SAC1I,KAAQ,IAAU,QAAW,SAAU,MAAS,QAAU,UAAa,QAAU,OAAU,SAAU,UAAa,SAAU,OAAU,SACtI,cAAiB,SAAU,UAAa,SAAU,cAAiB,SAAU,cAAiB,SAAU,WAAc,SAAU,UAAa,SAC7I,KAAQ,SAAU,KAAQ,SAAU,KAAQ,SAAU,WAAc,SAAU,OAAU,QAAU,cAAiB,QAAU,IAAO,SAAU,UAAa,SAC3J,UAAa,QAAU,YAAe,QAAU,OAAU,SAAU,WAAc,SAAU,SAAY,QAAU,SAAY,SAC9H,OAAU,SAAU,OAAU,SAAU,QAAW,QAAU,UAAa,QAAU,UAAa,QAAU,UAAa,QAAU,KAAQ,SAC1I,YAAe,MAAU,UAAa,QAAU,IAAO,SAAU,KAAQ,MAAU,QAAW,SAAU,OAAU,SAAU,UAAa,QACzI,OAAU,SAAU,MAAS,SAAU,MAAS,SAAU,WAAc,SAAU,OAAU,SAAU,YAAe,UAEhHC,GAAQ,CAAEtlC,EAAG,EAAGzX,EAAG,EAAG8F,EAAG,GACzBk3C,GAAQ,CAAEvlC,EAAG,EAAGzX,EAAG,EAAG8F,EAAG,GAE/B,SAASm3C,GAAS5pC,EAAGuc,EAAGrC,GAIvB,OAFKA,EAAI,IAAIA,GAAK,GACbA,EAAI,IAAIA,GAAK,GACbA,EAAI,EAAI,EAAWla,EAAgB,GAAVuc,EAAIvc,GAAUka,EACvCA,EAAI,GAAeqC,EACnBrC,EAAI,EAAI,EAAWla,EAAgB,GAAVuc,EAAIvc,IAAY,EAAI,EAAIka,GAC/Cla,EAIR,SAAS6pC,GAAc9hC,GAEtB,OAASA,EAAI,OAAgB,YAAJA,EAAmBxN,KAAK8f,IAAS,YAAJtS,EAAmB,YAAc,KAIxF,SAAS+hC,GAAc/hC,GAEtB,OAASA,EAAI,SAAkB,MAAJA,EAAY,MAAUxN,KAAK8f,IAAKtS,EAAG,QAAc,K,IAIvEgiC,G,WAEL,WAAaloB,EAAGlT,EAAGta,GAElB,OAFsB,yBAEXrI,IAAN2iB,QAAyB3iB,IAANqI,EAGhB5K,KAAK4a,IAAKwd,GAIXp4B,KAAKugD,OAAQnoB,EAAGlT,EAAGta,G,uCAI3B,SAAKnL,GAgBJ,OAdKA,GAASA,EAAMg9C,QAEnBz8C,KAAKm7B,KAAM17B,GAEiB,kBAAVA,EAElBO,KAAKwgD,OAAQ/gD,GAEe,kBAAVA,GAElBO,KAAKygD,SAAUhhD,GAITO,O,uBAIR,SAAW2zB,GAMV,OAJA3zB,KAAKo4B,EAAIzE,EACT3zB,KAAKklB,EAAIyO,EACT3zB,KAAK4K,EAAI+oB,EAEF3zB,O,oBAIR,SAAQ0gD,GAQP,OANAA,EAAM5vC,KAAKmgB,MAAOyvB,GAElB1gD,KAAKo4B,GAAMsoB,GAAO,GAAK,KAAQ,IAC/B1gD,KAAKklB,GAAMw7B,GAAO,EAAI,KAAQ,IAC9B1gD,KAAK4K,GAAY,IAAN81C,GAAc,IAElB1gD,O,oBAIR,SAAQo4B,EAAGlT,EAAGta,GAMb,OAJA5K,KAAKo4B,EAAIA,EACTp4B,KAAKklB,EAAIA,EACTllB,KAAK4K,EAAIA,EAEF5K,O,oBAIR,SAAQ2a,EAAGzX,EAAG8F,GAOb,GAJA2R,EAAI4V,GAAiB5V,EAAG,GACxBzX,EAAIotB,GAASptB,EAAG,EAAG,GACnB8F,EAAIsnB,GAAStnB,EAAG,EAAG,GAER,IAAN9F,EAEJlD,KAAKo4B,EAAIp4B,KAAKklB,EAAIllB,KAAK4K,EAAI5B,MAErB,CAEN,IAAMuN,EAAIvN,GAAK,GAAMA,GAAM,EAAI9F,GAAM8F,EAAI9F,EAAM8F,EAAI9F,EAC7C4vB,EAAM,EAAI9pB,EAAMuN,EAEtBvW,KAAKo4B,EAAI+nB,GAASrtB,EAAGvc,EAAGoE,EAAI,EAAI,GAChC3a,KAAKklB,EAAIi7B,GAASrtB,EAAGvc,EAAGoE,GACxB3a,KAAK4K,EAAIu1C,GAASrtB,EAAGvc,EAAGoE,EAAI,EAAI,GAIjC,OAAO3a,O,sBAIR,SAAUwZ,GAET,SAASmnC,EAAaC,QAELr+C,IAAXq+C,GAEAC,WAAYD,GAAW,GAE3Bt7B,QAAQM,KAAM,mCAAqCpM,EAAQ,qBAO7D,IAAI+D,EAEJ,GAAKA,EAAI,+BAA+BD,KAAM9D,GAAU,CAIvD,IAAIojC,EACEp4C,EAAO+Y,EAAG,GACVujC,EAAavjC,EAAG,GAEtB,OAAS/Y,GAER,IAAK,MACL,IAAK,OAEJ,GAAKo4C,EAAQ,+DAA+Dt/B,KAAMwjC,GASjF,OANA9gD,KAAKo4B,EAAItnB,KAAKiE,IAAK,IAAKgsC,SAAUnE,EAAO,GAAK,KAAS,IACvD58C,KAAKklB,EAAIpU,KAAKiE,IAAK,IAAKgsC,SAAUnE,EAAO,GAAK,KAAS,IACvD58C,KAAK4K,EAAIkG,KAAKiE,IAAK,IAAKgsC,SAAUnE,EAAO,GAAK,KAAS,IAEvD+D,EAAa/D,EAAO,IAEb58C,KAIR,GAAK48C,EAAQ,qEAAqEt/B,KAAMwjC,GASvF,OANA9gD,KAAKo4B,EAAItnB,KAAKiE,IAAK,IAAKgsC,SAAUnE,EAAO,GAAK,KAAS,IACvD58C,KAAKklB,EAAIpU,KAAKiE,IAAK,IAAKgsC,SAAUnE,EAAO,GAAK,KAAS,IACvD58C,KAAK4K,EAAIkG,KAAKiE,IAAK,IAAKgsC,SAAUnE,EAAO,GAAK,KAAS,IAEvD+D,EAAa/D,EAAO,IAEb58C,KAIR,MAED,IAAK,MACL,IAAK,OAEJ,GAAK48C,EAAQ,yEAAyEt/B,KAAMwjC,GAAe,CAG1G,IAAMnmC,EAAIkmC,WAAYjE,EAAO,IAAQ,IAC/B15C,EAAI69C,SAAUnE,EAAO,GAAK,IAAO,IACjC5zC,EAAI+3C,SAAUnE,EAAO,GAAK,IAAO,IAIvC,OAFA+D,EAAa/D,EAAO,IAEb58C,KAAKghD,OAAQrmC,EAAGzX,EAAG8F,UAQvB,GAAKuU,EAAI,oBAAoBD,KAAM9D,GAAU,CAInD,IAAMknC,EAAMnjC,EAAG,GACT+L,EAAOo3B,EAAIliD,OAEjB,GAAc,IAAT8qB,EAOJ,OAJAtpB,KAAKo4B,EAAI2oB,SAAUL,EAAIh1C,OAAQ,GAAMg1C,EAAIh1C,OAAQ,GAAK,IAAO,IAC7D1L,KAAKklB,EAAI67B,SAAUL,EAAIh1C,OAAQ,GAAMg1C,EAAIh1C,OAAQ,GAAK,IAAO,IAC7D1L,KAAK4K,EAAIm2C,SAAUL,EAAIh1C,OAAQ,GAAMg1C,EAAIh1C,OAAQ,GAAK,IAAO,IAEtD1L,KAED,GAAc,IAATspB,EAOX,OAJAtpB,KAAKo4B,EAAI2oB,SAAUL,EAAIh1C,OAAQ,GAAMg1C,EAAIh1C,OAAQ,GAAK,IAAO,IAC7D1L,KAAKklB,EAAI67B,SAAUL,EAAIh1C,OAAQ,GAAMg1C,EAAIh1C,OAAQ,GAAK,IAAO,IAC7D1L,KAAK4K,EAAIm2C,SAAUL,EAAIh1C,OAAQ,GAAMg1C,EAAIh1C,OAAQ,GAAK,IAAO,IAEtD1L,KAMT,OAAKwZ,GAASA,EAAMhb,OAAS,EAErBwB,KAAKihD,aAAcznC,GAIpBxZ,O,0BAIR,SAAcwZ,GAGb,IAAMknC,EAAMV,GAAgBxmC,EAAMjM,eAclC,YAZahL,IAARm+C,EAGJ1gD,KAAKwgD,OAAQE,GAKbp7B,QAAQM,KAAM,8BAAgCpM,GAIxCxZ,O,mBAIR,WAEC,OAAO,IAAIA,KAAKR,YAAaQ,KAAKo4B,EAAGp4B,KAAKklB,EAAGllB,KAAK4K,K,kBAInD,SAAMgyC,GAML,OAJA58C,KAAKo4B,EAAIwkB,EAAMxkB,EACfp4B,KAAKklB,EAAI03B,EAAM13B,EACfllB,KAAK4K,EAAIgyC,EAAMhyC,EAER5K,O,+BAIR,SAAmB48C,GAA2B,IAApBsE,EAAoB,uDAAN,EAMvC,OAJAlhD,KAAKo4B,EAAItnB,KAAK8f,IAAKgsB,EAAMxkB,EAAG8oB,GAC5BlhD,KAAKklB,EAAIpU,KAAK8f,IAAKgsB,EAAM13B,EAAGg8B,GAC5BlhD,KAAK4K,EAAIkG,KAAK8f,IAAKgsB,EAAMhyC,EAAGs2C,GAErBlhD,O,+BAIR,SAAmB48C,GAA2B,IAApBsE,EAAoB,uDAAN,EAEjCC,EAAgBD,EAAc,EAAQ,EAAMA,EAAgB,EAMlE,OAJAlhD,KAAKo4B,EAAItnB,KAAK8f,IAAKgsB,EAAMxkB,EAAG+oB,GAC5BnhD,KAAKklB,EAAIpU,KAAK8f,IAAKgsB,EAAM13B,EAAGi8B,GAC5BnhD,KAAK4K,EAAIkG,KAAK8f,IAAKgsB,EAAMhyC,EAAGu2C,GAErBnhD,O,kCAIR,SAAsBkhD,GAIrB,OAFAlhD,KAAKohD,kBAAmBphD,KAAMkhD,GAEvBlhD,O,kCAIR,SAAsBkhD,GAIrB,OAFAlhD,KAAKqhD,kBAAmBrhD,KAAMkhD,GAEvBlhD,O,8BAIR,SAAkB48C,GAMjB,OAJA58C,KAAKo4B,EAAIgoB,GAAcxD,EAAMxkB,GAC7Bp4B,KAAKklB,EAAIk7B,GAAcxD,EAAM13B,GAC7BllB,KAAK4K,EAAIw1C,GAAcxD,EAAMhyC,GAEtB5K,O,8BAIR,SAAkB48C,GAMjB,OAJA58C,KAAKo4B,EAAIioB,GAAczD,EAAMxkB,GAC7Bp4B,KAAKklB,EAAIm7B,GAAczD,EAAM13B,GAC7BllB,KAAK4K,EAAIy1C,GAAczD,EAAMhyC,GAEtB5K,O,iCAIR,WAIC,OAFAA,KAAKshD,iBAAkBthD,MAEhBA,O,iCAIR,WAIC,OAFAA,KAAKuhD,iBAAkBvhD,MAEhBA,O,oBAIR,WAEC,OAAkB,IAATA,KAAKo4B,GAAa,GAAgB,IAATp4B,KAAKklB,GAAa,EAAe,IAATllB,KAAK4K,GAAa,I,0BAI7E,WAEC,OAAS,SAAW5K,KAAK68C,SAASp0C,SAAU,KAAOgC,OAAS,K,oBAI7D,SAAQpM,QAISkE,IAAXlE,IAEJinB,QAAQM,KAAM,iDACdvnB,EAAS,CAAEsc,EAAG,EAAGzX,EAAG,EAAG8F,EAAG,IAI3B,IAKIw4C,EAAKC,EALHrpB,EAAIp4B,KAAKo4B,EAAGlT,EAAIllB,KAAKklB,EAAGta,EAAI5K,KAAK4K,EAEjCoK,EAAMlE,KAAKkE,IAAKojB,EAAGlT,EAAGta,GACtBmK,EAAMjE,KAAKiE,IAAKqjB,EAAGlT,EAAGta,GAGtB82C,GAAc3sC,EAAMC,GAAQ,EAElC,GAAKD,IAAQC,EAEZwsC,EAAM,EACNC,EAAa,MAEP,CAEN,IAAM1vC,EAAQiD,EAAMD,EAIpB,OAFA0sC,EAAaC,GAAa,GAAM3vC,GAAUiD,EAAMD,GAAQhD,GAAU,EAAIiD,EAAMD,GAEnEC,GAER,KAAKojB,EAAGopB,GAAQt8B,EAAIta,GAAMmH,GAAUmT,EAAIta,EAAI,EAAI,GAAK,MACrD,KAAKsa,EAAGs8B,GAAQ52C,EAAIwtB,GAAMrmB,EAAQ,EAAG,MACrC,KAAKnH,EAAG42C,GAAQppB,EAAIlT,GAAMnT,EAAQ,EAInCyvC,GAAO,EAQR,OAJAnjD,EAAOsc,EAAI6mC,EACXnjD,EAAO6E,EAAIu+C,EACXpjD,EAAO2K,EAAI04C,EAEJrjD,I,sBAIR,WAEC,MAAO,QAAsB,IAAT2B,KAAKo4B,EAAY,GAAM,KAAmB,IAATp4B,KAAKklB,EAAY,GAAM,KAAmB,IAATllB,KAAK4K,EAAY,GAAM,M,uBAI9G,SAAW+P,EAAGzX,EAAG8F,GAQhB,OANAhJ,KAAK2hD,OAAQ1B,IAEbA,GAAMtlC,GAAKA,EAAGslC,GAAM/8C,GAAKA,EAAG+8C,GAAMj3C,GAAKA,EAEvChJ,KAAKghD,OAAQf,GAAMtlC,EAAGslC,GAAM/8C,EAAG+8C,GAAMj3C,GAE9BhJ,O,iBAIR,SAAK48C,GAMJ,OAJA58C,KAAKo4B,GAAKwkB,EAAMxkB,EAChBp4B,KAAKklB,GAAK03B,EAAM13B,EAChBllB,KAAK4K,GAAKgyC,EAAMhyC,EAET5K,O,uBAIR,SAAW4hD,EAAQC,GAMlB,OAJA7hD,KAAKo4B,EAAIwpB,EAAOxpB,EAAIypB,EAAOzpB,EAC3Bp4B,KAAKklB,EAAI08B,EAAO18B,EAAI28B,EAAO38B,EAC3BllB,KAAK4K,EAAIg3C,EAAOh3C,EAAIi3C,EAAOj3C,EAEpB5K,O,uBAIR,SAAWkD,GAMV,OAJAlD,KAAKo4B,GAAKl1B,EACVlD,KAAKklB,GAAKhiB,EACVlD,KAAK4K,GAAK1H,EAEHlD,O,iBAIR,SAAK48C,GAMJ,OAJA58C,KAAKo4B,EAAItnB,KAAKkE,IAAK,EAAGhV,KAAKo4B,EAAIwkB,EAAMxkB,GACrCp4B,KAAKklB,EAAIpU,KAAKkE,IAAK,EAAGhV,KAAKklB,EAAI03B,EAAM13B,GACrCllB,KAAK4K,EAAIkG,KAAKkE,IAAK,EAAGhV,KAAK4K,EAAIgyC,EAAMhyC,GAE9B5K,O,sBAIR,SAAU48C,GAMT,OAJA58C,KAAKo4B,GAAKwkB,EAAMxkB,EAChBp4B,KAAKklB,GAAK03B,EAAM13B,EAChBllB,KAAK4K,GAAKgyC,EAAMhyC,EAET5K,O,4BAIR,SAAgBkD,GAMf,OAJAlD,KAAKo4B,GAAKl1B,EACVlD,KAAKklB,GAAKhiB,EACVlD,KAAK4K,GAAK1H,EAEHlD,O,kBAIR,SAAM48C,EAAOhoB,GAMZ,OAJA50B,KAAKo4B,IAAOwkB,EAAMxkB,EAAIp4B,KAAKo4B,GAAMxD,EACjC50B,KAAKklB,IAAO03B,EAAM13B,EAAIllB,KAAKklB,GAAM0P,EACjC50B,KAAK4K,IAAOgyC,EAAMhyC,EAAI5K,KAAK4K,GAAMgqB,EAE1B50B,O,wBAIR,SAAY4hD,EAAQC,EAAQjtB,GAM3B,OAJA50B,KAAKo4B,EAAIwpB,EAAOxpB,GAAMypB,EAAOzpB,EAAIwpB,EAAOxpB,GAAMxD,EAC9C50B,KAAKklB,EAAI08B,EAAO18B,GAAM28B,EAAO38B,EAAI08B,EAAO18B,GAAM0P,EAC9C50B,KAAK4K,EAAIg3C,EAAOh3C,GAAMi3C,EAAOj3C,EAAIg3C,EAAOh3C,GAAMgqB,EAEvC50B,O,qBAIR,SAAS48C,EAAOhoB,GAEf50B,KAAK2hD,OAAQ1B,IACbrD,EAAM+E,OAAQzB,IAEd,IAAMvlC,EAAI6V,GAAMyvB,GAAMtlC,EAAGulC,GAAMvlC,EAAGia,GAC5B1xB,EAAIstB,GAAMyvB,GAAM/8C,EAAGg9C,GAAMh9C,EAAG0xB,GAC5B5rB,EAAIwnB,GAAMyvB,GAAMj3C,EAAGk3C,GAAMl3C,EAAG4rB,GAIlC,OAFA50B,KAAKghD,OAAQrmC,EAAGzX,EAAG8F,GAEZhJ,O,oBAIR,SAAQse,GAEP,OAASA,EAAE8Z,IAAMp4B,KAAKo4B,GAAS9Z,EAAE4G,IAAMllB,KAAKklB,GAAS5G,EAAE1T,IAAM5K,KAAK4K,I,uBAInE,SAAW+kB,GAAoB,IAAblS,EAAa,uDAAJ,EAM1B,OAJAzd,KAAKo4B,EAAIzI,EAAOlS,GAChBzd,KAAKklB,EAAIyK,EAAOlS,EAAS,GACzBzd,KAAK4K,EAAI+kB,EAAOlS,EAAS,GAElBzd,O,qBAIR,WAAkC,IAAzB2vB,EAAyB,uDAAjB,GAAIlS,EAAa,uDAAJ,EAM7B,OAJAkS,EAAOlS,GAAWzd,KAAKo4B,EACvBzI,EAAOlS,EAAS,GAAMzd,KAAKklB,EAC3ByK,EAAOlS,EAAS,GAAMzd,KAAK4K,EAEpB+kB,I,iCAIR,SAAqBnJ,EAAW3a,GAgB/B,OAdA7L,KAAKo4B,EAAI5R,EAAUuO,KAAMlpB,GACzB7L,KAAKklB,EAAIsB,EAAUwO,KAAMnpB,GACzB7L,KAAK4K,EAAI4b,EAAUiX,KAAM5xB,IAEK,IAAzB2a,EAAUs7B,aAId9hD,KAAKo4B,GAAK,IACVp4B,KAAKklB,GAAK,IACVllB,KAAK4K,GAAK,KAIJ5K,O,oBAIR,WAEC,OAAOA,KAAK68C,a,KAMdyD,GAAMyB,MAAQ/B,GAEdM,GAAMnhD,UAAUs9C,SAAU,EAC1B6D,GAAMnhD,UAAUi5B,EAAI,EACpBkoB,GAAMnhD,UAAU+lB,EAAI,EACpBo7B,GAAMnhD,UAAUyL,EAAI,E,IAkCdo3C,G,kDAEL,WAAazM,GAAa,kCAEzB,gBAEKtvB,KAAO,oBAEZ,EAAK22B,MAAQ,IAAI0D,GAAO,UAExB,EAAK/qC,IAAM,KAEX,EAAKsoC,SAAW,KAChB,EAAKC,kBAAoB,EAEzB,EAAKC,MAAQ,KACb,EAAKC,eAAiB,EAEtB,EAAKY,YAAc,KAEnB,EAAKhB,SAAW,KAEhB,EAAKiB,OAAS,KACd,EAAKC,QA3uRmB,EA4uRxB,EAAKE,aAAe,EACpB,EAAKC,gBAAkB,IAEvB,EAAKM,WAAY,EACjB,EAAKC,mBAAqB,EAC1B,EAAKC,iBAAmB,QACxB,EAAKC,kBAAoB,QAEzB,EAAKG,UAAW,EAChB,EAAKF,cAAe,EAEpB,EAAKpD,UAAWhH,GAjCS,E,wCAqC1B,SAAMhtC,GA+BL,OA7BA,4DAAYA,GAEZvI,KAAK48C,MAAMzhB,KAAM5yB,EAAOq0C,OAExB58C,KAAKuV,IAAMhN,EAAOgN,IAElBvV,KAAK69C,SAAWt1C,EAAOs1C,SACvB79C,KAAK89C,kBAAoBv1C,EAAOu1C,kBAEhC99C,KAAK+9C,MAAQx1C,EAAOw1C,MACpB/9C,KAAKg+C,eAAiBz1C,EAAOy1C,eAE7Bh+C,KAAK4+C,YAAcr2C,EAAOq2C,YAE1B5+C,KAAK49C,SAAWr1C,EAAOq1C,SAEvB59C,KAAK6+C,OAASt2C,EAAOs2C,OACrB7+C,KAAK8+C,QAAUv2C,EAAOu2C,QACtB9+C,KAAKg/C,aAAez2C,EAAOy2C,aAC3Bh/C,KAAKi/C,gBAAkB12C,EAAO02C,gBAE9Bj/C,KAAKu/C,UAAYh3C,EAAOg3C,UACxBv/C,KAAKw/C,mBAAqBj3C,EAAOi3C,mBACjCx/C,KAAKy/C,iBAAmBl3C,EAAOk3C,iBAC/Bz/C,KAAK0/C,kBAAoBn3C,EAAOm3C,kBAEhC1/C,KAAK6/C,SAAWt3C,EAAOs3C,SACvB7/C,KAAK2/C,aAAep3C,EAAOo3C,aAEpB3/C,S,GAtEuB65C,IA4EhCmI,GAAkB7iD,UAAU8iD,qBAAsB,EAElD,IAAMC,GAAY,IAAkB7f,GAC9B8f,GAAW,IAAkBzuB,GAE7B0uB,G,WAEL,WAAazyB,EAAO0yB,EAAUP,GAE7B,GAF0C,oBAErC/+C,MAAMC,QAAS2sB,GAEnB,MAAM,IAAIxxB,UAAW,yDAItB6B,KAAKwE,KAAO,GAEZxE,KAAK2vB,MAAQA,EACb3vB,KAAKqiD,SAAWA,EAChBriD,KAAKwlC,WAAkBjjC,IAAVotB,EAAsBA,EAAMnxB,OAAS6jD,EAAW,EAC7DriD,KAAK8hD,YAA4B,IAAfA,EAElB9hD,KAAKsiD,MAAQjzB,GACbrvB,KAAKuiD,YAAc,CAAE9kC,OAAQ,EAAG+nB,OAAS,GAEzCxlC,KAAKi7B,QAAU,EAEfj7B,KAAKwiD,iBAAmB,a,6CAIzB,SAAiB/iD,IAED,IAAVA,GAAiBO,KAAKi7B,Y,sBAI5B,SAAUx7B,GAIT,OAFAO,KAAKsiD,MAAQ7iD,EAENO,O,kBAIR,SAAMuI,GAUL,OARAvI,KAAKwE,KAAO+D,EAAO/D,KACnBxE,KAAK2vB,MAAQ,IAAIpnB,EAAOonB,MAAMnwB,YAAa+I,EAAOonB,OAClD3vB,KAAKqiD,SAAW95C,EAAO85C,SACvBriD,KAAKwlC,MAAQj9B,EAAOi9B,MACpBxlC,KAAK8hD,WAAav5C,EAAOu5C,WAEzB9hD,KAAKsiD,MAAQ/5C,EAAO+5C,MAEbtiD,O,oBAIR,SAAQyiD,EAAQj8B,EAAWk8B,GAE1BD,GAAUziD,KAAKqiD,SACfK,GAAUl8B,EAAU67B,SAEpB,IAAM,IAAI9jD,EAAI,EAAGyK,EAAIhJ,KAAKqiD,SAAU9jD,EAAIyK,EAAGzK,IAE1CyB,KAAK2vB,MAAO8yB,EAASlkD,GAAMioB,EAAUmJ,MAAO+yB,EAASnkD,GAItD,OAAOyB,O,uBAIR,SAAW2vB,GAIV,OAFA3vB,KAAK2vB,MAAM/U,IAAK+U,GAET3vB,O,6BAIR,SAAiB2iD,GAKhB,IAHA,IAAMhzB,EAAQ3vB,KAAK2vB,MACflS,EAAS,EAEHlf,EAAI,EAAGyK,EAAI25C,EAAOnkD,OAAQD,EAAIyK,EAAGzK,IAAO,CAEjD,IAAIq+C,EAAQ+F,EAAQpkD,QAELgE,IAAVq6C,IAEJt3B,QAAQM,KAAM,8DAA+DrnB,GAC7Eq+C,EAAQ,IAAI0D,IAIb3wB,EAAOlS,KAAcm/B,EAAMxkB,EAC3BzI,EAAOlS,KAAcm/B,EAAM13B,EAC3ByK,EAAOlS,KAAcm/B,EAAMhyC,EAI5B,OAAO5K,O,+BAIR,SAAmB4iD,GAKlB,IAHA,IAAMjzB,EAAQ3vB,KAAK2vB,MACflS,EAAS,EAEHlf,EAAI,EAAGyK,EAAI45C,EAAQpkD,OAAQD,EAAIyK,EAAGzK,IAAO,CAElD,IAAI6nC,EAASwc,EAASrkD,QAENgE,IAAX6jC,IAEJ9gB,QAAQM,KAAM,iEAAkErnB,GAChF6nC,EAAS,IAAI1S,IAId/D,EAAOlS,KAAc2oB,EAAOtqB,EAC5B6T,EAAOlS,KAAc2oB,EAAOrqB,EAI7B,OAAO/b,O,+BAIR,SAAmB4iD,GAKlB,IAHA,IAAMjzB,EAAQ3vB,KAAK2vB,MACflS,EAAS,EAEHlf,EAAI,EAAGyK,EAAI45C,EAAQpkD,OAAQD,EAAIyK,EAAGzK,IAAO,CAElD,IAAI6nC,EAASwc,EAASrkD,QAENgE,IAAX6jC,IAEJ9gB,QAAQM,KAAM,iEAAkErnB,GAChF6nC,EAAS,IAAI/D,IAId1S,EAAOlS,KAAc2oB,EAAOtqB,EAC5B6T,EAAOlS,KAAc2oB,EAAOrqB,EAC5B4T,EAAOlS,KAAc2oB,EAAO9J,EAI7B,OAAOt8B,O,+BAIR,SAAmB4iD,GAKlB,IAHA,IAAMjzB,EAAQ3vB,KAAK2vB,MACflS,EAAS,EAEHlf,EAAI,EAAGyK,EAAI45C,EAAQpkD,OAAQD,EAAIyK,EAAGzK,IAAO,CAElD,IAAI6nC,EAASwc,EAASrkD,QAENgE,IAAX6jC,IAEJ9gB,QAAQM,KAAM,iEAAkErnB,GAChF6nC,EAAS,IAAI/J,IAId1M,EAAOlS,KAAc2oB,EAAOtqB,EAC5B6T,EAAOlS,KAAc2oB,EAAOrqB,EAC5B4T,EAAOlS,KAAc2oB,EAAO9J,EAC5B3M,EAAOlS,KAAc2oB,EAAOxS,EAI7B,OAAO5zB,O,0BAIR,SAAcud,GAEb,GAAuB,IAAlBvd,KAAKqiD,SAET,IAAM,IAAI9jD,EAAI,EAAGyK,EAAIhJ,KAAKwlC,MAAOjnC,EAAIyK,EAAGzK,IAEvC4jD,GAASU,oBAAqB7iD,KAAMzB,GACpC4jD,GAASnmB,aAAcze,GAEvBvd,KAAK8iD,MAAOvkD,EAAG4jD,GAASrmC,EAAGqmC,GAASpmC,QAI/B,GAAuB,IAAlB/b,KAAKqiD,SAEhB,IAAM,IAAI9jD,EAAI,EAAGyK,EAAIhJ,KAAKwlC,MAAOjnC,EAAIyK,EAAGzK,IAEvC2jD,GAAUW,oBAAqB7iD,KAAMzB,GACrC2jD,GAAUlmB,aAAcze,GAExBvd,KAAK+iD,OAAQxkD,EAAG2jD,GAAUpmC,EAAGomC,GAAUnmC,EAAGmmC,GAAU5lB,GAMtD,OAAOt8B,O,0BAIR,SAAcud,GAEb,IAAM,IAAIhf,EAAI,EAAGyK,EAAIhJ,KAAKwlC,MAAOjnC,EAAIyK,EAAGzK,IAEvC2jD,GAAUpmC,EAAI9b,KAAK+0B,KAAMx2B,GACzB2jD,GAAUnmC,EAAI/b,KAAKg1B,KAAMz2B,GACzB2jD,GAAU5lB,EAAIt8B,KAAKy9B,KAAMl/B,GAEzB2jD,GAAU9e,aAAc7lB,GAExBvd,KAAK+iD,OAAQxkD,EAAG2jD,GAAUpmC,EAAGomC,GAAUnmC,EAAGmmC,GAAU5lB,GAIrD,OAAOt8B,O,+BAIR,SAAmBud,GAElB,IAAM,IAAIhf,EAAI,EAAGyK,EAAIhJ,KAAKwlC,MAAOjnC,EAAIyK,EAAGzK,IAEvC2jD,GAAUpmC,EAAI9b,KAAK+0B,KAAMx2B,GACzB2jD,GAAUnmC,EAAI/b,KAAKg1B,KAAMz2B,GACzB2jD,GAAU5lB,EAAIt8B,KAAKy9B,KAAMl/B,GAEzB2jD,GAAUc,kBAAmBzlC,GAE7Bvd,KAAK+iD,OAAQxkD,EAAG2jD,GAAUpmC,EAAGomC,GAAUnmC,EAAGmmC,GAAU5lB,GAIrD,OAAOt8B,O,gCAIR,SAAoBud,GAEnB,IAAM,IAAIhf,EAAI,EAAGyK,EAAIhJ,KAAKwlC,MAAOjnC,EAAIyK,EAAGzK,IAEvC2jD,GAAUpmC,EAAI9b,KAAK+0B,KAAMx2B,GACzB2jD,GAAUnmC,EAAI/b,KAAKg1B,KAAMz2B,GACzB2jD,GAAU5lB,EAAIt8B,KAAKy9B,KAAMl/B,GAEzB2jD,GAAU5V,mBAAoB/uB,GAE9Bvd,KAAK+iD,OAAQxkD,EAAG2jD,GAAUpmC,EAAGomC,GAAUnmC,EAAGmmC,GAAU5lB,GAIrD,OAAOt8B,O,iBAIR,SAAKP,GAAoB,IAAbge,EAAa,uDAAJ,EAIpB,OAFAzd,KAAK2vB,MAAM/U,IAAKnb,EAAOge,GAEhBzd,O,kBAIR,SAAM6L,GAEL,OAAO7L,KAAK2vB,MAAO9jB,EAAQ7L,KAAKqiD,Y,kBAIjC,SAAMx2C,EAAOiQ,GAIZ,OAFA9b,KAAK2vB,MAAO9jB,EAAQ7L,KAAKqiD,UAAavmC,EAE/B9b,O,kBAIR,SAAM6L,GAEL,OAAO7L,KAAK2vB,MAAO9jB,EAAQ7L,KAAKqiD,SAAW,K,kBAI5C,SAAMx2C,EAAOkQ,GAIZ,OAFA/b,KAAK2vB,MAAO9jB,EAAQ7L,KAAKqiD,SAAW,GAAMtmC,EAEnC/b,O,kBAIR,SAAM6L,GAEL,OAAO7L,KAAK2vB,MAAO9jB,EAAQ7L,KAAKqiD,SAAW,K,kBAI5C,SAAMx2C,EAAOywB,GAIZ,OAFAt8B,KAAK2vB,MAAO9jB,EAAQ7L,KAAKqiD,SAAW,GAAM/lB,EAEnCt8B,O,kBAIR,SAAM6L,GAEL,OAAO7L,KAAK2vB,MAAO9jB,EAAQ7L,KAAKqiD,SAAW,K,kBAI5C,SAAMx2C,EAAO+nB,GAIZ,OAFA5zB,KAAK2vB,MAAO9jB,EAAQ7L,KAAKqiD,SAAW,GAAMzuB,EAEnC5zB,O,mBAIR,SAAO6L,EAAOiQ,EAAGC,GAOhB,OALAlQ,GAAS7L,KAAKqiD,SAEdriD,KAAK2vB,MAAO9jB,EAAQ,GAAMiQ,EAC1B9b,KAAK2vB,MAAO9jB,EAAQ,GAAMkQ,EAEnB/b,O,oBAIR,SAAQ6L,EAAOiQ,EAAGC,EAAGugB,GAQpB,OANAzwB,GAAS7L,KAAKqiD,SAEdriD,KAAK2vB,MAAO9jB,EAAQ,GAAMiQ,EAC1B9b,KAAK2vB,MAAO9jB,EAAQ,GAAMkQ,EAC1B/b,KAAK2vB,MAAO9jB,EAAQ,GAAMywB,EAEnBt8B,O,qBAIR,SAAS6L,EAAOiQ,EAAGC,EAAGugB,EAAG1I,GASxB,OAPA/nB,GAAS7L,KAAKqiD,SAEdriD,KAAK2vB,MAAO9jB,EAAQ,GAAMiQ,EAC1B9b,KAAK2vB,MAAO9jB,EAAQ,GAAMkQ,EAC1B/b,KAAK2vB,MAAO9jB,EAAQ,GAAMywB,EAC1Bt8B,KAAK2vB,MAAO9jB,EAAQ,GAAM+nB,EAEnB5zB,O,sBAIR,SAAU6O,GAIT,OAFA7O,KAAKwiD,iBAAmB3zC,EAEjB7O,O,mBAIR,WAEC,OAAO,IAAIA,KAAKR,YAAaQ,KAAK2vB,MAAO3vB,KAAKqiD,UAAWlnB,KAAMn7B,Q,oBAIhE,WAEC,IAAM2e,EAAO,CACZ0jC,SAAUriD,KAAKqiD,SACfp8B,KAAMjmB,KAAK2vB,MAAMnwB,YAAYgF,KAC7BmrB,MAAO5sB,MAAM5D,UAAUsL,MAAMtJ,KAAMnB,KAAK2vB,OACxCmyB,WAAY9hD,KAAK8hD,YAOlB,MAJmB,KAAd9hD,KAAKwE,OAAcma,EAAKna,KAAOxE,KAAKwE,MACpCxE,KAAKsiD,QAAUjzB,KAAkB1Q,EAAK2jC,MAAQtiD,KAAKsiD,OACvB,IAA5BtiD,KAAKuiD,YAAY9kC,SAA6C,IAA7Bzd,KAAKuiD,YAAY/c,QAAgB7mB,EAAK4jC,YAAcviD,KAAKuiD,aAExF5jC,M,KAMTyjC,GAAgBjjD,UAAU8jD,mBAAoB,E,IAExCC,G,kDAEL,WAAavzB,EAAO0yB,EAAUP,GAAa,uCAEnC,IAAIqB,YAAaxzB,GAAS0yB,EAAUP,G,UAJTM,IAU9BgB,G,kDAEL,WAAazzB,EAAO0yB,EAAUP,GAAa,uCAEnC,IAAIuB,YAAa1zB,GAAS0yB,EAAUP,G,UAJTM,IAU9BkB,G,kDAEL,WAAa3zB,EAAO0yB,EAAUP,GAAa,uCAEnC,IAAIyB,aAAc5zB,GAAS0yB,EAAUP,G,UAJTM,IAUrC,SAASoB,GAAU7zB,GAElB,GAAsB,IAAjBA,EAAMnxB,OAAe,OAASymC,IAInC,IAFA,IAAIjwB,EAAM2a,EAAO,GAEPpxB,EAAI,EAAGyK,EAAI2mB,EAAMnxB,OAAQD,EAAIyK,IAAMzK,EAEvCoxB,EAAOpxB,GAAMyW,IAAMA,EAAM2a,EAAOpxB,IAItC,OAAOyW,EAIR,IAAIyuC,GAAM,EAEJC,GAAM,IAAkBnX,GACxBzmB,GAAO,IAAkBqsB,GACzBwR,GAAU,IAAkBthB,GAC5BuhB,GAAS,IAAkB5e,GAC3B6e,GAAmB,IAAkB7e,GACrC8e,GAAY,IAAkBzhB,GAE9B0hB,G,kDAEL,aAAc,iCAEb,eAEAllD,OAAOC,eAAPD,OAAA,IAAAA,CAAA,GAA6B,KAAM,CAAEY,MAAOgkD,OAE5C,EAAKhpB,KAAOxK,KAEZ,EAAKzrB,KAAO,GACZ,EAAKyhB,KAAO,iBAEZ,EAAKpa,MAAQ,KACb,EAAK4d,WAAa,GAElB,EAAKu6B,gBAAkB,GACvB,EAAKC,sBAAuB,EAE5B,EAAKzkC,OAAS,GAEd,EAAKgnB,YAAc,KACnB,EAAK0d,eAAiB,KAEtB,EAAKC,UAAY,CAAEzN,MAAO,EAAGlR,MAAOP,KAEpC,EAAKgO,SAAW,GAxBH,E,4CA4Bd,WAEC,OAAOjzC,KAAK6L,Q,sBAIb,SAAUA,GAYT,OAVK9I,MAAMC,QAAS6I,GAEnB7L,KAAK6L,MAAQ,IAAM23C,GAAU33C,GAAU,MAAQu3C,GAAwBF,IAAyBr3C,EAAO,GAIvG7L,KAAK6L,MAAQA,EAIP7L,O,0BAIR,SAAcwE,GAEb,OAAOxE,KAAKypB,WAAYjlB,K,0BAIzB,SAAcA,EAAMgiB,GAInB,OAFAxmB,KAAKypB,WAAYjlB,GAASgiB,EAEnBxmB,O,6BAIR,SAAiBwE,GAIhB,cAFOxE,KAAKypB,WAAYjlB,GAEjBxE,O,0BAIR,SAAcwE,GAEb,YAAmCjC,IAA5BvC,KAAKypB,WAAYjlB,K,sBAIzB,SAAUkyC,EAAOlR,GAA2B,IAApB4e,EAAoB,uDAAJ,EAEvCpkD,KAAKwf,OAAOrb,KAAM,CAEjBuyC,MAAOA,EACPlR,MAAOA,EACP4e,cAAeA,M,yBAMjB,WAECpkD,KAAKwf,OAAS,K,0BAIf,SAAck3B,EAAOlR,GAEpBxlC,KAAKmkD,UAAUzN,MAAQA,EACvB12C,KAAKmkD,UAAU3e,MAAQA,I,0BAIxB,SAAc3M,GAEb,IAAMsW,EAAWnvC,KAAKypB,WAAW0lB,cAEf5sC,IAAb4sC,IAEJA,EAAS/L,aAAcvK,GAEvBsW,EAASkV,aAAc,GAIxB,IAAM/f,EAAStkC,KAAKypB,WAAW6a,OAE/B,QAAgB/hC,IAAX+hC,EAAuB,CAE3B,IAAMkO,GAAe,IAAIpd,IAAU2hB,gBAAiBle,GAEpDyL,EAAO0e,kBAAmBxQ,GAE1BlO,EAAO+f,aAAc,EAItB,IAAMC,EAAUtkD,KAAKypB,WAAW66B,QAsBhC,YApBiB/hD,IAAZ+hD,IAEJA,EAAQhY,mBAAoBzT,GAE5ByrB,EAAQD,aAAc,GAIG,OAArBrkD,KAAKwmC,aAETxmC,KAAKymC,qBAIuB,OAAxBzmC,KAAKkkD,gBAETlkD,KAAKukD,wBAICvkD,O,qBAIR,SAASs0B,GAQR,OAJAovB,GAAIc,cAAelwB,GAEnBt0B,KAAKojC,aAAcsgB,IAEZ1jD,O,qBAIR,SAASs0B,GAQR,OAJAovB,GAAIe,cAAenwB,GAEnBt0B,KAAKojC,aAAcsgB,IAEZ1jD,O,qBAIR,SAASs0B,GAQR,OAJAovB,GAAIgB,cAAepwB,GAEnBt0B,KAAKojC,aAAcsgB,IAEZ1jD,O,uBAIR,SAAW8b,EAAGC,EAAGugB,GAQhB,OAJAonB,GAAIiB,gBAAiB7oC,EAAGC,EAAGugB,GAE3Bt8B,KAAKojC,aAAcsgB,IAEZ1jD,O,mBAIR,SAAO8b,EAAGC,EAAGugB,GAQZ,OAJAonB,GAAIkB,UAAW9oC,EAAGC,EAAGugB,GAErBt8B,KAAKojC,aAAcsgB,IAEZ1jD,O,oBAIR,SAAQomC,GAQP,OANAtgB,GAAK8tB,OAAQxN,GAEbtgB,GAAKotB,eAELlzC,KAAKojC,aAActd,GAAK+S,QAEjB74B,O,oBAIR,WAQC,OANAA,KAAKymC,qBAELzmC,KAAKwmC,YAAYS,UAAW0c,IAAUnN,SAEtCx2C,KAAK6kD,UAAWlB,GAAQ7nC,EAAG6nC,GAAQ5nC,EAAG4nC,GAAQrnB,GAEvCt8B,O,2BAIR,SAAeylC,GAId,IAFA,IAAM0J,EAAW,GAEP5wC,EAAI,EAAGyK,EAAIy8B,EAAOjnC,OAAQD,EAAIyK,EAAGzK,IAAO,CAEjD,IAAM4nC,EAAQV,EAAQlnC,GACtB4wC,EAAShrC,KAAMgiC,EAAMrqB,EAAGqqB,EAAMpqB,EAAGoqB,EAAM7J,GAAK,GAM7C,OAFAt8B,KAAKioB,aAAc,WAAY,IAAIq7B,GAAwBnU,EAAU,IAE9DnvC,O,gCAIR,WAE2B,OAArBA,KAAKwmC,cAETxmC,KAAKwmC,YAAc,IAAIxB,IAIxB,IAAMmK,EAAWnvC,KAAKypB,WAAW0lB,SAC3B2V,EAA0B9kD,KAAKgkD,gBAAgB7U,SAErD,GAAKA,GAAYA,EAAS4V,oBASzB,OAPAz/B,QAAQxjB,MAAO,kJAAmJ9B,WAElKA,KAAKwmC,YAAY5rB,IAChB,IAAIynB,IAAW4C,KAAYA,KAAYA,KACvC,IAAI5C,GAAW4C,IAAYA,IAAYA,MAOzC,QAAkB1iC,IAAb4sC,GAMJ,GAJAnvC,KAAKwmC,YAAYwe,uBAAwB7V,GAIpC2V,EAEJ,IAAM,IAAIvmD,EAAI,EAAGonC,EAAKmf,EAAwBtmD,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEpE,IAAM0mD,EAAiBH,EAAyBvmD,GAChDqlD,GAAOoB,uBAAwBC,GAE1BjlD,KAAKikD,sBAETH,GAAUjwB,WAAY7zB,KAAKwmC,YAAYzxB,IAAK6uC,GAAO7uC,KACnD/U,KAAKwmC,YAAYZ,cAAeke,IAEhCA,GAAUjwB,WAAY7zB,KAAKwmC,YAAYxxB,IAAK4uC,GAAO5uC,KACnDhV,KAAKwmC,YAAYZ,cAAeke,MAIhC9jD,KAAKwmC,YAAYZ,cAAege,GAAO7uC,KACvC/U,KAAKwmC,YAAYZ,cAAege,GAAO5uC,YAU1ChV,KAAKwmC,YAAYd,aAIbwf,MAAOllD,KAAKwmC,YAAYzxB,IAAI+G,IAAOopC,MAAOllD,KAAKwmC,YAAYzxB,IAAIgH,IAAOmpC,MAAOllD,KAAKwmC,YAAYzxB,IAAIunB,KAEtGhX,QAAQxjB,MAAO,sIAAuI9B,Q,mCAMxJ,WAE8B,OAAxBA,KAAKkkD,iBAETlkD,KAAKkkD,eAAiB,IAAItb,IAI3B,IAAMuG,EAAWnvC,KAAKypB,WAAW0lB,SAC3B2V,EAA0B9kD,KAAKgkD,gBAAgB7U,SAErD,GAAKA,GAAYA,EAAS4V,oBAMzB,OAJAz/B,QAAQxjB,MAAO,wJAAyJ9B,WAExKA,KAAKkkD,eAAetpC,IAAK,IAAIynB,GAAW4C,KAMzC,GAAKkK,EAAW,CAIf,IAAMla,EAASj1B,KAAKkkD,eAAejvB,OAMnC,GAJA2uB,GAAOoB,uBAAwB7V,GAI1B2V,EAEJ,IAAM,IAAIvmD,EAAI,EAAGonC,EAAKmf,EAAwBtmD,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEpE,IAAM0mD,EAAiBH,EAAyBvmD,GAChDslD,GAAiBmB,uBAAwBC,GAEpCjlD,KAAKikD,sBAETH,GAAUjwB,WAAY+vB,GAAO7uC,IAAK8uC,GAAiB9uC,KACnD6uC,GAAOhe,cAAeke,IAEtBA,GAAUjwB,WAAY+vB,GAAO5uC,IAAK6uC,GAAiB7uC,KACnD4uC,GAAOhe,cAAeke,MAItBF,GAAOhe,cAAeie,GAAiB9uC,KACvC6uC,GAAOhe,cAAeie,GAAiB7uC,MAQ1C4uC,GAAO3c,UAAWhS,GAOlB,IAFA,IAAI6T,EAAc,EAERvqC,EAAI,EAAGonC,EAAKwJ,EAAS3J,MAAOjnC,EAAIonC,EAAIpnC,IAE7CulD,GAAUjB,oBAAqB1T,EAAU5wC,GAEzCuqC,EAAch4B,KAAKkE,IAAK8zB,EAAa7T,EAAOT,kBAAmBsvB,KAMhE,GAAKgB,EAEJ,IAAM,IAAIvmD,EAAI,EAAGonC,EAAKmf,EAAwBtmD,OAAQD,EAAIonC,EAAIpnC,IAK7D,IAHA,IAAM0mD,EAAiBH,EAAyBvmD,GAC1C0lD,EAAuBjkD,KAAKikD,qBAExB9kC,EAAI,EAAGgmC,EAAKF,EAAezf,MAAOrmB,EAAIgmC,EAAIhmC,IAEnD2kC,GAAUjB,oBAAqBoC,EAAgB9lC,GAE1C8kC,IAEJN,GAAQd,oBAAqB1T,EAAUhwB,GACvC2kC,GAAU/d,IAAK4d,KAIhB7a,EAAch4B,KAAKkE,IAAK8zB,EAAa7T,EAAOT,kBAAmBsvB,KAQlE9jD,KAAKkkD,eAAezf,OAAS3zB,KAAKujB,KAAMyU,GAEnCoc,MAAOllD,KAAKkkD,eAAezf,SAE/Bnf,QAAQxjB,MAAO,+HAAgI9B,S,gCAQlJ,c,6BAMA,WAEC,IAAM6L,EAAQ7L,KAAK6L,MACb4d,EAAazpB,KAAKypB,WAKxB,GAAe,OAAV5d,QACqBtJ,IAAxBknB,EAAW0lB,eACW5sC,IAAtBknB,EAAW6a,aACO/hC,IAAlBknB,EAAWsS,GAHb,CAUA,IAAMqpB,EAAUv5C,EAAM8jB,MAChB01B,EAAY57B,EAAW0lB,SAASxf,MAChC21B,EAAU77B,EAAW6a,OAAO3U,MAC5B41B,EAAM97B,EAAWsS,GAAGpM,MAEpB61B,EAAYH,EAAU7mD,OAAS,OAET+D,IAAvBknB,EAAW66B,SAEftkD,KAAKioB,aAAc,UAAW,IAAIm6B,GAAiB,IAAImB,aAAc,EAAIiC,GAAa,IAQvF,IAJA,IAAMC,EAAWh8B,EAAW66B,QAAQ30B,MAE9B+1B,EAAO,GAAIC,EAAO,GAEdpnD,EAAI,EAAGA,EAAIinD,EAAWjnD,IAE/BmnD,EAAMnnD,GAAM,IAAI8jC,GAChBsjB,EAAMpnD,GAAM,IAAI8jC,GAIjB,IAAMujB,EAAK,IAAIvjB,GACdwjB,EAAK,IAAIxjB,GACTyjB,EAAK,IAAIzjB,GAET0jB,EAAM,IAAIryB,GACVsyB,EAAM,IAAItyB,GACVuyB,EAAM,IAAIvyB,GAEVwyB,EAAO,IAAI7jB,GACX8jB,EAAO,IAAI9jB,GAqCR7iB,EAASxf,KAAKwf,OAEK,IAAlBA,EAAOhhB,SAEXghB,EAAS,CAAE,CACVk3B,MAAO,EACPlR,MAAO4f,EAAQ5mD,UAKjB,IAAM,IAAID,EAAI,EAAGonC,EAAKnmB,EAAOhhB,OAAQD,EAAIonC,IAAOpnC,EAO/C,IALA,IAAMof,EAAQ6B,EAAQjhB,GAEhBm4C,EAAQ/4B,EAAM+4B,MAGVv3B,EAAIu3B,EAAOyO,EAAKzO,EAFZ/4B,EAAM6nB,MAEqBrmB,EAAIgmC,EAAIhmC,GAAK,EAErDinC,EACChB,EAASjmC,EAAI,GACbimC,EAASjmC,EAAI,GACbimC,EAASjmC,EAAI,IAmChB,IA5BA,IAAM4Y,EAAM,IAAIsK,GAAWgkB,EAAO,IAAIhkB,GAChCl/B,EAAI,IAAIk/B,GAAWikB,EAAK,IAAIjkB,GA2BxB9jC,EAAI,EAAGonC,EAAKnmB,EAAOhhB,OAAQD,EAAIonC,IAAOpnC,EAO/C,IALA,IAAMof,EAAQ6B,EAAQjhB,GAEhBm4C,EAAQ/4B,EAAM+4B,MAGVv3B,EAAIu3B,EAAOyO,EAAKzO,EAFZ/4B,EAAM6nB,MAEqBrmB,EAAIgmC,EAAIhmC,GAAK,EAErDonC,EAAcnB,EAASjmC,EAAI,IAC3BonC,EAAcnB,EAASjmC,EAAI,IAC3BonC,EAAcnB,EAASjmC,EAAI,SAhJ5BmG,QAAQxjB,MAAO,gHAwChB,SAASskD,EAAgBz7C,EAAGC,EAAG0T,GAE9BsnC,EAAG9sB,UAAWusB,EAAe,EAAJ16C,GACzBk7C,EAAG/sB,UAAWusB,EAAe,EAAJz6C,GACzBk7C,EAAGhtB,UAAWusB,EAAe,EAAJ/mC,GAEzBynC,EAAIjtB,UAAWysB,EAAS,EAAJ56C,GACpBq7C,EAAIltB,UAAWysB,EAAS,EAAJ36C,GACpBq7C,EAAIntB,UAAWysB,EAAS,EAAJjnC,GAEpBunC,EAAGxhB,IAAKuhB,GACRE,EAAGzhB,IAAKuhB,GAERI,EAAI3hB,IAAK0hB,GACTE,EAAI5hB,IAAK0hB,GAET,IAAM3tB,EAAI,GAAQ4tB,EAAIlqC,EAAImqC,EAAIlqC,EAAIkqC,EAAInqC,EAAIkqC,EAAIjqC,GAIvCyqC,SAAUpuB,KAEjB8tB,EAAK/qB,KAAM0qB,GAAK9xB,eAAgBkyB,EAAIlqC,GAAI88B,gBAAiBiN,GAAME,EAAIjqC,GAAIgY,eAAgBqE,GACvF+tB,EAAKhrB,KAAM2qB,GAAK/xB,eAAgBiyB,EAAIlqC,GAAI+8B,gBAAiBgN,GAAMI,EAAInqC,GAAIiY,eAAgBqE,GAEvFstB,EAAM/6C,GAAIo7B,IAAKmgB,GACfR,EAAM96C,GAAIm7B,IAAKmgB,GACfR,EAAMpnC,GAAIynB,IAAKmgB,GAEfP,EAAMh7C,GAAIo7B,IAAKogB,GACfR,EAAM/6C,GAAIm7B,IAAKogB,GACfR,EAAMrnC,GAAIynB,IAAKogB,IAqChB,SAASI,EAAcvmC,GAEtB7c,EAAE21B,UAAWwsB,EAAa,EAAJtlC,GACtBsmC,EAAGnrB,KAAMh4B,GAET,IAAMstB,EAAIi1B,EAAM1lC,GAIhB+X,EAAIoD,KAAM1K,GACVsH,EAAIsM,IAAKlhC,EAAE4wB,eAAgB5wB,EAAEw8B,IAAKlP,KAAQkE,YAI1C0xB,EAAK5iB,aAAc6iB,EAAI71B,GACvB,IACMmD,EADOyyB,EAAK1mB,IAAKgmB,EAAM3lC,IACV,GAAU,EAAM,EAEnCylC,EAAc,EAAJzlC,GAAU+X,EAAIjc,EACxB2pC,EAAc,EAAJzlC,EAAQ,GAAM+X,EAAIhc,EAC5B0pC,EAAc,EAAJzlC,EAAQ,GAAM+X,EAAIuE,EAC5BmpB,EAAc,EAAJzlC,EAAQ,GAAM4T,K,kCAuB1B,WAEC,IAAM/nB,EAAQ7L,KAAK6L,MACb46C,EAAoBzmD,KAAKyU,aAAc,YAE7C,QAA2BlS,IAAtBkkD,EAAkC,CAEtC,IAAIC,EAAkB1mD,KAAKyU,aAAc,UAEzC,QAAyBlS,IAApBmkD,EAEJA,EAAkB,IAAItE,GAAiB,IAAImB,aAAwC,EAA1BkD,EAAkBjhB,OAAa,GACxFxlC,KAAKioB,aAAc,SAAUy+B,QAM7B,IAAM,IAAInoD,EAAI,EAAGonC,EAAK+gB,EAAgBlhB,MAAOjnC,EAAIonC,EAAIpnC,IAEpDmoD,EAAgB3D,OAAQxkD,EAAG,EAAG,EAAG,GAMnC,IAAMooD,EAAK,IAAItkB,GAAWukB,EAAK,IAAIvkB,GAAWwkB,EAAK,IAAIxkB,GACjDykB,EAAK,IAAIzkB,GAAW0kB,EAAK,IAAI1kB,GAAW2kB,EAAK,IAAI3kB,GACjD4kB,EAAK,IAAI5kB,GAAW6kB,EAAK,IAAI7kB,GAInC,GAAKx2B,EAEJ,IAAM,IAAItN,EAAI,EAAGonC,EAAK95B,EAAM25B,MAAOjnC,EAAIonC,EAAIpnC,GAAK,EAAI,CAEnD,IAAMqnD,EAAK/5C,EAAMkpB,KAAMx2B,EAAI,GACrBsnD,EAAKh6C,EAAMkpB,KAAMx2B,EAAI,GACrBunD,EAAKj6C,EAAMkpB,KAAMx2B,EAAI,GAE3BooD,EAAG9D,oBAAqB4D,EAAmBb,GAC3CgB,EAAG/D,oBAAqB4D,EAAmBZ,GAC3CgB,EAAGhE,oBAAqB4D,EAAmBX,GAE3CmB,EAAGnzB,WAAY+yB,EAAID,GACnBM,EAAGpzB,WAAY6yB,EAAIC,GACnBK,EAAG7a,MAAO8a,GAEVJ,EAAGjE,oBAAqB6D,EAAiBd,GACzCmB,EAAGlE,oBAAqB6D,EAAiBb,GACzCmB,EAAGnE,oBAAqB6D,EAAiBZ,GAEzCgB,EAAG/gB,IAAKkhB,GACRF,EAAGhhB,IAAKkhB,GACRD,EAAGjhB,IAAKkhB,GAERP,EAAgB3D,OAAQ6C,EAAIkB,EAAGhrC,EAAGgrC,EAAG/qC,EAAG+qC,EAAGxqB,GAC3CoqB,EAAgB3D,OAAQ8C,EAAIkB,EAAGjrC,EAAGirC,EAAGhrC,EAAGgrC,EAAGzqB,GAC3CoqB,EAAgB3D,OAAQ+C,EAAIkB,EAAGlrC,EAAGkrC,EAAGjrC,EAAGirC,EAAG1qB,QAQ5C,IAAM,IAAI/9B,EAAI,EAAGonC,EAAK8gB,EAAkBjhB,MAAOjnC,EAAIonC,EAAIpnC,GAAK,EAE3DooD,EAAG9D,oBAAqB4D,EAAmBloD,EAAI,GAC/CqoD,EAAG/D,oBAAqB4D,EAAmBloD,EAAI,GAC/CsoD,EAAGhE,oBAAqB4D,EAAmBloD,EAAI,GAE/C0oD,EAAGnzB,WAAY+yB,EAAID,GACnBM,EAAGpzB,WAAY6yB,EAAIC,GACnBK,EAAG7a,MAAO8a,GAEVR,EAAgB3D,OAAQxkD,EAAI,EAAG0oD,EAAGnrC,EAAGmrC,EAAGlrC,EAAGkrC,EAAG3qB,GAC9CoqB,EAAgB3D,OAAQxkD,EAAI,EAAG0oD,EAAGnrC,EAAGmrC,EAAGlrC,EAAGkrC,EAAG3qB,GAC9CoqB,EAAgB3D,OAAQxkD,EAAI,EAAG0oD,EAAGnrC,EAAGmrC,EAAGlrC,EAAGkrC,EAAG3qB,GAMhDt8B,KAAKmnD,mBAELT,EAAgBrC,aAAc,K,mBAMhC,SAAO9d,EAAU9oB,GAEhB,GAAS8oB,GAAYA,EAAS6gB,iBAA9B,MAOgB7kD,IAAXkb,IAEJA,EAAS,EAET6H,QAAQM,KACP,2JAMF,IAAM6D,EAAazpB,KAAKypB,WAExB,IAAM,IAAM1qB,KAAO0qB,EAElB,QAAoClnB,IAA/BgkC,EAAS9c,WAAY1qB,GAW1B,IATA,IACMsoD,EADa59B,EAAY1qB,GACI4wB,MAE7B23B,EAAa/gB,EAAS9c,WAAY1qB,GAClCwoD,EAAkBD,EAAW33B,MAE7B63B,EAAkBF,EAAWjF,SAAW5kC,EACxCjf,EAASsS,KAAKiE,IAAKwyC,EAAgB/oD,OAAQ6oD,EAAgB7oD,OAASgpD,GAEhEjpD,EAAI,EAAG4gB,EAAIqoC,EAAiBjpD,EAAIC,EAAQD,IAAM4gB,IAEvDkoC,EAAiBloC,GAAMooC,EAAiBhpD,GAM1C,OAAOyB,KAvCNslB,QAAQxjB,MAAO,kFAAmFykC,K,8BA2CpG,WAIC,IAFA,IAAM+e,EAAUtlD,KAAKypB,WAAW6a,OAEtB/lC,EAAI,EAAGonC,EAAK2f,EAAQ9f,MAAOjnC,EAAIonC,EAAIpnC,IAE5CulD,GAAUjB,oBAAqByC,EAAS/mD,GAExCulD,GAAUnvB,YAEV2wB,EAAQvC,OAAQxkD,EAAGulD,GAAUhoC,EAAGgoC,GAAU/nC,EAAG+nC,GAAUxnB,K,0BAMzD,WAEC,SAASmrB,EAAwBjhC,EAAW4+B,GAU3C,IARA,IAAMz1B,EAAQnJ,EAAUmJ,MAClB0yB,EAAW77B,EAAU67B,SACrBP,EAAat7B,EAAUs7B,WAEvB4F,EAAS,IAAI/3B,EAAMnwB,YAAa4lD,EAAQ5mD,OAAS6jD,GAEnDx2C,EAAQ,EAAG62C,EAAS,EAEdnkD,EAAI,EAAGyK,EAAIo8C,EAAQ5mD,OAAQD,EAAIyK,EAAGzK,IAAO,CAElDsN,EAAQu5C,EAAS7mD,GAAM8jD,EAEvB,IAAM,IAAIljC,EAAI,EAAGA,EAAIkjC,EAAUljC,IAE9BuoC,EAAQhF,KAAc/yB,EAAO9jB,KAM/B,OAAO,IAAIu2C,GAAiBsF,EAAQrF,EAAUP,GAM/C,GAAoB,OAAf9hD,KAAK6L,MAGT,OADAyZ,QAAQM,KAAM,+EACP5lB,KAIR,IAAM2nD,EAAY,IAAI5D,EAEhBqB,EAAUplD,KAAK6L,MAAM8jB,MACrBlG,EAAazpB,KAAKypB,WAIxB,IAAM,IAAMjlB,KAAQilB,EAAa,CAEhC,IAEMm+B,EAAeH,EAFHh+B,EAAYjlB,GAE0B4gD,GAExDuC,EAAU1/B,aAAczjB,EAAMojD,GAM/B,IAAM5D,EAAkBhkD,KAAKgkD,gBAE7B,IAAM,IAAMx/C,KAAQw/C,EAAkB,CAKrC,IAHA,IAAM6D,EAAa,GACb5C,EAAiBjB,EAAiBx/C,GAE9BjG,EAAI,EAAGonC,EAAKsf,EAAezmD,OAAQD,EAAIonC,EAAIpnC,IAAO,CAE3D,IAEMqpD,EAAeH,EAFHxC,EAAgB1mD,GAEsB6mD,GAExDyC,EAAW1jD,KAAMyjD,GAIlBD,EAAU3D,gBAAiBx/C,GAASqjD,EAIrCF,EAAU1D,qBAAuBjkD,KAAKikD,qBAMtC,IAFA,IAAMzkC,EAASxf,KAAKwf,OAEVjhB,EAAI,EAAGyK,EAAIwW,EAAOhhB,OAAQD,EAAIyK,EAAGzK,IAAO,CAEjD,IAAMof,EAAQ6B,EAAQjhB,GACtBopD,EAAUG,SAAUnqC,EAAM+4B,MAAO/4B,EAAM6nB,MAAO7nB,EAAMymC,eAIrD,OAAOuD,I,oBAIR,WAEC,IAAMhpC,EAAO,CACZ6c,SAAU,CACTP,QAAS,IACThV,KAAM,iBACNwV,UAAW,0BAWb,GALA9c,EAAK8b,KAAOz6B,KAAKy6B,KACjB9b,EAAKsH,KAAOjmB,KAAKimB,KACE,KAAdjmB,KAAKwE,OAAcma,EAAKna,KAAOxE,KAAKwE,MACpC3F,OAAOgI,KAAM7G,KAAKizC,UAAWz0C,OAAS,IAAImgB,EAAKs0B,SAAWjzC,KAAKizC,eAE3C1wC,IAApBvC,KAAKu1C,WAA2B,CAEpC,IAAMA,EAAav1C,KAAKu1C,WAExB,IAAM,IAAMx2C,KAAOw2C,OAEShzC,IAAtBgzC,EAAYx2C,KAAsB4f,EAAM5f,GAAQw2C,EAAYx2C,IAIlE,OAAO4f,EAMRA,EAAKA,KAAO,CAAE8K,WAAY,IAE1B,IAAM5d,EAAQ7L,KAAK6L,MAEJ,OAAVA,IAEJ8S,EAAKA,KAAK9S,MAAQ,CACjBoa,KAAMpa,EAAM8jB,MAAMnwB,YAAYgF,KAC9BmrB,MAAO5sB,MAAM5D,UAAUsL,MAAMtJ,KAAM0K,EAAM8jB,SAK3C,IAAMlG,EAAazpB,KAAKypB,WAExB,IAAM,IAAM1qB,KAAO0qB,EAAa,CAE/B,IAAMjD,EAAYiD,EAAY1qB,GAE9B4f,EAAKA,KAAK8K,WAAY1qB,GAAQynB,EAAUuuB,OAAQp2B,EAAKA,MAItD,IAAMqlC,EAAkB,GACpB+D,GAAqB,EAEzB,IAAM,IAAMhpD,KAAOiB,KAAKgkD,gBAAkB,CAMzC,IAJA,IAAMgE,EAAiBhoD,KAAKgkD,gBAAiBjlD,GAEvC4wB,EAAQ,GAEJpxB,EAAI,EAAGonC,EAAKqiB,EAAexpD,OAAQD,EAAIonC,EAAIpnC,IAAO,CAE3D,IAAMioB,EAAYwhC,EAAgBzpD,GAElCoxB,EAAMxrB,KAAMqiB,EAAUuuB,OAAQp2B,EAAKA,OAI/BgR,EAAMnxB,OAAS,IAEnBwlD,EAAiBjlD,GAAQ4wB,EAEzBo4B,GAAqB,GAMlBA,IAEJppC,EAAKA,KAAKqlC,gBAAkBA,EAC5BrlC,EAAKA,KAAKslC,qBAAuBjkD,KAAKikD,sBAIvC,IAAMzkC,EAASxf,KAAKwf,OAEfA,EAAOhhB,OAAS,IAEpBmgB,EAAKA,KAAKa,OAASP,KAAKrC,MAAOqC,KAAKC,UAAWM,KAIhD,IAAM0kC,EAAiBlkD,KAAKkkD,eAW5B,OATwB,OAAnBA,IAEJvlC,EAAKA,KAAKulC,eAAiB,CAC1BjvB,OAAQivB,EAAejvB,OAAO+f,UAC9BvQ,OAAQyf,EAAezf,SAKlB9lB,I,mBAIR,WA0BC,OAAO,IAAIolC,GAAiB5oB,KAAMn7B,Q,kBAInC,SAAMuI,GAILvI,KAAK6L,MAAQ,KACb7L,KAAKypB,WAAa,GAClBzpB,KAAKgkD,gBAAkB,GACvBhkD,KAAKwf,OAAS,GACdxf,KAAKwmC,YAAc,KACnBxmC,KAAKkkD,eAAiB,KAItB,IAAMvlC,EAAO,GAIb3e,KAAKwE,KAAO+D,EAAO/D,KAInB,IAAMqH,EAAQtD,EAAOsD,MAEN,OAAVA,GAEJ7L,KAAKioD,SAAUp8C,EAAMyyB,MAAO3f,IAM7B,IAAM8K,EAAalhB,EAAOkhB,WAE1B,IAAM,IAAMjlB,KAAQilB,EAAa,CAEhC,IAAMjD,EAAYiD,EAAYjlB,GAC9BxE,KAAKioB,aAAczjB,EAAMgiB,EAAU8X,MAAO3f,IAM3C,IAAMqlC,EAAkBz7C,EAAOy7C,gBAE/B,IAAM,IAAMx/C,KAAQw/C,EAAkB,CAKrC,IAHA,IAAMr0B,EAAQ,GACRs1B,EAAiBjB,EAAiBx/C,GAE9BjG,EAAI,EAAGyK,EAAIi8C,EAAezmD,OAAQD,EAAIyK,EAAGzK,IAElDoxB,EAAMxrB,KAAM8gD,EAAgB1mD,GAAI+/B,MAAO3f,IAIxC3e,KAAKgkD,gBAAiBx/C,GAASmrB,EAIhC3vB,KAAKikD,qBAAuB17C,EAAO07C,qBAMnC,IAFA,IAAMzkC,EAASjX,EAAOiX,OAEZjhB,EAAI,EAAGyK,EAAIwW,EAAOhhB,OAAQD,EAAIyK,EAAGzK,IAAO,CAEjD,IAAMof,EAAQ6B,EAAQjhB,GACtByB,KAAK8nD,SAAUnqC,EAAM+4B,MAAO/4B,EAAM6nB,MAAO7nB,EAAMymC,eAMhD,IAAM5d,EAAcj+B,EAAOi+B,YAEN,OAAhBA,IAEJxmC,KAAKwmC,YAAcA,EAAYlI,SAMhC,IAAM4lB,EAAiB37C,EAAO27C,eAiB9B,OAfwB,OAAnBA,IAEJlkD,KAAKkkD,eAAiBA,EAAe5lB,SAMtCt+B,KAAKmkD,UAAUzN,MAAQnuC,EAAO47C,UAAUzN,MACxC12C,KAAKmkD,UAAU3e,MAAQj9B,EAAO47C,UAAU3e,MAIxCxlC,KAAKizC,SAAW1qC,EAAO0qC,SAEhBjzC,O,qBAIR,WAECA,KAAK87B,cAAe,CAAE7V,KAAM,gB,GAplCDuJ,IA0lC7Bu0B,GAAe5kD,UAAUioD,kBAAmB,EAE5C,IAAMc,GAAiC,IAAI3b,GACrC4b,GAAuB,IAAIre,GAC3Bse,GAA0B,IAAIxf,GAE9Byf,GAAsB,IAAIhmB,GAC1BimB,GAAsB,IAAIjmB,GAC1BkmB,GAAsB,IAAIlmB,GAE1BmmB,GAAuB,IAAInmB,GAC3BomB,GAAuB,IAAIpmB,GAC3BqmB,GAAuB,IAAIrmB,GAE3BsmB,GAAwB,IAAItmB,GAC5BumB,GAAwB,IAAIvmB,GAC5BwmB,GAAwB,IAAIxmB,GAE5BymB,GAAuB,IAAIp1B,GAC3Bq1B,GAAuB,IAAIr1B,GAC3Bs1B,GAAuB,IAAIt1B,GAE3Bu1B,GAAmC,IAAI5mB,GACvC6mB,GAAwC,IAAI7mB,GAE5C8mB,G,kDAEL,aAAmF,MAAtE5iB,EAAsE,uDAA3D,IAAIwd,GAAkBlO,EAAqC,uDAA1B,IAAImM,GAAsB,4BAElF,gBAEK/7B,KAAO,OAEZ,EAAKsgB,SAAWA,EAChB,EAAKsP,SAAWA,EAEhB,EAAKuT,qBAT6E,E,wCAanF,SAAM7gD,GAmBL,OAjBA,4DAAYA,QAE0BhG,IAAjCgG,EAAO8gD,wBAEXrpD,KAAKqpD,sBAAwB9gD,EAAO8gD,sBAAsB5+C,cAIrBlI,IAAjCgG,EAAO+gD,wBAEXtpD,KAAKspD,sBAAwBzqD,OAAOyJ,OAAQ,GAAIC,EAAO+gD,wBAIxDtpD,KAAK61C,SAAWttC,EAAOstC,SACvB71C,KAAKumC,SAAWh+B,EAAOg+B,SAEhBvmC,O,gCAIR,WAEC,IAAMumC,EAAWvmC,KAAKumC,SAEtB,GAAKA,EAAS6gB,iBAAmB,CAEhC,IAAMpD,EAAkBzd,EAASyd,gBAC3Bn9C,EAAOhI,OAAOgI,KAAMm9C,GAE1B,GAAKn9C,EAAKrI,OAAS,EAAI,CAEtB,IAAMymD,EAAiBjB,EAAiBn9C,EAAM,IAE9C,QAAwBtE,IAAnB0iD,EAA+B,CAEnCjlD,KAAKqpD,sBAAwB,GAC7BrpD,KAAKspD,sBAAwB,GAE7B,IAAM,IAAI/rC,EAAI,EAAGgsC,EAAKtE,EAAezmD,OAAQ+e,EAAIgsC,EAAIhsC,IAAO,CAE3D,IAAM/Y,EAAOygD,EAAgB1nC,GAAI/Y,MAAQ+S,OAAQgG,GAEjDvd,KAAKqpD,sBAAsBllD,KAAM,GACjCnE,KAAKspD,sBAAuB9kD,GAAS+Y,SAQlC,CAEN,IAAMoiC,EAAepZ,EAASoZ,kBAERp9C,IAAjBo9C,GAA8BA,EAAanhD,OAAS,GAExD8mB,QAAQxjB,MAAO,2G,qBAQlB,SAAS0nD,EAAWC,GAEnB,IA4BIC,EA5BEnjB,EAAWvmC,KAAKumC,SAChBsP,EAAW71C,KAAK61C,SAChBrS,EAAcxjC,KAAKwjC,YAEzB,QAAkBjhC,IAAbszC,IAI4B,OAA5BtP,EAAS2d,gBAA0B3d,EAASge,wBAEjD6D,GAAUjtB,KAAMoL,EAAS2d,gBACzBkE,GAAUhlB,aAAcI,IAE6B,IAAhDgmB,EAAUvf,IAAIhB,iBAAkBmf,MAIrCF,GAAiB/sB,KAAMqI,GAActL,SACrCiwB,GAAOhtB,KAAMquB,EAAUvf,KAAM7G,aAAc8kB,IAIb,OAAzB3hB,EAASC,cAEyC,IAAjD2hB,GAAOwB,cAAepjB,EAASC,eAMrC,GAAKD,EAAS6gB,iBAAmB,CAEhC,IAAMv7C,EAAQ06B,EAAS16B,MACjBsjC,EAAW5I,EAAS9c,WAAW0lB,SAC/Bya,EAAgBrjB,EAASyd,gBAAgB7U,SACzC8U,EAAuB1d,EAAS0d,qBAChCloB,EAAKwK,EAAS9c,WAAWsS,GACzBsc,EAAM9R,EAAS9c,WAAW4uB,IAC1B74B,EAAS+mB,EAAS/mB,OAClB2kC,EAAY5d,EAAS4d,UAE3B,GAAe,OAAVt4C,EAIJ,GAAK9I,MAAMC,QAAS6yC,GAEnB,IAAM,IAAIt3C,EAAI,EAAGonC,EAAKnmB,EAAOhhB,OAAQD,EAAIonC,EAAIpnC,IAQ5C,IANA,IAAMof,EAAQ6B,EAAQjhB,GAChBsrD,EAAgBhU,EAAUl4B,EAAMymC,eAK5BjlC,EAHIrO,KAAKkE,IAAK2I,EAAM+4B,MAAOyN,EAAUzN,OAG1ByO,EAFTr0C,KAAKiE,IAAO4I,EAAM+4B,MAAQ/4B,EAAM6nB,MAAW2e,EAAUzN,MAAQyN,EAAU3e,OAEpDrmB,EAAIgmC,EAAIhmC,GAAK,EAAI,CAE/C,IAAMxU,EAAIkB,EAAMkpB,KAAM5V,GAChBvU,EAAIiB,EAAMkpB,KAAM5V,EAAI,GACpBb,EAAIzS,EAAMkpB,KAAM5V,EAAI,IAE1BuqC,EAAeI,GAAiC9pD,KAAM6pD,EAAeL,EAAWrB,GAAQhZ,EAAUya,EAAe3F,EAAsBloB,EAAIsc,EAAK1tC,EAAGC,EAAG0T,MAIrJorC,EAAaK,UAAYj5C,KAAKmgB,MAAO9R,EAAI,GACzCuqC,EAAaM,KAAK5F,cAAgBzmC,EAAMymC,cACxCqF,EAAWtlD,KAAMulD,SAapB,IAHA,IAGUnrD,EAHIuS,KAAKkE,IAAK,EAAGmvC,EAAUzN,OAGhB/Q,EAFT70B,KAAKiE,IAAKlJ,EAAM25B,MAAS2e,EAAUzN,MAAQyN,EAAU3e,OAElCjnC,EAAIonC,EAAIpnC,GAAK,EAAI,CAE/C,IAAMoM,EAAIkB,EAAMkpB,KAAMx2B,GAChBqM,EAAIiB,EAAMkpB,KAAMx2B,EAAI,GACpB+f,EAAIzS,EAAMkpB,KAAMx2B,EAAI,IAE1BmrD,EAAeI,GAAiC9pD,KAAM61C,EAAU2T,EAAWrB,GAAQhZ,EAAUya,EAAe3F,EAAsBloB,EAAIsc,EAAK1tC,EAAGC,EAAG0T,MAIhJorC,EAAaK,UAAYj5C,KAAKmgB,MAAO1yB,EAAI,GACzCkrD,EAAWtlD,KAAMulD,SAQd,QAAkBnnD,IAAb4sC,EAIX,GAAKpsC,MAAMC,QAAS6yC,GAEnB,IAAM,IAAIt3C,EAAI,EAAGonC,EAAKnmB,EAAOhhB,OAAQD,EAAIonC,EAAIpnC,IAQ5C,IANA,IAAMof,EAAQ6B,EAAQjhB,GAChBsrD,EAAgBhU,EAAUl4B,EAAMymC,eAK5BjlC,EAHIrO,KAAKkE,IAAK2I,EAAM+4B,MAAOyN,EAAUzN,OAG1ByO,EAFTr0C,KAAKiE,IAAO4I,EAAM+4B,MAAQ/4B,EAAM6nB,MAAW2e,EAAUzN,MAAQyN,EAAU3e,OAEpDrmB,EAAIgmC,EAAIhmC,GAAK,EAAI,EAM/CuqC,EAAeI,GAAiC9pD,KAAM6pD,EAAeL,EAAWrB,GAAQhZ,EAAUya,EAAe3F,EAAsBloB,EAAIsc,EAJjIl5B,EACAA,EAAI,EACJA,EAAI,MAMbuqC,EAAaK,UAAYj5C,KAAKmgB,MAAO9R,EAAI,GACzCuqC,EAAaM,KAAK5F,cAAgBzmC,EAAMymC,cACxCqF,EAAWtlD,KAAMulD,SAapB,IAHA,IAGUnrD,EAHIuS,KAAKkE,IAAK,EAAGmvC,EAAUzN,OAGhB/Q,EAFT70B,KAAKiE,IAAKo6B,EAAS3J,MAAS2e,EAAUzN,MAAQyN,EAAU3e,OAErCjnC,EAAIonC,EAAIpnC,GAAK,EAAI,EAM/CmrD,EAAeI,GAAiC9pD,KAAM61C,EAAU2T,EAAWrB,GAAQhZ,EAAUya,EAAe3F,EAAsBloB,EAAIsc,EAJ5H95C,EACAA,EAAI,EACJA,EAAI,MAMbmrD,EAAaK,UAAYj5C,KAAKmgB,MAAO1yB,EAAI,GACzCkrD,EAAWtlD,KAAMulD,UAUVnjB,EAAS0jB,YAEpB3kC,QAAQxjB,MAAO,iG,GAtPCqwC,IA+RnB,SAAS2X,GAAiC7oD,EAAQ40C,EAAU2T,EAAWvf,EAAKkF,EAAUya,EAAe3F,EAAsBloB,EAAIsc,EAAK1tC,EAAGC,EAAG0T,GAEzI+pC,GAAMxF,oBAAqB1T,EAAUxkC,GACrC29C,GAAMzF,oBAAqB1T,EAAUvkC,GACrC29C,GAAM1F,oBAAqB1T,EAAU7wB,GAErC,IAAM4rC,EAAkBjpD,EAAOooD,sBAE/B,GAAKxT,EAAS8J,cAAgBiK,GAAiBM,EAAkB,CAEhEvB,GAAQ/tC,IAAK,EAAG,EAAG,GACnBguC,GAAQhuC,IAAK,EAAG,EAAG,GACnBiuC,GAAQjuC,IAAK,EAAG,EAAG,GAEnB,IAAM,IAAIrc,EAAI,EAAGonC,EAAKikB,EAAcprD,OAAQD,EAAIonC,EAAIpnC,IAAO,CAE1D,IAAM4rD,EAAYD,EAAiB3rD,GAC7B0mD,EAAiB2E,EAAerrD,GAEnB,IAAd4rD,IAEL3B,GAAO3F,oBAAqBoC,EAAgBt6C,GAC5C89C,GAAO5F,oBAAqBoC,EAAgBr6C,GAC5C89C,GAAO7F,oBAAqBoC,EAAgB3mC,GAEvC2lC,GAEJ0E,GAAQ9P,gBAAiB2P,GAAQ2B,GACjCvB,GAAQ/P,gBAAiB4P,GAAQ0B,GACjCtB,GAAQhQ,gBAAiB6P,GAAQyB,KAIjCxB,GAAQ9P,gBAAiB2P,GAAOnkB,IAAKgkB,IAAS8B,GAC9CvB,GAAQ/P,gBAAiB4P,GAAOpkB,IAAKikB,IAAS6B,GAC9CtB,GAAQhQ,gBAAiB6P,GAAOrkB,IAAKkkB,IAAS4B,KAMhD9B,GAAMtiB,IAAK4iB,IACXL,GAAMviB,IAAK6iB,IACXL,GAAMxiB,IAAK8iB,IAIP5nD,EAAOw0C,eAAiBI,EAASgK,WAErC5+C,EAAOmpD,cAAez/C,EAAG09C,IACzBpnD,EAAOmpD,cAAex/C,EAAG09C,IACzBrnD,EAAOmpD,cAAe9rC,EAAGiqC,KAI1B,IAAMmB,EAtFP,SAA4BzoD,EAAQ40C,EAAU2T,EAAWvf,EAAK0c,EAAIC,EAAIC,EAAI1gB,GAczE,GAAmB,QA9oVH,IAooVX0P,EAASmE,KAED/P,EAAIogB,kBAAmBxD,EAAID,EAAID,GAAI,EAAMxgB,GAIzC8D,EAAIogB,kBAAmB1D,EAAIC,EAAIC,EAzoV1B,IAyoV8BhR,EAASmE,KAAqB7T,IAIpD,OAAO,KAEjC+iB,GAAwB/tB,KAAMgL,GAC9B+iB,GAAwB9lB,aAAcniC,EAAOuiC,aAE7C,IAAM+P,EAAWiW,EAAUvf,IAAIF,OAAOhB,WAAYmgB,IAElD,OAAK3V,EAAWiW,EAAUnZ,MAAQkD,EAAWiW,EAAUlZ,IAAa,KAE7D,CACNiD,SAAUA,EACVpN,MAAO+iB,GAAwB5qB,QAC/Br9B,OAAQA,GA4DYqpD,CAAmBrpD,EAAQ40C,EAAU2T,EAAWvf,EAAKoe,GAAOC,GAAOC,GAAOU,IAE/F,GAAKS,EAAe,CAEd3tB,IAEJ+sB,GAAOjG,oBAAqB9mB,EAAIpxB,GAChCo+C,GAAOlG,oBAAqB9mB,EAAInxB,GAChCo+C,GAAOnG,oBAAqB9mB,EAAIzd,GAEhCorC,EAAa3tB,GAAK8b,GAASU,MAAO0Q,GAAoBZ,GAAOC,GAAOC,GAAOO,GAAQC,GAAQC,GAAQ,IAAIt1B,KAInG2kB,IAEJyQ,GAAOjG,oBAAqBxK,EAAK1tC,GACjCo+C,GAAOlG,oBAAqBxK,EAAKztC,GACjCo+C,GAAOnG,oBAAqBxK,EAAK/5B,GAEjCorC,EAAarR,IAAMR,GAASU,MAAO0Q,GAAoBZ,GAAOC,GAAOC,GAAOO,GAAQC,GAAQC,GAAQ,IAAIt1B,KAIzG,IAAMs2B,EAAO,CACZr/C,EAAGA,EACHC,EAAGA,EACH0T,EAAGA,EACHgmB,OAAQ,IAAIjC,GACZ+hB,cAAe,GAGhBvM,GAASI,UAAWoQ,GAAOC,GAAOC,GAAOyB,EAAK1lB,QAE9ColB,EAAaM,KAAOA,EAIrB,OAAON,EA9HRP,GAAKhqD,UAAUi2C,QAAS,E,IAkIlBmV,G,kDAEL,aAA0G,MAA7FjxB,EAA6F,uDAArF,EAAGC,EAAkF,uDAAzE,EAAGsE,EAAsE,uDAA9D,EAAG2sB,EAA2D,uDAA3C,EAAGC,EAAwC,uDAAvB,EAAGC,EAAoB,uDAAJ,EAAI,qBAEzG,gBAEKzkC,KAAO,cAEZ,EAAKsvB,WAAa,CACjBjc,MAAOA,EACPC,OAAQA,EACRsE,MAAOA,EACP2sB,cAAeA,EACfC,eAAgBA,EAChBC,cAAeA,GAGhB,IAAMC,EAAQ,eAIdH,EAAgB15C,KAAKmgB,MAAOu5B,GAC5BC,EAAiB35C,KAAKmgB,MAAOw5B,GAC7BC,EAAgB55C,KAAKmgB,MAAOy5B,GAI5B,IAAMtF,EAAU,GACVwF,EAAW,GACXtF,EAAU,GACVC,EAAM,GAIRsF,EAAmB,EACnBC,EAAa,EAkBjB,SAASC,EAAYrR,EAAG15B,EAAG4T,EAAGo3B,EAAMC,EAAM3xB,EAAOC,EAAQsE,EAAOqtB,EAAOC,EAAO/G,GAmB7E,IAjBA,IAAMgH,EAAe9xB,EAAQ4xB,EACvBG,EAAgB9xB,EAAS4xB,EAEzBG,EAAYhyB,EAAQ,EACpBiyB,EAAahyB,EAAS,EACtBiyB,EAAY3tB,EAAQ,EAEpB4tB,EAASP,EAAQ,EACjBQ,EAASP,EAAQ,EAEnBQ,EAAgB,EAChBC,EAAa,EAEXxlB,EAAS,IAAI/D,GAITW,EAAK,EAAGA,EAAK0oB,EAAQ1oB,IAI9B,IAFA,IAAMjnB,EAAIinB,EAAKqoB,EAAgBE,EAErBxoB,EAAK,EAAGA,EAAK0oB,EAAQ1oB,IAAQ,CAEtC,IAAMjnB,EAAIinB,EAAKqoB,EAAeE,EAI9BllB,EAAQsT,GAAM59B,EAAIkvC,EAClB5kB,EAAQpmB,GAAMjE,EAAIkvC,EAClB7kB,EAAQxS,GAAM43B,EAIdZ,EAASzmD,KAAMiiC,EAAOtqB,EAAGsqB,EAAOrqB,EAAGqqB,EAAO9J,GAI1C8J,EAAQsT,GAAM,EACdtT,EAAQpmB,GAAM,EACdomB,EAAQxS,GAAMiK,EAAQ,EAAI,GAAM,EAIhCynB,EAAQnhD,KAAMiiC,EAAOtqB,EAAGsqB,EAAOrqB,EAAGqqB,EAAO9J,GAIzCipB,EAAIphD,KAAM4+B,EAAKmoB,GACf3F,EAAIphD,KAAM,EAAM6+B,EAAKmoB,GAIrBQ,GAAiB,EAYnB,IAAM,IAAI3oB,EAAK,EAAGA,EAAKmoB,EAAOnoB,IAE7B,IAAM,IAAID,EAAK,EAAGA,EAAKmoB,EAAOnoB,IAAQ,CAErC,IAAMp4B,EAAIkgD,EAAmB9nB,EAAK0oB,EAASzoB,EACrCp4B,EAAIigD,EAAmB9nB,EAAK0oB,GAAWzoB,EAAK,GAC5C1kB,EAAIusC,GAAqB9nB,EAAK,GAAM0oB,GAAWzoB,EAAK,GACpDvL,EAAIozB,GAAqB9nB,EAAK,GAAM0oB,EAASzoB,EAInDoiB,EAAQjhD,KAAMwG,EAAGC,EAAG6sB,GACpB2tB,EAAQjhD,KAAMyG,EAAG0T,EAAGmZ,GAIpBm0B,GAAc,EAQhBjB,EAAM7C,SAAUgD,EAAYc,EAAYxH,GAIxC0G,GAAcc,EAIdf,GAAoBc,EArJoF,OAqCzGZ,EAAY,IAAK,IAAK,KAAO,GAAK,EAAGltB,EAAOtE,EAAQD,EAAOoxB,EAAeD,EAAgB,GAC1FM,EAAY,IAAK,IAAK,IAAK,GAAK,EAAGltB,EAAOtE,GAAUD,EAAOoxB,EAAeD,EAAgB,GAC1FM,EAAY,IAAK,IAAK,IAAK,EAAG,EAAGzxB,EAAOuE,EAAOtE,EAAQixB,EAAeE,EAAe,GACrFK,EAAY,IAAK,IAAK,IAAK,GAAK,EAAGzxB,EAAOuE,GAAStE,EAAQixB,EAAeE,EAAe,GACzFK,EAAY,IAAK,IAAK,IAAK,GAAK,EAAGzxB,EAAOC,EAAQsE,EAAO2sB,EAAeC,EAAgB,GACxFM,EAAY,IAAK,IAAK,KAAO,GAAK,EAAGzxB,EAAOC,GAAUsE,EAAO2sB,EAAeC,EAAgB,GAI5F,EAAKxC,SAAU7C,GACf,EAAKn9B,aAAc,WAAY,IAAIq7B,GAAwBsH,EAAU,IACrE,EAAK3iC,aAAc,SAAU,IAAIq7B,GAAwBgC,EAAS,IAClE,EAAKr9B,aAAc,KAAM,IAAIq7B,GAAwBiC,EAAK,IAjD+C,E,UAFjFxB,IAmK1B,SAAS8H,GAAe3yB,GAEvB,IAAMiI,EAAM,GAEZ,IAAM,IAAMuY,KAAKxgB,EAIhB,IAAM,IAAM3iB,KAFZ4qB,EAAKuY,GAAM,GAEMxgB,EAAKwgB,GAAM,CAE3B,IAAM74C,EAAWq4B,EAAKwgB,GAAKnjC,GAEtB1V,IAAcA,EAAS47C,SAC3B57C,EAASk4B,WAAal4B,EAAS0vC,WAC/B1vC,EAASq0B,WAAar0B,EAASkkC,WAAalkC,EAAS88B,WACrD98B,EAASu7B,WAAav7B,EAASuhC,cAE/BjB,EAAKuY,GAAKnjC,GAAM1V,EAASy9B,QAEdv7B,MAAMC,QAASnC,GAE1BsgC,EAAKuY,GAAKnjC,GAAM1V,EAAS4J,QAIzB02B,EAAKuY,GAAKnjC,GAAM1V,EAQnB,OAAOsgC,EAIR,SAAS2qB,GAAeC,GAIvB,IAFA,IAAMC,EAAS,GAELtS,EAAI,EAAGA,EAAIqS,EAASvtD,OAAQk7C,IAAO,CAE5C,IAAM3hB,EAAM8zB,GAAeE,EAAUrS,IAErC,IAAM,IAAMnjC,KAAKwhB,EAEhBi0B,EAAQz1C,GAAMwhB,EAAKxhB,GAMrB,OAAOy1C,EAMR,IAAMC,GAAgB,CAAE3tB,MAAOutB,GAAethD,MAAOuhD,IAyB/CI,G,kDAEL,WAAa3W,GAAa,kCAEzB,gBAEKtvB,KAAO,iBAEZ,EAAKkmC,QAAU,GACf,EAAKJ,SAAW,GAEhB,EAAKK,aAlCc,gGAmCnB,EAAKC,eAjCgB,iEAmCrB,EAAKjN,UAAY,EAEjB,EAAKG,WAAY,EACjB,EAAKC,mBAAqB,EAE1B,EAAK1F,KAAM,EACX,EAAKwS,QAAS,EACd,EAAKC,UAAW,EAEhB,EAAK1M,UAAW,EAChB,EAAKF,cAAe,EACpB,EAAKC,cAAe,EAEpB,EAAK4M,WAAa,CACjBC,aAAa,EACbC,WAAW,EACXC,aAAa,EACbC,kBAAkB,GAKnB,EAAKC,uBAAyB,CAC7B,MAAS,CAAE,EAAG,EAAG,GACjB,GAAM,CAAE,EAAG,GACX,IAAO,CAAE,EAAG,IAGb,EAAKC,yBAAsBvqD,EAC3B,EAAKwqD,oBAAqB,EAE1B,EAAKC,YAAc,UAECzqD,IAAfgzC,SAE2BhzC,IAA1BgzC,EAAW9rB,YAEfnE,QAAQxjB,MAAO,2FAIhB,EAAKy6C,UAAWhH,IArDQ,E,wCA2D1B,SAAMhtC,GA0BL,OAxBA,4DAAYA,GAEZvI,KAAKqsD,eAAiB9jD,EAAO8jD,eAC7BrsD,KAAKosD,aAAe7jD,EAAO6jD,aAE3BpsD,KAAK+rD,SAAWF,GAAetjD,EAAOwjD,UAEtC/rD,KAAKmsD,QAAUttD,OAAOyJ,OAAQ,GAAIC,EAAO4jD,SAEzCnsD,KAAKu/C,UAAYh3C,EAAOg3C,UACxBv/C,KAAKw/C,mBAAqBj3C,EAAOi3C,mBAEjCx/C,KAAKssD,OAAS/jD,EAAO+jD,OACrBtsD,KAAKusD,SAAWhkD,EAAOgkD,SAEvBvsD,KAAK6/C,SAAWt3C,EAAOs3C,SAEvB7/C,KAAK2/C,aAAep3C,EAAOo3C,aAC3B3/C,KAAK4/C,aAAer3C,EAAOq3C,aAE3B5/C,KAAKwsD,WAAa3tD,OAAOyJ,OAAQ,GAAIC,EAAOikD,YAE5CxsD,KAAKgtD,YAAczkD,EAAOykD,YAEnBhtD,O,oBAIR,SAAQo7B,GAEP,IAAMzc,EAAO,8DAAcyc,GAK3B,IAAM,IAAM52B,KAHZma,EAAKquC,YAAchtD,KAAKgtD,YACxBruC,EAAKotC,SAAW,GAEI/rD,KAAK+rD,SAAW,CAEnC,IACMtsD,EADUO,KAAK+rD,SAAUvnD,GACT/E,MAEjBA,GAASA,EAAM28B,UAEnBzd,EAAKotC,SAAUvnD,GAAS,CACvByhB,KAAM,IACNxmB,MAAOA,EAAMs1C,OAAQ3Z,GAAOX,MAGlBh7B,GAASA,EAAMg9C,QAE1B99B,EAAKotC,SAAUvnD,GAAS,CACvByhB,KAAM,IACNxmB,MAAOA,EAAMo9C,UAGHp9C,GAASA,EAAMy1B,UAE1BvW,EAAKotC,SAAUvnD,GAAS,CACvByhB,KAAM,KACNxmB,MAAOA,EAAMu1C,WAGHv1C,GAASA,EAAMslC,UAE1BpmB,EAAKotC,SAAUvnD,GAAS,CACvByhB,KAAM,KACNxmB,MAAOA,EAAMu1C,WAGHv1C,GAASA,EAAMk+B,UAE1Bhf,EAAKotC,SAAUvnD,GAAS,CACvByhB,KAAM,KACNxmB,MAAOA,EAAMu1C,WAGHv1C,GAASA,EAAMs5B,UAE1Bpa,EAAKotC,SAAUvnD,GAAS,CACvByhB,KAAM,KACNxmB,MAAOA,EAAMu1C,WAGHv1C,GAASA,EAAM8wC,UAE1B5xB,EAAKotC,SAAUvnD,GAAS,CACvByhB,KAAM,KACNxmB,MAAOA,EAAMu1C,WAKdr2B,EAAKotC,SAAUvnD,GAAS,CACvB/E,MAAOA,GASLZ,OAAOgI,KAAM7G,KAAKmsD,SAAU3tD,OAAS,IAAImgB,EAAKwtC,QAAUnsD,KAAKmsD,SAElExtC,EAAKytC,aAAepsD,KAAKosD,aACzBztC,EAAK0tC,eAAiBrsD,KAAKqsD,eAE3B,IAAMG,EAAa,GAEnB,IAAM,IAAMztD,KAAOiB,KAAKwsD,YAES,IAA3BxsD,KAAKwsD,WAAYztD,KAAiBytD,EAAYztD,IAAQ,GAM5D,OAFKF,OAAOgI,KAAM2lD,GAAahuD,OAAS,IAAImgB,EAAK6tC,WAAaA,GAEvD7tC,M,GAnLoBk7B,IAyL7BqS,GAAe/sD,UAAU8tD,kBAAmB,E,IAEtCC,G,kDAEL,aAAc,kCAEb,gBAEKjnC,KAAO,SAEZ,EAAKod,mBAAqB,IAAIkJ,GAE9B,EAAKjJ,iBAAmB,IAAIiJ,GAC5B,EAAKhJ,wBAA0B,IAAIgJ,GATtB,E,wCAad,SAAMhkC,EAAQ0tC,GASb,OAPA,4DAAY1tC,EAAQ0tC,GAEpBj2C,KAAKqjC,mBAAmBlI,KAAM5yB,EAAO86B,oBAErCrjC,KAAKsjC,iBAAiBnI,KAAM5yB,EAAO+6B,kBACnCtjC,KAAKujC,wBAAwBpI,KAAM5yB,EAAOg7B,yBAEnCvjC,O,+BAIR,SAAmB3B,QAEFkE,IAAXlE,IAEJinB,QAAQM,KAAM,6DACdvnB,EAAS,IAAIgkC,IAIdriC,KAAKsmC,mBAAmB,GAAM,GAE9B,IAAMljC,EAAIpD,KAAKwjC,YAAYxP,SAE3B,OAAO31B,EAAOuc,KAAOxX,EAAG,IAAOA,EAAG,IAAOA,EAAG,KAAOuxB,c,+BAIpD,SAAmB0f,GAElB,yEAAyBA,GAEzBr0C,KAAKqjC,mBAAmBlI,KAAMn7B,KAAKwjC,aAActL,W,+BAIlD,SAAmBqc,EAAeC,GAEjC,yEAAyBD,EAAeC,GAExCx0C,KAAKqjC,mBAAmBlI,KAAMn7B,KAAKwjC,aAActL,W,mBAIlD,WAEC,OAAO,IAAIl4B,KAAKR,aAAc27B,KAAMn7B,U,GA/DjBmyC,IAqErB+a,GAAO/tD,UAAUu0C,UAAW,E,IAEtByZ,G,kDAEL,aAA4D,MAA/CC,EAA+C,uDAAzC,GAAIC,EAAqC,uDAA5B,EAAGhd,EAAyB,uDAAlB,GAAKC,EAAa,uDAAP,IAAO,4BAE3D,gBAEKrqB,KAAO,oBAEZ,EAAKmnC,IAAMA,EACX,EAAKE,KAAO,EAEZ,EAAKjd,KAAOA,EACZ,EAAKC,IAAMA,EACX,EAAKid,MAAQ,GAEb,EAAKF,OAASA,EACd,EAAKG,KAAO,KAEZ,EAAKC,UAAY,GACjB,EAAKC,WAAa,EAElB,EAAKC,yBAnBsD,E,wCAuB5D,SAAMplD,EAAQ0tC,GAiBb,OAfA,4DAAY1tC,EAAQ0tC,GAEpBj2C,KAAKotD,IAAM7kD,EAAO6kD,IAClBptD,KAAKstD,KAAO/kD,EAAO+kD,KAEnBttD,KAAKqwC,KAAO9nC,EAAO8nC,KACnBrwC,KAAKswC,IAAM/nC,EAAO+nC,IAClBtwC,KAAKutD,MAAQhlD,EAAOglD,MAEpBvtD,KAAKqtD,OAAS9kD,EAAO8kD,OACrBrtD,KAAKwtD,KAAuB,OAAhBjlD,EAAOilD,KAAgB,KAAO3uD,OAAOyJ,OAAQ,GAAIC,EAAOilD,MAEpExtD,KAAKytD,UAAYllD,EAAOklD,UACxBztD,KAAK0tD,WAAanlD,EAAOmlD,WAElB1tD,O,4BAYR,SAAgB4tD,GAGf,IAAMC,EAAe,GAAM7tD,KAAK8tD,gBAAkBF,EAElD5tD,KAAKotD,IAAgB,EAAVp9B,GAAclf,KAAKi9C,KAAMF,GACpC7tD,KAAK2tD,2B,4BAON,WAEC,IAAME,EAAe/8C,KAAKk9C,IAAe,GAAVl+B,GAAgB9vB,KAAKotD,KAEpD,MAAO,GAAMptD,KAAK8tD,gBAAkBD,I,6BAIrC,WAEC,OAAiB,EAAV79B,GAAclf,KAAKi9C,KACzBj9C,KAAKk9C,IAAe,GAAVl+B,GAAgB9vB,KAAKotD,KAAQptD,KAAKstD,Q,0BAI9C,WAGC,OAAOttD,KAAKytD,UAAY38C,KAAKiE,IAAK/U,KAAKqtD,OAAQ,K,2BAIhD,WAGC,OAAOrtD,KAAKytD,UAAY38C,KAAKkE,IAAKhV,KAAKqtD,OAAQ,K,2BAuChD,SAAeY,EAAWC,EAAYpyC,EAAGC,EAAGud,EAAOC,GAElDv5B,KAAKqtD,OAASY,EAAYC,EAEP,OAAdluD,KAAKwtD,OAETxtD,KAAKwtD,KAAO,CACXW,SAAS,EACTF,UAAW,EACXC,WAAY,EACZE,QAAS,EACTC,QAAS,EACT/0B,MAAO,EACPC,OAAQ,IAKVv5B,KAAKwtD,KAAKW,SAAU,EACpBnuD,KAAKwtD,KAAKS,UAAYA,EACtBjuD,KAAKwtD,KAAKU,WAAaA,EACvBluD,KAAKwtD,KAAKY,QAAUtyC,EACpB9b,KAAKwtD,KAAKa,QAAUtyC,EACpB/b,KAAKwtD,KAAKl0B,MAAQA,EAClBt5B,KAAKwtD,KAAKj0B,OAASA,EAEnBv5B,KAAK2tD,2B,6BAIN,WAEoB,OAAd3tD,KAAKwtD,OAETxtD,KAAKwtD,KAAKW,SAAU,GAIrBnuD,KAAK2tD,2B,oCAIN,WAEC,IAAMtd,EAAOrwC,KAAKqwC,KACdF,EAAME,EAAOv/B,KAAKk9C,IAAe,GAAVl+B,GAAgB9vB,KAAKotD,KAAQptD,KAAKstD,KACzD/zB,EAAS,EAAI4W,EACb7W,EAAQt5B,KAAKqtD,OAAS9zB,EACtB0W,GAAS,GAAM3W,EACbk0B,EAAOxtD,KAAKwtD,KAElB,GAAmB,OAAdxtD,KAAKwtD,MAAiBxtD,KAAKwtD,KAAKW,QAAU,CAE9C,IAAMF,EAAYT,EAAKS,UACtBC,EAAaV,EAAKU,WAEnBje,GAAQud,EAAKY,QAAU90B,EAAQ20B,EAC/B9d,GAAOqd,EAAKa,QAAU90B,EAAS20B,EAC/B50B,GAASk0B,EAAKl0B,MAAQ20B,EACtB10B,GAAUi0B,EAAKj0B,OAAS20B,EAIzB,IAAMI,EAAOtuD,KAAK0tD,WACJ,IAATY,IAAare,GAAQI,EAAOie,EAAOtuD,KAAKuuD,gBAE7CvuD,KAAKsjC,iBAAiBkrB,gBAAiBve,EAAMA,EAAO3W,EAAO6W,EAAKA,EAAM5W,EAAQ8W,EAAMrwC,KAAKswC,KAEzFtwC,KAAKujC,wBAAwBpI,KAAMn7B,KAAKsjC,kBAAmBpL,W,oBAI5D,SAAQkD,GAEP,IAAMzc,EAAO,8DAAcyc,GAgB3B,OAdAzc,EAAK1d,OAAOmsD,IAAMptD,KAAKotD,IACvBzuC,EAAK1d,OAAOqsD,KAAOttD,KAAKstD,KAExB3uC,EAAK1d,OAAOovC,KAAOrwC,KAAKqwC,KACxB1xB,EAAK1d,OAAOqvC,IAAMtwC,KAAKswC,IACvB3xB,EAAK1d,OAAOssD,MAAQvtD,KAAKutD,MAEzB5uC,EAAK1d,OAAOosD,OAASrtD,KAAKqtD,OAEP,OAAdrtD,KAAKwtD,OAAgB7uC,EAAK1d,OAAOusD,KAAO3uD,OAAOyJ,OAAQ,GAAItI,KAAKwtD,OAErE7uC,EAAK1d,OAAOwsD,UAAYztD,KAAKytD,UAC7B9uC,EAAK1d,OAAOysD,WAAa1tD,KAAK0tD,WAEvB/uC,M,GA7NuBuuC,IAmOhCC,GAAkBhuD,UAAUsvD,qBAAsB,EAElD,IAAMrB,GAAM,GAENsB,G,kDAEL,WAAare,EAAMC,EAAKqe,GAAe,MAMtC,GANsC,qBAEtC,gBAEK1oC,KAAO,cAEkC,IAAzC0oC,EAAaC,wBAGjB,OADAtpC,QAAQxjB,MAAO,0GACf,eAID,EAAK6sD,aAAeA,EAEpB,IAAME,EAAW,IAAI1B,GAAmBC,GAnBjB,EAmB8B/c,EAAMC,GAC3Due,EAASxd,OAAS,EAAKA,OACvBwd,EAASliD,GAAGiO,IAAK,GAAK,EAAG,GACzBi0C,EAASjb,OAAQ,IAAIvR,GAAS,EAAG,EAAG,IACpC,EAAK0D,IAAK8oB,GAEV,IAAMC,EAAW,IAAI3B,GAAmBC,GAzBjB,EAyB8B/c,EAAMC,GAC3Dwe,EAASzd,OAAS,EAAKA,OACvByd,EAASniD,GAAGiO,IAAK,GAAK,EAAG,GACzBk0C,EAASlb,OAAQ,IAAIvR,IAAW,EAAG,EAAG,IACtC,EAAK0D,IAAK+oB,GAEV,IAAMC,EAAW,IAAI5B,GAAmBC,GA/BjB,EA+B8B/c,EAAMC,GAC3Dye,EAAS1d,OAAS,EAAKA,OACvB0d,EAASpiD,GAAGiO,IAAK,EAAG,EAAG,GACvBm0C,EAASnb,OAAQ,IAAIvR,GAAS,EAAG,EAAG,IACpC,EAAK0D,IAAKgpB,GAEV,IAAMC,EAAW,IAAI7B,GAAmBC,GArCjB,EAqC8B/c,EAAMC,GAC3D0e,EAAS3d,OAAS,EAAKA,OACvB2d,EAASriD,GAAGiO,IAAK,EAAG,GAAK,GACzBo0C,EAASpb,OAAQ,IAAIvR,GAAS,GAAK,EAAG,IACtC,EAAK0D,IAAKipB,GAEV,IAAMC,EAAW,IAAI9B,GAAmBC,GA3CjB,EA2C8B/c,EAAMC,GAC3D2e,EAAS5d,OAAS,EAAKA,OACvB4d,EAAStiD,GAAGiO,IAAK,GAAK,EAAG,GACzBq0C,EAASrb,OAAQ,IAAIvR,GAAS,EAAG,EAAG,IACpC,EAAK0D,IAAKkpB,GAEV,IAAMC,EAAW,IAAI/B,GAAmBC,GAjDjB,EAiD8B/c,EAAMC,GA7CrB,OA8CtC4e,EAAS7d,OAAS,EAAKA,OACvB6d,EAASviD,GAAGiO,IAAK,GAAK,EAAG,GACzBs0C,EAAStb,OAAQ,IAAIvR,GAAS,EAAG,GAAK,IACtC,EAAK0D,IAAKmpB,GAjD4B,E,0CAqDvC,SAAQC,EAAUC,GAEI,OAAhBpvD,KAAKoyC,QAAkBpyC,KAAKs0C,oBAEjC,IAAMqa,EAAe3uD,KAAK2uD,aAE1B,cAAuE3uD,KAAK+F,SAA5E,GAAQ8oD,EAAR,KAAkBC,EAAlB,KAA4BC,EAA5B,KAAsCC,EAAtC,KAAgDC,EAAhD,KAA0DC,EAA1D,KAEMG,EAAmBF,EAASlkC,GAAGkjC,QAC/BmB,EAAsBH,EAASI,kBAErCJ,EAASlkC,GAAGkjC,SAAU,EAEtB,IAAMtzB,EAAkB8zB,EAAa1wB,QAAQpD,gBAE7C8zB,EAAa1wB,QAAQpD,iBAAkB,EAEvCs0B,EAASK,gBAAiBb,EAAc,GACxCQ,EAAS3pD,OAAQ4pD,EAAOP,GAExBM,EAASK,gBAAiBb,EAAc,GACxCQ,EAAS3pD,OAAQ4pD,EAAON,GAExBK,EAASK,gBAAiBb,EAAc,GACxCQ,EAAS3pD,OAAQ4pD,EAAOL,GAExBI,EAASK,gBAAiBb,EAAc,GACxCQ,EAAS3pD,OAAQ4pD,EAAOJ,GAExBG,EAASK,gBAAiBb,EAAc,GACxCQ,EAAS3pD,OAAQ4pD,EAAOH,GAExBN,EAAa1wB,QAAQpD,gBAAkBA,EAEvCs0B,EAASK,gBAAiBb,EAAc,GACxCQ,EAAS3pD,OAAQ4pD,EAAOF,GAExBC,EAASK,gBAAiBF,GAE1BH,EAASlkC,GAAGkjC,QAAUkB,M,GA9FCld,IAoGnBsd,G,kDAEL,WAAa9zB,EAAQ3B,EAASE,EAAOC,EAAOC,EAAWC,EAAWC,EAAQrU,EAAMsU,EAAYC,GAAW,iCAEtGmB,OAAoBp5B,IAAXo5B,EAAuBA,EAAS,GACzC3B,OAAsBz3B,IAAZy3B,EAAwBA,EA7hXN,IA8hX5BM,OAAoB/3B,IAAX+3B,EAAuBA,EAASxM,IAEzC,cAAO6N,EAAQ3B,EAASE,EAAOC,EAAOC,EAAWC,EAAWC,EAAQrU,EAAMsU,EAAYC,IAYjFk1B,kBAAmB,EAExB,EAAK30B,OAAQ,EApByF,E,wCAwBvG,WAEC,OAAO/6B,KAAKi5B,O,IAIb,SAAYx5B,GAEXO,KAAKi5B,MAAQx5B,M,GAlCWq6B,IAwC1B21B,GAAYtwD,UAAUwwD,eAAgB,E,IAEhCC,G,kDAEL,WAAatmC,EAAMjjB,EAASwpD,GAAQ,iCAE9BzpC,OAAO0pC,UAAWzpD,KAEtBif,QAAQM,KAAM,oGAEdvf,EAAUwpD,GAIX,cAAOvmC,EAAMA,EAAMjjB,GAEnBA,EAAUA,GAAW,GAErB,EAAK43B,QAAU,IAAIwxB,QAAaltD,EAAW8D,EAAQ2zB,QAAS3zB,EAAQ6zB,MAAO7zB,EAAQ8zB,MAAO9zB,EAAQ+zB,UAAW/zB,EAAQg0B,UAAWh0B,EAAQi0B,OAAQj0B,EAAQ4f,KAAM5f,EAAQk0B,WAAYl0B,EAAQm0B,UAE1L,EAAKyD,QAAQpD,qBAA8Ct4B,IAA5B8D,EAAQw0B,iBAAgCx0B,EAAQw0B,gBAC/E,EAAKoD,QAAQ5D,eAAkC93B,IAAtB8D,EAAQg0B,UAA0Bh0B,EAAQg0B,UAAYhN,EAE/E,EAAK4Q,QAAQyxB,kBAAmB,EAnBG,E,8DAuBpC,SAA4BP,EAAUlxB,GAErCj+B,KAAKi+B,QAAQhY,KAAOgY,EAAQhY,KAC5BjmB,KAAKi+B,QAAQ3D,OAASvM,GACtB/tB,KAAKi+B,QAAQzD,SAAWyD,EAAQzD,SAEhCx6B,KAAKi+B,QAAQpD,gBAAkBoD,EAAQpD,gBACvC76B,KAAKi+B,QAAQ5D,UAAY4D,EAAQ5D,UACjCr6B,KAAKi+B,QAAQ7D,UAAY6D,EAAQ7D,UAEjC,IAAM21B,EAEK,CACTC,UAAW,CAAEvwD,MAAO,OAHhBswD,EAMO,qYANPA,EA0BS,+UAoBTxpB,EAAW,IAAIgkB,GAAa,EAAG,EAAG,GAElC1U,EAAW,IAAIqW,GAAgB,CAEpC1nD,KAAM,sBAENunD,SAAUF,GAAekE,GACzB3D,aAAc2D,EACd1D,eAAgB0D,EAChB/V,KAxsXc,EAysXdD,SAtsXgB,IA0sXjBlE,EAASkW,SAASiE,UAAUvwD,MAAQw+B,EAEpC,IAAMgyB,EAAO,IAAI9G,GAAM5iB,EAAUsP,GAE3Bqa,EAAmBjyB,EAAQ5D,UAajC,OAVK4D,EAAQ5D,YAAc9M,IAA2B0Q,EAAQ5D,UAAYhN,GAE3D,IAAIqhC,GAAY,EAAG,GAAI1uD,MAC/BipB,OAAQkmC,EAAUc,GAEzBhyB,EAAQ5D,UAAY61B,EAEpBD,EAAK1pB,SAASlI,UACd4xB,EAAKpa,SAASxX,UAEPr+B,O,mBAIR,SAAOmvD,EAAUvS,EAAO/e,EAAOsyB,GAI9B,IAFA,IAAMb,EAAsBH,EAASI,kBAE3BhxD,EAAI,EAAGA,EAAI,EAAGA,IAEvB4wD,EAASK,gBAAiBxvD,KAAMzB,GAEhC4wD,EAASiB,MAAOxT,EAAO/e,EAAOsyB,GAI/BhB,EAASK,gBAAiBF,O,GAhIQ1xB,IAsIpCgyB,GAAsBzwD,UAAUyvD,yBAA0B,E,IAEpDyB,G,kDAEL,WAAa1xC,EAAM2a,EAAOC,EAAQe,EAAQrU,EAAM+T,EAASE,EAAOC,EAAOC,EAAWC,EAAWE,EAAYC,GAAW,kCAEnH,cAAO,KAAMR,EAASE,EAAOC,EAAOC,EAAWC,EAAWC,EAAQrU,EAAMsU,EAAYC,IAE/EvB,MAAQ,CAAEta,KAAMA,GAAQ,KAAM2a,MAAOA,GAAS,EAAGC,OAAQA,GAAU,GAExE,EAAKa,eAA0B73B,IAAd63B,EAA0BA,EAAYlN,EACvD,EAAKmN,eAA0B93B,IAAd83B,EAA0BA,EAAYnN,EAEvD,EAAK2N,iBAAkB,EACvB,EAAKE,OAAQ,EACb,EAAKC,gBAAkB,EAEvB,EAAKqpB,aAAc,EAbgG,E,UAF3FvqB,IAqB1Bu2B,GAAYlxD,UAAUy8B,eAAgB,EAEtC,IAAM00B,GAA0B,IAAI1nB,GAC9B2nB,GAA0B,IAAIluB,GAE9BmuB,G,WAEL,aAA0H,IAA7GnoB,EAA6G,uDAAxG,IAAIgO,GAAS/N,EAA2F,uDAAtF,IAAI+N,GAAS9N,EAAyE,uDAApE,IAAI8N,GAASsD,EAAuD,uDAAlD,IAAItD,GAASoa,EAAqC,uDAAhC,IAAIpa,GAASqa,EAAmB,uDAAd,IAAIra,GAAU,oBAEzHr2C,KAAK2wD,OAAS,CAAEtoB,EAAIC,EAAIC,EAAIoR,EAAI8W,EAAIC,G,uCAIrC,SAAKroB,EAAIC,EAAIC,EAAIoR,EAAI8W,EAAIC,GAExB,IAAMC,EAAS3wD,KAAK2wD,OASpB,OAPAA,EAAQ,GAAIx1B,KAAMkN,GAClBsoB,EAAQ,GAAIx1B,KAAMmN,GAClBqoB,EAAQ,GAAIx1B,KAAMoN,GAClBooB,EAAQ,GAAIx1B,KAAMwe,GAClBgX,EAAQ,GAAIx1B,KAAMs1B,GAClBE,EAAQ,GAAIx1B,KAAMu1B,GAEX1wD,O,kBAIR,SAAM4wD,GAIL,IAFA,IAAMD,EAAS3wD,KAAK2wD,OAEVpyD,EAAI,EAAGA,EAAI,EAAGA,IAEvBoyD,EAAQpyD,GAAI48B,KAAMy1B,EAAQD,OAAQpyD,IAInC,OAAOyB,O,qCAIR,SAAyBud,GAExB,IAAMozC,EAAS3wD,KAAK2wD,OACd56B,EAAKxY,EAAEyW,SACP68B,EAAM96B,EAAI,GAAK+6B,EAAM/6B,EAAI,GAAKg7B,EAAMh7B,EAAI,GAAKi7B,EAAMj7B,EAAI,GACvDk7B,EAAMl7B,EAAI,GAAKm7B,EAAMn7B,EAAI,GAAKo7B,EAAMp7B,EAAI,GAAKq7B,EAAMr7B,EAAI,GACvDs7B,EAAMt7B,EAAI,GAAKu7B,EAAMv7B,EAAI,GAAKw7B,EAAOx7B,EAAI,IAAMy7B,EAAOz7B,EAAI,IAC1D07B,EAAO17B,EAAI,IAAM27B,EAAO37B,EAAI,IAAM47B,EAAO57B,EAAI,IAAM67B,EAAO77B,EAAI,IASpE,OAPA46B,EAAQ,GAAIkB,cAAeb,EAAMH,EAAKO,EAAMH,EAAKO,EAAOH,EAAKO,EAAOH,GAAO98B,YAC3Eg8B,EAAQ,GAAIkB,cAAeb,EAAMH,EAAKO,EAAMH,EAAKO,EAAOH,EAAKO,EAAOH,GAAO98B,YAC3Eg8B,EAAQ,GAAIkB,cAAeb,EAAMF,EAAKM,EAAMF,EAAKM,EAAOF,EAAKM,EAAOF,GAAO/8B,YAC3Eg8B,EAAQ,GAAIkB,cAAeb,EAAMF,EAAKM,EAAMF,EAAKM,EAAOF,EAAKM,EAAOF,GAAO/8B,YAC3Eg8B,EAAQ,GAAIkB,cAAeb,EAAMD,EAAKK,EAAMD,EAAKK,EAAOD,EAAMK,EAAOD,GAAOh9B,YAC5Eg8B,EAAQ,GAAIkB,cAAeb,EAAMD,EAAKK,EAAMD,EAAKK,EAAOD,EAAMK,EAAOD,GAAOh9B,YAErE30B,O,8BAIR,SAAkBiB,GAEjB,IAAMslC,EAAWtlC,EAAOslC,SAMxB,OAJiC,OAA5BA,EAAS2d,gBAA0B3d,EAASge,wBAEjD+L,GAAUn1B,KAAMoL,EAAS2d,gBAAiB9gB,aAAcniC,EAAOuiC,aAExDxjC,KAAKipC,iBAAkBqnB,M,8BAI/B,SAAkBwB,GAMjB,OAJAxB,GAAUr7B,OAAOra,IAAK,EAAG,EAAG,GAC5B01C,GAAU7rB,OAAS,kBACnB6rB,GAAUltB,aAAc0uB,EAAOtuB,aAExBxjC,KAAKipC,iBAAkBqnB,M,8BAI/B,SAAkB1pB,GAMjB,IAJA,IAAM+pB,EAAS3wD,KAAK2wD,OACd17B,EAAS2R,EAAO3R,OAChB88B,GAAcnrB,EAAOnC,OAEjBlmC,EAAI,EAAGA,EAAI,EAAGA,IAAO,CAI9B,GAFiBoyD,EAAQpyD,GAAI2qC,gBAAiBjU,GAE9B88B,EAEf,OAAO,EAMT,OAAO,I,2BAIR,SAAe9rB,GAId,IAFA,IAAM0qB,EAAS3wD,KAAK2wD,OAEVpyD,EAAI,EAAGA,EAAI,EAAGA,IAAO,CAE9B,IAAMuoC,EAAQ6pB,EAAQpyD,GAQtB,GAJAgyD,GAAUz0C,EAAIgrB,EAAMxC,OAAOxoB,EAAI,EAAImqB,EAAIjxB,IAAI8G,EAAImqB,EAAIlxB,IAAI+G,EACvDy0C,GAAUx0C,EAAI+qB,EAAMxC,OAAOvoB,EAAI,EAAIkqB,EAAIjxB,IAAI+G,EAAIkqB,EAAIlxB,IAAIgH,EACvDw0C,GAAUj0B,EAAIwK,EAAMxC,OAAOhI,EAAI,EAAI2J,EAAIjxB,IAAIsnB,EAAI2J,EAAIlxB,IAAIunB,EAElDwK,EAAMoC,gBAAiBqnB,IAAc,EAEzC,OAAO,EAMT,OAAO,I,2BAIR,SAAepqB,GAId,IAFA,IAAMwqB,EAAS3wD,KAAK2wD,OAEVpyD,EAAI,EAAGA,EAAI,EAAGA,IAEvB,GAAKoyD,EAAQpyD,GAAI2qC,gBAAiB/C,GAAU,EAE3C,OAAO,EAMT,OAAO,I,mBAIR,WAEC,OAAO,IAAInmC,KAAKR,aAAc27B,KAAMn7B,U,KAMtC,SAASgyD,KAER,IAAIvtD,EAAU,KACVwtD,GAAc,EACdC,EAAgB,KAChBC,EAAY,KAEhB,SAASC,EAAkBC,EAAMC,GAEhCJ,EAAeG,EAAMC,GAErBH,EAAY1tD,EAAQ8tD,sBAAuBH,GAI5C,MAAO,CAEN1b,MAAO,YAEe,IAAhBub,GACkB,OAAlBC,IAELC,EAAY1tD,EAAQ8tD,sBAAuBH,GAE3CH,GAAc,IAIfO,KAAM,WAEL/tD,EAAQguD,qBAAsBN,GAE9BF,GAAc,GAIfS,iBAAkB,SAAW7jD,GAE5BqjD,EAAgBrjD,GAIjB8jD,WAAY,SAAWlzD,GAEtBgF,EAAUhF,IAQb,SAASmzD,GAAiBC,EAAIC,GAE7B,IAAMC,EAAWD,EAAaC,SAExBC,EAAU,IAAIC,QA6KpB,MAAO,CAENlyD,IAjED,SAAcylB,GAIb,OAFKA,EAAU0sC,+BAA+B1sC,EAAYA,EAAU7H,MAE7Dq0C,EAAQjyD,IAAKylB,IA8DpButB,OA1DD,SAAiBvtB,GAEXA,EAAU0sC,+BAA+B1sC,EAAYA,EAAU7H,MAEpE,IAAMA,EAAOq0C,EAAQjyD,IAAKylB,GAErB7H,IAEJk0C,EAAGM,aAAcx0C,EAAKnV,QAEtBwpD,EAAQI,OAAQ5sC,KAiDjByC,OA3CD,SAAiBzC,EAAW6sC,GAE3B,GAAK7sC,EAAUu+B,oBAAf,CAEC,IAAMuO,EAASN,EAAQjyD,IAAKylB,KAErB8sC,GAAUA,EAAOr4B,QAAUzU,EAAUyU,UAE3C+3B,EAAQp4C,IAAK4L,EAAW,CACvBhd,OAAQgd,EAAUhd,OAClByc,KAAMO,EAAUP,KAChBstC,gBAAiB/sC,EAAUgtC,YAC3Bv4B,QAASzU,EAAUyU,cAVtB,CAmBKzU,EAAU0sC,+BAA+B1sC,EAAYA,EAAU7H,MAEpE,IAAMA,EAAOq0C,EAAQjyD,IAAKylB,QAEZjkB,IAAToc,EAEJq0C,EAAQp4C,IAAK4L,EA/Jf,SAAuBA,EAAW6sC,GAEjC,IAAM1jC,EAAQnJ,EAAUmJ,MAClB2yB,EAAQ97B,EAAU87B,MAElB94C,EAASqpD,EAAGY,eAElBZ,EAAGa,WAAYL,EAAY7pD,GAC3BqpD,EAAGc,WAAYN,EAAY1jC,EAAO2yB,GAElC97B,EAAUg8B,mBAEV,IAAIv8B,EAAO,KAoDX,OAlDK0J,aAAiB4zB,aAErBt9B,EAAO,KAEI0J,aAAiBikC,aAE5BtuC,QAAQM,KAAM,wEAEH+J,aAAiBwzB,YAEvB38B,EAAUqtC,yBAETd,EAEJ9sC,EAAO,KAIPX,QAAQM,KAAM,2EAMfK,EAAO,KAIG0J,aAAiBmkC,WAE5B7tC,EAAO,KAEI0J,aAAiB0zB,YAE5Bp9B,EAAO,KAEI0J,aAAiBokC,WAE5B9tC,EAAO,KAEI0J,aAAiBqkC,UAE5B/tC,EAAO,KAEI0J,aAAiBskC,aAE5BhuC,EAAO,MAID,CACNzc,OAAQA,EACRyc,KAAMA,EACNstC,gBAAiB5jC,EAAMukC,kBACvBj5B,QAASzU,EAAUyU,SA2FKw4B,CAAcjtC,EAAW6sC,IAEtC10C,EAAKsc,QAAUzU,EAAUyU,WAxFtC,SAAuBzxB,EAAQgd,EAAW6sC,GAEzC,IAAM1jC,EAAQnJ,EAAUmJ,MAClB4yB,EAAc/7B,EAAU+7B,YAE9BsQ,EAAGa,WAAYL,EAAY7pD,IAEE,IAAxB+4C,EAAY/c,MAIhBqtB,EAAGsB,cAAed,EAAY,EAAG1jC,IAI5BojC,EAEJF,EAAGsB,cAAed,EAAY9Q,EAAY9kC,OAASkS,EAAMukC,kBACxDvkC,EAAO4yB,EAAY9kC,OAAQ8kC,EAAY/c,OAIxCqtB,EAAGsB,cAAed,EAAY9Q,EAAY9kC,OAASkS,EAAMukC,kBACxDvkC,EAAMykC,SAAU7R,EAAY9kC,OAAQ8kC,EAAY9kC,OAAS8kC,EAAY/c,QAIvE+c,EAAY/c,OAAU,GA+DtB6uB,CAAc11C,EAAKnV,OAAQgd,EAAW6sC,GAEtC10C,EAAKsc,QAAUzU,EAAUyU,Y,IAgBtBq5B,G,kDAEL,aAA4E,MAA/Dh7B,EAA+D,uDAAvD,EAAGC,EAAoD,uDAA3C,EAAGixB,EAAwC,uDAAxB,EAAGC,EAAqB,uDAAJ,EAAI,qBAE3E,gBACKxkC,KAAO,gBAEZ,EAAKsvB,WAAa,CACjBjc,MAAOA,EACPC,OAAQA,EACRixB,cAAeA,EACfC,eAAgBA,GAsBjB,IAnBA,IAAM8J,EAAaj7B,EAAQ,EACrBk7B,EAAcj7B,EAAS,EAEvB2xB,EAAQp6C,KAAKmgB,MAAOu5B,GACpBW,EAAQr6C,KAAKmgB,MAAOw5B,GAEpBgB,EAASP,EAAQ,EACjBQ,EAASP,EAAQ,EAEjBsJ,EAAgBn7B,EAAQ4xB,EACxBwJ,EAAiBn7B,EAAS4xB,EAI1B/F,EAAU,GACVwF,EAAW,GACXtF,EAAU,GACVC,EAAM,GAEFviB,EAAK,EAAGA,EAAK0oB,EAAQ1oB,IAI9B,IAFA,IAAMjnB,EAAIinB,EAAK0xB,EAAiBF,EAEtBzxB,EAAK,EAAGA,EAAK0oB,EAAQ1oB,IAAQ,CAEtC,IAAMjnB,EAAIinB,EAAK0xB,EAAgBF,EAE/B3J,EAASzmD,KAAM2X,GAAKC,EAAG,GAEvBupC,EAAQnhD,KAAM,EAAG,EAAG,GAEpBohD,EAAIphD,KAAM4+B,EAAKmoB,GACf3F,EAAIphD,KAAM,EAAM6+B,EAAKmoB,GAMvB,IAAM,IAAInoB,EAAK,EAAGA,EAAKmoB,EAAOnoB,IAE7B,IAAM,IAAID,EAAK,EAAGA,EAAKmoB,EAAOnoB,IAAQ,CAErC,IAAMp4B,EAAIo4B,EAAK0oB,EAASzoB,EAClBp4B,EAAIm4B,EAAK0oB,GAAWzoB,EAAK,GACzB1kB,EAAMykB,EAAK,EAAM0oB,GAAWzoB,EAAK,GACjCvL,EAAMsL,EAAK,EAAM0oB,EAASzoB,EAEhCoiB,EAAQjhD,KAAMwG,EAAGC,EAAG6sB,GACpB2tB,EAAQjhD,KAAMyG,EAAG0T,EAAGmZ,GA5DqD,OAkE3E,EAAKwwB,SAAU7C,GACf,EAAKn9B,aAAc,WAAY,IAAIq7B,GAAwBsH,EAAU,IACrE,EAAK3iC,aAAc,SAAU,IAAIq7B,GAAwBgC,EAAS,IAClE,EAAKr9B,aAAc,KAAM,IAAIq7B,GAAwBiC,EAAK,IArEiB,E,UAFjDxB,IA+UtB4Q,GAAc,CACnBC,kBAnQuB,iFAoQvBC,uBAlQ4B,6DAmQ5BC,mBAjQwB,yEAkQxBC,eAhQoB,2aAiQpBC,oBA/PyB,wFAgQzBC,aA9PkB,uCA+PlBC,mBA7PwB,+GA8PxBC,MA5PW,4pPA6PXC,sBA3P2B,g8BA4P3BC,yBA1P8B,6nBA2P9BC,8BAzPmC,4HA0PnCC,4BAxPiC,qEAyPjCC,uBAvP4B,2EAwP5BC,eAtPoB,+HAuPpBC,oBArPyB,qHAsPzBC,kBApPuB,wJAqPvBC,aAnPkB,iRAoPlBt0C,OAlPY,s0FAmPZu0C,4BAjPiC,21HAkPjCC,qBAhP0B,2jBAiP1BC,4BA/OiC,kJAgPjCC,uBA9O4B,mKA+O5BC,qBA7O0B,6MA8O1BC,0BA5O+B,mEA6O/BC,mBA3OwB,sDA4OxBC,wBA1O6B,4uFA2O7BC,gBAzOqB,g3CA0OrBC,4BAxOiC,yOAyOjCC,qBAvO0B,yTAwO1BC,mBAtOwB,+RAuOxBC,8BAjNmC,02EAkNnCC,cAtOmB,4oBAuOnBC,WArOgB,uDAsOhBC,gBApOqB,oDAqOrBC,aAnOkB,wRAoOlBC,kBAlOuB,0MAmOvBC,0BAjO+B,iYAkO/BC,kBAhOuB,4LAiOvBC,uBA/N4B,iGAgO5BC,sBA9N2B,wwFA+N3BC,kBA7NuB,szIA8NvBC,qBA1N0B,oEA2N1BC,0BAzN+B,u9BA0N/BC,sBAxN2B,sMAyN3BC,2BAvNgC,qxCAwNhCC,yBAtN8B,w0CAuN9BC,8BArNmC,wjLAsNnCC,sBApN2B,62HAqN3BC,qBAnN0B,63BAoN1BC,oBAlNyB,2QAmNzBC,qBAjN0B,mLAkN1BC,0BAhN+B,yKAiN/BC,wBA/M6B,sLAgN7BC,mBA9MwB,+XA+MxBC,aA7MkB,oJA8MlBC,kBA5MuB,mDA6MvBC,sBA3M2B,kVA4M3BC,2BA1MgC,uMA2MhCC,sBAzM2B,uKA0M3BC,2BAxMgC,qEAyMhCC,mBAvMwB,uUAwMxBC,wBAtM6B,0NAuM7BC,mBArMwB,omBAsMxBC,sBApM2B,o2BAqM3BC,qBAnM0B,iqBAoM1BC,wBAlM6B,6+BAmM7BC,gCAjMqC,qEAkMrCC,+BAhMoC,mXAiMpCC,wBA/L6B,mRAgM7BC,QA9La,wjDA+LbC,6BA7LkC,4EA8LlCC,eA5LoB,oNA6LpBC,mBA3LwB,gFA4LxBC,wBA1L6B,2UA2L7BC,sBAzL2B,uKA0L3BC,2BAxLgC,qEAyLhCC,wBAvL6B,26RAwL7BC,sBAtL2B,mxCAuL3BC,iBArLsB,kzCAsLtBC,yBApL8B,k5CAqL9BC,gBAnLqB,kOAoLrBC,qBAlL0B,ghCAmL1BC,gBAjLqB,+XAkLrBC,kBAhLuB,qdAiLvBC,qBA/K0B,0LAgL1BC,0BA9K+B,mEA+K/BC,qBA7K0B,6FA8K1BC,0BA5K+B,kyCA6K/BC,yBA3K8B,kGA4K9BC,8BA1KmC,2EA2KnCC,iBAzKsB,yFA0KtBC,eAxKoB,wIAyKpBC,UAvKe,qEAwKfC,kBAtKuB,oFAuKvBC,gBArKqB,yIAsKrBC,WApKgB,8GAqKhBC,gBAnKqB,kRAqKrBC,gBAnKqB,4NAoKrBC,gBAlKqB,8JAmKrBC,UAjKe,0VAkKfC,UAhKe,iOAiKfC,WA/JgB,01BAgKhBC,WA9JgB,wuBA+JhBC,kBA7JuB,6rBA8JvBC,kBA5JuB,ktBA6JvBC,cA3JmB,0WA4JnBC,cA1JmB,+LA2JnBC,gBAzJqB,myBA0JrBC,gBAxJqB,+hBAyJrBC,eAvJoB,gqDAwJpBC,eAtJoB,q2BAuJpBC,iBArJsB,60EAsJtBC,iBApJsB,6nCAqJtBC,gBAnJqB,6gDAoJrBC,gBAlJqB,69BAmJrBC,cAjJmB,yvDAkJnBC,cAhJmB,ymCAiJnBC,eA/IoB,kiEAgJpBC,eA9IoB,qqCA+IpBC,kBA7IuB,omGA8IvBC,kBA5IuB,+1CA6IvBC,YA3IiB,muBA4IjBC,YA1IiB,myCA2IjBC,YAzIiB,ovBA0IjBC,YAxIiB,qrBAyIjBC,YAvIiB,maAwIjBC,YAtIiB,qZAuIjBC,YArIiB,0tBAsIjBC,YApIiB,unCA2IZC,GAAc,CAEnBt7C,OAAQ,CAEPu7C,QAAS,CAAEp9D,MAAO,IAAI6gD,GAAO,WAC7BpG,QAAS,CAAEz6C,MAAO,GAElB8V,IAAK,CAAE9V,MAAO,MACdq9D,YAAa,CAAEr9D,MAAO,IAAI21B,IAC1B2nC,aAAc,CAAEt9D,MAAO,IAAI21B,IAE3BwoB,SAAU,CAAEn+C,MAAO,OAIpBu9D,YAAa,CAEZpe,YAAa,CAAEn/C,MAAO,OAIvBw9D,OAAQ,CAEPpe,OAAQ,CAAEp/C,MAAO,MACjBy9D,WAAY,CAAEz9D,OAAS,GACvBu/C,aAAc,CAAEv/C,MAAO,GACvBw/C,gBAAiB,CAAEx/C,MAAO,KAC1B09D,YAAa,CAAE19D,MAAO,IAIvB29D,MAAO,CAENrf,MAAO,CAAEt+C,MAAO,MAChBu+C,eAAgB,CAAEv+C,MAAO,IAI1B49D,SAAU,CAETxf,SAAU,CAAEp+C,MAAO,MACnBq+C,kBAAmB,CAAEr+C,MAAO,IAI7B69D,YAAa,CAEZ3e,YAAa,CAAEl/C,MAAO,OAIvB89D,QAAS,CAERtf,QAAS,CAAEx+C,MAAO,MAClBy+C,UAAW,CAAEz+C,MAAO,IAIrB+9D,UAAW,CAEVrf,UAAW,CAAE1+C,MAAO,MACpB4+C,YAAa,CAAE5+C,MAAO,IAAIi0B,GAAS,EAAG,KAIvC+pC,gBAAiB,CAEhBnf,gBAAiB,CAAE7+C,MAAO,MAC1B8+C,kBAAmB,CAAE9+C,MAAO,GAC5B++C,iBAAkB,CAAE/+C,MAAO,IAI5Bi+D,aAAc,CAEbjf,aAAc,CAAEh/C,MAAO,OAIxBk+D,aAAc,CAEbjf,aAAc,CAAEj/C,MAAO,OAIxBm+D,YAAa,CAEZ1e,YAAa,CAAEz/C,MAAO,OAIvBq6C,IAAK,CAEJ+jB,WAAY,CAAEp+D,MAAO,OACrBq+D,QAAS,CAAEr+D,MAAO,GAClBs+D,OAAQ,CAAEt+D,MAAO,KACjBu+D,SAAU,CAAEv+D,MAAO,IAAI6gD,GAAO,YAI/BgM,OAAQ,CAEP2R,kBAAmB,CAAEx+D,MAAO,IAE5By+D,WAAY,CAAEz+D,MAAO,IAErB0+D,kBAAmB,CAAE1+D,MAAO,GAAIsqB,WAAY,CAC3CigB,UAAW,GACX4S,MAAO,KAGRwhB,wBAAyB,CAAE3+D,MAAO,GAAIsqB,WAAY,CACjDs0C,WAAY,GACZC,iBAAkB,GAClBC,aAAc,GACdC,cAAe,KAGhBC,qBAAsB,CAAEh/D,MAAO,IAC/Bi/D,wBAAyB,CAAEj/D,MAAO,IAElCk/D,WAAY,CAAEl/D,MAAO,GAAIsqB,WAAY,CACpC6yB,MAAO,GACPzN,SAAU,GACVnF,UAAW,GACXuJ,SAAU,GACVqrB,QAAS,GACTC,YAAa,GACbC,MAAO,KAGRC,iBAAkB,CAAEt/D,MAAO,GAAIsqB,WAAY,CAC1Cs0C,WAAY,GACZC,iBAAkB,GAClBC,aAAc,GACdC,cAAe,KAGhBQ,cAAe,CAAEv/D,MAAO,IACxBw/D,iBAAkB,CAAEx/D,MAAO,IAE3By/D,YAAa,CAAEz/D,MAAO,GAAIsqB,WAAY,CACrC6yB,MAAO,GACPzN,SAAU,GACV2vB,MAAO,GACPvrB,SAAU,KAGX4rB,kBAAmB,CAAE1/D,MAAO,GAAIsqB,WAAY,CAC3Cs0C,WAAY,GACZC,iBAAkB,GAClBC,aAAc,GACdC,cAAe,GACfY,iBAAkB,GAClBC,gBAAiB,KAGlBC,eAAgB,CAAE7/D,MAAO,IACzB8/D,kBAAmB,CAAE9/D,MAAO,IAE5B+/D,iBAAkB,CAAE//D,MAAO,GAAIsqB,WAAY,CAC1CigB,UAAW,GACXy1B,SAAU,GACVC,YAAa,KAIdC,eAAgB,CAAElgE,MAAO,GAAIsqB,WAAY,CACxC6yB,MAAO,GACPzN,SAAU,GACV7V,MAAO,GACPC,OAAQ,KAGTqmC,MAAO,CAAEngE,MAAO,MAChBogE,MAAO,CAAEpgE,MAAO,OAIjBgmC,OAAQ,CAEPo3B,QAAS,CAAEp9D,MAAO,IAAI6gD,GAAO,WAC7BpG,QAAS,CAAEz6C,MAAO,GAClB6pB,KAAM,CAAE7pB,MAAO,GACf2vC,MAAO,CAAE3vC,MAAO,GAChB8V,IAAK,CAAE9V,MAAO,MACdm+C,SAAU,CAAEn+C,MAAO,MACnBq9D,YAAa,CAAEr9D,MAAO,IAAI21B,KAI3B08B,OAAQ,CAEP+K,QAAS,CAAEp9D,MAAO,IAAI6gD,GAAO,WAC7BpG,QAAS,CAAEz6C,MAAO,GAClBw1B,OAAQ,CAAEx1B,MAAO,IAAIi0B,GAAS,GAAK,KACnC+E,SAAU,CAAEh5B,MAAO,GACnB8V,IAAK,CAAE9V,MAAO,MACdm+C,SAAU,CAAEn+C,MAAO,MACnBq9D,YAAa,CAAEr9D,MAAO,IAAI21B,MAMtB0qC,GAAY,CAEjBC,MAAO,CAENhU,SAAUD,GAAe,CACxB8Q,GAAYt7C,OACZs7C,GAAYI,YACZJ,GAAYK,OACZL,GAAYQ,MACZR,GAAYS,SACZT,GAAY9iB,MAGbsS,aAAcuI,GAAY8G,eAC1BpP,eAAgBsI,GAAY6G,gBAI7BwE,QAAS,CAERjU,SAAUD,GAAe,CACxB8Q,GAAYt7C,OACZs7C,GAAYI,YACZJ,GAAYK,OACZL,GAAYQ,MACZR,GAAYS,SACZT,GAAYU,YACZV,GAAY9iB,IACZ8iB,GAAYtQ,OACZ,CACCrP,SAAU,CAAEx9C,MAAO,IAAI6gD,GAAO,OAIhC8L,aAAcuI,GAAYgH,iBAC1BtP,eAAgBsI,GAAY+G,kBAI7BuE,MAAO,CAENlU,SAAUD,GAAe,CACxB8Q,GAAYt7C,OACZs7C,GAAYI,YACZJ,GAAYK,OACZL,GAAYQ,MACZR,GAAYS,SACZT,GAAYU,YACZV,GAAYW,QACZX,GAAYY,UACZZ,GAAYa,gBACZb,GAAY9iB,IACZ8iB,GAAYtQ,OACZ,CACCrP,SAAU,CAAEx9C,MAAO,IAAI6gD,GAAO,IAC9BnD,SAAU,CAAE19C,MAAO,IAAI6gD,GAAO,UAC9BlD,UAAW,CAAE39C,MAAO,OAItB2sD,aAAcuI,GAAYsH,eAC1B5P,eAAgBsI,GAAYqH,gBAI7BkE,SAAU,CAETnU,SAAUD,GAAe,CACxB8Q,GAAYt7C,OACZs7C,GAAYK,OACZL,GAAYQ,MACZR,GAAYS,SACZT,GAAYU,YACZV,GAAYW,QACZX,GAAYY,UACZZ,GAAYa,gBACZb,GAAYc,aACZd,GAAYe,aACZf,GAAY9iB,IACZ8iB,GAAYtQ,OACZ,CACCrP,SAAU,CAAEx9C,MAAO,IAAI6gD,GAAO,IAC9BxD,UAAW,CAAEr9C,MAAO,GACpBs9C,UAAW,CAAEt9C,MAAO,GACpBs/C,gBAAiB,CAAEt/C,MAAO,MAI5B2sD,aAAcuI,GAAYwH,kBAC1B9P,eAAgBsI,GAAYuH,mBAI7BiE,KAAM,CAELpU,SAAUD,GAAe,CACxB8Q,GAAYt7C,OACZs7C,GAAYQ,MACZR,GAAYS,SACZT,GAAYU,YACZV,GAAYW,QACZX,GAAYY,UACZZ,GAAYa,gBACZb,GAAYgB,YACZhB,GAAY9iB,IACZ8iB,GAAYtQ,OACZ,CACCrP,SAAU,CAAEx9C,MAAO,IAAI6gD,GAAO,OAIhC8L,aAAcuI,GAAYoH,cAC1B1P,eAAgBsI,GAAYmH,eAI7Bne,OAAQ,CAEPoO,SAAUD,GAAe,CACxB8Q,GAAYt7C,OACZs7C,GAAYW,QACZX,GAAYY,UACZZ,GAAYa,gBACZb,GAAY9iB,IACZ,CACC6D,OAAQ,CAAEl+C,MAAO,SAInB2sD,aAAcuI,GAAYkH,gBAC1BxP,eAAgBsI,GAAYiH,iBAI7Bn2B,OAAQ,CAEPsmB,SAAUD,GAAe,CACxB8Q,GAAYn3B,OACZm3B,GAAY9iB,MAGbsS,aAAcuI,GAAY4H,YAC1BlQ,eAAgBsI,GAAY2H,aAI7B8D,OAAQ,CAEPrU,SAAUD,GAAe,CACxB8Q,GAAYt7C,OACZs7C,GAAY9iB,IACZ,CACC1K,MAAO,CAAE3vC,MAAO,GAChB4/C,SAAU,CAAE5/C,MAAO,GACnB4gE,UAAW,CAAE5gE,MAAO,MAItB2sD,aAAcuI,GAAY4G,gBAC1BlP,eAAgBsI,GAAY2G,iBAI7Bz9B,MAAO,CAENkuB,SAAUD,GAAe,CACxB8Q,GAAYt7C,OACZs7C,GAAYa,kBAGbrR,aAAcuI,GAAYsG,WAC1B5O,eAAgBsI,GAAYqG,YAI7B12B,OAAQ,CAEPynB,SAAUD,GAAe,CACxB8Q,GAAYt7C,OACZs7C,GAAYW,QACZX,GAAYY,UACZZ,GAAYa,gBACZ,CACCvjB,QAAS,CAAEz6C,MAAO,MAIpB2sD,aAAcuI,GAAY0H,YAC1BhQ,eAAgBsI,GAAYyH,aAI7BtK,OAAQ,CAEP/F,SAAUD,GAAe,CACxB8Q,GAAY9K,OACZ8K,GAAY9iB,MAGbsS,aAAcuI,GAAYgI,YAC1BtQ,eAAgBsI,GAAY+H,aAI7B4D,WAAY,CAEXvU,SAAU,CACT+Q,YAAa,CAAEr9D,MAAO,IAAI21B,IAC1BmrC,IAAK,CAAE9gE,MAAO,OAGf2sD,aAAcuI,GAAYkG,gBAC1BxO,eAAgBsI,GAAYiG,iBAO7B4F,KAAM,CAELzU,SAAUD,GAAe,CACxB8Q,GAAYK,OACZ,CACC/iB,QAAS,CAAEz6C,MAAO,MAIpB2sD,aAAcuI,GAAYoG,UAC1B1O,eAAgBsI,GAAYmG,WAI7B2F,SAAU,CAET1U,SAAU,CACTiE,UAAW,CAAEvwD,MAAO,OAGrB2sD,aAAcuI,GAAY0G,cAC1BhP,eAAgBsI,GAAYyG,eAI7BsF,aAAc,CAEb3U,SAAUD,GAAe,CACxB8Q,GAAYt7C,OACZs7C,GAAYa,gBACZ,CACCkD,kBAAmB,CAAElhE,MAAO,IAAI4iC,IAChCu+B,aAAc,CAAEnhE,MAAO,GACvBohE,YAAa,CAAEphE,MAAO,QAIxB2sD,aAAcuI,GAAYwG,kBAC1B9O,eAAgBsI,GAAYuG,mBAI7B4F,OAAQ,CAEP/U,SAAUD,GAAe,CACxB8Q,GAAYtQ,OACZsQ,GAAY9iB,IACZ,CACC8C,MAAO,CAAEn9C,MAAO,IAAI6gD,GAAO,IAC3BpG,QAAS,CAAEz6C,MAAO,MAIpB2sD,aAAcuI,GAAY8H,YAC1BpQ,eAAgBsI,GAAY6H,cA4B9B,SAASuE,GAAiB5R,EAAU6R,EAAUr7D,EAAOs7D,EAAShlB,GAE7D,IAGIilB,EACAC,EAJEC,EAAa,IAAI9gB,GAAO,GAC1B+gB,EAAa,EAKbC,EAAoB,KACpBC,EAA2B,EAC3BC,EAAqB,KAsKzB,SAASC,EAAU7kB,EAAOhoB,GAEzBjvB,EAAMqtD,QAAQpW,MAAM6kB,SAAU7kB,EAAMxkB,EAAGwkB,EAAM13B,EAAG03B,EAAMhyC,EAAGgqB,EAAOqnB,GAIjE,MAAO,CAENylB,cAAe,WAEd,OAAON,GAGRO,cAAe,SAAW/kB,GAAmB,IAAZhoB,EAAY,uDAAJ,EAExCwsC,EAAWxmD,IAAKgiC,GAEhB6kB,EAAUL,EADVC,EAAazsC,IAIdgtC,cAAe,WAEd,OAAOP,GAGRQ,cAAe,SAAWjtC,GAGzB6sC,EAAUL,EADVC,EAAazsC,IAIdpvB,OAnMD,SAAiBs8D,EAAY1S,EAAOjsB,EAAQ4+B,GAE3C,IAAIzB,GAA+B,IAAlBlR,EAAM4S,QAAmB5S,EAAMkR,WAAa,KAExDA,GAAcA,EAAWlkC,YAE7BkkC,EAAaU,EAASjgE,IAAKu/D,IAO5B,IAAMr1C,EAAKkkC,EAASlkC,GACdg3C,EAAUh3C,EAAGi3C,YAAcj3C,EAAGi3C,aAE/BD,GAA4C,aAAjCA,EAAQE,uBAEvB7B,EAAa,MAIM,OAAfA,EAEJmB,EAAUL,EAAYC,GAEXf,GAAcA,EAAW7jB,UAEpCglB,EAAUnB,EAAY,GACtByB,GAAa,IAIT5S,EAASiT,WAAaL,IAE1B5S,EAASiB,MAAOjB,EAASkT,eAAgBlT,EAASmT,eAAgBnT,EAASoT,kBAIvEjC,IAAgBA,EAAW3Q,eAAiB2Q,EAAWtmC,UAAYlN,SAEtDvqB,IAAZ4+D,KAEJA,EAAU,IAAIhY,GACb,IAAIoB,GAAa,EAAG,EAAG,GACvB,IAAI2B,GAAgB,CACnB1nD,KAAM,yBACNunD,SAAUF,GAAeiU,GAAUU,KAAKzU,UACxCK,aAAc0T,GAAUU,KAAKpU,aAC7BC,eAAgByT,GAAUU,KAAKnU,eAC/BrS,KAxqaW,EAyqaXW,WAAW,EACXC,YAAY,EACZd,KAAK,MAICvT,SAASi8B,gBAAiB,UAClCrB,EAAQ56B,SAASi8B,gBAAiB,MAElCrB,EAAQsB,eAAiB,SAAWtT,EAAUC,EAAOjsB,GAEpDnjC,KAAKwjC,YAAYk/B,aAAcv/B,EAAOK,cAKvC3kC,OAAOC,eAAgBqiE,EAAQtrB,SAAU,SAAU,CAElD90C,IAAK,WAEJ,OAAOf,KAAK+rD,SAASlN,OAAOp/C,SAM9BwhE,EAAQh4C,OAAQk4C,IAIjBA,EAAQtrB,SAASkW,SAASlN,OAAOp/C,MAAQ6gE,EACzCa,EAAQtrB,SAASkW,SAASmR,WAAWz9D,MAAU6gE,EAAW3Q,eAAiB2Q,EAAW5Q,kBAAuB,EAAI,EAE5G4R,IAAsBhB,GAC1BiB,IAA6BjB,EAAWrlC,SACxCumC,IAAuBrS,EAASwT,cAEhCxB,EAAQtrB,SAASwO,aAAc,EAE/Bid,EAAoBhB,EACpBiB,EAA2BjB,EAAWrlC,QACtCumC,EAAqBrS,EAASwT,aAK/Bb,EAAWj1D,QAASs0D,EAASA,EAAQ56B,SAAU46B,EAAQtrB,SAAU,EAAG,EAAG,OAE5DyqB,GAAcA,EAAWlkC,iBAEjB75B,IAAd2+D,KAEJA,EAAY,IAAI/X,GACf,IAAImL,GAAe,EAAG,GACtB,IAAIpI,GAAgB,CACnB1nD,KAAM,qBACNunD,SAAUF,GAAeiU,GAAUQ,WAAWvU,UAC9CK,aAAc0T,GAAUQ,WAAWlU,aACnCC,eAAgByT,GAAUQ,WAAWjU,eACrCrS,KAruaY,EAsuaZW,WAAW,EACXC,YAAY,EACZd,KAAK,MAIGvT,SAASi8B,gBAAiB,UAGpC3jE,OAAOC,eAAgBoiE,EAAUrrB,SAAU,MAAO,CAEjD90C,IAAK,WAEJ,OAAOf,KAAK+rD,SAASwU,IAAI9gE,SAM3BwhE,EAAQh4C,OAAQi4C,IAIjBA,EAAUrrB,SAASkW,SAASwU,IAAI9gE,MAAQ6gE,GAEH,IAAhCA,EAAW1lC,kBAEf0lC,EAAWptB,eAIZguB,EAAUrrB,SAASkW,SAAS+Q,YAAYr9D,MAAM07B,KAAMmlC,EAAWznC,QAE1DyoC,IAAsBhB,GAC1BiB,IAA6BjB,EAAWrlC,SACxCumC,IAAuBrS,EAASwT,cAEhCzB,EAAUrrB,SAASwO,aAAc,EAEjCid,EAAoBhB,EACpBiB,EAA2BjB,EAAWrlC,QACtCumC,EAAqBrS,EAASwT,aAM/Bb,EAAWj1D,QAASq0D,EAAWA,EAAU36B,SAAU26B,EAAUrrB,SAAU,EAAG,EAAG,SA2ChF,SAAS+sB,GAAoB/P,EAAIrG,EAAY/iC,EAAYqpC,GAExD,IAAM+P,EAAsBhQ,EAAGiQ,aAAc,OAEvCC,EAAYjQ,EAAaC,SAAW,KAAOvG,EAAWzrD,IAAK,2BAC3DiiE,EAAelQ,EAAaC,UAA0B,OAAdgQ,EAExCE,EAAgB,GAEhBC,EAAeC,EAAoB,MACrCC,EAAeF,EAyEnB,SAASG,EAAuBC,GAE/B,OAAKxQ,EAAaC,SAAkBF,EAAG0Q,gBAAiBD,GAEjDP,EAAUS,mBAAoBF,GAItC,SAASG,EAAyBH,GAEjC,OAAKxQ,EAAaC,SAAkBF,EAAG6Q,kBAAmBJ,GAEnDP,EAAUY,qBAAsBL,GAuCxC,SAASH,EAAoBG,GAM5B,IAJA,IAAMM,EAAgB,GAChBC,EAAoB,GACpBC,EAAoB,GAEhBvlE,EAAI,EAAGA,EAAIskE,EAAqBtkE,IAEzCqlE,EAAerlE,GAAM,EACrBslE,EAAmBtlE,GAAM,EACzBulE,EAAmBvlE,GAAM,EAI1B,MAAO,CAGNgoC,SAAU,KACVw9B,QAAS,KACTxkB,WAAW,EAEXqkB,cAAeA,EACfC,kBAAmBA,EACnBC,kBAAmBA,EACnB7iE,OAAQqiE,EACR75C,WAAY,GACZ5d,MAAO,MAoET,SAASm4D,IAIR,IAFA,IAAMJ,EAAgBR,EAAaQ,cAEzBrlE,EAAI,EAAGonC,EAAKi+B,EAAcplE,OAAQD,EAAIonC,EAAIpnC,IAEnDqlE,EAAerlE,GAAM,EAMvB,SAAS0lE,EAAiBz9C,GAEzB09C,EAA2B19C,EAAW,GAIvC,SAAS09C,EAA2B19C,EAAW29C,GAE9C,IAAMP,EAAgBR,EAAaQ,cAC7BC,EAAoBT,EAAaS,kBACjCC,EAAoBV,EAAaU,mBAEvCF,EAAep9C,GAAc,EAEW,IAAnCq9C,EAAmBr9C,KAEvBqsC,EAAGuR,wBAAyB59C,GAC5Bq9C,EAAmBr9C,GAAc,GAI7Bs9C,EAAmBt9C,KAAgB29C,MAErBrR,EAAaC,SAAWF,EAAKrG,EAAWzrD,IAAK,2BAEpD+xD,EAAaC,SAAW,sBAAwB,4BAA8BvsC,EAAW29C,GACpGL,EAAmBt9C,GAAc29C,GAMnC,SAASE,IAKR,IAHA,IAAMT,EAAgBR,EAAaQ,cAC7BC,EAAoBT,EAAaS,kBAE7BtlE,EAAI,EAAGonC,EAAKk+B,EAAkBrlE,OAAQD,EAAIonC,EAAIpnC,IAElDslE,EAAmBtlE,KAAQqlE,EAAerlE,KAE9Cs0D,EAAGyR,yBAA0B/lE,GAC7BslE,EAAmBtlE,GAAM,GAQ5B,SAASgmE,EAAqB14D,EAAOyd,EAAMrD,EAAM67B,EAAY0iB,EAAQ/mD,IAErC,IAA1Bq1C,EAAaC,UAAgC,OAAT9sC,GAA0B,OAATA,EAMzD4sC,EAAG0R,oBAAqB14D,EAAOyd,EAAMrD,EAAM67B,EAAY0iB,EAAQ/mD,GAJ/Do1C,EAAG4R,qBAAsB54D,EAAOyd,EAAMrD,EAAMu+C,EAAQ/mD,GA8PtD,SAASinD,IAERC,IAEKvB,IAAiBF,GAGtBG,GADAD,EAAeF,GACqBjiE,QAMrC,SAAS0jE,IAERzB,EAAa38B,SAAW,KACxB28B,EAAaa,QAAU,KACvBb,EAAa3jB,WAAY,EAI1B,MAAO,CAENqlB,MA/iBD,SAAgB3jE,EAAQ40C,EAAUkuB,EAASx9B,EAAU16B,GAEpD,IAAIg5D,GAAgB,EAEpB,GAAK7B,EAAe,CAEnB,IAAMr9D,EAiFR,SAA0B4gC,EAAUw9B,EAASluB,GAE5C,IAAM0J,GAAqC,IAAvB1J,EAAS0J,UAEzBulB,EAAa7B,EAAe18B,EAASyN,SAErBzxC,IAAfuiE,IAEJA,EAAa,GACb7B,EAAe18B,EAASyN,IAAO8wB,GAIhC,IAAIC,EAAWD,EAAYf,EAAQ/vB,SAEjBzxC,IAAbwiE,IAEJA,EAAW,GACXD,EAAYf,EAAQ/vB,IAAO+wB,GAI5B,IAAIp/D,EAAQo/D,EAAUxlB,QAEPh9C,IAAVoD,IAEJA,EAAQw9D,EAhDJrQ,EAAaC,SAAkBF,EAAGmS,oBAEhCjC,EAAUkC,wBA+ChBF,EAAUxlB,GAAc55C,GAIzB,OAAOA,EAhHQu/D,CAAiB3+B,EAAUw9B,EAASluB,GAE7CutB,IAAiBz9D,GAGrB09D,GADAD,EAAez9D,GACqB1E,SAIrC4jE,EA2IF,SAAsBt+B,EAAU16B,GAE/B,IAAMs5D,EAAmB/B,EAAa35C,WAChC27C,EAAqB7+B,EAAS9c,WAEhC47C,EAAgB,EAEpB,IAAM,IAAMtmE,KAAOqmE,EAAqB,CAEvC,IAAME,EAAkBH,EAAkBpmE,GACpCwmE,EAAoBH,EAAoBrmE,GAE9C,QAAyBwD,IAApB+iE,EAAgC,OAAO,EAE5C,GAAKA,EAAgB9+C,YAAc++C,EAAoB,OAAO,EAE9D,GAAKD,EAAgB3mD,OAAS4mD,EAAkB5mD,KAAO,OAAO,EAE9D0mD,IAID,OAAKjC,EAAaiC,gBAAkBA,GAE/BjC,EAAav3D,QAAUA,EAnKXw4C,CAAa9d,EAAU16B,KAyKzC,SAAoB06B,EAAU16B,GAE7B,IAAM3F,EAAQ,GACRujB,EAAa8c,EAAS9c,WACxB47C,EAAgB,EAEpB,IAAM,IAAMtmE,KAAO0qB,EAAa,CAE/B,IAAMjD,EAAYiD,EAAY1qB,GAExB4f,EAAO,GACbA,EAAK6H,UAAYA,EAEZA,EAAU7H,OAEdA,EAAKA,KAAO6H,EAAU7H,MAIvBzY,EAAOnH,GAAQ4f,EAEf0mD,IAIDjC,EAAa35C,WAAavjB,EAC1Bk9D,EAAaiC,cAAgBA,EAE7BjC,EAAav3D,MAAQA,EAnMC25D,CAAWj/B,EAAU16B,OAEpC,CAEN,IAAM0zC,GAAqC,IAAvB1J,EAAS0J,UAExB6jB,EAAa78B,WAAaA,EAASyN,IACvCovB,EAAaW,UAAYA,EAAQ/vB,IACjCovB,EAAa7jB,YAAcA,IAE3B6jB,EAAa78B,SAAWA,EAASyN,GACjCovB,EAAaW,QAAUA,EAAQ/vB,GAC/BovB,EAAa7jB,UAAYA,EAEzBslB,GAAgB,IAMc,IAA3B5jE,EAAOg0C,kBAEX4vB,GAAgB,GAIF,OAAVh5D,GAEJ4d,EAAWR,OAAQpd,EAAO,OAItBg5D,KAmPN,SAAgC5jE,EAAQ40C,EAAUkuB,EAASx9B,GAE1D,IAA+B,IAA1BusB,EAAaC,WAAwB9xD,EAAOg0C,iBAAmB1O,EAASk/B,4BAExB,OAA/CjZ,EAAWzrD,IAAK,0BAAsC,OAI5DijE,IAEA,IAAMoB,EAAqB7+B,EAAS9c,WAE9Bi8C,EAAoB3B,EAAQ4B,gBAE5BC,EAAiC/vB,EAASgX,uBAEhD,IAAM,IAAMroD,KAAQkhE,EAAoB,CAEvC,IAAMG,EAAmBH,EAAmBlhE,GAE5C,GAAKqhE,GAAoB,EAAI,CAE5B,IAAMN,EAAoBH,EAAoB5gE,GAE9C,QAA2BjC,IAAtBgjE,EAAkC,CAEtC,IAAMzjB,EAAayjB,EAAkBzjB,WAC/Bx4B,EAAOi8C,EAAkBljB,SAEzB77B,EAAYiD,EAAW1oB,IAAKwkE,GAIlC,QAAmBhjE,IAAdikB,EAA0B,SAE/B,IAAMhd,EAASgd,EAAUhd,OACnByc,EAAOO,EAAUP,KACjBstC,EAAkB/sC,EAAU+sC,gBAElC,GAAKgS,EAAkBrS,6BAA+B,CAErD,IAAMv0C,EAAO4mD,EAAkB5mD,KACzB6lD,EAAS7lD,EAAK6lD,OACd/mD,EAAS8nD,EAAkB9nD,OAE5BkB,GAAQA,EAAKmnD,8BAEjB5B,EAA2B2B,EAAkBlnD,EAAKwlD,uBAEd5hE,IAA/BgkC,EAASw/B,oBAEbx/B,EAASw/B,kBAAoBpnD,EAAKwlD,iBAAmBxlD,EAAK6mB,QAM3Dy+B,EAAiB4B,GAIlBhT,EAAGa,WAAY,MAAOlqD,GACtB+6D,EAAqBsB,EAAkBv8C,EAAMrD,EAAM67B,EAAY0iB,EAASjR,EAAiB91C,EAAS81C,QAI7FgS,EAAkBS,4BAEtB9B,EAA2B2B,EAAkBN,EAAkBpB,uBAE3B5hE,IAA/BgkC,EAASw/B,oBAEbx/B,EAASw/B,kBAAoBR,EAAkBpB,iBAAmBoB,EAAkB//B,QAMrFy+B,EAAiB4B,GAIlBhT,EAAGa,WAAY,MAAOlqD,GACtB+6D,EAAqBsB,EAAkBv8C,EAAMrD,EAAM67B,EAAY,EAAG,QAI7D,GAAc,mBAATt9C,EAA4B,CAEvC,IAAMgiB,EAAYiD,EAAW1oB,IAAKE,EAAOi0C,gBAIzC,QAAmB3yC,IAAdikB,EAA0B,SAE/B,IAAMhd,EAASgd,EAAUhd,OACnByc,EAAOO,EAAUP,KAEvBi+C,EAA2B2B,EAAmB,EAAG,GACjD3B,EAA2B2B,EAAmB,EAAG,GACjD3B,EAA2B2B,EAAmB,EAAG,GACjD3B,EAA2B2B,EAAmB,EAAG,GAEjDhT,EAAGa,WAAY,MAAOlqD,GAEtBqpD,EAAG0R,oBAAqBsB,EAAmB,EAAG,EAAG5/C,GAAM,EAAO,GAAI,GAClE4sC,EAAG0R,oBAAqBsB,EAAmB,EAAG,EAAG5/C,GAAM,EAAO,GAAI,IAClE4sC,EAAG0R,oBAAqBsB,EAAmB,EAAG,EAAG5/C,GAAM,EAAO,GAAI,IAClE4sC,EAAG0R,oBAAqBsB,EAAmB,EAAG,EAAG5/C,GAAM,EAAO,GAAI,SAE5D,GAAc,kBAATzhB,EAA2B,CAEtC,IAAMgiB,EAAYiD,EAAW1oB,IAAKE,EAAOk0C,eAIzC,QAAmB5yC,IAAdikB,EAA0B,SAE/B,IAAMhd,EAASgd,EAAUhd,OACnByc,EAAOO,EAAUP,KAEvBi+C,EAA2B2B,EAAkB,GAE7ChT,EAAGa,WAAY,MAAOlqD,GAEtBqpD,EAAG0R,oBAAqBsB,EAAkB,EAAG5/C,GAAM,EAAO,GAAI,QAExD,QAAwC1jB,IAAnCqjE,EAA+C,CAE1D,IAAMnmE,EAAQmmE,EAAgCphE,GAE9C,QAAejC,IAAV9C,EAEJ,OAASA,EAAMjB,QAEd,KAAK,EACJq0D,EAAGoT,gBAAiBJ,EAAkBpmE,GACtC,MAED,KAAK,EACJozD,EAAGqT,gBAAiBL,EAAkBpmE,GACtC,MAED,KAAK,EACJozD,EAAGsT,gBAAiBN,EAAkBpmE,GACtC,MAED,QACCozD,EAAGuT,gBAAiBP,EAAkBpmE,MAY5C4kE,IAjZCgC,CAAuBplE,EAAQ40C,EAAUkuB,EAASx9B,GAEnC,OAAV16B,GAEJgnD,EAAGa,WAAY,MAAOjqC,EAAW1oB,IAAK8K,GAAQrC,UAyfhDk7D,MAAOA,EACPC,kBAAmBA,EACnBtmC,QA1GD,WAIC,IAAM,IAAMioC,KAFZ5B,IAE0BzB,EAAgB,CAEzC,IAAM6B,EAAa7B,EAAeqD,GAElC,IAAM,IAAMC,KAAazB,EAAa,CAErC,IAAMC,EAAWD,EAAYyB,GAE7B,IAAM,IAAMhnB,KAAawlB,EAExBtB,EAAyBsB,EAAUxlB,GAAYt+C,eAExC8jE,EAAUxlB,UAIXulB,EAAYyB,UAIbtD,EAAeqD,KAmFvBE,wBA7ED,SAAkCjgC,GAEjC,QAAsChkC,IAAjC0gE,EAAe18B,EAASyN,IAA7B,CAEA,IAAM8wB,EAAa7B,EAAe18B,EAASyN,IAE3C,IAAM,IAAMuyB,KAAazB,EAAa,CAErC,IAAMC,EAAWD,EAAYyB,GAE7B,IAAM,IAAMhnB,KAAawlB,EAExBtB,EAAyBsB,EAAUxlB,GAAYt+C,eAExC8jE,EAAUxlB,UAIXulB,EAAYyB,UAIbtD,EAAe18B,EAASyN,MAwD/ByyB,uBApDD,SAAiC1C,GAEhC,IAAM,IAAMuC,KAAcrD,EAAgB,CAEzC,IAAM6B,EAAa7B,EAAeqD,GAElC,QAAkC/jE,IAA7BuiE,EAAYf,EAAQ/vB,IAAzB,CAEA,IAAM+wB,EAAWD,EAAYf,EAAQ/vB,IAErC,IAAM,IAAMuL,KAAawlB,EAExBtB,EAAyBsB,EAAUxlB,GAAYt+C,eAExC8jE,EAAUxlB,UAIXulB,EAAYf,EAAQ/vB,OAoC5BgwB,eAAgBA,EAChBC,gBAAiBA,EACjBI,wBAAyBA,GAM3B,SAASqC,GAAqB7T,EAAIrG,EAAY3qD,EAAMixD,GAEnD,IAEI6T,EAFE5T,EAAWD,EAAaC,SAmD9B/yD,KAAK4mE,QA/CL,SAAkBnnE,GAEjBknE,EAAOlnE,GA8CRO,KAAKwF,OA1CL,SAAiBkxC,EAAOlR,GAEvBqtB,EAAGgU,WAAYF,EAAMjwB,EAAOlR,GAE5B3jC,EAAKonB,OAAQuc,EAAOmhC,EAAM,IAuC3B3mE,KAAK8mE,gBAnCL,SAA0BpwB,EAAOlR,EAAOuhC,GAEvC,GAAmB,IAAdA,EAAL,CAEA,IAAIhE,EAAWn7D,EAEf,GAAKmrD,EAEJgQ,EAAYlQ,EACZjrD,EAAa,2BAOb,GAFAA,EAAa,2BAEM,QAHnBm7D,EAAYvW,EAAWzrD,IAAK,2BAM3B,YADAukB,QAAQxjB,MAAO,kIAOjBihE,EAAWn7D,GAAc++D,EAAMjwB,EAAOlR,EAAOuhC,GAE7CllE,EAAKonB,OAAQuc,EAAOmhC,EAAMI,KAY5B,SAASC,GAAmBnU,EAAIrG,EAAYjX,GAE3C,IAAI0xB,EAsBJ,SAASC,EAAiBxrB,GAEzB,GAAmB,UAAdA,EAAwB,CAE5B,GAAKmX,EAAGsU,yBAA0B,MAAO,OAAQzrB,UAAY,GAC5DmX,EAAGsU,yBAA0B,MAAO,OAAQzrB,UAAY,EAExD,MAAO,QAIRA,EAAY,UAIb,MAAmB,YAAdA,GAECmX,EAAGsU,yBAA0B,MAAO,OAAQzrB,UAAY,GAC5DmX,EAAGsU,yBAA0B,MAAO,OAAQzrB,UAAY,EAEjD,UAMF,OAKR,IAAMqX,EAA+C,qBAA3BqU,wBAA0CvU,aAAcuU,wBACtC,qBAAlCC,+BAAiDxU,aAAcwU,8BAGrE3rB,OAAqCn5C,IAAzBgzC,EAAWmG,UAA0BnG,EAAWmG,UAAY,QACtE4rB,EAAeJ,EAAiBxrB,GAEjC4rB,IAAiB5rB,IAErBp2B,QAAQM,KAAM,uBAAwB81B,EAAW,uBAAwB4rB,EAAc,YACvF5rB,EAAY4rB,GAIb,IAAMC,GAA+D,IAAtChyB,EAAWgyB,uBAEpCC,EAAc3U,EAAGiQ,aAAc,OAC/B2E,EAAoB5U,EAAGiQ,aAAc,OACrC4E,EAAiB7U,EAAGiQ,aAAc,MAClC6E,EAAiB9U,EAAGiQ,aAAc,OAElC8E,EAAgB/U,EAAGiQ,aAAc,OACjC+E,EAAoBhV,EAAGiQ,aAAc,OACrCgF,EAAcjV,EAAGiQ,aAAc,OAC/BiF,EAAsBlV,EAAGiQ,aAAc,OAEvCkF,EAAiBP,EAAoB,EACrCQ,EAAwBlV,GAAYvG,EAAWhkC,IAAK,qBAK1D,MAAO,CAENuqC,SAAUA,EAEVmV,iBAvFD,WAEC,QAAuB3lE,IAAlB0kE,EAA8B,OAAOA,EAE1C,IAA4D,IAAvDza,EAAWhkC,IAAK,kCAA8C,CAElE,IAAMu6C,EAAYvW,EAAWzrD,IAAK,kCAElCkmE,EAAgBpU,EAAGiQ,aAAcC,EAAUoF,qCAI3ClB,EAAgB,EAIjB,OAAOA,GAwEPC,gBAAiBA,EAEjBxrB,UAAWA,EACX6rB,uBAAwBA,EAExBC,YAAaA,EACbC,kBAAmBA,EACnBC,eAAgBA,EAChBC,eAAgBA,EAEhBC,cAAeA,EACfC,kBAAmBA,EACnBC,YAAaA,EACbC,oBAAqBA,EAErBC,eAAgBA,EAChBC,sBAAuBA,EACvBG,oBA1B2BJ,GAAkBC,EA4B7CI,WA1BkBtV,EAAWF,EAAGiQ,aAAc,OAAU,GAgC1D,SAASwF,GAAev+C,GAEvB,IAAM4gC,EAAQ3qD,KAEVuoE,EAAc,KACjBC,EAAkB,EAClBC,GAAuB,EACvBC,GAAmB,EAEd5hC,EAAQ,IAAIuP,GACjBsyB,EAAmB,IAAIvzC,GAEvBwzC,EAAU,CAAEnpE,MAAO,KAAM4kD,aAAa,GAyFvC,SAASwkB,IAEHD,EAAQnpE,QAAU8oE,IAEtBK,EAAQnpE,MAAQ8oE,EAChBK,EAAQvkB,YAAcmkB,EAAkB,GAIzC7d,EAAMme,UAAYN,EAClB7d,EAAMoe,gBAAkB,EAIzB,SAASC,EAAerY,EAAQxtB,EAAQ/B,EAAW6nC,GAElD,IAAMC,EAAqB,OAAXvY,EAAkBA,EAAOnyD,OAAS,EAC9C2qE,EAAW,KAEf,GAAiB,IAAZD,EAAgB,CAIpB,GAFAC,EAAWP,EAAQnpE,OAEI,IAAlBwpE,GAAuC,OAAbE,EAAoB,CAElD,IAAMC,EAAWhoC,EAAsB,EAAV8nC,EAC5BG,EAAalmC,EAAOE,mBAErBslC,EAAiB5xB,gBAAiBsyB,IAEhB,OAAbF,GAAqBA,EAAS3qE,OAAS4qE,KAE3CD,EAAW,IAAI5lB,aAAc6lB,IAI9B,IAAM,IAAI7qE,EAAI,EAAG+qE,EAAKloC,EAAW7iC,IAAM2qE,IAAY3qE,EAAG+qE,GAAM,EAE3DxiC,EAAM3L,KAAMw1B,EAAQpyD,IAAM6kC,aAAcimC,EAAYV,GAEpD7hC,EAAMxC,OAAO0Q,QAASm0B,EAAUG,GAChCH,EAAUG,EAAK,GAAMxiC,EAAMC,SAM7B6hC,EAAQnpE,MAAQ0pE,EAChBP,EAAQvkB,aAAc,EAOvB,OAHAsG,EAAMme,UAAYI,EAClBve,EAAMoe,gBAAkB,EAEjBI,EA9IRnpE,KAAK4oE,QAAUA,EACf5oE,KAAK8oE,UAAY,EACjB9oE,KAAK+oE,gBAAkB,EAEvB/oE,KAAKupE,KAAO,SAAW5Y,EAAQ6Y,EAAqBrmC,GAEnD,IAAMgrB,EACa,IAAlBwC,EAAOnyD,QACPgrE,GAGoB,IAApBhB,GACAC,EAOD,OALAA,EAAuBe,EAEvBjB,EAAcS,EAAerY,EAAQxtB,EAAQ,GAC7CqlC,EAAkB7X,EAAOnyD,OAElB2vD,GAIRnuD,KAAKypE,aAAe,WAEnBf,GAAmB,EACnBM,EAAe,OAIhBhpE,KAAK0pE,WAAa,WAEjBhB,GAAmB,EACnBG,KAID7oE,KAAKiR,SAAW,SAAW4kC,EAAU1S,EAAQwmC,GAE5C,IAAMhZ,EAAS9a,EAASwF,eACvBC,EAAmBzF,EAASyF,iBAC5BC,EAAc1F,EAAS0F,YAElBquB,EAAqB7/C,EAAWhpB,IAAK80C,GAE3C,IAAO4yB,GAAmC,OAAX9X,GAAqC,IAAlBA,EAAOnyD,QAAgBkqE,IAAsBntB,EAIzFmtB,EAIJM,EAAe,MAIfH,QAIK,CAEN,IAAMgB,EAAUnB,EAAmB,EAAIF,EACtCsB,EAAoB,EAAVD,EAEPV,EAAWS,EAAmBG,eAAiB,KAEnDnB,EAAQnpE,MAAQ0pE,EAEhBA,EAAWH,EAAerY,EAAQxtB,EAAQ2mC,EAASH,GAEnD,IAAM,IAAIprE,EAAI,EAAGA,IAAMurE,IAAYvrE,EAElC4qE,EAAU5qE,GAAMgqE,EAAahqE,GAI9BqrE,EAAmBG,cAAgBZ,EACnCnpE,KAAK+oE,gBAAkBztB,EAAmBt7C,KAAK8oE,UAAY,EAC3D9oE,KAAK8oE,WAAae,IAoErB,SAASG,GAAe7a,GAEvB,IAAI6R,EAAW,IAAI/N,QAEnB,SAASgX,EAAmBhsC,EAASjE,GAYpC,OAVKA,IAAYnN,EAEhBoR,EAAQjE,QAvrcmB,IAGW,MAsrc3BA,IAEXiE,EAAQjE,QA1rcmB,KA8rcrBiE,EAqDR,SAASisC,EAAkB94D,GAE1B,IAAM6sB,EAAU7sB,EAAM/S,OAEtB4/B,EAAQ1rB,oBAAqB,UAAW23D,GAExC,IAAMC,EAAUnJ,EAASjgE,IAAKk9B,QAEb17B,IAAZ4nE,IAEJnJ,EAAS5N,OAAQn1B,GACjBksC,EAAQ9rC,WAYV,MAAO,CACNt9B,IAzED,SAAck9B,GAEb,GAAKA,GAAWA,EAAQ7B,UAAY,CAEnC,IAAMpC,EAAUiE,EAAQjE,QAExB,GAAKA,IAAYnN,GAtscqB,MAsscemN,EAA+C,CAEnG,GAAKgnC,EAASx4C,IAAKyV,GAGlB,OAAOgsC,EADSjJ,EAASjgE,IAAKk9B,GAAUA,QACLA,EAAQjE,SAI3C,IAAMf,EAAQgF,EAAQhF,MAEtB,GAAKA,GAASA,EAAMM,OAAS,EAAI,CAEhC,IAAM+1B,EAAsBH,EAASI,kBAE/BZ,EAAe,IAAIiB,GAAuB32B,EAAMM,OAAS,GAQ/D,OAPAo1B,EAAayb,2BAA4Bjb,EAAUlxB,GACnD+iC,EAASpmD,IAAKqjB,EAAS0wB,GAEvBQ,EAASK,gBAAiBF,GAE1BrxB,EAAQ3rB,iBAAkB,UAAW43D,GAE9BD,EAAmBtb,EAAa1wB,QAASA,EAAQjE,SAMxD,OAAO,MAUX,OAAOiE,GA6BPI,QARD,WAEC2iC,EAAW,IAAI/N,UAWjB,SAASoX,GAAiBxX,GAEzB,IAAMrG,EAAa,GAEnB,SAAS8d,EAAc9lE,GAEtB,QAA4BjC,IAAvBiqD,EAAYhoD,GAEhB,OAAOgoD,EAAYhoD,GAIpB,IAAIu+D,EAEJ,OAASv+D,GAER,IAAK,sBACJu+D,EAAYlQ,EAAGyX,aAAc,wBAA2BzX,EAAGyX,aAAc,4BAA+BzX,EAAGyX,aAAc,8BACzH,MAED,IAAK,iCACJvH,EAAYlQ,EAAGyX,aAAc,mCAAsCzX,EAAGyX,aAAc,uCAA0CzX,EAAGyX,aAAc,yCAC/I,MAED,IAAK,gCACJvH,EAAYlQ,EAAGyX,aAAc,kCAAqCzX,EAAGyX,aAAc,sCAAyCzX,EAAGyX,aAAc,wCAC7I,MAED,IAAK,iCACJvH,EAAYlQ,EAAGyX,aAAc,mCAAsCzX,EAAGyX,aAAc,yCACpF,MAED,QACCvH,EAAYlQ,EAAGyX,aAAc9lE,GAM/B,OAFAgoD,EAAYhoD,GAASu+D,EAEdA,EAIR,MAAO,CAENv6C,IAAK,SAAWhkB,GAEf,OAAgC,OAAzB8lE,EAAc9lE,IAItB+kE,KAAM,SAAWzW,GAEXA,EAAaC,SAEjBuX,EAAc,2BAIdA,EAAc,uBACdA,EAAc,qBACdA,EAAc,0BACdA,EAAc,iCACdA,EAAc,4BACdA,EAAc,0BACdA,EAAc,2BACdA,EAAc,2BAIfA,EAAc,4BACdA,EAAc,gCAIfvpE,IAAK,SAAWyD,GAEf,IAAMu+D,EAAYuH,EAAc9lE,GAQhC,OANmB,OAAdu+D,GAEJz9C,QAAQM,KAAM,wBAA0BphB,EAAO,6BAIzCu+D,IAQV,SAASwH,GAAiB1X,EAAIppC,EAAY5nB,EAAMohE,GAE/C,IAAMxuB,EAAa,GACb+1B,EAAsB,IAAIvX,QAEhC,SAASwX,EAAmBr5D,GAE3B,IAAMm1B,EAAWn1B,EAAM/S,OAQvB,IAAM,IAAMmG,KANY,OAAnB+hC,EAAS16B,OAEb4d,EAAWsqB,OAAQxN,EAAS16B,OAIT06B,EAAS9c,WAE5BA,EAAWsqB,OAAQxN,EAAS9c,WAAYjlB,IAIzC+hC,EAASh0B,oBAAqB,UAAWk4D,UAElCh2B,EAAYlO,EAASyN,IAE5B,IAAMxtB,EAAYgkD,EAAoBzpE,IAAKwlC,GAEtC/f,IAEJiD,EAAWsqB,OAAQvtB,GACnBgkD,EAAoBpX,OAAQ7sB,IAI7B08B,EAAcuD,wBAAyBjgC,IAEK,IAAvCA,EAASk/B,kCAENl/B,EAASw/B,kBAMjBlkE,EAAK6oE,OAAOj2B,aAgDb,SAASk2B,EAA0BpkC,GAElC,IAAM6e,EAAU,GAEVwlB,EAAgBrkC,EAAS16B,MACzBg/D,EAAmBtkC,EAAS9c,WAAW0lB,SACzClU,EAAU,EAEd,GAAuB,OAAlB2vC,EAAyB,CAE7B,IAAMj7C,EAAQi7C,EAAcj7C,MAC5BsL,EAAU2vC,EAAc3vC,QAExB,IAAM,IAAI18B,EAAI,EAAGyK,EAAI2mB,EAAMnxB,OAAQD,EAAIyK,EAAGzK,GAAK,EAAI,CAElD,IAAMoM,EAAIglB,EAAOpxB,EAAI,GACfqM,EAAI+kB,EAAOpxB,EAAI,GACf+f,EAAIqR,EAAOpxB,EAAI,GAErB6mD,EAAQjhD,KAAMwG,EAAGC,EAAGA,EAAG0T,EAAGA,EAAG3T,QAIxB,CAEN,IAAMglB,EAAQk7C,EAAiBl7C,MAC/BsL,EAAU4vC,EAAiB5vC,QAE3B,IAAM,IAAI18B,EAAI,EAAGyK,EAAM2mB,EAAMnxB,OAAS,EAAM,EAAGD,EAAIyK,EAAGzK,GAAK,EAAI,CAE9D,IAAMoM,EAAIpM,EAAI,EACRqM,EAAIrM,EAAI,EACR+f,EAAI/f,EAAI,EAEd6mD,EAAQjhD,KAAMwG,EAAGC,EAAGA,EAAG0T,EAAGA,EAAG3T,IAM/B,IAAM6b,EAAY,IAAMg9B,GAAU4B,GAAY,MAAQhC,GAAwBF,IAAyBkC,EAAS,GAChH5+B,EAAUyU,QAAUA,EAMpB,IAAM6vC,EAAoBN,EAAoBzpE,IAAKwlC,GAE9CukC,GAAoBrhD,EAAWsqB,OAAQ+2B,GAI5CN,EAAoB5vD,IAAK2rB,EAAU/f,GAkCpC,MAAO,CAENzlB,IArID,SAAcE,EAAQslC,GAErB,OAAmC,IAA9BkO,EAAYlO,EAASyN,MAE1BzN,EAASj0B,iBAAkB,UAAWm4D,GAEtCh2B,EAAYlO,EAASyN,KAAO,EAE5BnyC,EAAK6oE,OAAOj2B,cANqClO,GAoIjDtd,OAxHD,SAAiBsd,GAEhB,IAAM6+B,EAAqB7+B,EAAS9c,WAIpC,IAAM,IAAMjlB,KAAQ4gE,EAEnB37C,EAAWR,OAAQm8C,EAAoB5gE,GAAQ,OAMhD,IAAMw/C,EAAkBzd,EAASyd,gBAEjC,IAAM,IAAMx/C,KAAQw/C,EAInB,IAFA,IAAMr0B,EAAQq0B,EAAiBx/C,GAErBjG,EAAI,EAAGyK,EAAI2mB,EAAMnxB,OAAQD,EAAIyK,EAAGzK,IAEzCkrB,EAAWR,OAAQ0G,EAAOpxB,GAAK,QAoGjCwsE,sBAnCD,SAAgCxkC,GAE/B,IAAMykC,EAAmBR,EAAoBzpE,IAAKwlC,GAElD,GAAKykC,EAAmB,CAEvB,IAAMJ,EAAgBrkC,EAAS16B,MAER,OAAlB++D,GAICI,EAAiB/vC,QAAU2vC,EAAc3vC,SAE7C0vC,EAA0BpkC,QAQ5BokC,EAA0BpkC,GAI3B,OAAOikC,EAAoBzpE,IAAKwlC,KAelC,SAAS0kC,GAA4BpY,EAAIrG,EAAY3qD,EAAMixD,GAE1D,IAEI6T,EAQA1gD,EAAMstC,EAVJR,EAAWD,EAAaC,SA4D9B/yD,KAAK4mE,QAxDL,SAAkBnnE,GAEjBknE,EAAOlnE,GAuDRO,KAAKioD,SAjDL,SAAmBxoD,GAElBwmB,EAAOxmB,EAAMwmB,KACbstC,EAAkB9zD,EAAM8zD,iBA+CzBvzD,KAAKwF,OA3CL,SAAiBkxC,EAAOlR,GAEvBqtB,EAAGqY,aAAcvE,EAAMnhC,EAAOvf,EAAMywB,EAAQ6c,GAE5C1xD,EAAKonB,OAAQuc,EAAOmhC,EAAM,IAwC3B3mE,KAAK8mE,gBApCL,SAA0BpwB,EAAOlR,EAAOuhC,GAEvC,GAAmB,IAAdA,EAAL,CAEA,IAAIhE,EAAWn7D,EAEf,GAAKmrD,EAEJgQ,EAAYlQ,EACZjrD,EAAa,6BAOb,GAFAA,EAAa,6BAEM,QAHnBm7D,EAAYvW,EAAWzrD,IAAK,2BAM3B,YADAukB,QAAQxjB,MAAO,yIAOjBihE,EAAWn7D,GAAc++D,EAAMnhC,EAAOvf,EAAMywB,EAAQ6c,EAAiBwT,GAErEllE,EAAKonB,OAAQuc,EAAOmhC,EAAMI,KAa5B,SAASoE,GAAWtY,GAEnB,IAKMrtD,EAAS,CACd8sD,MAAO,EACP8Y,MAAO,EACPC,UAAW,EACX5lC,OAAQ,EACR6lC,MAAO,GA+CR,MAAO,CACNZ,OA1Dc,CACdj2B,WAAY,EACZnZ,SAAU,GAyDV91B,OAAQA,EACR+lE,SAAU,KACVC,WAAW,EACX9G,MAfD,WAECl/D,EAAO8sD,QACP9sD,EAAO4lE,MAAQ,EACf5lE,EAAO6lE,UAAY,EACnB7lE,EAAOigC,OAAS,EAChBjgC,EAAO8lE,MAAQ,GAUfriD,OAlDD,SAAiBuc,EAAOmhC,EAAM8E,GAI7B,OAFAjmE,EAAO4lE,QAEEzE,GAER,KAAK,EACJnhE,EAAO6lE,WAAaI,GAAkBjmC,EAAQ,GAC9C,MAED,KAAK,EACJhgC,EAAO8lE,OAASG,GAAkBjmC,EAAQ,GAC1C,MAED,KAAK,EACJhgC,EAAO8lE,OAASG,GAAkBjmC,EAAQ,GAC1C,MAED,KAAK,EACJhgC,EAAO8lE,OAASG,EAAgBjmC,EAChC,MAED,KAAK,EACJhgC,EAAOigC,QAAUgmC,EAAgBjmC,EACjC,MAED,QACClgB,QAAQxjB,MAAO,sCAAuC6kE,MA4B1D,SAAS+E,GAAe/gE,EAAGC,GAE1B,OAAOD,EAAG,GAAMC,EAAG,GAIpB,SAAS+gE,GAAkBhhE,EAAGC,GAE7B,OAAOkG,KAAKihB,IAAKnnB,EAAG,IAAQkG,KAAKihB,IAAKpnB,EAAG,IAI1C,SAASihE,GAAmB/Y,GAO3B,IALA,IAAMgZ,EAAiB,GACjB3hB,EAAkB,IAAI3G,aAAc,GAEpCuoB,EAAiB,GAEbvtE,EAAI,EAAGA,EAAI,EAAGA,IAEvButE,EAAgBvtE,GAAM,CAAEA,EAAG,GAwH5B,MAAO,CAEN0qB,OAtHD,SAAiBhoB,EAAQslC,EAAUsP,EAAUkuB,GAE5C,IAAMgI,EAAmB9qE,EAAOooD,sBAK1B7qD,OAA8B+D,IAArBwpE,EAAiC,EAAIA,EAAiBvtE,OAEjEwtE,EAAaH,EAAgBtlC,EAASyN,IAE1C,QAAoBzxC,IAAfypE,EAA2B,CAI/BA,EAAa,GAEb,IAAM,IAAIztE,EAAI,EAAGA,EAAIC,EAAQD,IAE5BytE,EAAYztE,GAAM,CAAEA,EAAG,GAIxBstE,EAAgBtlC,EAASyN,IAAOg4B,EAMjC,IAAM,IAAIztE,EAAI,EAAGA,EAAIC,EAAQD,IAAO,CAEnC,IAAM4rD,EAAY6hB,EAAYztE,GAE9B4rD,EAAW,GAAM5rD,EACjB4rD,EAAW,GAAM4hB,EAAkBxtE,GAIpCytE,EAAWC,KAAMN,IAEjB,IAAM,IAAIptE,EAAI,EAAGA,EAAI,EAAGA,IAElBA,EAAIC,GAAUwtE,EAAYztE,GAAK,IAEnCutE,EAAgBvtE,GAAK,GAAMytE,EAAYztE,GAAK,GAC5CutE,EAAgBvtE,GAAK,GAAMytE,EAAYztE,GAAK,KAI5CutE,EAAgBvtE,GAAK,GAAM6nB,OAAO8lD,iBAClCJ,EAAgBvtE,GAAK,GAAM,GAM7ButE,EAAeG,KAAMP,IAOrB,IALA,IAAM/rB,EAAe9J,EAAS8J,cAAgBpZ,EAASyd,gBAAgB7U,SACjEyQ,EAAe/J,EAAS+J,cAAgBrZ,EAASyd,gBAAgB1f,OAEnE6nC,EAAqB,EAEf5tE,EAAI,EAAGA,EAAI,EAAGA,IAAO,CAE9B,IAAM4rD,EAAY2hB,EAAgBvtE,GAC5BsN,EAAQs+C,EAAW,GACnB1qD,EAAQ0qD,EAAW,GAEpBt+C,IAAUua,OAAO8lD,kBAAoBzsE,GAEpCkgD,GAAgBpZ,EAAS9xB,aAAc,cAAgBlW,KAAQohD,EAAc9zC,IAEjF06B,EAASte,aAAc,cAAgB1pB,EAAGohD,EAAc9zC,IAIpD+zC,GAAgBrZ,EAAS9xB,aAAc,cAAgBlW,KAAQqhD,EAAc/zC,IAEjF06B,EAASte,aAAc,cAAgB1pB,EAAGqhD,EAAc/zC,IAIzDq+C,EAAiB3rD,GAAMkB,EACvB0sE,GAAsB1sE,IAIjBkgD,IAA+D,IAA/CpZ,EAAS6lC,aAAc,cAAgB7tE,IAE3DgoC,EAASi8B,gBAAiB,cAAgBjkE,GAItCqhD,IAA+D,IAA/CrZ,EAAS6lC,aAAc,cAAgB7tE,IAE3DgoC,EAASi8B,gBAAiB,cAAgBjkE,GAI3C2rD,EAAiB3rD,GAAM,GASzB,IAAM8tE,EAAqB9lC,EAAS0d,qBAAuB,EAAI,EAAIkoB,EAEnEpI,EAAQuI,cAAcC,SAAU1Z,EAAI,2BAA4BwZ,GAChEtI,EAAQuI,cAAcC,SAAU1Z,EAAI,wBAAyB3I,KAY/D,SAASsiB,GAAc3Z,EAAIpe,EAAYhrB,EAAY5nB,GAElD,IAAI4qE,EAAY,IAAIxZ,QA+CpB,SAASyZ,EAAwBt7D,GAEhC,IAAMu7D,EAAgBv7D,EAAM/S,OAE5BsuE,EAAcp6D,oBAAqB,UAAWm6D,GAE9CjjD,EAAWsqB,OAAQ44B,EAAcz3B,gBAEI,OAAhCy3B,EAAcx3B,eAAyB1rB,EAAWsqB,OAAQ44B,EAAcx3B,eAI9E,MAAO,CAENlsB,OA3DD,SAAiBhoB,GAEhB,IAAMqxD,EAAQzwD,EAAK2D,OAAO8sD,MAEpB/rB,EAAWtlC,EAAOslC,SAClBqmC,EAAiBn4B,EAAW1zC,IAAKE,EAAQslC,GA8B/C,OA1BKkmC,EAAU1rE,IAAK6rE,KAAqBta,IAExC7d,EAAWxrB,OAAQ2jD,GAEnBH,EAAU7xD,IAAKgyD,EAAgBta,IAI3BrxD,EAAOg0C,mBAE2D,IAAjEh0C,EAAO4rE,iBAAkB,UAAWH,IAExCzrE,EAAOqR,iBAAkB,UAAWo6D,GAIrCjjD,EAAWR,OAAQhoB,EAAOi0C,eAAgB,OAEZ,OAAzBj0C,EAAOk0C,eAEX1rB,EAAWR,OAAQhoB,EAAOk0C,cAAe,QAMpCy3B,GAyBPvuC,QArBD,WAECouC,EAAY,IAAIxZ,UAl1DlB6M,GAAUgN,SAAW,CAEpB/gB,SAAUD,GAAe,CACxBgU,GAAUI,SAASnU,SACnB,CACC1O,UAAW,CAAE59C,MAAO,GACpB89C,aAAc,CAAE99C,MAAO,MACvB69C,mBAAoB,CAAE79C,MAAO,GAC7B+9C,sBAAuB,CAAE/9C,MAAO,MAChCi+C,qBAAsB,CAAEj+C,MAAO,IAAIi0B,GAAS,EAAG,IAC/C+pB,mBAAoB,CAAEh+C,MAAO,MAC7Bu9C,MAAO,CAAEv9C,MAAO,IAAI6gD,GAAO,IAC3BysB,aAAc,CAAEttE,MAAO,GACvButE,gBAAiB,CAAEvtE,MAAO,SAI5B2sD,aAAcuI,GAAYwH,kBAC1B9P,eAAgBsI,GAAYuH,mB,IAy1DvB+Q,G,kDAEL,aAA6D,MAAhDtuD,EAAgD,uDAAzC,KAAM2a,EAAmC,uDAA3B,EAAGC,EAAwB,uDAAf,EAAGsE,EAAY,uDAAJ,EAAI,4BAE5D,cAAO,OAEF5E,MAAQ,CAAEta,OAAM2a,QAAOC,SAAQsE,SAEpC,EAAKzD,UAAYlN,EACjB,EAAKmN,UAAYnN,EAEjB,EAAKggD,MAAQlgD,EAEb,EAAK6N,iBAAkB,EACvB,EAAKE,OAAQ,EACb,EAAKC,gBAAkB,EAEvB,EAAKqpB,aAAc,EAfyC,E,UAF7BvqB,IAuBjCmzC,GAAmB9tE,UAAUguE,sBAAuB,E,IAE9CC,G,kDAEL,aAA6D,MAAhDzuD,EAAgD,uDAAzC,KAAM2a,EAAmC,uDAA3B,EAAGC,EAAwB,uDAAf,EAAGsE,EAAY,uDAAJ,EAAI,4BAU5D,cAAO,OAEF5E,MAAQ,CAAEta,OAAM2a,QAAOC,SAAQsE,SAEpC,EAAKzD,UAAYlN,EACjB,EAAKmN,UAAYnN,EAEjB,EAAKggD,MAAQlgD,EAEb,EAAK6N,iBAAkB,EACvB,EAAKE,OAAQ,EACb,EAAKC,gBAAkB,EAEvB,EAAKqpB,aAAc,EAvByC,E,UAFlCvqB,IA+B5BszC,GAAcjuE,UAAUkuE,iBAAkB,EA6C1C,IAAMC,GAAe,IAAIxzC,GACnByzC,GAAsB,IAAIN,GAC1BO,GAAiB,IAAIJ,GACrBK,GAAmB,IAAIhe,GAMvBie,GAAgB,GAChBC,GAAgB,GAIhBC,GAAY,IAAIrqB,aAAc,IAC9BsqB,GAAY,IAAItqB,aAAc,GAC9BuqB,GAAY,IAAIvqB,aAAc,GAIpC,SAASwqB,GAASp+C,EAAOq+C,EAASC,GAEjC,IAAMC,EAAYv+C,EAAO,GAEzB,GAAKu+C,GAAa,GAAKA,EAAY,EAAI,OAAOv+C,EAI9C,IAAMxsB,EAAI6qE,EAAUC,EAChB71C,EAAIs1C,GAAevqE,GASvB,QAPWZ,IAAN61B,IAEJA,EAAI,IAAImrB,aAAcpgD,GACtBuqE,GAAevqE,GAAMi1B,GAIL,IAAZ41C,EAAgB,CAEpBE,EAAUl5B,QAAS5c,EAAG,GAEtB,IAAM,IAAI75B,EAAI,EAAGkf,EAAS,EAAGlf,IAAMyvE,IAAYzvE,EAE9Ckf,GAAUwwD,EACVt+C,EAAOpxB,GAAIy2C,QAAS5c,EAAG3a,GAMzB,OAAO2a,EAIR,SAAS+1C,GAAaxjE,EAAGC,GAExB,GAAKD,EAAEnM,SAAWoM,EAAEpM,OAAS,OAAO,EAEpC,IAAM,IAAID,EAAI,EAAGyK,EAAI2B,EAAEnM,OAAQD,EAAIyK,EAAGzK,IAErC,GAAKoM,EAAGpM,KAAQqM,EAAGrM,GAAM,OAAO,EAIjC,OAAO,EAIR,SAAS6vE,GAAWzjE,EAAGC,GAEtB,IAAM,IAAIrM,EAAI,EAAGyK,EAAI4B,EAAEpM,OAAQD,EAAIyK,EAAGzK,IAErCoM,EAAGpM,GAAMqM,EAAGrM,GAQd,SAAS8vE,GAAe/yC,EAAUn4B,GAEjC,IAAIi1B,EAAIu1C,GAAexqE,QAEZZ,IAAN61B,IAEJA,EAAI,IAAI27B,WAAY5wD,GACpBwqE,GAAexqE,GAAMi1B,GAItB,IAAM,IAAI75B,EAAI,EAAGA,IAAM4E,IAAM5E,EAE5B65B,EAAG75B,GAAM+8B,EAASgzC,sBAInB,OAAOl2C,EAWR,SAASm2C,GAAa1b,EAAI7yC,GAEzB,IAAM9Z,EAAQlG,KAAKkG,MAEdA,EAAO,KAAQ8Z,IAEpB6yC,EAAG2b,UAAWxuE,KAAKyuE,KAAMzuD,GAEzB9Z,EAAO,GAAM8Z,GAMd,SAAS0uD,GAAa7b,EAAI7yC,GAEzB,IAAM9Z,EAAQlG,KAAKkG,MAEnB,QAAa3D,IAARyd,EAAElE,EAED5V,EAAO,KAAQ8Z,EAAElE,GAAK5V,EAAO,KAAQ8Z,EAAEjE,IAE3C82C,EAAG8b,UAAW3uE,KAAKyuE,KAAMzuD,EAAElE,EAAGkE,EAAEjE,GAEhC7V,EAAO,GAAM8Z,EAAElE,EACf5V,EAAO,GAAM8Z,EAAEjE,OAIV,CAEN,GAAKoyD,GAAajoE,EAAO8Z,GAAM,OAE/B6yC,EAAG+b,WAAY5uE,KAAKyuE,KAAMzuD,GAE1BouD,GAAWloE,EAAO8Z,IAMpB,SAAS6uD,GAAahc,EAAI7yC,GAEzB,IAAM9Z,EAAQlG,KAAKkG,MAEnB,QAAa3D,IAARyd,EAAElE,EAED5V,EAAO,KAAQ8Z,EAAElE,GAAK5V,EAAO,KAAQ8Z,EAAEjE,GAAK7V,EAAO,KAAQ8Z,EAAEsc,IAEjEu2B,EAAGic,UAAW9uE,KAAKyuE,KAAMzuD,EAAElE,EAAGkE,EAAEjE,EAAGiE,EAAEsc,GAErCp2B,EAAO,GAAM8Z,EAAElE,EACf5V,EAAO,GAAM8Z,EAAEjE,EACf7V,EAAO,GAAM8Z,EAAEsc,QAIV,QAAa/5B,IAARyd,EAAEoY,EAERlyB,EAAO,KAAQ8Z,EAAEoY,GAAKlyB,EAAO,KAAQ8Z,EAAEkF,GAAKhf,EAAO,KAAQ8Z,EAAEpV,IAEjEioD,EAAGic,UAAW9uE,KAAKyuE,KAAMzuD,EAAEoY,EAAGpY,EAAEkF,EAAGlF,EAAEpV,GAErC1E,EAAO,GAAM8Z,EAAEoY,EACflyB,EAAO,GAAM8Z,EAAEkF,EACfhf,EAAO,GAAM8Z,EAAEpV,OAIV,CAEN,GAAKujE,GAAajoE,EAAO8Z,GAAM,OAE/B6yC,EAAGkc,WAAY/uE,KAAKyuE,KAAMzuD,GAE1BouD,GAAWloE,EAAO8Z,IAMpB,SAASgvD,GAAanc,EAAI7yC,GAEzB,IAAM9Z,EAAQlG,KAAKkG,MAEnB,QAAa3D,IAARyd,EAAElE,EAED5V,EAAO,KAAQ8Z,EAAElE,GAAK5V,EAAO,KAAQ8Z,EAAEjE,GAAK7V,EAAO,KAAQ8Z,EAAEsc,GAAKp2B,EAAO,KAAQ8Z,EAAE4T,IAEvFi/B,EAAGoc,UAAWjvE,KAAKyuE,KAAMzuD,EAAElE,EAAGkE,EAAEjE,EAAGiE,EAAEsc,EAAGtc,EAAE4T,GAE1C1tB,EAAO,GAAM8Z,EAAElE,EACf5V,EAAO,GAAM8Z,EAAEjE,EACf7V,EAAO,GAAM8Z,EAAEsc,EACfp2B,EAAO,GAAM8Z,EAAE4T,OAIV,CAEN,GAAKu6C,GAAajoE,EAAO8Z,GAAM,OAE/B6yC,EAAGqc,WAAYlvE,KAAKyuE,KAAMzuD,GAE1BouD,GAAWloE,EAAO8Z,IAQpB,SAASmvD,GAAYtc,EAAI7yC,GAExB,IAAM9Z,EAAQlG,KAAKkG,MACb8tB,EAAWhU,EAAEgU,SAEnB,QAAkBzxB,IAAbyxB,EAAyB,CAE7B,GAAKm6C,GAAajoE,EAAO8Z,GAAM,OAE/B6yC,EAAGuc,iBAAkBpvE,KAAKyuE,MAAM,EAAOzuD,GAEvCouD,GAAWloE,EAAO8Z,OAEZ,CAEN,GAAKmuD,GAAajoE,EAAO8tB,GAAa,OAEtC85C,GAAUlzD,IAAKoZ,GAEf6+B,EAAGuc,iBAAkBpvE,KAAKyuE,MAAM,EAAOX,IAEvCM,GAAWloE,EAAO8tB,IAMpB,SAASq7C,GAAYxc,EAAI7yC,GAExB,IAAM9Z,EAAQlG,KAAKkG,MACb8tB,EAAWhU,EAAEgU,SAEnB,QAAkBzxB,IAAbyxB,EAAyB,CAE7B,GAAKm6C,GAAajoE,EAAO8Z,GAAM,OAE/B6yC,EAAGyc,iBAAkBtvE,KAAKyuE,MAAM,EAAOzuD,GAEvCouD,GAAWloE,EAAO8Z,OAEZ,CAEN,GAAKmuD,GAAajoE,EAAO8tB,GAAa,OAEtC65C,GAAUjzD,IAAKoZ,GAEf6+B,EAAGyc,iBAAkBtvE,KAAKyuE,MAAM,EAAOZ,IAEvCO,GAAWloE,EAAO8tB,IAMpB,SAASu7C,GAAY1c,EAAI7yC,GAExB,IAAM9Z,EAAQlG,KAAKkG,MACb8tB,EAAWhU,EAAEgU,SAEnB,QAAkBzxB,IAAbyxB,EAAyB,CAE7B,GAAKm6C,GAAajoE,EAAO8Z,GAAM,OAE/B6yC,EAAG2c,iBAAkBxvE,KAAKyuE,MAAM,EAAOzuD,GAEvCouD,GAAWloE,EAAO8Z,OAEZ,CAEN,GAAKmuD,GAAajoE,EAAO8tB,GAAa,OAEtC45C,GAAUhzD,IAAKoZ,GAEf6+B,EAAG2c,iBAAkBxvE,KAAKyuE,MAAM,EAAOb,IAEvCQ,GAAWloE,EAAO8tB,IAQpB,SAASy7C,GAAa5c,EAAI7yC,GAEzB,IAAM9Z,EAAQlG,KAAKkG,MAEdA,EAAO,KAAQ8Z,IAEpB6yC,EAAG6c,UAAW1vE,KAAKyuE,KAAMzuD,GAEzB9Z,EAAO,GAAM8Z,GAMd,SAAS2vD,GAAa9c,EAAI7yC,GAEzB,IAAM9Z,EAAQlG,KAAKkG,MAEdioE,GAAajoE,EAAO8Z,KAEzB6yC,EAAG+c,WAAY5vE,KAAKyuE,KAAMzuD,GAE1BouD,GAAWloE,EAAO8Z,IAInB,SAAS6vD,GAAahd,EAAI7yC,GAEzB,IAAM9Z,EAAQlG,KAAKkG,MAEdioE,GAAajoE,EAAO8Z,KAEzB6yC,EAAGid,WAAY9vE,KAAKyuE,KAAMzuD,GAE1BouD,GAAWloE,EAAO8Z,IAInB,SAAS+vD,GAAald,EAAI7yC,GAEzB,IAAM9Z,EAAQlG,KAAKkG,MAEdioE,GAAajoE,EAAO8Z,KAEzB6yC,EAAGmd,WAAYhwE,KAAKyuE,KAAMzuD,GAE1BouD,GAAWloE,EAAO8Z,IAMnB,SAASiwD,GAAcpd,EAAI7yC,GAE1B,IAAM9Z,EAAQlG,KAAKkG,MAEdA,EAAO,KAAQ8Z,IAEpB6yC,EAAGqd,WAAYlwE,KAAKyuE,KAAMzuD,GAE1B9Z,EAAO,GAAM8Z,GAMd,SAASmwD,GAActd,EAAI7yC,GAE1B,IAAM9Z,EAAQlG,KAAKkG,MAEdioE,GAAajoE,EAAO8Z,KAEzB6yC,EAAGud,YAAapwE,KAAKyuE,KAAMzuD,GAE3BouD,GAAWloE,EAAO8Z,IAInB,SAASqwD,GAAcxd,EAAI7yC,GAE1B,IAAM9Z,EAAQlG,KAAKkG,MAEdioE,GAAajoE,EAAO8Z,KAEzB6yC,EAAGyd,YAAatwE,KAAKyuE,KAAMzuD,GAE3BouD,GAAWloE,EAAO8Z,IAInB,SAASuwD,GAAc1d,EAAI7yC,GAE1B,IAAM9Z,EAAQlG,KAAKkG,MAEdioE,GAAajoE,EAAO8Z,KAEzB6yC,EAAG2d,YAAaxwE,KAAKyuE,KAAMzuD,GAE3BouD,GAAWloE,EAAO8Z,IAOnB,SAASywD,GAAY5d,EAAI7yC,EAAGsb,GAE3B,IAAMp1B,EAAQlG,KAAKkG,MACbwqE,EAAOp1C,EAASgzC,sBAEjBpoE,EAAO,KAAQwqE,IAEnB7d,EAAG6c,UAAW1vE,KAAKyuE,KAAMiC,GACzBxqE,EAAO,GAAMwqE,GAIdp1C,EAASq1C,iBAAkB3wD,GAAKstD,GAAcoD,GAI/C,SAASE,GAAc/d,EAAI7yC,EAAGsb,GAE7B,IAAMp1B,EAAQlG,KAAKkG,MACbwqE,EAAOp1C,EAASgzC,sBAEjBpoE,EAAO,KAAQwqE,IAEnB7d,EAAG6c,UAAW1vE,KAAKyuE,KAAMiC,GACzBxqE,EAAO,GAAMwqE,GAIdp1C,EAASu1C,aAAc7wD,GAAKwtD,GAAgBkD,GAI7C,SAASI,GAAYje,EAAI7yC,EAAGsb,GAE3B,IAAMp1B,EAAQlG,KAAKkG,MACbwqE,EAAOp1C,EAASgzC,sBAEjBpoE,EAAO,KAAQwqE,IAEnB7d,EAAG6c,UAAW1vE,KAAKyuE,KAAMiC,GACzBxqE,EAAO,GAAMwqE,GAIdp1C,EAASy1C,mBAAoB/wD,GAAKytD,GAAkBiD,GAIrD,SAASM,GAAmBne,EAAI7yC,EAAGsb,GAElC,IAAMp1B,EAAQlG,KAAKkG,MACbwqE,EAAOp1C,EAASgzC,sBAEjBpoE,EAAO,KAAQwqE,IAEnB7d,EAAG6c,UAAW1vE,KAAKyuE,KAAMiC,GACzBxqE,EAAO,GAAMwqE,GAIdp1C,EAAS21C,kBAAmBjxD,GAAKutD,GAAqBmD,GA4DvD,SAASQ,GAAkBre,EAAI7yC,GAE9B6yC,EAAGse,WAAYnxE,KAAKyuE,KAAMzuD,GAM3B,SAASoxD,GAAkBve,EAAI7yC,GAE9B,IAAMrB,EAAOovD,GAAS/tD,EAAGhgB,KAAKspB,KAAM,GAEpCupC,EAAG+b,WAAY5uE,KAAKyuE,KAAM9vD,GAI3B,SAAS0yD,GAAkBxe,EAAI7yC,GAE9B,IAAMrB,EAAOovD,GAAS/tD,EAAGhgB,KAAKspB,KAAM,GAEpCupC,EAAGkc,WAAY/uE,KAAKyuE,KAAM9vD,GAI3B,SAAS2yD,GAAkBze,EAAI7yC,GAE9B,IAAMrB,EAAOovD,GAAS/tD,EAAGhgB,KAAKspB,KAAM,GAEpCupC,EAAGqc,WAAYlvE,KAAKyuE,KAAM9vD,GAM3B,SAAS4yD,GAAiB1e,EAAI7yC,GAE7B,IAAMrB,EAAOovD,GAAS/tD,EAAGhgB,KAAKspB,KAAM,GAEpCupC,EAAGuc,iBAAkBpvE,KAAKyuE,MAAM,EAAO9vD,GAIxC,SAAS6yD,GAAiB3e,EAAI7yC,GAE7B,IAAMrB,EAAOovD,GAAS/tD,EAAGhgB,KAAKspB,KAAM,GAEpCupC,EAAGyc,iBAAkBtvE,KAAKyuE,MAAM,EAAO9vD,GAIxC,SAAS8yD,GAAiB5e,EAAI7yC,GAE7B,IAAMrB,EAAOovD,GAAS/tD,EAAGhgB,KAAKspB,KAAM,IAEpCupC,EAAG2c,iBAAkBxvE,KAAKyuE,MAAM,EAAO9vD,GAMxC,SAAS+yD,GAAkB7e,EAAI7yC,GAE9B6yC,EAAG8e,WAAY3xE,KAAKyuE,KAAMzuD,GAM3B,SAAS4xD,GAAkB/e,EAAI7yC,GAE9B6yC,EAAG+c,WAAY5vE,KAAKyuE,KAAMzuD,GAI3B,SAAS6xD,GAAkBhf,EAAI7yC,GAE9B6yC,EAAGid,WAAY9vE,KAAKyuE,KAAMzuD,GAI3B,SAAS8xD,GAAkBjf,EAAI7yC,GAE9B6yC,EAAGmd,WAAYhwE,KAAKyuE,KAAMzuD,GAM3B,SAAS+xD,GAAmBlf,EAAI7yC,GAE/B6yC,EAAGmf,YAAahyE,KAAKyuE,KAAMzuD,GAM5B,SAASiyD,GAAmBpf,EAAI7yC,GAE/B6yC,EAAGud,YAAapwE,KAAKyuE,KAAMzuD,GAI5B,SAASkyD,GAAmBrf,EAAI7yC,GAE/B6yC,EAAGyd,YAAatwE,KAAKyuE,KAAMzuD,GAI5B,SAASmyD,GAAmBtf,EAAI7yC,GAE/B6yC,EAAG2d,YAAaxwE,KAAKyuE,KAAMzuD,GAO5B,SAASoyD,GAAiBvf,EAAI7yC,EAAGsb,GAEhC,IAAMn4B,EAAI6c,EAAExhB,OAEN6zE,EAAQhE,GAAe/yC,EAAUn4B,GAEvC0vD,EAAG8e,WAAY3xE,KAAKyuE,KAAM4D,GAE1B,IAAM,IAAI9zE,EAAI,EAAGA,IAAM4E,IAAM5E,EAE5B+8B,EAASq1C,iBAAkB3wD,EAAGzhB,IAAO+uE,GAAc+E,EAAO9zE,IAM5D,SAAS+zE,GAAiBzf,EAAI7yC,EAAGsb,GAEhC,IAAMn4B,EAAI6c,EAAExhB,OAEN6zE,EAAQhE,GAAe/yC,EAAUn4B,GAEvC0vD,EAAG8e,WAAY3xE,KAAKyuE,KAAM4D,GAE1B,IAAM,IAAI9zE,EAAI,EAAGA,IAAM4E,IAAM5E,EAE5B+8B,EAASy1C,mBAAoB/wD,EAAGzhB,IAAOkvE,GAAkB4E,EAAO9zE,IAkDlE,SAASg0E,GAAev+B,EAAIw+B,EAAY/D,GAEvCzuE,KAAKg0C,GAAKA,EACVh0C,KAAKyuE,KAAOA,EACZzuE,KAAKkG,MAAQ,GACblG,KAAKusE,SA5PN,SAA4BtmD,GAE3B,OAASA,GAER,KAAK,KAAQ,OAAOsoD,GACpB,KAAK,MAAQ,OAAOG,GACpB,KAAK,MAAQ,OAAOG,GACpB,KAAK,MAAQ,OAAOG,GAEpB,KAAK,MAAQ,OAAOG,GACpB,KAAK,MAAQ,OAAOE,GACpB,KAAK,MAAQ,OAAOE,GAEpB,KAAK,KAAQ,KAAK,MAAQ,OAAOE,GACjC,KAAK,MAAQ,KAAK,MAAQ,OAAOE,GACjC,KAAK,MAAQ,KAAK,MAAQ,OAAOE,GACjC,KAAK,MAAQ,KAAK,MAAQ,OAAOE,GAEjC,KAAK,KAAQ,OAAOE,GACpB,KAAK,MAAQ,OAAOE,GACpB,KAAK,MAAQ,OAAOE,GACpB,KAAK,MAAQ,OAAOE,GAEpB,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACJ,OAAOE,GAER,KAAK,MACL,KAAK,MACL,KAAK,MACJ,OAAOG,GAER,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACJ,OAAOE,GAER,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACJ,OAAOE,IA+MOyB,CAAmBD,EAAWvsD,MAM/C,SAASysD,GAAkB1+B,EAAIw+B,EAAY/D,GAE1CzuE,KAAKg0C,GAAKA,EACVh0C,KAAKyuE,KAAOA,EACZzuE,KAAKkG,MAAQ,GACblG,KAAKspB,KAAOkpD,EAAWlpD,KACvBtpB,KAAKusE,SA3DN,SAA6BtmD,GAE5B,OAASA,GAER,KAAK,KAAQ,OAAOirD,GACpB,KAAK,MAAQ,OAAOE,GACpB,KAAK,MAAQ,OAAOC,GACpB,KAAK,MAAQ,OAAOC,GAEpB,KAAK,MAAQ,OAAOC,GACpB,KAAK,MAAQ,OAAOC,GACpB,KAAK,MAAQ,OAAOC,GAEpB,KAAK,KAAQ,KAAK,MAAQ,OAAOC,GACjC,KAAK,MAAQ,KAAK,MAAQ,OAAOE,GACjC,KAAK,MAAQ,KAAK,MAAQ,OAAOC,GACjC,KAAK,MAAQ,KAAK,MAAQ,OAAOC,GAEjC,KAAK,KAAQ,OAAOC,GACpB,KAAK,MAAQ,OAAOE,GACpB,KAAK,MAAQ,OAAOC,GACpB,KAAK,MAAQ,OAAOC,GAEpB,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACJ,OAAOC,GAER,KAAK,MACL,KAAK,MACL,KAAK,MACL,KAAK,MACJ,OAAOE,IAyBOK,CAAoBH,EAAWvsD,MAoBhD,SAAS2sD,GAAmB5+B,GAE3Bh0C,KAAKg0C,GAAKA,EAEVh0C,KAAK6yE,IAAM,GACX7yE,KAAKuV,IAAM,GAnBZm9D,GAAiBvzE,UAAU2zE,YAAc,SAAWn0D,GAEnD,IAAMzY,EAAQlG,KAAKkG,MAEdyY,aAAgB4kC,cAAgBr9C,EAAM1H,SAAWmgB,EAAKngB,SAE1DwB,KAAKkG,MAAQ,IAAIq9C,aAAc5kC,EAAKngB,SAIrC4vE,GAAWloE,EAAOyY,IAanBi0D,GAAkBzzE,UAAUotE,SAAW,SAAW1Z,EAAIpzD,EAAO67B,GAI5D,IAFA,IAAMu3C,EAAM7yE,KAAK6yE,IAEPt0E,EAAI,EAAG4E,EAAI0vE,EAAIr0E,OAAQD,IAAM4E,IAAM5E,EAAI,CAEhD,IAAMm7C,EAAIm5B,EAAKt0E,GACfm7C,EAAE6yB,SAAU1Z,EAAIpzD,EAAOi6C,EAAE1F,IAAM1Y,KAUjC,IAAMy3C,GAAa,sBAWnB,SAASC,GAAYC,EAAWC,GAE/BD,EAAUJ,IAAI1uE,KAAM+uE,GACpBD,EAAU19D,IAAK29D,EAAcl/B,IAAOk/B,EAIrC,SAASC,GAAcX,EAAY/D,EAAMwE,GAExC,IAAMluE,EAAOytE,EAAWhuE,KACvB4uE,EAAaruE,EAAKvG,OAKnB,IAFAu0E,GAAWM,UAAY,IAER,CAEd,IAAMztE,EAAQmtE,GAAWz1D,KAAMvY,GAC9BuuE,EAAWP,GAAWM,UAEnBr/B,EAAKpuC,EAAO,GACV2tE,EAA2B,MAAf3tE,EAAO,GACxB4tE,EAAY5tE,EAAO,GAIpB,GAFK2tE,IAAYv/B,GAAU,QAERzxC,IAAdixE,GAAyC,MAAdA,GAAqBF,EAAW,IAAMF,EAAa,CAIlFJ,GAAYC,OAAyB1wE,IAAdixE,EACtB,IAAIjB,GAAev+B,EAAIw+B,EAAY/D,GACnC,IAAIiE,GAAkB1+B,EAAIw+B,EAAY/D,IAEvC,MAMA,IACI/qE,EADQuvE,EAAU19D,IACNy+B,QAEFzxC,IAATmB,GAGJsvE,GAAYC,EADZvvE,EAAO,IAAIkvE,GAAmB5+B,IAK/Bi/B,EAAYvvE,GAUf,SAAS+vE,GAAe5gB,EAAIkR,GAE3B/jE,KAAK6yE,IAAM,GACX7yE,KAAKuV,IAAM,GAIX,IAFA,IAAMpS,EAAI0vD,EAAG6gB,oBAAqB3P,EAAS,OAEjCxlE,EAAI,EAAGA,EAAI4E,IAAM5E,EAAI,CAE9B,IAAMsD,EAAOgxD,EAAG8gB,iBAAkB5P,EAASxlE,GAG3C40E,GAActxE,EAFNgxD,EAAG+gB,mBAAoB7P,EAASliE,EAAK2C,MAEnBxE,OA0D5B,SAAS6zE,GAAahhB,EAAI5sC,EAAM26B,GAE/B,IAAMmP,EAAS8C,EAAGihB,aAAc7tD,GAKhC,OAHA4sC,EAAGkhB,aAAchkB,EAAQnP,GACzBiS,EAAGmhB,cAAejkB,GAEXA,EA3DR0jB,GAAct0E,UAAUotE,SAAW,SAAW1Z,EAAIruD,EAAM/E,EAAO67B,GAE9D,IAAMoe,EAAI15C,KAAKuV,IAAK/Q,QAETjC,IAANm3C,GAAkBA,EAAE6yB,SAAU1Z,EAAIpzD,EAAO67B,IAI/Cm4C,GAAct0E,UAAU80E,YAAc,SAAWphB,EAAI5xD,EAAQuD,GAE5D,IAAMwb,EAAI/e,EAAQuD,QAEPjC,IAANyd,GAAkBhgB,KAAKusE,SAAU1Z,EAAIruD,EAAMwb,IAOjDyzD,GAAc3vD,OAAS,SAAW+uC,EAAIggB,EAAK3rE,EAAQo0B,GAElD,IAAM,IAAI/8B,EAAI,EAAG4E,EAAI0vE,EAAIr0E,OAAQD,IAAM4E,IAAM5E,EAAI,CAEhD,IAAMm7C,EAAIm5B,EAAKt0E,GACdyhB,EAAI9Y,EAAQwyC,EAAE1F,KAEQ,IAAlBh0B,EAAEqkC,aAGN3K,EAAE6yB,SAAU1Z,EAAI7yC,EAAEvgB,MAAO67B,KAQ5Bm4C,GAAcS,aAAe,SAAWrB,EAAK3rE,GAI5C,IAFA,IAAMkxB,EAAI,GAEA75B,EAAI,EAAG4E,EAAI0vE,EAAIr0E,OAAQD,IAAM4E,IAAM5E,EAAI,CAEhD,IAAMm7C,EAAIm5B,EAAKt0E,GACVm7C,EAAE1F,MAAM9sC,GAASkxB,EAAEj0B,KAAMu1C,GAI/B,OAAOthB,GAeR,IAAI+7C,GAAiB,EAgBrB,SAASC,GAAuB55C,GAE/B,OAASA,GAER,KAAKxL,GACJ,MAAO,CAAE,SAAU,aACpB,KAAKC,GACJ,MAAO,CAAE,OAAQ,aAClB,KAAKE,GACJ,MAAO,CAAE,OAAQ,aAClB,KAt1foB,KAu1fnB,MAAO,CAAE,OAAQ,kBAClB,KAv1fqB,KAw1fpB,MAAO,CAAE,OAAQ,mBAClB,KAx1fmB,KAy1flB,MAAO,CAAE,OAAQ,oBAClB,KAAKD,GACJ,MAAO,CAAE,QAAS,oCACnB,KA/1fqB,KAg2fpB,MAAO,CAAE,SAAU,aACpB,QAEC,OADA5J,QAAQM,KAAM,4CAA6C4U,GACpD,CAAE,SAAU,cAMtB,SAAS65C,GAAiBxhB,EAAI9C,EAAQ9pC,GAErC,IAAM5E,EAASwxC,EAAGyhB,mBAAoBvkB,EAAQ,OACxCj/B,EAAM+hC,EAAG0hB,iBAAkBxkB,GAASjlD,OAE1C,OAAKuW,GAAkB,KAARyP,EAAoB,GAO5B,4CAA8C7K,EAAO,KAAO6K,EAtDpE,SAAyB8vB,GAIxB,IAFA,IAAM0qB,EAAQ1qB,EAAOv0C,MAAO,MAElB9N,EAAI,EAAGA,EAAI+sE,EAAM9sE,OAAQD,IAElC+sE,EAAO/sE,GAAQA,EAAI,EAAM,KAAO+sE,EAAO/sE,GAIxC,OAAO+sE,EAAMx+D,KAAM,MA4CsD0nE,CAF1D3hB,EAAG4hB,gBAAiB1kB,IAMpC,SAAS2kB,GAA0BC,EAAcn6C,GAEhD,IAAMsmB,EAAaszB,GAAuB55C,GAC1C,MAAO,QAAUm6C,EAAe,2BAA6B7zB,EAAY,GAAM,WAAaA,EAAY,GAAM,MAI/G,SAAS8zB,GAA0BD,EAAcn6C,GAEhD,IAAMsmB,EAAaszB,GAAuB55C,GAC1C,MAAO,QAAUm6C,EAAe,mCAAqC7zB,EAAY,GAAMA,EAAY,GAAM,MAI1G,SAAS+zB,GAAwBF,EAAchS,GAE9C,IAAImS,EAEJ,OAASnS,GAER,KAx/fwB,EAy/fvBmS,EAAkB,SAClB,MAED,KA3/f0B,EA4/fzBA,EAAkB,WAClB,MAED,KA9/fwB,EA+/fvBA,EAAkB,kBAClB,MAED,KAjggB4B,EAkggB3BA,EAAkB,aAClB,MAED,KApggBwB,EAqggBvBA,EAAkB,SAClB,MAED,QACCxvD,QAAQM,KAAM,+CAAgD+8C,GAC9DmS,EAAkB,SAIpB,MAAO,QAAUH,EAAe,2BAA6BG,EAAkB,0BAwDhF,SAASC,GAAiBn0B,GAEzB,MAAkB,KAAXA,EAIR,SAASo0B,GAAkBp0B,EAAQrL,GAElC,OAAOqL,EACL51C,QAAS,kBAAmBuqC,EAAW0/B,cACvCjqE,QAAS,mBAAoBuqC,EAAW2/B,eACxClqE,QAAS,wBAAyBuqC,EAAW4/B,mBAC7CnqE,QAAS,oBAAqBuqC,EAAW6/B,gBACzCpqE,QAAS,mBAAoBuqC,EAAW8/B,eACxCrqE,QAAS,yBAA0BuqC,EAAW+/B,oBAC9CtqE,QAAS,0BAA2BuqC,EAAWggC,qBAC/CvqE,QAAS,2BAA4BuqC,EAAWigC,sBAInD,SAASC,GAA0B70B,EAAQrL,GAE1C,OAAOqL,EACL51C,QAAS,uBAAwBuqC,EAAWmgC,mBAC5C1qE,QAAS,yBAA4BuqC,EAAWmgC,kBAAoBngC,EAAWogC,qBAMlF,IAAMC,GAAiB,mCAEvB,SAASC,GAAiBj1B,GAEzB,OAAOA,EAAO51C,QAAS4qE,GAAgBE,IAIxC,SAASA,GAAiBlwE,EAAOmwE,GAEhC,IAAMn1B,EAAS+T,GAAaohB,GAE5B,QAAgBxzE,IAAXq+C,EAEJ,MAAM,IAAIp1C,MAAO,6BAA+BuqE,EAAU,KAI3D,OAAOF,GAAiBj1B,GAMzB,IAAMo1B,GAA8B,+FAC9BC,GAAoB,+IAE1B,SAASC,GAAat1B,GAErB,OAAOA,EACL51C,QAASirE,GAAmBE,IAC5BnrE,QAASgrE,GAA6BI,IAIzC,SAASA,GAAwBxwE,EAAO8wC,EAAOzvC,EAAKovE,GAGnD,OADA/wD,QAAQM,KAAM,uHACPuwD,GAAcvwE,EAAO8wC,EAAOzvC,EAAKovE,GAIzC,SAASF,GAAcvwE,EAAO8wC,EAAOzvC,EAAKovE,GAIzC,IAFA,IAAIz1B,EAAS,GAEHriD,EAAIwiD,SAAUrK,GAASn4C,EAAIwiD,SAAU95C,GAAO1I,IAErDqiD,GAAUy1B,EACRrrE,QAAS,eAAgB,KAAOzM,EAAI,MACpCyM,QAAS,uBAAwBzM,GAIpC,OAAOqiD,EAMR,SAAS01B,GAAmB/gC,GAE3B,IAAIghC,EAAkB,aAAehhC,EAAWmG,UAAY,sBAAwBnG,EAAWmG,UAAY,QAgB3G,MAd8B,UAAzBnG,EAAWmG,UAEf66B,GAAmB,2BAEiB,YAAzBhhC,EAAWmG,UAEtB66B,GAAmB,6BAEiB,SAAzBhhC,EAAWmG,YAEtB66B,GAAmB,2BAIbA,EAsGR,SAASC,GAAcrnB,EAAUxoD,EAAU4uC,EAAY0tB,GAEtD,IAqBIwT,EAAcC,EArBZ7jB,EAAK1D,EAAS31B,aAEd2yB,EAAU5W,EAAW4W,QAEvBC,EAAe7W,EAAW6W,aAC1BC,EAAiB9W,EAAW8W,eAE1BsqB,EA3GP,SAAsCphC,GAErC,IAAIohC,EAAsB,uBAgB1B,OArvgBoB,IAuugBfphC,EAAWqhC,cAEfD,EAAsB,qBAxugBC,IA0ugBZphC,EAAWqhC,cAEtBD,EAAsB,0BA3ugBH,IA6ugBRphC,EAAWqhC,gBAEtBD,EAAsB,sBAIhBA,EAyFqBE,CAA6BthC,GACnDuhC,EAtFP,SAAmCvhC,GAElC,IAAIuhC,EAAmB,mBAEvB,GAAKvhC,EAAWsJ,OAEf,OAAStJ,EAAWwhC,YAEnB,KAjtgB2B,IAktgB3B,KAjtgB2B,IAktgB1BD,EAAmB,mBACnB,MAED,KAAKhqD,EACL,KAltgB6B,IAmtgB5BgqD,EAAmB,sBAOtB,OAAOA,EAgEkBE,CAA0BzhC,GAC7C0hC,EA7DP,SAAmC1hC,GAElC,IAAI0hC,EAAmB,yBAEvB,GAAK1hC,EAAWsJ,OAEf,OAAStJ,EAAWwhC,YAEnB,KA1ugB2B,IA2ugB3B,KAvugB6B,IAyugB5BE,EAAmB,yBAOtB,OAAOA,EA2CkBC,CAA0B3hC,GAC7C4hC,EAxCP,SAAuC5hC,GAEtC,IAAI4hC,EAAuB,uBAE3B,GAAK5hC,EAAWsJ,OAEf,OAAStJ,EAAWuJ,SAEnB,KA5wgBuB,EA6wgBtBq4B,EAAuB,2BACvB,MAED,KA/wgBkB,EAgxgBjBA,EAAuB,sBACvB,MAED,KAlxgBkB,EAmxgBjBA,EAAuB,sBAO1B,OAAOA,EAgBsBC,CAA8B7hC,GAGrD8hC,EAAsBloB,EAASjO,YAAc,EAAMiO,EAASjO,YAAc,EAE1Eo2B,EAAmB/hC,EAAWwd,SAAW,GAvRhD,SAA6Bxd,GAS5B,MAPe,CACZA,EAAWgiC,sBAAwBhiC,EAAWiiC,cAAgBjiC,EAAW0I,SAAW1I,EAAWkiC,uBAAyBliC,EAAWkI,oBAAsBlI,EAAWmH,aAAuC,aAAxBnH,EAAWmiC,SAA4B,kDAAoD,IAC9QniC,EAAWoiC,oBAAsBpiC,EAAWgyB,yBAA4BhyB,EAAWqiC,2BAA6B,wCAA0C,GAC1JriC,EAAWsiC,sBAAwBtiC,EAAWuiC,6BAAiC,2CAA6C,IAC5HviC,EAAWwiC,2BAA6BxiC,EAAWsJ,SAAYtJ,EAAWyiC,kCAAoC,gDAAkD,IAGrJ/oE,OAAQ8lE,IAAkBjoE,KAAM,MA8QMmrE,CAAoB1iC,GAElE2iC,EA5QP,SAA0B/rB,GAEzB,IAAMgsB,EAAS,GAEf,IAAM,IAAM3zE,KAAQ2nD,EAAU,CAE7B,IAAM1sD,EAAQ0sD,EAAS3nD,IAER,IAAV/E,GAEL04E,EAAOh0E,KAAM,WAAaK,EAAO,IAAM/E,GAIxC,OAAO04E,EAAOrrE,KAAM,MA8PEsrE,CAAiBjsB,GAEjC4X,EAAUlR,EAAGwlB,gBAGfC,EAAgB/iC,EAAWyX,YAAc,YAAczX,EAAWyX,YAAc,KAAO,GAEtFzX,EAAWgjC,sBAEf9B,EAAe,CAEdyB,GAECjpE,OAAQ8lE,IAAkBjoE,KAAM,OAEhBtO,OAAS,IAE1Bi4E,GAAgB,OAIjBC,EAAiB,CAEhBY,EACAY,GAECjpE,OAAQ8lE,IAAkBjoE,KAAM,OAEdtO,OAAS,IAE5Bk4E,GAAkB,QAMnBD,EAAe,CAEdH,GAAmB/gC,GAEnB,uBAAyBA,EAAWijC,WAEpCN,EAEA3iC,EAAWkjC,WAAa,yBAA2B,GACnDljC,EAAWmjC,gBAAkB,+BAAiC,GAE9DnjC,EAAWojC,uBAAyB,0BAA4B,GAEhE,wBAA0BtB,EAE1B,qBAAuB9hC,EAAWqjC,SAChCrjC,EAAWsjC,QAAUtjC,EAAWuE,IAAQ,kBAAoB,GAC5DvE,EAAWsjC,QAAUtjC,EAAWujC,QAAY,mBAAqB,GAEnEvjC,EAAWhgC,IAAM,kBAAoB,GACrCggC,EAAWsJ,OAAS,qBAAuB,GAC3CtJ,EAAWsJ,OAAS,WAAao4B,EAAmB,GACpD1hC,EAAWsI,SAAW,uBAAyB,GAC/CtI,EAAWwI,MAAQ,oBAAsB,GACzCxI,EAAWoJ,YAAc,0BAA4B,GACrDpJ,EAAW0I,QAAU,sBAAwB,GAC7C1I,EAAW4I,UAAY,wBAA0B,GAC/C5I,EAAW4I,WAAa5I,EAAWwjC,qBAAyB,gCAAkC,GAC9FxjC,EAAW4I,WAAa5I,EAAWkiC,sBAA0B,iCAAmC,GAElGliC,EAAWgI,aAAe,2BAA6B,GACvDhI,EAAWiI,sBAAwB,qCAAuC,GAC1EjI,EAAWkI,mBAAqB,kCAAoC,GACpElI,EAAW+I,iBAAmB/I,EAAWojC,uBAAyB,8BAAgC,GAClGpjC,EAAWqJ,YAAc,0BAA4B,GACrDrJ,EAAWkJ,aAAe,2BAA6B,GACvDlJ,EAAWmJ,aAAe,2BAA6B,GACvDnJ,EAAWqI,SAAW,uBAAyB,GAC/CrI,EAAWy3B,gBAAkB,8BAAgC,GAE7Dz3B,EAAWyjC,eAAiB,sBAAwB,GACpDzjC,EAAW0E,aAAe,oBAAsB,GAChD1E,EAAW0jC,aAAe,0BAA4B,GACtD1jC,EAAW2jC,UAAY,iBAAmB,GAC1C3jC,EAAW4jC,cAAgB,0BAA4B,GAEvD5jC,EAAWmH,YAAc,sBAAwB,GAEjDnH,EAAWsK,SAAW,uBAAyB,GAC/CtK,EAAW6jC,iBAAmB,uBAAyB,GAEvD7jC,EAAWoK,aAAe,2BAA6B,GACvDpK,EAAWqK,eAA2C,IAA3BrK,EAAWmH,YAAwB,2BAA6B,GAC3FnH,EAAW8jC,YAAc,uBAAyB,GAClD9jC,EAAW+jC,UAAY,qBAAuB,GAE9C/jC,EAAWgkC,iBAAmB,wBAA0B,GACxDhkC,EAAWgkC,iBAAmB,WAAa5C,EAAsB,GAEjEphC,EAAW4J,gBAAkB,8BAAgC,GAE7D5J,EAAWgyB,uBAAyB,0BAA4B,GAC9DhyB,EAAWgyB,wBAA0BhyB,EAAWqiC,2BAA+B,8BAAgC,GAEjH,4BACA,gCACA,iCACA,2BACA,6BACA,+BACA,+BAEA,wBAEA,mCAEA,SAEA,8BAEA,kCAEA,SAEA,2BACA,yBACA,qBAEA,qBAEA,4BAEA,SAEA,iCAEA,0BAEA,6BAEA,0BAEA,SAEA,0BAEA,iCACA,iCACA,iCACA,iCAEA,4BAEA,mCACA,mCACA,mCACA,mCAEA,UAEA,mCACA,mCACA,mCACA,mCAEA,WAEA,SAEA,sBAEA,8BACA,+BAEA,SAEA,MAEC3oE,OAAQ8lE,IAAkBjoE,KAAM,MAElC4pE,EAAiB,CAEhBY,EAEAhB,GAAmB/gC,GAEnB,uBAAyBA,EAAWijC,WAEpCN,EAEA3iC,EAAWwG,UAAY,qBAAuBxG,EAAWwG,WAAcxG,EAAWwG,UAAY,EAAI,GAAK,MAAS,GAEhH,wBAA0Bs7B,EAExB9hC,EAAWsjC,QAAUtjC,EAAWuE,IAAQ,kBAAoB,GAC5DvE,EAAWsjC,QAAUtjC,EAAWujC,QAAY,mBAAqB,GAEnEvjC,EAAWhgC,IAAM,kBAAoB,GACrCggC,EAAWoI,OAAS,qBAAuB,GAC3CpI,EAAWsJ,OAAS,qBAAuB,GAC3CtJ,EAAWsJ,OAAS,WAAai4B,EAAmB,GACpDvhC,EAAWsJ,OAAS,WAAao4B,EAAmB,GACpD1hC,EAAWsJ,OAAS,WAAas4B,EAAuB,GACxD5hC,EAAWsI,SAAW,uBAAyB,GAC/CtI,EAAWwI,MAAQ,oBAAsB,GACzCxI,EAAWoJ,YAAc,0BAA4B,GACrDpJ,EAAW0I,QAAU,sBAAwB,GAC7C1I,EAAW4I,UAAY,wBAA0B,GAC/C5I,EAAW4I,WAAa5I,EAAWwjC,qBAAyB,gCAAkC,GAC9FxjC,EAAW4I,WAAa5I,EAAWkiC,sBAA0B,iCAAmC,GAClGliC,EAAWgI,aAAe,2BAA6B,GACvDhI,EAAWiI,sBAAwB,qCAAuC,GAC1EjI,EAAWkI,mBAAqB,kCAAoC,GACpElI,EAAWqJ,YAAc,0BAA4B,GACrDrJ,EAAWkJ,aAAe,2BAA6B,GACvDlJ,EAAWmJ,aAAe,2BAA6B,GACvDnJ,EAAWqI,SAAW,uBAAyB,GAE/CrI,EAAWyH,MAAQ,oBAAsB,GACzCzH,EAAWy3B,gBAAkB,8BAAgC,GAE7Dz3B,EAAWyjC,eAAiB,sBAAwB,GACpDzjC,EAAW0E,cAAgB1E,EAAWmjC,gBAAkB,oBAAsB,GAC9EnjC,EAAW0jC,aAAe,0BAA4B,GACtD1jC,EAAW2jC,UAAY,iBAAmB,GAC1C3jC,EAAW4jC,cAAgB,0BAA4B,GAEvD5jC,EAAW2J,YAAc,0BAA4B,GAErD3J,EAAWmH,YAAc,sBAAwB,GAEjDnH,EAAW8jC,YAAc,uBAAyB,GAClD9jC,EAAW+jC,UAAY,qBAAuB,GAE9C/jC,EAAWgkC,iBAAmB,wBAA0B,GACxDhkC,EAAWgkC,iBAAmB,WAAa5C,EAAsB,GAEjEphC,EAAW0G,mBAAqB,8BAAgC,GAEhE1G,EAAWikC,wBAA0B,oCAAsC,GAE3EjkC,EAAWgyB,uBAAyB,0BAA4B,GAC9DhyB,EAAWgyB,wBAA0BhyB,EAAWqiC,2BAA+B,8BAAgC,IAE7GriC,EAAWwiC,2BAA6BxiC,EAAWsJ,SAAYtJ,EAAWyiC,kCAAsC,0BAA4B,GAEhJ,2BACA,+BACA,+BApihBmB,IAsihBjBziC,EAAWotB,YAAkC,uBAAyB,GAtihBrD,IAuihBjBptB,EAAWotB,YAAkChO,GAAW,0BAAkC,GAvihBzE,IAwihBjBpf,EAAWotB,YAAkCkS,GAAwB,cAAet/B,EAAWotB,aAAgB,GAEjHptB,EAAWuG,UAAY,oBAAsB,GAE7C6Y,GAAW,wBACXpf,EAAWhgC,IAAMm/D,GAA0B,mBAAoBn/B,EAAWkkC,aAAgB,GAC1FlkC,EAAWoI,OAAS+2B,GAA0B,sBAAuBn/B,EAAWmkC,gBAAmB,GACnGnkC,EAAWsJ,OAAS61B,GAA0B,sBAAuBn/B,EAAWokC,gBAAmB,GACnGpkC,EAAWoJ,YAAc+1B,GAA0B,2BAA4Bn/B,EAAWqkC,qBAAwB,GAClHrkC,EAAWsI,SAAW62B,GAA0B,wBAAyBn/B,EAAWskC,kBAAqB,GACzGjF,GAA0B,sBAAuBr/B,EAAWukC,gBAE5DvkC,EAAWwkC,aAAe,yBAA2BxkC,EAAWwkC,aAAe,GAE/E,MAEC9qE,OAAQ8lE,IAAkBjoE,KAAM,OAMnCs/C,EAAeqpB,GADfrpB,EAAe4oB,GADf5oB,EAAeypB,GAAiBzpB,GACe7W,GACQA,GAIvD8W,EAAiBopB,GADjBppB,EAAiB2oB,GADjB3oB,EAAiBwpB,GAAiBxpB,GACiB9W,GACQA,GAE3D6W,EAAe8pB,GAAa9pB,GAC5BC,EAAiB6pB,GAAa7pB,GAEzB9W,EAAWwd,WAA+C,IAAnCxd,EAAWgjC,sBAItCD,EAAgB,oBAEhB7B,EAAe,CACd,uBACA,sBACA,6BACC3pE,KAAM,MAAS,KAAO2pE,EAExBC,EAAiB,CAChB,qBACEnhC,EAAWyX,cAAgBz9B,GAAU,GAAK,+BAC1CgmB,EAAWyX,cAAgBz9B,GAAU,GAAK,oCAC5C,uCACA,4BACA,8BACA,oCACA,qCACA,6CACA,uCACA,uCACA,+CACA,0CACCziB,KAAM,MAAS,KAAO4pE,GAIzB,IA+FIsD,EAgBA7U,EA9GE8U,EAAe3B,EAAgB5B,EAAiBrqB,EAKhD6tB,EAAiBrG,GAAahhB,EAAI,MANrBylB,EAAgB7B,EAAerqB,GAO5C+tB,EAAmBtG,GAAahhB,EAAI,MAAOonB,GAqBjD,GAnBApnB,EAAGunB,aAAcrW,EAASmW,GAC1BrnB,EAAGunB,aAAcrW,EAASoW,QAIc53E,IAAnCgzC,EAAWuX,oBAEf+F,EAAGwnB,mBAAoBtW,EAAS,EAAGxuB,EAAWuX,sBAEP,IAA5BvX,EAAWoK,cAGtBkT,EAAGwnB,mBAAoBtW,EAAS,EAAG,YAIpClR,EAAGynB,YAAavW,GAGX5U,EAASorB,MAAMC,kBAAoB,CAEvC,IAAMC,EAAa5nB,EAAG6nB,kBAAmB3W,GAAUj5D,OAC7C6vE,EAAY9nB,EAAG0hB,iBAAkB2F,GAAiBpvE,OAClD8vE,EAAc/nB,EAAG0hB,iBAAkB4F,GAAmBrvE,OAExD+vE,GAAW,EACXC,GAAkB,EAEtB,IAAkD,IAA7CjoB,EAAG6gB,oBAAqB3P,EAAS,OAAoB,CAEzD8W,GAAW,EAEX,IAAME,EAAe1G,GAAiBxhB,EAAIqnB,EAAgB,UACpDc,EAAiB3G,GAAiBxhB,EAAIsnB,EAAkB,YAE9D70D,QAAQxjB,MAAO,qCAAsC+wD,EAAGooB,WAAY,QAASpoB,EAAG6gB,oBAAqB3P,EAAS,OAAS,uBAAwB0W,EAAYM,EAAcC,OAE/I,KAAfP,EAEXn1D,QAAQM,KAAM,6CAA8C60D,GAEnC,KAAdE,GAAoC,KAAhBC,IAE/BE,GAAkB,GAIdA,IAEJ96E,KAAKk7E,YAAc,CAElBL,SAAUA,EAEVJ,WAAYA,EAEZruB,aAAc,CAEbt7B,IAAK6pD,EACLtvE,OAAQorE,GAITpqB,eAAgB,CAEfv7B,IAAK8pD,EACLvvE,OAAQqrE,KAwEZ,OAxDA7jB,EAAGsoB,aAAcjB,GACjBrnB,EAAGsoB,aAAchB,GAMjBn6E,KAAKssE,YAAc,WAQlB,YANwB/pE,IAAnBy3E,IAEJA,EAAiB,IAAIvG,GAAe5gB,EAAIkR,IAIlCiW,GAQRh6E,KAAK2lE,cAAgB,WAQpB,YAN0BpjE,IAArB4iE,IAEJA,EApqBH,SAAkCtS,EAAIkR,GAMrC,IAJA,IAAMt6C,EAAa,GAEbtmB,EAAI0vD,EAAG6gB,oBAAqB3P,EAAS,OAEjCxlE,EAAI,EAAGA,EAAI4E,EAAG5E,IAAO,CAE9B,IACMiG,EADOquD,EAAGuoB,gBAAiBrX,EAASxlE,GACxBiG,KAIlBilB,EAAYjlB,GAASquD,EAAGwoB,kBAAmBtX,EAASv/D,GAIrD,OAAOilB,EAmpBc6xD,CAAyBzoB,EAAIkR,IAI1CoB,GAMRnlE,KAAKu7E,QAAU,WAEdtY,EAAcwD,uBAAwBzmE,MAEtC6yD,EAAG2oB,cAAezX,GAClB/jE,KAAK+jE,aAAUxhE,GAMhBvC,KAAKwE,KAAO+wC,EAAWijC,WACvBx4E,KAAKg0C,GAAKmgC,KACVn0E,KAAK2G,SAAWA,EAChB3G,KAAKy7E,UAAY,EACjBz7E,KAAK+jE,QAAUA,EACf/jE,KAAKosD,aAAe8tB,EACpBl6E,KAAKqsD,eAAiB8tB,EAEfn6E,KAIR,SAAS07E,GAAevsB,EAAU6R,EAAUxU,EAAYsG,EAAcmQ,EAAe1W,GAEpF,IAAMgf,EAAW,GAEXxY,EAAWD,EAAaC,SACxBwU,EAAyBzU,EAAayU,uBACtCa,EAAsBtV,EAAasV,oBACnCP,EAAoB/U,EAAa+U,kBACjCG,EAAiBlV,EAAakV,eAEhCtsB,EAAYoX,EAAapX,UAEvBigC,EAAY,CACjBC,kBAAmB,QACnBC,qBAAsB,eACtBC,mBAAoB,SACpB95B,kBAAmB,QACnB+5B,oBAAqB,UACrBC,kBAAmB,QACnBC,iBAAkB,OAClBC,qBAAsB,WACtBC,qBAAsB,WACtBC,mBAAoB,SACpBC,kBAAmB,QACnBC,mBAAoB,SACpBC,eAAgB,SAChBC,eAAgB,SAChBC,eAAgB,UAGXC,EAAiB,CACtB,YAAa,WAAY,yBAA0B,iBAAkB,aAAc,kBACnF,MAAO,cAAe,SAAU,iBAAkB,SAAU,aAAc,iBAAkB,eAC5F,WAAY,mBAAoB,QAAS,cAAe,sBAAuB,UAAW,YAAa,uBAAwB,wBAAyB,eAAgB,wBAAyB,qBAAsB,kBAAmB,cAC1O,eAAgB,eAAgB,cAChC,WAAY,UAAW,eAAgB,eAAgB,iBAAkB,YAAa,gBAAiB,MAAO,SAAU,UACxH,cAAe,kBAAmB,yBAA0B,WAC5D,WAAY,mBAAoB,eAAgB,eAAgB,qBAChE,eAAgB,iBAAkB,gBAAiB,gBAAiB,oBACpE,qBAAsB,uBAAwB,sBAC9C,mBAAoB,gBAAiB,cAAe,0BACpD,YAAa,cAAe,YAAa,oBAAqB,sBAAuB,eAAgB,YACrG,QAAS,mBAuCV,SAASC,EAA2BpnE,GAEnC,IAAIilB,EAiBJ,OAfKjlB,GAAOA,EAAI6mB,UAEf5B,EAAWjlB,EAAIilB,SAEJjlB,GAAOA,EAAIgpB,qBAEtBjZ,QAAQM,KAAM,6HACd4U,EAAWjlB,EAAI0oB,QAAQzD,UAIvBA,EAAWxL,GAILwL,EA6RR,MAAO,CACNoiD,cA1RD,SAAwB/mC,EAAUyW,EAAQuwB,EAASztB,EAAOnuD,GAEzD,IAwBImrD,EAAcC,EAxBZvS,EAAMsV,EAAMtV,IACZgjC,EAAcjnC,EAASknC,uBAAyB3tB,EAAM0tB,YAAc,KAEpEj+B,EAASmiB,EAASjgE,IAAK80C,EAASgJ,QAAUi+B,GAE1CpF,EAAWiE,EAAW9lC,EAAS5vB,MAK/B2yD,EAAW33E,EAAOw0C,cAvEzB,SAAsBx0C,GAErB,IACM+7E,EADW/7E,EAAO20C,SACDonC,MAEvB,GAAK5U,EAEJ,OAAO,KAWP,IAAM6U,EAAkBpV,EAClBqV,EAAkBpsE,KAAKmgB,OAASgsD,EAAkB,IAAO,GAEzDrE,EAAW9nE,KAAKiE,IAAKmoE,EAAiBF,EAAMx+E,QAElD,OAAKo6E,EAAWoE,EAAMx+E,QAErB8mB,QAAQM,KAAM,qCAAuCo3D,EAAMx+E,OAAS,6BAA+Bo6E,EAAW,KACvG,GAIDA,EAyCgCuE,CAAal8E,GAAW,EAgBhE,GAd4B,OAAvB40C,EAAS6F,YAEbA,EAAYoX,EAAaoU,gBAAiBrxB,EAAS6F,cAEhC7F,EAAS6F,WAE3Bp2B,QAAQM,KAAM,oCAAqCiwB,EAAS6F,UAAW,uBAAwBA,EAAW,YAQvGg8B,EAAW,CAEf,IAAM3nB,EAAS+P,GAAW4X,GAE1BtrB,EAAe2D,EAAO3D,aACtBC,EAAiB0D,EAAO1D,oBAIxBD,EAAevW,EAASuW,aACxBC,EAAiBxW,EAASwW,eAI3B,IAAMiD,EAAsBH,EAASI,kBA2HrC,MAzHmB,CAElBwD,SAAUA,EAEV2kB,SAAUA,EACVc,WAAY3iC,EAAS5vB,KAErBmmC,aAAcA,EACdC,eAAgBA,EAChBF,QAAStW,EAASsW,QAElBosB,qBAAsD,IAAjC1iC,EAAS0iC,oBAC9BvrB,YAAanX,EAASmX,YAEtBtR,UAAWA,EAEX+8B,YAAuC,IAA3Bx3E,EAAOg0C,gBACnByjC,iBAA4C,IAA3Bz3E,EAAOg0C,iBAAqD,OAAzBh0C,EAAOk0C,cAE3DwjC,uBAAwB3Q,EACxB8R,eAA0C,OAAxBxqB,EAAiCqtB,EAA2BrtB,EAAoBrxB,SAAYkxB,EAAS2qB,eACvHvkE,MAAQsgC,EAAStgC,IACjBkkE,YAAakD,EAA2B9mC,EAAStgC,KACjDooC,SAAW9H,EAAS8H,OACpB+7B,eAAgBiD,EAA2B9mC,EAAS8H,QACpDkB,SAAWA,EACXk4B,WAAYl4B,GAAUA,EAAO7kB,QAC7B2/C,eAAgBgD,EAA2B99B,GAC3C24B,eAAmB34B,IAAgBA,EAAO7kB,UAAYlN,GA95hBzB,MA85hBwD+xB,EAAO7kB,SAC5F6jB,WAAahI,EAASgI,SACtBg8B,iBAAkB8C,EAA2B9mC,EAASgI,UACtDE,QAAUlI,EAASkI,MACnBY,cAAgB9I,EAAS8I,YACzBi7B,oBAAqB+C,EAA2B9mC,EAAS8I,aACzDV,UAAYpI,EAASoI,QACrBE,YAActI,EAASsI,UACvB46B,qBAh0hB0B,IAg0hBJljC,EAASuI,cAC/Bq5B,sBAl0hB2B,IAk0hBJ5hC,EAASuI,cAChCb,eAAiB1H,EAAS0H,aAC1BC,wBAA0B3H,EAAS2H,sBACnCC,qBAAuB5H,EAAS4H,mBAChCa,kBAAoBzI,EAASyI,gBAC7BG,eAAiB5I,EAAS4I,aAC1BC,eAAiB7I,EAAS6I,aAC1BE,cAAgB/I,EAAS+I,YACzBhB,WAAa/H,EAAS+H,SAEtBsB,cAAgBrJ,EAASqJ,YAEzBlC,QAAUnH,EAASmH,MAEnBgwB,kBAAoBn3B,EAASm3B,gBAE7BluB,QAASjJ,EAASiJ,QAElBk6B,eAAkBnjC,EAASsI,WAAatI,EAASmjC,eACjD/+B,aAAcpE,EAASoE,aACvBg/B,cAAwC,IAA1BpjC,EAASoE,cAAyBh5C,EAAOslC,UAAYtlC,EAAOslC,SAAS9c,WAAWmzB,OAAuD,IAA9C37C,EAAOslC,SAAS9c,WAAWmzB,MAAMyF,SACxI62B,YAAcrjC,EAAStgC,OAAUsgC,EAASoI,WAAcpI,EAASsI,aAAgBtI,EAAS+I,eAAkB/I,EAAS+H,YAAe/H,EAAS8I,eAAkB9I,EAAS4I,gBAAmB5I,EAAS6I,gBAAmB7I,EAAS0H,gBAAmB1H,EAAS2H,yBAA4B3H,EAAS4H,sBAAyB5H,EAASyI,mBAAsBzI,EAASm3B,gBAClWmM,gBAAsBtjC,EAAStgC,KAAUsgC,EAASoI,SAAcpI,EAASsI,WAAgBtI,EAAS+I,aAAkB/I,EAAS+H,UAAe/H,EAAS8I,aAAkB9I,EAAS4I,cAAmB5I,EAAS6I,cAAmB7I,EAAS4H,oBAAyB5H,EAASm3B,oBAAwBn3B,EAASyI,gBAE3SxE,MAAQA,EACR++B,OAAQhjC,EAASiE,IACjBg/B,QAAWh/B,GAAOA,EAAIsjC,UAEtB1gC,cAAgB7G,EAAS6G,YAEzByC,gBAAiBtJ,EAASsJ,gBAC1BooB,uBAAwBA,EAExB1nB,SAAUhK,EAASgK,UAAY+4B,EAAW,EAC1CA,SAAUA,EACVQ,iBAAkBhR,EAElBzoB,aAAc9J,EAAS8J,aACvBC,aAAc/J,EAAS+J,aAEvBq1B,aAAc3oB,EAAO+wB,YAAY7+E,OACjC42E,eAAgB9oB,EAAOnmB,MAAM3nC,OAC7B02E,cAAe5oB,EAAOgxB,KAAK9+E,OAC3B22E,kBAAmB7oB,EAAOixB,SAAS/+E,OACnC62E,cAAe/oB,EAAOkxB,KAAKh/E,OAE3B82E,mBAAoBhpB,EAAOmS,qBAAqBjgE,OAChDg3E,qBAAsBlpB,EAAOgT,eAAe9gE,OAC5C+2E,oBAAqBjpB,EAAO0S,cAAcxgE,OAE1Ck3E,kBAAmBnpB,EAASuc,UAC5B6M,oBAAqBppB,EAASwc,gBAE9BjtB,UAAWjG,EAASiG,UAEpBy9B,iBAAkBpqB,EAASsuB,UAAUtvB,SAAW0uB,EAAQr+E,OAAS,EACjEo4E,cAAeznB,EAASsuB,UAAUx3D,KAElC08C,YAAa9sB,EAASqG,WAAaiT,EAASwT,YA9+hBzB,EA++hBnB6W,wBAAyBrqB,EAASqqB,wBAElCv9B,mBAAoBpG,EAASoG,mBAE7BF,UAAWlG,EAASkG,UACpBs9B,YAvhiBgB,IAuhiBHxjC,EAASmE,KACtBs/B,UAzhiBc,IAyhiBHzjC,EAASmE,KAEpB+/B,kBAA0Cx3E,IAA1BszC,EAASkkC,cAA+BlkC,EAASkkC,aAEjEjtB,oBAAqBjX,EAASiX,oBAE9ByqB,qBAAsB1hC,EAAS2W,YAAc3W,EAAS2W,WAAWC,YACjEkrB,mBAAoB9hC,EAAS2W,YAAc3W,EAAS2W,WAAWE,UAC/DmrB,qBAAsBhiC,EAAS2W,YAAc3W,EAAS2W,WAAWG,YACjEorB,0BAA2BliC,EAAS2W,YAAc3W,EAAS2W,WAAWI,iBAEtEgrB,2BAA4B7kB,GAAYvG,EAAWhkC,IAAK,kBACxDsvD,6BAA8B/kB,GAAYvG,EAAWhkC,IAAK,sBAC1DwvD,kCAAmCjlB,GAAYvG,EAAWhkC,IAAK,0BAE/D8zB,sBAAuBzG,EAASyG,0BA0HjCohC,mBAlHD,SAA6BnoC,GAE5B,IAAM5lB,EAAQ,GAad,GAXK4lB,EAAWmiC,SAEf/nD,EAAMxrB,KAAMoxC,EAAWmiC,WAIvB/nD,EAAMxrB,KAAMoxC,EAAW8W,gBACvB18B,EAAMxrB,KAAMoxC,EAAW6W,oBAII7pD,IAAvBgzC,EAAW4W,QAEf,IAAM,IAAM3nD,KAAQ+wC,EAAW4W,QAE9Bx8B,EAAMxrB,KAAMK,GACZmrB,EAAMxrB,KAAMoxC,EAAW4W,QAAS3nD,IAMlC,IAAwC,IAAnC+wC,EAAWgjC,oBAAgC,CAE/C,IAAM,IAAIh6E,EAAI,EAAGA,EAAIm+E,EAAel+E,OAAQD,IAE3CoxB,EAAMxrB,KAAMoxC,EAAYmnC,EAAgBn+E,KAIzCoxB,EAAMxrB,KAAMgrD,EAAS2qB,gBACrBnqD,EAAMxrB,KAAMgrD,EAASjO,aAMtB,OAFAvxB,EAAMxrB,KAAMoxC,EAAW+G,uBAEhB3sB,EAAM7iB,QA0Ebw/D,YAtED,SAAsBz2B,GAErB,IACIkW,EADE2rB,EAAWiE,EAAW9lC,EAAS5vB,MAGrC,GAAKyxD,EAAW,CAEf,IAAM3nB,EAAS+P,GAAW4X,GAC1B3rB,EAAWE,GAAc3tB,MAAOyxB,EAAOhE,eAIvCA,EAAWlW,EAASkW,SAIrB,OAAOA,GAuDP4xB,eAnDD,SAAyBpoC,EAAY5uC,GAKpC,IAHA,IAAIo9D,EAGMxtD,EAAI,EAAGqnE,EAAKrS,EAAS/sE,OAAQ+X,EAAIqnE,EAAIrnE,IAAO,CAErD,IAAMsnE,EAAqBtS,EAAUh1D,GAErC,GAAKsnE,EAAmBl3E,WAAaA,EAAW,IAE/Co9D,EAAU8Z,GACCpC,UAEX,OAaF,YAPiBl5E,IAAZwhE,IAEJA,EAAU,IAAIyS,GAAcrnB,EAAUxoD,EAAU4uC,EAAY0tB,GAC5DsI,EAASpnE,KAAM4/D,IAITA,GAyBP+Z,eArBD,SAAyB/Z,GAExB,GAA8B,MAAtBA,EAAQ0X,UAAkB,CAGjC,IAAMl9E,EAAIgtE,EAAS/9D,QAASu2D,GAC5BwH,EAAUhtE,GAAMgtE,EAAUA,EAAS/sE,OAAS,GAC5C+sE,EAASx/D,MAGTg4D,EAAQwX,YAaThQ,SAAUA,GAKZ,SAASwS,KAER,IAAIh0D,EAAa,IAAIkpC,QAmCrB,MAAO,CACNlyD,IAlCD,SAAcE,GAEb,IAAIsU,EAAMwU,EAAWhpB,IAAKE,GAS1B,YAPasB,IAARgT,IAEJA,EAAM,GACNwU,EAAWnP,IAAK3Z,EAAQsU,IAIlBA,GAwBPw+B,OApBD,SAAiB9yC,GAEhB8oB,EAAWqpC,OAAQnyD,IAmBnBgoB,OAfD,SAAiBhoB,EAAQlC,EAAKU,GAE7BsqB,EAAWhpB,IAAKE,GAAUlC,GAAQU,GAclC4+B,QAVD,WAECtU,EAAa,IAAIkpC,UAanB,SAAS+qB,GAAmBrzE,EAAGC,GAE9B,OAAKD,EAAEszE,aAAerzE,EAAEqzE,WAEhBtzE,EAAEszE,WAAarzE,EAAEqzE,WAEbtzE,EAAEooC,cAAgBnoC,EAAEmoC,YAExBpoC,EAAEooC,YAAcnoC,EAAEmoC,YAEdpoC,EAAEo5D,UAAYn5D,EAAEm5D,QAEpBp5D,EAAEo5D,QAAQ/vB,GAAKppC,EAAEm5D,QAAQ/vB,GAErBrpC,EAAEkrC,SAAS7B,KAAOppC,EAAEirC,SAAS7B,GAEjCrpC,EAAEkrC,SAAS7B,GAAKppC,EAAEirC,SAAS7B,GAEvBrpC,EAAE2xB,IAAM1xB,EAAE0xB,EAEd3xB,EAAE2xB,EAAI1xB,EAAE0xB,EAIR3xB,EAAEqpC,GAAKppC,EAAEopC,GAMlB,SAASkqC,GAA0BvzE,EAAGC,GAErC,OAAKD,EAAEszE,aAAerzE,EAAEqzE,WAEhBtzE,EAAEszE,WAAarzE,EAAEqzE,WAEbtzE,EAAEooC,cAAgBnoC,EAAEmoC,YAExBpoC,EAAEooC,YAAcnoC,EAAEmoC,YAEdpoC,EAAE2xB,IAAM1xB,EAAE0xB,EAEd1xB,EAAE0xB,EAAI3xB,EAAE2xB,EAIR3xB,EAAEqpC,GAAKppC,EAAEopC,GAOlB,SAASmqC,GAAiBp0D,GAEzB,IAAMq0D,EAAc,GAChBC,EAAmB,EAEjBC,EAAS,GACTnkC,EAAc,GAEdokC,EAAiB,CAAEvqC,IAAM,GAW/B,SAASwqC,EAAmBv9E,EAAQslC,EAAUsP,EAAUooC,EAAY3hD,EAAG3e,GAEtE,IAAI8gE,EAAaL,EAAaC,GACxBzU,EAAqB7/C,EAAWhpB,IAAK80C,GAkC3C,YAhCoBtzC,IAAfk8E,GAEJA,EAAa,CACZzqC,GAAI/yC,EAAO+yC,GACX/yC,OAAQA,EACRslC,SAAUA,EACVsP,SAAUA,EACVkuB,QAAS6F,EAAmB7F,SAAWwa,EACvCN,WAAYA,EACZlrC,YAAa9xC,EAAO8xC,YACpBzW,EAAGA,EACH3e,MAAOA,GAGRygE,EAAaC,GAAqBI,IAIlCA,EAAWzqC,GAAK/yC,EAAO+yC,GACvByqC,EAAWx9E,OAASA,EACpBw9E,EAAWl4C,SAAWA,EACtBk4C,EAAW5oC,SAAWA,EACtB4oC,EAAW1a,QAAU6F,EAAmB7F,SAAWwa,EACnDE,EAAWR,WAAaA,EACxBQ,EAAW1rC,YAAc9xC,EAAO8xC,YAChC0rC,EAAWniD,EAAIA,EACfmiD,EAAW9gE,MAAQA,GAIpB0gE,IAEOI,EAgDR,MAAO,CAENH,OAAQA,EACRnkC,YAAaA,EAEbovB,KAnGD,WAEC8U,EAAmB,EAEnBC,EAAO9/E,OAAS,EAChB27C,EAAY37C,OAAS,GA+FrB2F,KAlDD,SAAelD,EAAQslC,EAAUsP,EAAUooC,EAAY3hD,EAAG3e,GAEzD,IAAM8gE,EAAaD,EAAmBv9E,EAAQslC,EAAUsP,EAAUooC,EAAY3hD,EAAG3e,KAEtD,IAAzBk4B,EAASsE,YAAuBA,EAAcmkC,GAASn6E,KAAMs6E,IA+C/D5xE,QA3CD,SAAkB5L,EAAQslC,EAAUsP,EAAUooC,EAAY3hD,EAAG3e,GAE5D,IAAM8gE,EAAaD,EAAmBv9E,EAAQslC,EAAUsP,EAAUooC,EAAY3hD,EAAG3e,KAEtD,IAAzBk4B,EAASsE,YAAuBA,EAAcmkC,GAASzxE,QAAS4xE,IAwClEC,OA7BD,WAIC,IAAM,IAAIngF,EAAI8/E,EAAkB14C,EAAKy4C,EAAY5/E,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEvE,IAAMkgF,EAAaL,EAAa7/E,GAEhC,GAAuB,OAAlBkgF,EAAWzqC,GAAc,MAE9ByqC,EAAWzqC,GAAK,KAChByqC,EAAWx9E,OAAS,KACpBw9E,EAAWl4C,SAAW,KACtBk4C,EAAW5oC,SAAW,KACtB4oC,EAAW1a,QAAU,KACrB0a,EAAW9gE,MAAQ,OAgBpBsuD,KAtCD,SAAe0S,EAAkBC,GAE3BN,EAAO9/E,OAAS,GAAI8/E,EAAOrS,KAAM0S,GAAoBX,IACrD7jC,EAAY37C,OAAS,GAAI27C,EAAY8xB,KAAM2S,GAAyBV,MAwC3E,SAASW,GAAkB90D,GAE1B,IAAI+0D,EAAQ,IAAI7rB,QAoChB,MAAO,CACNlyD,IAnCD,SAAcquD,EAAO2vB,GAEpB,IAAInzE,EAsBJ,OApB4B,IAAvBkzE,EAAMt2D,IAAK4mC,IAEfxjD,EAAO,IAAIuyE,GAAiBp0D,GAC5B+0D,EAAMlkE,IAAKw0C,EAAO,CAAExjD,KAIfmzE,GAAmBD,EAAM/9E,IAAKquD,GAAQ5wD,QAE1CoN,EAAO,IAAIuyE,GAAiBp0D,GAC5B+0D,EAAM/9E,IAAKquD,GAAQjrD,KAAMyH,IAIzBA,EAAOkzE,EAAM/9E,IAAKquD,GAAS2vB,GAMtBnzE,GAYPyyB,QARD,WAECygD,EAAQ,IAAI7rB,UAWd,SAAS+rB,KAER,IAAM1yB,EAAS,GAEf,MAAO,CAENvrD,IAAK,SAAWk+E,GAEf,QAA4B18E,IAAvB+pD,EAAQ2yB,EAAMjrC,IAElB,OAAOsY,EAAQ2yB,EAAMjrC,IAItB,IAAI+X,EAEJ,OAASkzB,EAAMh5D,MAEd,IAAK,mBACJ8lC,EAAW,CACV/hB,UAAW,IAAI3H,GACfua,MAAO,IAAI0D,IAEZ,MAED,IAAK,YACJyL,EAAW,CACV5c,SAAU,IAAI9M,GACd2H,UAAW,IAAI3H,GACfua,MAAO,IAAI0D,GACX/M,SAAU,EACVqrB,QAAS,EACTC,YAAa,EACbC,MAAO,GAER,MAED,IAAK,aACJ/S,EAAW,CACV5c,SAAU,IAAI9M,GACdua,MAAO,IAAI0D,GACX/M,SAAU,EACVurB,MAAO,GAER,MAED,IAAK,kBACJ/S,EAAW,CACV/hB,UAAW,IAAI3H,GACfo9B,SAAU,IAAInf,GACdof,YAAa,IAAIpf,IAElB,MAED,IAAK,gBACJyL,EAAW,CACVnP,MAAO,IAAI0D,GACXnR,SAAU,IAAI9M,GACd68C,UAAW,IAAI78C,GACf88C,WAAY,IAAI98C,IAQnB,OAFAiqB,EAAQ2yB,EAAMjrC,IAAO+X,EAEdA,IAuEV,IAAIqzB,GAAc,EAElB,SAASC,GAA0BC,EAAQC,GAE1C,OAASA,EAAO3sC,WAAa,EAAI,IAAQ0sC,EAAO1sC,WAAa,EAAI,GAIlE,SAAS4sC,GAAahzB,EAAYsG,GA2CjC,IAzCA,IAAM5sD,EAAQ,IAAI84E,GAEZS,EA3EP,WAEC,IAAMnzB,EAAS,GAEf,MAAO,CAENvrD,IAAK,SAAWk+E,GAEf,QAA4B18E,IAAvB+pD,EAAQ2yB,EAAMjrC,IAElB,OAAOsY,EAAQ2yB,EAAMjrC,IAItB,IAAI+X,EAEJ,OAASkzB,EAAMh5D,MAEd,IAAK,mBASL,IAAK,YACJ8lC,EAAW,CACVsS,WAAY,EACZC,iBAAkB,EAClBC,aAAc,EACdC,cAAe,IAAI9qC,IAEpB,MAED,IAAK,aACJq4B,EAAW,CACVsS,WAAY,EACZC,iBAAkB,EAClBC,aAAc,EACdC,cAAe,IAAI9qC,GACnB0rC,iBAAkB,EAClBC,gBAAiB,KAUpB,OAFA/S,EAAQ2yB,EAAMjrC,IAAO+X,EAEdA,IAsBW2zB,GAEd/5E,EAAQ,CAEbs1B,QAAS,EAETrtB,KAAM,CACL+xE,mBAAqB,EACrBC,aAAe,EACfC,YAAc,EACdC,gBAAkB,EAClBC,YAAc,EAEdC,uBAAyB,EACzBC,iBAAmB,EACnBC,gBAAkB,GAGnBC,QAAS,CAAE,EAAG,EAAG,GACjBC,MAAO,GACP/C,YAAa,GACbgD,kBAAmB,GACnB5hB,qBAAsB,GACtBC,wBAAyB,GACzB4e,KAAM,GACNgD,WAAY,GACZthB,cAAe,GACfC,iBAAkB,GAClBse,SAAU,GACVgD,aAAc,KACdC,aAAc,KACdr6C,MAAO,GACPs6C,YAAa,GACbnhB,eAAgB,GAChBC,kBAAmB,GACnBie,KAAM,IAIGj/E,EAAI,EAAGA,EAAI,EAAGA,IAAOoH,EAAMy6E,MAAMj8E,KAAM,IAAIk+B,IAErD,IAAMq+C,EAAU,IAAIr+C,GACdrK,EAAU,IAAIuU,GACdo0C,EAAW,IAAIp0C,GAmVrB,MAAO,CACNq4B,MAlVD,SAAgBtY,GAIf,IAFA,IAAIl0B,EAAI,EAAGlT,EAAI,EAAGta,EAAI,EAEZrM,EAAI,EAAGA,EAAI,EAAGA,IAAOoH,EAAMy6E,MAAO7hF,GAAIqc,IAAK,EAAG,EAAG,GAE3D,IAAI+kE,EAAoB,EACpBC,EAAc,EACdC,EAAa,EACbC,EAAiB,EACjBC,EAAa,EAEbC,EAAwB,EACxBC,EAAkB,EAClBC,EAAiB,EAErB5zB,EAAO2f,KAAMoT,IAEb,IAAM,IAAI9gF,EAAI,EAAGyK,EAAIsjD,EAAO9tD,OAAQD,EAAIyK,EAAGzK,IAAO,CAEjD,IAAM0gF,EAAQ3yB,EAAQ/tD,GAEhBq+C,EAAQqiC,EAAMriC,MACdgkC,EAAY3B,EAAM2B,UAClBrtC,EAAW0rC,EAAM1rC,SAEjBkqC,EAAcwB,EAAMne,QAAUme,EAAMne,OAAOvrD,IAAQ0pE,EAAMne,OAAOvrD,IAAI0oB,QAAU,KAEpF,GAAKghD,EAAM4B,eAEVzoD,GAAKwkB,EAAMxkB,EAAIwoD,EACf17D,GAAK03B,EAAM13B,EAAI07D,EACfh2E,GAAKgyC,EAAMhyC,EAAIg2E,OAET,GAAK3B,EAAM6B,aAEjB,IAAM,IAAI3hE,EAAI,EAAGA,EAAI,EAAGA,IAEvBxZ,EAAMy6E,MAAOjhE,GAAI05B,gBAAiBomC,EAAM8B,GAAGC,aAAc7hE,GAAKyhE,QAIzD,GAAK3B,EAAMgC,mBAAqB,CAEtC,IAAMl1B,EAAW7lD,EAAMnF,IAAKk+E,GAI5B,GAFAlzB,EAASnP,MAAMzhB,KAAM8jD,EAAMriC,OAAQ7oB,eAAgBkrD,EAAM2B,WAEpD3B,EAAMrsC,WAAa,CAEvB,IAAMkuB,EAASme,EAAMne,OAEfogB,EAAiBzB,EAAY1+E,IAAKk+E,GAExCiC,EAAe7iB,WAAayC,EAAOqgB,KACnCD,EAAe5iB,iBAAmBwC,EAAOsgB,WACzCF,EAAe3iB,aAAeuC,EAAOr8B,OACrCy8C,EAAe1iB,cAAgBsC,EAAOugB,QAEtC17E,EAAM06E,kBAAmBV,GAAsBuB,EAC/Cv7E,EAAM84D,qBAAsBkhB,GAAsBlC,EAClD93E,EAAM+4D,wBAAyBihB,GAAsBV,EAAMne,OAAOjoC,OAElEmnD,IAIDr6E,EAAM03E,YAAasC,GAAsB5zB,EAEzC4zB,SAEM,GAAKV,EAAMqC,YAAc,CAE/B,IAAMv1B,EAAW7lD,EAAMnF,IAAKk+E,GAW5B,GATAlzB,EAAS5c,SAASsE,sBAAuBwrC,EAAMz7C,aAE/CuoB,EAASnP,MAAMzhB,KAAMyhB,GAAQ7oB,eAAgB6sD,GAC7C70B,EAASxY,SAAWA,EAEpBwY,EAAS6S,QAAU9tD,KAAKkiB,IAAKisD,EAAM3qD,OACnCy3B,EAAS8S,YAAc/tD,KAAKkiB,IAAKisD,EAAM3qD,OAAU,EAAI2qD,EAAMsC,WAC3Dx1B,EAAS+S,MAAQmgB,EAAMngB,MAElBmgB,EAAMrsC,WAAa,CAEvB,IAAMkuB,EAASme,EAAMne,OAEfogB,EAAiBzB,EAAY1+E,IAAKk+E,GAExCiC,EAAe7iB,WAAayC,EAAOqgB,KACnCD,EAAe5iB,iBAAmBwC,EAAOsgB,WACzCF,EAAe3iB,aAAeuC,EAAOr8B,OACrCy8C,EAAe1iB,cAAgBsC,EAAOugB,QAEtC17E,EAAM26E,WAAYT,GAAeqB,EACjCv7E,EAAMq5D,cAAe6gB,GAAepC,EACpC93E,EAAMs5D,iBAAkB4gB,GAAeZ,EAAMne,OAAOjoC,OAEpDqnD,IAIDv6E,EAAM23E,KAAMuC,GAAe9zB,EAE3B8zB,SAEM,GAAKZ,EAAMuC,gBAAkB,CAEnC,IAAMz1B,EAAW7lD,EAAMnF,IAAKk+E,GAM5BlzB,EAASnP,MAAMzhB,KAAMyhB,GAAQ7oB,eAAgB6sD,GAE7C70B,EAASmzB,UAAUtkE,IAAmB,GAAdqkE,EAAM3lD,MAAa,EAAK,GAChDyyB,EAASozB,WAAWvkE,IAAK,EAAoB,GAAfqkE,EAAM1lD,OAAc,GAElD5zB,EAAM43E,SAAUuC,GAAmB/zB,EAEnC+zB,SAEM,GAAKb,EAAMwC,aAAe,CAEhC,IAAM11B,EAAW7lD,EAAMnF,IAAKk+E,GAM5B,GAJAlzB,EAASnP,MAAMzhB,KAAM8jD,EAAMriC,OAAQ7oB,eAAgBkrD,EAAM2B,WACzD70B,EAASxY,SAAW0rC,EAAM1rC,SAC1BwY,EAAS+S,MAAQmgB,EAAMngB,MAElBmgB,EAAMrsC,WAAa,CAEvB,IAAMkuB,EAASme,EAAMne,OAEfogB,EAAiBzB,EAAY1+E,IAAKk+E,GAExCiC,EAAe7iB,WAAayC,EAAOqgB,KACnCD,EAAe5iB,iBAAmBwC,EAAOsgB,WACzCF,EAAe3iB,aAAeuC,EAAOr8B,OACrCy8C,EAAe1iB,cAAgBsC,EAAOugB,QACtCH,EAAe9hB,iBAAmB0B,EAAO39B,OAAOkN,KAChD6wC,EAAe7hB,gBAAkByB,EAAO39B,OAAOmN,IAE/C3qC,EAAM86E,YAAab,GAAgBsB,EACnCv7E,EAAM25D,eAAgBsgB,GAAgBnC,EACtC93E,EAAM45D,kBAAmBqgB,GAAgBX,EAAMne,OAAOjoC,OAEtDonD,IAIDt6E,EAAMwgC,MAAOy5C,GAAgB7zB,EAE7B6zB,SAEM,GAAKX,EAAMyC,kBAAoB,CAErC,IAAM31B,EAAW7lD,EAAMnF,IAAKk+E,GAE5BlzB,EAAS0T,SAAStkC,KAAM8jD,EAAMriC,OAAQ7oB,eAAgB6sD,GACtD70B,EAAS2T,YAAYvkC,KAAM8jD,EAAMvf,aAAc3rC,eAAgB6sD,GAE/Dj7E,EAAM63E,KAAMuC,GAAeh0B,EAE3Bg0B,KAMGD,EAAiB,IAEhBhtB,EAAaC,WAWqC,IAAjDvG,EAAWhkC,IAAK,6BAPrB7iB,EAAM46E,aAAe3jB,GAAY+kB,YACjCh8E,EAAM66E,aAAe5jB,GAAYglB,cAWiC,IAAtDp1B,EAAWhkC,IAAK,kCAE3B7iB,EAAM46E,aAAe3jB,GAAYilB,WACjCl8E,EAAM66E,aAAe5jB,GAAYklB,YAIjCx8D,QAAQxjB,MAAO,gFAQlB6D,EAAMw6E,QAAS,GAAM/nD,EACrBzyB,EAAMw6E,QAAS,GAAMj7D,EACrBvf,EAAMw6E,QAAS,GAAMv1E,EAErB,IAAMgD,EAAOjI,EAAMiI,KAEdA,EAAK+xE,oBAAsBA,GAC/B/xE,EAAKgyE,cAAgBA,GACrBhyE,EAAKiyE,aAAeA,GACpBjyE,EAAKkyE,iBAAmBA,GACxBlyE,EAAKmyE,aAAeA,GACpBnyE,EAAKoyE,wBAA0BA,GAC/BpyE,EAAKqyE,kBAAoBA,GACzBryE,EAAKsyE,iBAAmBA,IAExBv6E,EAAM03E,YAAY7+E,OAASmhF,EAC3Bh6E,EAAM23E,KAAK9+E,OAASqhF,EACpBl6E,EAAM43E,SAAS/+E,OAASshF,EACxBn6E,EAAMwgC,MAAM3nC,OAASohF,EACrBj6E,EAAM63E,KAAKh/E,OAASuhF,EAEpBp6E,EAAM06E,kBAAkB7hF,OAASwhF,EACjCr6E,EAAM84D,qBAAqBjgE,OAASwhF,EACpCr6E,EAAM86E,YAAYjiF,OAASyhF,EAC3Bt6E,EAAM25D,eAAe9gE,OAASyhF,EAC9Bt6E,EAAM26E,WAAW9hF,OAAS0hF,EAC1Bv6E,EAAMq5D,cAAcxgE,OAAS0hF,EAC7Bv6E,EAAM+4D,wBAAwBlgE,OAASwhF,EACvCr6E,EAAM45D,kBAAkB/gE,OAASyhF,EACjCt6E,EAAMs5D,iBAAiBzgE,OAAS0hF,EAEhCtyE,EAAK+xE,kBAAoBA,EACzB/xE,EAAKgyE,YAAcA,EACnBhyE,EAAKiyE,WAAaA,EAClBjyE,EAAKkyE,eAAiBA,EACtBlyE,EAAKmyE,WAAaA,EAElBnyE,EAAKoyE,sBAAwBA,EAC7BpyE,EAAKqyE,gBAAkBA,EACvBryE,EAAKsyE,eAAiBA,EAEtBv6E,EAAMs1B,QAAUmkD,OA6FjB2C,UAvFD,SAAoBz1B,EAAQnpB,GAU3B,IARA,IAAIw8C,EAAoB,EACpBC,EAAc,EACdC,EAAa,EACbC,EAAiB,EACjBC,EAAa,EAEX1W,EAAalmC,EAAOE,mBAEhB9kC,EAAI,EAAGyK,EAAIsjD,EAAO9tD,OAAQD,EAAIyK,EAAGzK,IAAO,CAEjD,IAAM0gF,EAAQ3yB,EAAQ/tD,GAEtB,GAAK0gF,EAAMgC,mBAAqB,CAE/B,IAAMl1B,EAAWpmD,EAAM03E,YAAasC,GAEpC5zB,EAAS/hB,UAAUyJ,sBAAuBwrC,EAAMz7C,aAChDk9C,EAAQjtC,sBAAuBwrC,EAAM5gF,OAAOmlC,aAC5CuoB,EAAS/hB,UAAU3F,IAAKq8C,GACxB30B,EAAS/hB,UAAUsC,mBAAoB+8B,GAEvCsW,SAEM,GAAKV,EAAMqC,YAAc,CAE/B,IAAMv1B,EAAWpmD,EAAM23E,KAAMuC,GAE7B9zB,EAAS5c,SAASsE,sBAAuBwrC,EAAMz7C,aAC/CuoB,EAAS5c,SAAS/L,aAAcimC,GAEhCtd,EAAS/hB,UAAUyJ,sBAAuBwrC,EAAMz7C,aAChDk9C,EAAQjtC,sBAAuBwrC,EAAM5gF,OAAOmlC,aAC5CuoB,EAAS/hB,UAAU3F,IAAKq8C,GACxB30B,EAAS/hB,UAAUsC,mBAAoB+8B,GAEvCwW,SAEM,GAAKZ,EAAMuC,gBAAkB,CAEnC,IAAMz1B,EAAWpmD,EAAM43E,SAAUuC,GAEjC/zB,EAAS5c,SAASsE,sBAAuBwrC,EAAMz7C,aAC/CuoB,EAAS5c,SAAS/L,aAAcimC,GAGhCsX,EAASqB,WACThqD,EAAQmD,KAAM8jD,EAAMz7C,aACpBxL,EAAQmb,YAAak2B,GACrBsX,EAAS9sC,gBAAiB7b,GAE1B+zB,EAASmzB,UAAUtkE,IAAmB,GAAdqkE,EAAM3lD,MAAa,EAAK,GAChDyyB,EAASozB,WAAWvkE,IAAK,EAAoB,GAAfqkE,EAAM1lD,OAAc,GAElDwyB,EAASmzB,UAAU97C,aAAcu9C,GACjC50B,EAASozB,WAAW/7C,aAAcu9C,GAElCb,SAEM,GAAKb,EAAMwC,aAAe,CAEhC,IAAM11B,EAAWpmD,EAAMwgC,MAAOy5C,GAE9B7zB,EAAS5c,SAASsE,sBAAuBwrC,EAAMz7C,aAC/CuoB,EAAS5c,SAAS/L,aAAcimC,GAEhCuW,SAEM,GAAKX,EAAMyC,kBAAoB,CAErC,IAAM31B,EAAWpmD,EAAM63E,KAAMuC,GAE7Bh0B,EAAS/hB,UAAUyJ,sBAAuBwrC,EAAMz7C,aAChDuoB,EAAS/hB,UAAUsC,mBAAoB+8B,GACvCtd,EAAS/hB,UAAUrV,YAEnBorD,OAWFp6E,MAAOA,GAKT,SAASs8E,GAAkBz1B,EAAYsG,GAEtC,IAAMxG,EAAS,IAAIkzB,GAAahzB,EAAYsG,GAEtCovB,EAAc,GACdC,EAAe,GAwCrB,MAAO,CACN5Y,KAvCD,WAEC2Y,EAAY1jF,OAAS,EACrB2jF,EAAa3jF,OAAS,GAqCtBmH,MATa,CACbu8E,YAAaA,EACbC,aAAcA,EAEd71B,OAAQA,GAMR81B,YAtBD,WAEC91B,EAAOsY,MAAOsd,IAqBdG,gBAjBD,SAA0Bl/C,GAEzBmpB,EAAOy1B,UAAWG,EAAa/+C,IAiB/Bm/C,UArCD,SAAoBrD,GAEnBiD,EAAY/9E,KAAM86E,IAoClBsD,WAhCD,SAAqBC,GAEpBL,EAAah+E,KAAMq+E,KAmCrB,SAASC,GAAmBj2B,EAAYsG,GAEvC,IAAI4vB,EAAe,IAAIzvB,QAoCvB,MAAO,CACNlyD,IAnCD,SAAcquD,GAA6B,IAEtCuzB,EAFgB5D,EAAsB,uDAAJ,EAwBtC,OApBmC,IAA9B2D,EAAal6D,IAAK4mC,IAEtBuzB,EAAc,IAAIV,GAAkBz1B,EAAYsG,GAChD4vB,EAAa9nE,IAAKw0C,EAAO,CAAEuzB,KAItB5D,GAAmB2D,EAAa3hF,IAAKquD,GAAQ5wD,QAEjDmkF,EAAc,IAAIV,GAAkBz1B,EAAYsG,GAChD4vB,EAAa3hF,IAAKquD,GAAQjrD,KAAMw+E,IAIhCA,EAAcD,EAAa3hF,IAAKquD,GAAS2vB,GAMpC4D,GAYPtkD,QARD,WAECqkD,EAAe,IAAIzvB,U,IA6Bf2oB,G,kDAEL,WAAarmC,GAAa,kCAEzB,gBAEKtvB,KAAO,oBAEZ,EAAK8zD,aA37jBmB,KA67jBxB,EAAKl6B,UAAW,EAChB,EAAKF,cAAe,EAEpB,EAAKpqC,IAAM,KAEX,EAAKqoC,SAAW,KAEhB,EAAKU,gBAAkB,KACvB,EAAKC,kBAAoB,EACzB,EAAKC,iBAAmB,EAExB,EAAKe,WAAY,EACjB,EAAKC,mBAAqB,EAE1B,EAAK1F,KAAM,EAEX,EAAKyC,UAAWhH,GAxBS,E,wCA4B1B,SAAMhtC,GAoBL,OAlBA,4DAAYA,GAEZvI,KAAK+5E,aAAexxE,EAAOwxE,aAE3B/5E,KAAK6/C,SAAWt3C,EAAOs3C,SACvB7/C,KAAK2/C,aAAep3C,EAAOo3C,aAE3B3/C,KAAKuV,IAAMhN,EAAOgN,IAElBvV,KAAK49C,SAAWr1C,EAAOq1C,SAEvB59C,KAAKs+C,gBAAkB/1C,EAAO+1C,gBAC9Bt+C,KAAKu+C,kBAAoBh2C,EAAOg2C,kBAChCv+C,KAAKw+C,iBAAmBj2C,EAAOi2C,iBAE/Bx+C,KAAKu/C,UAAYh3C,EAAOg3C,UACxBv/C,KAAKw/C,mBAAqBj3C,EAAOi3C,mBAE1Bx/C,S,GAlDuB65C,IAwDhC+hC,GAAkBz8E,UAAUyjF,qBAAsB,E,IAuB5C/G,G,kDAEL,WAAatmC,GAAa,kCAEzB,gBAEKtvB,KAAO,uBAEZ,EAAK06C,kBAAoB,IAAIt+B,GAC7B,EAAKu+B,aAAe,EACpB,EAAKC,YAAc,IAEnB,EAAKhhB,UAAW,EAChB,EAAKF,cAAe,EAEpB,EAAKpqC,IAAM,KAEX,EAAKqoC,SAAW,KAEhB,EAAKU,gBAAkB,KACvB,EAAKC,kBAAoB,EACzB,EAAKC,iBAAmB,EAExB,EAAK1E,KAAM,EAEX,EAAKyC,UAAWhH,GAvBS,E,wCA2B1B,SAAMhtC,GAmBL,OAjBA,4DAAYA,GAEZvI,KAAK2gE,kBAAkBxlC,KAAM5yB,EAAOo4D,mBACpC3gE,KAAK4gE,aAAer4D,EAAOq4D,aAC3B5gE,KAAK6gE,YAAct4D,EAAOs4D,YAE1B7gE,KAAK6/C,SAAWt3C,EAAOs3C,SACvB7/C,KAAK2/C,aAAep3C,EAAOo3C,aAE3B3/C,KAAKuV,IAAMhN,EAAOgN,IAElBvV,KAAK49C,SAAWr1C,EAAOq1C,SAEvB59C,KAAKs+C,gBAAkB/1C,EAAO+1C,gBAC9Bt+C,KAAKu+C,kBAAoBh2C,EAAOg2C,kBAChCv+C,KAAKw+C,iBAAmBj2C,EAAOi2C,iBAExBx+C,S,GAhD0B65C,IAsDnCgiC,GAAqB18E,UAAU0jF,wBAAyB,EAMxD,SAASC,GAAgBC,EAAWC,EAAUC,GAE7C,IAAIC,EAAW,IAAI1yB,GAEb2yB,EAAiB,IAAIzvD,GAC1B0vD,EAAgB,IAAI1vD,GAEpB2vD,EAAY,IAAIhnD,GAEhBinD,EAAkB,GAClBC,EAAqB,GAErBC,EAAiB,GAEjBC,EAAkBR,EAAcvb,eAE3BlsB,EAAa,CAAEkoC,EAlukBL,EAkukBkBC,EAnukBjB,EAmukB+BC,EAjukB9B,GAmukBZC,EAAyB,IAAI33B,GAAgB,CAElDC,QAAS,CACR23B,YAAa,EAAM,EACnBC,iBAAkB,EAAM,GAGzBh4B,SAAU,CACTi4B,YAAa,CAAEvkF,MAAO,MACtBwkF,WAAY,CAAExkF,MAAO,IAAIi0B,IACzB+Q,OAAQ,CAAEhlC,MAAO,IAGlB2sD,aAjCa,2DAmCbC,eArCa,igCAyCR63B,EAA2BL,EAAuBvlD,QACxD4lD,EAAyB/3B,QAAQg4B,gBAAkB,EAEnD,IAAMC,EAAgB,IAAIrgC,GAC1BqgC,EAAcn8D,aACb,WACA,IAAIm6B,GACH,IAAImB,aAAc,EAAI,GAAK,EAAG,GAAK,GAAK,EAAG,IAAO,EAAG,EAAG,KACxD,IAIF,IAAM8gC,EAAiB,IAAIl7B,GAAMi7B,EAAeP,GAE1Cl5B,EAAQ3qD,KA4Id,SAASskF,EAASxjB,EAAQ39B,GAEzB,IAAMoD,EAAWy8C,EAAS/5D,OAAQo7D,GAIlCR,EAAuB93B,SAASi4B,YAAYvkF,MAAQqhE,EAAOvrD,IAAI0oB,QAC/D4lD,EAAuB93B,SAASk4B,WAAWxkF,MAAQqhE,EAAOugB,QAC1DwC,EAAuB93B,SAAStnB,OAAOhlC,MAAQqhE,EAAOr8B,OACtDs+C,EAAUvzB,gBAAiBsR,EAAOyjB,SAClCxB,EAAU3yB,QACV2yB,EAAUyB,mBAAoBrhD,EAAQ,KAAMoD,EAAUs9C,EAAwBQ,EAAgB,MAI9FH,EAAyBn4B,SAASi4B,YAAYvkF,MAAQqhE,EAAOyjB,QAAQtmD,QACrEimD,EAAyBn4B,SAASk4B,WAAWxkF,MAAQqhE,EAAOugB,QAC5D6C,EAAyBn4B,SAAStnB,OAAOhlC,MAAQqhE,EAAOr8B,OACxDs+C,EAAUvzB,gBAAiBsR,EAAOvrD,KAClCwtE,EAAU3yB,QACV2yB,EAAUyB,mBAAoBrhD,EAAQ,KAAMoD,EAAU29C,EAA0BG,EAAgB,MAIjG,SAASI,EAAyBC,EAAaC,EAAaC,GAE3D,IAAM/4E,EAAQ64E,GAAe,EAAIC,GAAe,EAAIC,GAAiB,EAEjE/uC,EAAWytC,EAAiBz3E,GAiBhC,YAfkBtJ,IAAbszC,IAEJA,EAAW,IAAI+lC,GAAmB,CAEjC7B,aA9xkBqB,KAgykBrBp6B,aAAc+kC,EACd7kC,SAAU8kC,IAIXrB,EAAiBz3E,GAAUgqC,GAIrBA,EAIR,SAASgvC,EAA4BH,EAAaC,EAAaC,GAE9D,IAAM/4E,EAAQ64E,GAAe,EAAIC,GAAe,EAAIC,GAAiB,EAEjE/uC,EAAW0tC,EAAoB13E,GAenC,YAbkBtJ,IAAbszC,IAEJA,EAAW,IAAIgmC,GAAsB,CAEpCl8B,aAAc+kC,EACd7kC,SAAU8kC,IAIXpB,EAAoB13E,GAAUgqC,GAIxBA,EAIR,SAASivC,EAAkB7jF,EAAQslC,EAAUsP,EAAUopC,EAAO7f,EAAkBC,EAAiBp5C,GAEhG,IAAIpmB,EAAS,KAETklF,EAAqBN,EACrBO,EAAiB/jF,EAAOgkF,oBAS5B,IAP4B,IAAvBhG,EAAMwC,eAEVsD,EAAqBF,EACrBG,EAAiB/jF,EAAOikF,6BAID3iF,IAAnByiF,EAA+B,CAEnC,IAAIN,GAAc,GAEa,IAA1B7uC,EAAS8J,eAEb+kC,EAAcn+C,EAASyd,iBAAmBzd,EAASyd,gBAAgB7U,UAAY5I,EAASyd,gBAAgB7U,SAAS3wC,OAAS,GAI3H,IAAImmF,GAAc,GAEY,IAAzB1jF,EAAOw0C,iBAEgB,IAAtBI,EAASgK,SAEb8kC,GAAc,EAIdr/D,QAAQM,KAAM,+EAAgF3kB,IAQhGpB,EAASklF,EAAoBL,EAAaC,GAFO,IAA3B1jF,EAAOg0C,sBAM7Bp1C,EAASmlF,EAIV,GAAKjC,EAAUta,uBACY,IAAzB5yB,EAAS0F,aAC0B,IAAnC1F,EAASwF,eAAe78C,OAAe,CAKxC,IAAM2mF,EAAOtlF,EAAO46B,KAAM2qD,EAAOvvC,EAASpb,KAEtC4qD,EAAsB7B,EAAgB2B,QAEb5iF,IAAxB8iF,IAEJA,EAAsB,GACtB7B,EAAgB2B,GAASE,GAI1B,IAAIC,EAAiBD,EAAqBD,QAElB7iF,IAAnB+iF,IAEJA,EAAiBzlF,EAAOy+B,QACxB+mD,EAAqBD,GAASE,GAI/BzlF,EAASylF,EAgCV,OA5BAzlF,EAAO8yC,QAAUkD,EAASlD,QAC1B9yC,EAAO0/C,UAAY1J,EAAS0J,UAI3B1/C,EAAOm6C,KAjjlBW,IA+ilBd/zB,EAEoC,OAAxB4vB,EAAS2F,WAAwB3F,EAAS2F,WAAa3F,EAASmE,KAIxC,OAAxBnE,EAAS2F,WAAwB3F,EAAS2F,WAAaA,EAAY3F,EAASmE,MAI7Fn6C,EAAO07C,YAAc1F,EAAS0F,YAC9B17C,EAAOw7C,eAAiBxF,EAASwF,eACjCx7C,EAAOy7C,iBAAmBzF,EAASyF,iBAEnCz7C,EAAO2/C,mBAAqB3J,EAAS2J,mBACrC3/C,EAAOu/C,UAAYvJ,EAASuJ,WAEA,IAAvB6/B,EAAMwC,eAA2D,IAAlC5hF,EAAOgjF,yBAE1ChjF,EAAO8gE,kBAAkBltB,sBAAuBwrC,EAAMz7C,aACtD3jC,EAAO+gE,aAAexB,EACtBv/D,EAAOghE,YAAcxB,GAIfx/D,EAIR,SAAS0lF,EAActkF,EAAQkiC,EAAQqiD,EAAcvG,EAAOh5D,GAE3D,IAAwB,IAAnBhlB,EAAO0xC,QAAZ,CAIA,GAFgB1xC,EAAOowC,OAAOh7B,KAAM8sB,EAAOkO,UAEzBpwC,EAAOm0C,QAAUn0C,EAAOo0C,QAAUp0C,EAAOq0C,YAEnDr0C,EAAO2xC,YAAgB3xC,EAAO4xC,eApllBnB,IAollBoC5sB,MAAiChlB,EAAO6xC,eAAiBowC,EAASuC,iBAAkBxkF,IAAa,CAEtJA,EAAOsxC,gBAAgBnc,iBAAkBovD,EAAaniD,mBAAoBpiC,EAAOuiC,aAEjF,IAAM+C,EAAWy8C,EAAS/5D,OAAQhoB,GAC5B40C,EAAW50C,EAAO40C,SAExB,GAAK9yC,MAAMC,QAAS6yC,GAInB,IAFA,IAAMr2B,EAAS+mB,EAAS/mB,OAEd1T,EAAI,EAAG45E,EAAKlmE,EAAOhhB,OAAQsN,EAAI45E,EAAI55E,IAAO,CAEnD,IAAM6R,EAAQ6B,EAAQ1T,GAChB+9C,EAAgBhU,EAAUl4B,EAAMymC,eAEtC,GAAKyF,GAAiBA,EAAclX,QAAU,CAE7C,IAAMgzC,EAAgBb,EAAkB7jF,EAAQslC,EAAUsjB,EAAeo1B,EAAOuG,EAAan1C,KAAMm1C,EAAal1C,IAAKrqB,GAErH88D,EAAUyB,mBAAoBgB,EAAc,KAAMj/C,EAAUo/C,EAAe1kF,EAAQ0c,SAM/E,GAAKk4B,EAASlD,QAAU,CAE9B,IAAMgzC,EAAgBb,EAAkB7jF,EAAQslC,EAAUsP,EAAUopC,EAAOuG,EAAan1C,KAAMm1C,EAAal1C,IAAKrqB,GAEhH88D,EAAUyB,mBAAoBgB,EAAc,KAAMj/C,EAAUo/C,EAAe1kF,EAAQ,OAUtF,IAFA,IAAM8E,EAAW9E,EAAO8E,SAEdxH,EAAI,EAAGyK,EAAIjD,EAASvH,OAAQD,EAAIyK,EAAGzK,IAE5CgnF,EAAcx/E,EAAUxH,GAAK4kC,EAAQqiD,EAAcvG,EAAOh5D,IArX5DjmB,KAAKmuD,SAAU,EAEfnuD,KAAK4lF,YAAa,EAClB5lF,KAAKqkD,aAAc,EAEnBrkD,KAAKimB,KAhxkBe,EAkxkBpBjmB,KAAKwF,OAAS,SAAW8mD,EAAQ8C,EAAOjsB,GAEvC,IAAuB,IAAlBwnB,EAAMwD,WACe,IAArBxD,EAAMi7B,aAA8C,IAAtBj7B,EAAMtG,cAElB,IAAlBiI,EAAO9tD,OAAZ,CAEA,IAAM8wD,EAAsByzB,EAAUxzB,kBAChCs2B,EAAiB9C,EAAU+C,oBAC3BC,EAAoBhD,EAAUiD,uBAE9BC,EAASlD,EAAUp9E,MAGzBsgF,EAAOC,YAzxkBU,GA0xkBjBD,EAAOjzB,QAAQpW,MAAM6kB,SAAU,EAAG,EAAG,EAAG,GACxCwkB,EAAOjzB,QAAQn1B,MAAMsoD,SAAS,GAC9BF,EAAOG,gBAAgB,GAIvB,IAAM,IAAI7nF,EAAI,EAAGonC,EAAK2mB,EAAO9tD,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEnD,IAAM0gF,EAAQ3yB,EAAQ/tD,GAChBuiE,EAASme,EAAMne,OAErB,QAAgBv+D,IAAXu+D,GAOL,IAA2B,IAAtBA,EAAO8kB,aAA+C,IAAvB9kB,EAAOzc,YAA3C,CAEA8+B,EAAehoD,KAAM2lC,EAAOugB,SAE5B,IAAMgF,EAAqBvlB,EAAOwlB,kBA0BlC,GAxBAnD,EAAe9vC,SAAUgzC,GAEzBjD,EAAcjoD,KAAM2lC,EAAOugB,UAEtB8B,EAAernE,EAAI2nE,GAAmBN,EAAepnE,EAAI0nE,KAExDN,EAAernE,EAAI2nE,IAEvBL,EAActnE,EAAIhL,KAAKmgB,MAAOwyD,EAAkB4C,EAAmBvqE,GACnEqnE,EAAernE,EAAIsnE,EAActnE,EAAIuqE,EAAmBvqE,EACxDglD,EAAOugB,QAAQvlE,EAAIsnE,EAActnE,GAI7BqnE,EAAepnE,EAAI0nE,IAEvBL,EAAcrnE,EAAIjL,KAAKmgB,MAAOwyD,EAAkB4C,EAAmBtqE,GACnEonE,EAAepnE,EAAIqnE,EAAcrnE,EAAIsqE,EAAmBtqE,EACxD+kD,EAAOugB,QAAQtlE,EAAIqnE,EAAcrnE,IAMf,OAAf+kD,EAAOvrD,MAAkBurD,EAAOylB,oBA/0kBnB,IA+0kByCvmF,KAAKimB,KAAwB,CAEvF,IAAMugE,EAAO,CAAEnsD,UAAWhN,EAAc+M,UAAW/M,EAAciN,OAAQvM,IAEzE+yC,EAAOvrD,IAAM,IAAIqoB,GAAmBulD,EAAernE,EAAGqnE,EAAepnE,EAAGyqE,GACxE1lB,EAAOvrD,IAAI0oB,QAAQz5B,KAAOy6E,EAAMz6E,KAAO,aAEvCs8D,EAAOyjB,QAAU,IAAI3mD,GAAmBulD,EAAernE,EAAGqnE,EAAepnE,EAAGyqE,GAE5E1lB,EAAO39B,OAAOwqB,yBAIf,GAAoB,OAAfmT,EAAOvrD,IAAe,CAE1B,IAAMixE,EAAO,CAAEnsD,UAAWnN,EAAekN,UAAWlN,EAAeoN,OAAQvM,IAE3E+yC,EAAOvrD,IAAM,IAAIqoB,GAAmBulD,EAAernE,EAAGqnE,EAAepnE,EAAGyqE,GACxE1lB,EAAOvrD,IAAI0oB,QAAQz5B,KAAOy6E,EAAMz6E,KAAO,aAEvCs8D,EAAO39B,OAAOwqB,yBAIfo1B,EAAUvzB,gBAAiBsR,EAAOvrD,KAClCwtE,EAAU3yB,QAIV,IAFA,IAAMq2B,EAAgB3lB,EAAO4lB,mBAEnBC,EAAK,EAAGA,EAAKF,EAAeE,IAAQ,CAE7C,IAAM3oD,EAAW8iC,EAAO8lB,YAAaD,GAErCtD,EAAUzoE,IACTwoE,EAActnE,EAAIkiB,EAASliB,EAC3BsnE,EAAcrnE,EAAIiiB,EAASjiB,EAC3BqnE,EAActnE,EAAIkiB,EAAS1B,EAC3B8mD,EAAcrnE,EAAIiiB,EAASpK,GAG5BqyD,EAAOjoD,SAAUqlD,GAEjBviB,EAAO+lB,eAAgB5H,EAAO0H,GAE9BzD,EAAWpiB,EAAOgmB,aAElBvB,EAAcn2B,EAAOjsB,EAAQ29B,EAAO39B,OAAQ87C,EAAOj/E,KAAKimB,MAMlD66C,EAAOylB,oBAn4kBI,IAm4kBkBvmF,KAAKimB,MAExCq+D,EAASxjB,EAAQ39B,GAIlB29B,EAAOzc,aAAc,QA7FpB/+B,QAAQM,KAAM,wBAAyBq5D,EAAO,kBAiGhDt0B,EAAMtG,aAAc,EAEpB0+B,EAAUvzB,gBAAiBF,EAAqBu2B,EAAgBE,KAuPlE,SAASgB,GAAYl0B,EAAIrG,EAAYsG,GAAe,QAE7CC,EAAWD,EAAaC,SAmT9B,IAAMi0B,EAAc,IAjTpB,WAEC,IAAIC,GAAS,EAEPrqC,EAAQ,IAAIvgB,GACd6qD,EAAmB,KACjBC,EAAoB,IAAI9qD,GAAS,EAAG,EAAG,EAAG,GAEhD,MAAO,CAEN+qD,QAAS,SAAWC,GAEdH,IAAqBG,GAAeJ,IAExCp0B,EAAGw0B,UAAWA,EAAWA,EAAWA,EAAWA,GAC/CH,EAAmBG,IAMrBC,UAAW,SAAWC,GAErBN,EAASM,GAIV9lB,SAAU,SAAWrpC,EAAGlT,EAAGta,EAAGD,EAAGsxC,IAEJ,IAAvBA,IAEJ7jB,GAAKztB,EAAGua,GAAKva,EAAGC,GAAKD,GAItBiyC,EAAMhiC,IAAKwd,EAAGlT,EAAGta,EAAGD,IAEuB,IAAtCw8E,EAAkBn/C,OAAQ4U,KAE9BiW,EAAGuO,WAAYhpC,EAAGlT,EAAGta,EAAGD,GACxBw8E,EAAkBhsD,KAAMyhB,KAM1B8nB,MAAO,WAENuiB,GAAS,EAETC,EAAmB,KACnBC,EAAkBvsE,KAAO,EAAG,EAAG,EAAG,MA+P/BsjB,EAAc,IAvPpB,WAEC,IAAI+oD,GAAS,EAETO,EAAmB,KACnBC,EAAmB,KACnBC,EAAoB,KAExB,MAAO,CAENvB,QAAS,SAAWxrC,GAEdA,EAEJgtC,EAAQ,MAIRC,EAAS,OAMXR,QAAS,SAAWS,GAEdL,IAAqBK,GAAeZ,IAExCp0B,EAAGg1B,UAAWA,GACdL,EAAmBK,IAMrBC,QAAS,SAAWptC,GAEnB,GAAK+sC,IAAqB/sC,EAAY,CAErC,GAAKA,EAEJ,OAASA,GAER,KArtlBY,EAutlBXmY,EAAGnY,UAAW,KACd,MAED,KAztlBa,EA2tlBZmY,EAAGnY,UAAW,KACd,MAED,KA7tlBW,EA+tlBVmY,EAAGnY,UAAW,KACd,MAED,KAjulBgB,EAmulBfmY,EAAGnY,UAAW,KACd,MAED,KArulBY,EAuulBXmY,EAAGnY,UAAW,KACd,MAED,KAzulBmB,EA2ulBlBmY,EAAGnY,UAAW,KACd,MAED,KA7ulBc,EA+ulBbmY,EAAGnY,UAAW,KACd,MAED,KAjvlBe,EAmvlBdmY,EAAGnY,UAAW,KACd,MAED,QAECmY,EAAGnY,UAAW,UAMhBmY,EAAGnY,UAAW,KAIf+sC,EAAmB/sC,IAMrB4sC,UAAW,SAAWC,GAErBN,EAASM,GAIV9lB,SAAU,SAAW5jC,GAEf6pD,IAAsB7pD,IAE1Bg1B,EAAGk1B,WAAYlqD,GACf6pD,EAAoB7pD,IAMtB6mC,MAAO,WAENuiB,GAAS,EAETO,EAAmB,KACnBC,EAAmB,KACnBC,EAAoB,QA4HjBvpD,EAAgB,IApHtB,WAEC,IAAI8oD,GAAS,EAETe,EAAqB,KACrBC,EAAqB,KACrBC,EAAoB,KACpBC,EAAyB,KACzBC,EAAqB,KACrBC,EAAsB,KACtBC,EAAsB,KACtBC,EAAsB,KAE1B,MAAO,CAENpC,QAAS,SAAWqC,GAEZvB,IAEDuB,EAEJb,EAAQ,MAIRC,EAAS,QAQZR,QAAS,SAAWqB,GAEdT,IAAuBS,GAAiBxB,IAE5Cp0B,EAAG41B,YAAaA,GAChBT,EAAqBS,IAMvBX,QAAS,SAAWhtC,EAAaC,EAAY0tC,GAEvCR,IAAuBntC,GACvBotC,IAAsBntC,GACtBotC,IAA2BM,IAE/B51B,EAAG/X,YAAaA,EAAaC,EAAY0tC,GAEzCR,EAAqBntC,EACrBotC,EAAoBntC,EACpBotC,EAAyBM,IAM3BC,MAAO,SAAWztC,EAAaC,EAAcC,GAEvCitC,IAAuBntC,GACvBotC,IAAwBntC,GACxBotC,IAAwBntC,IAE5B0X,EAAG81B,UAAW1tC,EAAaC,EAAcC,GAEzCitC,EAAqBntC,EACrBotC,EAAsBntC,EACtBotC,EAAsBntC,IAMxBmsC,UAAW,SAAWC,GAErBN,EAASM,GAIV9lB,SAAU,SAAWtR,GAEfo4B,IAAwBp4B,IAE5B0C,EAAG+1B,aAAcz4B,GACjBo4B,EAAsBp4B,IAMxBuU,MAAO,WAENuiB,GAAS,EAETe,EAAqB,KACrBC,EAAqB,KACrBC,EAAoB,KACpBC,EAAyB,KACzBC,EAAqB,KACrBC,EAAsB,KACtBC,EAAsB,KACtBC,EAAsB,QAcrBM,EAAsB,GAEtBC,EAAgB,KAChBC,EAA2B,GAE3BC,EAAiB,KAEjBC,GAAyB,EACzBC,EAAkB,KAClBC,EAAuB,KACvBC,EAAkB,KAClBC,EAAkB,KAClBC,EAA4B,KAC5BC,EAAuB,KACvBC,EAAuB,KACvBC,GAA2B,EAE3BC,EAAmB,KACnBC,EAAkB,KAElBC,EAAmB,KAEnBC,EAA6B,KAC7BC,EAA4B,KAE1BtiB,EAAc3U,EAAGiQ,aAAc,OAEjCinB,GAAqB,EACrB9uD,EAAU,EACR+uD,EAAYn3B,EAAGiQ,aAAc,OAEK,IAAnCknB,EAAUx8E,QAAS,UAEvBytB,EAAU4lB,WAAY,cAAcvjC,KAAM0sE,GAAa,IACvDD,EAAuB9uD,GAAW,IAEgB,IAAvC+uD,EAAUx8E,QAAS,eAE9BytB,EAAU4lB,WAAY,kBAAkBvjC,KAAM0sE,GAAa,IAC3DD,EAAuB9uD,GAAW,GAInC,IAAIgvD,EAAqB,KACrBC,EAAuB,GAErBC,EAAiB,IAAI9tD,GAAS,EAAG,EAAGw2B,EAAGz5B,OAAOE,MAAOu5B,EAAGz5B,OAAOG,QAC/D6wD,EAAkB,IAAI/tD,GAAS,EAAG,EAAGw2B,EAAGz5B,OAAOE,MAAOu5B,EAAGz5B,OAAOG,QAEtE,SAAS8wD,EAAepkE,EAAM5nB,EAAQmnC,GAErC,IAAM7mB,EAAO,IAAIs1C,WAAY,GACvBh2B,EAAU40B,EAAGw3B,gBAEnBx3B,EAAGy3B,YAAarkE,EAAMgY,GACtB40B,EAAG03B,cAAetkE,EAAM,MAAO,MAC/B4sC,EAAG03B,cAAetkE,EAAM,MAAO,MAE/B,IAAM,IAAI1nB,EAAI,EAAGA,EAAIinC,EAAOjnC,IAE3Bs0D,EAAG23B,WAAYnsF,EAASE,EAAG,EAAG,KAAM,EAAG,EAAG,EAAG,KAAM,KAAMogB,GAI1D,OAAOsf,EAIR,IAAMwsD,EAAgB,GAqBtB,SAAS9C,EAAQ3zC,IAEmB,IAA9B60C,EAAqB70C,KAEzB6e,EAAG80B,OAAQ3zC,GACX60C,EAAqB70C,IAAO,GAM9B,SAAS4zC,EAAS5zC,IAEkB,IAA9B60C,EAAqB70C,KAEzB6e,EAAG+0B,QAAS5zC,GACZ60C,EAAqB70C,IAAO,GApC9By2C,EAAe,MAASJ,EAAe,KAAM,KAAM,GACnDI,EAAe,OAAUJ,EAAe,MAAO,MAAO,GAItDrD,EAAYvlB,SAAU,EAAG,EAAG,EAAG,GAC/BvjC,EAAYujC,SAAU,GACtBtjC,EAAcsjC,SAAU,GAExBkmB,EAAQ,MACRzpD,EAAY4pD,QAh/lBU,GAk/lBtB4C,GAAc,GACdC,EArhmBoB,GAshmBpBhD,EAAQ,MAERzB,EA/gmBkB,GAqmmBlB,IAAM0E,GAAY,mBACfh+D,EAAe,OADA,cA9lmBM,IAgmmBD,OAFL,cA7lmBa,IAgmmBD,OAHZ,GAMlB,GAAKmmC,EAEJ63B,EApmmBkB,KAommBY,MAC9BA,EApmmBkB,KAommBY,UAExB,CAEN,IAAM7nB,EAAYvW,EAAWzrD,IAAK,oBAEf,OAAdgiE,IAEJ6nB,EA7mmBiB,KA6mmBa7nB,EAAU8nB,QACxCD,EA7mmBiB,KA6mmBa7nB,EAAU+nB,SAM1C,IAAMC,GAAU,mBAlnmBE,IAmnmBD,GADD,cAjnmBC,IAmnmBD,GAFA,cAhnmBM,IAmnmBD,KAHL,cA9mmBM,IAknmBD,KAJL,cAxmmBc,IA6mmBD,KALb,cA1mmBM,IAgnmBD,KANL,cA5mmBM,IAmnmBD,KAPL,cA/mmBc,IAunmBD,KARb,cA7mmBc,IAsnmBD,KATb,cAzmmBc,IAmnmBD,KAVb,cA3mmBc,IAsnmBD,KAXb,GAchB,SAAS7E,EAAansC,EAAUO,EAAeF,EAAUC,EAAUI,EAAoBF,EAAeC,EAAeyB,GAEpH,GA7omBiB,IA6omBZlC,GAoBL,IAPgC,IAA3BkvC,IAEJtB,EAAQ,MACRsB,GAAyB,GAxpmBL,IA4pmBhBlvC,EAmFLU,EAAqBA,GAAsBH,EAC3CC,EAAgBA,GAAiBH,EACjCI,EAAgBA,GAAiBH,EAE5BC,IAAkB6uC,GAAwB1uC,IAAuB6uC,IAErEz2B,EAAGm4B,sBAAuBJ,EAActwC,GAAiBswC,EAAcnwC,IAEvE0uC,EAAuB7uC,EACvBgvC,EAA4B7uC,GAIxBL,IAAagvC,GAAmB/uC,IAAagvC,GAAmB9uC,IAAkBgvC,GAAwB/uC,IAAkBgvC,IAEhI32B,EAAGo4B,kBAAmBF,EAAY3wC,GAAY2wC,EAAY1wC,GAAY0wC,EAAYxwC,GAAiBwwC,EAAYvwC,IAE/G4uC,EAAkBhvC,EAClBivC,EAAkBhvC,EAClBkvC,EAAuBhvC,EACvBivC,EAAuBhvC,GAIxB0uC,EAAkBnvC,EAClB0vC,EAA2B,UA1G1B,GAAK1vC,IAAamvC,GAAmBjtC,IAAuBwtC,EAA2B,CAWtF,GATKN,IAAyBv8D,GAAe08D,IAA8B18D,IAE1EimC,EAAGvY,cAAe,OAElB6uC,EAAuBv8D,EACvB08D,EAA4B18D,GAIxBqvB,EAEJ,OAASlC,GAER,KAjrmBiB,EAkrmBhB8Y,EAAGo4B,kBAAmB,EAAG,IAAK,EAAG,KACjC,MAED,KAprmBmB,EAqrmBlBp4B,EAAGq4B,UAAW,EAAG,GACjB,MAED,KAvrmBsB,EAwrmBrBr4B,EAAGo4B,kBAAmB,EAAG,EAAG,IAAK,KACjC,MAED,KA1rmBmB,EA2rmBlBp4B,EAAGo4B,kBAAmB,EAAG,IAAK,EAAG,KACjC,MAED,QACC3lE,QAAQxjB,MAAO,uCAAwCi4C,QAOzD,OAASA,GAER,KA3smBiB,EA4smBhB8Y,EAAGo4B,kBAAmB,IAAK,IAAK,EAAG,KACnC,MAED,KA9smBmB,EA+smBlBp4B,EAAGq4B,UAAW,IAAK,GACnB,MAED,KAjtmBsB,EAktmBrBr4B,EAAGq4B,UAAW,EAAG,KACjB,MAED,KAptmBmB,EAqtmBlBr4B,EAAGq4B,UAAW,EAAG,KACjB,MAED,QACC5lE,QAAQxjB,MAAO,uCAAwCi4C,GAO1DqvC,EAAkB,KAClBC,EAAkB,KAClBE,EAAuB,KACvBC,EAAuB,KAEvBN,EAAkBnvC,EAClB0vC,EAA2BxtC,QA3FI,IAA3BgtC,IAEJrB,EAAS,MACTqB,GAAyB,GAuK5B,SAASyB,EAAcpR,GAEjBoQ,IAAqBpQ,IAEpBA,EAEJzmB,EAAGs4B,UAAW,MAIdt4B,EAAGs4B,UAAW,MAIfzB,EAAmBpQ,GAMrB,SAASqR,EAAaS,GAv1mBF,IAy1mBdA,GAEJzD,EAAQ,MAEHyD,IAAazB,IA51mBA,IA81mBZyB,EAEJv4B,EAAGu4B,SAAU,MA/1mBI,IAi2mBNA,EAEXv4B,EAAGu4B,SAAU,MAIbv4B,EAAGu4B,SAAU,QAQfxD,EAAS,MAIV+B,EAAkByB,EAgBnB,SAASC,EAAkB1vC,EAAe2vC,EAAQjZ,GAE5C12B,GAEJgsC,EAAQ,OAEHkC,IAA+ByB,GAAUxB,IAA8BzX,IAE3Exf,EAAGlX,cAAe2vC,EAAQjZ,GAE1BwX,EAA6ByB,EAC7BxB,EAA4BzX,IAM7BuV,EAAS,OAsBX,SAAS2D,EAAeC,QAEJjpF,IAAdipF,IAA0BA,EAAY,MAAQhkB,EAAc,GAE5DyiB,IAAuBuB,IAE3B34B,EAAG04B,cAAeC,GAClBvB,EAAqBuB,GA+MvB,MAAO,CAENx4B,QAAS,CACRpW,MAAOoqC,EACPnpD,MAAOK,EACPiyB,QAAShyB,GAGVwpD,OAAQA,EACRC,QAASA,EAET6D,gBA9kBD,SAA0BptF,EAAQqtF,GAEZ,OAAhBA,GAA0C,OAAlB5C,IAAyB4C,EAAc5C,GAE/DC,EAA0B1qF,KAAaqtF,IAE3C74B,EAAG44B,gBAAiBptF,EAAQqtF,GAE5B3C,EAA0B1qF,GAAWqtF,EAEhC34B,IAIY,QAAX10D,IAEJ0qF,EAA0B,OAAU2C,GAIrB,QAAXrtF,IAEJ0qF,EAA0B,OAAU2C,MAyjBvCC,kBA3lBD,SAA4BD,GAEtBA,IAAgB5C,IAEpBj2B,EAAG44B,gBAAiB,MAAOC,GAE3B5C,EAAgB4C,IAulBjBE,WAjjBD,SAAqB7nB,GAEpB,OAAKilB,IAAmBjlB,IAEvBlR,EAAG+4B,WAAY7nB,GAEfilB,EAAiBjlB,GAEV,IA2iBRmiB,YAAaA,EACb2F,YAxXD,SAAsBh2C,EAAUi2C,GAnxmBd,IAqxmBjBj2C,EAASmE,KACN4tC,EAAS,MACTD,EAAQ,MAEX,IAAIrO,EA1xmBW,IA0xmBGzjC,EAASmE,KACtB8xC,IAAcxS,GAAcA,GAEjCoR,EAAcpR,GAzxmBO,IA2xmBnBzjC,EAASkE,WAAwD,IAAzBlE,EAASsE,YAChD+rC,EA7xmBc,GA8xmBdA,EAAarwC,EAASkE,SAAUlE,EAASyE,cAAezE,EAASuE,SAAUvE,EAASwE,SAAUxE,EAAS4E,mBAAoB5E,EAAS0E,cAAe1E,EAAS2E,cAAe3E,EAASoG,oBAEvL/d,EAAY4pD,QAASjyC,EAAS6E,WAC9Bxc,EAAYioD,QAAStwC,EAAS8E,WAC9Bzc,EAAYkpD,QAASvxC,EAAS+E,YAC9BosC,EAAYI,QAASvxC,EAAS4F,YAE9B,IAAML,EAAevF,EAASuF,aAC9Bjd,EAAcgoD,QAAS/qC,GAClBA,IAEJjd,EAAcipD,QAASvxC,EAASgF,kBAChC1c,EAAc2pD,QAASjyC,EAASiF,YAAajF,EAASkF,WAAYlF,EAASmF,iBAC3E7c,EAAcuqD,MAAO7yC,EAASoF,YAAapF,EAASqF,aAAcrF,EAASsF,eAI5EkwC,EAAkBx1C,EAAS8F,cAAe9F,EAAS+F,oBAAqB/F,EAASgG,qBAEpD,IAA7BhG,EAASmG,gBACN2rC,EAAQ,OACRC,EAAS,QAwVZ8C,aAAcA,EACdC,YAAaA,EAEboB,aA/RD,SAAuBzyD,GAEjBA,IAAUswD,IAETG,GAAqBl3B,EAAGm5B,UAAW1yD,GAExCswD,EAAmBtwD,IA0RpB+xD,iBAAkBA,EAElBjF,eA/PD,SAAyBroD,GAEnBA,EAEJ4pD,EAAQ,MAIRC,EAAS,OAyPV2D,cAAeA,EACfjB,YArOD,SAAsB2B,EAAWC,GAEJ,OAAvBjC,GAEJsB,IAID,IAAIY,EAAejC,EAAsBD,QAEnB1nF,IAAjB4pF,IAEJA,EAAe,CAAElmE,UAAM1jB,EAAW07B,aAAS17B,GAC3C2nF,EAAsBD,GAAuBkC,GAIzCA,EAAalmE,OAASgmE,GAAaE,EAAaluD,UAAYiuD,IAEhEr5B,EAAGy3B,YAAa2B,EAAWC,GAAgBzB,EAAewB,IAE1DE,EAAalmE,KAAOgmE,EACpBE,EAAaluD,QAAUiuD,IAgNxBE,cA1MD,WAEC,IAAMD,EAAejC,EAAsBD,QAErB1nF,IAAjB4pF,QAAoD5pF,IAAtB4pF,EAAalmE,OAE/C4sC,EAAGy3B,YAAa6B,EAAalmE,KAAM,MAEnCkmE,EAAalmE,UAAO1jB,EACpB4pF,EAAaluD,aAAU17B,IAkMxB8pF,qBA5LD,WAEC,IAECx5B,EAAGw5B,qBAAqBjsF,MAAOyyD,EAAI1yD,WAElC,MAAQ2B,GAETwjB,QAAQxjB,MAAO,oBAAqBA,KAqLrC0oF,WA/KD,WAEC,IAEC33B,EAAG23B,WAAWpqF,MAAOyyD,EAAI1yD,WAExB,MAAQ2B,GAETwjB,QAAQxjB,MAAO,oBAAqBA,KAwKrCwqF,WAlKD,WAEC,IAECz5B,EAAGy5B,WAAWlsF,MAAOyyD,EAAI1yD,WAExB,MAAQ2B,GAETwjB,QAAQxjB,MAAO,oBAAqBA,KA4JrCg8B,QApJD,SAAkBA,IAEyB,IAArCqsD,EAAeniD,OAAQlK,KAE3B+0B,EAAG/0B,QAASA,EAAQhiB,EAAGgiB,EAAQ/hB,EAAG+hB,EAAQxB,EAAGwB,EAAQlK,GACrDu2D,EAAehvD,KAAM2C,KAgJtBE,SA1ID,SAAmBA,IAE0B,IAAvCosD,EAAgBpiD,OAAQhK,KAE5B60B,EAAG70B,SAAUA,EAASliB,EAAGkiB,EAASjiB,EAAGiiB,EAAS1B,EAAG0B,EAASpK,GAC1Dw2D,EAAgBjvD,KAAM6C,KAuIvB0mC,MA/HD,WAIC7R,EAAG+0B,QAAS,MACZ/0B,EAAG+0B,QAAS,MACZ/0B,EAAG+0B,QAAS,MACZ/0B,EAAG+0B,QAAS,OACZ/0B,EAAG+0B,QAAS,MACZ/0B,EAAG+0B,QAAS,MACZ/0B,EAAG+0B,QAAS,OAEZ/0B,EAAGvY,cAAe,OAClBuY,EAAGq4B,UAAW,EAAG,GACjBr4B,EAAGo4B,kBAAmB,EAAG,EAAG,EAAG,GAE/Bp4B,EAAGw0B,WAAW,GAAM,GAAM,GAAM,GAChCx0B,EAAGuO,WAAY,EAAG,EAAG,EAAG,GAExBvO,EAAGg1B,WAAW,GACdh1B,EAAGnY,UAAW,KACdmY,EAAGk1B,WAAY,GAEfl1B,EAAG41B,YAAa,YAChB51B,EAAG/X,YAAa,IAAK,EAAG,YACxB+X,EAAG81B,UAAW,KAAM,KAAM,MAC1B91B,EAAG+1B,aAAc,GAEjB/1B,EAAGu4B,SAAU,MACbv4B,EAAGs4B,UAAW,MAEdt4B,EAAGlX,cAAe,EAAG,GAErBkX,EAAG04B,cAAe,OAElB14B,EAAG44B,gBAAiB,MAAO,OAET,IAAb14B,IAEJF,EAAG44B,gBAAiB,MAAO,MAC3B54B,EAAG44B,gBAAiB,MAAO,OAI5B54B,EAAG+4B,WAAY,MAEf/4B,EAAGm5B,UAAW,GAEdn5B,EAAG/0B,QAAS,EAAG,EAAG+0B,EAAGz5B,OAAOE,MAAOu5B,EAAGz5B,OAAOG,QAC7Cs5B,EAAG70B,SAAU,EAAG,EAAG60B,EAAGz5B,OAAOE,MAAOu5B,EAAGz5B,OAAOG,QAI9CsvD,EAAsB,GAEtBoB,EAAqB,KACrBC,EAAuB,GAEvBpB,EAAgB,KAChBC,EAA2B,GAE3BC,EAAiB,KAEjBC,GAAyB,EACzBC,EAAkB,KAClBC,EAAuB,KACvBC,EAAkB,KAClBC,EAAkB,KAClBC,EAA4B,KAC5BC,EAAuB,KACvBC,EAAuB,KACvBC,GAA2B,EAE3BC,EAAmB,KACnBC,EAAkB,KAElBC,EAAmB,KAEnBC,EAA6B,KAC7BC,EAA4B,KAE5BK,EAAevvE,IAAK,EAAG,EAAGi4C,EAAGz5B,OAAOE,MAAOu5B,EAAGz5B,OAAOG,QACrD6wD,EAAgBxvE,IAAK,EAAG,EAAGi4C,EAAGz5B,OAAOE,MAAOu5B,EAAGz5B,OAAOG,QAEtDytD,EAAYtiB,QACZxmC,EAAYwmC,QACZvmC,EAAcumC,UA+ChB,SAAS6nB,GAAeC,EAAKhgC,EAAY7mD,EAAOokB,EAAY+oC,EAAcjzC,EAAOhe,GAAO,QASnFszB,EAPE49B,EAAWD,EAAaC,SACxByU,EAAc1U,EAAa0U,YAC3BG,EAAiB7U,EAAa6U,eAC9BD,EAAiB5U,EAAa4U,eAC9BW,EAAavV,EAAauV,WAE1BokB,EAAiB,IAAIx5B,QAOvBy5B,GAAqB,EAEzB,IAECA,EAAgD,qBAApBC,iBAC+B,OAArD,IAAIA,gBAAiB,EAAG,GAAInzD,WAAY,MAE7C,MAAQl3B,IAMV,SAASsqF,EAActzD,EAAOC,GAI7B,OAAOmzD,EACN,IAAIC,gBAAiBrzD,EAAOC,GAC5BjvB,SAAS+uB,gBAAiB,+BAAgC,UAI5D,SAASwzD,EAAa5zD,EAAO6zD,EAAiBC,EAAgBC,GAE7D,IAAI59C,EAAQ,EAYZ,IARKnW,EAAMK,MAAQ0zD,GAAW/zD,EAAMM,OAASyzD,KAE5C59C,EAAQ49C,EAAUl8E,KAAKkE,IAAKikB,EAAMK,MAAOL,EAAMM,SAM3C6V,EAAQ,IAAyB,IAApB09C,EAA2B,CAI5C,GAAmC,qBAArB7wD,kBAAoChD,aAAiBgD,kBACnC,qBAAtB9C,mBAAqCF,aAAiBE,mBACtC,qBAAhB+C,aAA+BjD,aAAiBiD,YAAgB,CAEzE,IAAMjL,EAAQ67D,EAAkB97D,GAAkBlgB,KAAKmgB,MAEjDqI,EAAQrI,EAAOme,EAAQnW,EAAMK,OAC7BC,EAAStI,EAAOme,EAAQnW,EAAMM,aAEnBh3B,IAAZ4yB,IAAwBA,EAAUy3D,EAActzD,EAAOC,IAI5D,IAAMH,EAAS2zD,EAAiBH,EAActzD,EAAOC,GAAWpE,EAUhE,OARAiE,EAAOE,MAAQA,EACfF,EAAOG,OAASA,EAEAH,EAAOI,WAAY,MAC3BG,UAAWV,EAAO,EAAG,EAAGK,EAAOC,GAEvCjU,QAAQM,KAAM,uDAAyDqT,EAAMK,MAAQ,IAAML,EAAMM,OAAS,SAAWD,EAAQ,IAAMC,EAAS,MAErIH,EAUP,MANK,SAAUH,GAEd3T,QAAQM,KAAM,yDAA2DqT,EAAMK,MAAQ,IAAML,EAAMM,OAAS,MAItGN,EAMT,OAAOA,EAIR,SAASg0D,EAAgBh0D,GAExB,OAAOvI,GAAcuI,EAAMK,QAAW5I,GAAcuI,EAAMM,QAa3D,SAAS2zD,EAA6BjvD,EAASkvD,GAE9C,OAAOlvD,EAAQpD,iBAAmBsyD,GACjClvD,EAAQ5D,YAAcnN,GAAiB+Q,EAAQ5D,YAAchN,EAI/D,SAAS+/D,EAAgB/uF,EAAQ4/B,EAAS3E,EAAOC,GAEhDizD,EAAIY,eAAgB/uF,GAEM0rB,EAAWhpB,IAAKk9B,GAExBovD,cAAgBv8E,KAAKw8E,KAAMx8E,KAAKkE,IAAKskB,EAAOC,IAI/D,SAASg0D,EAAmBC,EAAoBC,EAAUC,GAEzD,IAAkB,IAAb36B,EAAqB,OAAO06B,EAEjC,GAA4B,OAAvBD,EAA8B,CAElC,QAAmCjrF,IAA9BiqF,EAAKgB,GAAqC,OAAOhB,EAAKgB,GAE3DloE,QAAQM,KAAM,2EAA8E4nE,EAAqB,KAIlH,IAAI7yD,EAAiB8yD,EAiCrB,OA/BkB,OAAbA,IAEY,OAAXC,IAAkB/yD,EAAiB,OACxB,OAAX+yD,IAAkB/yD,EAAiB,OACxB,OAAX+yD,IAAkB/yD,EAAiB,QAIvB,OAAb8yD,IAEY,OAAXC,IAAkB/yD,EAAiB,OACxB,OAAX+yD,IAAkB/yD,EAAiB,OACxB,OAAX+yD,IAAkB/yD,EAAiB,QAIvB,OAAb8yD,IAEY,OAAXC,IAAkB/yD,EAAiB,OACxB,OAAX+yD,IAAkB/yD,EAAiB,OACxB,OAAX+yD,IAAkB/yD,EAAiB,QAIjB,QAAnBA,GAA+C,QAAnBA,GACb,QAAnBA,GAA+C,QAAnBA,GAE5B6xB,EAAWzrD,IAAK,0BAIV45B,EAMR,SAASgzD,EAAgBrqF,GAExB,OAAKA,IAAM4pB,GAAiB5pB,IAAM6pB,GAA8B7pB,IAAM8pB,EAE9D,KAID,KAMR,SAAS88C,EAAkB94D,GAE1B,IAAM6sB,EAAU7sB,EAAM/S,OAEtB4/B,EAAQ1rB,oBAAqB,UAAW23D,GA4BzC,SAA4BjsC,GAE3B,IAAM2vD,EAAoB7jE,EAAWhpB,IAAKk9B,GAE1C,QAAuC17B,IAAlCqrF,EAAkBC,YAA4B,OAEnDrB,EAAIsB,cAAeF,EAAkBG,gBAErChkE,EAAWgqB,OAAQ9V,GAlCnB+vD,CAAmB/vD,GAEdA,EAAQgwD,gBAEZxB,EAAer5B,OAAQn1B,GAIxBp8B,EAAK6oE,OAAOpvC,WAIb,SAAS4yD,EAAuB98E,GAE/B,IAAMu9C,EAAev9C,EAAM/S,OAE3BswD,EAAap8C,oBAAqB,UAAW27E,GAsB9C,SAAiCv/B,GAEhC,IAAM1wB,EAAU0wB,EAAa1wB,QAEvBkwD,EAAyBpkE,EAAWhpB,IAAK4tD,GACzCi/B,EAAoB7jE,EAAWhpB,IAAKk9B,GAE1C,IAAO0wB,EAAe,YAEoBpsD,IAArCqrF,EAAkBG,gBAEtBvB,EAAIsB,cAAeF,EAAkBG,gBAIjCp/B,EAAavwB,cAEjBuwB,EAAavwB,aAAaC,UAI3B,GAAKswB,EAAaC,wBAEjB,IAAM,IAAIrwD,EAAI,EAAGA,EAAI,EAAGA,IAEvBiuF,EAAI4B,kBAAmBD,EAAuBE,mBAAoB9vF,IAC7D4vF,EAAuBG,oBAAqB9B,EAAI+B,mBAAoBJ,EAAuBG,mBAAoB/vF,SAMrHiuF,EAAI4B,kBAAmBD,EAAuBE,oBACzCF,EAAuBG,oBAAqB9B,EAAI+B,mBAAoBJ,EAAuBG,oBAC3FH,EAAuBK,gCAAiChC,EAAI4B,kBAAmBD,EAAuBK,gCACtGL,EAAuBM,0BAA2BjC,EAAI+B,mBAAoBJ,EAAuBM,0BACjGN,EAAuBO,0BAA2BlC,EAAI+B,mBAAoBJ,EAAuBO,0BAIvG3kE,EAAWgqB,OAAQ9V,GACnBlU,EAAWgqB,OAAQ4a,GA7DnBggC,CAAwBhgC,GAExB9sD,EAAK6oE,OAAOpvC,WAiEb,IAAIszD,EAAe,EA0BnB,SAASC,EAAc5wD,EAAS6wD,GAE/B,IAAMlB,EAAoB7jE,EAAWhpB,IAAKk9B,GAI1C,GAFKA,EAAQgwD,gBAq5Bd,SAA6BhwD,GAE5B,IAAMq0B,EAAQzwD,EAAK2D,OAAO8sD,MAIrBm6B,EAAe1rF,IAAKk9B,KAAcq0B,IAEtCm6B,EAAe7xE,IAAKqjB,EAASq0B,GAC7Br0B,EAAQhV,UA95BqB8lE,CAAoB9wD,GAE7CA,EAAQhD,QAAU,GAAK2yD,EAAkBoB,YAAc/wD,EAAQhD,QAAU,CAE7E,IAAMhC,EAAQgF,EAAQhF,MAEtB,QAAe12B,IAAV02B,EAEJ3T,QAAQM,KAAM,6EAER,KAAwB,IAAnBqT,EAAMg2D,SAOjB,YADAC,EAAetB,EAAmB3vD,EAAS6wD,GAJ3CxpE,QAAQM,KAAM,2EAWhBjgB,EAAM4lF,cAAe,MAAQuD,GAC7BnpF,EAAM2kF,YAAa,KAAMsD,EAAkBG,gBAoC5C,SAASoB,EAAgBlxD,EAAS6wD,GAEjC,IAAMlB,EAAoB7jE,EAAWhpB,IAAKk9B,GAErCA,EAAQhD,QAAU,GAAK2yD,EAAkBoB,YAAc/wD,EAAQhD,QA+TrE,SAA4B2yD,EAAmB3vD,EAAS6wD,GAEvD,GAA8B,IAAzB7wD,EAAQhF,MAAMz6B,OAAe,OAElC4wF,EAAaxB,EAAmB3vD,GAEhCt4B,EAAM4lF,cAAe,MAAQuD,GAC7BnpF,EAAM2kF,YAAa,MAAOsD,EAAkBG,gBAE5CvB,EAAI6C,YAAa,MAAOpxD,EAAQlD,OAChCyxD,EAAI6C,YAAa,MAAOpxD,EAAQnD,kBAChC0xD,EAAI6C,YAAa,KAAMpxD,EAAQjD,iBAC/BwxD,EAAI6C,YAAa,MAAO,GAOxB,IALA,IAAMC,EAAiBrxD,IAAaA,EAAQsxD,qBAAuBtxD,EAAQhF,MAAO,GAAIs2D,qBAChF3zD,EAAkBqC,EAAQhF,MAAO,IAAOgF,EAAQhF,MAAO,GAAI2C,cAE3D4zD,EAAY,GAERjxF,EAAI,EAAGA,EAAI,EAAGA,IAQtBixF,EAAWjxF,GANL+wF,GAAkB1zD,EAMPA,EAAgBqC,EAAQhF,MAAO16B,GAAI06B,MAAQgF,EAAQhF,MAAO16B,GAJ1DsuF,EAAa5uD,EAAQhF,MAAO16B,IAAK,GAAO,EAAMopE,GAUjE,IAQIjtC,EAREzB,EAAQu2D,EAAW,GACxBrC,EAAeF,EAAgBh0D,IAAW85B,EAC1C06B,EAAW5tE,EAAM4vE,QAASxxD,EAAQ3D,QAClCozD,EAAS7tE,EAAM4vE,QAASxxD,EAAQhY,MAChCypE,EAAmBnC,EAAmBtvD,EAAQtD,eAAgB8yD,EAAUC,GAMzE,GAJAiC,EAAsB,MAAO1xD,EAASkvD,GAIjCmC,EAAe,CAEnB,IAAM,IAAI/wF,EAAI,EAAGA,EAAI,EAAGA,IAAO,CAE9Bm8B,EAAU80D,EAAWjxF,GAAIm8B,QAEzB,IAAM,IAAIvb,EAAI,EAAGA,EAAIub,EAAQl8B,OAAQ2gB,IAAO,CAE3C,IAAMywE,EAASl1D,EAASvb,GAEnB8e,EAAQ3D,SAAWvM,IAAckQ,EAAQ3D,SAAWxM,GAEtC,OAAb2/D,EAEJ9nF,EAAM0mF,qBAAsB,MAAQ9tF,EAAG4gB,EAAGuwE,EAAkBE,EAAOt2D,MAAOs2D,EAAOr2D,OAAQ,EAAGq2D,EAAOjxE,MAInG2G,QAAQM,KAAM,mGAMfjgB,EAAM6kF,WAAY,MAAQjsF,EAAG4gB,EAAGuwE,EAAkBE,EAAOt2D,MAAOs2D,EAAOr2D,OAAQ,EAAGk0D,EAAUC,EAAQkC,EAAOjxE,OAQ9GivE,EAAkBP,cAAgB3yD,EAAQl8B,OAAS,MAE7C,CAENk8B,EAAUuD,EAAQvD,QAElB,IAAM,IAAIn8B,EAAI,EAAGA,EAAI,EAAGA,IAEvB,GAAKq9B,EAAgB,CAEpBj2B,EAAM6kF,WAAY,MAAQjsF,EAAG,EAAGmxF,EAAkBF,EAAWjxF,GAAI+6B,MAAOk2D,EAAWjxF,GAAIg7B,OAAQ,EAAGk0D,EAAUC,EAAQ8B,EAAWjxF,GAAIogB,MAEnI,IAAM,IAAIQ,EAAI,EAAGA,EAAIub,EAAQl8B,OAAQ2gB,IAAO,CAE3C,IACM0wE,EADSn1D,EAASvb,GACG8Z,MAAO16B,GAAI06B,MAEtCtzB,EAAM6kF,WAAY,MAAQjsF,EAAG4gB,EAAI,EAAGuwE,EAAkBG,EAAYv2D,MAAOu2D,EAAYt2D,OAAQ,EAAGk0D,EAAUC,EAAQmC,EAAYlxE,WAIzH,CAENhZ,EAAM6kF,WAAY,MAAQjsF,EAAG,EAAGmxF,EAAkBjC,EAAUC,EAAQ8B,EAAWjxF,IAE/E,IAAM,IAAI4gB,EAAI,EAAGA,EAAIub,EAAQl8B,OAAQ2gB,IAAO,CAE3C,IAAMywE,EAASl1D,EAASvb,GAExBxZ,EAAM6kF,WAAY,MAAQjsF,EAAG4gB,EAAI,EAAGuwE,EAAkBjC,EAAUC,EAAQkC,EAAO32D,MAAO16B,KAQzFqvF,EAAkBP,cAAgB3yD,EAAQl8B,OAItC0uF,EAA6BjvD,EAASkvD,IAG1CC,EAAgB,MAAOnvD,EAAShF,EAAMK,MAAOL,EAAMM,QAIpDq0D,EAAkBoB,UAAY/wD,EAAQhD,QAEjCgD,EAAQ1hB,UAAW0hB,EAAQ1hB,SAAU0hB,GA1bzC6xD,CAAmBlC,EAAmB3vD,EAAS6wD,IAKhDnpF,EAAM4lF,cAAe,MAAQuD,GAC7BnpF,EAAM2kF,YAAa,MAAOsD,EAAkBG,iBAI7C,IAAMgC,GAAY,mBACfhjE,EAAkB,OADH,cAEfC,EAAuB,OAFR,cAGfC,EAA0B,OAHX,GAMZ+iE,GAAU,mBACb9iE,EAAiB,MADJ,cAEbC,EAA8B,MAFjB,cAGbC,EAA6B,MAHhB,cAKbC,EAAgB,MALH,cAMbC,EAA6B,MANhB,cAObC,EAA4B,MAPf,GAUhB,SAASoiE,EAAsBM,EAAahyD,EAASkvD,GA4CpD,GA1CKA,GAEJX,EAAIjC,cAAe0F,EAAa,MAAOF,EAAc9xD,EAAQ/D,QAC7DsyD,EAAIjC,cAAe0F,EAAa,MAAOF,EAAc9xD,EAAQ9D,QAExC,QAAhB81D,GAAyC,QAAhBA,GAE7BzD,EAAIjC,cAAe0F,EAAa,MAAOF,EAAc9xD,EAAQivC,QAI9Dsf,EAAIjC,cAAe0F,EAAa,MAAOD,EAAY/xD,EAAQ7D,YAC3DoyD,EAAIjC,cAAe0F,EAAa,MAAOD,EAAY/xD,EAAQ5D,cAI3DmyD,EAAIjC,cAAe0F,EAAa,MAAO,OACvCzD,EAAIjC,cAAe0F,EAAa,MAAO,OAElB,QAAhBA,GAAyC,QAAhBA,GAE7BzD,EAAIjC,cAAe0F,EAAa,MAAO,OAInChyD,EAAQ/D,QAAUlN,GAAuBiR,EAAQ9D,QAAUnN,GAE/D1H,QAAQM,KAAM,iIAIf4mE,EAAIjC,cAAe0F,EAAa,MAAOtC,EAAgB1vD,EAAQ7D,YAC/DoyD,EAAIjC,cAAe0F,EAAa,MAAOtC,EAAgB1vD,EAAQ5D,YAE1D4D,EAAQ5D,YAAcnN,GAAiB+Q,EAAQ5D,YAAchN,GAEjE/H,QAAQM,KAAM,qIAM4C,IAAvD4mC,EAAWhkC,IAAK,kCAA8C,CAElE,IAAMu6C,EAAYvW,EAAWzrD,IAAK,kCAElC,GAAKk9B,EAAQhY,OAAS0H,KAA8D,IAAjD6+B,EAAWhkC,IAAK,4BAAyC,OAC5F,IAAkB,IAAbuqC,GAAwB90B,EAAQhY,OAAS2H,KAAuE,IAAtD4+B,EAAWhkC,IAAK,iCAAgD,QAE1HyV,EAAQ1D,WAAa,GAAKxQ,EAAWhpB,IAAKk9B,GAAUiyD,uBAExD1D,EAAI2D,cAAeF,EAAaltB,EAAUqtB,2BAA4Bt/E,KAAKiE,IAAKkpB,EAAQ1D,WAAYu4B,EAAaoV,qBACjHn+C,EAAWhpB,IAAKk9B,GAAUiyD,oBAAsBjyD,EAAQ1D,aAQ3D,SAAS60D,EAAaxB,EAAmB3vD,QAED17B,IAAlCqrF,EAAkBC,cAEtBD,EAAkBC,aAAc,EAEhC5vD,EAAQ3rB,iBAAkB,UAAW43D,GAErC0jB,EAAkBG,eAAiBvB,EAAInC,gBAEvCxoF,EAAK6oE,OAAOpvC,YAMd,SAAS4zD,EAAetB,EAAmB3vD,EAAS6wD,GAEnD,IAAImB,EAAc,KAEbhyD,EAAQkvC,uBAAuB8iB,EAAc,OAC7ChyD,EAAQovC,kBAAkB4iB,EAAc,OAE7Cb,EAAaxB,EAAmB3vD,GAEhCt4B,EAAM4lF,cAAe,MAAQuD,GAC7BnpF,EAAM2kF,YAAa2F,EAAarC,EAAkBG,gBAElDvB,EAAI6C,YAAa,MAAOpxD,EAAQlD,OAChCyxD,EAAI6C,YAAa,MAAOpxD,EAAQnD,kBAChC0xD,EAAI6C,YAAa,KAAMpxD,EAAQjD,iBAC/BwxD,EAAI6C,YAAa,MAAO,GAExB,IAWIO,EAXE9C,EA/YP,SAAiC7uD,GAEhC,OAAK80B,IAEI90B,EAAQ/D,QAAUlN,GAAuBiR,EAAQ9D,QAAUnN,GACjEiR,EAAQ5D,YAAcnN,GAAiB+Q,EAAQ5D,YAAchN,GA0YxCgjE,CAAwBpyD,KAAiD,IAApCgvD,EAAgBhvD,EAAQhF,OAC/EA,EAAQ4zD,EAAa5uD,EAAQhF,MAAO6zD,GAAiB,EAAOplB,GAE5DylB,EAAeF,EAAgBh0D,IAAW85B,EAC/C06B,EAAW5tE,EAAM4vE,QAASxxD,EAAQ3D,QAE/BozD,EAAS7tE,EAAM4vE,QAASxxD,EAAQhY,MACnCypE,EAAmBnC,EAAmBtvD,EAAQtD,eAAgB8yD,EAAUC,GAEzEiC,EAAsBM,EAAahyD,EAASkvD,GAG5C,IAAMzyD,EAAUuD,EAAQvD,QAExB,GAAKuD,EAAQqyD,eAIZZ,EAAmB,KAEd38B,EAIH28B,EAFIzxD,EAAQhY,OAAS0H,GAEF,MAERsQ,EAAQhY,OAASyH,EAET,MAERuQ,EAAQhY,OAAS4H,GAET,MAIA,MAMfoQ,EAAQhY,OAAS0H,IAErBrI,QAAQxjB,MAAO,gEAQZm8B,EAAQ3D,SAAWtM,IAAoC,OAArB0hE,GAKjCzxD,EAAQhY,OAASwH,GAAqBwQ,EAAQhY,OAASyH,IAE3DpI,QAAQM,KAAM,+FAEdqY,EAAQhY,KAAOwH,EACfigE,EAAS7tE,EAAM4vE,QAASxxD,EAAQhY,OAM7BgY,EAAQ3D,SAAWrM,IAA2C,OAArByhE,IAI7CA,EAAmB,MAKdzxD,EAAQhY,OAAS4H,KAErBvI,QAAQM,KAAM,oFAEdqY,EAAQhY,KAAO4H,GACf6/D,EAAS7tE,EAAM4vE,QAASxxD,EAAQhY,QAQlCtgB,EAAM6kF,WAAY,KAAM,EAAGkF,EAAkBz2D,EAAMK,MAAOL,EAAMM,OAAQ,EAAGk0D,EAAUC,EAAQ,WAEvF,GAAKzvD,EAAQrC,cAMnB,GAAKlB,EAAQl8B,OAAS,GAAK2uF,EAAe,CAEzC,IAAM,IAAI5uF,EAAI,EAAGonC,EAAKjL,EAAQl8B,OAAQD,EAAIonC,EAAIpnC,IAE7CqxF,EAASl1D,EAASn8B,GAClBoH,EAAM6kF,WAAY,KAAMjsF,EAAGmxF,EAAkBE,EAAOt2D,MAAOs2D,EAAOr2D,OAAQ,EAAGk0D,EAAUC,EAAQkC,EAAOjxE,MAIvGsf,EAAQpD,iBAAkB,EAC1B+yD,EAAkBP,cAAgB3yD,EAAQl8B,OAAS,OAInDmH,EAAM6kF,WAAY,KAAM,EAAGkF,EAAkBz2D,EAAMK,MAAOL,EAAMM,OAAQ,EAAGk0D,EAAUC,EAAQz0D,EAAMta,MACnGivE,EAAkBP,cAAgB,OAI7B,GAAKpvD,EAAQsxD,oBAAsB,CAEzC,IAAM,IAAIhxF,EAAI,EAAGonC,EAAKjL,EAAQl8B,OAAQD,EAAIonC,EAAIpnC,IAE7CqxF,EAASl1D,EAASn8B,GAEb0/B,EAAQ3D,SAAWvM,IAAckQ,EAAQ3D,SAAWxM,GAEtC,OAAb2/D,EAEJ9nF,EAAM0mF,qBAAsB,KAAM9tF,EAAGmxF,EAAkBE,EAAOt2D,MAAOs2D,EAAOr2D,OAAQ,EAAGq2D,EAAOjxE,MAI9F2G,QAAQM,KAAM,kGAMfjgB,EAAM6kF,WAAY,KAAMjsF,EAAGmxF,EAAkBE,EAAOt2D,MAAOs2D,EAAOr2D,OAAQ,EAAGk0D,EAAUC,EAAQkC,EAAOjxE,MAMxGivE,EAAkBP,cAAgB3yD,EAAQl8B,OAAS,OAE7C,GAAKy/B,EAAQkvC,qBAEnBxnE,EAAM2mF,WAAY,MAAO,EAAGoD,EAAkBz2D,EAAMK,MAAOL,EAAMM,OAAQN,EAAM4E,MAAO,EAAG4vD,EAAUC,EAAQz0D,EAAMta,MACjHivE,EAAkBP,cAAgB,OAE5B,GAAKpvD,EAAQovC,gBAEnB1nE,EAAM2mF,WAAY,MAAO,EAAGoD,EAAkBz2D,EAAMK,MAAOL,EAAMM,OAAQN,EAAM4E,MAAO,EAAG4vD,EAAUC,EAAQz0D,EAAMta,MACjHivE,EAAkBP,cAAgB,OAUlC,GAAK3yD,EAAQl8B,OAAS,GAAK2uF,EAAe,CAEzC,IAAM,IAAI5uF,EAAI,EAAGonC,EAAKjL,EAAQl8B,OAAQD,EAAIonC,EAAIpnC,IAE7CqxF,EAASl1D,EAASn8B,GAClBoH,EAAM6kF,WAAY,KAAMjsF,EAAGmxF,EAAkBjC,EAAUC,EAAQkC,GAIhE3xD,EAAQpD,iBAAkB,EAC1B+yD,EAAkBP,cAAgB3yD,EAAQl8B,OAAS,OAInDmH,EAAM6kF,WAAY,KAAM,EAAGkF,EAAkBjC,EAAUC,EAAQz0D,GAC/D20D,EAAkBP,cAAgB,EAM/BH,EAA6BjvD,EAASkvD,IAE1CC,EAAgB6C,EAAahyD,EAAShF,EAAMK,MAAOL,EAAMM,QAI1Dq0D,EAAkBoB,UAAY/wD,EAAQhD,QAEjCgD,EAAQ1hB,UAAW0hB,EAAQ1hB,SAAU0hB,GAwI3C,SAASsyD,EAAyB7E,EAAa/8B,EAAc6hC,EAAYC,GAExE,IAAMxyD,EAAU0wB,EAAa1wB,QAEvBwvD,EAAW5tE,EAAM4vE,QAASxxD,EAAQ3D,QAClCozD,EAAS7tE,EAAM4vE,QAASxxD,EAAQhY,MAChCypE,EAAmBnC,EAAmBtvD,EAAQtD,eAAgB8yD,EAAUC,GAEvD,QAAlB+C,GAA6C,QAAlBA,EAE/B9qF,EAAM2mF,WAAYmE,EAAe,EAAGf,EAAkB/gC,EAAar1B,MAAOq1B,EAAap1B,OAAQo1B,EAAa9wB,MAAO,EAAG4vD,EAAUC,EAAQ,MAIxI/nF,EAAM6kF,WAAYiG,EAAe,EAAGf,EAAkB/gC,EAAar1B,MAAOq1B,EAAap1B,OAAQ,EAAGk0D,EAAUC,EAAQ,MAIrH/nF,EAAM8lF,gBAAiB,MAAOC,GAC9Bc,EAAIkE,qBAAsB,MAAOF,EAAYC,EAAe1mE,EAAWhpB,IAAKk9B,GAAU8vD,eAAgB,GACtGpoF,EAAM8lF,gBAAiB,MAAO,MAK/B,SAASkF,EAA0BC,EAAcjiC,EAAckiC,GAI9D,GAFArE,EAAIsE,iBAAkB,MAAOF,GAExBjiC,EAAazwB,cAAiBywB,EAAaxwB,cAAgB,CAE/D,IAAIuxD,EAAmB,MAEvB,GAAKmB,EAAgB,CAEpB,IAAMzyD,EAAeuwB,EAAavwB,aAE7BA,GAAgBA,EAAakyD,iBAE5BlyD,EAAanY,OAAS0H,GAE1B+hE,EAAmB,MAERtxD,EAAanY,OAASyH,IAEjCgiE,EAAmB,QAMrB,IAAMqB,EAAUC,EAAwBriC,GAExC69B,EAAIyE,+BAAgC,MAAOF,EAASrB,EAAkB/gC,EAAar1B,MAAOq1B,EAAap1B,aAIvGizD,EAAI0E,oBAAqB,MAAOxB,EAAkB/gC,EAAar1B,MAAOq1B,EAAap1B,QAIpFizD,EAAI2E,wBAAyB,MAAO,MAAO,MAAOP,QAE5C,GAAKjiC,EAAazwB,aAAeywB,EAAaxwB,cAAgB,CAEpE,GAAK0yD,EAAgB,CAEpB,IAAME,EAAUC,EAAwBriC,GAExC69B,EAAIyE,+BAAgC,MAAOF,EAAS,MAAOpiC,EAAar1B,MAAOq1B,EAAap1B,aAI5FizD,EAAI0E,oBAAqB,MAAO,MAAOviC,EAAar1B,MAAOq1B,EAAap1B,QAKzEizD,EAAI2E,wBAAyB,MAAO,MAAO,MAAOP,OAE5C,CAEN,IAAM3yD,EAAU0wB,EAAa1wB,QAEvBwvD,EAAW5tE,EAAM4vE,QAASxxD,EAAQ3D,QAClCozD,EAAS7tE,EAAM4vE,QAASxxD,EAAQhY,MAChCypE,EAAmBnC,EAAmBtvD,EAAQtD,eAAgB8yD,EAAUC,GAE9E,GAAKmD,EAAgB,CAEpB,IAAME,EAAUC,EAAwBriC,GAExC69B,EAAIyE,+BAAgC,MAAOF,EAASrB,EAAkB/gC,EAAar1B,MAAOq1B,EAAap1B,aAIvGizD,EAAI0E,oBAAqB,MAAOxB,EAAkB/gC,EAAar1B,MAAOq1B,EAAap1B,QAMrFizD,EAAIsE,iBAAkB,MAAO,MAkD9B,SAASM,EAAwBziC,GAEhC,IAAMw/B,EAAyBpkE,EAAWhpB,IAAK4tD,GAEzC0iC,GAAoD,IAAzC1iC,EAAaC,wBAE9B,GAAKD,EAAavwB,aAAe,CAEhC,GAAKizD,EAAS,MAAM,IAAI7lF,MAAO,6DArDjC,SAA4BkgF,EAAa/8B,GAGxC,GADiBA,GAAgBA,EAAaC,wBAChC,MAAM,IAAIpjD,MAAO,2DAI/B,GAFA7F,EAAM8lF,gBAAiB,MAAOC,IAErB/8B,EAAavwB,eAAgBuwB,EAAavwB,aAAakyD,eAE/D,MAAM,IAAI9kF,MAAO,uEAKXue,EAAWhpB,IAAK4tD,EAAavwB,cAAe2vD,gBACjDp/B,EAAavwB,aAAanF,MAAMK,QAAUq1B,EAAar1B,OACvDq1B,EAAavwB,aAAanF,MAAMM,SAAWo1B,EAAap1B,SAEzDo1B,EAAavwB,aAAanF,MAAMK,MAAQq1B,EAAar1B,MACrDq1B,EAAavwB,aAAanF,MAAMM,OAASo1B,EAAap1B,OACtDo1B,EAAavwB,aAAaimB,aAAc,GAIzCwqC,EAAclgC,EAAavwB,aAAc,GAEzC,IAAMkzD,EAAoBvnE,EAAWhpB,IAAK4tD,EAAavwB,cAAe2vD,eAEtE,GAAKp/B,EAAavwB,aAAa9D,SAAWtM,GAEzCw+D,EAAIkE,qBAAsB,MAAO,MAAO,KAAMY,EAAmB,OAE3D,IAAK3iC,EAAavwB,aAAa9D,SAAWrM,GAMhD,MAAM,IAAIziB,MAAO,+BAJjBghF,EAAIkE,qBAAsB,MAAO,MAAO,KAAMY,EAAmB,IAqBjEC,CAAmBpD,EAAuBE,mBAAoB1/B,QAI9D,GAAK0iC,EAAS,CAEblD,EAAuBG,mBAAqB,GAE5C,IAAM,IAAI/vF,EAAI,EAAGA,EAAI,EAAGA,IAEvBoH,EAAM8lF,gBAAiB,MAAO0C,EAAuBE,mBAAoB9vF,IACzE4vF,EAAuBG,mBAAoB/vF,GAAMiuF,EAAIgF,qBACrDb,EAA0BxC,EAAuBG,mBAAoB/vF,GAAKowD,GAAc,QAMzFhpD,EAAM8lF,gBAAiB,MAAO0C,EAAuBE,oBACrDF,EAAuBG,mBAAqB9B,EAAIgF,qBAChDb,EAA0BxC,EAAuBG,mBAAoB3/B,GAAc,GAMrFhpD,EAAM8lF,gBAAiB,MAAO,MA+M/B,SAASuF,EAAwBriC,GAEhC,OAASoE,GAAYpE,EAAa8iC,+BACjC3gF,KAAKiE,IAAKszD,EAAY1Z,EAAaoiC,SAAY,EAqBjD,IAAIW,GAAkB,EAClBC,GAAoB,EA2CxB3xF,KAAKsuE,oBAx+BL,WAEC,IAAMsjB,EAAchD,EAUpB,OARKgD,GAAepqB,GAEnBliD,QAAQM,KAAM,sCAAwCgsE,EAAc,+CAAiDpqB,GAItHonB,GAAgB,EAETgD,GA69BR5xF,KAAK6xF,kBA/+BL,WAECjD,EAAe,GA++BhB5uF,KAAK6uF,aAAeA,EACpB7uF,KAAKixE,kBA17BL,SAA4BhzC,EAAS6wD,GAEpC,IAAMlB,EAAoB7jE,EAAWhpB,IAAKk9B,GAErCA,EAAQhD,QAAU,GAAK2yD,EAAkBoB,YAAc/wD,EAAQhD,QAEnEi0D,EAAetB,EAAmB3vD,EAAS6wD,IAK5CnpF,EAAM4lF,cAAe,MAAQuD,GAC7BnpF,EAAM2kF,YAAa,MAAOsD,EAAkBG,kBA+6B7C/tF,KAAK6wE,aA36BL,SAAuB5yC,EAAS6wD,GAE/B,IAAMlB,EAAoB7jE,EAAWhpB,IAAKk9B,GAErCA,EAAQhD,QAAU,GAAK2yD,EAAkBoB,YAAc/wD,EAAQhD,QAEnEi0D,EAAetB,EAAmB3vD,EAAS6wD,IAK5CnpF,EAAM4lF,cAAe,MAAQuD,GAC7BnpF,EAAM2kF,YAAa,MAAOsD,EAAkBG,kBAg6B7C/tF,KAAKmvF,eAAiBA,EACtBnvF,KAAK8xF,kBArRL,SAA4BnjC,GAE3B,IAAM1wB,EAAU0wB,EAAa1wB,QAEvBkwD,EAAyBpkE,EAAWhpB,IAAK4tD,GACzCi/B,EAAoB7jE,EAAWhpB,IAAKk9B,GAE1C0wB,EAAar8C,iBAAkB,UAAW47E,GAE1CN,EAAkBG,eAAiBvB,EAAInC,gBACvCuD,EAAkBoB,UAAY/wD,EAAQhD,QAEtCp5B,EAAK6oE,OAAOpvC,WAEZ,IAAM+1D,GAAoD,IAAzC1iC,EAAaC,wBACxBiiC,GAAkE,IAAhDliC,EAAa8iC,+BAC/BM,EAAmB9zD,EAAQovC,iBAAmBpvC,EAAQkvC,qBACtDggB,EAAeF,EAAgBt+B,IAAkBoE,EAcvD,IAVKA,GAAY90B,EAAQ3D,SAAWxM,IAAemQ,EAAQhY,OAAS0H,IAAasQ,EAAQhY,OAAS2H,KAEjGqQ,EAAQ3D,OAASvM,GAEjBzI,QAAQM,KAAM,4GAMVyrE,EAAS,CAEblD,EAAuBE,mBAAqB,GAE5C,IAAM,IAAI9vF,EAAI,EAAGA,EAAI,EAAGA,IAEvB4vF,EAAuBE,mBAAoB9vF,GAAMiuF,EAAIwF,yBAQtD,GAFA7D,EAAuBE,mBAAqB7B,EAAIwF,oBAE3CnB,EAEJ,GAAK99B,EAAW,CAEfo7B,EAAuBK,+BAAiChC,EAAIwF,oBAC5D7D,EAAuBM,yBAA2BjC,EAAIgF,qBAEtDhF,EAAIsE,iBAAkB,MAAO3C,EAAuBM,0BAEpD,IAAMhB,EAAW5tE,EAAM4vE,QAASxxD,EAAQ3D,QAClCozD,EAAS7tE,EAAM4vE,QAASxxD,EAAQhY,MAChCypE,EAAmBnC,EAAmBtvD,EAAQtD,eAAgB8yD,EAAUC,GACxEqD,EAAUC,EAAwBriC,GACxC69B,EAAIyE,+BAAgC,MAAOF,EAASrB,EAAkB/gC,EAAar1B,MAAOq1B,EAAap1B,QAEvG5zB,EAAM8lF,gBAAiB,MAAO0C,EAAuBK,gCACrDhC,EAAI2E,wBAAyB,MAAO,MAAO,MAAOhD,EAAuBM,0BACzEjC,EAAIsE,iBAAkB,MAAO,MAExBniC,EAAazwB,cAEjBiwD,EAAuBO,yBAA2BlC,EAAIgF,qBACtDb,EAA0BxC,EAAuBO,yBAA0B//B,GAAc,IAI1FhpD,EAAM8lF,gBAAiB,MAAO,WAK9BnmE,QAAQM,KAAM,mFAUjB,GAAKyrE,EAAS,CAEb1rF,EAAM2kF,YAAa,MAAOsD,EAAkBG,gBAC5C4B,EAAsB,MAAO1xD,EAASkvD,GAEtC,IAAM,IAAI5uF,EAAI,EAAGA,EAAI,EAAGA,IAEvBgyF,EAAyBpC,EAAuBE,mBAAoB9vF,GAAKowD,EAAc,MAAO,MAAQpwD,GAIlG2uF,EAA6BjvD,EAASkvD,IAE1CC,EAAgB,MAAOnvD,EAAS0wB,EAAar1B,MAAOq1B,EAAap1B,QAIlE5zB,EAAM2kF,YAAa,MAAO,UAEpB,CAEN,IAAI2H,EAAgB,KAEpB,GAAKF,EAIJ,GAAKh/B,EAGJk/B,EADoBh0D,EAAQovC,gBACE,MAAQ,WAItC/nD,QAAQM,KAAM,gFAMhBjgB,EAAM2kF,YAAa2H,EAAerE,EAAkBG,gBACpD4B,EAAsBsC,EAAeh0D,EAASkvD,GAC9CoD,EAAyBpC,EAAuBE,mBAAoB1/B,EAAc,MAAOsjC,GAEpF/E,EAA6BjvD,EAASkvD,IAE1CC,EAAgB,KAAMnvD,EAAS0wB,EAAar1B,MAAOq1B,EAAap1B,QAIjE5zB,EAAM2kF,YAAa,KAAM,MAMrB37B,EAAazwB,aAEjBkzD,EAAwBziC,IAsI1B3uD,KAAKkyF,yBAhIL,SAAmCvjC,GAElC,IAAM1wB,EAAU0wB,EAAa1wB,QAI7B,GAAKivD,EAA6BjvD,EAFbgvD,EAAgBt+B,IAAkBoE,GAEK,CAE3D,IAAM10D,EAASswD,EAAaC,wBAA0B,MAAQ,KACxDs9B,EAAeniE,EAAWhpB,IAAKk9B,GAAU8vD,eAE/CpoF,EAAM2kF,YAAajsF,EAAQ6tF,GAC3BkB,EAAgB/uF,EAAQ4/B,EAAS0wB,EAAar1B,MAAOq1B,EAAap1B,QAClE5zB,EAAM2kF,YAAajsF,EAAQ,QAoH7B2B,KAAKmyF,8BA9GL,SAAwCxjC,GAEvC,GAAKA,EAAa8iC,+BAEjB,GAAK1+B,EAAW,CAEf,IAAMz5B,EAAQq1B,EAAar1B,MACrBC,EAASo1B,EAAap1B,OACxB4X,EAAO,MAENwd,EAAazwB,cAAciT,GAAQ,KACnCwd,EAAaxwB,gBAAgBgT,GAAQ,MAE1C,IAAMg9C,EAAyBpkE,EAAWhpB,IAAK4tD,GAE/ChpD,EAAM8lF,gBAAiB,MAAO0C,EAAuBK,gCACrD7oF,EAAM8lF,gBAAiB,MAAO0C,EAAuBE,oBAErD7B,EAAI4F,gBAAiB,EAAG,EAAG94D,EAAOC,EAAQ,EAAG,EAAGD,EAAOC,EAAQ4X,EAAM,MAErExrC,EAAM8lF,gBAAiB,MAAO,MAC9B9lF,EAAM8lF,gBAAiB,MAAO0C,EAAuBK,qCAIrDlpE,QAAQM,KAAM,oFAuFjB5lB,KAAK2wE,iBApDL,SAA2B1yC,EAAS6wD,GAE9B7wD,GAAWA,EAAQM,uBAEE,IAApBmzD,IAEJpsE,QAAQM,KAAM,oHACd8rE,GAAkB,GAInBzzD,EAAUA,EAAQA,SAInB4wD,EAAc5wD,EAAS6wD,IAsCxB9uF,KAAK+wE,mBAlCL,SAA6B9yC,EAAS6wD,GAEhC7wD,GAAWA,EAAQ2wB,2BAEI,IAAtB+iC,IAEJrsE,QAAQM,KAAM,2HACd+rE,GAAoB,GAIrB1zD,EAAUA,EAAQA,SAKnBkxD,EAAgBlxD,EAAS6wD,IAsB3B,SAASuD,GAAYx/B,EAAIrG,EAAYsG,GAEpC,IAAMC,EAAWD,EAAaC,SA2L9B,MAAO,CAAE08B,QAzLT,SAAkBl5E,GAEjB,IAAIwsD,EAEJ,GAAKxsD,IAAMiX,EAAmB,OAAO,KACrC,GA34pB4B,OA24pBvBjX,EAA8B,OAAO,MAC1C,GA34pB4B,OA24pBvBA,EAA8B,OAAO,MAC1C,GA34pB2B,OA24pBtBA,EAA6B,OAAO,MAEzC,GAt5pBe,OAs5pBVA,EAAiB,OAAO,KAC7B,GAt5pBgB,OAs5pBXA,EAAkB,OAAO,KAC9B,GAAKA,IAAMkX,EAAoB,OAAO,KACtC,GAt5pBc,OAs5pBTlX,EAAgB,OAAO,KAC5B,GAAKA,IAAMmX,EAAkB,OAAO,KACpC,GAAKnX,IAAMoX,GAAY,OAAO,KAE9B,GAAKpX,IAAMqX,GAEV,OAAKmlC,EAAkB,KAIJ,QAFnBgQ,EAAYvW,EAAWzrD,IAAK,2BAIpBgiE,EAAUuvB,eAIV,KAMT,GAp6pBkB,OAo6pBb/7E,EAAoB,OAAO,KAChC,GAAKA,IAAMuX,GAAY,OAAO,KAC9B,GAAKvX,IAAMwX,GAAa,OAAO,KAC/B,GAp6pBsB,OAo6pBjBxX,EAAwB,OAAO,KACpC,GAp6pB2B,OAo6pBtBA,EAA6B,OAAO,KACzC,GAAKA,IAAMyX,GAAc,OAAO,KAChC,GAAKzX,IAAM0X,GAAqB,OAAO,MACvC,GAn6pBgB,OAm6pBX1X,EAAkB,OAAO,KAI9B,GAt6pBuB,OAs6pBlBA,EAAyB,OAAO,MACrC,GAt6pBe,OAs6pBVA,EAAiB,OAAO,MAC7B,GAt6pBsB,OAs6pBjBA,EAAwB,OAAO,MACpC,GAt6pBuB,OAs6pBlBA,EAAyB,OAAO,MACrC,GAt6pBwB,OAs6pBnBA,EAA0B,OAAO,MAEtC,GAAKA,IAAM2X,IAr6pBiB,QAq6pBO3X,GAp6pBP,QAq6pB3BA,GAA+BA,IAAM4X,GAAwB,CAI7D,GAAmB,QAFnB40C,EAAYvW,EAAWzrD,IAAK,kCAW3B,OAAO,KAPP,GAAKwV,IAAM2X,GAAuB,OAAO60C,EAAUwvB,6BACnD,GA76pB0B,QA66pBrBh8E,EAA8B,OAAOwsD,EAAUyvB,8BACpD,GA76pB0B,QA66pBrBj8E,EAA8B,OAAOwsD,EAAU0vB,8BACpD,GAAKl8E,IAAM4X,GAAwB,OAAO40C,EAAU2vB,8BAUtD,GAAKn8E,IAAM6X,IAr7pBmB,QAq7pBQ7X,GACrCA,IAAM8X,IAp7pBwB,QAo7pBI9X,EAAiC,CAInE,GAAmB,QAFnBwsD,EAAYvW,EAAWzrD,IAAK,mCAW3B,OAAO,KAPP,GAAKwV,IAAM6X,GAA0B,OAAO20C,EAAU4vB,gCACtD,GA77pB4B,QA67pBvBp8E,EAAgC,OAAOwsD,EAAU6vB,gCACtD,GAAKr8E,IAAM8X,GAA2B,OAAO00C,EAAU8vB,iCACvD,GA77pB6B,QA67pBxBt8E,EAAiC,OAAOwsD,EAAU+vB,iCAUzD,GAt8pBsB,QAs8pBjBv8E,EAIJ,OAAmB,QAFnBwsD,EAAYvW,EAAWzrD,IAAK,kCAIpBgiE,EAAUgwB,0BAIV,KAMT,IAAKx8E,IAAM+X,IAAmB/X,IAAMgY,KAIhB,QAFnBw0C,EAAYvW,EAAWzrD,IAAK,iCAEF,CAEzB,GAAKwV,IAAM+X,GAAkB,OAAOy0C,EAAUiwB,qBAC9C,GAAKz8E,IAAMgY,GAAuB,OAAOw0C,EAAUkwB,0BAMrD,OAh+pB2B,QAg+pBtB18E,GA/9pBsB,QA+9pBQA,GA99pBR,QA89pBsCA,GA79pBtC,QA89pB1BA,GA79pB0B,QA69pBIA,GA59pBJ,QA49pBkCA,GA39pBlC,QA49pB1BA,GA39pB0B,QA29pBIA,GA19pBH,QA09pBiCA,GAz9pBjC,QA09pB3BA,GAz9pB2B,QAy9pBIA,GAx9pBH,QAw9pBkCA,GAv9pBlC,QAw9pB5BA,GAv9pB4B,QAu9pBIA,GAr9pBE,QAs9pBlCA,GAr9pBkC,QAq9pBIA,GAp9pBJ,QAo9pB0CA,GAn9pB1C,QAo9pBlCA,GAn9pBkC,QAm9pBIA,GAl9pBJ,QAk9pB0CA,GAj9pB1C,QAk9pBlCA,GAj9pBkC,QAi9pBIA,GAh9pBH,QAg9pByCA,GA/8pBzC,QAg9pBnCA,GA/8pBmC,QA+8pBIA,GA98pBH,QA88pB0CA,GA78pB1C,QA88pBpCA,GA78pBoC,QA68pBIA,EAIrB,QAFnBwsD,EAAYvW,EAAWzrD,IAAK,kCAMpBwV,EAIA,KAv+pBc,QA6+pBlBA,EAIe,QAFnBwsD,EAAYvW,EAAWzrD,IAAK,iCAMpBwV,EAIA,KAMJA,IAAMsX,GAELklC,EAAkB,MAIJ,QAFnBgQ,EAAYvW,EAAWzrD,IAAK,wBAIpBgiE,EAAUmwB,wBAIV,UAZT,I,IAwBIC,G,kDAEL,aAA0B,MAAbxjE,EAAa,uDAAL,GAAK,4BAEzB,gBAEKyjE,QAAUzjE,EAJU,E,UAFDw9B,IAY1BgmC,GAAYh0F,UAAUk0F,eAAgB,E,IAEhCC,G,kDAEL,aAAc,kCAEb,gBAEKrtE,KAAO,QAJC,E,UAFKksB,IAYpBmhD,GAAMn0F,UAAUo0F,SAAU,EAE1B,IAAMC,GAAa,CAAEvtE,KAAM,QAErBwtE,G,WAEL,aAAc,oBAEbzzF,KAAK0zF,WAAa,KAClB1zF,KAAK2zF,MAAQ,KACb3zF,KAAK4zF,MAAQ,K,gDAId,WAaC,OAXoB,OAAf5zF,KAAK4zF,QAET5zF,KAAK4zF,MAAQ,IAAIN,GACjBtzF,KAAK4zF,MAAMh5D,kBAAmB,EAC9B56B,KAAK4zF,MAAMjhD,SAAU,EAErB3yC,KAAK4zF,MAAMC,OAAS,GACpB7zF,KAAK4zF,MAAME,WAAa,CAAEC,UAAU,IAI9B/zF,KAAK4zF,Q,+BAIb,WAcC,OAZyB,OAApB5zF,KAAK0zF,aAET1zF,KAAK0zF,WAAa,IAAIJ,GACtBtzF,KAAK0zF,WAAW94D,kBAAmB,EACnC56B,KAAK0zF,WAAW/gD,SAAU,EAC1B3yC,KAAK0zF,WAAWM,mBAAoB,EACpCh0F,KAAK0zF,WAAWO,eAAiB,IAAI5xD,GACrCriC,KAAK0zF,WAAWQ,oBAAqB,EACrCl0F,KAAK0zF,WAAWS,gBAAkB,IAAI9xD,IAIhCriC,KAAK0zF,a,0BAIb,WAcC,OAZoB,OAAf1zF,KAAK2zF,QAET3zF,KAAK2zF,MAAQ,IAAIL,GACjBtzF,KAAK2zF,MAAM/4D,kBAAmB,EAC9B56B,KAAK2zF,MAAMhhD,SAAU,EACrB3yC,KAAK2zF,MAAMK,mBAAoB,EAC/Bh0F,KAAK2zF,MAAMM,eAAiB,IAAI5xD,GAChCriC,KAAK2zF,MAAMO,oBAAqB,EAChCl0F,KAAK2zF,MAAMQ,gBAAkB,IAAI9xD,IAI3BriC,KAAK2zF,Q,2BAIb,SAAeviF,GAoBd,OAlByB,OAApBpR,KAAK0zF,YAET1zF,KAAK0zF,WAAW53D,cAAe1qB,GAIZ,OAAfpR,KAAK2zF,OAET3zF,KAAK2zF,MAAM73D,cAAe1qB,GAIP,OAAfpR,KAAK4zF,OAET5zF,KAAK4zF,MAAM93D,cAAe1qB,GAIpBpR,O,wBAIR,SAAYo0F,GAsBX,OApBAp0F,KAAK87B,cAAe,CAAE7V,KAAM,eAAgBtH,KAAMy1E,IAEzB,OAApBp0F,KAAK0zF,aAET1zF,KAAK0zF,WAAW/gD,SAAU,GAIP,OAAf3yC,KAAK2zF,QAET3zF,KAAK2zF,MAAMhhD,SAAU,GAIF,OAAf3yC,KAAK4zF,QAET5zF,KAAK4zF,MAAMjhD,SAAU,GAIf3yC,O,oBAIR,SAAQo0F,EAAa9hC,EAAO+hC,GAE3B,IAAIC,EAAY,KACZC,EAAW,KACXC,EAAW,KAETC,EAAYz0F,KAAK0zF,WACjBgB,EAAO10F,KAAK2zF,MACZgB,EAAO30F,KAAK4zF,MAElB,GAAKQ,GAAiD,oBAAlC9hC,EAAM2P,QAAQ2yB,gBAuCjC,GArCmB,OAAdH,GAIe,QAFnBH,EAAYhiC,EAAMuiC,QAAST,EAAYU,eAAgBT,MAItDI,EAAU57D,OAAOC,UAAWw7D,EAAUS,UAAUl8D,QAChD47D,EAAU57D,OAAOua,UAAWqhD,EAAUtlD,SAAUslD,EAAUh8D,SAAUg8D,EAAUrlD,OAEzEklD,EAAUL,gBAEdQ,EAAUT,mBAAoB,EAC9BS,EAAUR,eAAe94D,KAAMm5D,EAAUL,iBAIzCQ,EAAUT,mBAAoB,EAI1BM,EAAUH,iBAEdM,EAAUP,oBAAqB,EAC/BO,EAAUN,gBAAgBh5D,KAAMm5D,EAAUH,kBAI1CM,EAAUP,oBAAqB,EAIhCl0F,KAAK87B,cAAe03D,KAMjBmB,GAAQP,EAAYO,KAAO,CAE/BH,GAAW,EAFoB,oBAILJ,EAAYO,KAAKztF,UAJZ,IAI/B,2BAAsD,KAA1C8tF,EAA0C,QAG/CC,EAAY3iC,EAAM4iC,aAAcF,EAAYX,GAElD,QAA6C9xF,IAAxCoyF,EAAKd,OAAQmB,EAAWG,WAA4B,CAGxD,IAAMC,EAAQ,IAAI9B,GAClB8B,EAAMx6D,kBAAmB,EACzBw6D,EAAMziD,SAAU,EAChBgiD,EAAKd,OAAQmB,EAAWG,WAAcC,EAEtCT,EAAK5uD,IAAKqvD,GAIX,IAAMA,EAAQT,EAAKd,OAAQmB,EAAWG,WAEnB,OAAdF,IAEJG,EAAMv8D,OAAOC,UAAWm8D,EAAUF,UAAUl8D,QAC5Cu8D,EAAMv8D,OAAOua,UAAWgiD,EAAMjmD,SAAUimD,EAAM38D,SAAU28D,EAAMhmD,OAC9DgmD,EAAMC,YAAcJ,EAAUxwD,QAI/B2wD,EAAMziD,QAAwB,OAAdsiD,GA/Bc,8BAsC/B,IAAMK,EAAWX,EAAKd,OAAQ,oBACxB0B,EAAWZ,EAAKd,OAAQ,aACxBtgD,EAAW+hD,EAASnmD,SAASpG,WAAYwsD,EAASpmD,UAKnDwlD,EAAKb,WAAWC,UAAYxgD,EAAWiiD,MAE3Cb,EAAKb,WAAWC,UAAW,EAC3B/zF,KAAK87B,cAAe,CACnB7V,KAAM,WACNwvE,WAAYrB,EAAYqB,WACxBp3F,OAAQ2B,SAGI20F,EAAKb,WAAWC,UAAYxgD,GAAYiiD,OAErDb,EAAKb,WAAWC,UAAW,EAC3B/zF,KAAK87B,cAAe,CACnB7V,KAAM,aACNwvE,WAAYrB,EAAYqB,WACxBp3F,OAAQ2B,aAOI,OAAT00F,GAAiBN,EAAYsB,WAIf,QAFlBnB,EAAWjiC,EAAMuiC,QAAST,EAAYsB,UAAWrB,MAIhDK,EAAK77D,OAAOC,UAAWy7D,EAASQ,UAAUl8D,QAC1C67D,EAAK77D,OAAOua,UAAWshD,EAAKvlD,SAAUulD,EAAKj8D,SAAUi8D,EAAKtlD,OAErDmlD,EAASN,gBAEbS,EAAKV,mBAAoB,EACzBU,EAAKT,eAAe94D,KAAMo5D,EAASN,iBAInCS,EAAKV,mBAAoB,EAIrBO,EAASJ,iBAEbO,EAAKR,oBAAqB,EAC1BQ,EAAKP,gBAAgBh5D,KAAMo5D,EAASJ,kBAIpCO,EAAKR,oBAAqB,GA8B/B,OAlBmB,OAAdO,IAEJA,EAAU9hD,QAA0B,OAAd2hD,GAIT,OAATI,IAEJA,EAAK/hD,QAAyB,OAAb4hD,GAIJ,OAATI,IAEJA,EAAKhiD,QAAyB,OAAb6hD,GAIXx0F,S,KAMH21F,G,kDAEL,WAAaxmC,EAAU0D,GAAK,0BAE3B,eAEA,IAAMlI,EAAQ,eACRhlD,EAAQwpD,EAASxpD,MAEnBs8D,EAAU,KAEV2zB,EAAyB,EAEzBvB,EAAiB,KACjBwB,EAAqB,cAErBC,EAAO,KAELC,EAAc,GACdC,EAAkB,IAAI7uE,IAItB8uE,EAAU,IAAI9oC,GACpB8oC,EAAQ5kD,OAAOs2C,OAAQ,GACvBsO,EAAQj4D,SAAW,IAAI3B,GAEvB,IAAM65D,EAAU,IAAI/oC,GACpB+oC,EAAQ7kD,OAAOs2C,OAAQ,GACvBuO,EAAQl4D,SAAW,IAAI3B,GAEvB,IAAM+2D,EAAU,CAAE6C,EAASC,GAErBC,EAAW,IAAIhD,GACrBgD,EAAS9kD,OAAOs2C,OAAQ,GACxBwO,EAAS9kD,OAAOs2C,OAAQ,GAExB,IAAIyO,EAAoB,KACpBC,EAAmB,KAuDvB,SAASC,EAAgBllF,GAExB,IAAMmlF,EAAaP,EAAgBj1F,IAAKqQ,EAAMgjF,aAEzCmC,GAEJA,EAAWz6D,cAAe,CAAE7V,KAAM7U,EAAM6U,KAAMtH,KAAMvN,EAAMgjF,cAM5D,SAASoC,IAERR,EAAgBjtF,SAAS,SAAWwtF,EAAYnC,GAE/CmC,EAAWE,WAAYrC,MAIxB4B,EAAgB5lC,QAEhBgmC,EAAoB,KACpBC,EAAmB,KAInB1wF,EAAMgmF,kBAAmB,MACzBx8B,EAASK,gBAAiBL,EAASI,mBAInCxZ,EAAUyc,OAEV7H,EAAM+rC,cAAe,EAErB/rC,EAAM7uB,cAAe,CAAE7V,KAAM,eAyF9B,SAAS0wE,EAAsBvlF,GAM9B,IAJA,IAAMwlF,EAAe30B,EAAQ20B,aAInBr4F,EAAI,EAAGA,EAAIw3F,EAAYv3F,OAAQD,IAExCy3F,EAAgBp7E,IAAKg8E,EAAcr4F,GAAKw3F,EAAax3F,IAMtD,IAAM,IAAIA,EAAI,EAAGA,EAAI6S,EAAMylF,QAAQr4F,OAAQD,IAAO,CAEjD,IAAM61F,EAAchjF,EAAMylF,QAASt4F,GAC7Bg4F,EAAaP,EAAgBj1F,IAAKqzF,GAEnCmC,IAEJA,EAAWz6D,cAAe,CAAE7V,KAAM,eAAgBtH,KAAMy1E,IACxD4B,EAAgB5iC,OAAQghC,IAQ1B,IAAM,IAAI71F,EAAI,EAAGA,EAAI6S,EAAM0lF,MAAMt4F,OAAQD,IAAO,CAE/C,IAAM61F,EAAchjF,EAAM0lF,MAAOv4F,GAC3Bg4F,EAAaP,EAAgBj1F,IAAKqzF,GAEnCmC,GAEJA,EAAWz6D,cAAe,CAAE7V,KAAM,YAAatH,KAAMy1E,KArNxD,EAAKjmC,SAAU,EAEf,EAAKuoC,cAAe,EAEpB,EAAKK,cAAgB,SAAWlrF,GAE/B,IAAI0qF,EAAaR,EAAalqF,GAS9B,YAPoBtJ,IAAfg0F,IAEJA,EAAa,IAAI9C,GACjBsC,EAAalqF,GAAU0qF,GAIjBA,EAAWS,qBAInB,EAAKC,kBAAoB,SAAWprF,GAEnC,IAAI0qF,EAAaR,EAAalqF,GAS9B,YAPoBtJ,IAAfg0F,IAEJA,EAAa,IAAI9C,GACjBsC,EAAalqF,GAAU0qF,GAIjBA,EAAWW,gBAInB,EAAKC,QAAU,SAAWtrF,GAEzB,IAAI0qF,EAAaR,EAAalqF,GAS9B,YAPoBtJ,IAAfg0F,IAEJA,EAAa,IAAI9C,GACjBsC,EAAalqF,GAAU0qF,GAIjBA,EAAWa,gBA8CnB,EAAKC,0BAA4B,SAAW53F,GAE3Cm2F,EAAyBn2F,GAEG,IAAvBkrD,EAAM+rC,cAEVpxE,QAAQM,KAAM,0EAMhB,EAAK0xE,sBAAwB,SAAW73F,GAEvCo2F,EAAqBp2F,GAEO,IAAvBkrD,EAAM+rC,cAEVpxE,QAAQM,KAAM,6EAMhB,EAAK2xE,kBAAoB,WAExB,OAAOlD,GAIR,EAAKnyB,WAAa,WAEjB,OAAOD,GAIR,EAAKu1B,WAAL,uCAAkB,WAAiB/3F,GAAjB,mBAAAkL,EAAA,yDAIA,QAFjBs3D,EAAUxiE,GAFO,oBAMhBwiE,EAAQ3vD,iBAAkB,SAAUgkF,GACpCr0B,EAAQ3vD,iBAAkB,cAAegkF,GACzCr0B,EAAQ3vD,iBAAkB,YAAagkF,GACvCr0B,EAAQ3vD,iBAAkB,UAAWgkF,GACrCr0B,EAAQ3vD,iBAAkB,eAAgBgkF,GAC1Cr0B,EAAQ3vD,iBAAkB,aAAcgkF,GACxCr0B,EAAQ3vD,iBAAkB,MAAOkkF,GACjCv0B,EAAQ3vD,iBAAkB,qBAAsBqkF,IAIf,KAF3BltE,EAAaopC,EAAG4kC,wBAENC,aAjBA,kCAmBT7kC,EAAG8kC,mBAnBM,eAuBVC,EAAY,CACjBC,UAAWpuE,EAAWouE,UACtBjjE,MAAOnL,EAAWmL,MAClBiJ,MAAOpU,EAAWoU,MAClBsyB,QAAS1mC,EAAW0mC,QACpBylC,uBAAwBA,GAInBkC,EAAY,IAAIC,aAAc91B,EAASpP,EAAI+kC,GAEjD31B,EAAQ+1B,kBAAmB,CAAEF,UAAWA,IAlCxB,UAoCO71B,EAAQg2B,sBAAuBpC,GApCtC,QAoChBxB,EApCgB,OAsChBt+C,EAAU4c,WAAYsP,GACtBlsB,EAAUW,QAEViU,EAAM+rC,cAAe,EAErB/rC,EAAM7uB,cAAe,CAAE7V,KAAM,iBA3Cb,4CAAlB,kCAAAjmB,KAAA,eAgGA,IAAMk4F,EAAa,IAAI71D,GACjB81D,EAAa,IAAI91D,GAyDvB,SAAS+1D,EAAcj1D,EAAQiP,GAEd,OAAXA,EAEJjP,EAAOK,YAAYrI,KAAMgI,EAAOtK,QAIhCsK,EAAOK,YAAYpN,iBAAkBgc,EAAO5O,YAAaL,EAAOtK,QAIjEsK,EAAOE,mBAAmBlI,KAAMgI,EAAOK,aAActL,SAItD,EAAKmgE,UAAY,SAAWl1D,GAE3BgzD,EAAS9lD,KAAO6lD,EAAQ7lD,KAAO4lD,EAAQ5lD,KAAOlN,EAAOkN,KACrD8lD,EAAS7lD,IAAM4lD,EAAQ5lD,IAAM2lD,EAAQ3lD,IAAMnN,EAAOmN,IAE7C8lD,IAAsBD,EAAS9lD,MAAQgmD,IAAqBF,EAAS7lD,MAIzE2xB,EAAQ+1B,kBAAmB,CAC1BM,UAAWnC,EAAS9lD,KACpBkoD,SAAUpC,EAAS7lD,MAGpB8lD,EAAoBD,EAAS9lD,KAC7BgmD,EAAmBF,EAAS7lD,KAI7B,IAAM8B,EAASjP,EAAOiP,OAChBghD,EAAU+C,EAAS/C,QAEzBgF,EAAcjC,EAAU/jD,GAExB,IAAM,IAAI7zC,EAAI,EAAGA,EAAI60F,EAAQ50F,OAAQD,IAEpC65F,EAAchF,EAAS70F,GAAK6zC,GAM7BjP,EAAOK,YAAYrI,KAAMg7D,EAAS3yD,aAClCL,EAAOtK,OAAOsC,KAAMg7D,EAASt9D,QAC7BsK,EAAOtK,OAAOua,UAAWjQ,EAAOgM,SAAUhM,EAAOrE,WAAYqE,EAAOiM,OAIpE,IAFA,IAAMrpC,EAAWo9B,EAAOp9B,SAEdxH,EAAI,EAAGyK,EAAIjD,EAASvH,OAAQD,EAAIyK,EAAGzK,IAE5CwH,EAAUxH,GAAI+1C,mBAAmB,GAkBlC,OAZwB,IAAnB8+C,EAAQ50F,OA/Gd,SAAiC2kC,EAAQ8yD,EAASC,GAEjDgC,EAAWzkD,sBAAuBwiD,EAAQzyD,aAC1C20D,EAAW1kD,sBAAuByiD,EAAQ1yD,aAE1C,IAAMg1D,EAAMN,EAAWnvD,WAAYovD,GAE7BM,EAAQxC,EAAQ3yD,iBAAiBtP,SACjC0kE,EAAQxC,EAAQ5yD,iBAAiBtP,SAKjCqc,EAAOooD,EAAO,KAASA,EAAO,IAAO,GACrCnoD,EAAMmoD,EAAO,KAASA,EAAO,IAAO,GACpCE,GAAWF,EAAO,GAAM,GAAMA,EAAO,GACrCG,GAAcH,EAAO,GAAM,GAAMA,EAAO,GAExCI,GAAYJ,EAAO,GAAM,GAAMA,EAAO,GACtCK,GAAaJ,EAAO,GAAM,GAAMA,EAAO,GACvCzoD,EAAOI,EAAOwoD,EACd3oD,EAAQG,EAAOyoD,EAIfC,EAAUP,IAAUK,EAAUC,GAC9BE,EAAUD,GAAYF,EAG5B5C,EAAQzyD,YAAY4P,UAAWjQ,EAAOgM,SAAUhM,EAAOrE,WAAYqE,EAAOiM,OAC1EjM,EAAO81D,WAAYD,GACnB71D,EAAO+1D,WAAYH,GACnB51D,EAAOK,YAAYqK,QAAS1K,EAAOgM,SAAUhM,EAAOrE,WAAYqE,EAAOiM,OACvEjM,EAAOE,mBAAmBlI,KAAMgI,EAAOK,aAActL,SAKrD,IAAMihE,EAAQ9oD,EAAO0oD,EACfK,EAAO9oD,EAAMyoD,EACbM,EAAQppD,EAAO+oD,EACfM,EAASppD,GAAUsoD,EAAMQ,GACzBO,EAAOZ,EAASroD,EAAM8oD,EAAOD,EAC7BK,EAAUZ,EAAYtoD,EAAM8oD,EAAOD,EAEzCh2D,EAAOG,iBAAiBkrB,gBAAiB6qC,EAAOC,EAAQC,EAAMC,EAASL,EAAOC,GAoE7EK,CAAwBtD,EAAUF,EAASC,GAM3CC,EAAS7yD,iBAAiBnI,KAAM86D,EAAQ3yD,kBAIlC6yD,GAMR,IAAIuD,EAA2B,KAmE/B,IAAM3jD,EAAY,IAAIic,GApdK,OAqd3Bjc,EAAU2c,kBAlEV,SAA2BL,EAAMC,GAIhC,GAAc,QAFdwjC,EAAOxjC,EAAMqnC,cAAetF,IAEP,CAEpB,IAAMuF,EAAQ9D,EAAK8D,MACb9B,EAAY71B,EAAQ0gB,YAAYmV,UAEtCnyF,EAAMgmF,kBAAmBmM,EAAUpM,aAEnC,IAAImO,GAAsB,EAIrBD,EAAMp7F,SAAW23F,EAAS/C,QAAQ50F,SAEtC23F,EAAS/C,QAAQ50F,OAAS,EAC1Bq7F,GAAsB,GAIvB,IAAM,IAAIt7F,EAAI,EAAGA,EAAIq7F,EAAMp7F,OAAQD,IAAO,CAEzC,IAAMivD,EAAOosC,EAAOr7F,GACdy/B,EAAW85D,EAAUlR,YAAap5B,GAElCrqB,EAASiwD,EAAS70F,GACxB4kC,EAAOtK,OAAOC,UAAW00B,EAAKunC,UAAUl8D,QACxCsK,EAAOG,iBAAiBxK,UAAW00B,EAAKlqB,kBACxCH,EAAOnF,SAASpjB,IAAKojB,EAASliB,EAAGkiB,EAASjiB,EAAGiiB,EAAS1E,MAAO0E,EAASzE,QAE3D,IAANh7B,GAEJ43F,EAASt9D,OAAOsC,KAAMgI,EAAOtK,SAID,IAAxBghE,GAEJ1D,EAAS/C,QAAQjvF,KAAMg/B,IAY1B,IAFA,IAAMyzD,EAAe30B,EAAQ20B,aAEnBr4F,EAAI,EAAGA,EAAIw3F,EAAYv3F,OAAQD,IAAO,CAE/C,IAAMg4F,EAAaR,EAAax3F,GAC1B61F,EAAcwC,EAAcr4F,GAElCg4F,EAAWttE,OAAQmrE,EAAa9hC,EAAO+hC,GAInCqF,GAA2BA,EAA0BrnC,EAAMC,MAOjE,EAAKI,iBAAmB,SAAW7jD,GAElC6qF,EAA2B7qF,GAI5B,EAAKwvB,QAAU,aA7dY,E,UAFF7O,IAqe3B,SAASsqE,GAAgB/vE,GAyGxB,SAASgwE,EAAuBhuC,EAAUlW,GAEzCkW,EAAS7R,QAAQz6C,MAAQo2C,EAASqE,QAE7BrE,EAAS+G,OAEbmP,EAAS8Q,QAAQp9D,MAAM07B,KAAM0a,EAAS+G,OAIlC/G,EAASoH,UAEb8O,EAAS9O,SAASx9C,MAAM07B,KAAM0a,EAASoH,UAAWlpB,eAAgB8hB,EAASqH,mBAIvErH,EAAStgC,MAEbw2C,EAASx2C,IAAI9V,MAAQo2C,EAAStgC,KAI1BsgC,EAAS+H,WAEbmO,EAASnO,SAASn+C,MAAQo2C,EAAS+H,UAI/B/H,EAAS+I,cAEbmN,EAASnN,YAAYn/C,MAAQo2C,EAAS+I,aAIvC,IAiDIo7C,EA2EAC,EA5HEp7C,EAAS90B,EAAWhpB,IAAK80C,GAAWgJ,OAE1C,GAAKA,EAAS,CAEbkN,EAASlN,OAAOp/C,MAAQo/C,EAExBkN,EAASmR,WAAWz9D,MAAUo/C,EAAO8Q,eAAiB9Q,EAAO6Q,kBAAuB,EAAI,EAExF3D,EAAS/M,aAAav/C,MAAQo2C,EAASmJ,aACvC+M,EAAS9M,gBAAgBx/C,MAAQo2C,EAASoJ,gBAE1C,IAAMke,EAAcpzC,EAAWhpB,IAAK89C,GAASwuC,mBAExB9qF,IAAhB46D,IAEJpR,EAASoR,YAAY19D,MAAQ09D,GAM1BtnB,EAASgI,WAEbkO,EAASlO,SAASp+C,MAAQo2C,EAASgI,SACnCkO,EAASjO,kBAAkBr+C,MAAQo2C,EAASiI,mBAIxCjI,EAASkI,QAEbgO,EAAShO,MAAMt+C,MAAQo2C,EAASkI,MAChCgO,EAAS/N,eAAev+C,MAAQo2C,EAASmI,gBAoBrCnI,EAAStgC,IAEbykF,EAAankD,EAAStgC,IAEXsgC,EAAS+I,YAEpBo7C,EAAankD,EAAS+I,YAEX/I,EAASyI,gBAEpB07C,EAAankD,EAASyI,gBAEXzI,EAASsI,UAEpB67C,EAAankD,EAASsI,UAEXtI,EAASoI,QAEpB+7C,EAAankD,EAASoI,QAEXpI,EAAS4I,aAEpBu7C,EAAankD,EAAS4I,aAEX5I,EAAS6I,aAEpBs7C,EAAankD,EAAS6I,aAEX7I,EAAS+H,SAEpBo8C,EAAankD,EAAS+H,SAEX/H,EAAS8I,YAEpBq7C,EAAankD,EAAS8I,YAEX9I,EAAS0H,aAEpBy8C,EAAankD,EAAS0H,aAEX1H,EAAS4H,mBAEpBu8C,EAAankD,EAAS4H,mBAEX5H,EAAS2H,wBAEpBw8C,EAAankD,EAAS2H,4BAIHj7C,IAAfy3F,IAGCA,EAAWz7D,sBAEfy7D,EAAaA,EAAW/7D,UAIY,IAAhC+7D,EAAWp/D,kBAEfo/D,EAAW9mD,eAIZ6Y,EAAS+Q,YAAYr9D,MAAM07B,KAAM6+D,EAAWnhE,SAUxCgd,EAASkI,MAEbk8C,EAAcpkD,EAASkI,MAEZlI,EAASgI,WAEpBo8C,EAAcpkD,EAASgI,eAIHt7C,IAAhB03F,IAGCA,EAAY17D,sBAEhB07D,EAAcA,EAAYh8D,UAIW,IAAjCg8D,EAAYr/D,kBAEhBq/D,EAAY/mD,eAIb6Y,EAASgR,aAAat9D,MAAM07B,KAAM8+D,EAAYphE,SA6MhD,SAASqhE,EAAyBnuC,EAAUlW,GAE3CkW,EAASjP,UAAUr9C,MAAQo2C,EAASiH,UACpCiP,EAAShP,UAAUt9C,MAAQo2C,EAASkH,UAE/BlH,EAAS4I,eAEbsN,EAAStN,aAAah/C,MAAQo2C,EAAS4I,cAInC5I,EAAS6I,eAEbqN,EAASrN,aAAaj/C,MAAQo2C,EAAS6I,cAInC7I,EAAS8I,cAEboN,EAASpN,YAAYl/C,MAAQo2C,EAAS8I,aAIlC9I,EAASoI,UAEb8N,EAAS9N,QAAQx+C,MAAQo2C,EAASoI,QAClC8N,EAAS7N,UAAUz+C,MAAQo2C,EAASqI,UAt7sBtB,IAu7sBTrI,EAASmE,OAAoB+R,EAAS7N,UAAUz+C,QAAW,IAI5Do2C,EAASsI,YAEb4N,EAAS5N,UAAU1+C,MAAQo2C,EAASsI,UACpC4N,EAAS1N,YAAY5+C,MAAM07B,KAAM0a,EAASwI,aA97sB5B,IA+7sBTxI,EAASmE,MAAoB+R,EAAS1N,YAAY5+C,MAAM+2C,UAIzDX,EAASyI,kBAEbyN,EAASzN,gBAAgB7+C,MAAQo2C,EAASyI,gBAC1CyN,EAASxN,kBAAkB9+C,MAAQo2C,EAAS0I,kBAC5CwN,EAASvN,iBAAiB/+C,MAAQo2C,EAAS2I,kBAI7Bz0B,EAAWhpB,IAAK80C,GAAWgJ,SAKzCkN,EAAShN,gBAAgBt/C,MAAQo2C,EAASkJ,iBA6I5C,MAAO,CACNo7C,mBA/qBD,SAA6BpuC,EAAUjS,GAEtCiS,EAASiS,SAASv+D,MAAM07B,KAAM2e,EAAI8C,OAE7B9C,EAAIsgD,OAERruC,EAAS+R,QAAQr+D,MAAQq6C,EAAIzJ,KAC7B0b,EAASgS,OAAOt+D,MAAQq6C,EAAIxJ,KAEjBwJ,EAAIsjC,YAEfrxB,EAAS8R,WAAWp+D,MAAQq6C,EAAIugD,UAqqBjCC,wBA/pBD,SAAkCvuC,EAAUlW,EAAU0kD,EAAYhhE,GAE5Dsc,EAASoM,oBAEb83C,EAAuBhuC,EAAUlW,GAEtBA,EAAS2kD,uBAEpBT,EAAuBhuC,EAAUlW,GA6XnC,SAAiCkW,EAAUlW,GAErCA,EAAS8I,cAEboN,EAASpN,YAAYl/C,MAAQo2C,EAAS8I,aAhYtC87C,CAAwB1uC,EAAUlW,IAEvBA,EAAS6kD,oBAEpBX,EAAuBhuC,EAAUlW,GAuanC,SAA8BkW,EAAUlW,GAElCA,EAASqJ,cAEb6M,EAAS7M,YAAYz/C,MAAQo2C,EAASqJ,aAIlCrJ,EAAS8I,cAEboN,EAASpN,YAAYl/C,MAAQo2C,EAAS8I,aAIlC9I,EAASoI,UAEb8N,EAAS9N,QAAQx+C,MAAQo2C,EAASoI,QAClC8N,EAAS7N,UAAUz+C,MAAQo2C,EAASqI,UAr4sBtB,IAs4sBTrI,EAASmE,OAAoB+R,EAAS7N,UAAUz+C,QAAW,IAI5Do2C,EAASsI,YAEb4N,EAAS5N,UAAU1+C,MAAQo2C,EAASsI,UACpC4N,EAAS1N,YAAY5+C,MAAM07B,KAAM0a,EAASwI,aA74sB5B,IA84sBTxI,EAASmE,MAAoB+R,EAAS1N,YAAY5+C,MAAM+2C,UAIzDX,EAASyI,kBAEbyN,EAASzN,gBAAgB7+C,MAAQo2C,EAASyI,gBAC1CyN,EAASxN,kBAAkB9+C,MAAQo2C,EAAS0I,kBAC5CwN,EAASvN,iBAAiB/+C,MAAQo2C,EAAS2I,kBAxc3Cm8C,CAAqB5uC,EAAUlW,IAEpBA,EAAS+kD,qBAEpBb,EAAuBhuC,EAAUlW,GA6XnC,SAA+BkW,EAAUlW,GAExCkW,EAAS5O,SAAS19C,MAAM07B,KAAM0a,EAASsH,UACvC4O,EAAS3O,UAAU39C,MAAQqR,KAAKkE,IAAK6gC,EAASuH,UAAW,MAEpDvH,EAAS8I,cAEboN,EAASpN,YAAYl/C,MAAQo2C,EAAS8I,aAIlC9I,EAASoI,UAEb8N,EAAS9N,QAAQx+C,MAAQo2C,EAASoI,QAClC8N,EAAS7N,UAAUz+C,MAAQo2C,EAASqI,UA71sBtB,IA81sBTrI,EAASmE,OAAoB+R,EAAS7N,UAAUz+C,QAAW,IAI5Do2C,EAASsI,YAEb4N,EAAS5N,UAAU1+C,MAAQo2C,EAASsI,UACpC4N,EAAS1N,YAAY5+C,MAAM07B,KAAM0a,EAASwI,aAr2sB5B,IAs2sBTxI,EAASmE,MAAoB+R,EAAS1N,YAAY5+C,MAAM+2C,UAIzDX,EAASyI,kBAEbyN,EAASzN,gBAAgB7+C,MAAQo2C,EAASyI,gBAC1CyN,EAASxN,kBAAkB9+C,MAAQo2C,EAAS0I,kBAC5CwN,EAASvN,iBAAiB/+C,MAAQo2C,EAAS2I,kBA3Z3Cq8C,CAAsB9uC,EAAUlW,IAErBA,EAASknC,wBAEpBgd,EAAuBhuC,EAAUlW,GAE5BA,EAASilD,uBA6fhB,SAAkC/uC,EAAUlW,GAE3CqkD,EAAyBnuC,EAAUlW,GAEnCkW,EAAS/M,aAAav/C,MAAQo2C,EAASmJ,aAEvC+M,EAAS1O,UAAU59C,MAAQo2C,EAASwH,UACpC0O,EAASzO,mBAAmB79C,MAAQo2C,EAASyH,mBACxCzH,EAASmH,OAAQ+O,EAAS/O,MAAMv9C,MAAM07B,KAAM0a,EAASmH,OAErDnH,EAAS0H,eAEbwO,EAASxO,aAAa99C,MAAQo2C,EAAS0H,cAInC1H,EAAS2H,wBAEbuO,EAASvO,sBAAsB/9C,MAAQo2C,EAAS2H,uBAI5C3H,EAAS4H,qBAEbsO,EAASrO,qBAAqBj+C,MAAM07B,KAAM0a,EAAS6H,sBACnDqO,EAAStO,mBAAmBh+C,MAAQo2C,EAAS4H,mBA/+sB/B,IAi/sBT5H,EAASmE,MAEb+R,EAASrO,qBAAqBj+C,MAAM+2C,UAMtCuV,EAASghB,aAAattE,MAAQo2C,EAASk3B,aAElCl3B,EAASm3B,kBAEbjhB,EAASihB,gBAAgBvtE,MAAQo2C,EAASm3B,iBAliBzC+tB,CAAyBhvC,EAAUlW,GAInCqkD,EAAyBnuC,EAAUlW,IAIzBA,EAASmlD,sBAEpBjB,EAAuBhuC,EAAUlW,GA8hBnC,SAAgCkW,EAAUlW,GAEpCA,EAAS8H,SAEboO,EAASpO,OAAOl+C,MAAQo2C,EAAS8H,QAI7B9H,EAASoI,UAEb8N,EAAS9N,QAAQx+C,MAAQo2C,EAASoI,QAClC8N,EAAS7N,UAAUz+C,MAAQo2C,EAASqI,UA9gtBtB,IA+gtBTrI,EAASmE,OAAoB+R,EAAS7N,UAAUz+C,QAAW,IAI5Do2C,EAASsI,YAEb4N,EAAS5N,UAAU1+C,MAAQo2C,EAASsI,UACpC4N,EAAS1N,YAAY5+C,MAAM07B,KAAM0a,EAASwI,aAthtB5B,IAuhtBTxI,EAASmE,MAAoB+R,EAAS1N,YAAY5+C,MAAM+2C,UAIzDX,EAASyI,kBAEbyN,EAASzN,gBAAgB7+C,MAAQo2C,EAASyI,gBAC1CyN,EAASxN,kBAAkB9+C,MAAQo2C,EAAS0I,kBAC5CwN,EAASvN,iBAAiB/+C,MAAQo2C,EAAS2I,kBAzjB3Cy8C,CAAuBlvC,EAAUlW,IAEtBA,EAAS+sC,qBAEpBmX,EAAuBhuC,EAAUlW,GA2jBnC,SAA+BkW,EAAUlW,GAEnCA,EAASyI,kBAEbyN,EAASzN,gBAAgB7+C,MAAQo2C,EAASyI,gBAC1CyN,EAASxN,kBAAkB9+C,MAAQo2C,EAAS0I,kBAC5CwN,EAASvN,iBAAiB/+C,MAAQo2C,EAAS2I,kBAhkB3C08C,CAAsBnvC,EAAUlW,IAErBA,EAASgtC,wBAEpBkX,EAAuBhuC,EAAUlW,GAkkBnC,SAAkCkW,EAAUlW,GAEtCA,EAASyI,kBAEbyN,EAASzN,gBAAgB7+C,MAAQo2C,EAASyI,gBAC1CyN,EAASxN,kBAAkB9+C,MAAQo2C,EAAS0I,kBAC5CwN,EAASvN,iBAAiB/+C,MAAQo2C,EAAS2I,kBAI5CuN,EAAS4U,kBAAkBlhE,MAAM07B,KAAM0a,EAAS8qB,mBAChD5U,EAAS6U,aAAanhE,MAAQo2C,EAAS+qB,aACvC7U,EAAS8U,YAAYphE,MAAQo2C,EAASgrB,YA7kBrCs6B,CAAyBpvC,EAAUlW,IAExBA,EAASulD,sBAEpBrB,EAAuBhuC,EAAUlW,GA6kBnC,SAAgCkW,EAAUlW,GAEpCA,EAASoI,UAEb8N,EAAS9N,QAAQx+C,MAAQo2C,EAASoI,QAClC8N,EAAS7N,UAAUz+C,MAAQo2C,EAASqI,UAtktBtB,IAuktBTrI,EAASmE,OAAoB+R,EAAS7N,UAAUz+C,QAAW,IAI5Do2C,EAASsI,YAEb4N,EAAS5N,UAAU1+C,MAAQo2C,EAASsI,UACpC4N,EAAS1N,YAAY5+C,MAAM07B,KAAM0a,EAASwI,aA9ktB5B,IA+ktBTxI,EAASmE,MAAoB+R,EAAS1N,YAAY5+C,MAAM+2C,UAIzDX,EAASyI,kBAEbyN,EAASzN,gBAAgB7+C,MAAQo2C,EAASyI,gBAC1CyN,EAASxN,kBAAkB9+C,MAAQo2C,EAAS0I,kBAC5CwN,EAASvN,iBAAiB/+C,MAAQo2C,EAAS2I,kBAlmB3C68C,CAAuBtvC,EAAUlW,IAEtBA,EAASylD,qBA8NtB,SAA8BvvC,EAAUlW,GAEvCkW,EAAS8Q,QAAQp9D,MAAM07B,KAAM0a,EAAS+G,OACtCmP,EAAS7R,QAAQz6C,MAAQo2C,EAASqE,QA/NjCqhD,CAAqBxvC,EAAUlW,GAE1BA,EAAS2lD,sBAiOhB,SAA8BzvC,EAAUlW,GAEvCkW,EAAS1M,SAAS5/C,MAAQo2C,EAASwJ,SACnC0M,EAASsU,UAAU5gE,MAAQo2C,EAASwJ,SAAWxJ,EAASyJ,QACxDyM,EAAS3c,MAAM3vC,MAAQo2C,EAASzG,MAnO9BqsD,CAAqB1vC,EAAUlW,IAIrBA,EAAS6lD,iBAmOtB,SAAgC3vC,EAAUlW,EAAU0kD,EAAYhhE,GAE/DwyB,EAAS8Q,QAAQp9D,MAAM07B,KAAM0a,EAAS+G,OACtCmP,EAAS7R,QAAQz6C,MAAQo2C,EAASqE,QAClC6R,EAASziC,KAAK7pB,MAAQo2C,EAASvsB,KAAOixE,EACtCxuC,EAAS3c,MAAM3vC,MAAiB,GAAT85B,EAElBsc,EAAStgC,MAEbw2C,EAASx2C,IAAI9V,MAAQo2C,EAAStgC,KAI1BsgC,EAAS+H,WAEbmO,EAASnO,SAASn+C,MAAQo2C,EAAS+H,UAQpC,IAAIo8C,EAECnkD,EAAStgC,IAEbykF,EAAankD,EAAStgC,IAEXsgC,EAAS+H,WAEpBo8C,EAAankD,EAAS+H,eAIHr7C,IAAfy3F,KAEiC,IAAhCA,EAAWp/D,kBAEfo/D,EAAW9mD,eAIZ6Y,EAAS+Q,YAAYr9D,MAAM07B,KAAM6+D,EAAWnhE,SA5Q5C8iE,CAAuB5vC,EAAUlW,EAAU0kD,EAAYhhE,GAE5Csc,EAAS+lD,iBAgRtB,SAAiC7vC,EAAUlW,GAE1CkW,EAAS8Q,QAAQp9D,MAAM07B,KAAM0a,EAAS+G,OACtCmP,EAAS7R,QAAQz6C,MAAQo2C,EAASqE,QAClC6R,EAAStzB,SAASh5B,MAAQo2C,EAASpd,SAE9Bod,EAAStgC,MAEbw2C,EAASx2C,IAAI9V,MAAQo2C,EAAStgC,KAI1BsgC,EAAS+H,WAEbmO,EAASnO,SAASn+C,MAAQo2C,EAAS+H,UAQpC,IAAIo8C,EAECnkD,EAAStgC,IAEbykF,EAAankD,EAAStgC,IAEXsgC,EAAS+H,WAEpBo8C,EAAankD,EAAS+H,eAIHr7C,IAAfy3F,KAEiC,IAAhCA,EAAWp/D,kBAEfo/D,EAAW9mD,eAIZ6Y,EAAS+Q,YAAYr9D,MAAM07B,KAAM6+D,EAAWnhE,SAxT5CgjE,CAAwB9vC,EAAUlW,GAEvBA,EAASimD,kBAEpB/vC,EAASnP,MAAMn9C,MAAM07B,KAAM0a,EAAS+G,OACpCmP,EAAS7R,QAAQz6C,MAAQo2C,EAASqE,SAEvBrE,EAASoX,mBAEpBpX,EAASkX,oBAAqB,KA4lBjC,SAASgvC,GAAexmD,GAIvB,IAAMpgB,OAAgC5yB,KAFtCgzC,EAAaA,GAAc,IAEAnc,OAAuBmc,EAAWnc,OAZ9D,WAEC,IAAMA,EAAS9uB,SAAS+uB,gBAAiB,+BAAgC,UAEzE,OADAD,EAAO5f,MAAMwiF,QAAU,QAChB5iE,EAQ+D6iE,GACrEC,OAAkC35F,IAAvBgzC,EAAW9wC,QAAwB8wC,EAAW9wC,QAAU,KAEnE03F,OAA8B55F,IAArBgzC,EAAW3gB,OAAsB2gB,EAAW3gB,MACrDwnE,OAA8B75F,IAArBgzC,EAAW1X,OAAsB0X,EAAW1X,MACrDw+D,OAAkC95F,IAAvBgzC,EAAW4a,SAAwB5a,EAAW4a,QACzDmsC,OAAsC/5F,IAAzBgzC,EAAWsiD,WAA0BtiD,EAAWsiD,UAC7D0E,OAAwDh6F,IAAlCgzC,EAAW0G,oBAAmC1G,EAAW0G,mBAC/EugD,OAA8Dj6F,IAArCgzC,EAAWknD,uBAAsClnD,EAAWknD,sBACrFC,OAAkDn6F,IAA/BgzC,EAAWonD,gBAAgCpnD,EAAWonD,gBAAkB,UAC3FC,OAA4Er6F,IAA5CgzC,EAAWsnD,8BAA6CtnD,EAAWsnD,6BAEhGC,EAAoB,KACpBC,EAAqB,KAKnBC,EAAkB,GAClBC,EAAmB,GAIzBj9F,KAAKk9F,WAAa/nE,EAGlBn1B,KAAKu6E,MAAQ,CAMZC,mBAAmB,GAKpBx6E,KAAKoiE,WAAY,EACjBpiE,KAAKqiE,gBAAiB,EACtBriE,KAAKsiE,gBAAiB,EACtBtiE,KAAKuiE,kBAAmB,EAIxBviE,KAAKm9F,aAAc,EAInBn9F,KAAKq7C,eAAiB,GACtBr7C,KAAKyoE,sBAAuB,EAI5BzoE,KAAKkhD,YAAc,EACnBlhD,KAAK85E,eAAiB9qD,GAItBhvB,KAAKw5E,yBAA0B,EAI/Bx5E,KAAK2iE,YA1otBgB,EA2otBrB3iE,KAAKo9F,oBAAsB,EAI3B,IAAM7hF,EAAQvb,KAEVq9F,GAAiB,EAIjBC,EAAyB,EACzBC,EAA4B,EAC5BC,EAAuB,KACvBC,GAAuB,EAEvBC,EAAiB,KAEfC,EAAmB,IAAIthE,GACvBuhE,EAAkB,IAAIvhE,GACxBwhE,EAAsB,KAItBC,EAAS3oE,EAAQmE,MACjBykE,EAAU5oE,EAAQoE,OAElBykE,EAAc,EACdC,EAAc,KACdC,EAAmB,KAEjB7a,EAAY,IAAIhnD,GAAS,EAAG,EAAGyhE,EAAQC,GACvCI,EAAW,IAAI9hE,GAAS,EAAG,EAAGyhE,EAAQC,GACxCK,GAAe,EAIblb,EAAW,IAAI1yB,GAIjB6tC,GAAmB,EACnBC,GAAwB,EAItBC,EAAoB,IAAIhyD,GAExBiyD,EAAW,IAAIn8D,GAEfo8D,EAAc,CAAEn+B,WAAY,KAAMxmB,IAAK,KAAMgjC,YAAa,KAAM4hB,iBAAkB,KAAM18B,SAAS,GAEvG,SAAS28B,IAER,OAAgC,OAAzBnB,EAAgCQ,EAAc,EAMtD,IAiFIxxC,EAAYsG,EAAcntD,EAAO9D,EACjCkoB,EAAYuR,EAAU0lC,EAAUv3C,EAAYgrB,EAAYwsB,EACxD29B,EAAclqD,EAAWmqD,EAAanc,GAAcn2B,GAAUkxB,GAE9Dnd,GAAYw+B,GAAcC,GAAgBC,GAE1Cn/E,GAAOojD,GAvFPupB,GAAM0P,EAEV,SAAS1iE,GAAYylE,EAAcC,GAElC,IAAM,IAAI3gG,EAAI,EAAGA,EAAI0gG,EAAazgG,OAAQD,IAAO,CAEhD,IAAM4gG,EAAcF,EAAc1gG,GAC5BkG,EAAU0wB,EAAQqE,WAAY2lE,EAAaD,GACjD,GAAiB,OAAZz6F,EAAmB,OAAOA,EAIhC,OAAO,KAIR,IAEC,IAAMy6F,GAAoB,CACzBtqE,MAAOunE,EACPt+D,MAAOu+D,EACPjsC,QAASksC,EACTxE,UAAWyE,EACXrgD,mBAAoBsgD,EACpBE,sBAAuBD,EACvBG,gBAAiBD,EACjBG,6BAA8BD,GAQ/B,GAHAznE,EAAQ7iB,iBAAkB,mBAAoB8sF,IAAe,GAC7DjqE,EAAQ7iB,iBAAkB,uBAAwB+sF,IAAkB,GAEvD,OAAR7S,GAAe,CAEnB,IAAMyS,GAAe,CAAE,SAAU,QAAS,sBAU1C,IARgC,IAA3B1jF,EAAM+jF,kBAEVL,GAAaM,QAMD,QAFb/S,GAAMhzD,GAAYylE,GAAcC,KAI/B,MAAK1lE,GAAYylE,IAEV,IAAIzzF,MAAO,+DAIX,IAAIA,MAAO,sCAUkBjJ,IAAjCiqF,GAAIrlB,2BAERqlB,GAAIrlB,yBAA2B,WAE9B,MAAO,CAAE,SAAY,EAAG,SAAY,EAAG,UAAa,KAMrD,MAAQrlE,IAGT,MADAwjB,QAAQxjB,MAAO,wBAA0BA,GAAMyJ,SACzCzJ,GAYP,SAAS09F,KAERhzC,EAAa,IAAI6d,GAAiBmiB,IAElC15B,EAAe,IAAIkU,GAAmBwlB,GAAKhgC,EAAYjX,GAEvDiX,EAAW+c,KAAMzW,GAEjBjzC,GAAQ,IAAIwyE,GAAY7F,GAAKhgC,EAAYsG,GAEzCntD,EAAQ,IAAIohF,GAAYyF,GAAKhgC,EAAYsG,GAEzCjxD,EAAO,IAAIspE,GAAWqhB,IACtBziE,EAAa,IAAIg0D,GACjBziD,EAAW,IAAIixD,GAAeC,GAAKhgC,EAAY7mD,EAAOokB,EAAY+oC,EAAcjzC,GAAOhe,GACvFm/D,EAAW,IAAIgJ,GAAezuD,GAC9BkO,EAAa,IAAImpC,GAAiB45B,GAAK15B,GACvCmQ,GAAgB,IAAIL,GAAoB4pB,GAAKhgC,EAAY/iC,EAAYqpC,GACrEre,EAAa,IAAI81B,GAAiBiiB,GAAK/iE,EAAY5nB,EAAMohE,IACzDhC,EAAU,IAAIuL,GAAcggB,GAAK/3C,EAAYhrB,EAAY5nB,GACzDi9F,GAAe,IAAIlzB,GAAmB4gB,IACtCjgC,GAAW,IAAI+b,GAAev+C,GAC9B60E,EAAe,IAAIljB,GAAengE,EAAOylD,EAAUxU,EAAYsG,EAAcmQ,GAAe1W,IAC5F7X,EAAY,IAAIolD,GAAgB/vE,GAChC80E,EAAc,IAAIhgB,GAAkB90D,GACpC24D,GAAe,IAAID,GAAmBj2B,EAAYsG,GAClDwN,GAAa,IAAIS,GAAiBxlD,EAAOylD,EAAUr7D,EAAOs7D,EAASs7B,GACnE9e,GAAY,IAAIqF,GAAgBvnE,EAAO0lD,EAASnO,GAEhDisC,GAAiB,IAAIr4B,GAAqB8lB,GAAKhgC,EAAY3qD,EAAMixD,GACjEksC,GAAwB,IAAI/zB,GAA4BuhB,GAAKhgC,EAAY3qD,EAAMixD,GAE/EjxD,EAAK0pE,SAAWqzB,EAAarzB,SAE7BhwD,EAAMu3C,aAAeA,EACrBv3C,EAAMixC,WAAaA,EACnBjxC,EAAMwO,WAAaA,EACnBxO,EAAMsjF,YAAcA,EACpBtjF,EAAMkiE,UAAYA,GAClBliE,EAAM5V,MAAQA,EACd4V,EAAM1Z,KAAOA,EAId29F,KAIA,IAAMv0E,GAAK,IAAI0qE,GAAcp6E,EAAOixE,IA+RpC,SAAS4S,GAAehuF,GAEvBA,EAAMquF,iBAENn6E,QAAQwL,IAAK,sCAEbusE,GAAiB,EAIlB,SAASgC,KAER/5E,QAAQwL,IAAK,0CAEbusE,GAAiB,EAEjB,IAAMqC,EAAgB79F,EAAK2pE,UACrB+N,EAAmBkE,GAAUtvB,QAC7BwxC,EAAsBliB,GAAUmI,WAChCga,EAAuBniB,GAAUp5B,YACjCuyB,EAAgB6G,GAAUx3D,KAEhCu5E,KAEA39F,EAAK2pE,UAAYk0B,EACjBjiB,GAAUtvB,QAAUorB,EACpBkE,GAAUmI,WAAa+Z,EACvBliB,GAAUp5B,YAAcu7C,EACxBniB,GAAUx3D,KAAO2wD,EAIlB,SAASipB,GAAmBzuF,GAE3B,IAAMykC,EAAWzkC,EAAM/S,OAEvBw3C,EAAStjC,oBAAqB,UAAWstF,IAQ1C,SAA6BhqD,IAS7B,SAA2CA,GAE1C,IAAM01B,EAAWxhD,EAAWhpB,IAAK80C,GAAW01B,cAE1BhpE,IAAbgpE,GAEJA,EAASxiE,SAAS,SAAWg7D,GAE5B66B,EAAa9gB,eAAgB/Z,OAf/B+7B,CAAkCjqD,GAElC9rB,EAAWgqB,OAAQ8B,GAVnBkqD,CAAoBlqD,GAnUrB71C,KAAKirB,GAAKA,GAIVjrB,KAAKw5B,WAAa,WAEjB,OAAOgzD,IAIRxsF,KAAKy3F,qBAAuB,WAE3B,OAAOjL,GAAIiL,wBAIZz3F,KAAKggG,iBAAmB,WAEvB,IAAMj9B,EAAYvW,EAAWzrD,IAAK,sBAC7BgiE,GAAYA,EAAUk9B,eAI5BjgG,KAAKkgG,oBAAsB,WAE1B,IAAMn9B,EAAYvW,EAAWzrD,IAAK,sBAC7BgiE,GAAYA,EAAUo9B,kBAI5BngG,KAAKogG,cAAgB,WAEpB,OAAOpC,GAIRh+F,KAAKqgG,cAAgB,SAAW5gG,QAEhB8C,IAAV9C,IAELu+F,EAAcv+F,EAEdO,KAAKsgG,QAASxC,EAAQC,GAAS,KAIhC/9F,KAAK6nC,QAAU,SAAWxpC,GAUzB,YARgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,mEAEdvnB,EAAS,IAAIq1B,IAIPr1B,EAAOuc,IAAKkjF,EAAQC,IAI5B/9F,KAAKsgG,QAAU,SAAWhnE,EAAOC,EAAQgnE,GAEnCt1E,GAAGyrE,aAEPpxE,QAAQM,KAAM,0EAKfk4E,EAASxkE,EACTykE,EAAUxkE,EAEVpE,EAAQmE,MAAQxoB,KAAKmgB,MAAOqI,EAAQ0kE,GACpC7oE,EAAQoE,OAASzoB,KAAKmgB,MAAOsI,EAASykE,IAEjB,IAAhBuC,IAEJprE,EAAQ3b,MAAM8f,MAAQA,EAAQ,KAC9BnE,EAAQ3b,MAAM+f,OAASA,EAAS,MAIjCv5B,KAAKwgG,YAAa,EAAG,EAAGlnE,EAAOC,KAIhCv5B,KAAKygG,qBAAuB,SAAWpiG,GAUtC,YARgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,gFAEdvnB,EAAS,IAAIq1B,IAIPr1B,EAAOuc,IAAKkjF,EAASE,EAAaD,EAAUC,GAAc/sE,SAIlEjxB,KAAK0gG,qBAAuB,SAAWpnE,EAAOC,EAAQghE,GAErDuD,EAASxkE,EACTykE,EAAUxkE,EAEVykE,EAAczD,EAEdplE,EAAQmE,MAAQxoB,KAAKmgB,MAAOqI,EAAQihE,GACpCplE,EAAQoE,OAASzoB,KAAKmgB,MAAOsI,EAASghE,GAEtCv6F,KAAKwgG,YAAa,EAAG,EAAGlnE,EAAOC,IAIhCv5B,KAAK2gG,mBAAqB,SAAWtiG,GAUpC,YARgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,8EAEdvnB,EAAS,IAAIg+B,IAIPh+B,EAAO88B,KAAMwiE,IAIrB39F,KAAK4mF,YAAc,SAAWvoF,GAE7B,OAAOA,EAAO88B,KAAMkoD,IAIrBrjF,KAAKwgG,YAAc,SAAW1kF,EAAGC,EAAGud,EAAOC,GAErCzd,EAAE6hB,UAEN0lD,EAAUzoE,IAAKkB,EAAEA,EAAGA,EAAEC,EAAGD,EAAEwgB,EAAGxgB,EAAE8X,GAIhCyvD,EAAUzoE,IAAKkB,EAAGC,EAAGud,EAAOC,GAI7B5zB,EAAMq4B,SAAU2/D,EAAiBxiE,KAAMkoD,GAAYtvD,eAAgBiqE,GAAc/sE,UAIlFjxB,KAAK4gG,WAAa,SAAWviG,GAE5B,OAAOA,EAAO88B,KAAMgjE,IAIrBn+F,KAAK6gG,WAAa,SAAW/kF,EAAGC,EAAGud,EAAOC,GAEpCzd,EAAE6hB,UAENwgE,EAASvjF,IAAKkB,EAAEA,EAAGA,EAAEC,EAAGD,EAAEwgB,EAAGxgB,EAAE8X,GAI/BuqE,EAASvjF,IAAKkB,EAAGC,EAAGud,EAAOC,GAI5B5zB,EAAMm4B,QAAS8/D,EAAgBziE,KAAMgjE,GAAWpqE,eAAgBiqE,GAAc/sE,UAI/EjxB,KAAK8gG,eAAiB,WAErB,OAAO1C,GAIRp+F,KAAKomF,eAAiB,SAAW2a,GAEhCp7F,EAAMygF,eAAgBgY,EAAe2C,IAItC/gG,KAAKghG,cAAgB,SAAWjoF,GAE/BklF,EAAcllF,GAIf/Y,KAAKihG,mBAAqB,SAAWloF,GAEpCmlF,EAAmBnlF,GAMpB/Y,KAAK0hE,cAAgB,SAAWrjE,GAU/B,YARgBkE,IAAXlE,IAEJinB,QAAQM,KAAM,uEAEdvnB,EAAS,IAAIiiD,IAIPjiD,EAAO88B,KAAMmlC,GAAWoB,kBAIhC1hE,KAAK2hE,cAAgB,WAEpBrB,GAAWqB,cAAcvhE,MAAOkgE,GAAYngE,YAI7CH,KAAK4hE,cAAgB,WAEpB,OAAOtB,GAAWsB,iBAInB5hE,KAAK6hE,cAAgB,WAEpBvB,GAAWuB,cAAczhE,MAAOkgE,GAAYngE,YAI7CH,KAAKowD,MAAQ,SAAWxT,EAAO/e,EAAOsyB,GAErC,IAAI+wC,EAAO,QAEI3+F,IAAVq6C,GAAuBA,KAAQskD,GAAQ,aAC7B3+F,IAAVs7B,GAAuBA,KAAQqjE,GAAQ,WAC3B3+F,IAAZ4tD,GAAyBA,KAAU+wC,GAAQ,MAEhD1U,GAAIp8B,MAAO8wC,IAIZlhG,KAAKohE,WAAa,WAEjBphE,KAAKowD,OAAO,GAAM,GAAO,IAI1BpwD,KAAK+nF,WAAa,WAEjB/nF,KAAKowD,OAAO,GAAO,GAAM,IAI1BpwD,KAAK4oF,aAAe,WAEnB5oF,KAAKowD,OAAO,GAAO,GAAO,IAM3BpwD,KAAKq+B,QAAU,WAEdlJ,EAAQ5iB,oBAAqB,mBAAoB6sF,IAAe,GAChEjqE,EAAQ5iB,oBAAqB,uBAAwB8sF,IAAkB,GAEvER,EAAYxgE,UACZqkD,GAAarkD,UACbtU,EAAWsU,UACX2iC,EAAS3iC,UACT4iC,EAAQ5iC,UACR4kC,GAAc5kC,UAEdpT,GAAGoT,UAEHpT,GAAG1Y,oBAAqB,eAAgB4uF,IACxCl2E,GAAG1Y,oBAAqB,aAAc6uF,IAEtCrrD,GAAUyc,QAuFXxyD,KAAKqhG,sBAAwB,SAAWpgG,EAAQ8iE,GAE/Cd,GAAce,iBAEd,IAAMhR,EAAUjpC,EAAWhpB,IAAKE,GAE3BA,EAAOqgG,eAAkBtuC,EAAQ7jB,WAAW6jB,EAAQ7jB,SAAWq9C,GAAI/4B,gBACnExyD,EAAOsgG,aAAgBvuC,EAAQ1uB,SAAS0uB,EAAQ1uB,OAASkoD,GAAI/4B,gBAC7DxyD,EAAOugG,SAAYxuC,EAAQj3B,KAAKi3B,EAAQj3B,GAAKywD,GAAI/4B,gBACjDxyD,EAAOwgG,YAAezuC,EAAQpW,QAAQoW,EAAQpW,MAAQ4vC,GAAI/4B,gBAE/D,IAAMiS,EAAoB3B,EAAQ4B,gBAE7B1kE,EAAOqgG,eAEX9U,GAAI94B,WAAY,MAAOV,EAAQ7jB,UAC/Bq9C,GAAI74B,WAAY,MAAO1yD,EAAOygG,cAAe,OAE7Cz+B,GAAcgB,gBAAiByB,EAAkBv2B,UACjDq9C,GAAIjoB,oBAAqBmB,EAAkBv2B,SAAU,EAAG,MAAM,EAAO,EAAG,IAIpEluC,EAAOsgG,aAEX/U,GAAI94B,WAAY,MAAOV,EAAQ1uB,QAC/BkoD,GAAI74B,WAAY,MAAO1yD,EAAO0gG,YAAa,OAE3C1+B,GAAcgB,gBAAiByB,EAAkBphC,QACjDkoD,GAAIjoB,oBAAqBmB,EAAkBphC,OAAQ,EAAG,MAAM,EAAO,EAAG,IAIlErjC,EAAOugG,SAEXhV,GAAI94B,WAAY,MAAOV,EAAQj3B,IAC/BywD,GAAI74B,WAAY,MAAO1yD,EAAO2gG,QAAS,OAEvC3+B,GAAcgB,gBAAiByB,EAAkB3pC,IACjDywD,GAAIjoB,oBAAqBmB,EAAkB3pC,GAAI,EAAG,MAAM,EAAO,EAAG,IAI9D96B,EAAOwgG,YAEXjV,GAAI94B,WAAY,MAAOV,EAAQpW,OAC/B4vC,GAAI74B,WAAY,MAAO1yD,EAAO4gG,WAAY,OAE1C5+B,GAAcgB,gBAAiByB,EAAkB9oB,OACjD4vC,GAAIjoB,oBAAqBmB,EAAkB9oB,MAAO,EAAG,MAAM,EAAO,EAAG,IAItEqmB,GAAcoB,0BAEdmoB,GAAI3lB,WAAY,EAAG,EAAG5lE,EAAOukC,OAE7BvkC,EAAOukC,MAAQ,GAIhBxlC,KAAKwkF,mBAAqB,SAAWrhD,EAAQisB,EAAO7oB,EAAUsP,EAAU50C,EAAQ0c,GAEhE,OAAVyxC,IAAiBA,EAAQqvC,GAE9B,IAAM3S,EAAgB7qF,EAAOm0C,QAAUn0C,EAAOuiC,YAAYmM,cAAgB,EAEpEo0B,EAAU+9B,GAAY3+D,EAAQisB,EAAOvZ,EAAU50C,GAErD0E,EAAMkmF,YAAah2C,EAAUi2C,GAI7B,IAAIjgF,EAAQ06B,EAAS16B,MACfsjC,EAAW5I,EAAS9c,WAAW0lB,SAIrC,GAAe,OAAVtjC,GAEJ,QAAkBtJ,IAAb4sC,GAA6C,IAAnBA,EAAS3J,MAAc,YAEhD,GAAqB,IAAhB35B,EAAM25B,MAEjB,OAMD,IAiBIhf,EAjBAu7E,EAAc,GAEU,IAAvBlsD,EAAS0J,YAEb1zC,EAAQ4oC,EAAWs2B,sBAAuBxkC,GAC1Cw7D,EAAc,IAIVlsD,EAAS8J,cAAgB9J,EAAS+J,eAEtCk/C,GAAa71E,OAAQhoB,EAAQslC,EAAUsP,EAAUkuB,GAIlDd,GAAc2B,MAAO3jE,EAAQ40C,EAAUkuB,EAASx9B,EAAU16B,GAG1D,IAAIsjD,EAAW4vC,GAEA,OAAVlzF,IAEJ2a,EAAYiD,EAAW1oB,IAAK8K,IAE5BsjD,EAAW6vC,IACF/2C,SAAUzhC,IAMpB,IAAMw7E,EAAwB,OAAVn2F,EAAmBA,EAAM25B,MAAQ2J,EAAS3J,MAExDy8D,EAAa17D,EAAS4d,UAAUzN,MAAQqrD,EACxCG,EAAa37D,EAAS4d,UAAU3e,MAAQu8D,EAExCj3C,EAAuB,OAAVntC,EAAiBA,EAAM+4B,MAAQqrD,EAAc,EAC1Dn2C,EAAuB,OAAVjuC,EAAiBA,EAAM6nB,MAAQu8D,EAAc98D,IAE1Dk9D,EAAYrxF,KAAKkE,IAAKitF,EAAYn3C,GAClCs3C,EAAUtxF,KAAKiE,IAAKitF,EAAWC,EAAaC,EAAYp3C,EAAac,GAAe,EAEpFy2C,EAAYvxF,KAAKkE,IAAK,EAAGotF,EAAUD,EAAY,GAErD,GAAmB,IAAdE,EAAL,CAIA,GAAKphG,EAAOm0C,QAEiB,IAAvBS,EAAS0J,WAEb55C,EAAMomF,aAAcl2C,EAAS2J,mBAAqBm/C,KAClDxvC,EAASyX,QAAS,IAIlBzX,EAASyX,QAAS,QAIb,GAAK3lE,EAAOo0C,OAAS,CAE3B,IAAI22C,EAAYn2C,EAASuJ,eAEN78C,IAAdypF,IAA0BA,EAAY,GAE3CrmF,EAAMomF,aAAcC,EAAY2S,KAE3B19F,EAAOqhG,eAEXnzC,EAASyX,QAAS,GAEP3lE,EAAOshG,WAElBpzC,EAASyX,QAAS,GAIlBzX,EAASyX,QAAS,QAIR3lE,EAAOq0C,SAElB6Z,EAASyX,QAAS,GAEP3lE,EAAOuhG,UAElBrzC,EAASyX,QAAS,GAInB,GAAK3lE,EAAOg0C,gBAEXka,EAAS2X,gBAAiBq7B,EAAWE,EAAWphG,EAAOukC,YAEjD,GAAKe,EAASk/B,0BAA4B,CAEhD,IAAMgG,EAAgB36D,KAAKiE,IAAKwxB,EAASklC,cAAellC,EAASw/B,mBAEjE5W,EAAS2X,gBAAiBq7B,EAAWE,EAAW52B,QAIhDtc,EAAS3pD,OAAQ28F,EAAWE,KAQ9BriG,KAAK6c,QAAU,SAAWuyC,EAAOjsB,IAEhC45D,EAAqBra,GAAa3hF,IAAKquD,IACpBma,OAEnBna,EAAMjb,iBAAiB,SAAWlzC,GAE5BA,EAAO0yC,SAAW1yC,EAAOowC,OAAOh7B,KAAM8sB,EAAOkO,UAEjD0rD,EAAmBza,UAAWrhF,GAEzBA,EAAO2xC,YAEXmqD,EAAmBxa,WAAYthF,OAQlC87F,EAAmB3a,cAEnBhzB,EAAMlb,UAAU,SAAWjzC,GAE1B,IAAM40C,EAAW50C,EAAO40C,SAExB,GAAKA,EAEJ,GAAK9yC,MAAMC,QAAS6yC,GAEnB,IAAM,IAAIt3C,EAAI,EAAGA,EAAIs3C,EAASr3C,OAAQD,IAAO,CAI5CkkG,GAFkB5sD,EAAUt3C,GAEL6wD,EAAOnuD,QAM/BwhG,GAAY5sD,EAAUuZ,EAAOnuD,OAYjC,IAAIy4F,GAA2B,KAQ/B,SAASyH,KAERprD,GAAUyc,OAIX,SAAS4uC,KAERrrD,GAAUW,QAIX,IAAMX,GAAY,IAAIic,GAsLtB,SAAS0wC,GAAezhG,EAAQkiC,EAAQ86C,EAAYkf,GAEnD,IAAwB,IAAnBl8F,EAAO0xC,QAAZ,CAIA,GAFgB1xC,EAAOowC,OAAOh7B,KAAM8sB,EAAOkO,QAI1C,GAAKpwC,EAAOsyF,QAEXtV,EAAah9E,EAAO8xC,iBAEd,GAAK9xC,EAAO0hG,OAES,IAAtB1hG,EAAO2kF,YAAsB3kF,EAAOgoB,OAAQka,QAE3C,GAAKliC,EAAO0yC,QAElBopD,EAAmBza,UAAWrhF,GAEzBA,EAAO2xC,YAEXmqD,EAAmBxa,WAAYthF,QAI1B,GAAKA,EAAOuhG,UAElB,IAAOvhG,EAAO6xC,eAAiBowC,EAAS0f,iBAAkB3hG,GAAW,CAE/Dk8F,GAEJqB,EAAS/qD,sBAAuBxyC,EAAOuiC,aACrCJ,aAAcm7D,GAIjB,IAAMh4D,EAAW06B,EAAQh4C,OAAQhoB,GAC3B40C,EAAW50C,EAAO40C,SAEnBA,EAASlD,SAEbmqD,EAAkB34F,KAAMlD,EAAQslC,EAAUsP,EAAUooC,EAAYugB,EAASliE,EAAG,YAMxE,GAAKr7B,EAAO4hG,wBAEb1F,GAEJqB,EAAS/qD,sBAAuBxyC,EAAOuiC,aACrCJ,aAAcm7D,GAIjBzB,EAAkB34F,KAAMlD,EAAQ,KAAMA,EAAO40C,SAAUooC,EAAYugB,EAASliE,EAAG,WAEzE,IAAKr7B,EAAOm0C,QAAUn0C,EAAOo0C,QAAUp0C,EAAOq0C,YAE/Cr0C,EAAOw0C,eAINx0C,EAAO20C,SAAS0c,QAAUzwD,EAAK2D,OAAO8sD,QAE1CrxD,EAAO20C,SAAS3sB,SAChBhoB,EAAO20C,SAAS0c,MAAQzwD,EAAK2D,OAAO8sD,QAM/BrxD,EAAO6xC,eAAiBowC,EAASuC,iBAAkBxkF,IAAW,CAE/Dk8F,GAEJqB,EAAS/qD,sBAAuBxyC,EAAOuiC,aACrCJ,aAAcm7D,GAIjB,IAAMh4D,EAAW06B,EAAQh4C,OAAQhoB,GAC3B40C,EAAW50C,EAAO40C,SAExB,GAAK9yC,MAAMC,QAAS6yC,GAInB,IAFA,IAAMr2B,EAAS+mB,EAAS/mB,OAEdjhB,EAAI,EAAGyK,EAAIwW,EAAOhhB,OAAQD,EAAIyK,EAAGzK,IAAO,CAEjD,IAAMof,EAAQ6B,EAAQjhB,GAChBsrD,EAAgBhU,EAAUl4B,EAAMymC,eAEjCyF,GAAiBA,EAAclX,SAEnCmqD,EAAkB34F,KAAMlD,EAAQslC,EAAUsjB,EAAeo0B,EAAYugB,EAASliE,EAAG3e,QAMxEk4B,EAASlD,SAEpBmqD,EAAkB34F,KAAMlD,EAAQslC,EAAUsP,EAAUooC,EAAYugB,EAASliE,EAAG,MAYhF,IAFA,IAAMv2B,EAAW9E,EAAO8E,SAEdxH,EAAI,EAAGyK,EAAIjD,EAASvH,OAAQD,EAAIyK,EAAGzK,IAE5CmkG,GAAe38F,EAAUxH,GAAK4kC,EAAQ86C,EAAYkf,IAMpD,SAAS2F,GAAehhC,EAAY1S,EAAOjsB,GAI1C,IAFA,IAAMu7D,GAAqC,IAAlBtvC,EAAM4S,QAAmB5S,EAAMsvC,iBAAmB,KAEjEngG,EAAI,EAAGyK,EAAI84D,EAAWtjE,OAAQD,EAAIyK,EAAGzK,IAAO,CAErD,IAAMkgF,EAAa3c,EAAYvjE,GAEzB0C,EAASw9E,EAAWx9E,OACpBslC,EAAWk4C,EAAWl4C,SACtBsP,EAAgC,OAArB6oD,EAA4BjgB,EAAW5oC,SAAW6oD,EAC7D/gF,EAAQ8gE,EAAW9gE,MAEzB,GAAKwlB,EAAOkwD,cAIX,IAFA,IAAMD,EAAUjwD,EAAOiwD,QAEbj0E,EAAI,EAAGgmC,EAAKiuC,EAAQ50F,OAAQ2gB,EAAIgmC,EAAIhmC,IAAO,CAEpD,IAAM4jF,EAAU3P,EAASj0E,GAEpBle,EAAOowC,OAAOh7B,KAAM0sF,EAAQ1xD,UAEhC1rC,EAAMq4B,SAAU2/D,EAAiBxiE,KAAM4nE,EAAQ/kE,WAE/C++D,EAAmB1a,gBAAiB0gB,GAEpCxd,GAActkF,EAAQmuD,EAAO2zC,EAASx8D,EAAUsP,EAAUl4B,SAQ5D4nE,GAActkF,EAAQmuD,EAAOjsB,EAAQoD,EAAUsP,EAAUl4B,IAQ5D,SAAS4nE,GAActkF,EAAQmuD,EAAOjsB,EAAQoD,EAAUsP,EAAUl4B,GAOjE,GALA1c,EAAOwhE,eAAgBlnD,EAAO6zC,EAAOjsB,EAAQoD,EAAUsP,EAAUl4B,GAEjE1c,EAAOsxC,gBAAgBnc,iBAAkB+M,EAAOE,mBAAoBpiC,EAAOuiC,aAC3EviC,EAAOuxC,aAAauE,gBAAiB91C,EAAOsxC,iBAEvCtxC,EAAO4hG,wBAA0B,CAErC,IAAM9+B,EAAU+9B,GAAY3+D,EAAQisB,EAAOvZ,EAAU50C,GAErD0E,EAAMkmF,YAAah2C,GAEnBotB,GAAcyB,QAzoBhB,SAAgCzjE,EAAQ8iE,GAEvC9iE,EAAOuE,QAAQ,SAAWvE,GAEzBsa,EAAM8lF,sBAAuBpgG,EAAQ8iE,MAuoBrCi/B,CAAuB/hG,EAAQ8iE,QAI/BxoD,EAAMipE,mBAAoBrhD,EAAQisB,EAAO7oB,EAAUsP,EAAU50C,EAAQ0c,GAItE1c,EAAOgiG,cAAe1nF,EAAO6zC,EAAOjsB,EAAQoD,EAAUsP,EAAUl4B,GAIjE,SAAS8kF,GAAY5sD,EAAUuZ,EAAOnuD,IAEd,IAAlBmuD,EAAM4S,UAAmB5S,EAAQqvC,GAEtC,IAAM70B,EAAqB7/C,EAAWhpB,IAAK80C,GAErCyW,EAASywC,EAAmBp3F,MAAM2mD,OAClC61B,EAAe4a,EAAmBp3F,MAAMw8E,aAExC+gB,EAAqB52C,EAAO3mD,MAAMs1B,QAElCsa,EAAaqpD,EAAahiB,cAAe/mC,EAAUyW,EAAO3mD,MAAOw8E,EAAc/yB,EAAOnuD,GACtFkiG,EAAkBvE,EAAalhB,mBAAoBnoC,GAErDg2B,EAAW3B,EAAmB2B,SAIlC3B,EAAmBkT,YAAcjnC,EAASknC,uBAAyB3tB,EAAM0tB,YAAc,KACvFlT,EAAmB9vB,IAAMsV,EAAMtV,IAC/B8vB,EAAmB/qB,OAASmiB,EAASjgE,IAAK80C,EAASgJ,QAAU+qB,EAAmBkT,kBAE9Dv6E,IAAbgpE,IAIJ11B,EAASvjC,iBAAkB,UAAWutF,IAEtCt0B,EAAW,IAAIpkD,IACfyiD,EAAmB2B,SAAWA,GAI/B,IAAIxH,EAAUwH,EAASxqE,IAAKoiG,GAE5B,QAAiB5gG,IAAZwhE,GAIJ,GAAK6F,EAAmBof,iBAAmBjlB,GAAW6F,EAAmBs5B,qBAAuBA,EAI/F,OAFAE,GAAgCvtD,EAAUN,GAEnCwuB,OAMRxuB,EAAWwW,SAAW6yC,EAAatyB,YAAaz2B,GAEhDA,EAASuG,QAAS7G,EAAYh6B,GAE9Bs6B,EAASwG,gBAAiB9G,EAAYh6B,GAEtCwoD,EAAU66B,EAAajhB,eAAgBpoC,EAAY4tD,GACnD53B,EAAS3wD,IAAKuoF,EAAiBp/B,GAE/B6F,EAAmB7d,SAAWxW,EAAWwW,SAI1C,IAAMA,EAAW6d,EAAmB7d,UAE3BlW,EAASoX,kBAAsBpX,EAAS0iC,uBAA+C,IAAtB1iC,EAAS0W,WAElFR,EAAS1Q,eAAiBkR,GAASqc,SAIpCw6B,GAAgCvtD,EAAUN,GAI1Cq0B,EAAmBy5B,YAoXpB,SAA8BxtD,GAE7B,OAAOA,EAAS2kD,uBAAyB3kD,EAAS6kD,oBAAsB7kD,EAAS+kD,qBAChF/kD,EAASknC,wBAA0BlnC,EAASimD,kBAC1CjmD,EAASoX,mBAAwC,IAApBpX,EAASyW,OAxXRg3C,CAAqBztD,GACtD+zB,EAAmBs5B,mBAAqBA,EAEnCt5B,EAAmBy5B,cAIvBt3C,EAASkS,kBAAkBx+D,MAAQ6sD,EAAO3mD,MAAMw6E,QAChDp0B,EAASmS,WAAWz+D,MAAQ6sD,EAAO3mD,MAAMy6E,MACzCr0B,EAASoS,kBAAkB1+D,MAAQ6sD,EAAO3mD,MAAM03E,YAChDtxB,EAASqS,wBAAwB3+D,MAAQ6sD,EAAO3mD,MAAM06E,kBACtDt0B,EAAS4S,WAAWl/D,MAAQ6sD,EAAO3mD,MAAM23E,KACzCvxB,EAASgT,iBAAiBt/D,MAAQ6sD,EAAO3mD,MAAM26E,WAC/Cv0B,EAAS4T,eAAelgE,MAAQ6sD,EAAO3mD,MAAM43E,SAC7CxxB,EAAS6T,MAAMngE,MAAQ6sD,EAAO3mD,MAAM46E,aACpCx0B,EAAS8T,MAAMpgE,MAAQ6sD,EAAO3mD,MAAM66E,aACpCz0B,EAASmT,YAAYz/D,MAAQ6sD,EAAO3mD,MAAMwgC,MAC1C4lB,EAASoT,kBAAkB1/D,MAAQ6sD,EAAO3mD,MAAM86E,YAChD10B,EAASyT,iBAAiB//D,MAAQ6sD,EAAO3mD,MAAM63E,KAE/CzxB,EAAS0S,qBAAqBh/D,MAAQ6sD,EAAO3mD,MAAM84D,qBACnD1S,EAAS2S,wBAAwBj/D,MAAQ6sD,EAAO3mD,MAAM+4D,wBACtD3S,EAASiT,cAAcv/D,MAAQ6sD,EAAO3mD,MAAMq5D,cAC5CjT,EAASkT,iBAAiBx/D,MAAQ6sD,EAAO3mD,MAAMs5D,iBAC/ClT,EAASuT,eAAe7/D,MAAQ6sD,EAAO3mD,MAAM25D,eAC7CvT,EAASwT,kBAAkB9/D,MAAQ6sD,EAAO3mD,MAAM45D,mBAKjD,IAAMgkC,EAAex/B,EAAQuI,cACvBk3B,EAAe/vB,GAAcS,aAAcqvB,EAAa1wB,IAAK9mB,GAKnE,OAHA6d,EAAmBof,eAAiBjlB,EACpC6F,EAAmB45B,aAAeA,EAE3Bz/B,EAIR,SAASq/B,GAAgCvtD,EAAUN,GAElD,IAAMq0B,EAAqB7/C,EAAWhpB,IAAK80C,GAE3C+zB,EAAmBkQ,eAAiBvkC,EAAWukC,eAC/ClQ,EAAmB6O,WAAaljC,EAAWkjC,WAC3C7O,EAAmB8L,kBAAoBngC,EAAWmgC,kBAClD9L,EAAmBb,gBAAkBxzB,EAAWogC,oBAChD/L,EAAmBqP,aAAe1jC,EAAW0jC,aAI9C,SAAS6oB,GAAY3+D,EAAQisB,EAAOvZ,EAAU50C,IAEtB,IAAlBmuD,EAAM4S,UAAmB5S,EAAQqvC,GAEtCnjE,EAASu2D,oBAET,IAAM/3C,EAAMsV,EAAMtV,IACZgjC,EAAcjnC,EAASknC,uBAAyB3tB,EAAM0tB,YAAc,KACpEtiD,EAAsC,OAAzBgjE,EAAkCjiF,EAAMu+D,eAAiB0jB,EAAqBv/D,QAAQzD,SACnGqkB,EAASmiB,EAASjgE,IAAK80C,EAASgJ,QAAUi+B,GAC1C7D,GAAyC,IAA1BpjC,EAASoE,cAAyBh5C,EAAOslC,UAAYtlC,EAAOslC,SAAS9c,WAAWmzB,OAAuD,IAA9C37C,EAAOslC,SAAS9c,WAAWmzB,MAAMyF,SAEzIunB,EAAqB7/C,EAAWhpB,IAAK80C,GACrCyW,EAASywC,EAAmBp3F,MAAM2mD,OAExC,IAA0B,IAArB+xC,KAE2B,IAA1BC,GAAkCn7D,IAAWu6D,GAAiB,CAElE,IAAM/zB,EACLxmC,IAAWu6D,GACX7nD,EAAS7B,KAAOypD,EAKjBlxC,GAASt7C,SAAU4kC,EAAU1S,EAAQwmC,GAQvC,IAAI85B,GAAqB,EAEpB5tD,EAAS5a,UAAY2uC,EAAmBolB,UAEvCplB,EAAmBy5B,aAAiBz5B,EAAmBs5B,qBAAuB52C,EAAO3mD,MAAMs1B,SAIpF2uC,EAAmBkQ,iBAAmBt/C,GAItCv5B,EAAOg0C,kBAAqD,IAAlC20B,EAAmB6O,WANxDgrB,GAAqB,EAURxiG,EAAOg0C,kBAAqD,IAAlC20B,EAAmB6O,WAI/C7O,EAAmB/qB,SAAWA,GAI9BhJ,EAASiE,KAAO8vB,EAAmB9vB,MAAQA,EAFtD2pD,GAAqB,OAM+BlhG,IAAzCqnE,EAAmB8L,mBAC5B9L,EAAmB8L,oBAAsBnpB,GAASuc,WACpDc,EAAmBb,kBAAoBxc,GAASwc,gBAIrCa,EAAmBqP,eAAiBA,IAE/CwqB,GAAqB,GAJrBA,GAAqB,EAdrBA,GAAqB,GAwBtBA,GAAqB,EACrB75B,EAAmBolB,UAAYn5C,EAAS5a,SAMzC,IAAI8oC,EAAU6F,EAAmBof,gBAEL,IAAvBya,IAEJ1/B,EAAU0+B,GAAY5sD,EAAUuZ,EAAOnuD,IAIxC,IAqNuC8qD,EAAUtsD,EArN7CikG,GAAiB,EACjBC,GAAkB,EAClBC,GAAgB,EAEdC,EAAa9/B,EAAQuI,cAC1Bw3B,EAAal6B,EAAmB7d,SAkBjC,GAhBKpmD,EAAMimF,WAAY7nB,EAAQA,WAE9B2/B,GAAiB,EACjBC,GAAkB,EAClBC,GAAgB,GAIZ/tD,EAAS7B,KAAOypD,IAEpBA,EAAqB5nD,EAAS7B,GAE9B2vD,GAAkB,GAIdD,GAAkBhG,IAAmBv6D,EAAS,CA2BlD,GAzBA0gE,EAAWt3B,SAAUigB,GAAK,mBAAoBrpD,EAAOG,kBAEhDwvB,EAAayU,wBAEjBs8B,EAAWt3B,SAAUigB,GAAK,gBACzB,GAAQ17E,KAAKggB,IAAKqS,EAAOmN,IAAM,GAAQx/B,KAAKigB,MAIzC2sE,IAAmBv6D,IAEvBu6D,EAAiBv6D,EAMjBwgE,GAAkB,EAClBC,GAAgB,GAOZ/tD,EAASoX,kBACbpX,EAAS+kD,qBACT/kD,EAAS6kD,oBACT7kD,EAASknC,wBACTlnC,EAASgJ,OAAS,CAElB,IAAMklD,EAAUF,EAAWtuF,IAAIyuF,oBAEdzhG,IAAZwhG,GAEJA,EAAQx3B,SAAUigB,GACjBgS,EAAS/qD,sBAAuBtQ,EAAOK,eAMrCqS,EAAS+kD,qBACb/kD,EAAS6kD,oBACT7kD,EAAS2kD,uBACT3kD,EAASoM,qBACTpM,EAASknC,wBACTlnC,EAASoX,mBAET42C,EAAWt3B,SAAUigB,GAAK,kBAAkD,IAAhCrpD,EAAO8gE,uBAI/CpuD,EAAS+kD,qBACb/kD,EAAS6kD,oBACT7kD,EAAS2kD,uBACT3kD,EAASoM,qBACTpM,EAASknC,wBACTlnC,EAASoX,kBACTpX,EAASimD,kBACTjmD,EAASgK,WAETgkD,EAAWt3B,SAAUigB,GAAK,aAAcrpD,EAAOE,oBAUjD,GAAKwS,EAASgK,SAAW,CAExBgkD,EAAW5vB,YAAauY,GAAKvrF,EAAQ,cACrC4iG,EAAW5vB,YAAauY,GAAKvrF,EAAQ,qBAErC,IAAM20C,EAAW30C,EAAO20C,SAExB,GAAKA,EAAW,CAEf,IAAMonC,EAAQpnC,EAASonC,MAEvB,GAAKlqB,EAAasV,oBAAsB,CAEvC,GAA8B,OAAzBxyB,EAASsuD,YAAuB,CAUpC,IAAI56E,EAAOxY,KAAKujB,KAAqB,EAAf2oD,EAAMx+E,QAC5B8qB,EAAOqH,GAAgBrH,GACvBA,EAAOxY,KAAKkE,IAAKsU,EAAM,GAEvB,IAAM66E,EAAe,IAAI5gD,aAAcj6B,EAAOA,EAAO,GACrD66E,EAAavpF,IAAKg7B,EAASuuD,cAE3B,IAAMD,EAAc,IAAI7zC,GAAa8zC,EAAc76E,EAAMA,EAAMyE,GAAYJ,IAE3EioB,EAASuuD,aAAeA,EACxBvuD,EAASsuD,YAAcA,EACvBtuD,EAASwuD,gBAAkB96E,EAI5Bu6E,EAAWt3B,SAAUigB,GAAK,cAAe52C,EAASsuD,YAAa5oE,GAC/DuoE,EAAWt3B,SAAUigB,GAAK,kBAAmB52C,EAASwuD,sBAItDP,EAAW5vB,YAAauY,GAAK52C,EAAU,iBAmE1C,OA3DK+tD,GAAmB/5B,EAAmB/2B,gBAAkB5xC,EAAO4xC,iBAEnE+2B,EAAmB/2B,cAAgB5xC,EAAO4xC,cAC1CgxD,EAAWt3B,SAAUigB,GAAK,gBAAiBvrF,EAAO4xC,gBAI9C8wD,IAEJE,EAAWt3B,SAAUigB,GAAK,sBAAuBjxE,EAAM6hF,qBAElDxzB,EAAmBy5B,cAsDwB5jG,EA3CJmkG,GA2CN73C,EA3CN+3C,GA6CxB7lC,kBAAkB5Z,YAAc5kD,EACzCssD,EAASmS,WAAW7Z,YAAc5kD,EAElCssD,EAASoS,kBAAkB9Z,YAAc5kD,EACzCssD,EAASqS,wBAAwB/Z,YAAc5kD,EAC/CssD,EAASmT,YAAY7a,YAAc5kD,EACnCssD,EAASoT,kBAAkB9a,YAAc5kD,EACzCssD,EAAS4S,WAAWta,YAAc5kD,EAClCssD,EAASgT,iBAAiB1a,YAAc5kD,EACxCssD,EAAS4T,eAAetb,YAAc5kD,EACtCssD,EAASyT,iBAAiBnb,YAAc5kD,GAjDlCq6C,GAAOjE,EAASiE,KAEpBpF,EAAUylD,mBAAoB2J,EAAYhqD,GAI3CpF,EAAU4lD,wBAAyBwJ,EAAYjuD,EAAUmoD,EAAaD,GAEtEtqB,GAAc3vD,OAAQ0oE,GAAK5iB,EAAmB45B,aAAcM,EAAYxoE,IAIpEua,EAASoX,mBAAoD,IAAhCpX,EAASkX,qBAE1C0mB,GAAc3vD,OAAQ0oE,GAAK5iB,EAAmB45B,aAAcM,EAAYxoE,GACxEua,EAASkX,oBAAqB,GAI1BlX,EAAS+lD,kBAEbiI,EAAWt3B,SAAUigB,GAAK,SAAUvrF,EAAOg0B,QAM5C4uE,EAAWt3B,SAAUigB,GAAK,kBAAmBvrF,EAAOsxC,iBACpDsxD,EAAWt3B,SAAUigB,GAAK,eAAgBvrF,EAAOuxC,cACjDqxD,EAAWt3B,SAAUigB,GAAK,cAAevrF,EAAOuiC,aAEzCugC,EAhyBRhuB,GAAU2c,kBAnBV,SAA2BL,GAErBqnC,IAA2BA,GAA0BrnC,MAmBpC,qBAAXhoD,QAAyB0rC,GAAU4c,WAAYtoD,QAE3DrK,KAAK0yD,iBAAmB,SAAW7jD,GAElC6qF,GAA2B7qF,EAC3Boc,GAAGynC,iBAAkB7jD,GAEN,OAAbA,EAAsBknC,GAAUyc,OAASzc,GAAUW,SAItDzrB,GAAG3Y,iBAAkB,eAAgB6uF,IACrCl2E,GAAG3Y,iBAAkB,aAAc8uF,IAInCphG,KAAKwF,OAAS,SAAW4pD,EAAOjsB,GAE/B,IAAIwrB,EAAcoT,EAgBlB,QAdwBx/D,IAAnBpC,UAAW,KAEfmlB,QAAQM,KAAM,6GACd+oC,EAAexuD,UAAW,SAIHoC,IAAnBpC,UAAW,KAEfmlB,QAAQM,KAAM,iGACdm8C,EAAa5hE,UAAW,SAIToC,IAAX4gC,IAA4C,IAApBA,EAAOuQ,UAOpC,IAAwB,IAAnB2pD,EAAL,EAI0B,IAArBjuC,EAAMw2B,YAAsBx2B,EAAM9a,oBAIhB,OAAlBnR,EAAOiP,QAAkBjP,EAAOmR,qBAEjB,IAAfrpB,GAAGkjC,UAAwC,IAApBljC,GAAGyrE,eAE9BvzD,EAASlY,GAAGotE,UAAWl1D,KAKD,IAAlBisB,EAAM4S,SAAmB5S,EAAMqT,eAAgBlnD,EAAO6zC,EAAOjsB,EAAQwrB,GAAgB6uC,IAE1FT,EAAqBra,GAAa3hF,IAAKquD,EAAO6tC,EAAiBz+F,SAC5C+qE,OAEnB0zB,EAAiB94F,KAAM44F,GAEvBwB,EAAkBnoE,iBAAkB+M,EAAOG,iBAAkBH,EAAOE,oBACpE6/C,EAASmhB,wBAAyB9F,GAElCD,EAAwBt+F,KAAKyoE,qBAC7B41B,EAAmB9xC,GAASgd,KAAMvpE,KAAKq7C,eAAgBijD,EAAuBn7D,IAE9E25D,EAAoB+B,EAAY99F,IAAKquD,EAAO4tC,EAAgBx+F,SAC1C+qE,OAElByzB,EAAgB74F,KAAM24F,GAEtB4F,GAAetzC,EAAOjsB,EAAQ,EAAG5nB,EAAM4hF,aAEvCL,EAAkBpe,UAES,IAAtBnjE,EAAM4hF,aAEVL,EAAkB7wB,KAAMgyB,EAAaC,IAMZ,IAArBG,GAA4B9xC,GAASkd,eAE1C,IAAM0Y,EAAe4a,EAAmBp3F,MAAMw8E,aAE9C1E,GAAUj4E,OAAQ28E,EAAc/yB,EAAOjsB,GAEvC45D,EAAmB3a,cACnB2a,EAAmB1a,gBAAiBl/C,IAEV,IAArBk7D,GAA4B9xC,GAASmd,cAIb,IAAxB1pE,KAAK6B,KAAK2pE,WAAqBxrE,KAAK6B,KAAK6iE,aAExBniE,IAAjBosD,GAEJ3uD,KAAKwvD,gBAAiBb,GAMvB2R,GAAW96D,OAAQs3F,EAAmB1tC,EAAOjsB,EAAQ4+B,GAIrD,IAAMuiC,EAAgBxH,EAAkBxe,OAClCimB,EAAqBzH,EAAkB3iD,YAExCmqD,EAAc9lG,OAAS,GAAIskG,GAAewB,EAAel1C,EAAOjsB,GAChEohE,EAAmB/lG,OAAS,GAAIskG,GAAeyB,EAAoBn1C,EAAOjsB,GAIjD,OAAzBq6D,IAIJliE,EAAS42D,yBAA0BsL,GAInCliE,EAAS62D,8BAA+BqL,KAMlB,IAAlBpuC,EAAM4S,SAAmB5S,EAAM6zC,cAAe1nF,EAAO6zC,EAAOjsB,GAIjEx9B,EAAMqtD,QAAQn1B,MAAMsoD,SAAS,GAC7BxgF,EAAMqtD,QAAQn1B,MAAMupD,SAAS,GAC7BzhF,EAAMqtD,QAAQpW,MAAMwqC,SAAS,GAE7BzhF,EAAM0lF,kBAAkB,GAIxBpoB,GAAc0B,oBACd84B,GAAuB,EACvBC,EAAiB,KAEjBT,EAAiBlxF,MAIhBgxF,EAFIE,EAAiBz+F,OAAS,EAETy+F,EAAkBA,EAAiBz+F,OAAS,GAI5C,KAItBw+F,EAAgBjxF,MAIf+wF,EAFIE,EAAgBx+F,OAAS,EAETw+F,EAAiBA,EAAgBx+F,OAAS,GAI1C,WAzIpB8mB,QAAQxjB,MAAO,2EAwxBjB9B,KAAK8lF,kBAAoB,WAExB,OAAOwX,GAIRt9F,KAAKgmF,qBAAuB,WAE3B,OAAOuX,GAIRv9F,KAAKuvD,gBAAkB,WAEtB,OAAOiuC,GAIRx9F,KAAKwvD,gBAAkB,SAAWb,GAA0D,IAA5Ck3B,EAA4C,uDAA3B,EAAGE,EAAwB,uDAAJ,EAEvFyX,EAAuB7uC,EACvB2uC,EAAyBzX,EACzB0X,EAA4BxX,EAEvBp3B,QAAsEpsD,IAAtDwnB,EAAWhpB,IAAK4tD,GAAe0/B,oBAEnD/yD,EAASw2D,kBAAmBnjC,GAI7B,IAAI+8B,EAAc,KACd2F,GAAS,EACTU,GAAmB,EAEvB,GAAKpjC,EAAe,CAEnB,IAAM1wB,EAAU0wB,EAAa1wB,SAExBA,EAAQovC,iBAAmBpvC,EAAQkvC,wBAEvC4kB,GAAmB,GAIpB,IAAM1D,EAAqBtkE,EAAWhpB,IAAK4tD,GAAe0/B,mBAErD1/B,EAAaC,yBAEjB88B,EAAc2C,EAAoBxI,GAClCwL,GAAS,GAIT3F,EAFW/8B,EAAa8iC,+BAEV1nE,EAAWhpB,IAAK4tD,GAAe6/B,+BAI/BH,EAIfsP,EAAiBxiE,KAAMwzB,EAAa3wB,UACpC4/D,EAAgBziE,KAAMwzB,EAAa7wB,SACnC+/D,EAAsBlvC,EAAa5wB,iBAInC4/D,EAAiBxiE,KAAMkoD,GAAYtvD,eAAgBiqE,GAAc/sE,QACjE2sE,EAAgBziE,KAAMgjE,GAAWpqE,eAAgBiqE,GAAc/sE,QAC/D4sE,EAAsBO,EAUvB,GANAz4F,EAAM8lF,gBAAiB,MAAOC,GAE9B/lF,EAAMq4B,SAAU2/D,GAChBh4F,EAAMm4B,QAAS8/D,GACfj4F,EAAMygF,eAAgByX,GAEjBxM,EAAS,CAEb,IAAMzD,EAAoB7jE,EAAWhpB,IAAK4tD,EAAa1wB,SACvDuuD,GAAIkE,qBAAsB,MAAO,MAAO,MAAQ7K,EAAgB+H,EAAkBG,eAAgBhI,QAE5F,GAAKgM,EAAmB,CAE9B,IAAMnE,EAAoB7jE,EAAWhpB,IAAK4tD,EAAa1wB,SACjDumE,EAAQ3e,GAAkB,EAChC2G,GAAIiY,wBAAyB,MAAO,MAAO7W,EAAkBG,eAAgBhI,GAAqB,EAAGye,KAMvGxkG,KAAK0kG,uBAAyB,SAAW/1C,EAAc7yC,EAAGC,EAAGud,EAAOC,EAAQ/vB,EAAQm7F,GAEnF,GAASh2C,GAAgBA,EAAapwB,oBAAtC,CAOA,IAAImtD,EAAc3hE,EAAWhpB,IAAK4tD,GAAe0/B,mBAQjD,GANK1/B,EAAaC,8BAAmDrsD,IAAxBoiG,IAE5CjZ,EAAcA,EAAaiZ,IAIvBjZ,EAAc,CAElB/lF,EAAM8lF,gBAAiB,MAAOC,GAE9B,IAEC,IAAMztD,EAAU0wB,EAAa1wB,QACvB2mE,EAAgB3mE,EAAQ3D,OACxB21D,EAAchyD,EAAQhY,KAE5B,GAAK2+E,IAAkB72E,IAAclO,GAAM4vE,QAASmV,KAAoBpY,GAAI1pB,aAAc,OAGzF,YADAx9C,QAAQxjB,MAAO,6GAKhB,IAAM+iG,EAA4B5U,IAAgBriE,KAAqB4+B,EAAWhkC,IAAK,gCAAqCsqC,EAAaC,UAAYvG,EAAWhkC,IAAK,2BAErK,GAAKynE,IAAgBziE,GAAoB3N,GAAM4vE,QAASQ,KAAkBzD,GAAI1pB,aAAc,SACvFmtB,IAAgBtiE,MAAemlC,EAAaC,UAAYvG,EAAWhkC,IAAK,sBAAyBgkC,EAAWhkC,IAAK,gCACnHq8E,EAGF,YADAv/E,QAAQxjB,MAAO,uHAK6B,QAAxC0qF,GAAIsY,uBAAwB,OAIzBhpF,GAAK,GAAKA,GAAO6yC,EAAar1B,MAAQA,GAAevd,GAAK,GAAKA,GAAO4yC,EAAap1B,OAASA,GAElGizD,GAAIuY,WAAYjpF,EAAGC,EAAGud,EAAOC,EAAQ1Z,GAAM4vE,QAASmV,GAAiB/kF,GAAM4vE,QAASQ,GAAezmF,GAMpG8b,QAAQxjB,MAAO,8GApCjB,QA4CC,IAAM4pF,EAAyC,OAAzB8R,EAAkCzzE,EAAWhpB,IAAKy8F,GAAuBnP,mBAAqB,KACpH1oF,EAAM8lF,gBAAiB,MAAOC,UA9D/BpmE,QAAQxjB,MAAO,6FAsEjB9B,KAAKglG,yBAA2B,SAAW71D,EAAUlR,GAAqB,IAAZgnE,EAAY,uDAAJ,EAE/DC,EAAap0F,KAAK8f,IAAK,GAAKq0E,GAC5B3rE,EAAQxoB,KAAKmgB,MAAOgN,EAAQhF,MAAMK,MAAQ4rE,GAC1C3rE,EAASzoB,KAAKmgB,MAAOgN,EAAQhF,MAAMM,OAAS2rE,GAC5CzX,EAAW5tE,GAAM4vE,QAASxxD,EAAQ3D,QAExCgB,EAASuzD,aAAc5wD,EAAS,GAEhCuuD,GAAI2Y,eAAgB,KAAMF,EAAOxX,EAAUt+C,EAASrzB,EAAGqzB,EAASpzB,EAAGud,EAAOC,EAAQ,GAElF5zB,EAAMymF,iBAIPpsF,KAAKolG,qBAAuB,SAAWj2D,EAAUk2D,EAAYC,GAAwB,IAAZL,EAAY,uDAAJ,EAE1E3rE,EAAQ+rE,EAAWpsE,MAAMK,MACzBC,EAAS8rE,EAAWpsE,MAAMM,OAC1Bk0D,EAAW5tE,GAAM4vE,QAAS6V,EAAWhrE,QACrCozD,EAAS7tE,GAAM4vE,QAAS6V,EAAWr/E,MAEzCqV,EAASuzD,aAAcyW,EAAY,GAInC9Y,GAAI6C,YAAa,MAAOiW,EAAWvqE,OACnCyxD,GAAI6C,YAAa,MAAOiW,EAAWxqE,kBACnC0xD,GAAI6C,YAAa,KAAMiW,EAAWtqE,iBAE7BqqE,EAAWzpE,cAEf4wD,GAAI+Y,cAAe,KAAMN,EAAO91D,EAASrzB,EAAGqzB,EAASpzB,EAAGud,EAAOC,EAAQk0D,EAAUC,EAAQ2X,EAAWpsE,MAAMta,MAIrG0mF,EAAW9V,oBAEf/C,GAAIgZ,wBAAyB,KAAMP,EAAO91D,EAASrzB,EAAGqzB,EAASpzB,EAAGspF,EAAW3qE,QAAS,GAAIpB,MAAO+rE,EAAW3qE,QAAS,GAAInB,OAAQk0D,EAAU4X,EAAW3qE,QAAS,GAAI/b,MAInK6tE,GAAI+Y,cAAe,KAAMN,EAAO91D,EAASrzB,EAAGqzB,EAASpzB,EAAG0xE,EAAUC,EAAQ2X,EAAWpsE,OAOxE,IAAVgsE,GAAeK,EAAWzqE,iBAAkB2xD,GAAIY,eAAgB,MAErEznF,EAAMymF,iBAIPpsF,KAAKylG,uBAAyB,SAAWC,EAAWv2D,EAAUk2D,EAAYC,GAAwB,IAAZL,EAAY,uDAAJ,EAE7F,GAAK1pF,EAAM+jF,iBAEVh6E,QAAQM,KAAM,iFAFf,CAOA,IAGI+/E,EAHJ,EAAgCN,EAAWpsE,MAAnCK,EAAR,EAAQA,MAAOC,EAAf,EAAeA,OAAQ5a,EAAvB,EAAuBA,KACjB8uE,EAAW5tE,GAAM4vE,QAAS6V,EAAWhrE,QACrCozD,EAAS7tE,GAAM4vE,QAAS6V,EAAWr/E,MAGzC,GAAKq/E,EAAWj4B,gBAEf/xC,EAASu1C,aAAcy0B,EAAY,GACnCK,EAAW,UAEL,KAAKL,EAAWn4B,qBAQtB,YADA7nD,QAAQM,KAAM,+GALd0V,EAAS21C,kBAAmBq0B,EAAY,GACxCK,EAAW,MASZnZ,GAAI6C,YAAa,MAAOiW,EAAWvqE,OACnCyxD,GAAI6C,YAAa,MAAOiW,EAAWxqE,kBACnC0xD,GAAI6C,YAAa,KAAMiW,EAAWtqE,iBAElC,IAAM4qE,EAAepZ,GAAI1pB,aAAc,MACjC+iC,EAAoBrZ,GAAI1pB,aAAc,OACtCgjC,EAAmBtZ,GAAI1pB,aAAc,MACrCijC,EAAiBvZ,GAAI1pB,aAAc,MACnCkjC,EAAmBxZ,GAAI1pB,aAAc,OAE3C0pB,GAAI6C,YAAa,KAAM/1D,GACvBkzD,GAAI6C,YAAa,MAAO91D,GACxBizD,GAAI6C,YAAa,KAAMqW,EAAU3wF,IAAI+G,GACrC0wE,GAAI6C,YAAa,KAAMqW,EAAU3wF,IAAIgH,GACrCywE,GAAI6C,YAAa,MAAOqW,EAAU3wF,IAAIunB,GAEtCkwD,GAAIyZ,cACHN,EACAV,EACA91D,EAASrzB,EACTqzB,EAASpzB,EACTozB,EAAS7S,EACTopE,EAAU1wF,IAAI8G,EAAI4pF,EAAU3wF,IAAI+G,EAAI,EACpC4pF,EAAU1wF,IAAI+G,EAAI2pF,EAAU3wF,IAAIgH,EAAI,EACpC2pF,EAAU1wF,IAAIsnB,EAAIopE,EAAU3wF,IAAIunB,EAAI,EACpCmxD,EACAC,EACA/uE,GAGD6tE,GAAI6C,YAAa,KAAMuW,GACvBpZ,GAAI6C,YAAa,MAAOwW,GACxBrZ,GAAI6C,YAAa,KAAMyW,GACvBtZ,GAAI6C,YAAa,KAAM0W,GACvBvZ,GAAI6C,YAAa,MAAO2W,GAGT,IAAVf,GAAeK,EAAWzqE,iBAAkB2xD,GAAIY,eAAgBuY,GAErEhgG,EAAMymF,kBAIPpsF,KAAKovF,YAAc,SAAWnxD,GAE7B3C,EAASuzD,aAAc5wD,EAAS,GAEhCt4B,EAAMymF,iBAIPpsF,KAAKkmG,WAAa,WAEjB5I,EAAyB,EACzBC,EAA4B,EAC5BC,EAAuB,KAEvB73F,EAAM++D,QACNzB,GAAcyB,SAIoB,qBAAvByhC,oBAEXA,mBAAmBrqE,cAAe,IAAIsqE,YAAa,UAAW,CAAEC,OAAQrmG,Q,IAMpEsmG,G,4HAAuBvK,IAE7BuK,GAAennG,UAAUmgG,kBAAmB,E,IAEtCiH,G,kDAEL,aAAc,kCAEb,gBAEKtgF,KAAO,QAEZ,EAAKq6C,WAAa,KAClB,EAAKwc,YAAc,KACnB,EAAKhjC,IAAM,KAEX,EAAK4kD,iBAAmB,KAExB,EAAK9Y,YAAa,EAEiB,qBAAvBugB,oBAEXA,mBAAmBrqE,cAAe,IAAIsqE,YAAa,UAAW,CAAEC,OAAQ,kBAhB5D,E,wCAsBd,SAAM99F,EAAQ0tC,GAab,OAXA,4DAAY1tC,EAAQ0tC,GAEO,OAAtB1tC,EAAO+3D,aAAsBtgE,KAAKsgE,WAAa/3D,EAAO+3D,WAAWhiC,SAC1C,OAAvB/1B,EAAOu0E,cAAuB98E,KAAK88E,YAAcv0E,EAAOu0E,YAAYx+C,SACrD,OAAf/1B,EAAOuxC,MAAe95C,KAAK85C,IAAMvxC,EAAOuxC,IAAIxb,SAEhB,OAA5B/1B,EAAOm2F,mBAA4B1+F,KAAK0+F,iBAAmBn2F,EAAOm2F,iBAAiBpgE,SAExFt+B,KAAK4lF,WAAar9E,EAAOq9E,WACzB5lF,KAAK46B,iBAAmBryB,EAAOqyB,iBAExB56B,O,oBAIR,SAAQo7B,GAEP,IAAMzc,EAAO,8DAAcyc,GAM3B,OAJyB,OAApBp7B,KAAKsgE,aAAsB3hD,EAAK1d,OAAOq/D,WAAatgE,KAAKsgE,WAAWvrB,OAAQ3Z,IACvD,OAArBp7B,KAAK88E,cAAuBn+D,EAAK1d,OAAO67E,YAAc98E,KAAK88E,YAAY/nC,OAAQ3Z,IAClE,OAAbp7B,KAAK85C,MAAen7B,EAAK1d,OAAO64C,IAAM95C,KAAK85C,IAAI/E,UAE7Cp2B,M,GAjDWwzB,IAuDpBo0D,GAAMpnG,UAAU6iE,SAAU,E,IAEpBwkC,G,WAEL,WAAa72E,EAAO60C,GAAS,oBAE5BxkE,KAAK2vB,MAAQA,EACb3vB,KAAKwkE,OAASA,EACdxkE,KAAKwlC,WAAkBjjC,IAAVotB,EAAsBA,EAAMnxB,OAASgmE,EAAS,EAE3DxkE,KAAKsiD,MAAQjzB,GACbrvB,KAAKuiD,YAAc,CAAE9kC,OAAQ,EAAG+nB,OAAS,GAEzCxlC,KAAKi7B,QAAU,EAEfj7B,KAAKy6B,KAAOxK,KAEZjwB,KAAKwiD,iBAAmB,a,6CAIzB,SAAiB/iD,IAED,IAAVA,GAAiBO,KAAKi7B,Y,sBAI5B,SAAUx7B,GAIT,OAFAO,KAAKsiD,MAAQ7iD,EAENO,O,kBAIR,SAAMuI,GAOL,OALAvI,KAAK2vB,MAAQ,IAAIpnB,EAAOonB,MAAMnwB,YAAa+I,EAAOonB,OAClD3vB,KAAKwlC,MAAQj9B,EAAOi9B,MACpBxlC,KAAKwkE,OAASj8D,EAAOi8D,OACrBxkE,KAAKsiD,MAAQ/5C,EAAO+5C,MAEbtiD,O,oBAIR,SAAQyiD,EAAQj8B,EAAWk8B,GAE1BD,GAAUziD,KAAKwkE,OACf9hB,GAAUl8B,EAAUg+C,OAEpB,IAAM,IAAIjmE,EAAI,EAAGyK,EAAIhJ,KAAKwkE,OAAQjmE,EAAIyK,EAAGzK,IAExCyB,KAAK2vB,MAAO8yB,EAASlkD,GAAMioB,EAAUmJ,MAAO+yB,EAASnkD,GAItD,OAAOyB,O,iBAIR,SAAKP,GAAoB,IAAbge,EAAa,uDAAJ,EAIpB,OAFAzd,KAAK2vB,MAAM/U,IAAKnb,EAAOge,GAEhBzd,O,mBAIR,SAAO2e,QAEqBpc,IAAtBoc,EAAK8nF,eAET9nF,EAAK8nF,aAAe,SAIYlkG,IAA5BvC,KAAK2vB,MAAMnmB,OAAOk9F,QAEtB1mG,KAAK2vB,MAAMnmB,OAAOk9F,MAAQz2E,WAI2B1tB,IAAjDoc,EAAK8nF,aAAczmG,KAAK2vB,MAAMnmB,OAAOk9F,SAEzC/nF,EAAK8nF,aAAczmG,KAAK2vB,MAAMnmB,OAAOk9F,OAAU1mG,KAAK2vB,MAAMllB,MAAO,GAAIjB,QAItE,IAEMm9F,EAAK,IAAIH,EAFD,IAAIxmG,KAAK2vB,MAAMnwB,YAAamf,EAAK8nF,aAAczmG,KAAK2vB,MAAMnmB,OAAOk9F,QAEtC1mG,KAAKwkE,QAG9C,OAFAmiC,EAAGC,SAAU5mG,KAAKsiD,OAEXqkD,I,sBAIR,SAAU93F,GAIT,OAFA7O,KAAKwiD,iBAAmB3zC,EAEjB7O,O,oBAIR,SAAQ2e,GAwBP,YAtB2Bpc,IAAtBoc,EAAK8nF,eAET9nF,EAAK8nF,aAAe,SAMYlkG,IAA5BvC,KAAK2vB,MAAMnmB,OAAOk9F,QAEtB1mG,KAAK2vB,MAAMnmB,OAAOk9F,MAAQz2E,WAI2B1tB,IAAjDoc,EAAK8nF,aAAczmG,KAAK2vB,MAAMnmB,OAAOk9F,SAEzC/nF,EAAK8nF,aAAczmG,KAAK2vB,MAAMnmB,OAAOk9F,OAAU3jG,MAAM5D,UAAUsL,MAAMtJ,KAAM,IAAIkiD,YAAarjD,KAAK2vB,MAAMnmB,UAMjG,CACNixB,KAAMz6B,KAAKy6B,KACXjxB,OAAQxJ,KAAK2vB,MAAMnmB,OAAOk9F,MAC1BzgF,KAAMjmB,KAAK2vB,MAAMnwB,YAAYgF,KAC7BggE,OAAQxkE,KAAKwkE,Y,KAOhBgiC,GAAkBrnG,UAAU0nG,qBAAsB,EAElD,IAAMC,GAAY,IAAkBzkE,GAE9B0kE,G,WAEL,WAAaC,EAAmB3kD,EAAU5kC,EAAQqkC,GAAa,oBAE9D9hD,KAAKwE,KAAO,GAEZxE,KAAK2e,KAAOqoF,EACZhnG,KAAKqiD,SAAWA,EAChBriD,KAAKyd,OAASA,EAEdzd,KAAK8hD,YAA4B,IAAfA,E,uCAInB,WAEC,OAAO9hD,KAAK2e,KAAK6mB,Q,iBAIlB,WAEC,OAAOxlC,KAAK2e,KAAKgR,Q,uBAIlB,SAAiBlwB,GAEhBO,KAAK2e,KAAK0lC,YAAc5kD,I,0BAIzB,SAAc8d,GAEb,IAAM,IAAIhf,EAAI,EAAGyK,EAAIhJ,KAAK2e,KAAK6mB,MAAOjnC,EAAIyK,EAAGzK,IAE5CuoG,GAAUhrF,EAAI9b,KAAK+0B,KAAMx2B,GACzBuoG,GAAU/qF,EAAI/b,KAAKg1B,KAAMz2B,GACzBuoG,GAAUxqE,EAAIt8B,KAAKy9B,KAAMl/B,GAEzBuoG,GAAU1jE,aAAc7lB,GAExBvd,KAAK+iD,OAAQxkD,EAAGuoG,GAAUhrF,EAAGgrF,GAAU/qF,EAAG+qF,GAAUxqE,GAIrD,OAAOt8B,O,+BAIR,SAAmBud,GAElB,IAAM,IAAIhf,EAAI,EAAGyK,EAAIhJ,KAAKwlC,MAAOjnC,EAAIyK,EAAGzK,IAEvCuoG,GAAUhrF,EAAI9b,KAAK+0B,KAAMx2B,GACzBuoG,GAAU/qF,EAAI/b,KAAKg1B,KAAMz2B,GACzBuoG,GAAUxqE,EAAIt8B,KAAKy9B,KAAMl/B,GAEzBuoG,GAAU9jD,kBAAmBzlC,GAE7Bvd,KAAK+iD,OAAQxkD,EAAGuoG,GAAUhrF,EAAGgrF,GAAU/qF,EAAG+qF,GAAUxqE,GAIrD,OAAOt8B,O,gCAIR,SAAoBud,GAEnB,IAAM,IAAIhf,EAAI,EAAGyK,EAAIhJ,KAAKwlC,MAAOjnC,EAAIyK,EAAGzK,IAEvCuoG,GAAUhrF,EAAI9b,KAAK+0B,KAAMx2B,GACzBuoG,GAAU/qF,EAAI/b,KAAKg1B,KAAMz2B,GACzBuoG,GAAUxqE,EAAIt8B,KAAKy9B,KAAMl/B,GAEzBuoG,GAAUx6D,mBAAoB/uB,GAE9Bvd,KAAK+iD,OAAQxkD,EAAGuoG,GAAUhrF,EAAGgrF,GAAU/qF,EAAG+qF,GAAUxqE,GAIrD,OAAOt8B,O,kBAIR,SAAM6L,EAAOiQ,GAIZ,OAFA9b,KAAK2e,KAAKgR,MAAO9jB,EAAQ7L,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,QAAW3B,EAErD9b,O,kBAIR,SAAM6L,EAAOkQ,GAIZ,OAFA/b,KAAK2e,KAAKgR,MAAO9jB,EAAQ7L,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,OAAS,GAAM1B,EAEzD/b,O,kBAIR,SAAM6L,EAAOywB,GAIZ,OAFAt8B,KAAK2e,KAAKgR,MAAO9jB,EAAQ7L,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,OAAS,GAAM6e,EAEzDt8B,O,kBAIR,SAAM6L,EAAO+nB,GAIZ,OAFA5zB,KAAK2e,KAAKgR,MAAO9jB,EAAQ7L,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,OAAS,GAAMmW,EAEzD5zB,O,kBAIR,SAAM6L,GAEL,OAAO7L,KAAK2e,KAAKgR,MAAO9jB,EAAQ7L,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,U,kBAIzD,SAAM5R,GAEL,OAAO7L,KAAK2e,KAAKgR,MAAO9jB,EAAQ7L,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,OAAS,K,kBAIlE,SAAM5R,GAEL,OAAO7L,KAAK2e,KAAKgR,MAAO9jB,EAAQ7L,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,OAAS,K,kBAIlE,SAAM5R,GAEL,OAAO7L,KAAK2e,KAAKgR,MAAO9jB,EAAQ7L,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,OAAS,K,mBAIlE,SAAO5R,EAAOiQ,EAAGC,GAOhB,OALAlQ,EAAQA,EAAQ7L,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,OAExCzd,KAAK2e,KAAKgR,MAAO9jB,EAAQ,GAAMiQ,EAC/B9b,KAAK2e,KAAKgR,MAAO9jB,EAAQ,GAAMkQ,EAExB/b,O,oBAIR,SAAQ6L,EAAOiQ,EAAGC,EAAGugB,GAQpB,OANAzwB,EAAQA,EAAQ7L,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,OAExCzd,KAAK2e,KAAKgR,MAAO9jB,EAAQ,GAAMiQ,EAC/B9b,KAAK2e,KAAKgR,MAAO9jB,EAAQ,GAAMkQ,EAC/B/b,KAAK2e,KAAKgR,MAAO9jB,EAAQ,GAAMywB,EAExBt8B,O,qBAIR,SAAS6L,EAAOiQ,EAAGC,EAAGugB,EAAG1I,GASxB,OAPA/nB,EAAQA,EAAQ7L,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,OAExCzd,KAAK2e,KAAKgR,MAAO9jB,EAAQ,GAAMiQ,EAC/B9b,KAAK2e,KAAKgR,MAAO9jB,EAAQ,GAAMkQ,EAC/B/b,KAAK2e,KAAKgR,MAAO9jB,EAAQ,GAAMywB,EAC/Bt8B,KAAK2e,KAAKgR,MAAO9jB,EAAQ,GAAM+nB,EAExB5zB,O,mBAIR,SAAO2e,GAEN,QAAcpc,IAAToc,EAAqB,CAEzB2G,QAAQwL,IAAK,mHAIb,IAFA,IAAMnB,EAAQ,GAEJpxB,EAAI,EAAGA,EAAIyB,KAAKwlC,MAAOjnC,IAIhC,IAFA,IAAMsN,EAAQtN,EAAIyB,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,OAEhC0B,EAAI,EAAGA,EAAInf,KAAKqiD,SAAUljC,IAEnCwQ,EAAMxrB,KAAMnE,KAAK2e,KAAKgR,MAAO9jB,EAAQsT,IAMvC,OAAO,IAAIijC,GAAiB,IAAIpiD,KAAK2vB,MAAMnwB,YAAamwB,GAAS3vB,KAAKqiD,SAAUriD,KAAK8hD,YAgBrF,YAZiCv/C,IAA5Boc,EAAKsoF,qBAETtoF,EAAKsoF,mBAAqB,SAIwB1kG,IAA9Coc,EAAKsoF,mBAAoBjnG,KAAK2e,KAAK8b,QAEvC9b,EAAKsoF,mBAAoBjnG,KAAK2e,KAAK8b,MAASz6B,KAAK2e,KAAK2f,MAAO3f,IAIvD,IAAIooF,EAA4BpoF,EAAKsoF,mBAAoBjnG,KAAK2e,KAAK8b,MAAQz6B,KAAKqiD,SAAUriD,KAAKyd,OAAQzd,KAAK8hD,c,oBAMrH,SAAQnjC,GAEP,QAAcpc,IAAToc,EAAqB,CAEzB2G,QAAQwL,IAAK,wHAIb,IAFA,IAAMnB,EAAQ,GAEJpxB,EAAI,EAAGA,EAAIyB,KAAKwlC,MAAOjnC,IAIhC,IAFA,IAAMsN,EAAQtN,EAAIyB,KAAK2e,KAAK6lD,OAASxkE,KAAKyd,OAEhC0B,EAAI,EAAGA,EAAInf,KAAKqiD,SAAUljC,IAEnCwQ,EAAMxrB,KAAMnE,KAAK2e,KAAKgR,MAAO9jB,EAAQsT,IAQvC,MAAO,CACNkjC,SAAUriD,KAAKqiD,SACfp8B,KAAMjmB,KAAK2vB,MAAMnwB,YAAYgF,KAC7BmrB,MAAOA,EACPmyB,WAAY9hD,KAAK8hD,YAmBlB,YAZiCv/C,IAA5Boc,EAAKsoF,qBAETtoF,EAAKsoF,mBAAqB,SAIwB1kG,IAA9Coc,EAAKsoF,mBAAoBjnG,KAAK2e,KAAK8b,QAEvC9b,EAAKsoF,mBAAoBjnG,KAAK2e,KAAK8b,MAASz6B,KAAK2e,KAAKo2B,OAAQp2B,IAIxD,CACNu0C,8BAA8B,EAC9B7Q,SAAUriD,KAAKqiD,SACf1jC,KAAM3e,KAAK2e,KAAK8b,KAChBhd,OAAQzd,KAAKyd,OACbqkC,WAAY9hD,KAAK8hD,gB,KASrBilD,GAA2B5nG,UAAU+zD,8BAA+B,EAEpE,IAAMg0C,GAA8B,IAAI7kE,GAElC8kE,GAA2B,IAAI9qE,GAC/B+qE,GAA4B,IAAI/qE,GAEhCgrE,GAA0B,IAAIhlE,GAC9BilE,GAAwB,IAAI/6D,GAE5Bg7D,G,kDAEL,WAAahhE,EAAUsP,GAAW,kCAEjC,cAAOtP,EAAUsP,IAEZ5vB,KAAO,cAEZ,EAAKyvB,SAAW,WAChB,EAAKC,WAAa,IAAIpJ,GACtB,EAAKi7D,kBAAoB,IAAIj7D,GARI,E,wCAYlC,SAAMhkC,GAUL,OARA,4DAAYA,GAEZvI,KAAK01C,SAAWntC,EAAOmtC,SACvB11C,KAAK21C,WAAWxa,KAAM5yB,EAAOotC,YAC7B31C,KAAKwnG,kBAAkBrsE,KAAM5yB,EAAOi/F,mBAEpCxnG,KAAK41C,SAAWrtC,EAAOqtC,SAEhB51C,O,kBAIR,SAAM41C,EAAUD,GAEf31C,KAAK41C,SAAWA,OAEIrzC,IAAfozC,IAEJ31C,KAAKs0C,mBAAmB,GAExBt0C,KAAK41C,SAAS6xD,oBAEd9xD,EAAa31C,KAAKwjC,aAInBxjC,KAAK21C,WAAWxa,KAAMwa,GACtB31C,KAAKwnG,kBAAkBrsE,KAAMwa,GAAazd,W,kBAI3C,WAECl4B,KAAK41C,SAASkgD,S,kCAIf,WAMC,IAJA,IAAM1vD,EAAS,IAAI/J,GAEbqrE,EAAa1nG,KAAKumC,SAAS9c,WAAWi+E,WAElCnpG,EAAI,EAAGyK,EAAI0+F,EAAWliE,MAAOjnC,EAAIyK,EAAGzK,IAAO,CAEpD6nC,EAAOtqB,EAAI4rF,EAAW3yE,KAAMx2B,GAC5B6nC,EAAOrqB,EAAI2rF,EAAW1yE,KAAMz2B,GAC5B6nC,EAAO9J,EAAIorE,EAAWjqE,KAAMl/B,GAC5B6nC,EAAOxS,EAAI8zE,EAAWhqE,KAAMn/B,GAE5B,IAAM6wC,EAAQ,EAAMhJ,EAAOuhE,kBAEtBv4D,IAAUnK,IAEdmB,EAAOrS,eAAgBqb,GAIvBhJ,EAAOxrB,IAAK,EAAG,EAAG,EAAG,GAItB8sF,EAAWE,QAASrpG,EAAG6nC,EAAOtqB,EAAGsqB,EAAOrqB,EAAGqqB,EAAO9J,EAAG8J,EAAOxS,M,+BAM9D,SAAmBygB,GAElB,yEAAyBA,GAEF,aAAlBr0C,KAAK01C,SAET11C,KAAKwnG,kBAAkBrsE,KAAMn7B,KAAKwjC,aAActL,SAEnB,aAAlBl4B,KAAK01C,SAEhB11C,KAAKwnG,kBAAkBrsE,KAAMn7B,KAAK21C,YAAazd,SAI/C5S,QAAQM,KAAM,6CAA+C5lB,KAAK01C,Y,2BAMpE,SAAe7pC,EAAOxN,GAErB,IAAMu3C,EAAW51C,KAAK41C,SAChBrP,EAAWvmC,KAAKumC,SAEtB4gE,GAAWtkD,oBAAqBtc,EAAS9c,WAAWo+E,UAAWh8F,GAC/Du7F,GAAYvkD,oBAAqBtc,EAAS9c,WAAWi+E,WAAY77F,GAEjEq7F,GAAcrkD,oBAAqBtc,EAAS9c,WAAW0lB,SAAUtjC,GAAQu3B,aAAcpjC,KAAK21C,YAE5Ft3C,EAAOuc,IAAK,EAAG,EAAG,GAElB,IAAM,IAAIrc,EAAI,EAAGA,EAAI,EAAGA,IAAO,CAE9B,IAAMupG,EAASV,GAAYW,aAAcxpG,GAEzC,GAAgB,IAAXupG,EAAe,CAEnB,IAAME,EAAYb,GAAWY,aAAcxpG,GAE3C+oG,GAAQlxE,iBAAkBwf,EAASonC,MAAOgrB,GAAYxkE,YAAaoS,EAASqyD,aAAcD,IAE1F3pG,EAAOw6C,gBAAiBwuD,GAAUlsE,KAAM+rE,IAAgB9jE,aAAckkE,IAAWQ,IAMnF,OAAOzpG,EAAO+kC,aAAcpjC,KAAKwnG,uB,GApITr+C,IA0I1Bo+C,GAAYpoG,UAAUs2C,eAAgB,E,IAEhCyyD,G,kDAEL,aAAc,kCAEb,gBAEKjiF,KAAO,OAJC,E,UAFIksB,IAYnB+1D,GAAK/oG,UAAUgpG,QAAS,EAExB,IAAMC,GAA8B,IAAI77D,GAClC87D,GAAgC,IAAI97D,GAEpC+7D,G,WAEL,aAA6C,IAAhCtrB,EAAgC,uDAAxB,GAAIirB,EAAoB,uDAAL,GAAK,oBAE5CjoG,KAAKy6B,KAAOxK,KAEZjwB,KAAKg9E,MAAQA,EAAMvyE,MAAO,GAC1BzK,KAAKioG,aAAeA,EACpBjoG,KAAKmkG,aAAe,KAEpBnkG,KAAKkkG,YAAc,KACnBlkG,KAAKokG,gBAAkB,EAEvBpkG,KAAKsyD,OAAU,EAEftyD,KAAKupE,O,wCAIN,WAEC,IAAMyT,EAAQh9E,KAAKg9E,MACbirB,EAAejoG,KAAKioG,aAM1B,GAJAjoG,KAAKmkG,aAAe,IAAI5gD,aAA6B,GAAfy5B,EAAMx+E,QAIf,IAAxBypG,EAAazpG,OAEjBwB,KAAKynG,yBAML,GAAKzqB,EAAMx+E,SAAWypG,EAAazpG,OAAS,CAE3C8mB,QAAQM,KAAM,mFAEd5lB,KAAKioG,aAAe,GAEpB,IAAM,IAAI1pG,EAAI,EAAGonC,EAAK3lC,KAAKg9E,MAAMx+E,OAAQD,EAAIonC,EAAIpnC,IAEhDyB,KAAKioG,aAAa9jG,KAAM,IAAIooC,O,+BAUhC,WAECvsC,KAAKioG,aAAazpG,OAAS,EAE3B,IAAM,IAAID,EAAI,EAAGonC,EAAK3lC,KAAKg9E,MAAMx+E,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEvD,IAAMgqG,EAAU,IAAIh8D,GAEfvsC,KAAKg9E,MAAOz+E,IAEhBgqG,EAAQptE,KAAMn7B,KAAKg9E,MAAOz+E,GAAIilC,aAActL,SAI7Cl4B,KAAKioG,aAAa9jG,KAAMokG,M,kBAM1B,WAIC,IAAM,IAAIhqG,EAAI,EAAGonC,EAAK3lC,KAAKg9E,MAAMx+E,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEvD,IAAMiqG,EAAOxoG,KAAKg9E,MAAOz+E,GAEpBiqG,GAEJA,EAAKhlE,YAAYrI,KAAMn7B,KAAKioG,aAAc1pG,IAAM25B,SAQlD,IAAM,IAAI35B,EAAI,EAAGonC,EAAK3lC,KAAKg9E,MAAMx+E,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEvD,IAAMiqG,EAAOxoG,KAAKg9E,MAAOz+E,GAEpBiqG,IAECA,EAAKp2D,QAAUo2D,EAAKp2D,OAAO+1D,QAE/BK,EAAK3vE,OAAOsC,KAAMqtE,EAAKp2D,OAAO5O,aAActL,SAC5CswE,EAAK3vE,OAAOwa,SAAUm1D,EAAKhlE,cAI3BglE,EAAK3vE,OAAOsC,KAAMqtE,EAAKhlE,aAIxBglE,EAAK3vE,OAAOua,UAAWo1D,EAAKr5D,SAAUq5D,EAAK1pE,WAAY0pE,EAAKp5D,W,oBAQ/D,WASC,IAPA,IAAM4tC,EAAQh9E,KAAKg9E,MACbirB,EAAejoG,KAAKioG,aACpB9D,EAAenkG,KAAKmkG,aACpBD,EAAclkG,KAAKkkG,YAIf3lG,EAAI,EAAGonC,EAAKq3C,EAAMx+E,OAAQD,EAAIonC,EAAIpnC,IAAO,CAIlD,IAAMs6B,EAASmkD,EAAOz+E,GAAMy+E,EAAOz+E,GAAIilC,YAAc6kE,GAErDD,GAAchyE,iBAAkByC,EAAQovE,EAAc1pG,IACtD6pG,GAAcpzD,QAASmvD,EAAkB,GAAJ5lG,GAIjB,OAAhB2lG,IAEJA,EAAY7/C,aAAc,K,mBAM5B,WAEC,OAAO,IAAIikD,EAAUtoG,KAAKg9E,MAAOh9E,KAAKioG,gB,2BAIvC,SAAezjG,GAEd,IAAM,IAAIjG,EAAI,EAAGonC,EAAK3lC,KAAKg9E,MAAMx+E,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEvD,IAAMiqG,EAAOxoG,KAAKg9E,MAAOz+E,GAEzB,GAAKiqG,EAAKhkG,OAASA,EAElB,OAAOgkG,K,qBAUV,WAE2B,OAArBxoG,KAAKkkG,cAETlkG,KAAKkkG,YAAY7lE,UAEjBr+B,KAAKkkG,YAAc,Q,sBAMrB,SAAUuE,EAAMzrB,GAEfh9E,KAAKy6B,KAAOguE,EAAKhuE,KAEjB,IAAM,IAAIl8B,EAAI,EAAGyK,EAAIy/F,EAAKzrB,MAAMx+E,OAAQD,EAAIyK,EAAGzK,IAAO,CAErD,IAAMk8B,EAAOguE,EAAKzrB,MAAOz+E,GACrBiqG,EAAOxrB,EAAOviD,QAEJl4B,IAATimG,IAEJljF,QAAQM,KAAM,2CAA4C6U,GAC1D+tE,EAAO,IAAIN,IAIZloG,KAAKg9E,MAAM74E,KAAMqkG,GACjBxoG,KAAKioG,aAAa9jG,MAAM,IAAIooC,IAAUzT,UAAW2vE,EAAKR,aAAc1pG,KAMrE,OAFAyB,KAAKupE,OAEEvpE,O,oBAIR,WAEC,IAAM2e,EAAO,CACZ6c,SAAU,CACTP,QAAS,IACThV,KAAM,WACNwV,UAAW,mBAEZuhD,MAAO,GACPirB,aAAc,IAGftpF,EAAK8b,KAAOz6B,KAAKy6B,KAKjB,IAHA,IAAMuiD,EAAQh9E,KAAKg9E,MACbirB,EAAejoG,KAAKioG,aAEhB1pG,EAAI,EAAGyK,EAAIg0E,EAAMx+E,OAAQD,EAAIyK,EAAGzK,IAAO,CAEhD,IAAMiqG,EAAOxrB,EAAOz+E,GACpBogB,EAAKq+D,MAAM74E,KAAMqkG,EAAK/tE,MAEtB,IAAMiuE,EAAcT,EAAc1pG,GAClCogB,EAAKspF,aAAa9jG,KAAMukG,EAAY1zD,WAIrC,OAAOr2B,M,KAiBH09D,G,kDAEL,WAAa9mC,GAAa,kCAEzB,gBAEKtvB,KAAO,oBAEZ,EAAK22B,MAAQ,IAAI0D,GAAO,UAExB,EAAKlB,UAAY,EACjB,EAAKupD,QAAU,QACf,EAAKC,SAAW,QAEhB,EAAKjpD,cAAe,EAEpB,EAAKpD,UAAWhH,GAdS,E,wCAmB1B,SAAMhtC,GAYL,OAVA,4DAAYA,GAEZvI,KAAK48C,MAAMzhB,KAAM5yB,EAAOq0C,OAExB58C,KAAKo/C,UAAY72C,EAAO62C,UACxBp/C,KAAK2oG,QAAUpgG,EAAOogG,QACtB3oG,KAAK4oG,SAAWrgG,EAAOqgG,SAEvB5oG,KAAK2/C,aAAep3C,EAAOo3C,aAEpB3/C,S,GAjCuB65C,IAuChCwiC,GAAkBl9E,UAAUm8F,qBAAsB,EAElD,IAAMuN,GAAyB,IAAIxmE,GAC7BymE,GAAuB,IAAIzmE,GAC3B0mE,GAAiC,IAAIx8D,GACrCy8D,GAAuB,IAAIl/D,GAC3Bm/D,GAA0B,IAAIrgE,GAE9BsgE,G,kDAEL,aAAmF,MAAtE3iE,EAAsE,uDAA3D,IAAIwd,GAAkBlO,EAAqC,uDAA1B,IAAIwmC,GAAsB,4BAElF,gBAEKp2D,KAAO,OAEZ,EAAKsgB,SAAWA,EAChB,EAAKsP,SAAWA,EAEhB,EAAKuT,qBAT6E,E,wCAanF,SAAM7gD,GAOL,OALA,4DAAYA,GAEZvI,KAAK61C,SAAWttC,EAAOstC,SACvB71C,KAAKumC,SAAWh+B,EAAOg+B,SAEhBvmC,O,kCAIR,WAEC,IAAMumC,EAAWvmC,KAAKumC,SAEtB,GAAKA,EAAS6gB,iBAIb,GAAwB,OAAnB7gB,EAAS16B,MAAiB,CAK9B,IAHA,IAAM46C,EAAoBlgB,EAAS9c,WAAW0lB,SACxCg6D,EAAgB,CAAE,GAEd5qG,EAAI,EAAGyK,EAAIy9C,EAAkBjhB,MAAOjnC,EAAIyK,EAAGzK,IAEpDsqG,GAAShmD,oBAAqB4D,EAAmBloD,EAAI,GACrDuqG,GAAOjmD,oBAAqB4D,EAAmBloD,GAE/C4qG,EAAe5qG,GAAM4qG,EAAe5qG,EAAI,GACxC4qG,EAAe5qG,IAAOsqG,GAAS9/D,WAAY+/D,IAI5CviE,EAASte,aAAc,eAAgB,IAAIq7B,GAAwB6lD,EAAe,SAIlF7jF,QAAQM,KAAM,sGAIJ2gB,EAAS0jB,YAEpB3kC,QAAQxjB,MAAO,0GAIhB,OAAO9B,O,qBAIR,SAASwpD,EAAWC,GAEnB,IAAMljB,EAAWvmC,KAAKumC,SAChB/C,EAAcxjC,KAAKwjC,YACnB4lE,EAAY5/C,EAAUvkD,OAAOikG,KAAKE,UAClCjlD,EAAY5d,EAAS4d,UAU3B,GANiC,OAA5B5d,EAAS2d,gBAA0B3d,EAASge,wBAEjD0kD,GAAU9tE,KAAMoL,EAAS2d,gBACzB+kD,GAAU7lE,aAAcI,GACxBylE,GAAUxkE,QAAU2kE,GAEiC,IAAhD5/C,EAAUvf,IAAIhB,iBAAkBggE,IAArC,CAIAF,GAAiB5tE,KAAMqI,GAActL,SACrC8wE,GAAO7tE,KAAMquB,EAAUvf,KAAM7G,aAAc2lE,IAE3C,IAAMM,EAAiBD,IAAgBppG,KAAKovC,MAAMtzB,EAAI9b,KAAKovC,MAAMrzB,EAAI/b,KAAKovC,MAAM9S,GAAM,GAChFgtE,EAAmBD,EAAiBA,EAEpCE,EAAS,IAAIlnE,GACbmnE,EAAO,IAAInnE,GACXonE,EAAe,IAAIpnE,GACnBqnE,EAAW,IAAIrnE,GACf5+B,EAAOzD,KAAKsiG,eAAiB,EAAI,EAEvC,GAAK/7D,EAAS6gB,iBAAmB,CAEhC,IAAMv7C,EAAQ06B,EAAS16B,MAEjB46C,EADalgB,EAAS9c,WACS0lB,SAErC,GAAe,OAAVtjC,EAKJ,IAHA,IAGUtN,EAHIuS,KAAKkE,IAAK,EAAGmvC,EAAUzN,OAGhB1tC,EAFT8H,KAAKiE,IAAKlJ,EAAM25B,MAAS2e,EAAUzN,MAAQyN,EAAU3e,OAElC,EAAGjnC,EAAIyK,EAAGzK,GAAKkF,EAAO,CAEpD,IAAMkH,EAAIkB,EAAMkpB,KAAMx2B,GAChBqM,EAAIiB,EAAMkpB,KAAMx2B,EAAI,GAO1B,GALAgrG,EAAO1mD,oBAAqB4D,EAAmB97C,GAC/C6+F,EAAK3mD,oBAAqB4D,EAAmB77C,KAE9Bo+F,GAAOW,oBAAqBJ,EAAQC,EAAME,EAAUD,GAErDH,GAAd,CAEAI,EAAStmE,aAAcpjC,KAAKwjC,aAE5B,IAAM+P,EAAWiW,EAAUvf,IAAIF,OAAOhB,WAAY2gE,GAE7Cn2D,EAAWiW,EAAUnZ,MAAQkD,EAAWiW,EAAUlZ,KAEvDmZ,EAAWtlD,KAAM,CAEhBovC,SAAUA,EAGVpN,MAAOsjE,EAAanrE,QAAQ8E,aAAcpjC,KAAKwjC,aAC/C33B,MAAOtN,EACPyrD,KAAM,KACND,UAAW,KACX9oD,OAAQjB,aAWV,IAHA,IAGUzB,EAHIuS,KAAKkE,IAAK,EAAGmvC,EAAUzN,OAGhB1tC,EAFT8H,KAAKiE,IAAK0xC,EAAkBjhB,MAAS2e,EAAUzN,MAAQyN,EAAU3e,OAE9C,EAAGjnC,EAAIyK,EAAGzK,GAAKkF,EAAO,CAOpD,GALA8lG,EAAO1mD,oBAAqB4D,EAAmBloD,GAC/CirG,EAAK3mD,oBAAqB4D,EAAmBloD,EAAI,KAElCyqG,GAAOW,oBAAqBJ,EAAQC,EAAME,EAAUD,GAErDH,GAAd,CAEAI,EAAStmE,aAAcpjC,KAAKwjC,aAE5B,IAAM+P,EAAWiW,EAAUvf,IAAIF,OAAOhB,WAAY2gE,GAE7Cn2D,EAAWiW,EAAUnZ,MAAQkD,EAAWiW,EAAUlZ,KAEvDmZ,EAAWtlD,KAAM,CAEhBovC,SAAUA,EAGVpN,MAAOsjE,EAAanrE,QAAQ8E,aAAcpjC,KAAKwjC,aAC/C33B,MAAOtN,EACPyrD,KAAM,KACND,UAAW,KACX9oD,OAAQjB,cAQAumC,EAAS0jB,YAEpB3kC,QAAQxjB,MAAO,gG,gCAMjB,WAEC,IAAMykC,EAAWvmC,KAAKumC,SAEtB,GAAKA,EAAS6gB,iBAAmB,CAEhC,IAAMpD,EAAkBzd,EAASyd,gBAC3Bn9C,EAAOhI,OAAOgI,KAAMm9C,GAE1B,GAAKn9C,EAAKrI,OAAS,EAAI,CAEtB,IAAMymD,EAAiBjB,EAAiBn9C,EAAM,IAE9C,QAAwBtE,IAAnB0iD,EAA+B,CAEnCjlD,KAAKqpD,sBAAwB,GAC7BrpD,KAAKspD,sBAAwB,GAE7B,IAAM,IAAI/rC,EAAI,EAAGgsC,EAAKtE,EAAezmD,OAAQ+e,EAAIgsC,EAAIhsC,IAAO,CAE3D,IAAM/Y,EAAOygD,EAAgB1nC,GAAI/Y,MAAQ+S,OAAQgG,GAEjDvd,KAAKqpD,sBAAsBllD,KAAM,GACjCnE,KAAKspD,sBAAuB9kD,GAAS+Y,SAQlC,CAEN,IAAMoiC,EAAepZ,EAASoZ,kBAERp9C,IAAjBo9C,GAA8BA,EAAanhD,OAAS,GAExD8mB,QAAQxjB,MAAO,2G,GAhOAqwC,IA0OnB+2D,GAAK/pG,UAAUk2C,QAAS,EAExB,IAAMu0D,GAAuB,IAAIvnE,GAC3BwnE,GAAqB,IAAIxnE,GAEzBynE,G,kDAEL,WAAavjE,EAAUsP,GAAW,kCAEjC,cAAOtP,EAAUsP,IAEZ5vB,KAAO,eAJqB,E,wDAQlC,WAEC,IAAMsgB,EAAWvmC,KAAKumC,SAEtB,GAAKA,EAAS6gB,iBAIb,GAAwB,OAAnB7gB,EAAS16B,MAAiB,CAK9B,IAHA,IAAM46C,EAAoBlgB,EAAS9c,WAAW0lB,SACxCg6D,EAAgB,GAEZ5qG,EAAI,EAAGyK,EAAIy9C,EAAkBjhB,MAAOjnC,EAAIyK,EAAGzK,GAAK,EAEzDqrG,GAAO/mD,oBAAqB4D,EAAmBloD,GAC/CsrG,GAAKhnD,oBAAqB4D,EAAmBloD,EAAI,GAEjD4qG,EAAe5qG,GAAc,IAANA,EAAY,EAAI4qG,EAAe5qG,EAAI,GAC1D4qG,EAAe5qG,EAAI,GAAM4qG,EAAe5qG,GAAMqrG,GAAO7gE,WAAY8gE,IAIlEtjE,EAASte,aAAc,eAAgB,IAAIq7B,GAAwB6lD,EAAe,SAIlF7jF,QAAQM,KAAM,8GAIJ2gB,EAAS0jB,YAEpB3kC,QAAQxjB,MAAO,kHAIhB,OAAO9B,S,GA/CkBkpG,IAqD3BY,GAAa3qG,UAAUmjG,gBAAiB,E,IAElCyH,G,kDAEL,WAAaxjE,EAAUsP,GAAW,kCAEjC,cAAOtP,EAAUsP,IAEZ5vB,KAAO,WAJqB,E,UAFZijF,IAYvBa,GAAS5qG,UAAUojG,YAAa,E,IAgB1BhmB,G,kDAEL,WAAahnC,GAAa,kCAEzB,gBAEKtvB,KAAO,iBAEZ,EAAK22B,MAAQ,IAAI0D,GAAO,UAExB,EAAK/qC,IAAM,KAEX,EAAKqoC,SAAW,KAEhB,EAAKt0B,KAAO,EACZ,EAAK61B,iBAAkB,EAEvB,EAAKQ,cAAe,EAEpB,EAAKpD,UAAWhH,GAjBS,E,wCAqB1B,SAAMhtC,GAeL,OAbA,4DAAYA,GAEZvI,KAAK48C,MAAMzhB,KAAM5yB,EAAOq0C,OAExB58C,KAAKuV,IAAMhN,EAAOgN,IAElBvV,KAAK49C,SAAWr1C,EAAOq1C,SAEvB59C,KAAKspB,KAAO/gB,EAAO+gB,KACnBtpB,KAAKm/C,gBAAkB52C,EAAO42C,gBAE9Bn/C,KAAK2/C,aAAep3C,EAAOo3C,aAEpB3/C,S,GAtCoB65C,IA4C7B0iC,GAAep9E,UAAUu8F,kBAAmB,EAE5C,IAAMsO,GAA+B,IAAIz9D,GACnC09D,GAAqB,IAAIngE,GACzBogE,GAAwB,IAAIthE,GAC5BuhE,GAA4B,IAAI9nE,GAEhC+nE,G,kDAEL,aAAgF,MAAnE7jE,EAAmE,uDAAxD,IAAIwd,GAAkBlO,EAAkC,uDAAvB,IAAI0mC,GAAmB,4BAE/E,gBAEKt2D,KAAO,SAEZ,EAAKsgB,SAAWA,EAChB,EAAKsP,SAAWA,EAEhB,EAAKuT,qBAT0E,E,wCAahF,SAAM7gD,GAOL,OALA,4DAAYA,GAEZvI,KAAK61C,SAAWttC,EAAOstC,SACvB71C,KAAKumC,SAAWh+B,EAAOg+B,SAEhBvmC,O,qBAIR,SAASwpD,EAAWC,GAEnB,IAAMljB,EAAWvmC,KAAKumC,SAChB/C,EAAcxjC,KAAKwjC,YACnB4lE,EAAY5/C,EAAUvkD,OAAOmlG,OAAOhB,UACpCjlD,EAAY5d,EAAS4d,UAU3B,GANiC,OAA5B5d,EAAS2d,gBAA0B3d,EAASge,wBAEjD2lD,GAAQ/uE,KAAMoL,EAAS2d,gBACvBgmD,GAAQ9mE,aAAcI,GACtB0mE,GAAQzlE,QAAU2kE,GAEiC,IAA9C5/C,EAAUvf,IAAIhB,iBAAkBihE,IAArC,CAIAF,GAAe7uE,KAAMqI,GAActL,SACnC+xE,GAAK9uE,KAAMquB,EAAUvf,KAAM7G,aAAc4mE,IAEzC,IAAMX,EAAiBD,IAAgBppG,KAAKovC,MAAMtzB,EAAI9b,KAAKovC,MAAMrzB,EAAI/b,KAAKovC,MAAM9S,GAAM,GAChFgtE,EAAmBD,EAAiBA,EAE1C,GAAK9iE,EAAS6gB,iBAAmB,CAEhC,IAAMv7C,EAAQ06B,EAAS16B,MAEjB46C,EADalgB,EAAS9c,WACS0lB,SAErC,GAAe,OAAVtjC,EAKJ,IAHA,IAGUtN,EAHIuS,KAAKkE,IAAK,EAAGmvC,EAAUzN,OAGhB/Q,EAFT70B,KAAKiE,IAAKlJ,EAAM25B,MAAS2e,EAAUzN,MAAQyN,EAAU3e,OAElCjnC,EAAIonC,EAAIpnC,IAAO,CAE7C,IAAMoM,EAAIkB,EAAMkpB,KAAMx2B,GAEtB4rG,GAAYtnD,oBAAqB4D,EAAmB97C,GAEpD0/F,GAAWF,GAAax/F,EAAG2+F,EAAkB9lE,EAAagmB,EAAWC,EAAYzpD,WASlF,IAHA,IAGUzB,EAHIuS,KAAKkE,IAAK,EAAGmvC,EAAUzN,OAGhB1tC,EAFT8H,KAAKiE,IAAK0xC,EAAkBjhB,MAAS2e,EAAUzN,MAAQyN,EAAU3e,OAE/CjnC,EAAIyK,EAAGzK,IAEpC4rG,GAAYtnD,oBAAqB4D,EAAmBloD,GAEpD8rG,GAAWF,GAAa5rG,EAAG+qG,EAAkB9lE,EAAagmB,EAAWC,EAAYzpD,WAQnFslB,QAAQxjB,MAAO,kG,gCAMjB,WAEC,IAAMykC,EAAWvmC,KAAKumC,SAEtB,GAAKA,EAAS6gB,iBAAmB,CAEhC,IAAMpD,EAAkBzd,EAASyd,gBAC3Bn9C,EAAOhI,OAAOgI,KAAMm9C,GAE1B,GAAKn9C,EAAKrI,OAAS,EAAI,CAEtB,IAAMymD,EAAiBjB,EAAiBn9C,EAAM,IAE9C,QAAwBtE,IAAnB0iD,EAA+B,CAEnCjlD,KAAKqpD,sBAAwB,GAC7BrpD,KAAKspD,sBAAwB,GAE7B,IAAM,IAAI/rC,EAAI,EAAGgsC,EAAKtE,EAAezmD,OAAQ+e,EAAIgsC,EAAIhsC,IAAO,CAE3D,IAAM/Y,EAAOygD,EAAgB1nC,GAAI/Y,MAAQ+S,OAAQgG,GAEjDvd,KAAKqpD,sBAAsBllD,KAAM,GACjCnE,KAAKspD,sBAAuB9kD,GAAS+Y,SAQlC,CAEN,IAAMoiC,EAAepZ,EAASoZ,kBAERp9C,IAAjBo9C,GAA8BA,EAAanhD,OAAS,GAExD8mB,QAAQxjB,MAAO,6G,GApIEqwC,IAgJrB,SAASk4D,GAAWlkE,EAAOt6B,EAAOy9F,EAAkB9lE,EAAagmB,EAAWC,EAAYxoD,GAEvF,IAAMqpG,EAAqBL,GAAK7/D,kBAAmBjE,GAEnD,GAAKmkE,EAAqBhB,EAAmB,CAE5C,IAAMiB,EAAiB,IAAIloE,GAE3B4nE,GAAKO,oBAAqBrkE,EAAOokE,GACjCA,EAAennE,aAAcI,GAE7B,IAAM+P,EAAWiW,EAAUvf,IAAIF,OAAOhB,WAAYwhE,GAElD,GAAKh3D,EAAWiW,EAAUnZ,MAAQkD,EAAWiW,EAAUlZ,IAAM,OAE7DmZ,EAAWtlD,KAAM,CAEhBovC,SAAUA,EACVk3D,cAAe35F,KAAKujB,KAAMi2E,GAC1BnkE,MAAOokE,EACP1+F,MAAOA,EACPm+C,KAAM,KACN/oD,OAAQA,KAxBXmpG,GAAOjrG,UAAUm2C,UAAW,E,IAgCtBo1D,G,kDAEL,WAAahwE,EAASpB,EAAOC,EAAQe,EAAQrU,EAAM+T,EAASE,EAAOC,EAAOC,EAAWC,EAAWE,EAAYC,GAAW,kCAEtH,cAAO,KAAMR,EAASE,EAAOC,EAAOC,EAAWC,EAAWC,EAAQrU,EAAMsU,EAAYC,IAE/EvB,MAAQ,CAAEK,MAAOA,EAAOC,OAAQA,GACrC,EAAKmB,QAAUA,EAKf,EAAKK,OAAQ,EAKb,EAAKF,iBAAkB,EAf+F,E,UAFxFf,IAuBhC4wE,GAAkBvrG,UAAUowF,qBAAsB,E,IAE5Cob,G,kDAEL,WAAavxE,EAAQY,EAASE,EAAOC,EAAOC,EAAWC,EAAWC,EAAQrU,EAAMsU,GAAa,kCAE5F,cAAOnB,EAAQY,EAASE,EAAOC,EAAOC,EAAWC,EAAWC,EAAQrU,EAAMsU,IAErE8pB,aAAc,EAJyE,E,UAFlEvqB,IAY5B6wE,GAAcxrG,UAAUyrG,iBAAkB,E,IAQpCpuB,G,kDAEL,WAAajnC,GAAa,kCAEzB,gBAEKtvB,KAAO,iBAEZ,EAAK22B,MAAQ,IAAI0D,GAAO,GACxB,EAAKnG,aAAc,EAEnB,EAAKoC,UAAWhH,GATS,E,wCAa1B,SAAMhtC,GAML,OAJA,4DAAYA,GAEZvI,KAAK48C,MAAMzhB,KAAM5yB,EAAOq0C,OAEjB58C,S,GArBoB65C,IA2B7B2iC,GAAer9E,UAAU28F,kBAAmB,E,IAEtC+O,G,kDAEL,WAAat1D,GAAa,kCAEzB,cAAOA,IAEFtvB,KAAO,oBAJa,E,UAFKimC,IAYhC2+C,GAAkB1rG,UAAUo5E,qBAAsB,E,IAsD5C2D,G,kDAEL,WAAa3mC,GAAa,kCAEzB,gBAEK4W,QAAU,CAAE,SAAY,IAE7B,EAAKlmC,KAAO,uBAEZ,EAAK22B,MAAQ,IAAI0D,GAAO,UACxB,EAAKxD,UAAY,EACjB,EAAKC,UAAY,EAEjB,EAAKxnC,IAAM,KAEX,EAAKsoC,SAAW,KAChB,EAAKC,kBAAoB,EAEzB,EAAKC,MAAQ,KACb,EAAKC,eAAiB,EAEtB,EAAKf,SAAW,IAAIqD,GAAO,GAC3B,EAAKpD,kBAAoB,EACzB,EAAKyB,YAAc,KAEnB,EAAKV,QAAU,KACf,EAAKC,UAAY,EAEjB,EAAKC,UAAY,KACjB,EAAKC,cAtm0BuB,EAum0B5B,EAAKC,YAAc,IAAI3qB,GAAS,EAAG,GAEnC,EAAK4qB,gBAAkB,KACvB,EAAKC,kBAAoB,EACzB,EAAKC,iBAAmB,EAExB,EAAKC,aAAe,KAEpB,EAAKC,aAAe,KAEpB,EAAKd,SAAW,KAEhB,EAAKiB,OAAS,KACd,EAAKE,gBAAkB,EAEvB,EAAKE,gBAAkB,IAEvB,EAAKM,WAAY,EACjB,EAAKC,mBAAqB,EAC1B,EAAKC,iBAAmB,QACxB,EAAKC,kBAAoB,QAEzB,EAAKG,UAAW,EAChB,EAAKF,cAAe,EACpB,EAAKC,cAAe,EAEpB,EAAKlD,aAAc,EAEnB,EAAKs8B,gBAAiB,EAEtB,EAAKz8B,UAAWhH,GA3DS,E,wCA+D1B,SAAMhtC,GAyDL,OAvDA,4DAAYA,GAEZvI,KAAKmsD,QAAU,CAAE,SAAY,IAE7BnsD,KAAK48C,MAAMzhB,KAAM5yB,EAAOq0C,OACxB58C,KAAK88C,UAAYv0C,EAAOu0C,UACxB98C,KAAK+8C,UAAYx0C,EAAOw0C,UAExB/8C,KAAKuV,IAAMhN,EAAOgN,IAElBvV,KAAK69C,SAAWt1C,EAAOs1C,SACvB79C,KAAK89C,kBAAoBv1C,EAAOu1C,kBAEhC99C,KAAK+9C,MAAQx1C,EAAOw1C,MACpB/9C,KAAKg+C,eAAiBz1C,EAAOy1C,eAE7Bh+C,KAAKi9C,SAAS9hB,KAAM5yB,EAAO00C,UAC3Bj9C,KAAK2+C,YAAcp2C,EAAOo2C,YAC1B3+C,KAAKk9C,kBAAoB30C,EAAO20C,kBAEhCl9C,KAAKi+C,QAAU11C,EAAO01C,QACtBj+C,KAAKk+C,UAAY31C,EAAO21C,UAExBl+C,KAAKm+C,UAAY51C,EAAO41C,UACxBn+C,KAAKo+C,cAAgB71C,EAAO61C,cAC5Bp+C,KAAKq+C,YAAYljB,KAAM5yB,EAAO81C,aAE9Br+C,KAAKs+C,gBAAkB/1C,EAAO+1C,gBAC9Bt+C,KAAKu+C,kBAAoBh2C,EAAOg2C,kBAChCv+C,KAAKw+C,iBAAmBj2C,EAAOi2C,iBAE/Bx+C,KAAKy+C,aAAel2C,EAAOk2C,aAE3Bz+C,KAAK0+C,aAAen2C,EAAOm2C,aAE3B1+C,KAAK49C,SAAWr1C,EAAOq1C,SAEvB59C,KAAK6+C,OAASt2C,EAAOs2C,OACrB7+C,KAAK++C,gBAAkBx2C,EAAOw2C,gBAE9B/+C,KAAKi/C,gBAAkB12C,EAAO02C,gBAE9Bj/C,KAAKu/C,UAAYh3C,EAAOg3C,UACxBv/C,KAAKw/C,mBAAqBj3C,EAAOi3C,mBACjCx/C,KAAKy/C,iBAAmBl3C,EAAOk3C,iBAC/Bz/C,KAAK0/C,kBAAoBn3C,EAAOm3C,kBAEhC1/C,KAAK6/C,SAAWt3C,EAAOs3C,SACvB7/C,KAAK2/C,aAAep3C,EAAOo3C,aAC3B3/C,KAAK4/C,aAAer3C,EAAOq3C,aAE3B5/C,KAAK08C,YAAcn0C,EAAOm0C,YAE1B18C,KAAKg5E,eAAiBzwE,EAAOywE,eAEtBh5E,S,GA1H0B65C,IAgInCqiC,GAAqB/8E,UAAU49E,wBAAyB,E,IAqBlDZ,G,kDAEL,WAAa5mC,GAAa,kCAEzB,gBAEK4W,QAAU,CAEd,SAAY,GACZ,SAAY,IAIb,EAAKlmC,KAAO,uBAEZ,EAAKo3B,UAAY,EACjB,EAAKE,aAAe,KACpB,EAAKD,mBAAqB,EAC1B,EAAKE,sBAAwB,KAC7B,EAAKE,qBAAuB,IAAIhqB,GAAS,EAAG,GAC5C,EAAK+pB,mBAAqB,KAE1B,EAAKuB,aAAe,GAEpBngD,OAAOC,eAAPD,OAAA,IAAAA,CAAA,GAA6B,MAAO,CACnCkC,IAAK,WAEJ,OAAS,EAAI,GAAMf,KAAKg/C,eAAmB,EAAI,GAAMh/C,KAAKg/C,eAG3DpkC,IAAK,SAAWkwF,GAEf9qG,KAAKg/C,aAAe1uB,GAAS,KAAQw6E,EAAM,IAAQA,EAAM,GAAK,EAAG,MAKnE,EAAK9tD,MAAQ,KAEb,EAAK+vB,aAAe,EACpB,EAAKC,gBAAkB,KAEvB,EAAKzwB,UAAWhH,GAxCS,E,wCA4C1B,SAAMhtC,GAiCL,OA/BA,4DAAYA,GAEZvI,KAAKmsD,QAAU,CAEd,SAAY,GACZ,SAAY,IAIbnsD,KAAKq9C,UAAY90C,EAAO80C,UACxBr9C,KAAKu9C,aAAeh1C,EAAOg1C,aAC3Bv9C,KAAKs9C,mBAAqB/0C,EAAO+0C,mBACjCt9C,KAAKw9C,sBAAwBj1C,EAAOi1C,sBACpCx9C,KAAKy9C,mBAAqBl1C,EAAOk1C,mBACjCz9C,KAAK09C,qBAAqBviB,KAAM5yB,EAAOm1C,sBAEvC19C,KAAKg/C,aAAez2C,EAAOy2C,aAEtBz2C,EAAOy0C,MAEXh9C,KAAKg9C,OAAUh9C,KAAKg9C,OAAS,IAAIsD,IAAUnlB,KAAM5yB,EAAOy0C,OAIxDh9C,KAAKg9C,MAAQ,KAIdh9C,KAAK+sE,aAAexkE,EAAOwkE,aAC3B/sE,KAAKgtE,gBAAkBzkE,EAAOykE,gBAEvBhtE,S,GA/E0Bk8E,IAqFnCC,GAAqBh9E,UAAU27F,wBAAyB,EAExD,IAAMiQ,GAAiB,CAGtBC,WAAY,SAAWr7E,EAAOzjB,EAAMD,GAEnC,OAAK8+F,GAAeE,aAAct7E,GAI1B,IAAIA,EAAMnwB,YAAamwB,EAAMykC,SAAUloD,OAAa3J,IAAP0J,EAAmBA,EAAK0jB,EAAMnxB,SAI5EmxB,EAAMllB,MAAOyB,EAAMD,IAK3Bi/F,aAAc,SAAWv7E,EAAO1J,EAAMklF,GAErC,OAAOx7E,IACJw7E,GAAcx7E,EAAMnwB,cAAgBymB,EAAc0J,EAEd,kBAA3B1J,EAAKiuC,kBAET,IAAIjuC,EAAM0J,GAIX5sB,MAAM5D,UAAUsL,MAAMtJ,KAAMwuB,IAIpCs7E,aAAc,SAAWhqG,GAExB,OAAOqI,YAAYC,OAAQtI,MACtBA,aAAkBmqG,WAKxBC,iBAAkB,SAAWC,GAU5B,IAFA,IAAMnoG,EAAImoG,EAAM9sG,OACVqB,EAAS,IAAIkD,MAAOI,GAChB5E,EAAI,EAAGA,IAAM4E,IAAM5E,EAAIsB,EAAQtB,GAAMA,EAI/C,OAFAsB,EAAOosE,MAVP,SAAsB1tE,EAAG4gB,GAExB,OAAOmsF,EAAO/sG,GAAM+sG,EAAOnsF,MAUrBtf,GAKR0rG,YAAa,SAAWrkG,EAAQs9D,EAAQzxC,GAKvC,IAHA,IAAMy4E,EAAUtkG,EAAO1I,OACjBqB,EAAS,IAAIqH,EAAO1H,YAAagsG,GAE7BjtG,EAAI,EAAG6iC,EAAY,EAAGA,IAAcoqE,IAAYjtG,EAIzD,IAFA,IAAMktG,EAAY14E,EAAOx0B,GAAMimE,EAErBrlD,EAAI,EAAGA,IAAMqlD,IAAWrlD,EAEjCtf,EAAQuhC,KAAiBl6B,EAAQukG,EAAYtsF,GAM/C,OAAOtf,GAKR6rG,YAAa,SAAWC,EAAUL,EAAOpkG,EAAQ0kG,GAIhD,IAFA,IAAIrtG,EAAI,EAAGQ,EAAM4sG,EAAU,QAEXppG,IAARxD,QAAkDwD,IAA7BxD,EAAK6sG,IAEjC7sG,EAAM4sG,EAAUptG,KAIjB,QAAagE,IAARxD,EAAL,CAEA,IAAIU,EAAQV,EAAK6sG,GACjB,QAAerpG,IAAV9C,EAEL,GAAKsD,MAAMC,QAASvD,GAEnB,QAIgB8C,KAFf9C,EAAQV,EAAK6sG,MAIZN,EAAMnnG,KAAMpF,EAAIszD,MAChBnrD,EAAO/C,KAAK/D,MAAO8G,EAAQzH,IAI5BV,EAAM4sG,EAAUptG,gBAECgE,IAARxD,QAEJ,QAAuBwD,IAAlB9C,EAAMu1C,QAIjB,QAIgBzyC,KAFf9C,EAAQV,EAAK6sG,MAIZN,EAAMnnG,KAAMpF,EAAIszD,MAChB5yD,EAAMu1C,QAAS9tC,EAAQA,EAAO1I,SAI/BO,EAAM4sG,EAAUptG,gBAECgE,IAARxD,QAMV,QAIgBwD,KAFf9C,EAAQV,EAAK6sG,MAIZN,EAAMnnG,KAAMpF,EAAIszD,MAChBnrD,EAAO/C,KAAM1E,IAIdV,EAAM4sG,EAAUptG,gBAECgE,IAARxD,KAMZ8sG,QAAS,SAAWC,EAAYtnG,EAAMunG,EAAYC,GAAqB,IAAXC,EAAW,uDAAL,GAE3DC,EAAOJ,EAAWxtE,QAExB4tE,EAAK1nG,KAAOA,EAIZ,IAFA,IAAM2nG,EAAS,GAEL5tG,EAAI,EAAGA,EAAI2tG,EAAKC,OAAO3tG,SAAWD,EAAI,CAQ/C,IANA,IAAM6tG,EAAQF,EAAKC,OAAQ5tG,GACrB8tG,EAAYD,EAAME,eAElBhB,EAAQ,GACRpkG,EAAS,GAELiY,EAAI,EAAGA,EAAIitF,EAAMd,MAAM9sG,SAAW2gB,EAAI,CAE/C,IAAMmzC,EAAQ85C,EAAMd,MAAOnsF,GAAM8sF,EAEjC,KAAK35C,EAAQy5C,GAAcz5C,GAAS05C,GAApC,CAEAV,EAAMnnG,KAAMioG,EAAMd,MAAOnsF,IAEzB,IAAM,IAAIrT,EAAI,EAAGA,EAAIugG,IAAcvgG,EAElC5E,EAAO/C,KAAMioG,EAAMllG,OAAQiY,EAAIktF,EAAYvgG,KAMvB,IAAjBw/F,EAAM9sG,SAEX4tG,EAAMd,MAAQP,GAAeG,aAAcI,EAAOc,EAAMd,MAAM9rG,aAC9D4sG,EAAMllG,OAAS6jG,GAAeG,aAAchkG,EAAQklG,EAAMllG,OAAO1H,aAEjE2sG,EAAOhoG,KAAMioG,IAIdF,EAAKC,OAASA,EAMd,IAFA,IAAII,EAAetnE,IAET1mC,EAAI,EAAGA,EAAI2tG,EAAKC,OAAO3tG,SAAWD,EAEtCguG,EAAeL,EAAKC,OAAQ5tG,GAAI+sG,MAAO,KAE3CiB,EAAeL,EAAKC,OAAQ5tG,GAAI+sG,MAAO,IAQzC,IAAM,IAAI/sG,EAAI,EAAGA,EAAI2tG,EAAKC,OAAO3tG,SAAWD,EAE3C2tG,EAAKC,OAAQ5tG,GAAIghG,OAAS,EAAIgN,GAM/B,OAFAL,EAAKM,gBAEEN,GAIRO,iBAAkB,SAAWC,GAAuE,IAA3DC,EAA2D,uDAA1C,EAAGC,EAAuC,uDAAvBF,EAAYT,EAAW,uDAAL,GAEzFA,GAAO,IAAIA,EAAM,IAMtB,IAJA,IAAMY,EAAYD,EAAcT,OAAO3tG,OACjCsuG,EAAgBH,EAAiBV,EAL4D,WAQzF1tG,GAET,IAAMwuG,EAAiBH,EAAcT,OAAQ5tG,GACvCyuG,EAAqBD,EAAeE,cAG1C,GAA4B,SAAvBD,GAAwD,WAAvBA,EAAkC,iBAGxE,IAAME,EAAcR,EAAWP,OAAOgB,MAAM,SAAWf,GAEtD,OAAOA,EAAM5nG,OAASuoG,EAAevoG,MACjC4nG,EAAMa,gBAAkBD,KAI7B,QAAqBzqG,IAAhB2qG,EAA4B,iBAEjC,IAAIE,EAAkB,EAChBC,EAAqBN,EAAeT,eAErCS,EAAeO,kBAAkBC,4CAErCH,EAAkBC,EAAqB,GAIxC,IAAIG,EAAe,EACbC,EAAkBP,EAAYZ,eAE/BY,EAAYI,kBAAkBC,4CAElCC,EAAeC,EAAkB,GAIlC,IAAMp6B,EAAY05B,EAAezB,MAAM9sG,OAAS,EAC5CkvG,OAAc,EAGlB,GAAKZ,GAAiBC,EAAezB,MAAO,GAAM,CAGjD,IAAMqC,EAAaP,EACbQ,EAAWP,EAAqBD,EACtCM,EAAiB3C,GAAeC,WAAY+B,EAAe7lG,OAAQymG,EAAYC,QAEzE,GAAKd,GAAiBC,EAAezB,MAAOj4B,GAAc,CAGhE,IAAMs6B,EAAat6B,EAAYg6B,EAAqBD,EAC9CQ,EAAWD,EAAaN,EAAqBD,EACnDM,EAAiB3C,GAAeC,WAAY+B,EAAe7lG,OAAQymG,EAAYC,OAEzE,CAGN,IAAMC,EAAcd,EAAeO,oBAC7BK,EAAaP,EACbQ,EAAWP,EAAqBD,EACtCS,EAAYC,SAAUhB,GACtBY,EAAiB3C,GAAeC,WAAY6C,EAAYE,aAAcJ,EAAYC,GAKvD,eAAvBZ,IAEkB,IAAIxuE,IAAa1F,UAAW40E,GAAiB/4E,YAAYoL,YACjEiV,QAAS04D,GAOxB,IADA,IAAMM,EAAWd,EAAY5B,MAAM9sG,OACzB2gB,EAAI,EAAGA,EAAI6uF,IAAa7uF,EAAI,CAErC,IAAM8uF,EAAa9uF,EAAIsuF,EAAkBD,EAEzC,GAA4B,eAAvBR,EAGJxuE,GAAW0vE,wBACVhB,EAAYhmG,OACZ+mG,EACAP,EACA,EACAR,EAAYhmG,OACZ+mG,QAQD,IAHA,IAAME,EAAWV,EAAiC,EAAfD,EAGzB1hG,EAAI,EAAGA,EAAIqiG,IAAariG,EAEjCohG,EAAYhmG,OAAQ+mG,EAAaniG,IAAO4hG,EAAgB5hG,KAnGlDvN,EAAI,EAAGA,EAAIsuG,IAActuG,EAAI,EAA7BA,GA+GV,OAFAmuG,EAAW0B,UAAYr/E,GAEhB29E,IA2BH2B,G,WAEL,WAAaC,EAAoBC,EAAcC,EAAYT,GAAe,oBAEzE/tG,KAAKsuG,mBAAqBA,EAC1BtuG,KAAKyuG,aAAe,EAEpBzuG,KAAK+tG,kBAAgCxrG,IAAjBwrG,EACnBA,EAAe,IAAIQ,EAAa/uG,YAAagvG,GAC9CxuG,KAAKuuG,aAAeA,EACpBvuG,KAAKqsG,UAAYmC,EAEjBxuG,KAAK0uG,SAAW,KAChB1uG,KAAK2uG,iBAAmB,G,4CAIzB,SAAUl+E,GAET,IAAMm+E,EAAK5uG,KAAKsuG,mBACZv2D,EAAK/3C,KAAKyuG,aACbvjE,EAAK0jE,EAAI72D,GACT9M,EAAK2jE,EAAI72D,EAAK,GAEf82D,EAAmB,CAElBC,EAAM,CAEL,IAAI5+D,EAEJ6+D,EAAa,CAMZC,EAAc,KAASv+E,EAAIya,GAAO,CAEjC,IAAM,IAAI+jE,EAAWl3D,EAAK,IAAO,CAEhC,QAAYx1C,IAAP2oC,EAAmB,CAEvB,GAAKza,EAAIwa,EAAK,MAAM+jE,EAMpB,OAFAj3D,EAAK62D,EAAGpwG,OACRwB,KAAKyuG,aAAe12D,EACb/3C,KAAKkvG,UAAWn3D,EAAK,EAAGtnB,EAAGwa,GAInC,GAAK8M,IAAOk3D,EAAW,MAKvB,GAHAhkE,EAAKC,EAGAza,GAFLya,EAAK0jE,IAAO72D,IAKX,MAAM+2D,EAOR5+D,EAAQ0+D,EAAGpwG,OACX,MAAMuwG,EAMP,GAASt+E,GAAKwa,EAiDd,MAAM4jE,EA7CL,IAAMM,EAAWP,EAAI,GAEhBn+E,EAAI0+E,IAERp3D,EAAK,EACL9M,EAAKkkE,GAMN,IAAM,IAAIF,EAAWl3D,EAAK,IAAO,CAEhC,QAAYx1C,IAAP0oC,EAKJ,OADAjrC,KAAKyuG,aAAe,EACbzuG,KAAKovG,aAAc,EAAG3+E,EAAGya,GAIjC,GAAK6M,IAAOk3D,EAAW,MAKvB,GAHA/jE,EAAKD,EAGAxa,IAFLwa,EAAK2jE,IAAO72D,EAAK,IAKhB,MAAM+2D,EAOR5+D,EAAQ6H,EACRA,EAAK,EAaP,KAAQA,EAAK7H,GAAQ,CAEpB,IAAMm/D,EAAQt3D,EAAK7H,IAAY,EAE1Bzf,EAAIm+E,EAAIS,GAEZn/D,EAAQm/D,EAIRt3D,EAAKs3D,EAAM,EAWb,GALAnkE,EAAK0jE,EAAI72D,QAKGx1C,KAJZ0oC,EAAK2jE,EAAI72D,EAAK,IAOb,OADA/3C,KAAKyuG,aAAe,EACbzuG,KAAKovG,aAAc,EAAG3+E,EAAGya,GAIjC,QAAY3oC,IAAP2oC,EAIJ,OAFA6M,EAAK62D,EAAGpwG,OACRwB,KAAKyuG,aAAe12D,EACb/3C,KAAKkvG,UAAWn3D,EAAK,EAAG9M,EAAIxa,GAMrCzwB,KAAKyuG,aAAe12D,EAEpB/3C,KAAKsvG,iBAAkBv3D,EAAI9M,EAAIC,GAIhC,OAAOlrC,KAAKuvG,aAAcx3D,EAAI9M,EAAIxa,EAAGya,K,0BAItC,WAEC,OAAOlrC,KAAK0uG,UAAY1uG,KAAK2uG,mB,8BAI9B,SAAkB9iG,GASjB,IALA,IAAMhM,EAASG,KAAK+tG,aACnB7mG,EAASlH,KAAKuuG,aACd/pC,EAASxkE,KAAKqsG,UACd5uF,EAAS5R,EAAQ24D,EAERjmE,EAAI,EAAGA,IAAMimE,IAAWjmE,EAEjCsB,EAAQtB,GAAM2I,EAAQuW,EAASlf,GAIhC,OAAOsB,I,0BAMR,WAEC,MAAM,IAAI2L,MAAO,6B,8BAKlB,gB,KAUD6iG,GAAYlvG,UAAUiwG,aAAef,GAAYlvG,UAAUqwG,iBAC3DnB,GAAYlvG,UAAU+vG,UAAYb,GAAYlvG,UAAUqwG,iB,IAUlDC,G,kDAEL,WAAanB,EAAoBC,EAAcC,EAAYT,GAAe,kCAEzE,cAAOO,EAAoBC,EAAcC,EAAYT,IAEhD2B,aAAgB,EACrB,EAAKC,aAAgB,EACrB,EAAKC,aAAgB,EACrB,EAAKC,aAAgB,EAErB,EAAKlB,iBAAmB,CAEvBmB,YAAanhF,GACbohF,UAAWphF,IAZ6D,E,oDAkB1E,SAAkBopB,EAAI9M,EAAIC,GAEzB,IAAM0jE,EAAK5uG,KAAKsuG,mBACZ0B,EAAQj4D,EAAK,EAChBk4D,EAAQl4D,EAAK,EAEbm4D,EAAQtB,EAAIoB,GACZG,EAAQvB,EAAIqB,GAEb,QAAe1tG,IAAV2tG,EAEJ,OAASlwG,KAAKowG,eAAeN,aAE5B,KAAKlhF,GAGJohF,EAAQj4D,EACRm4D,EAAQ,EAAIjlE,EAAKC,EAEjB,MAED,KAAKrc,GAIJqhF,EAAQjlE,EAAK2jE,EADboB,EAAQpB,EAAGpwG,OAAS,GACOowG,EAAIoB,EAAQ,GAEvC,MAED,QAGCA,EAAQj4D,EACRm4D,EAAQhlE,EAMX,QAAe3oC,IAAV4tG,EAEJ,OAASnwG,KAAKowG,eAAeL,WAE5B,KAAKnhF,GAGJqhF,EAAQl4D,EACRo4D,EAAQ,EAAIjlE,EAAKD,EAEjB,MAED,KAAKpc,GAGJohF,EAAQ,EACRE,EAAQjlE,EAAK0jE,EAAI,GAAMA,EAAI,GAE3B,MAED,QAGCqB,EAAQl4D,EAAK,EACbo4D,EAAQllE,EAMX,IAAMolE,EAAuB,IAAZnlE,EAAKD,GACrBu5B,EAASxkE,KAAKqsG,UAEfrsG,KAAK0vG,YAAcW,GAAWplE,EAAKilE,GACnClwG,KAAK4vG,YAAcS,GAAWF,EAAQjlE,GACtClrC,KAAK2vG,YAAcK,EAAQxrC,EAC3BxkE,KAAK6vG,YAAcI,EAAQzrC,I,0BAI5B,SAAczsB,EAAI9M,EAAIxa,EAAGya,GAuBxB,IArBA,IAAMrrC,EAASG,KAAK+tG,aACnB7mG,EAASlH,KAAKuuG,aACd/pC,EAASxkE,KAAKqsG,UAEdiE,EAAKv4D,EAAKysB,EAAS+rC,EAAKD,EAAK9rC,EAC7BgsC,EAAKxwG,KAAK2vG,YAAcc,EAAKzwG,KAAK6vG,YAClCa,EAAK1wG,KAAK0vG,YAAaiB,EAAK3wG,KAAK4vG,YAEjCr5F,GAAMka,EAAIwa,IAASC,EAAKD,GACxB2jE,EAAKr4F,EAAIA,EACTq6F,EAAMhC,EAAKr4F,EAINs6F,GAAOH,EAAKE,EAAM,EAAIF,EAAK9B,EAAK8B,EAAKn6F,EACrCg0B,GAAO,EAAImmE,GAAOE,IAAU,IAAM,EAAIF,GAAO9B,IAAS,GAAM8B,GAAOn6F,EAAI,EACvE6oB,IAAS,EAAIuxE,GAAOC,GAAQ,IAAMD,GAAO/B,EAAK,GAAMr4F,EACpDu6F,EAAKH,EAAKC,EAAMD,EAAK/B,EAIjBrwG,EAAI,EAAGA,IAAMimE,IAAWjmE,EAEjCsB,EAAQtB,GACNsyG,EAAK3pG,EAAQspG,EAAKjyG,GAClBgsC,EAAKrjC,EAAQqpG,EAAKhyG,GAClB6gC,EAAKl4B,EAAQopG,EAAK/xG,GAClBuyG,EAAK5pG,EAAQupG,EAAKlyG,GAIrB,OAAOsB,M,GApIsBwuG,IA0IzB0C,G,kDAEL,WAAazC,EAAoBC,EAAcC,EAAYT,GAAe,uCAElEO,EAAoBC,EAAcC,EAAYT,G,gDAItD,SAAch2D,EAAI9M,EAAIxa,EAAGya,GAYxB,IAVA,IAAMrrC,EAASG,KAAK+tG,aACnB7mG,EAASlH,KAAKuuG,aACd/pC,EAASxkE,KAAKqsG,UAEd2E,EAAUj5D,EAAKysB,EACfysC,EAAUD,EAAUxsC,EAEpB0sC,GAAYzgF,EAAIwa,IAASC,EAAKD,GAC9BkmE,EAAU,EAAID,EAEL3yG,EAAI,EAAGA,IAAMimE,IAAWjmE,EAEjCsB,EAAQtB,GACN2I,EAAQ+pG,EAAU1yG,GAAM4yG,EACxBjqG,EAAQ8pG,EAAUzyG,GAAM2yG,EAI3B,OAAOrxG,M,GA5BuBwuG,IAwC1B+C,G,kDAEL,WAAa9C,EAAoBC,EAAcC,EAAYT,GAAe,uCAElEO,EAAoBC,EAAcC,EAAYT,G,gDAItD,SAAch2D,GAEb,OAAO/3C,KAAKwvG,iBAAkBz3D,EAAK,O,GAVHs2D,IAgB5BgD,G,WAEL,WAAa7sG,EAAM8mG,EAAOpkG,EAAQoqG,GAEjC,GAFiD,yBAEnC/uG,IAATiC,EAAqB,MAAM,IAAIgH,MAAO,gDAC3C,QAAejJ,IAAV+oG,GAAwC,IAAjBA,EAAM9sG,OAAe,MAAM,IAAIgN,MAAO,oDAAsDhH,GAExHxE,KAAKwE,KAAOA,EAEZxE,KAAKsrG,MAAQP,GAAeG,aAAcI,EAAOtrG,KAAKuxG,gBACtDvxG,KAAKkH,OAAS6jG,GAAeG,aAAchkG,EAAQlH,KAAKwxG,iBAExDxxG,KAAKyxG,iBAAkBH,GAAiBtxG,KAAK0xG,sB,oEA6C9C,SAAkC7xG,GAEjC,OAAO,IAAIuxG,GAAqBpxG,KAAKsrG,MAAOtrG,KAAKkH,OAAQlH,KAAKssG,eAAgBzsG,K,4CAI/E,SAAgCA,GAE/B,OAAO,IAAIkxG,GAAmB/wG,KAAKsrG,MAAOtrG,KAAKkH,OAAQlH,KAAKssG,eAAgBzsG,K,4CAI7E,SAAgCA,GAE/B,OAAO,IAAI4vG,GAAkBzvG,KAAKsrG,MAAOtrG,KAAKkH,OAAQlH,KAAKssG,eAAgBzsG,K,8BAI5E,SAAkByxG,GAEjB,IAAIK,EAEJ,OAASL,GAER,KAAK9iF,GAEJmjF,EAAgB3xG,KAAK4xG,iCAErB,MAED,KAAKnjF,GAEJkjF,EAAgB3xG,KAAK6xG,+BAErB,MAED,KAAKnjF,GAEJijF,EAAgB3xG,KAAK8xG,+BAMvB,QAAuBvvG,IAAlBovG,EAA8B,CAElC,IAAMpmG,EAAU,iCACfvL,KAAKitG,cAAgB,yBAA2BjtG,KAAKwE,KAEtD,QAAgCjC,IAA3BvC,KAAKstG,kBAAkC,CAG3C,GAAKgE,IAAkBtxG,KAAK0xG,qBAM3B,MAAM,IAAIlmG,MAAOD,GAJjBvL,KAAKyxG,iBAAkBzxG,KAAK0xG,sBAW9B,OADApsF,QAAQM,KAAM,uBAAwBra,GAC/BvL,KAMR,OAFAA,KAAKstG,kBAAoBqE,EAElB3xG,O,8BAIR,WAEC,OAASA,KAAKstG,mBAEb,KAAKttG,KAAK4xG,iCAET,OAAOpjF,GAER,KAAKxuB,KAAK6xG,+BAET,OAAOpjF,GAER,KAAKzuB,KAAK8xG,+BAET,OAAOpjF,M,0BAMV,WAEC,OAAO1uB,KAAKkH,OAAO1I,OAASwB,KAAKsrG,MAAM9sG,S,mBAKxC,SAAOuzG,GAEN,GAAoB,IAAfA,EAIJ,IAFA,IAAMzG,EAAQtrG,KAAKsrG,MAET/sG,EAAI,EAAG4E,EAAImoG,EAAM9sG,OAAQD,IAAM4E,IAAM5E,EAE9C+sG,EAAO/sG,IAAOwzG,EAMhB,OAAO/xG,O,mBAKR,SAAOgyG,GAEN,GAAmB,IAAdA,EAIJ,IAFA,IAAM1G,EAAQtrG,KAAKsrG,MAET/sG,EAAI,EAAG4E,EAAImoG,EAAM9sG,OAAQD,IAAM4E,IAAM5E,EAE9C+sG,EAAO/sG,IAAOyzG,EAMhB,OAAOhyG,O,kBAMR,SAAMiyG,EAAWC,GAQhB,IANA,IAAM5G,EAAQtrG,KAAKsrG,MAClB6G,EAAQ7G,EAAM9sG,OAEX0N,EAAO,EACVD,EAAKkmG,EAAQ,EAENjmG,IAASimG,GAAS7G,EAAOp/F,GAAS+lG,KAEtC/lG,EAIJ,MAAiB,IAATD,GAAcq/F,EAAOr/F,GAAOimG,KAEhCjmG,EAMJ,KAFGA,EAEW,IAATC,GAAcD,IAAOkmG,EAAQ,CAG5BjmG,GAAQD,IAGZC,GADAD,EAAK6E,KAAKkE,IAAK/I,EAAI,IACP,GAIb,IAAMu4D,EAASxkE,KAAKssG,eACpBtsG,KAAKsrG,MAAQP,GAAeC,WAAYM,EAAOp/F,EAAMD,GACrDjM,KAAKkH,OAAS6jG,GAAeC,WAAYhrG,KAAKkH,OAAQgF,EAAOs4D,EAAQv4D,EAAKu4D,GAI3E,OAAOxkE,O,sBAKR,WAEC,IAAIoyG,GAAQ,EAEN/F,EAAYrsG,KAAKssG,eAClBD,EAAYv7F,KAAKmgB,MAAOo7E,KAAgB,IAE5C/mF,QAAQxjB,MAAO,oDAAqD9B,MACpEoyG,GAAQ,GAIT,IAAM9G,EAAQtrG,KAAKsrG,MAClBpkG,EAASlH,KAAKkH,OAEdirG,EAAQ7G,EAAM9sG,OAEA,IAAV2zG,IAEJ7sF,QAAQxjB,MAAO,uCAAwC9B,MACvDoyG,GAAQ,GAMT,IAFA,IAAIC,EAAW,KAEL9zG,EAAI,EAAGA,IAAM4zG,EAAO5zG,IAAO,CAEpC,IAAM+zG,EAAWhH,EAAO/sG,GAExB,GAAyB,kBAAb+zG,GAAyBptD,MAAOotD,GAAa,CAExDhtF,QAAQxjB,MAAO,mDAAoD9B,KAAMzB,EAAG+zG,GAC5EF,GAAQ,EACR,MAID,GAAkB,OAAbC,GAAqBA,EAAWC,EAAW,CAE/ChtF,QAAQxjB,MAAO,0CAA2C9B,KAAMzB,EAAG+zG,EAAUD,GAC7ED,GAAQ,EACR,MAIDC,EAAWC,EAIZ,QAAgB/vG,IAAX2E,GAEC6jG,GAAeE,aAAc/jG,GAEjC,IAAM,IAAI3I,EAAI,EAAG4E,EAAI+D,EAAO1I,OAAQD,IAAM4E,IAAM5E,EAAI,CAEnD,IAAMkB,EAAQyH,EAAQ3I,GAEtB,GAAK2mD,MAAOzlD,GAAU,CAErB6lB,QAAQxjB,MAAO,oDAAqD9B,KAAMzB,EAAGkB,GAC7E2yG,GAAQ,EACR,OAUJ,OAAOA,I,sBAMR,WAaC,IAVA,IAAM9G,EAAQP,GAAeC,WAAYhrG,KAAKsrG,OAC7CpkG,EAAS6jG,GAAeC,WAAYhrG,KAAKkH,QACzCs9D,EAASxkE,KAAKssG,eAEdiG,EAAsBvyG,KAAKwyG,qBAAuB9jF,GAElD2kD,EAAYi4B,EAAM9sG,OAAS,EAExBi0G,EAAa,EAEPl0G,EAAI,EAAGA,EAAI80E,IAAc90E,EAAI,CAEtC,IAAIm0G,GAAO,EAELrgD,EAAOi5C,EAAO/sG,GAKpB,GAAK8zD,IAJYi5C,EAAO/sG,EAAI,KAIM,IAANA,GAAW8zD,IAASi5C,EAAO,IAEtD,GAAOiH,EAwBNG,GAAO,OAhBP,IAJA,IAAMj1F,EAASlf,EAAIimE,EAClBmuC,EAAUl1F,EAAS+mD,EACnBouC,EAAUn1F,EAAS+mD,EAEVrlD,EAAI,EAAGA,IAAMqlD,IAAWrlD,EAAI,CAErC,IAAM1f,EAAQyH,EAAQuW,EAAS0B,GAE/B,GAAK1f,IAAUyH,EAAQyrG,EAAUxzF,IAChC1f,IAAUyH,EAAQ0rG,EAAUzzF,GAAM,CAElCuzF,GAAO,EACP,OAgBJ,GAAKA,EAAO,CAEX,GAAKn0G,IAAMk0G,EAAa,CAEvBnH,EAAOmH,GAAenH,EAAO/sG,GAK7B,IAHA,IAAMs0G,EAAat0G,EAAIimE,EACtBsuC,EAAcL,EAAajuC,EAElBrlD,EAAI,EAAGA,IAAMqlD,IAAWrlD,EAEjCjY,EAAQ4rG,EAAc3zF,GAAMjY,EAAQ2rG,EAAa1zF,KAMhDszF,GAQL,GAAKp/B,EAAY,EAAI,CAEpBi4B,EAAOmH,GAAenH,EAAOj4B,GAE7B,IAAM,IAAIw/B,EAAax/B,EAAY7O,EAAQsuC,EAAcL,EAAajuC,EAAQrlD,EAAI,EAAGA,IAAMqlD,IAAWrlD,EAErGjY,EAAQ4rG,EAAc3zF,GAAMjY,EAAQ2rG,EAAa1zF,KAI/CszF,EAgBJ,OAZKA,IAAenH,EAAM9sG,QAEzBwB,KAAKsrG,MAAQP,GAAeC,WAAYM,EAAO,EAAGmH,GAClDzyG,KAAKkH,OAAS6jG,GAAeC,WAAY9jG,EAAQ,EAAGurG,EAAajuC,KAIjExkE,KAAKsrG,MAAQA,EACbtrG,KAAKkH,OAASA,GAIRlH,O,mBAIR,WAEC,IAAMsrG,EAAQP,GAAeC,WAAYhrG,KAAKsrG,MAAO,GAC/CpkG,EAAS6jG,GAAeC,WAAYhrG,KAAKkH,OAAQ,GAGjDklG,EAAQ,IAAI2G,EADS/yG,KAAKR,aACMQ,KAAKwE,KAAM8mG,EAAOpkG,GAKxD,OAFAklG,EAAMkB,kBAAoBttG,KAAKstG,kBAExBlB,K,qBAtaR,SAAeA,GAEd,IAEI3D,EAFEuK,EAAY5G,EAAM5sG,YAKxB,GAAKwzG,EAAUj+D,SAAW/0C,KAAK+0C,OAE9B0zD,EAAOuK,EAAUj+D,OAAQq3D,OAEnB,CAGN3D,EAAO,CAEN,KAAQ2D,EAAM5nG,KACd,MAASumG,GAAeG,aAAckB,EAAMd,MAAOvoG,OACnD,OAAUgoG,GAAeG,aAAckB,EAAMllG,OAAQnE,QAItD,IAAMuuG,EAAgBlF,EAAMoG,mBAEvBlB,IAAkBlF,EAAMsF,uBAE5BjJ,EAAK6I,cAAgBA,GAQvB,OAFA7I,EAAKxiF,KAAOmmF,EAAMa,cAEXxE,M,KA0YT4I,GAAclyG,UAAUoyG,eAAiBhuD,aACzC8tD,GAAclyG,UAAUqyG,gBAAkBjuD,aAC1C8tD,GAAclyG,UAAUuyG,qBAAuBjjF,G,IAKzCwkF,G,4HAA6B5B,IAEnC4B,GAAqB9zG,UAAU8tG,cAAgB,OAC/CgG,GAAqB9zG,UAAUqyG,gBAAkBzuG,MACjDkwG,GAAqB9zG,UAAUuyG,qBAAuBljF,GACtDykF,GAAqB9zG,UAAU0yG,oCAAiCtvG,EAChE0wG,GAAqB9zG,UAAU2yG,oCAAiCvvG,E,IAK1D2wG,G,4HAA2B7B,IAEjC6B,GAAmB/zG,UAAU8tG,cAAgB,Q,IAKvCkG,G,4HAA4B9B,IAElC8B,GAAoBh0G,UAAU8tG,cAAgB,S,IAMxCmG,G,kDAEL,WAAa9E,EAAoBC,EAAcC,EAAYT,GAAe,uCAElEO,EAAoBC,EAAcC,EAAYT,G,gDAItD,SAAch2D,EAAI9M,EAAIxa,EAAGya,GAUxB,IARA,IAAMrrC,EAASG,KAAK+tG,aACnB7mG,EAASlH,KAAKuuG,aACd/pC,EAASxkE,KAAKqsG,UAEdz3E,GAAUnE,EAAIwa,IAASC,EAAKD,GAEzBxtB,EAASs6B,EAAKysB,EAERv9D,EAAMwW,EAAS+mD,EAAQ/mD,IAAWxW,EAAKwW,GAAU,EAE1D+gB,GAAW60E,UAAWxzG,EAAQ,EAAGqH,EAAQuW,EAAS+mD,EAAQt9D,EAAQuW,EAAQmX,GAI3E,OAAO/0B,M,GAxBiCwuG,IAiCpCiF,G,oLAEL,SAAgCzzG,GAE/B,OAAO,IAAIuzG,GAA6BpzG,KAAKsrG,MAAOtrG,KAAKkH,OAAQlH,KAAKssG,eAAgBzsG,O,GAJlDwxG,IAUtCiC,GAAwBn0G,UAAU8tG,cAAgB,aAElDqG,GAAwBn0G,UAAUuyG,qBAAuBjjF,GACzD6kF,GAAwBn0G,UAAU2yG,oCAAiCvvG,E,IAK7DgxG,G,4HAA4BlC,IAElCkC,GAAoBp0G,UAAU8tG,cAAgB,SAC9CsG,GAAoBp0G,UAAUqyG,gBAAkBzuG,MAChDwwG,GAAoBp0G,UAAUuyG,qBAAuBljF,GACrD+kF,GAAoBp0G,UAAU0yG,oCAAiCtvG,EAC/DgxG,GAAoBp0G,UAAU2yG,oCAAiCvvG,E,IAKzDixG,G,4HAA4BnC,IAElCmC,GAAoBr0G,UAAU8tG,cAAgB,S,IAExCwG,G,WAEL,WAAajvG,GAAqE,IAA/DkvG,EAA+D,wDAAlD,EAAGvH,EAA+C,uCAAvCiC,EAAuC,uDAA3Bt/E,GAA2B,oBAEjF9uB,KAAKwE,KAAOA,EACZxE,KAAKmsG,OAASA,EACdnsG,KAAK0zG,SAAWA,EAChB1zG,KAAKouG,UAAYA,EAEjBpuG,KAAKy6B,KAAOxK,KAGPjwB,KAAK0zG,SAAW,GAEpB1zG,KAAKwsG,gB,iDAmSP,WAKC,IAHA,IACIkH,EAAW,EAELn1G,EAAI,EAAG4E,EAHFnD,KAAKmsG,OAGQ3tG,OAAQD,IAAM4E,IAAM5E,EAAI,CAEnD,IAAM6tG,EAAQpsG,KAAKmsG,OAAQ5tG,GAE3Bm1G,EAAW5iG,KAAKkE,IAAK0+F,EAAUtH,EAAMd,MAAOc,EAAMd,MAAM9sG,OAAS,IAMlE,OAFAwB,KAAK0zG,SAAWA,EAET1zG,O,kBAIR,WAEC,IAAM,IAAIzB,EAAI,EAAGA,EAAIyB,KAAKmsG,OAAO3tG,OAAQD,IAExCyB,KAAKmsG,OAAQ5tG,GAAIuM,KAAM,EAAG9K,KAAK0zG,UAIhC,OAAO1zG,O,sBAIR,WAIC,IAFA,IAAIoyG,GAAQ,EAEF7zG,EAAI,EAAGA,EAAIyB,KAAKmsG,OAAO3tG,OAAQD,IAExC6zG,EAAQA,GAASpyG,KAAKmsG,OAAQ5tG,GAAIo1G,WAInC,OAAOvB,I,sBAIR,WAEC,IAAM,IAAI7zG,EAAI,EAAGA,EAAIyB,KAAKmsG,OAAO3tG,OAAQD,IAExCyB,KAAKmsG,OAAQ5tG,GAAIq1G,WAIlB,OAAO5zG,O,mBAIR,WAIC,IAFA,IAAMmsG,EAAS,GAEL5tG,EAAI,EAAGA,EAAIyB,KAAKmsG,OAAO3tG,OAAQD,IAExC4tG,EAAOhoG,KAAMnE,KAAKmsG,OAAQ5tG,GAAI+/B,SAI/B,OAAO,IAAIt+B,KAAKR,YAAaQ,KAAKwE,KAAMxE,KAAK0zG,SAAUvH,EAAQnsG,KAAKouG,a,oBAIrE,WAEC,OAAOpuG,KAAKR,YAAYu1C,OAAQ/0C,S,oBArWjC,SAAcyoG,GAMb,IAJA,IAAM0D,EAAS,GACd0H,EAAapL,EAAK0D,OAClB2H,EAAY,GAAQrL,EAAKwD,KAAO,GAEvB1tG,EAAI,EAAG4E,EAAI0wG,EAAWr1G,OAAQD,IAAM4E,IAAM5E,EAEnD4tG,EAAOhoG,KAAM4vG,GAAoBF,EAAYt1G,IAAM6wC,MAAO0kE,IAI3D,IAAM5H,EAAO,IAAIlsG,KAAMyoG,EAAKjkG,KAAMikG,EAAKiL,SAAUvH,EAAQ1D,EAAK2F,WAG9D,OAFAlC,EAAKzxE,KAAOguE,EAAKhuE,KAEVyxE,I,oBAIR,SAAeA,GAed,IAbA,IAAMC,EAAS,GACd6H,EAAa9H,EAAKC,OAEb1D,EAAO,CAEZ,KAAQyD,EAAK1nG,KACb,SAAY0nG,EAAKwH,SACjB,OAAUvH,EACV,KAAQD,EAAKzxE,KACb,UAAayxE,EAAKkC,WAIT7vG,EAAI,EAAG4E,EAAI6wG,EAAWx1G,OAAQD,IAAM4E,IAAM5E,EAEnD4tG,EAAOhoG,KAAMktG,GAAct8D,OAAQi/D,EAAYz1G,KAIhD,OAAOkqG,I,2CAIR,SAAsCjkG,EAAMyvG,EAAqBhI,EAAKiI,GAKrE,IAHA,IAAMC,EAAkBF,EAAoBz1G,OACtC2tG,EAAS,GAEL5tG,EAAI,EAAGA,EAAI41G,EAAiB51G,IAAO,CAE5C,IAAI+sG,EAAQ,GACRpkG,EAAS,GAEbokG,EAAMnnG,MACH5F,EAAI41G,EAAkB,GAAMA,EAC9B51G,GACEA,EAAI,GAAM41G,GAEbjtG,EAAO/C,KAAM,EAAG,EAAG,GAEnB,IAAM4uB,EAAQg4E,GAAeM,iBAAkBC,GAC/CA,EAAQP,GAAeQ,YAAaD,EAAO,EAAGv4E,GAC9C7rB,EAAS6jG,GAAeQ,YAAarkG,EAAQ,EAAG6rB,GAIzCmhF,GAAyB,IAAf5I,EAAO,KAEvBA,EAAMnnG,KAAMgwG,GACZjtG,EAAO/C,KAAM+C,EAAQ,KAItBilG,EAAOhoG,KACN,IAAIgvG,GACH,0BAA4Bc,EAAqB11G,GAAIiG,KAAO,IAC5D8mG,EAAOpkG,GACNkoC,MAAO,EAAM68D,IAIjB,OAAO,IAAIjsG,KAAMwE,GAAQ,EAAG2nG,K,wBAI7B,SAAmBiI,EAAmB5vG,GAErC,IAAI6vG,EAAYD,EAEhB,IAAOrxG,MAAMC,QAASoxG,GAAsB,CAE3C,IAAM9zG,EAAI8zG,EACVC,EAAY/zG,EAAEimC,UAAYjmC,EAAEimC,SAASyM,YAAc1yC,EAAE0yC,WAItD,IAAM,IAAIz0C,EAAI,EAAGA,EAAI81G,EAAU71G,OAAQD,IAEtC,GAAK81G,EAAW91G,GAAIiG,OAASA,EAE5B,OAAO6vG,EAAW91G,GAMpB,OAAO,O,iDAIR,SAA4CohD,EAAcssD,EAAKiI,GAU9D,IARA,IAAMI,EAA0B,GAI1Br2F,EAAU,qBAIN1f,EAAI,EAAGonC,EAAKga,EAAanhD,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEzD,IAAMg2G,EAAc50D,EAAcphD,GAC5BmhB,EAAQ60F,EAAY/vG,KAAKoB,MAAOqY,GAEtC,GAAKyB,GAASA,EAAMlhB,OAAS,EAAI,CAEhC,IAAMgG,EAAOkb,EAAO,GAEhB80F,EAAwBF,EAAyB9vG,GAE9CgwG,IAENF,EAAyB9vG,GAASgwG,EAAwB,IAI3DA,EAAsBrwG,KAAMowG,IAM9B,IAAME,EAAQ,GAEd,IAAM,IAAMjwG,KAAQ8vG,EAEnBG,EAAMtwG,KAAMnE,KAAK00G,8BAA+BlwG,EAAM8vG,EAAyB9vG,GAAQynG,EAAKiI,IAI7F,OAAOO,I,4BAKR,SAAuB1+D,EAAWinC,GAEjC,IAAOjnC,EAGN,OADAzwB,QAAQxjB,MAAO,yDACR,KAoCR,IAhCA,IAAM6yG,EAAmB,SAAW3B,EAAW4B,EAAWC,EAAeC,EAAcC,GAGtF,GAA8B,IAAzBF,EAAcr2G,OAAe,CAEjC,IAAM8sG,EAAQ,GACRpkG,EAAS,GAEf6jG,GAAeW,YAAamJ,EAAevJ,EAAOpkG,EAAQ4tG,GAGpC,IAAjBxJ,EAAM9sG,QAEVu2G,EAAW5wG,KAAM,IAAI6uG,EAAW4B,EAAWtJ,EAAOpkG,MAQ/CilG,EAAS,GAET6I,EAAWj/D,EAAUvxC,MAAQ,UAC7BynG,EAAMl2D,EAAUk2D,KAAO,GACvBmC,EAAYr4D,EAAUq4D,UAGxBsF,EAAW39D,EAAUv3C,SAAY,EAE/By2G,EAAkBl/D,EAAUm/D,WAAa,GAErCv6F,EAAI,EAAGA,EAAIs6F,EAAgBz2G,OAAQmc,IAAO,CAEnD,IAAMk6F,EAAgBI,EAAiBt6F,GAAI9T,KAG3C,GAAOguG,GAA0C,IAAzBA,EAAcr2G,OAGtC,GAAKq2G,EAAe,GAAIl1D,aAAe,CAGtC,IAAMw1D,EAAmB,GAErBrpG,OAAC,EAEL,IAAMA,EAAI,EAAGA,EAAI+oG,EAAcr2G,OAAQsN,IAEtC,GAAK+oG,EAAe/oG,GAAI6zC,aAEvB,IAAM,IAAIpiC,EAAI,EAAGA,EAAIs3F,EAAe/oG,GAAI6zC,aAAanhD,OAAQ+e,IAE5D43F,EAAkBN,EAAe/oG,GAAI6zC,aAAcpiC,KAAU,EAWhE,IAAM,IAAM63F,KAAmBD,EAAmB,CAKjD,IAHA,IAAM7J,EAAQ,GACRpkG,EAAS,GAELqW,EAAI,EAAGA,IAAMs3F,EAAe/oG,GAAI6zC,aAAanhD,SAAW+e,EAAI,CAErE,IAAM83F,EAAeR,EAAe/oG,GAEpCw/F,EAAMnnG,KAAMkxG,EAAahjD,MACzBnrD,EAAO/C,KAAQkxG,EAAad,cAAgBa,EAAoB,EAAI,GAIrEjJ,EAAOhoG,KAAM,IAAIgvG,GAAqB,yBAA2BiC,EAAkB,IAAK9J,EAAOpkG,IAIhGwsG,EAAWyB,EAAiB32G,QAAWytG,GAAO,OAExC,CAIN,IAAMqJ,EAAW,UAAYt4B,EAAOriE,GAAInW,KAAO,IAE/CmwG,EACCnB,GAAqB8B,EAAW,YAChCT,EAAe,MAAO1I,GAEvBwI,EACCrB,GAAyBgC,EAAW,cACpCT,EAAe,MAAO1I,GAEvBwI,EACCnB,GAAqB8B,EAAW,SAChCT,EAAe,MAAO1I,IAMzB,OAAuB,IAAlBA,EAAO3tG,OAEJ,KAIK,IAAIwB,KAAMg1G,EAAUtB,EAAUvH,EAAQiC,O,KA+HrD,SAAS2F,GAAoBtL,GAE5B,QAAmBlmG,IAAdkmG,EAAKxiF,KAET,MAAM,IAAIza,MAAO,4DAIlB,IAAMwnG,EAlDP,SAAuCuC,GAEtC,OAASA,EAAShoG,eAEjB,IAAK,SACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,UAEJ,OAAO4lG,GAER,IAAK,SACL,IAAK,UACL,IAAK,UACL,IAAK,UAEJ,OAAOK,GAER,IAAK,QAEJ,OAAON,GAER,IAAK,aAEJ,OAAOI,GAER,IAAK,OACL,IAAK,UAEJ,OAAOL,GAER,IAAK,SAEJ,OAAOM,GAIT,MAAM,IAAI/nG,MAAO,8CAAgD+pG,GAY/CC,CAA8B/M,EAAKxiF,MAErD,QAAoB1jB,IAAfkmG,EAAK6C,MAAsB,CAE/B,IAAMA,EAAQ,GAAIpkG,EAAS,GAE3B6jG,GAAeW,YAAajD,EAAK5hG,KAAMykG,EAAOpkG,EAAQ,SAEtDuhG,EAAK6C,MAAQA,EACb7C,EAAKvhG,OAASA,EAKf,YAAyB3E,IAApBywG,EAAUp2F,MAEPo2F,EAAUp2F,MAAO6rF,GAKjB,IAAIuK,EAAWvK,EAAKjkG,KAAMikG,EAAK6C,MAAO7C,EAAKvhG,OAAQuhG,EAAK6I,eAMjE,IAAMmE,GAAQ,CAEbtnD,SAAS,EAETunD,MAAO,GAEP3vE,IAAK,SAAWhnC,EAAK42G,IAEE,IAAjB31G,KAAKmuD,UAIVnuD,KAAK01G,MAAO32G,GAAQ42G,IAIrB50G,IAAK,SAAWhC,GAEf,IAAsB,IAAjBiB,KAAKmuD,QAIV,OAAOnuD,KAAK01G,MAAO32G,IAIpBg1C,OAAQ,SAAWh1C,UAEXiB,KAAK01G,MAAO32G,IAIpBqxD,MAAO,WAENpwD,KAAK01G,MAAQ,KAiJTE,GAAwB,IAzI7B,WAAaC,EAAQC,EAAYC,GAAU,oBAE1C,IAAMprD,EAAQ3qD,KAEVg2G,GAAY,EACZC,EAAc,EACdC,EAAa,EACbC,OAAc5zG,EACZgY,EAAW,GAKjBva,KAAKo2G,aAAU7zG,EACfvC,KAAK61G,OAASA,EACd71G,KAAK81G,WAAaA,EAClB91G,KAAK+1G,QAAUA,EAEf/1G,KAAKq2G,UAAY,SAAWrxG,GAE3BkxG,KAEmB,IAAdF,QAEmBzzG,IAAlBooD,EAAMyrD,SAEVzrD,EAAMyrD,QAASpxG,EAAKixG,EAAaC,GAMnCF,GAAY,GAIbh2G,KAAKs2G,QAAU,SAAWtxG,GAEzBixG,SAE0B1zG,IAArBooD,EAAMmrD,YAEVnrD,EAAMmrD,WAAY9wG,EAAKixG,EAAaC,GAIhCD,IAAgBC,IAEpBF,GAAY,OAEUzzG,IAAjBooD,EAAMkrD,QAEVlrD,EAAMkrD,WAQT71G,KAAKu2G,UAAY,SAAWvxG,QAEJzC,IAAlBooD,EAAMorD,SAEVprD,EAAMorD,QAAS/wG,IAMjBhF,KAAKw2G,WAAa,SAAWxxG,GAE5B,OAAKmxG,EAEGA,EAAanxG,GAIdA,GAIRhF,KAAKy2G,eAAiB,SAAW1hB,GAIhC,OAFAohB,EAAcphB,EAEP/0F,MAIRA,KAAK02G,WAAa,SAAWC,EAAOC,GAInC,OAFAr8F,EAASpW,KAAMwyG,EAAOC,GAEf52G,MAIRA,KAAK62G,cAAgB,SAAWF,GAE/B,IAAM9qG,EAAQ0O,EAAS/M,QAASmpG,GAQhC,OANiB,IAAZ9qG,GAEJ0O,EAAS5E,OAAQ9J,EAAO,GAIlB7L,MAIRA,KAAK82G,WAAa,SAAWnB,GAE5B,IAAM,IAAIp3G,EAAI,EAAGyK,EAAIuR,EAAS/b,OAAQD,EAAIyK,EAAGzK,GAAK,EAAI,CAErD,IAAMo4G,EAAQp8F,EAAUhc,GAClBq4G,EAASr8F,EAAUhc,EAAI,GAI7B,GAFKo4G,EAAMt8F,SAASs8F,EAAMtjC,UAAY,GAEjCsjC,EAAMtgG,KAAMs/F,GAEhB,OAAOiB,EAMT,OAAO,OAUJG,G,WAEL,WAAaC,GAAU,oBAEtBh3G,KAAKg3G,aAAwBz0G,IAAZy0G,EAA0BA,EAAUpB,GAErD51G,KAAKi3G,YAAc,YACnBj3G,KAAKyjB,iBAAkB,EACvBzjB,KAAK+E,KAAO,GACZ/E,KAAKk3G,aAAe,GACpBl3G,KAAKm3G,cAAgB,G,wCAItB,c,uBAEA,SAAWnyG,EAAK8wG,GAEf,IAAMnrD,EAAQ3qD,KAEd,OAAO,IAAIgC,SAAS,SAAWR,EAASC,GAEvCkpD,EAAMysD,KAAMpyG,EAAKxD,EAASs0G,EAAYr0G,Q,mBAMxC,c,4BAEA,SAAgBw1G,GAGf,OADAj3G,KAAKi3G,YAAcA,EACZj3G,O,gCAIR,SAAoBP,GAGnB,OADAO,KAAKyjB,gBAAkBhkB,EAChBO,O,qBAIR,SAAS+E,GAGR,OADA/E,KAAK+E,KAAOA,EACL/E,O,6BAIR,SAAiBk3G,GAGhB,OADAl3G,KAAKk3G,aAAeA,EACbl3G,O,8BAIR,SAAkBm3G,GAGjB,OADAn3G,KAAKm3G,cAAgBA,EACdn3G,S,KAMHq3G,GAAU,GAEVC,G,kDAEL,WAAaN,GAAU,uCAEfA,G,wCAIR,SAAMhyG,EAAK6wG,EAAQC,EAAYC,QAEjBxzG,IAARyC,IAAoBA,EAAM,SAEZzC,IAAdvC,KAAK+E,OAAqBC,EAAMhF,KAAK+E,KAAOC,GAEjDA,EAAMhF,KAAKg3G,QAAQR,WAAYxxG,GAE/B,IAAM2lD,EAAQ3qD,KAERszD,EAASmiD,GAAM10G,IAAKiE,GAE1B,QAAgBzC,IAAX+wD,EAYJ,OAVA3I,EAAMqsD,QAAQX,UAAWrxG,GAEzBuyG,YAAY,WAEN1B,GAASA,EAAQviD,GAEtB3I,EAAMqsD,QAAQV,QAAStxG,KAErB,GAEIsuD,EAMR,QAAwB/wD,IAAnB80G,GAASryG,GAAd,CAeA,IAEIid,EADEu1F,EAAqBxyG,EAAIY,MADV,+BAKrB,GAAK4xG,EAAqB,CAEzB,IAAMC,EAAWD,EAAoB,GAC/BE,IAAcF,EAAoB,GAEpC74F,EAAO64F,EAAoB,GAC/B74F,EAAOg5F,mBAAoBh5F,GAEtB+4F,IAAW/4F,EAAOi5F,KAAMj5F,IAE7B,IAEC,IAAIqE,EACEC,GAAiBjjB,KAAKijB,cAAgB,IAAK1V,cAEjD,OAAS0V,GAER,IAAK,cACL,IAAK,OAIJ,IAFA,IAAMuqC,EAAO,IAAIyG,WAAYt1C,EAAKngB,QAExBD,EAAI,EAAGA,EAAIogB,EAAKngB,OAAQD,IAEjCivD,EAAMjvD,GAAMogB,EAAKxT,WAAY5M,GAM7BykB,EAFqB,SAAjBC,EAEO,IAAI40F,KAAM,CAAErqD,EAAKhkD,QAAU,CAAEyc,KAAMwxF,IAInCjqD,EAAKhkD,OAIjB,MAED,IAAK,WAEJ,IAAMsuG,EAAS,IAAIC,UACnB/0F,EAAW80F,EAAOE,gBAAiBr5F,EAAM84F,GAEzC,MAED,IAAK,OAEJz0F,EAAW/D,KAAKrC,MAAO+B,GAEvB,MAED,QAECqE,EAAWrE,EAOb44F,YAAY,WAEN1B,GAASA,EAAQ7yF,GAEtB2nC,EAAMqsD,QAAQV,QAAStxG,KAErB,GAEF,MAAQlD,GAGTy1G,YAAY,WAENxB,GAAUA,EAASj0G,GAExB6oD,EAAMqsD,QAAQT,UAAWvxG,GACzB2lD,EAAMqsD,QAAQV,QAAStxG,KAErB,QAIE,CAoHN,IAAM,IAAMizG,KAhHZZ,GAASryG,GAAQ,GAEjBqyG,GAASryG,GAAMb,KAAM,CAEpB0xG,OAAQA,EACRC,WAAYA,EACZC,QAASA,KAIV9zF,EAAU,IAAIvB,gBAENgC,KAAM,MAAO1d,GAAK,GAE1Bid,EAAQ3P,iBAAkB,QAAQ,SAAWlB,GAE5C,IAAM4R,EAAWhjB,KAAKgjB,SAEhBk1F,EAAYb,GAASryG,GAI3B,UAFOqyG,GAASryG,GAEK,MAAhBhF,KAAKqhB,QAAkC,IAAhBrhB,KAAKqhB,OAAe,CAK1B,IAAhBrhB,KAAKqhB,QAAeiE,QAAQM,KAAM,6CAIvC6vF,GAAM1vE,IAAK/gC,EAAKge,GAEhB,IAAM,IAAIzkB,EAAI,EAAGonC,EAAKuyE,EAAU15G,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEtD,IAAMsQ,EAAWqpG,EAAW35G,GACvBsQ,EAASgnG,QAAShnG,EAASgnG,OAAQ7yF,GAIzC2nC,EAAMqsD,QAAQV,QAAStxG,OAEjB,CAEN,IAAM,IAAIzG,EAAI,EAAGonC,EAAKuyE,EAAU15G,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEtD,IAAMsQ,EAAWqpG,EAAW35G,GACvBsQ,EAASknG,SAAUlnG,EAASknG,QAAS3kG,GAI3Cu5C,EAAMqsD,QAAQT,UAAWvxG,GACzB2lD,EAAMqsD,QAAQV,QAAStxG,OAItB,GAEHid,EAAQ3P,iBAAkB,YAAY,SAAWlB,GAIhD,IAFA,IAAM8mG,EAAYb,GAASryG,GAEjBzG,EAAI,EAAGonC,EAAKuyE,EAAU15G,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEtD,IAAMsQ,EAAWqpG,EAAW35G,GACvBsQ,EAASinG,YAAajnG,EAASinG,WAAY1kG,OAI/C,GAEH6Q,EAAQ3P,iBAAkB,SAAS,SAAWlB,GAE7C,IAAM8mG,EAAYb,GAASryG,UAEpBqyG,GAASryG,GAEhB,IAAM,IAAIzG,EAAI,EAAGonC,EAAKuyE,EAAU15G,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEtD,IAAMsQ,EAAWqpG,EAAW35G,GACvBsQ,EAASknG,SAAUlnG,EAASknG,QAAS3kG,GAI3Cu5C,EAAMqsD,QAAQT,UAAWvxG,GACzB2lD,EAAMqsD,QAAQV,QAAStxG,MAErB,GAEHid,EAAQ3P,iBAAkB,SAAS,SAAWlB,GAE7C,IAAM8mG,EAAYb,GAASryG,UAEpBqyG,GAASryG,GAEhB,IAAM,IAAIzG,EAAI,EAAGonC,EAAKuyE,EAAU15G,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEtD,IAAMsQ,EAAWqpG,EAAW35G,GACvBsQ,EAASknG,SAAUlnG,EAASknG,QAAS3kG,GAI3Cu5C,EAAMqsD,QAAQT,UAAWvxG,GACzB2lD,EAAMqsD,QAAQV,QAAStxG,MAErB,QAEwBzC,IAAtBvC,KAAKijB,eAA6BhB,EAAQgB,aAAejjB,KAAKijB,mBACrC1gB,IAAzBvC,KAAKyjB,kBAAgCxB,EAAQwB,gBAAkBzjB,KAAKyjB,iBAEpExB,EAAQk2F,kBAAmBl2F,EAAQk2F,sBAAoC51G,IAAlBvC,KAAKy3G,SAAyBz3G,KAAKy3G,SAAW,cAElFz3G,KAAKm3G,cAE1Bl1F,EAAQ0B,iBAAkBs0F,EAAQj4G,KAAKm3G,cAAec,IAIvDh2F,EAAQkC,KAAM,MAMf,OAFAwmC,EAAMqsD,QAAQX,UAAWrxG,GAElBid,EAtONo1F,GAASryG,GAAMb,KAAM,CAEpB0xG,OAAQA,EACRC,WAAYA,EACZC,QAASA,M,6BAsOZ,SAAiBt2G,GAGhB,OADAO,KAAKijB,aAAexjB,EACbO,O,yBAIR,SAAaP,GAGZ,OADAO,KAAKy3G,SAAWh4G,EACTO,S,GA5RgB+2G,IAwSnBqB,G,kDAEL,WAAapB,GAAU,uCAEfA,G,wCAIR,SAAMhyG,EAAK6wG,EAAQC,EAAYC,GAE9B,IAAMprD,EAAQ3qD,KAER27B,EAAS,GAETsC,EAAU,IAAIysE,GAEdkM,EAAS,IAAIU,GAAYt3G,KAAKg3G,SACpCJ,EAAOyB,QAASr4G,KAAK+E,MACrB6xG,EAAO0B,gBAAiB,eACxB1B,EAAOjzF,iBAAkB3jB,KAAKm3G,eAC9BP,EAAO2B,mBAAoB5tD,EAAMlnC,iBAEjC,IAAI+0F,EAAS,EAEb,SAASC,EAAal6G,GAErBq4G,EAAOQ,KAAMpyG,EAAKzG,IAAK,SAAWiL,GAEjC,IAAMkvG,EAAW/tD,EAAM/tC,MAAOpT,GAAQ,GAEtCmyB,EAAQp9B,GAAM,CACb+6B,MAAOo/E,EAASp/E,MAChBC,OAAQm/E,EAASn/E,OACjBe,OAAQo+E,EAASp+E,OACjBI,QAASg+E,EAASh+E,SAKH,KAFhB89E,GAAU,KAIqB,IAAzBE,EAASC,cAAoB16E,EAAQ5D,UAAYhN,GAEtD4Q,EAAQhF,MAAQ0C,EAChBsC,EAAQ3D,OAASo+E,EAASp+E,OAC1B2D,EAAQomB,aAAc,EAEjBwxD,GAASA,EAAQ53E,MAIrB63E,EAAYC,GAIhB,GAAKhzG,MAAMC,QAASgC,GAEnB,IAAM,IAAIzG,EAAI,EAAGonC,EAAK3gC,EAAIxG,OAAQD,EAAIonC,IAAOpnC,EAE5Ck6G,EAAal6G,QAQdq4G,EAAOQ,KAAMpyG,GAAK,SAAWwE,GAE5B,IAAMkvG,EAAW/tD,EAAM/tC,MAAOpT,GAAQ,GAEtC,GAAKkvG,EAASE,UAAY,CAIzB,IAFA,IAAMC,EAAQH,EAASh+E,QAAQl8B,OAASk6G,EAASC,YAEvCr1G,EAAI,EAAGA,EAAIu1G,EAAOv1G,IAAO,CAElCq4B,EAAQr4B,GAAM,CAAEo3B,QAAS,IAEzB,IAAM,IAAIn8B,EAAI,EAAGA,EAAIm6G,EAASC,YAAap6G,IAE1Co9B,EAAQr4B,GAAIo3B,QAAQv2B,KAAMu0G,EAASh+E,QAASp3B,EAAIo1G,EAASC,YAAcp6G,IACvEo9B,EAAQr4B,GAAIg3B,OAASo+E,EAASp+E,OAC9BqB,EAAQr4B,GAAIg2B,MAAQo/E,EAASp/E,MAC7BqC,EAAQr4B,GAAIi2B,OAASm/E,EAASn/E,OAMhC0E,EAAQhF,MAAQ0C,OAIhBsC,EAAQhF,MAAMK,MAAQo/E,EAASp/E,MAC/B2E,EAAQhF,MAAMM,OAASm/E,EAASn/E,OAChC0E,EAAQvD,QAAUg+E,EAASh+E,QAIE,IAAzBg+E,EAASC,cAEb16E,EAAQ5D,UAAYhN,GAIrB4Q,EAAQ3D,OAASo+E,EAASp+E,OAC1B2D,EAAQomB,aAAc,EAEjBwxD,GAASA,EAAQ53E,KAEpB63E,EAAYC,GAIhB,OAAO93E,M,GAnH6B84E,IAyHhC+B,G,kDAEL,WAAa9B,GAAU,uCAEfA,G,wCAIR,SAAMhyG,EAAK6wG,EAAQC,EAAYC,QAEXxzG,IAAdvC,KAAK+E,OAAqBC,EAAMhF,KAAK+E,KAAOC,GAEjDA,EAAMhF,KAAKg3G,QAAQR,WAAYxxG,GAE/B,IAAM2lD,EAAQ3qD,KAERszD,EAASmiD,GAAM10G,IAAKiE,GAE1B,QAAgBzC,IAAX+wD,EAYJ,OAVA3I,EAAMqsD,QAAQX,UAAWrxG,GAEzBuyG,YAAY,WAEN1B,GAASA,EAAQviD,GAEtB3I,EAAMqsD,QAAQV,QAAStxG,KAErB,GAEIsuD,EAIR,IAAMr6B,EAAQ3uB,SAAS+uB,gBAAiB,+BAAgC,OAExE,SAAS0/E,IAER9/E,EAAM1mB,oBAAqB,OAAQwmG,GAAa,GAChD9/E,EAAM1mB,oBAAqB,QAASymG,GAAc,GAElDvD,GAAM1vE,IAAK/gC,EAAKhF,MAEX61G,GAASA,EAAQ71G,MAEtB2qD,EAAMqsD,QAAQV,QAAStxG,GAIxB,SAASg0G,EAAc5nG,GAEtB6nB,EAAM1mB,oBAAqB,OAAQwmG,GAAa,GAChD9/E,EAAM1mB,oBAAqB,QAASymG,GAAc,GAE7CjD,GAAUA,EAAS3kG,GAExBu5C,EAAMqsD,QAAQT,UAAWvxG,GACzB2lD,EAAMqsD,QAAQV,QAAStxG,GAiBxB,OAbAi0B,EAAM3mB,iBAAkB,OAAQymG,GAAa,GAC7C9/E,EAAM3mB,iBAAkB,QAAS0mG,GAAc,GAEnB,UAAvBh0G,EAAI+H,OAAQ,EAAG,SAEOxK,IAArBvC,KAAKi3G,cAA4Bh+E,EAAMg+E,YAAcj3G,KAAKi3G,aAIhEtsD,EAAMqsD,QAAQX,UAAWrxG,GAEzBi0B,EAAMC,IAAMl0B,EAELi0B,M,GA1EiB89E,IAgFpBkC,G,kDAEL,WAAajC,GAAU,uCAEfA,G,wCAIR,SAAMkC,EAAMrD,EAAQC,EAAYC,GAE/B,IAAM93E,EAAU,IAAIwxB,GAEdmnD,EAAS,IAAIkC,GAAa94G,KAAKg3G,SACrCJ,EAAOuC,eAAgBn5G,KAAKi3G,aAC5BL,EAAOyB,QAASr4G,KAAK+E,MAErB,IAAIyzG,EAAS,EAEb,SAASC,EAAal6G,GAErBq4G,EAAOQ,KAAM8B,EAAM36G,IAAK,SAAW06B,GAElCgF,EAAQtC,OAAQp9B,GAAM06B,EAIN,MAFhBu/E,IAICv6E,EAAQomB,aAAc,EAEjBwxD,GAASA,EAAQ53E,WAIrB17B,EAAWwzG,GAIf,IAAM,IAAIx3G,EAAI,EAAGA,EAAI26G,EAAK16G,SAAWD,EAEpCk6G,EAAal6G,GAId,OAAO0/B,M,GA5CuB84E,IAwD1BqC,G,kDAEL,WAAapC,GAAU,uCAEfA,G,wCAIR,SAAMhyG,EAAK6wG,EAAQC,EAAYC,GAE9B,IAAMprD,EAAQ3qD,KAERi+B,EAAU,IAAIoyB,GAEdumD,EAAS,IAAIU,GAAYt3G,KAAKg3G,SAiFpC,OAhFAJ,EAAO0B,gBAAiB,eACxB1B,EAAOjzF,iBAAkB3jB,KAAKm3G,eAC9BP,EAAOyB,QAASr4G,KAAK+E,MACrB6xG,EAAO2B,mBAAoB5tD,EAAMlnC,iBACjCmzF,EAAOQ,KAAMpyG,GAAK,SAAWwE,GAE5B,IAAM6vG,EAAU1uD,EAAM/tC,MAAOpT,GAEtB6vG,SAEgB92G,IAAlB82G,EAAQpgF,MAEZgF,EAAQhF,MAAQogF,EAAQpgF,WAEI12B,IAAjB82G,EAAQ16F,OAEnBsf,EAAQhF,MAAMK,MAAQ+/E,EAAQ//E,MAC9B2E,EAAQhF,MAAMM,OAAS8/E,EAAQ9/E,OAC/B0E,EAAQhF,MAAMta,KAAO06F,EAAQ16F,MAI9Bsf,EAAQ/D,WAA0B33B,IAAlB82G,EAAQn/E,MAAsBm/E,EAAQn/E,MAAQlN,EAC9DiR,EAAQ9D,WAA0B53B,IAAlB82G,EAAQl/E,MAAsBk/E,EAAQl/E,MAAQnN,EAE9DiR,EAAQ7D,eAAkC73B,IAAtB82G,EAAQj/E,UAA0Bi/E,EAAQj/E,UAAY/M,EAC1E4Q,EAAQ5D,eAAkC93B,IAAtB82G,EAAQh/E,UAA0Bg/E,EAAQh/E,UAAYhN,EAE1E4Q,EAAQ1D,gBAAoCh4B,IAAvB82G,EAAQ9+E,WAA2B8+E,EAAQ9+E,WAAa,OAEnDh4B,IAArB82G,EAAQ7+E,WAEZyD,EAAQzD,SAAW6+E,EAAQ7+E,eAILj4B,IAAlB82G,EAAQt+E,QAEZkD,EAAQlD,MAAQs+E,EAAQt+E,YAIDx4B,IAAnB82G,EAAQ/+E,SAEZ2D,EAAQ3D,OAAS++E,EAAQ/+E,aAIJ/3B,IAAjB82G,EAAQpzF,OAEZgY,EAAQhY,KAAOozF,EAAQpzF,WAIC1jB,IAApB82G,EAAQ3+E,UAEZuD,EAAQvD,QAAU2+E,EAAQ3+E,QAC1BuD,EAAQ5D,UAAY9M,GAIQ,IAAxB8rF,EAAQV,cAEZ16E,EAAQ5D,UAAYhN,QAIY9qB,IAA5B82G,EAAQx+E,kBAEZoD,EAAQpD,gBAAkBw+E,EAAQx+E,iBAInCoD,EAAQomB,aAAc,EAEjBwxD,GAASA,EAAQ53E,EAASo7E,MAE7BvD,EAAYC,GAGR93E,M,GA/FuB84E,IAqG1BuC,G,kDAEL,WAAatC,GAAU,uCAEfA,G,wCAIR,SAAMhyG,EAAK6wG,EAAQC,EAAYC,GAE9B,IAAM93E,EAAU,IAAInE,GAEd88E,EAAS,IAAIkC,GAAa94G,KAAKg3G,SAsBrC,OArBAJ,EAAOuC,eAAgBn5G,KAAKi3G,aAC5BL,EAAOyB,QAASr4G,KAAK+E,MAErB6xG,EAAOQ,KAAMpyG,GAAK,SAAWi0B,GAE5BgF,EAAQhF,MAAQA,EAGhB,IAAMsgF,EAASv0G,EAAI2I,OAAQ,kBAAqB,GAA4C,IAAvC3I,EAAI2I,OAAQ,sBAEjEswB,EAAQ3D,OAASi/E,EAASzrF,GAAYC,GACtCkQ,EAAQomB,aAAc,OAEN9hD,IAAXszG,GAEJA,EAAQ53E,KAIP63E,EAAYC,GAER93E,M,GAlCmB84E,IAwCtByC,G,kDAEL,WAAa58D,GAAuB,MAAhBgkC,EAAgB,uDAAJ,EAAI,4BAEnC,gBAEK36D,KAAO,QAEZ,EAAK22B,MAAQ,IAAI0D,GAAO1D,GACxB,EAAKgkC,UAAYA,EAPkB,E,2CAWpC,c,kBAMA,SAAMr4E,GAOL,OALA,4DAAYA,GAEZvI,KAAK48C,MAAMzhB,KAAM5yB,EAAOq0C,OACxB58C,KAAK4gF,UAAYr4E,EAAOq4E,UAEjB5gF,O,oBAIR,SAAQo7B,GAEP,IAAMzc,EAAO,8DAAcyc,GAc3B,OAZAzc,EAAK1d,OAAO27C,MAAQ58C,KAAK48C,MAAMC,SAC/Bl+B,EAAK1d,OAAO2/E,UAAY5gF,KAAK4gF,eAEHr+E,IAArBvC,KAAK0/D,cAA4B/gD,EAAK1d,OAAOy+D,YAAc1/D,KAAK0/D,YAAY7iB,eAE1Dt6C,IAAlBvC,KAAKuzC,WAAyB50B,EAAK1d,OAAOsyC,SAAWvzC,KAAKuzC,eAC3ChxC,IAAfvC,KAAKs0B,QAAsB3V,EAAK1d,OAAOqzB,MAAQt0B,KAAKs0B,YACrC/xB,IAAfvC,KAAK8+D,QAAsBngD,EAAK1d,OAAO69D,MAAQ9+D,KAAK8+D,YAClCv8D,IAAlBvC,KAAKuhF,WAAyB5iE,EAAK1d,OAAOsgF,SAAWvhF,KAAKuhF,eAE1Ch/E,IAAhBvC,KAAK8gE,SAAuBniD,EAAK1d,OAAO6/D,OAAS9gE,KAAK8gE,OAAO/rB,UAE3Dp2B,M,GA9CWwzB,IAoDpBqnE,GAAMr6G,UAAUw0C,SAAU,EAE1B,IAAM8lE,GAAoC,IAAIltE,GACxCmtE,GAAsC,IAAIr3E,GAC1Cs3E,GAA8B,IAAIt3E,GAElCu3E,G,WAEL,WAAaz2E,GAAS,oBAErBnjC,KAAKmjC,OAASA,EAEdnjC,KAAKmhF,KAAO,EACZnhF,KAAKohF,WAAa,EAClBphF,KAAKykC,OAAS,EAEdzkC,KAAKqhF,QAAU,IAAI3tD,GAAS,IAAK,KAEjC1zB,KAAKuV,IAAM,KACXvV,KAAKukF,QAAU,KACfvkF,KAAK64B,OAAS,IAAI0T,GAElBvsC,KAAK4lF,YAAa,EAClB5lF,KAAKqkD,aAAc,EAEnBrkD,KAAKkjF,SAAW,IAAI1yB,GACpBxwD,KAAK65G,cAAgB,IAAInmF,GAAS,EAAG,GAErC1zB,KAAK85G,eAAiB,EAEtB95G,KAAK+5G,WAAa,CAEjB,IAAI19E,GAAS,EAAG,EAAG,EAAG,I,oDAMxB,WAEC,OAAOr8B,KAAK85G,iB,wBAIb,WAEC,OAAO95G,KAAKkjF,W,4BAIb,SAAgBjE,GAEf,IAAMuG,EAAexlF,KAAKmjC,OACpB62E,EAAeh6G,KAAK64B,OAE1B6gF,GAAsBjmE,sBAAuBwrC,EAAMz7C,aACnDgiD,EAAar2C,SAAShU,KAAMu+E,IAE5BC,GAAclmE,sBAAuBwrC,EAAM5gF,OAAOmlC,aAClDgiD,EAAa5xC,OAAQ+lE,IACrBn0B,EAAalxC,oBAEbmlE,GAAoBrjF,iBAAkBovD,EAAaliD,iBAAkBkiD,EAAaniD,oBAClFrjC,KAAKkjF,SAASmhB,wBAAyBoV,IAEvCO,EAAap/F,IACZ,GAAK,EAAK,EAAK,GACf,EAAK,GAAK,EAAK,GACf,EAAK,EAAK,GAAK,GACf,EAAK,EAAK,EAAK,GAGhBo/F,EAAa3mE,SAAUmyC,EAAaliD,kBACpC02E,EAAa3mE,SAAUmyC,EAAaniD,sB,yBAIrC,SAAa42E,GAEZ,OAAOj6G,KAAK+5G,WAAYE,K,6BAIzB,WAEC,OAAOj6G,KAAK65G,gB,qBAIb,WAEM75G,KAAKuV,KAETvV,KAAKuV,IAAI8oB,UAILr+B,KAAKukF,SAETvkF,KAAKukF,QAAQlmD,Y,kBAMf,SAAM91B,GASL,OAPAvI,KAAKmjC,OAAS56B,EAAO46B,OAAO7E,QAE5Bt+B,KAAKmhF,KAAO54E,EAAO44E,KACnBnhF,KAAKykC,OAASl8B,EAAOk8B,OAErBzkC,KAAKqhF,QAAQlmD,KAAM5yB,EAAO84E,SAEnBrhF,O,mBAIR,WAEC,OAAO,IAAIA,KAAKR,aAAc27B,KAAMn7B,Q,oBAIrC,WAEC,IAAMiB,EAAS,GAUf,OARmB,IAAdjB,KAAKmhF,OAAalgF,EAAOkgF,KAAOnhF,KAAKmhF,MACjB,IAApBnhF,KAAKohF,aAAmBngF,EAAOmgF,WAAaphF,KAAKohF,YACjC,IAAhBphF,KAAKykC,SAAexjC,EAAOwjC,OAASzkC,KAAKykC,QACtB,MAAnBzkC,KAAKqhF,QAAQvlE,GAAgC,MAAnB9b,KAAKqhF,QAAQtlE,IAAY9a,EAAOogF,QAAUrhF,KAAKqhF,QAAQrsC,WAEtF/zC,EAAOkiC,OAASnjC,KAAKmjC,OAAO4R,QAAQ,GAAQ9zC,cACrCA,EAAOkiC,OAAOtK,OAEd53B,M,KAMHi5G,G,kDAEL,aAAc,kCAEb,cAAO,IAAI/sD,GAAmB,GAAI,EAAG,GAAK,OAErCI,MAAQ,EAJA,E,kDAQd,SAAgB0xB,GAEf,IAAM97C,EAASnjC,KAAKmjC,OAEdiqB,EAAgB,EAAVp9B,GAAcivD,EAAM3qD,MAAQt0B,KAAKutD,MACvCF,EAASrtD,KAAKqhF,QAAQ/nD,MAAQt5B,KAAKqhF,QAAQ9nD,OAC3C+W,EAAM2uC,EAAM1rC,UAAYpQ,EAAOmN,IAEhC8c,IAAQjqB,EAAOiqB,KAAOC,IAAWlqB,EAAOkqB,QAAU/c,IAAQnN,EAAOmN,MAErEnN,EAAOiqB,IAAMA,EACbjqB,EAAOkqB,OAASA,EAChBlqB,EAAOmN,IAAMA,EACbnN,EAAOwqB,0BAIR,sEAAsBsxB,K,kBAIvB,SAAM12E,GAML,OAJA,4DAAYA,GAEZvI,KAAKutD,MAAQhlD,EAAOglD,MAEbvtD,S,GArCqB45G,IA2C9BM,GAAgB/6G,UAAUg7G,mBAAoB,E,IAExCC,G,kDAEL,WAAax9D,EAAOgkC,GAAwE,MAA7DrtC,EAA6D,uDAAlD,EAAGjf,EAA+C,uDAAvCxjB,KAAKif,GAAK,EAAGwxD,EAA0B,uDAAf,EAAGziB,EAAY,uDAAJ,EAAI,4BAE3F,cAAOliB,EAAOgkC,IAET36D,KAAO,YAEZ,EAAKkpB,SAAShU,KAAMgX,GAASE,WAC7B,EAAKa,eAEL,EAAK70C,OAAS,IAAI8zC,GAElB,EAAKoB,SAAWA,EAChB,EAAKjf,MAAQA,EACb,EAAKitD,SAAWA,EAChB,EAAKziB,MAAQA,EAEb,EAAKgC,OAAS,IAAIo5C,GAhByE,E,uCAoB5F,WAIC,OAAOl6G,KAAK4gF,UAAY9vE,KAAKif,I,IAI9B,SAAWsqF,GAIVr6G,KAAK4gF,UAAYy5B,EAAQvpG,KAAKif,K,qBAI/B,WAEC/vB,KAAK8gE,OAAOziC,Y,kBAIb,SAAM91B,GAaL,OAXA,4DAAYA,GAEZvI,KAAKuzC,SAAWhrC,EAAOgrC,SACvBvzC,KAAKs0B,MAAQ/rB,EAAO+rB,MACpBt0B,KAAKuhF,SAAWh5E,EAAOg5E,SACvBvhF,KAAK8+D,MAAQv2D,EAAOu2D,MAEpB9+D,KAAK3B,OAASkK,EAAOlK,OAAOigC,QAE5Bt+B,KAAK8gE,OAASv4D,EAAOu4D,OAAOxiC,QAErBt+B,S,GAzDew5G,IA+DxBY,GAAUj7G,UAAUmiF,aAAc,EAElC,IAAMid,GAAkC,IAAIhyD,GACtC+tE,GAAoC,IAAIj4E,GACxCk4E,GAA4B,IAAIl4E,GAEhCm4E,G,kDAEL,aAAc,kCAEb,cAAO,IAAIrtD,GAAmB,GAAI,EAAG,GAAK,OAErC0sD,cAAgB,IAAInmF,GAAS,EAAG,GAErC,EAAKomF,eAAiB,EAEtB,EAAKC,WAAa,CAejB,IAAI19E,GAAS,EAAG,EAAG,EAAG,GAEtB,IAAIA,GAAS,EAAG,EAAG,EAAG,GAEtB,IAAIA,GAAS,EAAG,EAAG,EAAG,GAEtB,IAAIA,GAAS,EAAG,EAAG,EAAG,GAEtB,IAAIA,GAAS,EAAG,EAAG,EAAG,GAEtB,IAAIA,GAAS,EAAG,EAAG,EAAG,IAGvB,EAAKo+E,gBAAkB,CACtB,IAAIp4E,GAAS,EAAG,EAAG,GAAK,IAAIA,IAAW,EAAG,EAAG,GAAK,IAAIA,GAAS,EAAG,EAAG,GACrE,IAAIA,GAAS,EAAG,GAAK,GAAK,IAAIA,GAAS,EAAG,EAAG,GAAK,IAAIA,GAAS,GAAK,EAAG,IAGxE,EAAKq4E,SAAW,CACf,IAAIr4E,GAAS,EAAG,EAAG,GAAK,IAAIA,GAAS,EAAG,EAAG,GAAK,IAAIA,GAAS,EAAG,EAAG,GACnE,IAAIA,GAAS,EAAG,EAAG,GAAK,IAAIA,GAAS,EAAG,EAAG,GAAK,IAAIA,GAAS,EAAG,GAAK,IA3CzD,E,kDAgDd,SAAgB48C,GAA2B,IAApBg7B,EAAoB,uDAAJ,EAEhC92E,EAASnjC,KAAKmjC,OACd62E,EAAeh6G,KAAK64B,OAEpByX,EAAM2uC,EAAM1rC,UAAYpQ,EAAOmN,IAEhCA,IAAQnN,EAAOmN,MAEnBnN,EAAOmN,IAAMA,EACbnN,EAAOwqB,0BAIR2sD,GAAoB7mE,sBAAuBwrC,EAAMz7C,aACjDL,EAAOgM,SAAShU,KAAMm/E,IAEtBC,GAAYp/E,KAAMgI,EAAOgM,UACzBorE,GAAYx0E,IAAK/lC,KAAKy6G,gBAAiBR,IACvC92E,EAAOx2B,GAAGwuB,KAAMn7B,KAAK06G,SAAUT,IAC/B92E,EAAOyQ,OAAQ2mE,IACfp3E,EAAOmR,oBAEP0lE,EAAar1D,iBAAmB21D,GAAoBx+F,GAAKw+F,GAAoBv+F,GAAKu+F,GAAoBh+E,GAEtGiiE,GAAkBnoE,iBAAkB+M,EAAOG,iBAAkBH,EAAOE,oBACpErjC,KAAKkjF,SAASmhB,wBAAyB9F,Q,GA5EVqb,IAkF/BY,GAAiBr7G,UAAUonF,oBAAqB,E,IAE1Co0B,G,kDAEL,WAAa/9D,EAAOgkC,GAAqC,MAA1BrtC,EAA0B,uDAAf,EAAGurB,EAAY,uDAAJ,EAAI,4BAExD,cAAOliB,EAAOgkC,IAET36D,KAAO,aAEZ,EAAKstB,SAAWA,EAChB,EAAKurB,MAAQA,EAEb,EAAKgC,OAAS,IAAI05C,GATsC,E,uCAazD,WAIC,OAAwB,EAAjBx6G,KAAK4gF,UAAgB9vE,KAAKif,I,IAIlC,SAAWsqF,GAIVr6G,KAAK4gF,UAAYy5B,GAAU,EAAIvpG,KAAKif,M,qBAIrC,WAEC/vB,KAAK8gE,OAAOziC,Y,kBAIb,SAAM91B,GASL,OAPA,4DAAYA,GAEZvI,KAAKuzC,SAAWhrC,EAAOgrC,SACvBvzC,KAAK8+D,MAAQv2D,EAAOu2D,MAEpB9+D,KAAK8gE,OAASv4D,EAAOu4D,OAAOxiC,QAErBt+B,S,GA9CgBw5G,IAoDzBmB,GAAWx7G,UAAUsiF,cAAe,E,IAE9Bm5B,G,kDAEL,aAAoF,MAAvE3qE,EAAuE,wDAA9D,EAAGC,EAA2D,uDAAnD,EAAGC,EAAgD,uDAA1C,EAAGC,EAAuC,wDAA5B,EAAGC,EAAyB,uDAAlB,GAAKC,EAAa,uDAAP,IAAO,4BAEnF,gBAEKrqB,KAAO,qBAEZ,EAAKqnC,KAAO,EACZ,EAAKE,KAAO,KAEZ,EAAKvd,KAAOA,EACZ,EAAKC,MAAQA,EACb,EAAKC,IAAMA,EACX,EAAKC,OAASA,EAEd,EAAKC,KAAOA,EACZ,EAAKC,IAAMA,EAEX,EAAKqd,yBAjB8E,E,wCAqBpF,SAAMplD,EAAQ0tC,GAcb,OAZA,4DAAY1tC,EAAQ0tC,GAEpBj2C,KAAKiwC,KAAO1nC,EAAO0nC,KACnBjwC,KAAKkwC,MAAQ3nC,EAAO2nC,MACpBlwC,KAAKmwC,IAAM5nC,EAAO4nC,IAClBnwC,KAAKowC,OAAS7nC,EAAO6nC,OACrBpwC,KAAKqwC,KAAO9nC,EAAO8nC,KACnBrwC,KAAKswC,IAAM/nC,EAAO+nC,IAElBtwC,KAAKstD,KAAO/kD,EAAO+kD,KACnBttD,KAAKwtD,KAAuB,OAAhBjlD,EAAOilD,KAAgB,KAAO3uD,OAAOyJ,OAAQ,GAAIC,EAAOilD,MAE7DxtD,O,2BAIR,SAAeiuD,EAAWC,EAAYpyC,EAAGC,EAAGud,EAAOC,GAE/B,OAAdv5B,KAAKwtD,OAETxtD,KAAKwtD,KAAO,CACXW,SAAS,EACTF,UAAW,EACXC,WAAY,EACZE,QAAS,EACTC,QAAS,EACT/0B,MAAO,EACPC,OAAQ,IAKVv5B,KAAKwtD,KAAKW,SAAU,EACpBnuD,KAAKwtD,KAAKS,UAAYA,EACtBjuD,KAAKwtD,KAAKU,WAAaA,EACvBluD,KAAKwtD,KAAKY,QAAUtyC,EACpB9b,KAAKwtD,KAAKa,QAAUtyC,EACpB/b,KAAKwtD,KAAKl0B,MAAQA,EAClBt5B,KAAKwtD,KAAKj0B,OAASA,EAEnBv5B,KAAK2tD,2B,6BAIN,WAEoB,OAAd3tD,KAAKwtD,OAETxtD,KAAKwtD,KAAKW,SAAU,GAIrBnuD,KAAK2tD,2B,oCAIN,WAEC,IAAMl5B,GAAOz0B,KAAKkwC,MAAQlwC,KAAKiwC,OAAW,EAAIjwC,KAAKstD,MAC7C54B,GAAO10B,KAAKmwC,IAAMnwC,KAAKowC,SAAa,EAAIpwC,KAAKstD,MAC7C50B,GAAO14B,KAAKkwC,MAAQlwC,KAAKiwC,MAAS,EAClCtX,GAAO34B,KAAKmwC,IAAMnwC,KAAKowC,QAAW,EAEpCH,EAAOvX,EAAKjE,EACZyb,EAAQxX,EAAKjE,EACb0b,EAAMxX,EAAKjE,EACX0b,EAASzX,EAAKjE,EAElB,GAAmB,OAAd10B,KAAKwtD,MAAiBxtD,KAAKwtD,KAAKW,QAAU,CAE9C,IAAM0sD,GAAW76G,KAAKkwC,MAAQlwC,KAAKiwC,MAASjwC,KAAKwtD,KAAKS,UAAYjuD,KAAKstD,KACjEwtD,GAAW96G,KAAKmwC,IAAMnwC,KAAKowC,QAAWpwC,KAAKwtD,KAAKU,WAAaluD,KAAKstD,KAGxEpd,GADAD,GAAQ4qE,EAAS76G,KAAKwtD,KAAKY,SACZysD,EAAS76G,KAAKwtD,KAAKl0B,MAElC8W,GADAD,GAAO2qE,EAAS96G,KAAKwtD,KAAKa,SACXysD,EAAS96G,KAAKwtD,KAAKj0B,OAInCv5B,KAAKsjC,iBAAiBy3E,iBAAkB9qE,EAAMC,EAAOC,EAAKC,EAAQpwC,KAAKqwC,KAAMrwC,KAAKswC,KAElFtwC,KAAKujC,wBAAwBpI,KAAMn7B,KAAKsjC,kBAAmBpL,W,oBAI5D,SAAQkD,GAEP,IAAMzc,EAAO,8DAAcyc,GAY3B,OAVAzc,EAAK1d,OAAOqsD,KAAOttD,KAAKstD,KACxB3uC,EAAK1d,OAAOgvC,KAAOjwC,KAAKiwC,KACxBtxB,EAAK1d,OAAOivC,MAAQlwC,KAAKkwC,MACzBvxB,EAAK1d,OAAOkvC,IAAMnwC,KAAKmwC,IACvBxxB,EAAK1d,OAAOmvC,OAASpwC,KAAKowC,OAC1BzxB,EAAK1d,OAAOovC,KAAOrwC,KAAKqwC,KACxB1xB,EAAK1d,OAAOqvC,IAAMtwC,KAAKswC,IAEJ,OAAdtwC,KAAKwtD,OAAgB7uC,EAAK1d,OAAOusD,KAAO3uD,OAAOyJ,OAAQ,GAAItI,KAAKwtD,OAE9D7uC,M,GA7HwBuuC,IAmIjC0tD,GAAmBz7G,UAAU8kG,sBAAuB,E,IAE9C+W,G,kDAEL,aAAc,uCAEN,IAAIJ,IAAsB,EAAG,EAAG,GAAK,EAAG,GAAK,M,UAJjBhB,IAUrCoB,GAAuB77G,UAAU87G,0BAA2B,E,IAEtDC,G,kDAEL,WAAat+D,EAAOgkC,GAAY,kCAE/B,cAAOhkC,EAAOgkC,IAET36D,KAAO,mBAEZ,EAAKkpB,SAAShU,KAAMgX,GAASE,WAC7B,EAAKa,eAEL,EAAK70C,OAAS,IAAI8zC,GAElB,EAAK2uB,OAAS,IAAIk6C,GAXa,E,2CAehC,WAECh7G,KAAK8gE,OAAOziC,Y,kBAIb,SAAM91B,GAOL,OALA,4DAAYA,GAEZvI,KAAK3B,OAASkK,EAAOlK,OAAOigC,QAC5Bt+B,KAAK8gE,OAASv4D,EAAOu4D,OAAOxiC,QAErBt+B,S,GA9BsBw5G,IAoC/B0B,GAAiB/7G,UAAU8hF,oBAAqB,E,IAE1Ck6B,G,+FAEL,SAAmBxrF,GAElB,GAA4B,qBAAhByrF,YAEX,OAAO,IAAIA,aAAcC,OAAQ1rF,GASlC,IAFA,IAAIzsB,EAAI,GAEE3E,EAAI,EAAGonC,EAAKhW,EAAMnxB,OAAQD,EAAIonC,EAAIpnC,IAG3C2E,GAAKqU,OAAOG,aAAciY,EAAOpxB,IAIlC,IAIC,OAAOo5G,mBAAoB2D,OAAQp4G,IAElC,MAAQE,IAET,OAAOF,K,4BAMT,SAAuB8B,GAEtB,IAAM6G,EAAQ7G,EAAIsP,YAAa,KAE/B,OAAiB,IAAZzI,EAAuB,KAErB7G,EAAI+H,OAAQ,EAAGlB,EAAQ,O,KAM1B0vG,G,kDAEL,WAAavE,GAAU,iCAEtB,cAAOA,GAE2B,qBAAtBwE,mBAEXl2F,QAAQM,KAAM,+DAIO,qBAAV61F,OAEXn2F,QAAQM,KAAM,mDAIf,EAAKvf,QAAU,CAAEy0B,iBAAkB,QAhBb,E,8CAoBvB,SAAYz0B,GAIX,OAFArG,KAAKqG,QAAUA,EAERrG,O,kBAIR,SAAMgF,EAAK6wG,EAAQC,EAAYC,QAEjBxzG,IAARyC,IAAoBA,EAAM,SAEZzC,IAAdvC,KAAK+E,OAAqBC,EAAMhF,KAAK+E,KAAOC,GAEjDA,EAAMhF,KAAKg3G,QAAQR,WAAYxxG,GAE/B,IAAM2lD,EAAQ3qD,KAERszD,EAASmiD,GAAM10G,IAAKiE,GAE1B,QAAgBzC,IAAX+wD,EAYJ,OAVA3I,EAAMqsD,QAAQX,UAAWrxG,GAEzBuyG,YAAY,WAEN1B,GAASA,EAAQviD,GAEtB3I,EAAMqsD,QAAQV,QAAStxG,KAErB,GAEIsuD,EAIR,IAAMooD,EAAe,GACrBA,EAAaC,YAAqC,cAArB37G,KAAKi3G,YAAgC,cAAgB,UAClFyE,EAAan7F,QAAUvgB,KAAKm3G,cAE5BsE,MAAOz2G,EAAK02G,GAAez5G,MAAM,SAAWib,GAE3C,OAAOA,EAAI0+F,UAER35G,MAAM,SAAW25G,GAEpB,OAAOJ,kBAAmBI,EAAM/8G,OAAOyJ,OAAQqiD,EAAMtkD,QAAS,CAAEw1G,qBAAsB,aAEnF55G,MAAM,SAAW65G,GAEpBrG,GAAM1vE,IAAK/gC,EAAK82G,GAEXjG,GAASA,EAAQiG,GAEtBnxD,EAAMqsD,QAAQV,QAAStxG,MAEpB+2G,OAAO,SAAW34G,GAEhB2yG,GAAUA,EAAS3yG,GAExBunD,EAAMqsD,QAAQT,UAAWvxG,GACzB2lD,EAAMqsD,QAAQV,QAAStxG,MAIxB2lD,EAAMqsD,QAAQX,UAAWrxG,O,GAvFK+xG,IA6FhCwE,GAAkBp8G,UAAU68G,qBAAsB,E,IAE5CC,G,WAEL,WAAaC,EAAS3G,EAAUlJ,GAK/B,IAAI8P,EACHC,EACAC,EAkBD,OAzB2C,oBAE3Cr8G,KAAKk8G,QAAUA,EACfl8G,KAAKqsG,UAAYA,EAsBRkJ,GAER,IAAK,aACJ4G,EAAcn8G,KAAKs8G,OACnBF,EAAsBp8G,KAAKu8G,eAC3BF,EAAcr8G,KAAKw8G,+BAEnBx8G,KAAKwJ,OAAS,IAAIoqD,aAA0B,EAAZy4C,GAChCrsG,KAAKy8G,WAAa,EAClB,MAED,IAAK,SACL,IAAK,OACJN,EAAcn8G,KAAK08G,QAInBN,EAAsBp8G,KAAK08G,QAE3BL,EAAcr8G,KAAK28G,0BAEnB38G,KAAKwJ,OAAS,IAAIzG,MAAmB,EAAZspG,GACzB,MAED,QACC8P,EAAcn8G,KAAK48G,MACnBR,EAAsBp8G,KAAK68G,cAC3BR,EAAcr8G,KAAK88G,4BAEnB98G,KAAKwJ,OAAS,IAAIoqD,aAA0B,EAAZy4C,GAIlCrsG,KAAK+8G,iBAAmBZ,EACxBn8G,KAAKg9G,yBAA2BZ,EAChCp8G,KAAKi9G,aAAeZ,EACpBr8G,KAAKk9G,WAAa,EAClBl9G,KAAKm9G,UAAY,EAEjBn9G,KAAKo9G,iBAAmB,EACxBp9G,KAAKq9G,yBAA2B,EAEhCr9G,KAAKs9G,SAAW,EAChBt9G,KAAKu9G,eAAiB,E,8CAKvB,SAAYC,EAAW1V,GAKtB,IAAMt+F,EAASxJ,KAAKwJ,OACnBg7D,EAASxkE,KAAKqsG,UACd5uF,EAAS+/F,EAAYh5C,EAASA,EAE3Bi5C,EAAgBz9G,KAAKo9G,iBAEzB,GAAuB,IAAlBK,EAAsB,CAI1B,IAAM,IAAIl/G,EAAI,EAAGA,IAAMimE,IAAWjmE,EAEjCiL,EAAQiU,EAASlf,GAAMiL,EAAQjL,GAIhCk/G,EAAgB3V,MAEV,CAKN,IAAM4V,EAAM5V,GADZ2V,GAAiB3V,GAEjB9nG,KAAK+8G,iBAAkBvzG,EAAQiU,EAAQ,EAAGigG,EAAKl5C,GAIhDxkE,KAAKo9G,iBAAmBK,I,gCAKzB,SAAoB3V,GAEnB,IAAMt+F,EAASxJ,KAAKwJ,OACnBg7D,EAASxkE,KAAKqsG,UACd5uF,EAAS+mD,EAASxkE,KAAKm9G,UAEe,IAAlCn9G,KAAKq9G,0BAITr9G,KAAKi9G,eAMNj9G,KAAKg9G,yBAA0BxzG,EAAQiU,EAAQ,EAAGqqF,EAAQtjC,GAC1DxkE,KAAKq9G,0BAA4BvV,I,mBAKlC,SAAO0V,GAEN,IAAMh5C,EAASxkE,KAAKqsG,UACnB7iG,EAASxJ,KAAKwJ,OACdiU,EAAS+/F,EAAYh5C,EAASA,EAE9BsjC,EAAS9nG,KAAKo9G,iBACdO,EAAiB39G,KAAKq9G,yBAEtBnB,EAAUl8G,KAAKk8G,QAKhB,GAHAl8G,KAAKo9G,iBAAmB,EACxBp9G,KAAKq9G,yBAA2B,EAE3BvV,EAAS,EAAI,CAIjB,IAAM8V,EAAsBp5C,EAASxkE,KAAKk9G,WAE1Cl9G,KAAK+8G,iBACJvzG,EAAQiU,EAAQmgG,EAAqB,EAAI9V,EAAQtjC,GAI9Cm5C,EAAiB,GAIrB39G,KAAKg9G,yBAA0BxzG,EAAQiU,EAAQzd,KAAKm9G,UAAY34C,EAAQ,EAAGA,GAI5E,IAAM,IAAIjmE,EAAIimE,EAAQphE,EAAIohE,EAASA,EAAQjmE,IAAM6E,IAAM7E,EAEtD,GAAKiL,EAAQjL,KAAQiL,EAAQjL,EAAIimE,GAAW,CAI3C03C,EAAQ3vC,SAAU/iE,EAAQiU,GAC1B,S,+BASH,WAEC,IAAMy+F,EAAUl8G,KAAKk8G,QAEf1yG,EAASxJ,KAAKwJ,OACnBg7D,EAASxkE,KAAKqsG,UAEduR,EAAsBp5C,EAASxkE,KAAKk9G,WAErChB,EAAQ5/F,SAAU9S,EAAQo0G,GAG1B,IAAM,IAAIr/G,EAAIimE,EAAQphE,EAAIw6G,EAAqBr/G,IAAM6E,IAAM7E,EAE1DiL,EAAQjL,GAAMiL,EAAQo0G,EAAwBr/G,EAAIimE,GAKnDxkE,KAAKi9G,eAELj9G,KAAKo9G,iBAAmB,EACxBp9G,KAAKq9G,yBAA2B,I,kCAKjC,WAEC,IAAMO,EAAuC,EAAjB59G,KAAKqsG,UACjCrsG,KAAKk8G,QAAQ3vC,SAAUvsE,KAAKwJ,OAAQo0G,K,yCAIrC,WAKC,IAHA,IAAMjQ,EAAa3tG,KAAKm9G,UAAYn9G,KAAKqsG,UACnCuB,EAAWD,EAAa3tG,KAAKqsG,UAEzB9tG,EAAIovG,EAAYpvG,EAAIqvG,EAAUrvG,IAEvCyB,KAAKwJ,OAAQjL,GAAM,I,4CAMrB,WAECyB,KAAK88G,8BACL98G,KAAKwJ,OAAQxJ,KAAKm9G,UAAYn9G,KAAKqsG,UAAY,GAAM,I,uCAItD,WAKC,IAHA,IAAMsB,EAAa3tG,KAAKk9G,WAAal9G,KAAKqsG,UACpCwR,EAAc79G,KAAKm9G,UAAYn9G,KAAKqsG,UAEhC9tG,EAAI,EAAGA,EAAIyB,KAAKqsG,UAAW9tG,IAEpCyB,KAAKwJ,OAAQq0G,EAAct/G,GAAMyB,KAAKwJ,OAAQmkG,EAAapvG,K,qBAS7D,SAASiL,EAAQ43B,EAAWqqE,EAAWh7E,EAAG+zC,GAEzC,GAAK/zC,GAAK,GAET,IAAM,IAAIlyB,EAAI,EAAGA,IAAMimE,IAAWjmE,EAEjCiL,EAAQ43B,EAAY7iC,GAAMiL,EAAQiiG,EAAYltG,K,oBAQjD,SAAQiL,EAAQ43B,EAAWqqE,EAAWh7E,GAErC+N,GAAW60E,UAAW7pG,EAAQ43B,EAAW53B,EAAQ43B,EAAW53B,EAAQiiG,EAAWh7E,K,4BAIhF,SAAgBjnB,EAAQ43B,EAAWqqE,EAAWh7E,EAAG+zC,GAEhD,IAAMs5C,EAAa99G,KAAKy8G,WAAaj4C,EAGrChmC,GAAW0vE,wBAAyB1kG,EAAQs0G,EAAYt0G,EAAQ43B,EAAW53B,EAAQiiG,GAGnFjtE,GAAW60E,UAAW7pG,EAAQ43B,EAAW53B,EAAQ43B,EAAW53B,EAAQs0G,EAAYrtF,K,mBAIjF,SAAOjnB,EAAQ43B,EAAWqqE,EAAWh7E,EAAG+zC,GAIvC,IAFA,IAAMthE,EAAI,EAAIutB,EAEJlyB,EAAI,EAAGA,IAAMimE,IAAWjmE,EAAI,CAErC,IAAM4gB,EAAIiiB,EAAY7iC,EAEtBiL,EAAQ2V,GAAM3V,EAAQ2V,GAAMjc,EAAIsG,EAAQiiG,EAAYltG,GAAMkyB,K,2BAM5D,SAAejnB,EAAQ43B,EAAWqqE,EAAWh7E,EAAG+zC,GAE/C,IAAM,IAAIjmE,EAAI,EAAGA,IAAMimE,IAAWjmE,EAAI,CAErC,IAAM4gB,EAAIiiB,EAAY7iC,EAEtBiL,EAAQ2V,GAAM3V,EAAQ2V,GAAM3V,EAAQiiG,EAAYltG,GAAMkyB,O,KASnDstF,GAAqB,gBACrBC,GAAc,IAAI/gG,OAAQ,kBAAgC,KAK1DghG,GAAY,mBACZC,GAAiB,KAAOH,GAAmB/yG,QAAS,MAAO,IAAO,IAIlEmzG,GAAe,kBAAkB51G,OAAOyC,QAAS,KAAMizG,IAGvDG,GAAU,WAAW71G,OAAOyC,QAAS,OAAQkzG,IAI7CG,GAAY,4BAA4B91G,OAAOyC,QAAS,KAAMizG,IAI9DK,GAAc,uBAAuB/1G,OAAOyC,QAAS,KAAMizG,IAE3DM,GAAW,IAAIthG,OAClB,IACAkhG,GACAC,GACAC,GACAC,GACA,KAGGE,GAAwB,CAAE,WAAY,YAAa,SAEnDC,G,WAEL,WAAaC,EAAa35G,EAAM45G,GAAqB,oBAEpD,IAAMC,EAAaD,GAAsBE,GAAgBC,eAAgB/5G,GAEzE/E,KAAK++G,aAAeL,EACpB1+G,KAAKg/G,UAAYN,EAAYO,WAAYl6G,EAAM65G,G,4CAIhD,SAAUjvF,EAAOlS,GAEhBzd,KAAKwI,OAEL,IAAM02G,EAAkBl/G,KAAK++G,aAAaI,gBACzCjD,EAAUl8G,KAAKg/G,UAAWE,QAGV38G,IAAZ25G,GAAwBA,EAAQ5/F,SAAUqT,EAAOlS,K,sBAIvD,SAAUkS,EAAOlS,GAIhB,IAFA,IAAM2hG,EAAWp/G,KAAKg/G,UAEZzgH,EAAIyB,KAAK++G,aAAaI,gBAAiBh8G,EAAIi8G,EAAS5gH,OAAQD,IAAM4E,IAAM5E,EAEjF6gH,EAAU7gH,GAAIguE,SAAU58C,EAAOlS,K,kBAMjC,WAIC,IAFA,IAAM2hG,EAAWp/G,KAAKg/G,UAEZzgH,EAAIyB,KAAK++G,aAAaI,gBAAiBh8G,EAAIi8G,EAAS5gH,OAAQD,IAAM4E,IAAM5E,EAEjF6gH,EAAU7gH,GAAIiK,S,oBAMhB,WAIC,IAFA,IAAM42G,EAAWp/G,KAAKg/G,UAEZzgH,EAAIyB,KAAK++G,aAAaI,gBAAiBh8G,EAAIi8G,EAAS5gH,OAAQD,IAAM4E,IAAM5E,EAEjF6gH,EAAU7gH,GAAI8gH,a,KAaXR,G,WAEL,WAAaS,EAAUv6G,EAAM65G,GAAa,oBAEzC5+G,KAAK+E,KAAOA,EACZ/E,KAAK4+G,WAAaA,GAAcC,EAAgBC,eAAgB/5G,GAEhE/E,KAAKu/G,KAAOV,EAAgBW,SAAUF,EAAUt/G,KAAK4+G,WAAWa,WAAcH,EAE9Et/G,KAAKs/G,SAAWA,EAGhBt/G,KAAKsc,SAAWtc,KAAK0/G,kBACrB1/G,KAAKusE,SAAWvsE,KAAK2/G,kB,yDA6ItB,c,mCACA,c,8BAIA,SAAkBn2G,EAAQiU,GAEzBjU,EAAQiU,GAAWzd,KAAKu/G,KAAMv/G,KAAK80G,gB,6BAIpC,SAAiBtrG,EAAQiU,GAIxB,IAFA,IAAMlV,EAASvI,KAAK4/G,iBAEVrhH,EAAI,EAAG4E,EAAIoF,EAAO/J,OAAQD,IAAM4E,IAAM5E,EAE/CiL,EAAQiU,KAAclV,EAAQhK,K,oCAMhC,SAAwBiL,EAAQiU,GAE/BjU,EAAQiU,GAAWzd,KAAK4/G,iBAAkB5/G,KAAK6/G,iB,+BAIhD,SAAmBr2G,EAAQiU,GAE1Bzd,KAAK4/G,iBAAiB5qE,QAASxrC,EAAQiU,K,8BAMxC,SAAkBjU,EAAQiU,GAEzBzd,KAAK8/G,aAAc9/G,KAAK80G,cAAiBtrG,EAAQiU,K,6CAIlD,SAAiCjU,EAAQiU,GAExCzd,KAAK8/G,aAAc9/G,KAAK80G,cAAiBtrG,EAAQiU,GACjDzd,KAAK8/G,aAAaz7D,aAAc,I,wDAIjC,SAA4C76C,EAAQiU,GAEnDzd,KAAK8/G,aAAc9/G,KAAK80G,cAAiBtrG,EAAQiU,GACjDzd,KAAK8/G,aAAaptE,wBAAyB,I,6BAM5C,SAAiBlpC,EAAQiU,GAIxB,IAFA,IAAMsiG,EAAO//G,KAAK4/G,iBAERrhH,EAAI,EAAG4E,EAAI48G,EAAKvhH,OAAQD,IAAM4E,IAAM5E,EAE7CwhH,EAAMxhH,GAAMiL,EAAQiU,O,4CAMtB,SAAgCjU,EAAQiU,GAIvC,IAFA,IAAMsiG,EAAO//G,KAAK4/G,iBAERrhH,EAAI,EAAG4E,EAAI48G,EAAKvhH,OAAQD,IAAM4E,IAAM5E,EAE7CwhH,EAAMxhH,GAAMiL,EAAQiU,KAIrBzd,KAAK8/G,aAAaz7D,aAAc,I,uDAIjC,SAA2C76C,EAAQiU,GAIlD,IAFA,IAAMsiG,EAAO//G,KAAK4/G,iBAERrhH,EAAI,EAAG4E,EAAI48G,EAAKvhH,OAAQD,IAAM4E,IAAM5E,EAE7CwhH,EAAMxhH,GAAMiL,EAAQiU,KAIrBzd,KAAK8/G,aAAaptE,wBAAyB,I,oCAM5C,SAAwBlpC,EAAQiU,GAE/Bzd,KAAK4/G,iBAAkB5/G,KAAK6/G,eAAkBr2G,EAAQiU,K,mDAIvD,SAAuCjU,EAAQiU,GAE9Czd,KAAK4/G,iBAAkB5/G,KAAK6/G,eAAkBr2G,EAAQiU,GACtDzd,KAAK8/G,aAAaz7D,aAAc,I,8DAIjC,SAAkD76C,EAAQiU,GAEzDzd,KAAK4/G,iBAAkB5/G,KAAK6/G,eAAkBr2G,EAAQiU,GACtDzd,KAAK8/G,aAAaptE,wBAAyB,I,iCAM5C,SAAqBlpC,EAAQiU,GAE5Bzd,KAAK4/G,iBAAiB9mF,UAAWtvB,EAAQiU,K,gDAI1C,SAAoCjU,EAAQiU,GAE3Czd,KAAK4/G,iBAAiB9mF,UAAWtvB,EAAQiU,GACzCzd,KAAK8/G,aAAaz7D,aAAc,I,2DAIjC,SAA+C76C,EAAQiU,GAEtDzd,KAAK4/G,iBAAiB9mF,UAAWtvB,EAAQiU,GACzCzd,KAAK8/G,aAAaptE,wBAAyB,I,+BAI5C,SAAmBstE,EAAaviG,GAE/Bzd,KAAKwI,OACLxI,KAAKsc,SAAU0jG,EAAaviG,K,+BAI7B,SAAmBwiG,EAAaxiG,GAE/Bzd,KAAKwI,OACLxI,KAAKusE,SAAU0zC,EAAaxiG,K,kBAK7B,WAEC,IAAIqiG,EAAe9/G,KAAKu/G,KAClBX,EAAa5+G,KAAK4+G,WAElBsB,EAAatB,EAAWsB,WACxBpL,EAAe8J,EAAW9J,aAC5B+K,EAAgBjB,EAAWiB,cAe/B,GAbOC,IAENA,EAAejB,EAAgBW,SAAUx/G,KAAKs/G,SAAUV,EAAWa,WAAcz/G,KAAKs/G,SAEtFt/G,KAAKu/G,KAAOO,GAKb9/G,KAAKsc,SAAWtc,KAAKmgH,sBACrBngH,KAAKusE,SAAWvsE,KAAKogH,sBAGdN,EAAP,CAOA,GAAKI,EAAa,CAEjB,IAAIG,EAAczB,EAAWyB,YAG7B,OAASH,GAER,IAAK,YAEJ,IAAOJ,EAAajqE,SAGnB,YADAvwB,QAAQxjB,MAAO,oFAAqF9B,MAKrG,IAAO8/G,EAAajqE,SAASnB,UAG5B,YADApvB,QAAQxjB,MAAO,8GAA+G9B,MAK/H8/G,EAAeA,EAAajqE,SAASnB,UAErC,MAED,IAAK,QAEJ,IAAOorE,EAAalqE,SAGnB,YADAtwB,QAAQxjB,MAAO,iFAAkF9B,MAQlG8/G,EAAeA,EAAalqE,SAASonC,MAGrC,IAAM,IAAIz+E,EAAI,EAAGA,EAAIuhH,EAAathH,OAAQD,IAEzC,GAAKuhH,EAAcvhH,GAAIiG,OAAS67G,EAAc,CAE7CA,EAAc9hH,EACd,MAMF,MAED,QAEC,QAAoCgE,IAA/Bu9G,EAAcI,GAGlB,YADA56F,QAAQxjB,MAAO,uEAAwE9B,MAKxF8/G,EAAeA,EAAcI,GAK/B,QAAqB39G,IAAhB89G,EAA4B,CAEhC,QAAqC99G,IAAhCu9G,EAAcO,GAGlB,YADA/6F,QAAQxjB,MAAO,wFAAyF9B,KAAM8/G,GAK/GA,EAAeA,EAAcO,IAO/B,IAAMC,EAAeR,EAAchL,GAEnC,QAAsBvyG,IAAjB+9G,EAAL,CAWA,IAAIC,EAAavgH,KAAKwgH,WAAWC,KAEjCzgH,KAAK8/G,aAAeA,OAEcv9G,IAA7Bu9G,EAAaz7D,YAEjBk8D,EAAavgH,KAAKwgH,WAAWE,iBAEsBn+G,IAAxCu9G,EAAaptE,yBAExB6tE,EAAavgH,KAAKwgH,WAAWG,wBAK9B,IAAIC,EAAc5gH,KAAK6gH,YAAYC,OAEnC,QAAuBv+G,IAAlBs9G,EAA8B,CAIlC,GAAsB,0BAAjB/K,EAA2C,CAK/C,IAAOgL,EAAav5E,SAGnB,YADAjhB,QAAQxjB,MAAO,sGAAuG9B,MAKvH,IAAK8/G,EAAav5E,SAAS6gB,iBAmB1B,YADA9hC,QAAQxjB,MAAO,oHAAqH9B,MAhBpI,IAAO8/G,EAAav5E,SAASyd,gBAG5B,YADA1+B,QAAQxjB,MAAO,sHAAuH9B,WAK1EuC,IAAxDu9G,EAAax2D,sBAAuBu2D,KAExCA,EAAgBC,EAAax2D,sBAAuBu2D,IAcvDe,EAAc5gH,KAAK6gH,YAAYE,aAE/B/gH,KAAK4/G,iBAAmBU,EACxBtgH,KAAK6/G,cAAgBA,YAEiBt9G,IAA3B+9G,EAAaxnF,gBAAoDv2B,IAAzB+9G,EAAatrE,SAIhE4rE,EAAc5gH,KAAK6gH,YAAYG,eAE/BhhH,KAAK4/G,iBAAmBU,GAEbv9G,MAAMC,QAASs9G,IAE1BM,EAAc5gH,KAAK6gH,YAAYI,YAE/BjhH,KAAK4/G,iBAAmBU,GAIxBtgH,KAAK80G,aAAeA,EAKrB90G,KAAKsc,SAAWtc,KAAKkhH,oBAAqBN,GAC1C5gH,KAAKusE,SAAWvsE,KAAKmhH,iCAAkCP,GAAeL,OAhGtE,CAEC,IAAMd,EAAWb,EAAWa,SAE5Bn6F,QAAQxjB,MAAO,+DAAiE29G,EAC/E,IAAM3K,EAAe,wBAA0BgL,SAjGhDx6F,QAAQxjB,MAAO,2DAA6D9B,KAAK+E,KAAO,2B,oBAgM1F,WAEC/E,KAAKu/G,KAAO,KAIZv/G,KAAKsc,SAAWtc,KAAK0/G,kBACrB1/G,KAAKusE,SAAWvsE,KAAK2/G,qB,qBArgBtB,SAAeyB,EAAMr8G,EAAM65G,GAE1B,OAASwC,GAAQA,EAAKC,uBAMd,IAAIxC,EAAgBJ,UAAW2C,EAAMr8G,EAAM65G,GAJ3C,IAAIC,EAAiBuC,EAAMr8G,EAAM65G,K,8BAiB1C,SAAyBp6G,GAExB,OAAOA,EAAKwG,QAAS,MAAO,KAAMA,QAASgzG,GAAa,M,4BAIzD,SAAuBpJ,GAEtB,IAAMp2F,EAAU+/F,GAASjhG,KAAMs3F,GAE/B,IAAOp2F,EAEN,MAAM,IAAIhT,MAAO,4CAA8CopG,GAIhE,IAAM0M,EAAU,CAEf7B,SAAUjhG,EAAS,GACnB0hG,WAAY1hG,EAAS,GACrB6hG,YAAa7hG,EAAS,GACtBs2F,aAAct2F,EAAS,GACvBqhG,cAAerhG,EAAS,IAGnB+iG,EAAUD,EAAQ7B,UAAY6B,EAAQ7B,SAASnrG,YAAa,KAElE,QAAiB/R,IAAZg/G,IAAuC,IAAdA,EAAkB,CAE/C,IAAMrB,EAAaoB,EAAQ7B,SAAS7rG,UAAW2tG,EAAU,IAMF,IAAlD/C,GAAsBhxG,QAAS0yG,KAEnCoB,EAAQ7B,SAAW6B,EAAQ7B,SAAS7rG,UAAW,EAAG2tG,GAClDD,EAAQpB,WAAaA,GAMvB,GAA8B,OAAzBoB,EAAQxM,cAAyD,IAAhCwM,EAAQxM,aAAat2G,OAE1D,MAAM,IAAIgN,MAAO,+DAAiEopG,GAInF,OAAO0M,I,sBAIR,SAAiBF,EAAM3B,GAEtB,IAAOA,GAAyB,KAAbA,GAAgC,MAAbA,IAAmC,IAAfA,GAAoBA,IAAa2B,EAAK58G,MAAQi7G,IAAa2B,EAAK3mF,KAEzH,OAAO2mF,EAKR,GAAKA,EAAKxrE,SAAW,CAEpB,IAAM4yD,EAAO4Y,EAAKxrE,SAAS4rE,cAAe/B,GAE1C,QAAcl9G,IAATimG,EAEJ,OAAOA,EAOT,GAAK4Y,EAAKr7G,SAAW,CAEpB,IAsBM07G,EAtBoB,SAApBC,EAA+B37G,GAEpC,IAAM,IAAIxH,EAAI,EAAGA,EAAIwH,EAASvH,OAAQD,IAAO,CAE5C,IAAMojH,EAAY57G,EAAUxH,GAE5B,GAAKojH,EAAUn9G,OAASi7G,GAAYkC,EAAUlnF,OAASglF,EAEtD,OAAOkC,EAIR,IAAM9hH,EAAS6hH,EAAmBC,EAAU57G,UAE5C,GAAKlG,EAAS,OAAOA,EAItB,OAAO,KAIY6hH,CAAmBN,EAAKr7G,UAE5C,GAAK07G,EAEJ,OAAOA,EAMT,OAAO,S,KAwYT5C,GAAgBJ,UAAYA,GAE5BI,GAAgB1/G,UAAU0hH,YAAc,CACvCC,OAAQ,EACRG,YAAa,EACbF,aAAc,EACdC,eAAgB,GAGjBnC,GAAgB1/G,UAAUqhH,WAAa,CACtCC,KAAM,EACNC,YAAa,EACbC,uBAAwB,GAGzB9B,GAAgB1/G,UAAU+hH,oBAAsB,CAE/CrC,GAAgB1/G,UAAUyiH,iBAC1B/C,GAAgB1/G,UAAU0iH,gBAC1BhD,GAAgB1/G,UAAU2iH,uBAC1BjD,GAAgB1/G,UAAU4iH,mBAI3BlD,GAAgB1/G,UAAUgiH,iCAAmC,CAE5D,CAECtC,GAAgB1/G,UAAU6iH,iBAC1BnD,GAAgB1/G,UAAU8iH,gCAC1BpD,GAAgB1/G,UAAU+iH,4CAExB,CAIFrD,GAAgB1/G,UAAUgjH,gBAC1BtD,GAAgB1/G,UAAUijH,+BAC1BvD,GAAgB1/G,UAAUkjH,2CAExB,CAGFxD,GAAgB1/G,UAAUmjH,uBAC1BzD,GAAgB1/G,UAAUojH,sCAC1B1D,GAAgB1/G,UAAUqjH,kDAExB,CAGF3D,GAAgB1/G,UAAUsjH,oBAC1B5D,GAAgB1/G,UAAUujH,mCAC1B7D,GAAgB1/G,UAAUwjH,gD,IAMtBC,G,WAEL,WAAaC,EAAO3W,GAAqD,IAA/C4W,EAA+C,uDAAnC,KAAM1U,EAA6B,uDAAjBlC,EAAKkC,UAAY,oBAExEpuG,KAAK+iH,OAASF,EACd7iH,KAAKgjH,MAAQ9W,EACblsG,KAAKijH,WAAaH,EAClB9iH,KAAKouG,UAAYA,EAWjB,IATA,IAAMjC,EAASD,EAAKC,OACnB+W,EAAU/W,EAAO3tG,OACjB2kH,EAAe,IAAIpgH,MAAOmgH,GAErBE,EAAsB,CAC3BtT,YAAanhF,GACbohF,UAAWphF,IAGFpwB,EAAI,EAAGA,IAAM2kH,IAAY3kH,EAAI,CAEtC,IAAMsvG,EAAc1B,EAAQ5tG,GAAI+uG,kBAAmB,MACnD6V,EAAc5kH,GAAMsvG,EACpBA,EAAYa,SAAW0U,EAIxBpjH,KAAKqjH,qBAAuBD,EAE5BpjH,KAAKsjH,cAAgBH,EAGrBnjH,KAAKujH,kBAAoB,IAAIxgH,MAAOmgH,GAEpCljH,KAAKwjH,YAAc,KACnBxjH,KAAKyjH,kBAAoB,KAEzBzjH,KAAK0jH,sBAAwB,KAC7B1jH,KAAK2jH,mBAAqB,KAE1B3jH,KAAK4jH,KA3y9BY,KA4y9BjB5jH,KAAK6jH,YAAe,EAIpB7jH,KAAK8jH,WAAa,KAIlB9jH,KAAKqyD,KAAO,EAEZryD,KAAKgyG,UAAY,EACjBhyG,KAAK+jH,oBAAsB,EAE3B/jH,KAAK8nG,OAAS,EACd9nG,KAAKgkH,iBAAmB,EAExBhkH,KAAKikH,YAAch/E,IAEnBjlC,KAAKkkH,QAAS,EACdlkH,KAAKmuD,SAAU,EAEfnuD,KAAKmkH,mBAAoB,EAEzBnkH,KAAKokH,kBAAmB,EACxBpkH,KAAKqkH,gBAAiB,E,wCAMvB,WAIC,OAFArkH,KAAK+iH,OAAOuB,gBAAiBtkH,MAEtBA,O,kBAIR,WAIC,OAFAA,KAAK+iH,OAAOwB,kBAAmBvkH,MAExBA,KAAK0kE,U,mBAIb,WASC,OAPA1kE,KAAKkkH,QAAS,EACdlkH,KAAKmuD,SAAU,EAEfnuD,KAAKqyD,KAAO,EACZryD,KAAK6jH,YAAe,EACpB7jH,KAAK8jH,WAAa,KAEX9jH,KAAKwkH,aAAaC,gB,uBAI1B,WAEC,OAAOzkH,KAAKmuD,UAAanuD,KAAKkkH,QAA6B,IAAnBlkH,KAAKgyG,WACxB,OAApBhyG,KAAK8jH,YAAuB9jH,KAAK+iH,OAAO2B,gBAAiB1kH,Q,yBAK3D,WAEC,OAAOA,KAAK+iH,OAAO2B,gBAAiB1kH,Q,qBAIrC,SAASqyD,GAIR,OAFAryD,KAAK8jH,WAAazxD,EAEXryD,O,qBAIR,SAAS2mE,EAAMs9C,GAKd,OAHAjkH,KAAK4jH,KAAOj9C,EACZ3mE,KAAKikH,YAAcA,EAEZjkH,O,gCASR,SAAoB8nG,GAOnB,OALA9nG,KAAK8nG,OAASA,EAGd9nG,KAAKgkH,iBAAmBhkH,KAAKmuD,QAAU25C,EAAS,EAEzC9nG,KAAKwkH,e,gCAKb,WAEC,OAAOxkH,KAAKgkH,mB,oBAIb,SAAQtQ,GAEP,OAAO1zG,KAAK2kH,gBAAiBjR,EAAU,EAAG,K,qBAI3C,SAASA,GAER,OAAO1zG,KAAK2kH,gBAAiBjR,EAAU,EAAG,K,2BAI3C,SAAekR,EAAelR,EAAUmR,GAKvC,GAHAD,EAAcE,QAASpR,GACvB1zG,KAAK+kH,OAAQrR,GAERmR,EAAO,CAEX,IAAMG,EAAiBhlH,KAAKgjH,MAAMtP,SACjCuR,EAAkBL,EAAc5B,MAAMtP,SAEtCwR,EAAgBD,EAAkBD,EAClCG,EAAgBH,EAAiBC,EAElCL,EAAcC,KAAM,EAAKK,EAAexR,GACxC1zG,KAAK6kH,KAAMM,EAAe,EAAKzR,GAIhC,OAAO1zG,O,yBAIR,SAAaolH,EAAc1R,EAAUmR,GAEpC,OAAOO,EAAaC,cAAerlH,KAAM0zG,EAAUmR,K,wBAIpD,WAEC,IAAMS,EAAoBtlH,KAAK2jH,mBAS/B,OAP2B,OAAtB2B,IAEJtlH,KAAK2jH,mBAAqB,KAC1B3jH,KAAK+iH,OAAOwC,4BAA6BD,IAInCtlH,O,mCASR,SAAuBgyG,GAKtB,OAHAhyG,KAAKgyG,UAAYA,EACjBhyG,KAAK+jH,oBAAsB/jH,KAAKkkH,OAAS,EAAIlS,EAEtChyG,KAAKykH,gB,mCAKb,WAEC,OAAOzkH,KAAK+jH,sB,yBAIb,SAAarQ,GAIZ,OAFA1zG,KAAKgyG,UAAYhyG,KAAKgjH,MAAMtP,SAAWA,EAEhC1zG,KAAKykH,gB,sBAIb,SAAU91G,GAKT,OAHA3O,KAAKqyD,KAAO1jD,EAAO0jD,KACnBryD,KAAKgyG,UAAYrjG,EAAOqjG,UAEjBhyG,KAAKykH,gB,kBAIb,SAAM/Q,GAEL,OAAO1zG,KAAK6kH,KAAM7kH,KAAK+jH,oBAAqB,EAAGrQ,K,kBAIhD,SAAM8R,EAAgBC,EAAc/R,GAEnC,IAAMmP,EAAQ7iH,KAAK+iH,OAClB2C,EAAM7C,EAAMxwD,KACZ2/C,EAAYhyG,KAAKgyG,UAEdnE,EAAc7tG,KAAK0jH,sBAEF,OAAhB7V,IAEJA,EAAcgV,EAAM8C,0BACpB3lH,KAAK0jH,sBAAwB7V,GAI9B,IAAMvC,EAAQuC,EAAYS,mBACzBpnG,EAAS2mG,EAAYU,aAQtB,OANAjD,EAAO,GAAMoa,EACbpa,EAAO,GAAMoa,EAAMhS,EAEnBxsG,EAAQ,GAAMs+G,EAAiBxT,EAC/B9qG,EAAQ,GAAMu+G,EAAezT,EAEtBhyG,O,yBAIR,WAEC,IAAM4lH,EAAuB5lH,KAAK0jH,sBASlC,OAP8B,OAAzBkC,IAEJ5lH,KAAK0jH,sBAAwB,KAC7B1jH,KAAK+iH,OAAOwC,4BAA6BK,IAInC5lH,O,sBAMR,WAEC,OAAOA,KAAK+iH,S,qBAIb,WAEC,OAAO/iH,KAAKgjH,Q,qBAIb,WAEC,OAAOhjH,KAAKijH,YAAcjjH,KAAK+iH,OAAO8C,Q,qBAMvC,SAASxzD,EAAMyzD,EAAWC,EAAevI,GAIxC,GAAOx9G,KAAKmuD,QAAZ,CASA,IAAM8jD,EAAYjyG,KAAK8jH,WAEvB,GAAmB,OAAd7R,EAAqB,CAIzB,IAAM+T,GAAgB3zD,EAAO4/C,GAAc8T,EAC3C,GAAKC,EAAc,GAAuB,IAAlBD,EAEvB,OAMD/lH,KAAK8jH,WAAa,KAClBgC,EAAYC,EAAgBC,EAM7BF,GAAa9lH,KAAKimH,iBAAkB5zD,GACpC,IAAM6zD,EAAWlmH,KAAKmmH,YAAaL,GAK7Bhe,EAAS9nG,KAAKomH,cAAe/zD,GAEnC,GAAKy1C,EAAS,EAAI,CAEjB,IAAMqb,EAAenjH,KAAKsjH,cACpB+C,EAAiBrmH,KAAKujH,kBAE5B,OAASvjH,KAAKouG,WAEb,KAAKr/E,GAEJ,IAAM,IAAI5P,EAAI,EAAG5B,EAAI4lG,EAAa3kH,OAAQ2gB,IAAM5B,IAAM4B,EAErDgkG,EAAchkG,GAAI2uF,SAAUoY,GAC5BG,EAAgBlnG,GAAImnG,mBAAoBxe,GAIzC,MAED,KAAKh5E,GACL,QAEC,IAAM,IAAI3P,EAAI,EAAG5B,EAAI4lG,EAAa3kH,OAAQ2gB,IAAM5B,IAAM4B,EAErDgkG,EAAchkG,GAAI2uF,SAAUoY,GAC5BG,EAAgBlnG,GAAIonG,WAAY/I,EAAW1V,UA3D9C9nG,KAAKomH,cAAe/zD,K,2BAqEtB,SAAeA,GAEd,IAAIy1C,EAAS,EAEb,GAAK9nG,KAAKmuD,QAAU,CAEnB25C,EAAS9nG,KAAK8nG,OACd,IAAM+F,EAAc7tG,KAAK2jH,mBAEzB,GAAqB,OAAhB9V,EAAuB,CAE3B,IAAM2Y,EAAmB3Y,EAAYC,SAAUz7C,GAAQ,GAEvDy1C,GAAU0e,EAELn0D,EAAOw7C,EAAYS,mBAAoB,KAE3CtuG,KAAKwkH,aAEqB,IAArBgC,IAGJxmH,KAAKmuD,SAAU,KAWnB,OADAnuD,KAAKgkH,iBAAmBlc,EACjBA,I,8BAIR,SAAkBz1C,GAEjB,IAAI2/C,EAAY,EAEhB,IAAOhyG,KAAKkkH,OAAS,CAEpBlS,EAAYhyG,KAAKgyG,UAEjB,IAAMnE,EAAc7tG,KAAK0jH,sBAEzB,GAAqB,OAAhB7V,EAIJmE,GAFyBnE,EAAYC,SAAUz7C,GAAQ,GAIlDA,EAAOw7C,EAAYS,mBAAoB,KAE3CtuG,KAAKykH,cAEc,IAAdzS,EAGJhyG,KAAKkkH,QAAS,EAKdlkH,KAAKgyG,UAAYA,GAWrB,OADAhyG,KAAK+jH,oBAAsB/R,EACpBA,I,yBAIR,SAAa8T,GAEZ,IAAMpS,EAAW1zG,KAAKgjH,MAAMtP,SACtBkQ,EAAO5jH,KAAK4jH,KAEdvxD,EAAOryD,KAAKqyD,KAAOyzD,EACnBW,EAAYzmH,KAAK6jH,WAEf6C,EAru+Ba,OAqu+BA9C,EAEnB,GAAmB,IAAdkC,EAEJ,OAAqB,IAAhBW,EAA2Bp0D,EAEvBq0D,GAAkC,KAAR,EAAZD,GAA0B/S,EAAWrhD,EAAOA,EAIpE,GAjv+Be,OAiv+BVuxD,EAAoB,EAEH,IAAhB6C,IAIJzmH,KAAK6jH,WAAa,EAClB7jH,KAAK2mH,aAAa,GAAM,GAAM,IAI/BC,EAAa,CAEZ,GAAKv0D,GAAQqhD,EAEZrhD,EAAOqhD,MAED,MAAKrhD,EAAO,GAIZ,CAENryD,KAAKqyD,KAAOA,EAEZ,MAAMu0D,EANNv0D,EAAO,EAUHryD,KAAKmkH,kBAAoBnkH,KAAKkkH,QAAS,EACvClkH,KAAKmuD,SAAU,EAEpBnuD,KAAKqyD,KAAOA,EAEZryD,KAAK+iH,OAAOjnF,cAAe,CAC1B7V,KAAM,WAAYtX,OAAQ3O,KAC1BgqC,UAAW87E,EAAY,GAAM,EAAI,SAK7B,CAwBN,IAtBqB,IAAhBW,IAICX,GAAa,GAEjBW,EAAY,EAEZzmH,KAAK2mH,aAAa,EAA2B,IAArB3mH,KAAKikH,YAAmByC,IAQhD1mH,KAAK2mH,YAAkC,IAArB3mH,KAAKikH,aAAmB,EAAMyC,IAM7Cr0D,GAAQqhD,GAAYrhD,EAAO,EAAI,CAInC,IAAMw0D,EAAY/1G,KAAKmgB,MAAOohC,EAAOqhD,GACrCrhD,GAAQqhD,EAAWmT,EAEnBJ,GAAa31G,KAAKihB,IAAK80F,GAEvB,IAAMC,EAAU9mH,KAAKikH,YAAcwC,EAEnC,GAAKK,GAAW,EAIV9mH,KAAKmkH,kBAAoBnkH,KAAKkkH,QAAS,EACvClkH,KAAKmuD,SAAU,EAEpBkE,EAAOyzD,EAAY,EAAIpS,EAAW,EAElC1zG,KAAKqyD,KAAOA,EAEZryD,KAAK+iH,OAAOjnF,cAAe,CAC1B7V,KAAM,WAAYtX,OAAQ3O,KAC1BgqC,UAAW87E,EAAY,EAAI,GAAM,QAG5B,CAIN,GAAiB,IAAZgB,EAAgB,CAIpB,IAAMC,EAAUjB,EAAY,EAC5B9lH,KAAK2mH,YAAaI,GAAWA,EAASL,QAItC1mH,KAAK2mH,aAAa,GAAO,EAAOD,GAIjC1mH,KAAK6jH,WAAa4C,EAElBzmH,KAAKqyD,KAAOA,EAEZryD,KAAK+iH,OAAOjnF,cAAe,CAC1B7V,KAAM,OAAQtX,OAAQ3O,KAAM6mH,UAAWA,UAOzC7mH,KAAKqyD,KAAOA,EAIb,GAAKq0D,GAAkC,KAAR,EAAZD,GAIlB,OAAO/S,EAAWrhD,EAMpB,OAAOA,I,yBAIR,SAAa00D,EAASC,EAAON,GAE5B,IAAMhY,EAAW1uG,KAAKqjH,qBAEjBqD,GAEJhY,EAASoB,YAAclhF,GACvB8/E,EAASqB,UAAYnhF,KAQpB8/E,EAASoB,YAFLiX,EAEmB/mH,KAAKokH,iBAAmBx1F,GAAkBD,GAI1CE,GAMvB6/E,EAASqB,UAFLiX,EAEiBhnH,KAAKqkH,eAAiBz1F,GAAkBD,GAItCE,M,6BAQ1B,SAAiB6kF,EAAUuT,EAAWC,GAErC,IAAMrE,EAAQ7iH,KAAK+iH,OAAQ2C,EAAM7C,EAAMxwD,KACnCw7C,EAAc7tG,KAAK2jH,mBAEF,OAAhB9V,IAEJA,EAAcgV,EAAM8C,0BACpB3lH,KAAK2jH,mBAAqB9V,GAI3B,IAAMvC,EAAQuC,EAAYS,mBACzBpnG,EAAS2mG,EAAYU,aAOtB,OALAjD,EAAO,GAAMoa,EACbx+G,EAAQ,GAAM+/G,EACd3b,EAAO,GAAMoa,EAAMhS,EACnBxsG,EAAQ,GAAMggH,EAEPlnH,S,KAMHmnH,G,kDAEL,WAAa/F,GAAO,kCAEnB,gBAEKyE,MAAQzE,EACb,EAAKgG,qBACL,EAAKC,WAAa,EAClB,EAAKh1D,KAAO,EACZ,EAAK2/C,UAAY,EARE,E,+CAYpB,SAAarjG,EAAQ24G,GAEpB,IAAMlG,EAAOzyG,EAAOs0G,YAAcjjH,KAAK6lH,MACtC1Z,EAASx9F,EAAOq0G,MAAM7W,OACtB+W,EAAU/W,EAAO3tG,OACjB4gH,EAAWzwG,EAAO40G,kBAClBJ,EAAex0G,EAAO20G,cACtBiE,EAAWnG,EAAK3mF,KAChB+sF,EAAiBxnH,KAAKynH,uBAEnBC,EAAiBF,EAAgBD,QAEbhlH,IAAnBmlH,IAEJA,EAAiB,GACjBF,EAAgBD,GAAaG,GAI9B,IAAM,IAAInpH,EAAI,EAAGA,IAAM2kH,IAAY3kH,EAAI,CAEtC,IAAM6tG,EAAQD,EAAQ5tG,GACrBq2G,EAAYxI,EAAM5nG,KAEf03G,EAAUwL,EAAgB9S,GAE9B,QAAiBryG,IAAZ25G,EAEJkD,EAAU7gH,GAAM29G,MAEV,CAIN,QAAiB35G,KAFjB25G,EAAUkD,EAAU7gH,IAES,CAIC,OAAxB29G,EAAQsH,gBAETtH,EAAQqB,eACXv9G,KAAK2nH,oBAAqBzL,EAASqL,EAAU3S,IAI9C,SAID,IAAM7vG,EAAOuiH,GAAmBA,EAC/B/D,kBAAmBhlH,GAAI29G,QAAQ0C,cAEhC1C,EAAU,IAAID,GACb4C,GAAgBt/G,OAAQ6hH,EAAMxM,EAAW7vG,GACzCqnG,EAAMa,cAAeb,EAAME,iBAEjBiR,eACXv9G,KAAK2nH,oBAAqBzL,EAASqL,EAAU3S,GAE7CwK,EAAU7gH,GAAM29G,EAIjBiH,EAAc5kH,GAAIwvG,aAAemO,EAAQ1yG,U,6BAM3C,SAAiBmF,GAEhB,IAAO3O,KAAK0kH,gBAAiB/1G,GAAW,CAEvC,GAA4B,OAAvBA,EAAO60G,YAAuB,CAKlC,IAAM+D,GAAa54G,EAAOs0G,YAAcjjH,KAAK6lH,OAAQprF,KACpDmtF,EAAWj5G,EAAOq0G,MAAMvoF,KACxBotF,EAAiB7nH,KAAK8nH,eAAgBF,GAEvC5nH,KAAK+nH,YAAap5G,EACjBk5G,GAAkBA,EAAeG,aAAc,IAEhDhoH,KAAKioH,mBAAoBt5G,EAAQi5G,EAAUL,GAO5C,IAHA,IAAMnI,EAAWzwG,EAAO40G,kBAGdhlH,EAAI,EAAG4E,EAAIi8G,EAAS5gH,OAAQD,IAAM4E,IAAM5E,EAAI,CAErD,IAAM29G,EAAUkD,EAAU7gH,GAEG,IAAxB29G,EAAQoB,aAEZt9G,KAAKkoH,aAAchM,GACnBA,EAAQiM,qBAMVnoH,KAAKooH,YAAaz5G,M,+BAMpB,SAAmBA,GAElB,GAAK3O,KAAK0kH,gBAAiB/1G,GAAW,CAKrC,IAHA,IAAMywG,EAAWzwG,EAAO40G,kBAGdhlH,EAAI,EAAG4E,EAAIi8G,EAAS5gH,OAAQD,IAAM4E,IAAM5E,EAAI,CAErD,IAAM29G,EAAUkD,EAAU7gH,GAEG,MAArB29G,EAAQoB,WAEfpB,EAAQmM,uBACRroH,KAAKsoH,iBAAkBpM,IAMzBl8G,KAAKuoH,gBAAiB55G,M,gCAQxB,WAEC3O,KAAKwoH,SAAW,GAChBxoH,KAAKyoH,gBAAkB,EAEvBzoH,KAAK8nH,eAAiB,GAQtB9nH,KAAKg/G,UAAY,GACjBh/G,KAAK0oH,iBAAmB,EAExB1oH,KAAKynH,uBAAyB,GAG9BznH,KAAK2oH,qBAAuB,GAC5B3oH,KAAK4oH,4BAA8B,EAEnC,IAAMj+D,EAAQ3qD,KAEdA,KAAK6oH,MAAQ,CAEZC,QAAS,CACR,YAEC,OAAOn+D,EAAM69D,SAAShqH,QAGvB,YAEC,OAAOmsD,EAAM89D,kBAIfrJ,SAAU,CACT,YAEC,OAAOz0D,EAAMq0D,UAAUxgH,QAGxB,YAEC,OAAOmsD,EAAM+9D,mBAIfK,oBAAqB,CACpB,YAEC,OAAOp+D,EAAMg+D,qBAAqBnqH,QAGnC,YAEC,OAAOmsD,EAAMi+D,iC,6BAWjB,SAAiBj6G,GAEhB,IAAM9C,EAAQ8C,EAAO60G,YACrB,OAAiB,OAAV33G,GAAkBA,EAAQ7L,KAAKyoH,kB,gCAIvC,SAAoB95G,EAAQi5G,EAAUL,GAErC,IAAMuB,EAAU9oH,KAAKwoH,SACpBQ,EAAgBhpH,KAAK8nH,eAElBD,EAAiBmB,EAAepB,GAEpC,QAAwBrlH,IAAnBslH,EAEJA,EAAiB,CAEhBG,aAAc,CAAEr5G,GAChBs6G,aAAc,IAIft6G,EAAO80G,kBAAoB,EAE3BuF,EAAepB,GAAaC,MAEtB,CAEN,IAAMG,EAAeH,EAAeG,aAEpCr5G,EAAO80G,kBAAoBuE,EAAaxpH,OACxCwpH,EAAa7jH,KAAMwK,GAIpBA,EAAO60G,YAAcsF,EAAQtqH,OAC7BsqH,EAAQ3kH,KAAMwK,GAEdk5G,EAAeoB,aAAc1B,GAAa54G,I,mCAI3C,SAAuBA,GAEtB,IAAMm6G,EAAU9oH,KAAKwoH,SACpBU,EAAqBJ,EAASA,EAAQtqH,OAAS,GAC/C2qH,EAAax6G,EAAO60G,YAErB0F,EAAmB1F,YAAc2F,EACjCL,EAASK,GAAeD,EACxBJ,EAAQ/8G,MAER4C,EAAO60G,YAAc,KAGrB,IAAMoE,EAAWj5G,EAAOq0G,MAAMvoF,KAC7BuuF,EAAgBhpH,KAAK8nH,eACrBD,EAAiBmB,EAAepB,GAChCwB,EAAsBvB,EAAeG,aAErCqB,EACCD,EAAqBA,EAAoB5qH,OAAS,GAEnD8qH,EAAmB36G,EAAO80G,kBAE3B4F,EAAgB5F,kBAAoB6F,EACpCF,EAAqBE,GAAqBD,EAC1CD,EAAoBr9G,MAEpB4C,EAAO80G,kBAAoB,YAGNoE,EAAeoB,cACtBt6G,EAAOs0G,YAAcjjH,KAAK6lH,OAAQprF,MAIZ,IAA/B2uF,EAAoB5qH,eAEjBwqH,EAAepB,GAIvB5nH,KAAKupH,iCAAkC56G,K,8CAIxC,SAAkCA,GAIjC,IAFA,IAAMywG,EAAWzwG,EAAO40G,kBAEdhlH,EAAI,EAAG4E,EAAIi8G,EAAS5gH,OAAQD,IAAM4E,IAAM5E,EAAI,CAErD,IAAM29G,EAAUkD,EAAU7gH,GAES,MAA3B29G,EAAQqB,gBAEfv9G,KAAKwpH,uBAAwBtN,M,yBAQhC,SAAavtG,GAQZ,IAAMm6G,EAAU9oH,KAAKwoH,SACpB71G,EAAYhE,EAAO60G,YAEnBiG,EAAkBzpH,KAAKyoH,kBAEvBiB,EAAsBZ,EAASW,GAEhC96G,EAAO60G,YAAciG,EACrBX,EAASW,GAAoB96G,EAE7B+6G,EAAoBlG,YAAc7wG,EAClCm2G,EAASn2G,GAAc+2G,I,6BAIxB,SAAiB/6G,GAQhB,IAAMm6G,EAAU9oH,KAAKwoH,SACpB71G,EAAYhE,EAAO60G,YAEnBmG,IAAwB3pH,KAAKyoH,gBAE7BmB,EAAmBd,EAASa,GAE7Bh7G,EAAO60G,YAAcmG,EACrBb,EAASa,GAAuBh7G,EAEhCi7G,EAAiBpG,YAAc7wG,EAC/Bm2G,EAASn2G,GAAci3G,I,iCAMxB,SAAqB1N,EAASqL,EAAU3S,GAEvC,IAAM4S,EAAiBxnH,KAAKynH,uBAC3BrI,EAAWp/G,KAAKg/G,UAEb6K,EAAgBrC,EAAgBD,QAEbhlH,IAAlBsnH,IAEJA,EAAgB,GAChBrC,EAAgBD,GAAasC,GAI9BA,EAAejV,GAAcsH,EAE7BA,EAAQsH,YAAcpE,EAAS5gH,OAC/B4gH,EAASj7G,KAAM+3G,K,oCAIhB,SAAwBA,GAEvB,IAAMkD,EAAWp/G,KAAKg/G,UACrB8K,EAAc5N,EAAQA,QACtBqL,EAAWuC,EAAYxK,SAAS7kF,KAChCm6E,EAAYkV,EAAY/kH,KACxByiH,EAAiBxnH,KAAKynH,uBACtBoC,EAAgBrC,EAAgBD,GAEhCwC,EAAsB3K,EAAUA,EAAS5gH,OAAS,GAClD2qH,EAAajN,EAAQsH,YAEtBuG,EAAoBvG,YAAc2F,EAClC/J,EAAU+J,GAAeY,EACzB3K,EAASrzG,aAEF89G,EAAejV,GAEuB,IAAxC/1G,OAAOgI,KAAMgjH,GAAgBrrH,eAE1BgpH,EAAgBD,K,0BAMzB,SAAcrL,GAEb,IAAMkD,EAAWp/G,KAAKg/G,UACrBrsG,EAAYupG,EAAQsH,YAEpBiG,EAAkBzpH,KAAK0oH,mBAEvBsB,EAAuB5K,EAAUqK,GAElCvN,EAAQsH,YAAciG,EACtBrK,EAAUqK,GAAoBvN,EAE9B8N,EAAqBxG,YAAc7wG,EACnCysG,EAAUzsG,GAAcq3G,I,8BAIzB,SAAkB9N,GAEjB,IAAMkD,EAAWp/G,KAAKg/G,UACrBrsG,EAAYupG,EAAQsH,YAEpBmG,IAAwB3pH,KAAK0oH,iBAE7BuB,EAAoB7K,EAAUuK,GAE/BzN,EAAQsH,YAAcmG,EACtBvK,EAAUuK,GAAuBzN,EAEjC+N,EAAkBzG,YAAc7wG,EAChCysG,EAAUzsG,GAAcs3G,I,qCAOzB,WAEC,IAAM9G,EAAenjH,KAAK2oH,qBACzBc,EAAkBzpH,KAAK4oH,8BAEpB/a,EAAcsV,EAAcsG,GAahC,YAXqBlnH,IAAhBsrG,KAEJA,EAAc,IAAIkD,GACjB,IAAIxtD,aAAc,GAAK,IAAIA,aAAc,GACzC,EAAGvjD,KAAKkqH,mCAEGC,aAAeV,EAC3BtG,EAAcsG,GAAoB5b,GAI5BA,I,yCAIR,SAA6BA,GAE5B,IAAMsV,EAAenjH,KAAK2oH,qBACzBh2G,EAAYk7F,EAAYsc,aAExBR,IAAwB3pH,KAAK4oH,4BAE7BwB,EAAwBjH,EAAcwG,GAEvC9b,EAAYsc,aAAeR,EAC3BxG,EAAcwG,GAAuB9b,EAErCuc,EAAsBD,aAAex3G,EACrCwwG,EAAcxwG,GAAcy3G,I,wBAO7B,SAAYle,EAAMme,EAAcjc,GAE/B,IAAMgT,EAAOiJ,GAAgBrqH,KAAK6lH,MACjC0B,EAAWnG,EAAK3mF,KAEb6vF,EAA6B,kBAATpe,EAAoBuH,GAAc8W,WAAYnJ,EAAMlV,GAASA,EAE/E0b,EAA0B,OAAf0C,EAAsBA,EAAW7vF,KAAOyxE,EAEnD2b,EAAiB7nH,KAAK8nH,eAAgBF,GACxCN,EAAkB,KAgBtB,QAdmB/kH,IAAd6rG,IAIHA,EAFmB,OAAfkc,EAEQA,EAAWlc,UAIXt/E,SAMUvsB,IAAnBslH,EAA+B,CAEnC,IAAM2C,EAAiB3C,EAAeoB,aAAc1B,GAEpD,QAAwBhlH,IAAnBioH,GAAgCA,EAAepc,YAAcA,EAEjE,OAAOoc,EAMRlD,EAAkBO,EAAeG,aAAc,GAG3B,OAAfsC,IACJA,EAAahD,EAAgBtE,OAK/B,GAAoB,OAAfsH,EAAsB,OAAO,KAGlC,IAAMG,EAAY,IAAI7H,GAAiB5iH,KAAMsqH,EAAYD,EAAcjc,GAOvE,OALApuG,KAAK+nH,YAAa0C,EAAWnD,GAG7BtnH,KAAKioH,mBAAoBwC,EAAW7C,EAAUL,GAEvCkD,I,4BAKR,SAAgBve,EAAMme,GAErB,IAAMjJ,EAAOiJ,GAAgBrqH,KAAK6lH,MACjC0B,EAAWnG,EAAK3mF,KAEhB6vF,EAA6B,kBAATpe,EACnBuH,GAAc8W,WAAYnJ,EAAMlV,GAASA,EAE1C0b,EAAW0C,EAAaA,EAAW7vF,KAAOyxE,EAE1C2b,EAAiB7nH,KAAK8nH,eAAgBF,GAEvC,YAAwBrlH,IAAnBslH,GAEGA,EAAeoB,aAAc1B,IAI9B,O,2BAKR,WAKC,IAHA,IAAMuB,EAAU9oH,KAAKwoH,SAGXjqH,EAFEyB,KAAKyoH,gBAEQ,EAAGlqH,GAAK,IAAMA,EAEtCuqH,EAASvqH,GAAIi0D,OAId,OAAOxyD,O,oBAKR,SAAQ8lH,GAEPA,GAAa9lH,KAAKgyG,UAYlB,IAVA,IAAM8W,EAAU9oH,KAAKwoH,SACpBkC,EAAW1qH,KAAKyoH,gBAEhBp2D,EAAOryD,KAAKqyD,MAAQyzD,EACpBC,EAAgBj1G,KAAKk7B,KAAM85E,GAE3BtI,EAAYx9G,KAAKqnH,YAAc,EAItB9oH,EAAI,EAAGA,IAAMmsH,IAAansH,EAAI,CAExBuqH,EAASvqH,GAEjBosH,QAASt4D,EAAMyzD,EAAWC,EAAevI,GASjD,IAHA,IAAM4B,EAAWp/G,KAAKg/G,UACrB4L,EAAY5qH,KAAK0oH,iBAERnqH,EAAI,EAAGA,IAAMqsH,IAAcrsH,EAEpC6gH,EAAU7gH,GAAI6B,MAAOo9G,GAItB,OAAOx9G,O,qBAKR,SAAS6qH,GAER7qH,KAAKqyD,KAAO,EACZ,IAAM,IAAI9zD,EAAI,EAAGA,EAAIyB,KAAKwoH,SAAShqH,OAAQD,IAE1CyB,KAAKwoH,SAAUjqH,GAAI8zD,KAAO,EAI3B,OAAOryD,KAAKipB,OAAQ4hG,K,qBAKrB,WAEC,OAAO7qH,KAAK6lH,Q,yBAKb,SAAa3Z,GAEZ,IAAM4c,EAAU9oH,KAAKwoH,SACpBZ,EAAW1b,EAAKzxE,KAChBuuF,EAAgBhpH,KAAK8nH,eACrBD,EAAiBmB,EAAepB,GAEjC,QAAwBrlH,IAAnBslH,EAA+B,CAQnC,IAFA,IAAMiD,EAAkBjD,EAAeG,aAE7BzpH,EAAI,EAAG4E,EAAI2nH,EAAgBtsH,OAAQD,IAAM4E,IAAM5E,EAAI,CAE5D,IAAMoQ,EAASm8G,EAAiBvsH,GAEhCyB,KAAKukH,kBAAmB51G,GAExB,IAAMw6G,EAAax6G,EAAO60G,YACzB0F,EAAqBJ,EAASA,EAAQtqH,OAAS,GAEhDmQ,EAAO60G,YAAc,KACrB70G,EAAO80G,kBAAoB,KAE3ByF,EAAmB1F,YAAc2F,EACjCL,EAASK,GAAeD,EACxBJ,EAAQ/8G,MAER/L,KAAKupH,iCAAkC56G,UAIjCq6G,EAAepB,M,yBAOxB,SAAaxG,GAEZ,IAAMmG,EAAWnG,EAAK3mF,KACrBuuF,EAAgBhpH,KAAK8nH,eAEtB,IAAM,IAAMF,KAAYoB,EAAgB,CAEvC,IACCr6G,EADoBq6G,EAAepB,GAAWqB,aACvB1B,QAERhlH,IAAXoM,IAEJ3O,KAAKukH,kBAAmB51G,GACxB3O,KAAK+qH,sBAAuBp8G,IAM9B,IACCk7G,EADsB7pH,KAAKynH,uBACKF,GAEjC,QAAuBhlH,IAAlBsnH,EAEJ,IAAM,IAAMjV,KAAaiV,EAAgB,CAExC,IAAM3N,EAAU2N,EAAejV,GAC/BsH,EAAQmM,uBACRroH,KAAKwpH,uBAAwBtN,M,2BAShC,SAAehQ,EAAMme,GAEpB,IAAM17G,EAAS3O,KAAKwqH,eAAgBte,EAAMme,GAE1B,OAAX17G,IAEJ3O,KAAKukH,kBAAmB51G,GACxB3O,KAAK+qH,sBAAuBp8G,Q,GA5uBF6gB,IAovB7B23F,GAAehoH,UAAU+qH,iCAAmC,IAAI3mE,aAAc,G,IAExEynE,G,WAEL,WAAajhF,EAAQC,GAAsC,IAA3BqG,EAA2B,uDAApB,EAAGC,EAAiB,uDAAXrL,IAAW,oBAE1DjlC,KAAKiqC,IAAM,IAAIH,GAAKC,EAAQC,GAG5BhqC,KAAKqwC,KAAOA,EACZrwC,KAAKswC,IAAMA,EACXtwC,KAAKmjC,OAAS,KACdnjC,KAAKqxC,OAAS,IAAIH,GAElBlxC,KAAKiF,OAAS,CACbkkD,KAAM,GACN+/C,KAAM,CAAEE,UAAW,GACnB6hB,IAAK,GACL7gB,OAAQ,CAAEhB,UAAW,GACrB8hB,OAAQ,I,uCAKV,SAAKnhF,EAAQC,GAIZhqC,KAAKiqC,IAAIrvB,IAAKmvB,EAAQC,K,2BAIvB,SAAemhF,EAAQhoF,GAEjBA,GAAUA,EAAOsrB,qBAErBzuD,KAAKiqC,IAAIF,OAAO0J,sBAAuBtQ,EAAOK,aAC9CxjC,KAAKiqC,IAAID,UAAUpvB,IAAKuwG,EAAOrvG,EAAGqvG,EAAOpvG,EAAG,IAAMqvG,UAAWjoF,GAASkB,IAAKrkC,KAAKiqC,IAAIF,QAASpV,YAC7F30B,KAAKmjC,OAASA,GAEHA,GAAUA,EAAO8gE,sBAE5BjkG,KAAKiqC,IAAIF,OAAOnvB,IAAKuwG,EAAOrvG,EAAGqvG,EAAOpvG,GAAKonB,EAAOkN,KAAOlN,EAAOmN,MAAUnN,EAAOkN,KAAOlN,EAAOmN,MAAQ86E,UAAWjoF,GAClHnjC,KAAKiqC,IAAID,UAAUpvB,IAAK,EAAG,GAAK,GAAI0xB,mBAAoBnJ,EAAOK,aAC/DxjC,KAAKmjC,OAASA,GAId7d,QAAQxjB,MAAO,6CAA+CqhC,EAAOld,Q,6BAMvE,SAAiBhlB,GAA6C,IAArCg1C,EAAqC,wDAAlBwT,EAAkB,uDAAL,GAMxD,OAJA4hE,GAAiBpqH,EAAQjB,KAAMypD,EAAYxT,GAE3CwT,EAAWwiB,KAAMq/C,IAEV7hE,I,8BAIR,SAAkBwX,GAEjB,IAF+D,IAArChrB,EAAqC,wDAAlBwT,EAAkB,uDAAL,GAEhDlrD,EAAI,EAAGyK,EAAIi4D,EAAQziE,OAAQD,EAAIyK,EAAGzK,IAE3C8sH,GAAiBpqD,EAAS1iE,GAAKyB,KAAMypD,EAAYxT,GAMlD,OAFAwT,EAAWwiB,KAAMq/C,IAEV7hE,M,KAMT,SAAS6hE,GAAS3gH,EAAGC,GAEpB,OAAOD,EAAE4oC,SAAW3oC,EAAE2oC,SAIvB,SAAS83E,GAAiBpqH,EAAQuoD,EAAWC,EAAYxT,GAQxD,GANKh1C,EAAOowC,OAAOh7B,KAAMmzC,EAAUnY,SAElCpwC,EAAOsqH,QAAS/hE,EAAWC,IAIT,IAAdxT,EAIJ,IAFA,IAAMlwC,EAAW9E,EAAO8E,SAEdxH,EAAI,EAAGyK,EAAIjD,EAASvH,OAAQD,EAAIyK,EAAGzK,IAE5C8sH,GAAiBtlH,EAAUxH,GAAKirD,EAAWC,GAAY,G,IAepD+hE,G,WAEL,aAA8C,IAAjC/mF,EAAiC,uDAAxB,EAAGC,EAAqB,uDAAf,EAAG9L,EAAY,uDAAJ,EAMzC,OAN6C,oBAE7C54B,KAAKykC,OAASA,EACdzkC,KAAK0kC,IAAMA,EACX1kC,KAAK44B,MAAQA,EAEN54B,K,uCAIR,SAAKykC,EAAQC,EAAK9L,GAMjB,OAJA54B,KAAKykC,OAASA,EACdzkC,KAAK0kC,IAAMA,EACX1kC,KAAK44B,MAAQA,EAEN54B,O,kBAIR,SAAMyrH,GAML,OAJAzrH,KAAKykC,OAASgnF,EAAMhnF,OACpBzkC,KAAK0kC,IAAM+mF,EAAM/mF,IACjB1kC,KAAK44B,MAAQ6yF,EAAM7yF,MAEZ54B,O,sBAKR,WAEC,IAAM0rH,EAAM,KAGZ,OAFA1rH,KAAK0kC,IAAM5zB,KAAKkE,IAAK02G,EAAK56G,KAAKiE,IAAKjE,KAAKif,GAAK27F,EAAK1rH,KAAK0kC,MAEjD1kC,O,4BAIR,SAAgBggB,GAEf,OAAOhgB,KAAK2rH,uBAAwB3rG,EAAElE,EAAGkE,EAAEjE,EAAGiE,EAAEsc,K,oCAIjD,SAAwBxgB,EAAGC,EAAGugB,GAgB7B,OAdAt8B,KAAKykC,OAAS3zB,KAAKujB,KAAMvY,EAAIA,EAAIC,EAAIA,EAAIugB,EAAIA,GAExB,IAAhBt8B,KAAKykC,QAETzkC,KAAK44B,MAAQ,EACb54B,KAAK0kC,IAAM,IAIX1kC,KAAK44B,MAAQ9nB,KAAKyjB,MAAOzY,EAAGwgB,GAC5Bt8B,KAAK0kC,IAAM5zB,KAAKyrB,KAAMjM,GAASvU,EAAI/b,KAAKykC,QAAU,EAAG,KAI/CzkC,O,mBAIR,WAEC,OAAO,IAAIA,KAAKR,aAAc27B,KAAMn7B,U,KAMhC4rH,GAA0B,IAAIvpF,GAC9BwpF,GAA4B,IAAIt/E,GAChCu/E,GAAgC,IAAIv/E,GAGpCw/E,G,kDAEL,WAAa9qH,GAAS,0BAYrB,IAVA,IAAM+7E,EAAQgvC,GAAa/qH,GAErBslC,EAAW,IAAIwd,GAEf6G,EAAW,GACXjI,EAAS,GAETf,EAAS,IAAItB,GAAO,EAAG,EAAG,GAC1BuB,EAAS,IAAIvB,GAAO,EAAG,EAAG,GAEtB/hD,EAAI,EAAGA,EAAIy+E,EAAMx+E,OAAQD,IAAO,CAEzC,IAAMiqG,EAAOxrB,EAAOz+E,GAEfiqG,EAAKp2D,QAAUo2D,EAAKp2D,OAAO+1D,SAE/Bv9C,EAASzmD,KAAM,EAAG,EAAG,GACrBymD,EAASzmD,KAAM,EAAG,EAAG,GACrBw+C,EAAOx+C,KAAMy9C,EAAOxpB,EAAGwpB,EAAO18B,EAAG08B,EAAOh3C,GACxC+3C,EAAOx+C,KAAM09C,EAAOzpB,EAAGypB,EAAO38B,EAAG28B,EAAOj3C,IAM1C27B,EAASte,aAAc,WAAY,IAAIq7B,GAAwBsH,EAAU,IACzErkB,EAASte,aAAc,QAAS,IAAIq7B,GAAwBX,EAAQ,IAEpE,IAAM9M,EAAW,IAAIwmC,GAAmB,CAAEpiC,cAAc,EAAMU,WAAW,EAAOC,YAAY,EAAOsB,YAAY,EAAO/B,aAAa,IA9B9G,OAgCrB,cAAO5T,EAAUsP,IAEZ5vB,KAAO,iBACZ,EAAKgmG,kBAAmB,EAExB,EAAK7K,KAAOngH,EACZ,EAAK+7E,MAAQA,EAEb,EAAKnkD,OAAS53B,EAAOuiC,YACrB,EAAK5I,kBAAmB,EAzCH,E,qDA6CtB,SAAmByZ,GAElB,IAAM2oC,EAAQh9E,KAAKg9E,MAEbz2C,EAAWvmC,KAAKumC,SAChB4I,EAAW5I,EAAS9xB,aAAc,YAExCq3G,GAAgB3wF,KAAMn7B,KAAKohH,KAAK59E,aAActL,SAE9C,IAAM,IAAI35B,EAAI,EAAG4gB,EAAI,EAAG5gB,EAAIy+E,EAAMx+E,OAAQD,IAAO,CAEhD,IAAMiqG,EAAOxrB,EAAOz+E,GAEfiqG,EAAKp2D,QAAUo2D,EAAKp2D,OAAO+1D,SAE/B0jB,GAAYz1F,iBAAkB01F,GAAiBtjB,EAAKhlE,aACpDooF,GAAUn4E,sBAAuBo4E,IACjC18E,EAAS4T,OAAQ5jC,EAAGysG,GAAU9vG,EAAG8vG,GAAU7vG,EAAG6vG,GAAUtvF,GAExDuvF,GAAYz1F,iBAAkB01F,GAAiBtjB,EAAKp2D,OAAO5O,aAC3DooF,GAAUn4E,sBAAuBo4E,IACjC18E,EAAS4T,OAAQ5jC,EAAI,EAAGysG,GAAU9vG,EAAG8vG,GAAU7vG,EAAG6vG,GAAUtvF,GAE5Dnd,GAAK,GAMPonB,EAAS9xB,aAAc,YAAa4vC,aAAc,EAElD,yEAAyBhQ,O,GA9EEy1D,IAqF7B,SAASkiB,GAAa/qH,GAErB,IAAMirH,EAAW,GAEZjrH,GAAUA,EAAOknG,QAErB+jB,EAAS/nH,KAAMlD,GAIhB,IAAM,IAAI1C,EAAI,EAAGA,EAAI0C,EAAO8E,SAASvH,OAAQD,IAE5C2tH,EAAS/nH,KAAK/D,MAAO8rH,EAAUF,GAAa/qH,EAAO8E,SAAUxH,KAI9D,OAAO2tH,EAIR,IAAMC,GAAa,IAAI5oE,aAAc,GAC/B6oE,GAAa,IAAIr4D,WAAYo4D,GAAW3iH,QAExC6iH,G,gGAIL,SAAoB3jH,GAQnByjH,GAAY,GAAMzjH,EAClB,IAAMoT,EAAIswG,GAAY,GAElBlrB,EAASplF,GAAK,GAAO,MACrByB,EAAMzB,GAAK,GAAO,KAChB1Y,EAAM0Y,GAAK,GAAO,IAIxB,OAAK1Y,EAAI,IAAa89F,EAGjB99F,EAAI,KAER89F,GAAQ,MAGRA,IAAiB,KAAL99F,EAAa,EAAI,IAAa,QAAJ0Y,GAMlC1Y,EAAI,IAKR89F,KAHA3jF,GAAK,OAGY,IAAMna,IAAYma,GAAO,IAAMna,EAAQ,IAKzD89F,GAAY99F,EAAI,KAAS,GAASma,GAAK,EAGvC2jF,GAAY,EAAJ3jF,O,KASJ+uG,GAAWx7G,KAAK8f,IAAK,EADX,GAOV27F,GAAkB,CAAE,KAAO,KAAO,IAAM,KAAO,KAAO,MAEtDC,GAAaC,EAAwBF,GAAgB/tH,OAIrDkuH,GAAc,GAEdC,IAAS,mBACZ39F,GAAkB,GADN,cAEZC,GAAgB,GAFJ,cAGZE,GAAgB,GAHJ,cAnhhCO,KAuhhCF,GAJL,cAlhhCQ,KAuhhCF,GALN,cAjhhCM,KAuhhCF,GANJ,cAOZD,GAAiB,GAPL,GAUT09F,GAAqB,IAAI5qE,GAAmB,CACjDhI,KA/qhCgB,EAgrhChBY,YAAY,EACZD,WAAW,IAENkyE,GAAgB,IAAI1jE,GAAM,IAAIoB,GAAeqiE,IAE7CE,GAA8B,IAAIlS,GACxC,GAAyDmS,KAAjDC,GAAR,GAAQA,WAAYC,GAApB,GAAoBA,UAAWC,GAA/B,GAA+BA,QACzBC,GAA4B,IAAI7sE,GAClC8sE,GAAa,KAGXC,IAAQ,EAAIv8G,KAAKujB,KAAM,IAAQ,EAC/Bi5F,GAAU,EAAID,GAIdE,GAAkB,CACT,IAAIlrF,GAAS,EAAG,EAAG,GACnB,IAAIA,IAAW,EAAG,EAAG,GACrB,IAAIA,GAAS,EAAG,GAAK,GACrB,IAAIA,IAAW,EAAG,GAAK,GACvB,IAAIA,GAAS,EAAGgrF,GAAKC,IACrB,IAAIjrF,GAAS,EAAGgrF,IAAOC,IACvB,IAAIjrF,GAASirF,GAAS,EAAGD,IACzB,IAAIhrF,IAAWirF,GAAS,EAAGD,IAC3B,IAAIhrF,GAASgrF,GAAKC,GAAS,GAC3B,IAAIjrF,IAAWgrF,GAAKC,GAAS,IAiB5C,SAASE,GAAqB5wE,GAE7B,IAAM6wE,EAAe38G,KAAKkE,IAAK4nC,EAAMxkB,EAAGwkB,EAAM13B,EAAG03B,EAAMhyC,GACjD8iH,EAAO58G,KAAKiE,IAAKjE,KAAKkE,IAAKlE,KAAK+f,KAAM/f,KAAKw8E,KAAMmgC,KAAoB,KAAS,KAIpF,OAHA7wE,EAAM7oB,eAAgBjjB,KAAK8f,IAAK,GAAO88F,KAEvBA,EAAO,KAAU,I,IAK5BC,G,WAEL,WAAax+D,GAAW,oBAEvBnvD,KAAK+iF,UAAY5zB,EACjBnvD,KAAK4tH,sBAAwB,KAE7B5tH,KAAK6tH,cA4gBP,SAAyBxlD,GAExB,IAAMylD,EAAU,IAAIvqE,aAAc8kB,GAC5B0lD,EAAW,IAAI1rF,GAAS,EAAG,EAAG,GA6FpC,OA5FuB,IAAIwoE,GAAmB,CAE7CrmG,KAAM,wBAEN2nD,QAAS,CAAE,EAAKkc,GAEhBtc,SAAU,CACT,OAAU,CAAEtsD,MAAO,MACnB,QAAW,CAAEA,MAAO,GACpB,QAAW,CAAEA,MAAOquH,GACpB,YAAe,CAAEruH,OAAO,GACxB,OAAU,CAAEA,MAAO,GACnB,OAAU,CAAEA,MAAO,GACnB,SAAY,CAAEA,MAAOsuH,GACrB,cAAiB,CAAEtuH,MAAOktH,GAAW39F,MACrC,eAAkB,CAAEvvB,MAAOktH,GAAW39F,OAGvCo9B,aA8LD,+rCA5LCC,eAAc,uVA2Pf,29CA3Pe,gyCAkEdtS,SAh1iCiB,EAi1iCjBY,WAAW,EACXC,YAAY,IAxmBSozE,CAAgBtB,IACrC1sH,KAAKiuH,gBAAkB,KACvBjuH,KAAKkuH,eAAiB,KAEtBluH,KAAKmuH,iBAAkBnuH,KAAK6tH,e,6CAW7B,SAAWz+D,GAA0C,IAAnCg/D,EAAmC,uDAA3B,EAAG/9E,EAAwB,uDAAjB,GAAKC,EAAY,uDAAN,IAE9C88E,GAAaptH,KAAK+iF,UAAUxzB,kBAC5B,IAAM8+D,EAAqBruH,KAAKsuH,mBAYhC,OAVAtuH,KAAKuuH,eAAgBn/D,EAAO/e,EAAMC,EAAK+9E,GAClCD,EAAQ,GAEZpuH,KAAKwuH,MAAOH,EAAoB,EAAG,EAAGD,GAIvCpuH,KAAKyuH,YAAaJ,GAClBruH,KAAK0uH,SAAUL,GAERA,I,iCASR,SAAqBM,GAEpB,OAAO3uH,KAAK4uH,aAAcD,K,yBAS3B,SAAaxkD,GAEZ,OAAOnqE,KAAK4uH,aAAczkD,K,kCAQ3B,WAE8B,OAAxBnqE,KAAKkuH,iBAETluH,KAAKkuH,eAAiBW,KACtB7uH,KAAKmuH,iBAAkBnuH,KAAKkuH,mB,0CAU9B,WAE+B,OAAzBluH,KAAKiuH,kBAETjuH,KAAKiuH,gBAAkBa,KACvB9uH,KAAKmuH,iBAAkBnuH,KAAKiuH,oB,qBAW9B,WAECjuH,KAAK6tH,cAAcxvF,UAEU,OAAxBr+B,KAAKkuH,gBAA0BluH,KAAKkuH,eAAe7vF,UAC1B,OAAzBr+B,KAAKiuH,iBAA2BjuH,KAAKiuH,gBAAgB5vF,UAE1D,IAAM,IAAI9/B,EAAI,EAAGA,EAAIyuH,GAAWxuH,OAAQD,IAEvCyuH,GAAYzuH,GAAI8/B,Y,sBAQlB,SAAU0wF,GAET/uH,KAAK4tH,sBAAsBvvF,UAC3Br+B,KAAK+iF,UAAUvzB,gBAAiB49D,IAChC2B,EAAahxF,aAAc,EAC3BixF,GAAcD,EAAc,EAAG,EAAGA,EAAaz1F,MAAOy1F,EAAax1F,U,0BAIpE,SAAc0E,GAEbmvF,GAAaptH,KAAK+iF,UAAUxzB,kBAC5B,IAAM8+D,EAAqBruH,KAAKsuH,iBAAkBrwF,GAKlD,OAJAj+B,KAAKivH,iBAAkBhxF,EAASowF,GAChCruH,KAAKyuH,YAAaJ,GAClBruH,KAAK0uH,SAAUL,GAERA,I,8BAIR,SAAkBpwF,GAEjB,IAAMh5B,EAAS,CACdm1B,UAAWlN,EACXmN,UAAWnN,EACX2N,iBAAiB,EACjB5U,KAAMuH,EACN8M,OAzyhCgBvM,KA0yhChByM,SAAU00F,GAAQjxF,GAAYA,EAAQzD,SAAWrL,GACjD+O,aAAa,GAGRmwF,EAAqBc,GAAqBlqH,GAGhD,OAFAopH,EAAmBnwF,aAAcD,EACjCj+B,KAAK4tH,sBAAwBuB,GAAqBlqH,GAC3CopH,I,8BAIR,SAAkBx4E,GAEjB,IAAMu5E,EAAU,IAAIjmE,GAAM6jE,GAAY,GAAKn3E,GAC3C71C,KAAK+iF,UAAUlmE,QAASuyG,EAAStC,M,4BAIlC,SAAgB19D,EAAO/e,EAAMC,EAAK+9E,GAEjC,IAEMgB,EAAa,IAAIliE,GAFX,GACG,EACwC9c,EAAMC,GACvDg/E,EAAS,CAAE,GAAK,EAAG,EAAG,EAAG,EAAG,GAC5BC,EAAc,CAAE,EAAG,EAAG,GAAK,GAAK,GAAK,GACrCpgE,EAAWnvD,KAAK+iF,UAEhBysC,EAAoBrgE,EAASiT,UAC7B0X,EAAiB3qB,EAAS2qB,eAC1BnX,EAAcxT,EAASwT,YAC7BxT,EAASuS,cAAeyrD,IAExBh+D,EAASwT,YAl3hCW,EAm3hCpBxT,EAAS2qB,eAAiB9qD,GAC1BmgC,EAASiT,WAAY,EAErB,IAAIqtD,GAAgB,EACdnvD,EAAalR,EAAMkR,WACzB,GAAKA,GAEJ,GAAKA,EAAW7jB,QAAU,CAEzBmwE,GAAmBhwE,MAAMzhB,KAAMmlC,GAAaovD,sBAC5CtgE,EAAMkR,WAAa,KAEnB,IAAM1rC,EAAQ44F,GAAqBZ,GAAmBhwE,OACtDgwE,GAAmB1yE,QAAUtlB,EAC7B66F,GAAgB,OAIX,CAEN7C,GAAmBhwE,MAAMzhB,KAAMgyF,IAAcuC,sBAE7C,IAAM96F,EAAQ44F,GAAqBZ,GAAmBhwE,OACtDgwE,GAAmB1yE,QAAUtlB,EAC7B66F,GAAgB,EAKjB,IAAM,IAAIlxH,EAAI,EAAGA,EAAI,EAAGA,IAAO,CAE9B,IAAMoxH,EAAMpxH,EAAI,EACJ,GAAPoxH,GAEJN,EAAW1iH,GAAGiO,IAAK,EAAG00G,EAAQ/wH,GAAK,GACnC8wH,EAAWz7E,OAAQ27E,EAAahxH,GAAK,EAAG,IAEtB,GAAPoxH,GAEXN,EAAW1iH,GAAGiO,IAAK,EAAG,EAAG00G,EAAQ/wH,IACjC8wH,EAAWz7E,OAAQ,EAAG27E,EAAahxH,GAAK,KAIxC8wH,EAAW1iH,GAAGiO,IAAK,EAAG00G,EAAQ/wH,GAAK,GACnC8wH,EAAWz7E,OAAQ,EAAG,EAAG27E,EAAahxH,KAIvCywH,GAAcX,EACbsB,EAAMrD,GAAU/tH,EAAI,EAAI+tH,GAAW,EAAGA,GAAUA,IACjDn9D,EAASK,gBAAiB6+D,GAErBoB,GAEJtgE,EAAS3pD,OAAQqnH,GAAewC,GAIjClgE,EAAS3pD,OAAQ4pD,EAAOigE,GAIzBlgE,EAASwT,YAAcA,EACvBxT,EAAS2qB,eAAiBA,EAC1B3qB,EAASiT,UAAYotD,I,8BAItB,SAAkBvxF,EAASowF,GAE1B,IAAMl/D,EAAWnvD,KAAK+iF,UAEjB9kD,EAAQ0xB,cAEgB,MAAvB3vD,KAAKkuH,iBAETluH,KAAKkuH,eAAiBW,MAMM,MAAxB7uH,KAAKiuH,kBAETjuH,KAAKiuH,gBAAkBa,MAMzB,IAAMj5E,EAAW5X,EAAQ0xB,cAAgB3vD,KAAKkuH,eAAiBluH,KAAKiuH,gBAC9Dh+D,EAAO,IAAI9G,GAAM6jE,GAAY,GAAKn3E,GAElCkW,EAAWlW,EAASkW,SAE1BA,EAAQ,OAAatsD,MAAQw+B,EAEtBA,EAAQ0xB,eAEd5D,EAAQ,UAAgBtsD,MAAMmb,IAAK,EAAMqjB,EAAQhF,MAAMK,MAAO,EAAM2E,EAAQhF,MAAMM,QAInFwyB,EAAQ,cAAoBtsD,MAAQktH,GAAW1uF,EAAQzD,UACvDuxB,EAAQ,eAAqBtsD,MAAQktH,GAAW0B,EAAmBpwF,QAAQzD,UAE3Ew0F,GAAcX,EAAoB,EAAG,EAAG,EAAI/B,GAAU,EAAIA,IAE1Dn9D,EAASK,gBAAiB6+D,GAC1Bl/D,EAAS3pD,OAAQyqD,EAAM68D,M,yBAIxB,SAAauB,GAEZ,IAAMl/D,EAAWnvD,KAAK+iF,UAChB3gB,EAAYjT,EAASiT,UAC3BjT,EAASiT,WAAY,EAErB,IAAM,IAAI7jE,EAAI,EAAGA,EAAIiuH,GAAYjuH,IAAO,CAEvC,IAAM6vH,EAAQt9G,KAAKujB,KAAM64F,GAAS3uH,GAAM2uH,GAAS3uH,GAAM2uH,GAAS3uH,EAAI,GAAM2uH,GAAS3uH,EAAI,IAEjFwvH,EAAWR,IAAmBhvH,EAAI,GAAMgvH,GAAgB/uH,QAE9DwB,KAAKwuH,MAAOH,EAAoB9vH,EAAI,EAAGA,EAAG6vH,EAAOL,GAIlD5+D,EAASiT,UAAYA,I,mBAWtB,SAAOisD,EAAoBuB,EAAOC,EAAQzB,EAAOL,GAEhD,IAAM+B,EAAuB9vH,KAAK4tH,sBAElC5tH,KAAK+vH,UACJ1B,EACAyB,EACAF,EACAC,EACAzB,EACA,cACAL,GAED/tH,KAAK+vH,UACJD,EACAzB,EACAwB,EACAA,EACAzB,EACA,eACAL,K,uBAIF,SAAWiC,EAAUC,EAAWL,EAAOC,EAAQK,EAAclmF,EAAW+jF,GAEvE,IAAM5+D,EAAWnvD,KAAK+iF,UAChBotC,EAAenwH,KAAK6tH,cAEP,gBAAd7jF,GAA6C,iBAAdA,GAEnC1kB,QAAQxjB,MACP,8DAKF,IAEMsuH,EAAW,IAAIjnE,GAAM6jE,GAAY6C,GAAUM,GAC3CE,EAAeF,EAAapkE,SAE5BukE,EAASrD,GAAW2C,GAAU,EAC9BW,EAAkB/pE,SAAU0pE,GAAiBp/G,KAAKif,IAAO,EAAIugG,GAAW,EAAIx/G,KAAKif,GAAT,GACxEygG,EAAcN,EAAeK,EAC7Bx/B,EAAUvqC,SAAU0pE,GAAiB,EAAIp/G,KAAKmgB,MARxB,EAQqDu/F,GAAgB9D,GAE5F37B,EAAU27B,IAEdpnG,QAAQM,KAAR,wBACCsqG,EADD,yDAECn/B,EAFD,+CAE+C27B,KAOhD,IAHA,IAAMoB,EAAU,GACZ2C,EAAM,EAEAlyH,EAAI,EAAGA,EAAImuH,KAAgBnuH,EAAI,CAExC,IAAMud,EAAIvd,EAAIiyH,EACR1oB,EAASh3F,KAAK+gB,KAAO/V,EAAIA,EAAI,GACnCgyG,EAAQ3pH,KAAM2jG,GAEJ,GAALvpG,EAEJkyH,GAAO3oB,EAEIvpG,EAAIwyF,IAEf0/B,GAAO,EAAI3oB,GAMb,IAAM,IAAIvpG,EAAI,EAAGA,EAAIuvH,EAAQtvH,OAAQD,IAEpCuvH,EAASvvH,GAAMuvH,EAASvvH,GAAMkyH,EAI/BJ,EAAY,OAAa5wH,MAAQuwH,EAAS/xF,QAC1CoyF,EAAY,QAAc5wH,MAAQsxF,EAClCs/B,EAAY,QAAc5wH,MAAQquH,EAClCuC,EAAY,YAAkB5wH,MAAsB,gBAAduqC,EAEjC+jF,IAEJsC,EAAY,SAAe5wH,MAAQsuH,GAIpCsC,EAAY,OAAa5wH,MAAQ8wH,EACjCF,EAAY,OAAa5wH,MA7eX,EA6e6BmwH,EAC3CS,EAAY,cAAoB5wH,MAAQktH,GAAWqD,EAAS/xF,QAAQzD,UACpE61F,EAAY,eAAqB5wH,MAAQktH,GAAWqD,EAAS/xF,QAAQzD,UAErE,IAAMk2F,EAAazD,GAAW4C,GAI9Bb,GAAciB,EAHJ,EAAIn/G,KAAKkE,IAAK,EAAGs3G,GAAW,EAAIoE,IACnB,IAAXb,EAAe,EAAI,EAAIvD,IAAa,EAAIoE,GAAeb,EAASpD,EAAoBoD,EAnflF,EADA,EAof+G,GAE9F,EAAIa,EAAY,EAAIA,GACnDvhE,EAASK,gBAAiBygE,GAC1B9gE,EAAS3pD,OAAQ4qH,EAAUtD,Q,KAM7B,SAASoC,GAAQjxF,GAEhB,YAAiB17B,IAAZ07B,GAAyBA,EAAQhY,OAASuH,IAExCyQ,EAAQzD,WAAaxL,IAAkBiP,EAAQzD,WAAavL,IAAgBgP,EAAQzD,WAAatL,IAIzG,SAAS69F,KAQR,IANA,IAAMC,EAAa,GACbC,EAAY,GACZC,EAAU,GAEZyD,EA3gBW,EA6gBLpyH,EAAI,EAAGA,EAAIiuH,GAAYjuH,IAAO,CAEvC,IAAMqyH,EAAU9/G,KAAK8f,IAAK,EAAG+/F,GAC7B1D,EAAU9oH,KAAMysH,GAChB,IAAIxC,EAAQ,EAAMwC,EAEbryH,EAAIkuH,EAER2B,EAAQ7B,GAAiBhuH,EArhBZ,EADA,EAshBoC,GAEjC,GAALA,IAEX6vH,EAAQ,GAITlB,EAAQ/oH,KAAMiqH,GAiBd,IAfA,IAAMyC,EAAY,GAAQD,EAAU,GAC9B77G,GAAQ87G,EAAY,EACpB77G,EAAM,EAAI67G,EAAY,EACtBz4E,EAAM,CAAErjC,EAAKA,EAAKC,EAAKD,EAAKC,EAAKA,EAAKD,EAAKA,EAAKC,EAAKA,EAAKD,EAAKC,GAQ/Dm6B,EAAW,IAAIoU,aAAcutE,KAC7B/0F,EAAK,IAAIwnB,aAAcwtE,IACvBhnE,EAAY,IAAIxG,aAAcytE,IAE1BhnE,EAAO,EAAGA,EAVF,EAUoBA,IAAU,CAE/C,IAAMluC,EAAMkuC,EAAO,EAAM,EAAI,EAAI,EAC3BjuC,EAAIiuC,EAAO,EAAI,GAAM,EACrBinE,EAAc,CACnBn1G,EAAGC,EAAG,EACND,EAAI,EAAI,EAAGC,EAAG,EACdD,EAAI,EAAI,EAAGC,EAAI,EAAG,EAClBD,EAAGC,EAAG,EACND,EAAI,EAAI,EAAGC,EAAI,EAAG,EAClBD,EAAGC,EAAI,EAAG,GAEXozB,EAASv0B,IAAKq2G,EAAaH,GAA0B9mE,GACrDjuB,EAAGnhB,IAAKw9B,EAAK24E,GAAoB/mE,GACjC,IAAMknE,EAAO,CAAElnE,EAAMA,EAAMA,EAAMA,EAAMA,EAAMA,GAC7CD,EAAUnvC,IAAKs2G,EAAMF,EAA2BhnE,GAIjD,IAAM2G,EAAS,IAAI5M,GACnB4M,EAAO1oC,aAAc,WAAY,IAAIm6B,GAAiBjT,EA5BjC,IA6BrBwhB,EAAO1oC,aAAc,KAAM,IAAIm6B,GAAiBrmB,EA5BjC,IA6Bf40B,EAAO1oC,aAAc,YAAa,IAAIm6B,GAAiB2H,EA5BjC,IA6BtBijE,EAAW7oH,KAAMwsD,GAEZggE,EAxkBS,GA0kBbA,IAMF,MAAO,CAAE3D,aAAYC,YAAWC,WAIjC,SAASiC,GAAqBlqH,GAE7B,IAAMopH,EAAqB,IAAIzwF,GAAmB,EAAI0uF,GAAU,EAAIA,GAAUrnH,GAI9E,OAHAopH,EAAmBpwF,QAAQjE,QAAUlN,EACrCuhG,EAAmBpwF,QAAQz5B,KAAO,eAClC6pH,EAAmBtwF,aAAc,EAC1BswF,EAIR,SAASW,GAAc3wH,EAAQyd,EAAGC,EAAGud,EAAOC,GAE3Cl7B,EAAO2/B,SAASpjB,IAAKkB,EAAGC,EAAGud,EAAOC,GAClCl7B,EAAOy/B,QAAQljB,IAAKkB,EAAGC,EAAGud,EAAOC,GAwGlC,SAASu1F,KAER,IAAM+B,EAAY,IAAIn9F,GAAS,EAAG,GA4DlC,OA3DuB,IAAIm3E,GAAmB,CAE7CrmG,KAAM,0BAENunD,SAAU,CACT,OAAU,CAAEtsD,MAAO,MACnB,UAAa,CAAEA,MAAOoxH,GACtB,cAAiB,CAAEpxH,MAAOktH,GAAW39F,MACrC,eAAkB,CAAEvvB,MAAOktH,GAAW39F,OAGvCo9B,aAkGD,+rCAhGCC,eAAc,8LA+Jf,29CA/Je,03BAwCdtS,SAl5iCiB,EAm5iCjBY,WAAW,EACXC,YAAY,IAQd,SAASi0E,KAwCR,OAtCuB,IAAIhkB,GAAmB,CAE7CrmG,KAAM,kBAENunD,SAAU,CACT,OAAU,CAAEtsD,MAAO,MACnB,cAAiB,CAAEA,MAAOktH,GAAW39F,MACrC,eAAkB,CAAEvvB,MAAOktH,GAAW39F,OAGvCo9B,aAkCD,+rCAhCCC,eAAc,iKA+Ff,29CA/Fe,gSAoBdtS,SA97iCiB,EA+7iCjBY,WAAW,EACXC,YAAY,IA6JdmxE,GAAe5sH,UAAU8pB,OAAS,WAEjC3D,QAAQxjB,MAAO,iEAMhBi1G,GAAO53G,UAAUgyH,eAAiB,SAAWnsH,GAG5C,OADAsgB,QAAQM,KAAM,wGACPu1F,GAAYgW,eAAgBnsH,IAIpC+xG,GAAOqa,SAAW,CAEjBrrF,IAAK,WAEJzgB,QAAQxjB,MAAO,4FAIhBf,IAAK,WAEJukB,QAAQxjB,MAAO,6FAQjBkjC,GAAK7lC,UAAU81B,OAAS,SAAWo8F,GAGlC,OADA/rG,QAAQM,KAAM,2DACP5lB,KAAKinC,UAAWoqF,IAIxBrsF,GAAK7lC,UAAUmyH,MAAQ,WAGtB,OADAhsG,QAAQM,KAAM,wDACP5lB,KAAKkmC,WAIblB,GAAK7lC,UAAUoyH,kBAAoB,SAAWtrF,GAG7C,OADA3gB,QAAQM,KAAM,0EACP5lB,KAAK2pD,cAAe1jB,IAI5BjB,GAAK7lC,UAAUqyH,qBAAuB,SAAW5qF,GAGhD,OADAthB,QAAQM,KAAM,gFACP5lB,KAAKipC,iBAAkBrC,IAI/B5B,GAAK7lC,UAAUmqB,KAAO,SAAW+nG,GAGhC,OADA/rG,QAAQM,KAAM,uDACP5lB,KAAK6nC,QAASwpF,IAMtBzoF,GAAOzpC,UAAUmyH,MAAQ,WAGxB,OADAhsG,QAAQM,KAAM,0DACP5lB,KAAKkmC,WAMbsqB,GAAQrxD,UAAUsyH,cAAgB,SAAWl0G,GAG5C,OADA+H,QAAQM,KAAM,mFACP5lB,KAAKqkG,wBAAyB9mF,IAMtC6X,GAAQj2B,UAAUuyH,qBAAuB,SAAW/hG,EAAOlS,GAG1D,OADA6H,QAAQM,KAAM,uFACP5lB,KAAKg1C,QAASrlB,EAAOlS,IAI7B2X,GAAQj2B,UAAUwyH,gBAAkB,SAAWvrF,GAG9C,OADA9gB,QAAQM,KAAM,kGACPwgB,EAAOpK,aAAch8B,OAI7Bo1B,GAAQj2B,UAAUyyH,qBAAuB,WAExCtsG,QAAQxjB,MAAO,6DAIhBszB,GAAQj2B,UAAU0yH,uBAAyB,SAAWrrG,GAGrD,OADAlB,QAAQM,KAAM,4GACPY,EAAUwV,aAAch8B,OAIhCo1B,GAAQj2B,UAAU2yH,oBAAsB,WAEvCxsG,QAAQxjB,MAAO,4DAIhBszB,GAAQj2B,UAAU4yH,WAAa,SAAWl5F,GAGzC,OADAvT,QAAQM,KAAM,kGACP5lB,KAAKm7B,KAAMtC,GAASX,UAM5BqU,GAAQptC,UAAU6yH,gBAAkB,SAAWz0G,GAG9C,OADA+H,QAAQM,KAAM,0EACP5lB,KAAK0iE,aAAcnlD,IAI3BgvB,GAAQptC,UAAUuyH,qBAAuB,SAAW/hG,EAAOlS,GAG1D,OADA6H,QAAQM,KAAM,uFACP5lB,KAAKg1C,QAASrlB,EAAOlS,IAI7B8uB,GAAQptC,UAAU8yH,YAAc,WAG/B,OADA3sG,QAAQM,KAAM,yGACP,IAAIyc,IAAUwC,oBAAqB7kC,KAAM,IAIjDusC,GAAQptC,UAAU+yH,0BAA4B,SAAWp/F,GAGxD,OADAxN,QAAQM,KAAM,kGACP5lB,KAAK6wC,2BAA4B/d,IAIzCyZ,GAAQptC,UAAUgzH,gBAAkB,WAEnC7sG,QAAQM,KAAM,wDAIf2mB,GAAQptC,UAAUwyH,gBAAkB,SAAWvrF,GAG9C,OADA9gB,QAAQM,KAAM,kGACPwgB,EAAOhD,aAAcpjC,OAI7BusC,GAAQptC,UAAUizH,gBAAkB,SAAWhsF,GAG9C,OADA9gB,QAAQM,KAAM,kGACPwgB,EAAOhD,aAAcpjC,OAI7BusC,GAAQptC,UAAUyyH,qBAAuB,WAExCtsG,QAAQxjB,MAAO,6DAIhByqC,GAAQptC,UAAUkzH,WAAa,SAAWryG,GAEzCsF,QAAQM,KAAM,oGACd5F,EAAEssB,mBAAoBtsC,OAIvBusC,GAAQptC,UAAUmzH,YAAc,SAAWlsF,GAG1C,OADA9gB,QAAQM,KAAM,8FACPwgB,EAAOhD,aAAcpjC,OAI7BusC,GAAQptC,UAAU0lD,UAAY,WAE7Bv/B,QAAQxjB,MAAO,kDAIhByqC,GAAQptC,UAAUozH,QAAU,WAE3BjtG,QAAQxjB,MAAO,gDAIhByqC,GAAQptC,UAAUqzH,QAAU,WAE3BltG,QAAQxjB,MAAO,gDAIhByqC,GAAQptC,UAAUszH,QAAU,WAE3BntG,QAAQxjB,MAAO,gDAIhByqC,GAAQptC,UAAUuzH,aAAe,WAEhCptG,QAAQxjB,MAAO,qDAIhByqC,GAAQptC,UAAU0yH,uBAAyB,SAAWrrG,GAGrD,OADAlB,QAAQM,KAAM,4GACPY,EAAU4c,aAAcpjC,OAIhCusC,GAAQptC,UAAU2yH,oBAAsB,WAEvCxsG,QAAQxjB,MAAO,4DAIhByqC,GAAQptC,UAAUwzH,YAAc,SAAW1iF,EAAMC,EAAOE,EAAQD,EAAKE,EAAMC,GAG1E,OADAhrB,QAAQM,KAAM,wHACP5lB,KAAKwuD,gBAAiBve,EAAMC,EAAOC,EAAKC,EAAQC,EAAMC,IAI9D/D,GAAQptC,UAAU4yH,WAAa,SAAWl5F,GAGzC,OADAvT,QAAQM,KAAM,kGACP5lB,KAAKm7B,KAAMtC,GAASX,UAM5Bme,GAAMl3C,UAAUyzH,mBAAqB,SAAWn8E,GAG/C,OADAnxB,QAAQM,KAAM,6EACP5lB,KAAK6yH,eAAgBp8E,IAM7BjY,GAAWr/B,UAAUwyH,gBAAkB,SAAWvrF,GAGjD,OADA9gB,QAAQM,KAAM,mHACPwgB,EAAO7D,gBAAiBviC,OAIhCw+B,GAAWr/B,UAAUopG,QAAU,WAG9B,OADAjjF,QAAQM,KAAM,8DACP5lB,KAAKk4B,UAMb4R,GAAI3qC,UAAUoyH,kBAAoB,SAAWtrF,GAG5C,OADA3gB,QAAQM,KAAM,yEACP5lB,KAAK2pD,cAAe1jB,IAI5B6D,GAAI3qC,UAAU2zH,oBAAsB,SAAWhsF,GAG9C,OADAxhB,QAAQM,KAAM,6EACP5lB,KAAK62C,gBAAiB/P,IAI9BgD,GAAI3qC,UAAUqyH,qBAAuB,SAAW5qF,GAG/C,OADAthB,QAAQM,KAAM,+EACP5lB,KAAKipC,iBAAkBrC,IAM/BiR,GAAS14C,UAAU4zH,KAAO,WAGzB,OADAztG,QAAQM,KAAM,2DACP5lB,KAAKgzH,WAIbn7E,GAAS14C,UAAU8zH,mBAAqB,SAAW9sF,EAAO9nC,GAGzD,OADAinB,QAAQM,KAAM,8EACP5lB,KAAKm4C,aAAchS,EAAO9nC,IAIlCw5C,GAAS14C,UAAU+zH,SAAW,SAAW70H,GAGxC,OADAinB,QAAQM,KAAM,mEACP5lB,KAAKmzH,YAAa90H,IAI1Bw5C,GAASu7E,gBAAkB,SAAW/0H,GAGrC,OADAinB,QAAQM,KAAM,+DACP5lB,KAAKi4C,UAAW55C,IAIxBw5C,GAAS14C,UAAU2nC,MAAQ,SAAWzoC,GAGrC,OADAinB,QAAQM,KAAM,6DACP5lB,KAAKqzH,SAAUh1H,IAIvBw5C,GAASo7E,mBAAqB,SAAW9sF,EAAOx7B,EAAGC,EAAG0T,EAAGjgB,GAGxD,OADAinB,QAAQM,KAAM,8EACPiyB,GAASM,aAAchS,EAAOx7B,EAAGC,EAAG0T,EAAGjgB,IAI/Cw5C,GAASvT,OAAS,SAAW35B,EAAGC,EAAG0T,EAAGjgB,GAGrC,OADAinB,QAAQM,KAAM,+DACPiyB,GAASI,UAAWttC,EAAGC,EAAG0T,EAAGjgB,IAMrCq1B,GAAQv0B,UAAUgnB,cAAgB,SAAWK,EAAW3a,EAAO4R,GAG9D,OADA6H,QAAQM,KAAM,+EACP5lB,KAAK6iD,oBAAqBr8B,EAAW3a,EAAO4R,IAIpDiW,GAAQv0B,UAAUm0H,oBAAsB,SAAWtzG,GAGlD,OADAsF,QAAQM,KAAM,qFACP5lB,KAAKuzH,oBAAqBvzG,IAIlC0T,GAAQv0B,UAAUq0H,gBAAkB,WAGnC,OADAluG,QAAQM,KAAM,6EACP5lB,KAAK2nG,mBAMbtlE,GAAQljC,UAAUs0H,2BAA6B,WAE9CnuG,QAAQxjB,MAAO,8GAIhBugC,GAAQljC,UAAUu0H,uBAAyB,WAE1CpuG,QAAQxjB,MAAO,sGAIhBugC,GAAQljC,UAAUw0H,sBAAwB,SAAWp2G,GAGpD,OADA+H,QAAQM,KAAM,yFACP5lB,KAAKyzC,sBAAuBl2B,IAIpC8kB,GAAQljC,UAAUy0H,mBAAqB,SAAWr2G,GAGjD,OADA+H,QAAQM,KAAM,mFACP5lB,KAAK6zH,mBAAoBt2G,IAIjC8kB,GAAQljC,UAAU20H,oBAAsB,SAAWjoH,EAAOgtB,GAGzD,OADAvT,QAAQM,KAAM,qFACP5lB,KAAK6kC,oBAAqBhM,EAAQhtB,IAI1Cw2B,GAAQljC,UAAU40H,gBAAkB,SAAWx2G,GAG9C,OADA+H,QAAQM,KAAM,uFACP5lB,KAAKojC,aAAc7lB,IAI3B8kB,GAAQljC,UAAUgnB,cAAgB,SAAWK,EAAW3a,EAAO4R,GAG9D,OADA6H,QAAQM,KAAM,+EACP5lB,KAAK6iD,oBAAqBr8B,EAAW3a,EAAO4R,IAIpD4kB,GAAQljC,UAAUm0H,oBAAsB,SAAWtzG,GAGlD,OADAsF,QAAQM,KAAM,qFACP5lB,KAAKuzH,oBAAqBvzG,IAIlCqiB,GAAQljC,UAAUq0H,gBAAkB,WAGnC,OADAluG,QAAQM,KAAM,6EACP5lB,KAAK2nG,mBAMbtrE,GAAQl9B,UAAUgnB,cAAgB,SAAWK,EAAW3a,EAAO4R,GAG9D,OADA6H,QAAQM,KAAM,+EACP5lB,KAAK6iD,oBAAqBr8B,EAAW3a,EAAO4R,IAIpD4e,GAAQl9B,UAAUq0H,gBAAkB,WAGnC,OADAluG,QAAQM,KAAM,6EACP5lB,KAAK2nG,mBAMbx1D,GAAShzC,UAAU60H,eAAiB,SAAWxvH,GAG9C,OADA8gB,QAAQM,KAAM,6EACP5lB,KAAKi0H,gBAAiBzvH,IAI9B2tC,GAAShzC,UAAU+0H,YAAc,WAEhC5uG,QAAQM,KAAM,8EAIfusB,GAAShzC,UAAU0lD,UAAY,SAAWtR,EAAUjU,GAGnD,OADAha,QAAQM,KAAM,kGACP5lB,KAAKwzC,gBAAiBlU,EAAMiU,IAIpCpB,GAAShzC,UAAUg1H,iBAAmB,WAErC7uG,QAAQxjB,MAAO,mHAIhBqwC,GAAShzC,UAAUi1H,YAAc,SAAWv7F,GAG3C,OADAvT,QAAQM,KAAM,uEACP5lB,KAAKojC,aAAcvK,IAI3Bh6B,OAAOob,iBAAkBk4B,GAAShzC,UAAW,CAE5Ck1H,WAAY,CACXtzH,IAAK,WAGJ,OADAukB,QAAQM,KAAM,uDACP5lB,KAAKy4B,SAAS1F,OAGtBnY,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,uDACd5lB,KAAKy4B,SAAS1F,MAAQtzB,IAIxB60H,cAAe,CACdvzH,IAAK,WAEJukB,QAAQM,KAAM,kGAGfhL,IAAK,WAEJ0K,QAAQM,KAAM,qGAOjBujC,GAAKhqD,UAAUo1H,YAAc,WAE5BjvG,QAAQxjB,MAAO,8LAIhBjD,OAAOob,iBAAkBkvC,GAAKhqD,UAAW,CAExCq1H,SAAU,CACTzzH,IAAK,WAGJ,OADAukB,QAAQxjB,MAAO,oGA5+jCQ,GAg/jCxB8Y,IAAK,WAEJ0K,QAAQxjB,MAAO,4LAOlBylG,GAAYpoG,UAAUs1H,UAAY,WAEjCnvG,QAAQxjB,MAAO,qDAMhBqrD,GAAkBhuD,UAAUu1H,QAAU,SAAW9mE,EAAaH,GAE7DnoC,QAAQM,KAAM,oHAGKrjB,IAAdkrD,IAA0BztD,KAAKytD,UAAYA,GAChDztD,KAAK20H,eAAgB/mE,IAMtB/uD,OAAOob,iBAAkBu/F,GAAMr6G,UAAW,CACzCy1H,WAAY,CACXh6G,IAAK,WAEJ0K,QAAQM,KAAM,gDAIhBivG,gBAAiB,CAChBj6G,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,4DACd5lB,KAAK8gE,OAAO39B,OAAOiqB,IAAM3tD,IAI3Bq1H,iBAAkB,CACjBl6G,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,8DACd5lB,KAAK8gE,OAAO39B,OAAO8M,KAAOxwC,IAI5Bs1H,kBAAmB,CAClBn6G,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,gEACd5lB,KAAK8gE,OAAO39B,OAAO+M,MAAQzwC,IAI7Bu1H,gBAAiB,CAChBp6G,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,4DACd5lB,KAAK8gE,OAAO39B,OAAOgN,IAAM1wC,IAI3Bw1H,mBAAoB,CACnBr6G,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,kEACd5lB,KAAK8gE,OAAO39B,OAAOiN,OAAS3wC,IAI9B2/D,iBAAkB,CACjBxkD,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,8DACd5lB,KAAK8gE,OAAO39B,OAAOkN,KAAO5wC,IAI5B4/D,gBAAiB,CAChBzkD,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,4DACd5lB,KAAK8gE,OAAO39B,OAAOmN,IAAM7wC,IAI3By1H,oBAAqB,CACpBt6G,IAAK,WAEJ0K,QAAQM,KAAM,oHAIhBy4C,WAAY,CACXzjD,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,iDACd5lB,KAAK8gE,OAAOqgB,KAAO1hF,IAIrB01H,eAAgB,CACfv6G,IAAK,WAEJ0K,QAAQM,KAAM,oDAIhBwvG,eAAgB,CACfx6G,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,8DACd5lB,KAAK8gE,OAAOugB,QAAQ/nD,MAAQ75B,IAI9B41H,gBAAiB,CAChBz6G,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,gEACd5lB,KAAK8gE,OAAOugB,QAAQ9nD,OAAS95B,MAQhCZ,OAAOob,iBAAkBmoC,GAAgBjjD,UAAW,CAEnDX,OAAQ,CACPuC,IAAK,WAGJ,OADAukB,QAAQM,KAAM,2EACP5lB,KAAK2vB,MAAMnxB,SAIpB82H,QAAS,CACRv0H,IAAK,WAGJ,OADAukB,QAAQM,KAAM,4EACP5lB,KAAKsiD,QAAUhzB,IAGvB1U,IAAK,WAEJ0K,QAAQM,KAAM,4EACd5lB,KAAK4mG,SAAUt3E,QAOlB8yB,GAAgBjjD,UAAUo2H,WAAa,SAAW91H,GAIjD,OAFA6lB,QAAQM,KAAM,sFACd5lB,KAAK4mG,UAAoB,IAAVnnG,EAAiB6vB,GAAmBD,IAC5CrvB,MAIRoiD,GAAgBjjD,UAAUq2H,iBAAmB,WAE5ClwG,QAAQxjB,MAAO,iEAIhBsgD,GAAgBjjD,UAAUs2H,SAAW,WAEpCnwG,QAAQxjB,MAAO,4HAMhBiiD,GAAe5kD,UAAUu2H,SAAW,SAAW7pH,GAE9CyZ,QAAQM,KAAM,sEACd5lB,KAAKioD,SAAUp8C,IAIhBk4C,GAAe5kD,UAAUw2H,aAAe,SAAWnxH,EAAMgiB,GAIxD,OAFAlB,QAAQM,KAAM,8EAELY,GAAaA,EAAUy8B,mBAA2Bz8B,GAAaA,EAAU0sC,6BAQpE,UAAT1uD,GAEJ8gB,QAAQM,KAAM,2EACd5lB,KAAKioD,SAAUzhC,GAERxmB,MAIDA,KAAKioB,aAAczjB,EAAMgiB,IAf/BlB,QAAQM,KAAM,0EAEP5lB,KAAKioB,aAAczjB,EAAM,IAAI49C,GAAiBjiD,UAAW,GAAKA,UAAW,OAiBlF4jD,GAAe5kD,UAAUy2H,YAAc,SAAWl/E,EAAOlR,EAAOqwF,QAE1CtzH,IAAhBszH,GAEJvwG,QAAQM,KAAM,wEAIfN,QAAQM,KAAM,4DACd5lB,KAAK8nD,SAAUpR,EAAOlR,IAIvBue,GAAe5kD,UAAU22H,eAAiB,WAEzCxwG,QAAQM,KAAM,kEACd5lB,KAAK+1H,eAINhyE,GAAe5kD,UAAU62H,eAAiB,WAEzC1wG,QAAQM,KAAM,8DAIfm+B,GAAe5kD,UAAU6oB,gBAAkB,SAAWxjB,GAIrD,OAFA8gB,QAAQM,KAAM,oFAEP5lB,KAAKwiE,gBAAiBh+D,IAI9Bu/C,GAAe5kD,UAAUi1H,YAAc,SAAWv7F,GAGjD,OADAvT,QAAQM,KAAM,6EACP5lB,KAAKojC,aAAcvK,IAI3Bh6B,OAAOob,iBAAkB8pC,GAAe5kD,UAAW,CAElD82H,UAAW,CACVl1H,IAAK,WAGJ,OADAukB,QAAQxjB,MAAO,iEACR9B,KAAKwf,SAId02G,QAAS,CACRn1H,IAAK,WAGJ,OADAukB,QAAQM,KAAM,+DACP5lB,KAAKwf,WAOfgnF,GAAkBrnG,UAAUo2H,WAAa,SAAW91H,GAInD,OAFA6lB,QAAQM,KAAM,wFACd5lB,KAAK4mG,UAAoB,IAAVnnG,EAAiB6vB,GAAmBD,IAC5CrvB,MAIRwmG,GAAkBrnG,UAAUs2H,SAAW,WAEtCnwG,QAAQxjB,MAAO,8HAMhBykG,GAAMpnG,UAAUk/B,QAAU,WAEzB/Y,QAAQxjB,MAAO,8CAMhBjD,OAAOob,iBAAkB4/B,GAAW16C,UAAW,CAE9Cg3H,WAAY,CACXp1H,IAAK,WAEJukB,QAAQM,KAAM,kDAGfhL,IAAK,WAEJ0K,QAAQM,KAAM,mDAKhBwwG,SAAU,CACTr1H,IAAK,WAEJukB,QAAQM,KAAM,gDAGfhL,IAAK,WAEJ0K,QAAQM,KAAM,iDAKhBywG,QAAS,CACRt1H,IAAK,WAGJ,OADAukB,QAAQM,KAAM,8CACP,IAAI06B,KAKbg2E,QAAS,CACRv1H,IAAK,WAEJukB,QAAQxjB,MAAO,SAAW9B,KAAKimB,KAAO,uEAGvCrL,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,SAAW5lB,KAAKimB,KAAO,sEACrCjmB,KAAK08C,YAn9kCY,IAm9kCIj9C,IAKvBgpF,YAAa,CACZ1nF,IAAK,WAGJ,OADAukB,QAAQM,KAAM,SAAW5lB,KAAKimB,KAAO,kEAC9BjmB,KAAKg7C,iBAGbpgC,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,SAAW5lB,KAAKimB,KAAO,kEACrCjmB,KAAKg7C,gBAAkBv7C,MAO1BZ,OAAOob,iBAAkBiyC,GAAe/sD,UAAW,CAElDstD,YAAa,CACZ1rD,IAAK,WAGJ,OADAukB,QAAQM,KAAM,iFACP5lB,KAAKwsD,WAAWC,aAGxB7xC,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,kFACd5lB,KAAKwsD,WAAWC,YAAchtD,MASjCs8F,GAAc58F,UAAUo3H,YAAc,SAAW5nE,EAAc/R,EAAO/e,EAAOsyB,GAE5E7qC,QAAQM,KAAM,yGACd5lB,KAAKwvD,gBAAiBb,GACtB3uD,KAAKowD,MAAOxT,EAAO/e,EAAOsyB,IAI3B4rC,GAAc58F,UAAUq3H,QAAU,SAAW3nH,GAE5CyW,QAAQM,KAAM,+DACd5lB,KAAK0yD,iBAAkB7jD,IAIxBktF,GAAc58F,UAAUs3H,uBAAyB,WAGhD,OADAnxG,QAAQM,KAAM,6EACP5lB,KAAKuvD,mBAIbwsC,GAAc58F,UAAU+oE,iBAAmB,WAG1C,OADA5iD,QAAQM,KAAM,qFACP5lB,KAAK8yD,aAAaoV,oBAI1B6zB,GAAc58F,UAAUu3H,aAAe,WAGtC,OADApxG,QAAQM,KAAM,wEACP5lB,KAAK8yD,aAAapX,WAI1BqgD,GAAc58F,UAAUw3H,aAAe,WAGtC,OADArxG,QAAQM,KAAM,+DACP5lB,KAAK2F,MAAM++D,SAInBq3B,GAAc58F,UAAUy3H,sBAAwB,WAG/C,OADAtxG,QAAQM,KAAM,gGACP5lB,KAAKwsD,WAAWzrD,IAAK,sBAI7Bg7F,GAAc58F,UAAU03H,0BAA4B,WAGnD,OADAvxG,QAAQM,KAAM,yGACP5lB,KAAKwsD,WAAWzrD,IAAK,2BAI7Bg7F,GAAc58F,UAAU23H,4BAA8B,WAGrD,OADAxxG,QAAQM,KAAM,6GACP5lB,KAAKwsD,WAAWzrD,IAAK,6BAI7Bg7F,GAAc58F,UAAU43H,8BAAgC,WAGvD,OADAzxG,QAAQM,KAAM,oHACP5lB,KAAKwsD,WAAWzrD,IAAK,kCAI7Bg7F,GAAc58F,UAAU63H,+BAAiC,WAGxD,OADA1xG,QAAQM,KAAM,sHACP5lB,KAAKwsD,WAAWzrD,IAAK,mCAI7Bg7F,GAAc58F,UAAU83H,oBAAsB,WAG7C,OADA3xG,QAAQM,KAAM,6FACP5lB,KAAKwsD,WAAWzrD,IAAK,qBAI7Bg7F,GAAc58F,UAAUw5E,uBAAyB,WAGhD,OADArzD,QAAQM,KAAM,uFACP5lB,KAAK8yD,aAAakV,gBAI1B+zB,GAAc58F,UAAU+3H,wBAA0B,WAGjD,OADA5xG,QAAQM,KAAM,uGACP5lB,KAAKwsD,WAAWzrD,IAAK,2BAI7Bg7F,GAAc58F,UAAUg4H,kBAAoB,SAAWp2B,GAEtDz7E,QAAQM,KAAM,uEACd5lB,KAAKomF,eAAgB2a,IAItBhF,GAAc58F,UAAUi4H,aAAe,WAEtC9xG,QAAQM,KAAM,2DAIfm2E,GAAc58F,UAAUk4H,aAAe,WAEtC/xG,QAAQM,KAAM,2DAIfm2E,GAAc58F,UAAUm4H,cAAgB,WAEvChyG,QAAQM,KAAM,4DAIfm2E,GAAc58F,UAAUo4H,gBAAkB,WAEzCjyG,QAAQM,KAAM,8DAIfm2E,GAAc58F,UAAUq4H,eAAiB,WAExClyG,QAAQM,KAAM,6DAIfm2E,GAAc58F,UAAUs4H,iBAAmB,WAE1CnyG,QAAQM,KAAM,+DAIfm2E,GAAc58F,UAAUu4H,WAAa,WAEpCpyG,QAAQM,KAAM,yDAIfm2E,GAAc58F,UAAU0vF,aAAe,WAEtCvpE,QAAQM,KAAM,2DAIfm2E,GAAc58F,UAAUgwF,eAAiB,WAExC7pE,QAAQM,KAAM,6DAIfm2E,GAAc58F,UAAUw4H,qBAAuB,WAG9C,OADAryG,QAAQM,KAAM,gFACP5lB,KAAKgmF,wBAIbnnF,OAAOob,iBAAkB8hF,GAAc58F,UAAW,CAEjDo6E,iBAAkB,CACjBx4E,IAAK,WAEJ,OAAOf,KAAKy9E,UAAUtvB,SAGvBvzC,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,qEACd5lB,KAAKy9E,UAAUtvB,QAAU1uD,IAI3Bm3E,cAAe,CACd71E,IAAK,WAEJ,OAAOf,KAAKy9E,UAAUx3D,MAGvBrL,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,+DACd5lB,KAAKy9E,UAAUx3D,KAAOxmB,IAIxBm4H,kBAAmB,CAClB72H,IAAK,WAEJukB,QAAQM,KAAM,+FAIfhL,IAAK,WAEJ0K,QAAQM,KAAM,gGAIhBnhB,QAAS,CACR1D,IAAK,WAGJ,OADAukB,QAAQM,KAAM,8EACP5lB,KAAKw5B,eAIdq+F,GAAI,CACH92H,IAAK,WAGJ,OADAukB,QAAQM,KAAM,oDACP5lB,KAAKirB,KAId6sG,WAAY,CACX/2H,IAAK,WAGJ,OADAukB,QAAQM,KAAM,mHACP,GAGRhL,IAAK,WAEJ0K,QAAQM,KAAM,oHAIhBmyG,YAAa,CACZh3H,IAAK,WAGJ,OADAukB,QAAQM,KAAM,kGACP,GAGRhL,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,iGACd5lB,KAAK85E,gBAA6B,IAAVr6E,EAAmBwvB,GAAeD,KAI5DgpG,sBAAuB,CACtBj3H,IAAK,WAGJ,OADAukB,QAAQM,KAAM,iEACP,GAGRhL,IAAK,WAEJ0K,QAAQM,KAAM,qEAOjB/mB,OAAOob,iBAAkB6oE,GAAe3jF,UAAW,CAElDisF,SAAU,CACTrqF,IAAK,WAEJukB,QAAQM,KAAM,gGAIfhL,IAAK,WAEJ0K,QAAQM,KAAM,iGAIhBqyG,mBAAoB,CACnBl3H,IAAK,WAEJukB,QAAQM,KAAM,0GAIfhL,IAAK,WAEJ0K,QAAQM,KAAM,2GAIhBsyG,kBAAmB,CAClBn3H,IAAK,WAEJukB,QAAQM,KAAM,yGAIfhL,IAAK,WAEJ0K,QAAQM,KAAM,4GASjB/mB,OAAOob,iBAAkB2jB,GAAkBz+B,UAAW,CAErD+6B,MAAO,CACNn5B,IAAK,WAGJ,OADAukB,QAAQM,KAAM,0DACP5lB,KAAKi+B,QAAQ/D,OAGrBtf,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,0DACd5lB,KAAKi+B,QAAQ/D,MAAQz6B,IAIvB06B,MAAO,CACNp5B,IAAK,WAGJ,OADAukB,QAAQM,KAAM,0DACP5lB,KAAKi+B,QAAQ9D,OAGrBvf,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,0DACd5lB,KAAKi+B,QAAQ9D,MAAQ16B,IAIvB26B,UAAW,CACVr5B,IAAK,WAGJ,OADAukB,QAAQM,KAAM,kEACP5lB,KAAKi+B,QAAQ7D,WAGrBxf,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,kEACd5lB,KAAKi+B,QAAQ7D,UAAY36B,IAI3B46B,UAAW,CACVt5B,IAAK,WAGJ,OADAukB,QAAQM,KAAM,kEACP5lB,KAAKi+B,QAAQ5D,WAGrBzf,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,kEACd5lB,KAAKi+B,QAAQ5D,UAAY56B,IAI3B86B,WAAY,CACXx5B,IAAK,WAGJ,OADAukB,QAAQM,KAAM,oEACP5lB,KAAKi+B,QAAQ1D,YAGrB3f,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,oEACd5lB,KAAKi+B,QAAQ1D,WAAa96B,IAI5Bge,OAAQ,CACP1c,IAAK,WAGJ,OADAukB,QAAQM,KAAM,4DACP5lB,KAAKi+B,QAAQxgB,QAGrB7C,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,4DACd5lB,KAAKi+B,QAAQxgB,OAAShe,IAIxBse,OAAQ,CACPhd,IAAK,WAGJ,OADAukB,QAAQM,KAAM,4DACP5lB,KAAKi+B,QAAQlgB,QAGrBnD,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,4DACd5lB,KAAKi+B,QAAQlgB,OAASte,IAIxB66B,OAAQ,CACPv5B,IAAK,WAGJ,OADAukB,QAAQM,KAAM,4DACP5lB,KAAKi+B,QAAQ3D,QAGrB1f,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,4DACd5lB,KAAKi+B,QAAQ3D,OAAS76B,IAIxBwmB,KAAM,CACLllB,IAAK,WAGJ,OADAukB,QAAQM,KAAM,wDACP5lB,KAAKi+B,QAAQhY,MAGrBrL,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,wDACd5lB,KAAKi+B,QAAQhY,KAAOxmB,IAItBo7B,gBAAiB,CAChB95B,IAAK,WAGJ,OADAukB,QAAQM,KAAM,8EACP5lB,KAAKi+B,QAAQpD,iBAGrBjgB,IAAK,SAAWnb,GAEf6lB,QAAQM,KAAM,8EACd5lB,KAAKi+B,QAAQpD,gBAAkBp7B,MASlCivD,GAAWvvD,UAAUg5H,cAAgB,SAAWhpE,EAAUC,GAGzD,OADA9pC,QAAQM,KAAM,wDACP5lB,KAAKipB,OAAQkmC,EAAUC,IAI/BV,GAAWvvD,UAAUixD,MAAQ,SAAWjB,EAAUvS,EAAO/e,EAAOsyB,GAG/D,OADA7qC,QAAQM,KAAM,4DACP5lB,KAAK2uD,aAAayB,MAAOjB,EAAUvS,EAAO/e,EAAOsyB,IAIzDn3B,GAAWi+E,iBAAc10G,EAEzBy2B,GAAWy/E,YAAc,SAAWzzG,EAAKg1B,EAAS67E,EAAQE,GAEzDzwF,QAAQM,KAAM,wFAEd,IAAMgxF,EAAS,IAAI0C,GACnB1C,EAAOuC,eAAgBn5G,KAAKi3G,aAE5B,IAAMh5E,EAAU24E,EAAOQ,KAAMpyG,EAAK6wG,OAAQtzG,EAAWwzG,GAIrD,OAFK/7E,IAAUiE,EAAQjE,QAAUA,GAE1BiE,GAIRjF,GAAWo/F,gBAAkB,SAAWlf,EAAMl/E,EAAS67E,EAAQE,GAE9DzwF,QAAQM,KAAM,gGAEd,IAAMgxF,EAAS,IAAIqC,GACnBrC,EAAOuC,eAAgBn5G,KAAKi3G,aAE5B,IAAMh5E,EAAU24E,EAAOQ,KAAM8B,EAAMrD,OAAQtzG,EAAWwzG,GAItD,OAFK/7E,IAAUiE,EAAQjE,QAAUA,GAE1BiE,GAIRjF,GAAWq/F,sBAAwB,WAElC/yG,QAAQxjB,MAAO,0FAIhBk3B,GAAWs/F,0BAA4B,WAEtChzG,QAAQxjB,MAAO,8FAImB,qBAAvBqkG,oBAGXA,mBAAmBrqE,cAAe,IAAIsqE,YAAa,WAAY,CAAEC,OAAQ,CACxEkyB,SAlhmCe,UAwhmCM,qBAAXluH,SAENA,OAAOmuH,UAEXlzG,QAAQM,KAAM,2DAIdvb,OAAOmuH,UAhimCQ,OAsimCjB,IAAMC,GAAe,IAAIxlE,QAEnBylE,G,kDAEL,WAAa1hB,GAAU,kCAEtB,cAAOA,IAEF2hB,YAAc,GACnB,EAAKC,cAAgB,GACrB,EAAKC,cAAgB,KACrB,EAAKC,eAAiB,KAEtB,EAAKC,YAAc,EACnB,EAAKC,WAAa,GAClB,EAAKC,iBAAmB,EACxB,EAAKC,gBAAkB,GAEvB,EAAKC,oBAAsB,CAC1BhqF,SAAU,WACV7K,OAAQ,SACRsY,MAAO,QACP7gB,GAAI,aAEL,EAAKq9F,sBAAwB,CAC5BjqF,SAAU,eACV7K,OAAQ,eACRsY,MAAO,eACP7gB,GAAI,gBAxBiB,E,kDA6BvB,SAAgBh3B,GAIf,OAFA/E,KAAK24H,YAAc5zH,EAEZ/E,O,8BAIR,SAAkB8hB,GAIjB,OAFA9hB,KAAK44H,cAAgB92G,EAEd9hB,O,4BAIR,SAAgB+4H,GAIf,OAFA/4H,KAAK+4H,YAAcA,EAEZ/4H,O,kBAIR,SAAMgF,EAAK6wG,EAAQC,EAAYC,GAAU,WAElCa,EAAS,IAAIU,GAAYt3G,KAAKg3G,SAEpCJ,EAAOyB,QAASr4G,KAAK+E,MACrB6xG,EAAO0B,gBAAiB,eACxB1B,EAAOjzF,iBAAkB3jB,KAAKm3G,eAC9BP,EAAO2B,mBAAoBv4G,KAAKyjB,iBAEhCmzF,EAAOQ,KAAMpyG,GAAK,SAAEwE,GAEnB,IAAM6vH,EAAa,CAClBC,aAAc,EAAKH,oBACnBI,eAAgB,EAAKH,sBACrBI,cAAc,GAGf,EAAKC,eAAgBjwH,EAAQ6vH,GAC3Bp3H,KAAM4zG,GACNkG,MAAOhG,KAEPD,EAAYC,K,6BAKhB,SAAiBvsG,EAAQqF,EAAUyqH,EAAcC,GAEhD,IAAMF,EAAa,CAClBC,aAAcA,GAAgBt5H,KAAKm5H,oBACnCI,eAAgBA,GAAkBv5H,KAAKo5H,sBACvCI,eAAiBF,GAGlBt5H,KAAKy5H,eAAgBjwH,EAAQ6vH,GAAap3H,KAAM4M,K,4BAIjD,SAAgBrF,EAAQ6vH,GAAa,WAKpC,IAAM,IAAM7yG,KAAa6yG,EAAWE,eAAiB,CAEpD,IAAMtzG,EAAOozG,EAAWE,eAAgB/yG,QAERjkB,IAA3B0jB,EAAKiuC,oBAETmlE,EAAWE,eAAgB/yG,GAAcP,EAAKzhB,MAQhD,IA+BIk1H,EA/BEC,EAAU16G,KAAKC,UAAWm6G,GAIhC,GAAKZ,GAAajwG,IAAKhf,GAAW,CAEjC,IAAMowH,EAAanB,GAAa13H,IAAKyI,GAErC,GAAKowH,EAAW76H,MAAQ46H,EAEvB,OAAOC,EAAW51G,QAEZ,GAA2B,IAAtBxa,EAAOqwH,WAMlB,MAAM,IAAIruH,MAET,iHAYH,IAAMsuH,EAAS95H,KAAKi5H,mBACdc,EAAWvwH,EAAOqwH,WAIlBG,EAAkBh6H,KAAKi6H,WAAYH,EAAQC,GAC/C93H,MAAM,SAAEi4H,GAIR,OAFAR,EAASQ,EAEF,IAAIl4H,SAAS,SAAER,EAASC,GAE9Bi4H,EAAOS,WAAYL,GAAW,CAAEt4H,UAASC,UAEzCi4H,EAAOU,YAAa,CAAEn0G,KAAM,SAAU+tB,GAAI8lF,EAAQT,aAAY7vH,UAAU,CAAEA,UAO3EvH,MAAM,SAAEsJ,GAAF,OAAe,EAAK8uH,gBAAiB9uH,EAAQg7B,aA0BrD,OAtBAyzF,EACEje,OAAO,kBAAM,KACb95G,MAAM,WAEDy3H,GAAUI,GAEd,EAAKQ,aAAcZ,EAAQI,MAS9BrB,GAAa79G,IAAKpR,EAAQ,CAEzBzK,IAAK46H,EACL31G,QAASg2G,IAIHA,I,6BAIR,SAAiBO,GAEhB,IAAMh0F,EAAW,IAAIwd,GAEhBw2E,EAAa1uH,OAEjB06B,EAAS0hB,SAAU,IAAI7F,GAAiBm4E,EAAa1uH,MAAM8jB,MAAO,IAInE,IAAM,IAAIpxB,EAAI,EAAGA,EAAIg8H,EAAa9wG,WAAWjrB,OAAQD,IAAO,CAE3D,IAAMioB,EAAY+zG,EAAa9wG,WAAYlrB,GACrCiG,EAAOgiB,EAAUhiB,KACjBmrB,EAAQnJ,EAAUmJ,MAClB0yB,EAAW77B,EAAU67B,SAE3B9b,EAASte,aAAczjB,EAAM,IAAI49C,GAAiBzyB,EAAO0yB,IAI1D,OAAO9b,I,0BAIR,SAAcvhC,EAAKie,GAElB,IAAM2zF,EAAS,IAAIU,GAAYt3G,KAAKg3G,SAKpC,OAJAJ,EAAOyB,QAASr4G,KAAK24H,aACrB/hB,EAAO0B,gBAAiBr1F,GACxB2zF,EAAO2B,mBAAoBv4G,KAAKyjB,iBAEzB,IAAIzhB,SAAS,SAAER,EAASC,GAE9Bm1G,EAAOQ,KAAMpyG,EAAKxD,OAASe,EAAWd,Q,qBAMxC,WAIC,OAFAzB,KAAKw6H,eAEEx6H,O,0BAIR,WAAe,WAEd,GAAKA,KAAK84H,eAAiB,OAAO94H,KAAK84H,eAEvC,IAAM2B,EAA+B,kBAAhBC,aAAwD,OAA5B16H,KAAK44H,cAAc3yG,KAC9D00G,EAAmB,GAsCzB,OApCKF,EAEJE,EAAiBx2H,KAAMnE,KAAK46H,aAAc,mBAAoB,UAI9DD,EAAiBx2H,KAAMnE,KAAK46H,aAAc,wBAAyB,SACnED,EAAiBx2H,KAAMnE,KAAK46H,aAAc,qBAAsB,iBAIjE56H,KAAK84H,eAAiB92H,QAAQ64H,IAAKF,GACjC14H,MAAM,SAAE64H,GAER,IAAMC,EAAYD,EAAW,GAEtBL,IAEN,EAAK7B,cAAcoC,WAAaF,EAAW,IAI5C,IAAM34H,EAAK84H,GAAYxyH,WAEjByyH,EAAO,CACZ,sBACAH,EACA,GACA,eACA54H,EAAGyR,UAAWzR,EAAGqL,QAAS,KAAQ,EAAGrL,EAAGmS,YAAa,OACpDxH,KAAM,MAER,EAAKosH,gBAAkBiC,IAAIC,gBAAiB,IAAIvjB,KAAM,CAAEqjB,QAInDl7H,KAAK84H,iB,wBAIb,SAAYgB,EAAQC,GAAW,WAE9B,OAAO/5H,KAAKw6H,eAAev4H,MAAM,WAEhC,GAAK,EAAK+2H,WAAWx6H,OAAS,EAAKu6H,YAAc,CAEhD,IAAMW,EAAS,IAAI2B,OAAQ,EAAKnC,iBAEhCQ,EAAOS,WAAa,GACpBT,EAAO4B,WAAa,GACpB5B,EAAO6B,UAAY,EAEnB7B,EAAOU,YAAa,CAAEn0G,KAAM,OAAQ2yG,cAAe,EAAKA,gBAExDc,EAAO8B,UAAY,SAAWp4H,GAE7B,IAAMmI,EAAUnI,EAAEub,KAElB,OAASpT,EAAQ0a,MAEhB,IAAK,SACJyzG,EAAOS,WAAY5uH,EAAQyoC,IAAKxyC,QAAS+J,GACzC,MAED,IAAK,QACJmuH,EAAOS,WAAY5uH,EAAQyoC,IAAKvyC,OAAQ8J,GACxC,MAED,QACC+Z,QAAQxjB,MAAO,2CAA6CyJ,EAAQ0a,KAAO,OAM9E,EAAK+yG,WAAW70H,KAAMu1H,QAItB,EAAKV,WAAW/sD,MAAM,SAAWthE,EAAGC,GAEnC,OAAOD,EAAE4wH,UAAY3wH,EAAE2wH,WAAc,EAAI,KAM3C,IAAM7B,EAAS,EAAKV,WAAY,EAAKA,WAAWx6H,OAAS,GAGzD,OAFAk7H,EAAO4B,WAAYxB,GAAWC,EAC9BL,EAAO6B,WAAaxB,EACbL,O,0BAMT,SAAcA,EAAQI,GAErBJ,EAAO6B,WAAa7B,EAAO4B,WAAYxB,UAChCJ,EAAOS,WAAYL,UACnBJ,EAAO4B,WAAYxB,K,mBAI3B,WAECx0G,QAAQwL,IAAK,cAAe9wB,KAAKg5H,WAAWzjH,KAAK,SAAEmkH,GAAF,OAAcA,EAAO6B,gB,qBAIvE,WAEC,IAAM,IAAIh9H,EAAI,EAAGA,EAAIyB,KAAKg5H,WAAWx6H,SAAWD,EAE/CyB,KAAKg5H,WAAYz6H,GAAIk9H,YAMtB,OAFAz7H,KAAKg5H,WAAWx6H,OAAS,EAElBwB,S,GAlXiB+2G,IA0X1B,SAASkkB,KAER,IAAIrC,EACAE,EA6JJ,SAAS4C,EAAiBC,EAAOC,EAASC,EAAeC,EAAeC,EAAev1G,GAEtF,IAAMw1G,EAAgBx1G,EAAUy1G,iBAE1BC,EADYL,EAAcM,aACFH,EACxBnC,EAAaqC,EAAYH,EAAc7nE,kBACvCkoE,EAeP,SAA2BT,EAAOI,GAEjC,OAASA,GAER,KAAKx4E,aAAc,OAAOo4E,EAAMU,WAChC,KAAKroE,UAAW,OAAO2nE,EAAMW,QAC7B,KAAKxoE,WAAY,OAAO6nE,EAAMY,SAC9B,KAAKxoE,WAAY,OAAO4nE,EAAMa,SAC9B,KAAKvoE,WAAY,OAAO0nE,EAAMc,SAC9B,KAAKt5E,YAAa,OAAOw4E,EAAMe,UAC/B,KAAKr5E,YAAa,OAAOs4E,EAAMgB,WAzBfC,CAAkBjB,EAAOI,GAEpCc,EAAMlB,EAAMmB,QAASjD,GAC3B+B,EAAQmB,kCAAmClB,EAAer1G,EAAW41G,EAAUvC,EAAYgD,GAC3F,IAAMltG,EAAQ,IAAIosG,EAAeJ,EAAMqB,QAAQxzH,OAAQqzH,EAAKX,GAAYzxH,QAGxE,OAFAkxH,EAAMsB,MAAOJ,GAEN,CACNr4H,KAAMs3H,EACNnsG,MAAOA,EACP0yB,SAAU25E,GA3KZR,UAAY,SAAWp4H,GAEtB,IAAMmI,EAAUnI,EAAEub,KAElB,OAASpT,EAAQ0a,MAEhB,IAAK,OACJ2yG,EAAgBrtH,EAAQqtH,cACxBE,EAAiB,IAAI92H,SAAS,SAAWR,GAExCo3H,EAAcsE,eAAiB,SAAWvB,GAGzCn6H,EAAS,CAAEm6H,MAAOA,KAInBwB,mBAAoBvE,MAGrB,MAED,IAAK,SACJ,IAAMpvH,EAAS+B,EAAQ/B,OACjB6vH,EAAa9tH,EAAQ8tH,WAC3BP,EAAe72H,MAAM,SAAEvB,GAEtB,IAAMi7H,EAAQj7H,EAAOi7H,MACfC,EAAU,IAAID,EAAMyB,QACpBC,EAAgB,IAAI1B,EAAM2B,cAChCD,EAAcE,KAAM,IAAIvpE,UAAWxqD,GAAUA,EAAOqwH,YAEpD,IAEC,IAAMtzF,EA4BX,SAAyBo1F,EAAOC,EAASyB,EAAehE,GAEvD,IAGIwC,EACA2B,EAJElE,EAAeD,EAAWC,aAC1BC,EAAiBF,EAAWE,eAK5BkE,EAAe7B,EAAQ8B,uBAAwBL,GAErD,GAAKI,IAAiB9B,EAAMgC,gBAE3B9B,EAAgB,IAAIF,EAAMxyE,KAC1Bq0E,EAAiB5B,EAAQgC,mBAAoBP,EAAexB,OAEtD,IAAK4B,IAAiB9B,EAAMkC,YAOlC,MAAM,IAAIryH,MAAO,gDALjBqwH,EAAgB,IAAIF,EAAMmC,WAC1BN,EAAiB5B,EAAQmC,yBAA0BV,EAAexB,GAQnE,IAAO2B,EAAe/rH,MAA8B,IAAtBoqH,EAAcgB,IAE3C,MAAM,IAAIrxH,MAAO,uCAAyCgyH,EAAeQ,aAI1E,IAAMz3F,EAAW,CAAE16B,MAAO,KAAM4d,WAAY,IAG5C,IAAM,IAAMqyG,KAAiBxC,EAAe,CAE3C,IAAMyC,EAAgB35H,KAAMm3H,EAAgBuC,IAExCt1G,OAAS,EACTy3G,OAAW,EAMf,GAAK5E,EAAWG,aAEfyE,EAAc3E,EAAcwC,GAC5Bt1G,EAAYo1G,EAAQsC,uBAAwBrC,EAAeoC,OAErD,CAIN,IAAuB,KAFvBA,EAAcrC,EAAQuC,eAAgBtC,EAAeF,EAAOrC,EAAcwC,MAE/C,SAE3Bt1G,EAAYo1G,EAAQwC,aAAcvC,EAAeoC,GAIlD13F,EAAS9c,WAAWtlB,KAAMu3H,EAAiBC,EAAOC,EAASC,EAAeC,EAAeC,EAAev1G,IAKpGi3G,IAAiB9B,EAAMgC,kBAE3Bp3F,EAAS16B,MAUX,SAAsB8vH,EAAOC,EAASC,GAErC,IACMwC,EAAwB,EADbxC,EAAcyC,YAEzBzE,EAA0B,EAAbwE,EAEbxB,EAAMlB,EAAMmB,QAASjD,GAC3B+B,EAAQ2C,wBAAyB1C,EAAehC,EAAYgD,GAC5D,IAAMhxH,EAAQ,IAAIw3C,YAAas4E,EAAMqB,QAAQxzH,OAAQqzH,EAAKwB,GAAa5zH,QAGvE,OAFAkxH,EAAMsB,MAAOJ,GAEN,CAAEltG,MAAO9jB,EAAOw2C,SAAU,GArBfm8E,CAAa7C,EAAOC,EAASC,IAM/C,OAFAF,EAAMpgD,QAASsgD,GAERt1F,EAtGckzF,CAAgBkC,EAAOC,EAASyB,EAAehE,GAE1DrmE,EAAUzsB,EAAS9c,WAAWlU,KAAK,SAAEqS,GAAF,OAAYA,EAAK+H,MAAMnmB,UAE3D+8B,EAAS16B,OAAQmnD,EAAQ7uD,KAAMoiC,EAAS16B,MAAM8jB,MAAMnmB,QAEzDpH,KAAKg4H,YAAa,CAAEn0G,KAAM,SAAU+tB,GAAIzoC,EAAQyoC,GAAIzN,YAAYysB,GAE/D,MAAQlxD,GAETwjB,QAAQxjB,MAAOA,GAEfM,KAAKg4H,YAAa,CAAEn0G,KAAM,QAAS+tB,GAAIzoC,EAAQyoC,GAAIlyC,MAAOA,EAAMyJ,UAdjE,QAkBCowH,EAAMpgD,QAAS8hD,GACf1B,EAAMpgD,QAASqgD,S,IA+If6C,G,kDAEL,WAAaznB,GAAU,kCAEtB,cAAOA,IAEF0nB,YAAc,KACnB,EAAKC,WAAa,KAClB,EAAKC,eAAiB,KAEtB,EAAKC,gBAAkB,GAEvB,EAAKC,UAAU,SAAWhnB,GAEzB,OAAO,IAAIinB,GAAiCjnB,MAI7C,EAAKgnB,UAAU,SAAWhnB,GAEzB,OAAO,IAAIknB,GAA4BlnB,MAIxC,EAAKgnB,UAAU,SAAWhnB,GAEzB,OAAO,IAAImnB,GAA0BnnB,MAItC,EAAKgnB,UAAU,SAAWhnB,GAEzB,OAAO,IAAIonB,GAAoCpnB,MAIhD,EAAKgnB,UAAU,SAAWhnB,GAEzB,OAAO,IAAIqnB,GAAqBrnB,MAIjC,EAAKgnB,UAAU,SAAWhnB,GAEzB,OAAO,IAAIsnB,GAAwBtnB,MA1Cd,E,wCAgDvB,SAAM9yG,EAAK6wG,EAAQC,EAAYC,GAE9B,IAEImB,EAFEvsD,EAAQ3qD,KAMbk3G,EAF0B,KAAtBl3G,KAAKk3G,aAEMl3G,KAAKk3G,aAEK,KAAdl3G,KAAK+E,KAED/E,KAAK+E,KAILo2G,GAAYgW,eAAgBnsH,GAO5ChF,KAAKg3G,QAAQX,UAAWrxG,GAExB,IAAMq6H,EAAW,SAAWj8H,GAEtB2yG,EAEJA,EAAS3yG,GAITkiB,QAAQxjB,MAAOsB,GAIhBunD,EAAMqsD,QAAQT,UAAWvxG,GACzB2lD,EAAMqsD,QAAQV,QAAStxG,IAIlB4xG,EAAS,IAAIU,GAAYt3G,KAAKg3G,SAEpCJ,EAAOyB,QAASr4G,KAAK+E,MACrB6xG,EAAO0B,gBAAiB,eACxB1B,EAAOjzF,iBAAkB3jB,KAAKm3G,eAC9BP,EAAO2B,mBAAoBv4G,KAAKyjB,iBAEhCmzF,EAAOQ,KAAMpyG,GAAK,SAAW2Z,GAE5B,IAECgsC,EAAM/tC,MAAO+B,EAAMu4F,GAAc,SAAWooB,GAE3CzpB,EAAQypB,GAER30E,EAAMqsD,QAAQV,QAAStxG,KAErBq6H,GAEF,MAAQj8H,IAETi8H,EAAUj8H,OAIT0yG,EAAYupB,K,4BAIhB,SAAgBX,GAGf,OADA1+H,KAAK0+H,YAAcA,EACZ1+H,O,0BAIR,WAEC,MAAM,IAAIwL,MAET,sG,2BAMF,SAAemzH,GAGd,OADA3+H,KAAK2+H,WAAaA,EACX3+H,O,+BAIR,SAAmB4+H,GAGlB,OADA5+H,KAAK4+H,eAAiBA,EACf5+H,O,sBAIR,SAAU6O,GAQT,OANoD,IAA/C7O,KAAK6+H,gBAAgBrxH,QAASqB,IAElC7O,KAAK6+H,gBAAgB16H,KAAM0K,GAIrB7O,O,wBAIR,SAAY6O,GAQX,OANoD,IAA/C7O,KAAK6+H,gBAAgBrxH,QAASqB,IAElC7O,KAAK6+H,gBAAgBlpH,OAAQ3V,KAAK6+H,gBAAgBrxH,QAASqB,GAAY,GAIjE7O,O,mBAIR,SAAO2e,EAAM5Z,EAAM8wG,EAAQE,GAE1B,IAAI7qG,EACEshD,EAAa,GACb+yE,EAAU,GAEhB,GAAqB,kBAAT5gH,EAEXzT,EAAUyT,OAMV,GAFcw8F,GAAYqkB,WAAY,IAAIvrE,WAAYt1C,EAAM,EAAG,MAEhD8gH,GAAgC,CAE9C,IAECjzE,EAAYkzE,GAAWC,iBAAoB,IAAIC,GAAqBjhH,GAEnE,MAAQ7c,GAGT,YADKi0G,GAAUA,EAASj0G,IAKzBoJ,EAAUshD,EAAYkzE,GAAWC,iBAAkBz0H,aAInDA,EAAUiwG,GAAYqkB,WAAY,IAAIvrE,WAAYt1C,IAMpD,IAAM8pF,EAAOxpF,KAAKrC,MAAO1R,GAEzB,QAAoB3I,IAAfkmG,EAAKo3B,OAAuBp3B,EAAKo3B,MAAM5kG,QAAS,GAAM,EAErD86E,GAAUA,EAAS,IAAIvqG,MAAO,gFAFpC,CAOA,IAAMssG,EAAS,IAAIgoB,GAAYr3B,EAAM,CAEpC1jG,KAAMA,GAAQ/E,KAAKk3G,cAAgB,GACnCD,YAAaj3G,KAAKi3G,YAClBE,cAAen3G,KAAKm3G,cACpBH,QAASh3G,KAAKg3G,QACd2nB,WAAY3+H,KAAK2+H,WACjBC,eAAgB5+H,KAAK4+H,iBAItB9mB,EAAOioB,WAAWp8G,iBAAkB3jB,KAAKm3G,eAEzC,IAAM,IAAI54G,EAAI,EAAGA,EAAIyB,KAAK6+H,gBAAgBrgI,OAAQD,IAAO,CAExD,IAAMyhI,EAAShgI,KAAK6+H,gBAAiBtgI,GAAKu5G,GAC1CynB,EAASS,EAAOx7H,MAASw7H,EAMzBxzE,EAAYwzE,EAAOx7H,OAAS,EAI7B,GAAKikG,EAAKw3B,eAET,IAAM,IAAI1hI,EAAI,EAAGA,EAAIkqG,EAAKw3B,eAAezhI,SAAWD,EAAI,CAEvD,IAAM2hI,EAAgBz3B,EAAKw3B,eAAgB1hI,GACrC4hI,EAAqB13B,EAAK03B,oBAAsB,GAEtD,OAASD,GAER,KAAKR,GAAWU,oBACf5zE,EAAY0zE,GAAkB,IAAIG,GAClC,MAED,KAAKX,GAAWY,sCACf9zE,EAAY0zE,GAAkB,IAAIK,GAClC,MAED,KAAKb,GAAWc,2BACfh0E,EAAY0zE,GAAkB,IAAIO,GAAmCh4B,EAAMzoG,KAAK0+H,aAChF,MAED,KAAKgB,GAAWgB,sBACfl0E,EAAY0zE,GAAkB,IAAIS,GAClC,MAED,KAAKjB,GAAWkB,sBACfp0E,EAAY0zE,GAAkB,IAAIW,GAClC,MAED,QAEMV,EAAmB3yH,QAAS0yH,IAAmB,QAAkC39H,IAA7Bg9H,EAASW,IAEjE56G,QAAQM,KAAM,wCAA0Cs6G,EAAgB,OAU7EpoB,EAAOgpB,cAAet0E,GACtBsrD,EAAOipB,WAAYxB,GACnBznB,EAAOl7F,MAAOi5F,EAAQE,Q,GArSCgB,IA6SzB,SAASiqB,KAER,IAAI//D,EAAU,GAEd,MAAO,CAENlgE,IAAK,SAAWhC,GAEf,OAAOkiE,EAASliE,IAIjBgnC,IAAK,SAAWhnC,EAAKkC,GAEpBggE,EAASliE,GAAQkC,GAIlB8yC,OAAQ,SAAWh1C,UAEXkiE,EAASliE,IAIjBkiI,UAAW,WAEVhgE,EAAU,KAYb,IAAMy+D,GAAa,CAClBC,gBAAiB,kBACjBa,2BAA4B,6BAC5BU,oBAAqB,sBACrBC,wBAAyB,0BACzBb,sCAAuC,sCACvCc,2BAA4B,6BAC5BhB,oBAAqB,sBACrBiB,mBAAoB,qBACpBX,sBAAuB,wBACvBE,sBAAuB,wBACvBU,iBAAkB,mBAClBC,wBAAyB,2BAQpBpC,G,WAEL,WAAarnB,GAAS,oBAErB93G,KAAK83G,OAASA,EACd93G,KAAKwE,KAAOk7H,GAAWwB,oBAGvBlhI,KAAKkG,MAAQ,CAAEs7H,KAAM,GAAIC,KAAM,I,6CAIhC,WAKC,IAHA,IAAM3pB,EAAS93G,KAAK83G,OACd4pB,EAAW1hI,KAAK83G,OAAOrP,KAAKk5B,OAAS,GAEjCC,EAAY,EAAGC,EAAaH,EAASljI,OAAQojI,EAAYC,EAAYD,IAAe,CAE7F,IAAME,EAAUJ,EAAUE,GAErBE,EAAQt1E,YACRs1E,EAAQt1E,WAAYxsD,KAAKwE,YACiBjC,IAA1Cu/H,EAAQt1E,WAAYxsD,KAAKwE,MAAOy6E,OAEpC64B,EAAOiqB,YAAa/hI,KAAKkG,MAAO47H,EAAQt1E,WAAYxsD,KAAKwE,MAAOy6E,U,wBAQnE,SAAY+iD,GAEX,IAAMlqB,EAAS93G,KAAK83G,OACdnxG,EAAW,SAAWq7H,EACxBC,EAAanqB,EAAO5xG,MAAMnF,IAAK4F,GAEnC,GAAKs7H,EAAa,OAAOA,EAEzB,IAIIC,EAJEz5B,EAAOqP,EAAOrP,KAGd05B,IAFe15B,EAAKj8C,YAAci8C,EAAKj8C,WAAYxsD,KAAKwE,OAAY,IAC7C8nD,QAAU,IACX01E,GAGtBplF,EAAQ,IAAI0D,GAAO,eAED/9C,IAAnB4/H,EAASvlF,OAAsBA,EAAM9jB,UAAWqpG,EAASvlF,OAE9D,IAAMrqB,OAA2BhwB,IAAnB4/H,EAAS5vG,MAAsB4vG,EAAS5vG,MAAQ,EAE9D,OAAS4vG,EAASl8G,MAEjB,IAAK,eACJi8G,EAAY,IAAIhnB,GAAkBt+D,IACxBv+C,OAAO8wC,SAASv0B,IAAK,EAAG,GAAK,GACvCsnH,EAAUn8F,IAAKm8F,EAAU7jI,QACzB,MAED,IAAK,SACJ6jI,EAAY,IAAIvnB,GAAY/9D,IAClBrJ,SAAWhhB,EACrB,MAED,IAAK,QACJ2vG,EAAY,IAAI9nB,GAAWx9D,IACjBrJ,SAAWhhB,EAErB4vG,EAAS7kD,KAAO6kD,EAAS7kD,MAAQ,GACjC6kD,EAAS7kD,KAAK8kD,oBAAkD7/H,IAAjC4/H,EAAS7kD,KAAK8kD,eAA+BD,EAAS7kD,KAAK8kD,eAAiB,EAC3GD,EAAS7kD,KAAK+kD,oBAAkD9/H,IAAjC4/H,EAAS7kD,KAAK+kD,eAA+BF,EAAS7kD,KAAK+kD,eAAiBvxH,KAAKif,GAAK,EACrHmyG,EAAU5tG,MAAQ6tG,EAAS7kD,KAAK+kD,eAChCH,EAAU3gD,SAAW,EAAM4gD,EAAS7kD,KAAK8kD,eAAiBD,EAAS7kD,KAAK+kD,eACxEH,EAAU7jI,OAAO8wC,SAASv0B,IAAK,EAAG,GAAK,GACvCsnH,EAAUn8F,IAAKm8F,EAAU7jI,QACzB,MAED,QACC,MAAM,IAAImN,MAAO,4CAA8C22H,EAASl8G,MAkB1E,OAZAi8G,EAAU/yF,SAASv0B,IAAK,EAAG,EAAG,GAE9BsnH,EAAUpjE,MAAQ,OAEUv8D,IAAvB4/H,EAASvhD,YAA0BshD,EAAUthD,UAAYuhD,EAASvhD,WAEvEshD,EAAU19H,KAAOszG,EAAOwqB,iBAAkBH,EAAS39H,MAAU,SAAWw9H,GAExEC,EAAajgI,QAAQR,QAAS0gI,GAE9BpqB,EAAO5xG,MAAM6/B,IAAKp/B,EAAUs7H,GAErBA,I,kCAIR,SAAsBL,GAErB,IAAMx/H,EAAOpC,KACP83G,EAAS93G,KAAK83G,OAEdgqB,EADOhqB,EAAOrP,KACCk5B,MAAOC,GAEtBI,GADaF,EAAQt1E,YAAcs1E,EAAQt1E,WAAYxsD,KAAKwE,OAAY,IAClDy6E,MAE5B,YAAoB18E,IAAfy/H,EAAkC,KAEhChiI,KAAKuiI,WAAYP,GAAa//H,MAAM,SAAWg9E,GAErD,OAAO64B,EAAO0qB,YAAapgI,EAAK8D,MAAO87H,EAAY/iD,U,KAahDohD,G,WAEL,aAAc,oBAEbrgI,KAAKwE,KAAOk7H,GAAWU,oB,mDAIxB,WAEC,OAAOp+E,K,0BAIR,SAAcygF,EAAgBC,EAAa5qB,GAE1C,IAAMgP,EAAU,GAEhB2b,EAAe7lF,MAAQ,IAAI0D,GAAO,EAAK,EAAK,GAC5CmiF,EAAevoF,QAAU,EAEzB,IAAMyoF,EAAoBD,EAAYE,qBAEtC,GAAKD,EAAoB,CAExB,GAAK5/H,MAAMC,QAAS2/H,EAAkBE,iBAAoB,CAEzD,IAAMlzG,EAAQgzG,EAAkBE,gBAEhCJ,EAAe7lF,MAAM9jB,UAAWnJ,GAChC8yG,EAAevoF,QAAUvqB,EAAO,QAIWptB,IAAvCogI,EAAkBG,kBAEtBhc,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,MAAOE,EAAkBG,mBAM/E,OAAO9gI,QAAQ64H,IAAK/T,O,KAWhBiY,G,WAEL,WAAajnB,GAAS,oBAErB93G,KAAK83G,OAASA,EACd93G,KAAKwE,KAAOk7H,GAAWyB,wB,mDAIxB,SAAiB/8E,GAEhB,IACMs+E,EADS1iI,KAAK83G,OACOrP,KAAK/zD,UAAW0P,GAE3C,OAAOs+E,EAAYl2E,YAAgBk2E,EAAYl2E,WAAYxsD,KAAKwE,MAEzD23E,GAFyE,O,kCAMjF,SAAsB/3B,EAAeq+E,GAEpC,IAAM3qB,EAAS93G,KAAK83G,OACd4qB,EAAc5qB,EAAOrP,KAAK/zD,UAAW0P,GAE3C,IAAOs+E,EAAYl2E,aAAgBk2E,EAAYl2E,WAAYxsD,KAAKwE,MAE/D,OAAOxC,QAAQR,UAIhB,IAAMslH,EAAU,GAEV/jD,EAAY2/D,EAAYl2E,WAAYxsD,KAAKwE,MA0B/C,QAxBmCjC,IAA9BwgE,EAAUigE,kBAEdP,EAAeplF,UAAY0lB,EAAUigE,sBAIFzgI,IAA/BwgE,EAAUkgE,kBAEdnc,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,eAAgB1/D,EAAUkgE,wBAInC1gI,IAAvCwgE,EAAUmgE,2BAEdT,EAAenlF,mBAAqBylB,EAAUmgE,+BAIF3gI,IAAxCwgE,EAAUogE,2BAEdrc,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,wBAAyB1/D,EAAUogE,iCAI9C5gI,IAArCwgE,EAAUqgE,yBAEdtc,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,qBAAsB1/D,EAAUqgE,8BAEpC7gI,IAA3CwgE,EAAUqgE,uBAAuBh0F,OAAsB,CAE3D,IAAMA,EAAQ2zB,EAAUqgE,uBAAuBh0F,MAG/CqzF,EAAe/kF,qBAAuB,IAAIhqB,GAAS0b,GAASA,GAM9D,OAAOptC,QAAQ64H,IAAK/T,O,KAYhBoY,G,WAEL,WAAapnB,GAAS,oBAErB93G,KAAK83G,OAASA,EACd93G,KAAKwE,KAAOk7H,GAAW0B,2B,mDAIxB,SAAiBh9E,GAEhB,IACMs+E,EADS1iI,KAAK83G,OACOrP,KAAK/zD,UAAW0P,GAE3C,OAAOs+E,EAAYl2E,YAAgBk2E,EAAYl2E,WAAYxsD,KAAKwE,MAEzD23E,GAFyE,O,kCAMjF,SAAsB/3B,EAAeq+E,GAEpC,IAAM3qB,EAAS93G,KAAK83G,OACd4qB,EAAc5qB,EAAOrP,KAAK/zD,UAAW0P,GAE3C,IAAOs+E,EAAYl2E,aAAgBk2E,EAAYl2E,WAAYxsD,KAAKwE,MAE/D,OAAOxC,QAAQR,UAIhB,IAAMslH,EAAU,GAEV/jD,EAAY2/D,EAAYl2E,WAAYxsD,KAAKwE,MAc/C,YAZsCjC,IAAjCwgE,EAAUsgE,qBAEdZ,EAAe11D,aAAehK,EAAUsgE,yBAIF9gI,IAAlCwgE,EAAUugE,qBAEdxc,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,kBAAmB1/D,EAAUugE,sBAI3EthI,QAAQ64H,IAAK/T,O,KAWhBkY,G,WAEL,WAAalnB,GAAS,oBAErB93G,KAAK83G,OAASA,EACd93G,KAAKwE,KAAOk7H,GAAW2B,mB,+CAIxB,SAAakC,GAEZ,IAAMzrB,EAAS93G,KAAK83G,OACdrP,EAAOqP,EAAOrP,KAEd+6B,EAAa/6B,EAAKntE,SAAUioG,GAElC,IAAOC,EAAWh3E,aAAgBg3E,EAAWh3E,WAAYxsD,KAAKwE,MAE7D,OAAO,KAIR,IAAMu+D,EAAYygE,EAAWh3E,WAAYxsD,KAAKwE,MACxC+D,EAASkgG,EAAK9sE,OAAQonC,EAAUx6D,QAChCquG,EAASkB,EAAOzxG,QAAQs4H,WAE9B,IAAO/nB,EAAS,CAEf,GAAKnO,EAAK03B,oBAAsB13B,EAAK03B,mBAAmB3yH,QAASxN,KAAKwE,OAAU,EAE/E,MAAM,IAAIgH,MAAO,+EAKjB,OAAO,KAMT,OAAOssG,EAAO2rB,iBAAkBF,EAAch7H,EAAQquG,O,KAWlDqoB,G,WAEL,WAAannB,GAAS,oBAErB93G,KAAK83G,OAASA,EACd93G,KAAKwE,KAAOk7H,GAAW4B,iBACvBthI,KAAK0jI,YAAc,K,+CAIpB,SAAaH,GAEZ,IAAM/+H,EAAOxE,KAAKwE,KACZszG,EAAS93G,KAAK83G,OACdrP,EAAOqP,EAAOrP,KAEd+6B,EAAa/6B,EAAKntE,SAAUioG,GAElC,IAAOC,EAAWh3E,aAAgBg3E,EAAWh3E,WAAYhoD,GAExD,OAAO,KAIR,IAAMu+D,EAAYygE,EAAWh3E,WAAYhoD,GACnC+D,EAASkgG,EAAK9sE,OAAQonC,EAAUx6D,QAElCquG,EAASkB,EAAO6rB,cACpB,GAAKp7H,EAAOq7H,IAAM,CAEjB,IAAMnpH,EAAUq9F,EAAOzxG,QAAQ2wG,QAAQF,WAAYvuG,EAAOq7H,KACzC,OAAZnpH,IAAmBm8F,EAASn8F,GAIlC,OAAOza,KAAK6jI,gBAAgB5hI,MAAM,SAAWyhI,GAE5C,GAAKA,EAAc,OAAO5rB,EAAO2rB,iBAAkBF,EAAch7H,EAAQquG,GAEzE,GAAKnO,EAAK03B,oBAAsB13B,EAAK03B,mBAAmB3yH,QAAShJ,IAAU,EAE1E,MAAM,IAAIgH,MAAO,6DAKlB,OAAOssG,EAAOW,YAAa8qB,Q,2BAM7B,WAsBC,OApBOvjI,KAAK0jI,cAEX1jI,KAAK0jI,YAAc,IAAI1hI,SAAS,SAAWR,GAE1C,IAAMy3B,EAAQ,IAAI6qG,MAIlB7qG,EAAMC,IAAM,kFAEZD,EAAM8qG,OAAS9qG,EAAM5V,QAAU,WAE9B7hB,EAA0B,IAAjBy3B,EAAMM,aAQXv5B,KAAK0jI,gB,KAWRtE,G,WAEL,WAAatnB,GAAS,oBAErB93G,KAAKwE,KAAOk7H,GAAW6B,wBACvBvhI,KAAK83G,OAASA,E,kDAIf,SAAgBjsG,GAEf,IAAM48F,EAAOzoG,KAAK83G,OAAOrP,KACnBu7B,EAAav7B,EAAKw7B,YAAap4H,GAErC,GAAKm4H,EAAWx3E,YAAcw3E,EAAWx3E,WAAYxsD,KAAKwE,MAAS,CAElE,IAAM0/H,EAAeF,EAAWx3E,WAAYxsD,KAAKwE,MAE3CgF,EAASxJ,KAAK83G,OAAOqsB,cAAe,SAAUD,EAAa16H,QAC3DoyH,EAAU57H,KAAK83G,OAAOzxG,QAAQu4H,eAEpC,IAAOhD,IAAaA,EAAQwI,UAAY,CAEvC,GAAK37B,EAAK03B,oBAAsB13B,EAAK03B,mBAAmB3yH,QAASxN,KAAKwE,OAAU,EAE/E,MAAM,IAAIgH,MAAO,sFAKjB,OAAO,KAMT,OAAOxJ,QAAQ64H,IAAK,CAAErxH,EAAQoyH,EAAQyI,QAAUpiI,MAAM,SAAWib,GAEhE,IAAMonH,EAAaJ,EAAaI,YAAc,EACxCzK,EAAaqK,EAAarK,YAAc,EAExCr0F,EAAQ0+F,EAAa1+F,MACrBg/B,EAAS0/D,EAAaK,WAEtB1kI,EAAS,IAAIyJ,YAAak8B,EAAQg/B,GAClCj8D,EAAS,IAAI0rD,WAAY/2C,EAAK,GAAKonH,EAAYzK,GAGrD,OADA+B,EAAQ4I,iBAAkB,IAAIvwE,WAAYp0D,GAAU2lC,EAAOg/B,EAAQj8D,EAAQ27H,EAAav9D,KAAMu9D,EAAaj1H,QACpGpP,KAMR,OAAO,S,KASJ4/H,GAAgC,OAEhCgF,GAAuC,WAAvCA,GAAwD,QAExD7E,GAEL,WAAajhH,GAAO,oBAEnB3e,KAAKwE,KAAOk7H,GAAWC,gBACvB3/H,KAAKkL,QAAU,KACflL,KAAKk7H,KAAO,KAEZ,IAAMwJ,EAAa,IAAIt5B,SAAUzsF,EAAM,EAXF,IAmBrC,GANA3e,KAAKi4G,OAAS,CACb0sB,MAAOxpB,GAAYqkB,WAAY,IAAIvrE,WAAYt1C,EAAKlU,MAAO,EAAG,KAC9DwwB,QAASypG,EAAWE,UAAW,GAAG,GAClCpmI,OAAQkmI,EAAWE,UAAW,GAAG,IAG7B5kI,KAAKi4G,OAAO0sB,QAAUlF,GAE1B,MAAM,IAAIj0H,MAAO,qDAEX,GAAKxL,KAAKi4G,OAAOh9E,QAAU,EAEjC,MAAM,IAAIzvB,MAAO,kDAQlB,IAJA,IAAMq5H,EAAsB7kI,KAAKi4G,OAAOz5G,OA7BH,GA8B/BsmI,EAAY,IAAI15B,SAAUzsF,EA9BK,IA+BjComH,EAAa,EAETA,EAAaF,GAAsB,CAE1C,IAAMG,EAAcF,EAAUF,UAAWG,GAAY,GACrDA,GAAc,EAEd,IAAME,EAAYH,EAAUF,UAAWG,GAAY,GAGnD,GAFAA,GAAc,EAETE,IAAcR,GAAoC,CAEtD,IAAMS,EAAe,IAAIjxE,WAAYt1C,EA3CF,GA2CyComH,EAAYC,GACxFhlI,KAAKkL,QAAUiwG,GAAYqkB,WAAY0F,QAEjC,GAAKD,IAAcR,GAAmC,CAE5D,IAAMH,EAhD6B,GAgDiBS,EACpD/kI,KAAKk7H,KAAOv8G,EAAKlU,MAAO65H,EAAYA,EAAaU,GAMlDD,GAAcC,EAIf,GAAsB,OAAjBhlI,KAAKkL,QAET,MAAM,IAAIM,MAAO,8CAadi1H,G,WAEL,WAAah4B,EAAMi2B,GAElB,GAFgC,qBAEzBA,EAEN,MAAM,IAAIlzH,MAAO,uDAIlBxL,KAAKwE,KAAOk7H,GAAWc,2BACvBxgI,KAAKyoG,KAAOA,EACZzoG,KAAK0+H,YAAcA,EACnB1+H,KAAK0+H,YAAYyG,U,mDAIlB,SAAiBC,EAAWttB,GAE3B,IAAMrP,EAAOzoG,KAAKyoG,KACZi2B,EAAc1+H,KAAK0+H,YACnB2G,EAAkBD,EAAU54E,WAAYxsD,KAAKwE,MAAOw/H,WACpDsB,EAAmBF,EAAU54E,WAAYxsD,KAAKwE,MAAOilB,WACrD87G,EAAoB,GACpBC,EAAyB,GACzBC,EAAmB,GAEzB,IAAM,IAAM3J,KAAiBwJ,EAAmB,CAE/C,IAAMI,EAAqBC,GAAY7J,IAAmBA,EAAcvuH,cAExEg4H,EAAmBG,GAAuBJ,EAAkBxJ,GAI7D,IAAM,IAAMA,KAAiBsJ,EAAU37G,WAAa,CAEnD,IAAMi8G,EAAqBC,GAAY7J,IAAmBA,EAAcvuH,cAExE,QAA2ChL,IAAtC+iI,EAAkBxJ,GAAgC,CAEtD,IAAM8J,EAAcn9B,EAAKo9B,UAAWT,EAAU37G,WAAYqyG,IACpDgK,EAAgBC,GAAuBH,EAAYE,eAEzDL,EAAkBC,GAAuBI,EACzCN,EAAwBE,IAAkD,IAA3BE,EAAY9jF,YAM7D,OAAOg2D,EAAOqsB,cAAe,aAAckB,GAAkBpjI,MAAM,SAAW+hI,GAE7E,OAAO,IAAIhiI,SAAS,SAAWR,GAE9Bk9H,EAAYsH,gBAAiBhC,GAAY,SAAWz9F,GAEnD,IAAM,IAAMu1F,KAAiBv1F,EAAS9c,WAAa,CAElD,IAAMjD,EAAY+f,EAAS9c,WAAYqyG,GACjCh6E,EAAa0jF,EAAwB1J,QAEvBv5H,IAAfu/C,IAA2Bt7B,EAAUs7B,WAAaA,GAIxDtgD,EAAS+kC,KAEPg/F,EAAmBE,a,KAepB9E,G,WAEL,aAAc,oBAEb3gI,KAAKwE,KAAOk7H,GAAWgB,sB,iDAIxB,SAAeziG,EAAS82D,GA8BvB,OA5BA92D,EAAUA,EAAQK,aAEQ/7B,IAArBwyF,EAAUt3E,QAEdwgB,EAAQxgB,OAAOqb,UAAWi8D,EAAUt3E,aAITlb,IAAvBwyF,EAAUt8D,WAEdwF,EAAQxF,SAAWs8D,EAAUt8D,eAILl2B,IAApBwyF,EAAU3lD,OAEdnR,EAAQlgB,OAAO+a,UAAWi8D,EAAU3lD,YAIT7sC,IAAvBwyF,EAAUkxC,UAEd3gH,QAAQM,KAAM,wCAA0C5lB,KAAKwE,KAAO,kCAIrEy5B,EAAQomB,aAAc,EAEfpmB,M,KAkBHioG,G,kDAEL,WAAajhI,GAAS,2BAErB,gBAEKkhI,kCAAmC,EAGxC,IAAMC,EAA+B,CACpC,yBACA,mCACA,UACCt5H,KAAM,MAEFu5H,EAAiC,CACtC,2BACA,qCACA,UACCv5H,KAAM,MAEFw5H,EAA2B,CAChC,kCACA,yBACA,wDACA,mDACA,oFACA,yCACA,UACCx5H,KAAM,MAEFy5H,EAA6B,CAClC,uCACA,2BACA,4DACA,kFACA,2CACA,UACCz5H,KAAM,MAEF05H,EAA6B,CAClC,6BACA,0HACA,kFACA,+DACA,8HACA,mDACA,uEACA,4CACC15H,KAAM,MAEFi/C,EAAW,CAChB5O,SAAU,CAAE19C,OAAO,IAAI6gD,IAAQE,OAAQ,WACvCimF,WAAY,CAAEhnI,MAAO,GACrBm/C,YAAa,CAAEn/C,MAAO,MACtBinI,cAAe,CAAEjnI,MAAO,OArDJ,OAwDrB,EAAKknI,eAAiB56E,EAEtB,EAAK1P,gBAAkB,SAAW0T,GAEjC,IAAM,IAAM62E,KAAe76E,EAE1BgE,EAAOhE,SAAU66E,GAAgB76E,EAAU66E,GAI5C72E,EAAO1D,eAAiB0D,EAAO1D,eAC7BrhD,QAAS,2BAA4B,0BACrCA,QAAS,2BAA4B,6BACrCA,QAAS,wCAAyCo7H,GAClDp7H,QAAS,wCAAyCq7H,GAClDr7H,QAAS,mCAAoCs7H,GAC7Ct7H,QAAS,mCAAoCu7H,GAC7Cv7H,QAAS,sCAAuCw7H,IAInD3nI,OAAOob,iBAAPpb,OAAA,IAAAA,CAAA,GAA+B,CAE9Bs+C,SAAU,CACTp8C,IAAK,WAEJ,OAAOgrD,EAAS5O,SAAS19C,OAG1Bmb,IAAK,SAAWoF,GAEf+rC,EAAS5O,SAAS19C,MAAQugB,IAK5B4+B,YAAa,CACZ79C,IAAK,WAEJ,OAAOgrD,EAASnN,YAAYn/C,OAG7Bmb,IAAK,SAAWoF,GAEf+rC,EAASnN,YAAYn/C,MAAQugB,EAExBA,EAEJhgB,KAAKmsD,QAAQ06E,gBAAkB,UAIxB7mI,KAAKmsD,QAAQ06E,kBAOvBJ,WAAY,CACX1lI,IAAK,WAEJ,OAAOgrD,EAAS06E,WAAWhnI,OAG5Bmb,IAAK,SAAWoF,GAEf+rC,EAAS06E,WAAWhnI,MAAQugB,IAK9B0mH,cAAe,CACd3lI,IAAK,WAEJ,OAAOgrD,EAAS26E,cAAcjnI,OAG/Bmb,IAAK,SAAWoF,GAEf+rC,EAAS26E,cAAcjnI,MAAQugB,EAE1BA,GAEJhgB,KAAKmsD,QAAQ26E,kBAAoB,GACjC9mI,KAAKmsD,QAAQ46E,OAAS,YAIf/mI,KAAKmsD,QAAQ26E,yBACb9mI,KAAKmsD,QAAQ46E,mBASjB,EAAKhqF,iBACL,EAAKD,iBACL,EAAK4B,oBACL,EAAKD,aAEZ,EAAKlC,UAAWt3C,GAhKK,E,wCAoKtB,SAAMsD,GAYL,OAVA,4DAAYA,GAEZvI,KAAK4+C,YAAcr2C,EAAOq2C,YAC1B5+C,KAAKm9C,SAAShiB,KAAM5yB,EAAO40C,UAC3Bn9C,KAAK0mI,cAAgBn+H,EAAOm+H,cAC5B1mI,KAAKymI,WAAal+H,EAAOk+H,kBAClBzmI,KAAK+8C,iBACL/8C,KAAK88C,iBACL98C,KAAK0+C,oBACL1+C,KAAKy+C,aACLz+C,S,GAlLgCk8E,IAyLnCqkD,G,WAEL,aAAc,oBAEbvgI,KAAKwE,KAAOk7H,GAAWY,sCAEvBtgI,KAAKgnI,yBAA2B,CAC/B,QACA,MACA,WACA,oBACA,QACA,iBACA,WACA,oBACA,cACA,UACA,YACA,YACA,gBACA,kBACA,oBACA,mBACA,cACA,WACA,gBACA,aACA,WACA,SACA,kBACA,mB,mDAKF,WAEC,OAAOd,K,0BAIR,SAAczD,EAAgBC,EAAa5qB,GAE1C,IAAMmvB,EAAwBvE,EAAYl2E,WAAYxsD,KAAKwE,MAE3Di+H,EAAe7lF,MAAQ,IAAI0D,GAAO,EAAK,EAAK,GAC5CmiF,EAAevoF,QAAU,EAEzB,IAAM4sE,EAAU,GAEhB,GAAK/jH,MAAMC,QAASikI,EAAsBC,eAAkB,CAE3D,IAAMv3G,EAAQs3G,EAAsBC,cAEpCzE,EAAe7lF,MAAM9jB,UAAWnJ,GAChC8yG,EAAevoF,QAAUvqB,EAAO,GAoBjC,QAhB8CptB,IAAzC0kI,EAAsBE,gBAE1BrgB,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,MAAOwE,EAAsBE,iBAIlF1E,EAAexlF,SAAW,IAAIqD,GAAO,EAAK,EAAK,GAC/CmiF,EAAegE,gBAAwDlkI,IAA3C0kI,EAAsBG,iBAAiCH,EAAsBG,iBAAmB,EAC5H3E,EAAetlF,SAAW,IAAImD,GAAO,EAAK,EAAK,GAE1Cv9C,MAAMC,QAASikI,EAAsBI,iBAEzC5E,EAAetlF,SAASrkB,UAAWmuG,EAAsBI,qBAID9kI,IAApD0kI,EAAsBK,0BAA0C,CAEpE,IAAMC,EAAkBN,EAAsBK,0BAC9CxgB,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,gBAAiB8E,IACrEzgB,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,cAAe8E,IAIpE,OAAOvlI,QAAQ64H,IAAK/T,K,4BAIrB,SAAgB2b,GAEf,IAAM5sF,EAAW,IAAIqwF,GAA4BzD,GA0CjD,OAzCA5sF,EAASiE,KAAM,EAEfjE,EAAS+G,MAAQ6lF,EAAe7lF,MAEhC/G,EAAStgC,SAA6BhT,IAAvBkgI,EAAeltH,IAAoB,KAAOktH,EAAeltH,IAExEsgC,EAASgI,SAAW,KACpBhI,EAASiI,kBAAoB,EAE7BjI,EAASkI,WAAiCx7C,IAAzBkgI,EAAe1kF,MAAsB,KAAO0kF,EAAe1kF,MAC5ElI,EAASmI,eAAiB,EAE1BnI,EAASoH,SAAWwlF,EAAexlF,SACnCpH,EAASqH,kBAAoB,EAC7BrH,EAAS8I,iBAA6Cp8C,IAA/BkgI,EAAe9jF,YAA4B,KAAO8jF,EAAe9jF,YAExF9I,EAASoI,aAAqC17C,IAA3BkgI,EAAexkF,QAAwB,KAAOwkF,EAAexkF,QAChFpI,EAASqI,UAAY,EAErBrI,EAASsI,eAAyC57C,IAA7BkgI,EAAetkF,UAA0B,KAAOskF,EAAetkF,UACpFtI,EAASuI,cA5zpCmB,EA8zpCvBqkF,EAAepkF,cAAcxI,EAASwI,YAAcokF,EAAepkF,aAExExI,EAASyI,gBAAkB,KAC3BzI,EAAS0I,kBAAoB,EAC7B1I,EAAS2I,iBAAmB,EAE5B3I,EAAS+I,iBAA6Cr8C,IAA/BkgI,EAAe7jF,YAA4B,KAAO6jF,EAAe7jF,YACxF/I,EAASsH,SAAWslF,EAAetlF,SAEnCtH,EAAS6wF,mBAAiDnkI,IAAjCkgI,EAAeiE,cAA8B,KAAOjE,EAAeiE,cAC5F7wF,EAAS4wF,WAAahE,EAAegE,WAErC5wF,EAAS+H,SAAW,KAEpB/H,EAASgJ,YAAmCt8C,IAA1BkgI,EAAe5jF,OAAuB,KAAO4jF,EAAe5jF,OAC9EhJ,EAASkJ,gBAAkB,EAE3BlJ,EAASoJ,gBAAkB,IAEpBpJ,M,KAWHgrF,GAEL,aAAc,oBAEb7gI,KAAKwE,KAAOk7H,GAAWkB,uBAYnB4G,G,kDAEL,WAAal5B,EAAoBC,EAAcC,EAAYT,GAAe,uCAElEO,EAAoBC,EAAcC,EAAYT,G,oDAItD,SAAkBliG,GAUjB,IALA,IAAMhM,EAASG,KAAK+tG,aACnB7mG,EAASlH,KAAKuuG,aACdlC,EAAYrsG,KAAKqsG,UACjB5uF,EAAS5R,EAAQwgG,EAAY,EAAIA,EAExB9tG,EAAI,EAAGA,IAAM8tG,EAAW9tG,IAEjCsB,EAAQtB,GAAM2I,EAAQuW,EAASlf,GAIhC,OAAOsB,M,GAxBgCwuG,IA8BzCm5B,GAA2BroI,UAAUiwG,aAAeo4B,GAA2BroI,UAAUqwG,iBAEzFg4B,GAA2BroI,UAAU+vG,UAAYs4B,GAA2BroI,UAAUqwG,iBAEtFg4B,GAA2BroI,UAAUowG,aAAe,SAAWx3D,EAAI9M,EAAIxa,EAAGya,GAyBzE,IAvBA,IAAMrrC,EAASG,KAAK+tG,aACd7mG,EAASlH,KAAKuuG,aACd/pC,EAASxkE,KAAKqsG,UAEdo7B,EAAmB,EAATjjE,EACVkjE,EAAmB,EAATljE,EAEVmjE,EAAKz8F,EAAKD,EAEV10B,GAAMka,EAAIwa,GAAO08F,EACjB/4B,EAAKr4F,EAAIA,EACTq6F,EAAMhC,EAAKr4F,EAEXy6F,EAAUj5D,EAAK2vF,EACfz2B,EAAUD,EAAU02B,EAEpBv0G,GAAO,EAAIy9E,EAAM,EAAIhC,EACrBvvE,EAAKuxE,EAAMhC,EACXrkE,EAAK,EAAIpX,EACTiM,EAAKC,EAAKuvE,EAAKr4F,EAIXhY,EAAI,EAAGA,IAAMimE,EAAQjmE,IAAO,CAErC,IAAM8pC,EAAKnhC,EAAQ+pG,EAAU1yG,EAAIimE,GAC3BojE,EAAK1gI,EAAQ+pG,EAAU1yG,EAAIkpI,GAAYE,EACvCr/F,EAAKphC,EAAQ8pG,EAAUzyG,EAAIimE,GAC3BqjE,EAAK3gI,EAAQ8pG,EAAUzyG,GAAMopI,EAEnC9nI,EAAQtB,GAAMgsC,EAAKlC,EAAKjJ,EAAKwoG,EAAKz0G,EAAKmV,EAAKjJ,EAAKwoG,EAIlD,OAAOhoI,GAUR,IAAMioI,GAWG,EAXHA,GAYE,EAZFA,GAaM,EAbNA,GAcO,EAdPA,GAeM,EAfNA,GAgBW,EAhBXA,GAiBS,EAKT/B,GAAwB,CAC7BgC,KAAM/zE,UACNg0E,KAAM/zE,WACNg0E,KAAMn0E,WACNo0E,KAAM/kF,YACNglF,KAAM9kF,YACN+kF,KAAM7kF,cAGD8kF,GAAgB,CACrBC,KAAMp7G,EACNq7G,KAAMl7G,EACNm7G,KAAMr7G,EACNs7G,KAAMn7G,EACNo7G,KAAMt7G,EACNu7G,KAAMp7G,GAGDq7G,GAAkB,CACvBC,MAAO77G,EACP87G,MAAO77G,EACP87G,MAAOh8G,GAGFi8G,GAAmB,CACxB,OAAU,EACV,KAAQ,EACR,KAAQ,EACR,KAAQ,EACR,KAAQ,EACR,KAAQ,EACR,KAAQ,IAGHrD,GAAa,CAClBsD,SAAU,WACVC,OAAQ,SACRC,QAAS,UACTC,WAAY,KACZC,WAAY,MACZC,QAAS,QACTC,UAAW,aACXC,SAAU,aAGLC,GAAoB,CACzBr6F,MAAO,QACPs6F,YAAa,WACbjxG,SAAU,aACVq1F,QAAS,yBAGJ6b,GAAgB,CACrBC,iBAAarnI,EAEbsnI,OAAQp7G,GACRq7G,KAAMt7G,IAGDu7G,GACG,SADHA,GAEC,OAFDA,GAGE,QAKR,SAASvzB,GAAYxxG,EAAKD,GAGzB,MAAoB,kBAARC,GAA4B,KAARA,EAAoB,IAG/C,gBAAgBqR,KAAMtR,IAAU,MAAMsR,KAAMrR,KAEhDD,EAAOA,EAAKiG,QAAS,0BAA2B,OAK5C,mBAAmBqL,KAAMrR,IAGzB,gBAAgBqR,KAAMrR,IAGtB,aAAaqR,KAAMrR,GANqBA,EAStCD,EAAOC,GAOf,SAASglI,GAAuB9jI,GAgB/B,YAdoC3D,IAA/B2D,EAAK,kBAETA,EAAK,gBAAwB,IAAIg2E,GAAsB,CACtDt/B,MAAO,SACPK,SAAU,EACVF,UAAW,EACXD,UAAW,EACX3C,aAAa,EACbQ,WAAW,EACXX,KAptqCe,KAytqCV9zC,EAAK,gBAIb,SAAS+jI,GAAgCC,EAAiBjpI,EAAQkpI,GAIjE,IAAM,IAAM3lI,KAAQ2lI,EAAU39E,gBAEIjqD,IAA5B2nI,EAAiB1lI,KAErBvD,EAAOgyC,SAASm3F,eAAiBnpI,EAAOgyC,SAASm3F,gBAAkB,GACnEnpI,EAAOgyC,SAASm3F,eAAgB5lI,GAAS2lI,EAAU39E,WAAYhoD,IAYlE,SAAS6lI,GAAwBppI,EAAQqpI,QAEhB/nI,IAAnB+nI,EAAQC,SAEmB,kBAAnBD,EAAQC,OAEnB1rI,OAAOyJ,OAAQrH,EAAOgyC,SAAUq3F,EAAQC,QAIxCjlH,QAAQM,KAAM,sDAAwD0kH,EAAQC,SAqFjF,SAASnhF,GAAoB6G,EAAMu6E,GAIlC,GAFAv6E,EAAK7G,0BAEoB7mD,IAApBioI,EAAQ1c,QAEZ,IAAM,IAAIvvH,EAAI,EAAGonC,EAAK6kG,EAAQ1c,QAAQtvH,OAAQD,EAAIonC,EAAIpnC,IAErD0xD,EAAK5G,sBAAuB9qD,GAAMisI,EAAQ1c,QAASvvH,GAOrD,GAAKisI,EAAQD,QAAUxnI,MAAMC,QAASwnI,EAAQD,OAAOE,aAAgB,CAEpE,IAAMA,EAAcD,EAAQD,OAAOE,YAEnC,GAAKx6E,EAAK5G,sBAAsB7qD,SAAWisI,EAAYjsI,OAAS,CAE/DyxD,EAAK3G,sBAAwB,GAE7B,IAAM,IAAI/qD,EAAI,EAAGonC,EAAK8kG,EAAYjsI,OAAQD,EAAIonC,EAAIpnC,IAEjD0xD,EAAK3G,sBAAuBmhF,EAAalsI,IAAQA,OAMlD+mB,QAAQM,KAAM,yEAQjB,SAAS8kH,GAAoBC,GAE5B,IAAMC,EAAiBD,EAAan+E,YAAcm+E,EAAan+E,WAAYkzE,GAAWc,4BAetF,OAZKoK,EAEU,SAAWA,EAAe5G,WACpC,IAAM4G,EAAexlF,QACrB,IAAMylF,GAAqBD,EAAenhH,YAIhCkhH,EAAavlF,QAAU,IAAMylF,GAAqBF,EAAalhH,YAAe,IAAMkhH,EAAahkE,KAQjH,SAASkkE,GAAqBphH,GAM7B,IAJA,IAAIqhH,EAAgB,GAEdjkI,EAAOhI,OAAOgI,KAAM4iB,GAAawiD,OAE7B1tE,EAAI,EAAGonC,EAAK9+B,EAAKrI,OAAQD,EAAIonC,EAAIpnC,IAE1CusI,GAAiBjkI,EAAMtI,GAAM,IAAMkrB,EAAY5iB,EAAMtI,IAAQ,IAI9D,OAAOusI,EAIR,SAASC,GAA6BvrI,GAKrC,OAASA,GAER,KAAKw0D,UACJ,OAAO,EAAI,IAEZ,KAAKC,WACJ,OAAO,EAAI,IAEZ,KAAKH,WACJ,OAAO,EAAI,MAEZ,KAAK3Q,YACJ,OAAO,EAAI,MAEZ,QACC,MAAM,IAAI33C,MAAO,sE,IAQds0H,G,WAEL,aAAuC,IAA1Br3B,EAA0B,uDAAnB,GAAIpiG,EAAe,uDAAL,GAAK,oBAEtCrG,KAAKyoG,KAAOA,EACZzoG,KAAKwsD,WAAa,GAClBxsD,KAAKu/H,QAAU,GACfv/H,KAAKqG,QAAUA,EAGfrG,KAAKkG,MAAQ,IAAI86H,GAGjBhhI,KAAKgrI,aAAe,IAAI7jH,IAGxBnnB,KAAKirI,eAAiB,GAGtBjrI,KAAKkrI,UAAY,CAAE1J,KAAM,GAAIC,KAAM,IACnCzhI,KAAKmrI,YAAc,CAAE3J,KAAM,GAAIC,KAAM,IACrCzhI,KAAKorI,WAAa,CAAE5J,KAAM,GAAIC,KAAM,IAGpCzhI,KAAKqrI,cAAgB,GAIa,qBAAtB7vB,oBAA+E,IAA1C,UAAUnlG,KAAMlM,UAAU6F,WAE1EhQ,KAAK2jI,cAAgB,IAAIpoB,GAAmBv7G,KAAKqG,QAAQ2wG,SAIzDh3G,KAAK2jI,cAAgB,IAAIrqB,GAAet5G,KAAKqG,QAAQ2wG,SAItDh3G,KAAK2jI,cAAcxqB,eAAgBn5G,KAAKqG,QAAQ4wG,aAChDj3G,KAAK2jI,cAAchgH,iBAAkB3jB,KAAKqG,QAAQ8wG,eAElDn3G,KAAK+/H,WAAa,IAAIzoB,GAAYt3G,KAAKqG,QAAQ2wG,SAC/Ch3G,KAAK+/H,WAAWznB,gBAAiB,eAEC,oBAA7Bt4G,KAAKqG,QAAQ4wG,aAEjBj3G,KAAK+/H,WAAWxnB,oBAAoB,G,iDAMtC,SAAe/rD,GAEdxsD,KAAKwsD,WAAaA,I,wBAInB,SAAY+yE,GAEXv/H,KAAKu/H,QAAUA,I,mBAIhB,SAAO1pB,EAAQE,GAEd,IAAM+B,EAAS93G,KACTyoG,EAAOzoG,KAAKyoG,KACZj8C,EAAaxsD,KAAKwsD,WAGxBxsD,KAAKkG,MAAM+6H,YAGXjhI,KAAKsrI,YAAY,SAAWC,GAE3B,OAAOA,EAAIC,WAAaD,EAAIC,eAI7BxpI,QAAQ64H,IAAK76H,KAAKsrI,YAAY,SAAWC,GAExC,OAAOA,EAAIE,YAAcF,EAAIE,iBAExBxpI,MAAM,WAEX,OAAOD,QAAQ64H,IAAK,CAEnB/iB,EAAO4zB,gBAAiB,SACxB5zB,EAAO4zB,gBAAiB,aACxB5zB,EAAO4zB,gBAAiB,eAItBzpI,MAAM,SAAW0pI,GAEpB,IAAM9rI,EAAS,CACduvD,MAAOu8E,EAAc,GAAKljC,EAAKr5C,OAAS,GACxCw8E,OAAQD,EAAc,GACtB34F,WAAY24F,EAAc,GAC1Bv4C,QAASu4C,EAAc,GACvB9L,MAAOp3B,EAAKo3B,MACZ/nB,OAAQA,EACR7kE,SAAU,IAGXg3F,GAAgCz9E,EAAY3sD,EAAQ4oG,GAEpD4hC,GAAwBxqI,EAAQ4oG,GAEhCzmG,QAAQ64H,IAAK/iB,EAAOwzB,YAAY,SAAWC,GAE1C,OAAOA,EAAIM,WAAaN,EAAIM,UAAWhsI,OAElCoC,MAAM,WAEX4zG,EAAQh2G,SAINk8G,MAAOhG,K,uBAOZ,WAQC,IANA,IAAM2rB,EAAW1hI,KAAKyoG,KAAKk5B,OAAS,GAC9BmK,EAAW9rI,KAAKyoG,KAAKsjC,OAAS,GAC9BC,EAAWhsI,KAAKyoG,KAAKwjC,QAAU,GAI3BpkC,EAAY,EAAGqkC,EAAaJ,EAASttI,OAAQqpG,EAAYqkC,EAAYrkC,IAI9E,IAFA,IAAMhU,EAASi4C,EAAUjkC,GAAYhU,OAE3Bt1F,EAAI,EAAGonC,EAAKkuD,EAAOr1F,OAAQD,EAAIonC,EAAIpnC,IAE5CmjI,EAAU7tC,EAAQt1F,IAAM4pG,QAAS,EAQnC,IAAM,IAAIy5B,EAAY,EAAGC,EAAaH,EAASljI,OAAQojI,EAAYC,EAAYD,IAAe,CAE7F,IAAME,EAAUJ,EAAUE,QAEJr/H,IAAjBu/H,EAAQ7xE,OAEZjwD,KAAK+hI,YAAa/hI,KAAKkrI,UAAWpJ,EAAQ7xE,WAKpB1tD,IAAjBu/H,EAAQqK,OAEZH,EAAUlK,EAAQ7xE,MAAOxa,eAAgB,SAMnBlzC,IAAnBu/H,EAAQ3+F,QAEZnjC,KAAK+hI,YAAa/hI,KAAKmrI,YAAarJ,EAAQ3+F,W,yBAiB/C,SAAaj9B,EAAO2F,QAEJtJ,IAAVsJ,SAEwBtJ,IAAxB2D,EAAMs7H,KAAM31H,KAEhB3F,EAAMs7H,KAAM31H,GAAU3F,EAAMu7H,KAAM51H,GAAU,GAI7C3F,EAAMs7H,KAAM31H,Q,yBAKb,SAAa3F,EAAO2F,EAAO5K,GAE1B,GAAKiF,EAAMs7H,KAAM31H,IAAW,EAAI,OAAO5K,EAEvC,IAAMmrI,EAAMnrI,EAAOq9B,QAInB,OAFA8tG,EAAI5nI,MAAQ,aAAiB0B,EAAMu7H,KAAM51H,KAElCugI,I,wBAIR,SAAYC,GAEX,IAAM7/E,EAAa3tD,OAAOqI,OAAQlH,KAAKu/H,SACvC/yE,EAAWroD,KAAMnE,MAEjB,IAAM,IAAIzB,EAAI,EAAGA,EAAIiuD,EAAWhuD,OAAQD,IAAO,CAE9C,IAAMsB,EAASwsI,EAAM7/E,EAAYjuD,IAEjC,GAAKsB,EAAS,OAAOA,EAItB,OAAO,O,wBAIR,SAAYwsI,GAEX,IAAM7/E,EAAa3tD,OAAOqI,OAAQlH,KAAKu/H,SACvC/yE,EAAW3/C,QAAS7M,MAIpB,IAFA,IAAM8mH,EAAU,GAENvoH,EAAI,EAAGA,EAAIiuD,EAAWhuD,OAAQD,IAAO,CAE9C,IAAMsB,EAASwsI,EAAM7/E,EAAYjuD,IAE5BsB,GAASinH,EAAQ3iH,KAAMtE,GAI7B,OAAOinH,I,2BAUR,SAAe7gG,EAAMpa,GAEpB,IAAMlF,EAAWsf,EAAO,IAAMpa,EAC1Bo2H,EAAajiI,KAAKkG,MAAMnF,IAAK4F,GAEjC,IAAOs7H,EAAa,CAEnB,OAASh8G,GAER,IAAK,QACJg8G,EAAajiI,KAAKssI,UAAWzgI,GAC7B,MAED,IAAK,OACJo2H,EAAajiI,KAAKusI,SAAU1gI,GAC5B,MAED,IAAK,OACJo2H,EAAajiI,KAAKwsI,YAAY,SAAWjB,GAExC,OAAOA,EAAIkB,UAAYlB,EAAIkB,SAAU5gI,MAGtC,MAED,IAAK,WACJo2H,EAAajiI,KAAK0sI,aAAc7gI,GAChC,MAED,IAAK,aACJo2H,EAAajiI,KAAKwsI,YAAY,SAAWjB,GAExC,OAAOA,EAAIoB,gBAAkBpB,EAAIoB,eAAgB9gI,MAGlD,MAED,IAAK,SACJo2H,EAAajiI,KAAK4sI,WAAY/gI,GAC9B,MAED,IAAK,WACJo2H,EAAajiI,KAAKwsI,YAAY,SAAWjB,GAExC,OAAOA,EAAIsB,cAAgBtB,EAAIsB,aAAchhI,MAG9C,MAED,IAAK,UACJo2H,EAAajiI,KAAKwsI,YAAY,SAAWjB,GAExC,OAAOA,EAAI9yB,aAAe8yB,EAAI9yB,YAAa5sG,MAG5C,MAED,IAAK,OACJo2H,EAAajiI,KAAK8sI,SAAUjhI,GAC5B,MAED,IAAK,YACJo2H,EAAajiI,KAAK+sI,cAAelhI,GACjC,MAED,IAAK,SACJo2H,EAAajiI,KAAKgtI,WAAYnhI,GAC9B,MAED,QACC,MAAM,IAAIL,MAAO,iBAAmBya,GAItCjmB,KAAKkG,MAAM6/B,IAAKp/B,EAAUs7H,GAI3B,OAAOA,I,6BASR,SAAiBh8G,GAEhB,IAAI0lH,EAAe3rI,KAAKkG,MAAMnF,IAAKklB,GAEnC,IAAO0lH,EAAe,CAErB,IAAM7zB,EAAS93G,KACTitI,EAAOjtI,KAAKyoG,KAAMxiF,GAAkB,SAATA,EAAkB,KAAO,OAAW,GAErE0lH,EAAe3pI,QAAQ64H,IAAKoS,EAAK13H,KAAK,SAAW23H,EAAKrhI,GAErD,OAAOisG,EAAOqsB,cAAel+G,EAAMpa,OAIpC7L,KAAKkG,MAAM6/B,IAAK9f,EAAM0lH,GAIvB,OAAOA,I,wBASR,SAAYwB,GAEX,IAAMC,EAAYptI,KAAKyoG,KAAKz1C,QAASm6E,GAC/Bv2B,EAAS52G,KAAK+/H,WAEpB,GAAKqN,EAAUnnH,MAA2B,gBAAnBmnH,EAAUnnH,KAEhC,MAAM,IAAIza,MAAO,qBAAuB4hI,EAAUnnH,KAAO,kCAK1D,QAAuB1jB,IAAlB6qI,EAAUxJ,KAAqC,IAAhBuJ,EAEnC,OAAOnrI,QAAQR,QAASxB,KAAKwsD,WAAYkzE,GAAWC,iBAAkBzE,MAIvE,IAAM70H,EAAUrG,KAAKqG,QAErB,OAAO,IAAIrE,SAAS,SAAWR,EAASC,GAEvCm1G,EAAOQ,KAAMZ,GAAY42B,EAAUxJ,IAAKv9H,EAAQtB,MAAQvD,OAASe,GAAW,WAE3Ed,EAAQ,IAAI+J,MAAO,4CAA8C4hI,EAAUxJ,IAAM,e,4BAapF,SAAgByB,GAEf,IAAMgI,EAAgBrtI,KAAKyoG,KAAKw7B,YAAaoB,GAE7C,OAAOrlI,KAAKmkI,cAAe,SAAUkJ,EAAc7jI,QAASvH,MAAM,SAAWuH,GAE5E,IAAMqwH,EAAawT,EAAcxT,YAAc,EACzCyK,EAAa+I,EAAc/I,YAAc,EAC/C,OAAO96H,EAAOiB,MAAO65H,EAAYA,EAAazK,Q,0BAWhD,SAAcyT,GAEb,IAAMx1B,EAAS93G,KACTyoG,EAAOzoG,KAAKyoG,KAEZm9B,EAAc5lI,KAAKyoG,KAAKo9B,UAAWyH,GAEzC,QAAgC/qI,IAA3BqjI,EAAY5B,iBAAmDzhI,IAAvBqjI,EAAY2H,OAKxD,OAAOvrI,QAAQR,QAAS,MAIzB,IAAMgsI,EAAqB,GAmB3B,YAjBgCjrI,IAA3BqjI,EAAY5B,WAEhBwJ,EAAmBrpI,KAAMnE,KAAKmkI,cAAe,aAAcyB,EAAY5B,aAIvEwJ,EAAmBrpI,KAAM,WAIE5B,IAAvBqjI,EAAY2H,SAEhBC,EAAmBrpI,KAAMnE,KAAKmkI,cAAe,aAAcyB,EAAY2H,OAAOnoF,QAAQ4+E,aACtFwJ,EAAmBrpI,KAAMnE,KAAKmkI,cAAe,aAAcyB,EAAY2H,OAAOrmI,OAAO88H,cAI/EhiI,QAAQ64H,IAAK2S,GAAqBvrI,MAAM,SAAWgiI,GAEzD,IAWIt0G,EAAO89G,EAXLzJ,EAAaC,EAAa,GAE1B5hF,EAAW2mF,GAAkBpD,EAAY3/G,MACzCynH,EAAa3H,GAAuBH,EAAYE,eAGhD6H,EAAeD,EAAWx5E,kBAC1B05E,EAAYD,EAAetrF,EAC3BiiF,EAAasB,EAAYtB,YAAc,EACvCC,OAAwChiI,IAA3BqjI,EAAY5B,WAA2Bv7B,EAAKw7B,YAAa2B,EAAY5B,YAAaO,gBAAahiI,EAC5Gu/C,GAAwC,IAA3B8jF,EAAY9jF,WAI/B,GAAKyiF,GAAcA,IAAeqJ,EAAY,CAI7C,IAAMC,EAAU/8H,KAAKmgB,MAAOqzG,EAAaC,GACnCuJ,EAAa,qBAAuBlI,EAAY5B,WAAa,IAAM4B,EAAYE,cAAgB,IAAM+H,EAAU,IAAMjI,EAAYpgG,MACnImhE,EAAKmR,EAAO5xG,MAAMnF,IAAK+sI,GAEpBnnC,IAENh3E,EAAQ,IAAI+9G,EAAY1J,EAAY6J,EAAUtJ,EAAYqB,EAAYpgG,MAAQ++F,EAAaoJ,GAG3FhnC,EAAK,IAAIH,GAAmB72E,EAAO40G,EAAaoJ,GAEhD71B,EAAO5xG,MAAM6/B,IAAK+nG,EAAYnnC,IAI/B8mC,EAAkB,IAAI1mC,GAA4BJ,EAAItkD,EAAYiiF,EAAaC,EAAeoJ,EAAc7rF,QAM3GnyB,EAFmB,OAAfq0G,EAEI,IAAI0J,EAAY9H,EAAYpgG,MAAQ6c,GAIpC,IAAIqrF,EAAY1J,EAAYM,EAAYsB,EAAYpgG,MAAQ6c,GAIrEorF,EAAkB,IAAIrrF,GAAiBzyB,EAAO0yB,EAAUP,GAKzD,QAA4Bv/C,IAAvBqjI,EAAY2H,OAAuB,CAEvC,IAAMQ,EAAkB/E,GAAiBgF,OACnCC,EAAoBlI,GAAuBH,EAAY2H,OAAOnoF,QAAQ0gF,eAEtEoI,EAAoBtI,EAAY2H,OAAOnoF,QAAQk/E,YAAc,EAC7D6J,EAAmBvI,EAAY2H,OAAOrmI,OAAOo9H,YAAc,EAE3D8J,EAAgB,IAAIH,EAAmBhK,EAAa,GAAKiK,EAAmBtI,EAAY2H,OAAO/nG,MAAQuoG,GACvGM,EAAe,IAAIX,EAAYzJ,EAAa,GAAKkK,EAAkBvI,EAAY2H,OAAO/nG,MAAQ6c,GAEhF,OAAf2hF,IAGJyJ,EAAkB,IAAIrrF,GAAiBqrF,EAAgB99G,MAAMllB,QAASgjI,EAAgBprF,SAAUorF,EAAgB3rF,aAIjH,IAAM,IAAIvjD,EAAI,EAAGonC,EAAKyoG,EAAc5vI,OAAQD,EAAIonC,EAAIpnC,IAAO,CAE1D,IAAMsN,EAAQuiI,EAAe7vI,GAM7B,GAJAkvI,EAAgBa,KAAMziI,EAAOwiI,EAAc9vI,EAAI8jD,IAC1CA,GAAY,GAAIorF,EAAgBc,KAAM1iI,EAAOwiI,EAAc9vI,EAAI8jD,EAAW,IAC1EA,GAAY,GAAIorF,EAAgBe,KAAM3iI,EAAOwiI,EAAc9vI,EAAI8jD,EAAW,IAC1EA,GAAY,GAAIorF,EAAgBgB,KAAM5iI,EAAOwiI,EAAc9vI,EAAI8jD,EAAW,IAC1EA,GAAY,EAAI,MAAM,IAAI72C,MAAO,sEAMxC,OAAOiiI,O,yBAWT,SAAalK,GAEZ,IAAM96B,EAAOzoG,KAAKyoG,KACZpiG,EAAUrG,KAAKqG,QACfm9H,EAAa/6B,EAAKntE,SAAUioG,GAC5Bh7H,EAASkgG,EAAK9sE,OAAQ6nG,EAAWj7H,QAEnCquG,EAAS52G,KAAK2jI,cAElB,GAAKp7H,EAAOq7H,IAAM,CAEjB,IAAMnpH,EAAUpU,EAAQ2wG,QAAQF,WAAYvuG,EAAOq7H,KAClC,OAAZnpH,IAAmBm8F,EAASn8F,GAIlC,OAAOza,KAAKyjI,iBAAkBF,EAAch7H,EAAQquG,K,8BAIrD,SAAkB2sB,EAAch7H,EAAQquG,GAEvC,IAAMkB,EAAS93G,KACTyoG,EAAOzoG,KAAKyoG,KACZpiG,EAAUrG,KAAKqG,QAEfm9H,EAAa/6B,EAAKntE,SAAUioG,GAE5BpI,EAAM/4H,KAAK+4H,KAAO/4H,KAAKssI,UAEzBC,EAAYpmI,EAAOq7H,IACnBgL,GAAc,EACdC,GAAW,EAIf,GAFyB,eAApBtmI,EAAOkvG,WAA4Bo3B,GAAW,QAExBtsI,IAAtBgG,EAAOy7H,WAIX2K,EAAY72B,EAAOqsB,cAAe,aAAc57H,EAAOy7H,YAAa/hI,MAAM,SAAW+hI,GAEpF,GAAyB,cAApBz7H,EAAOkvG,SAA2B,CAQtC,IAAMq3B,EAAY,IAAI1jC,SAAU44B,EAAY,GAAI,GAAI+K,SAAU,GAAG,GACjEF,EAAyB,IAAdC,GAAiC,IAAdA,GAAiC,IAAdA,EAIlDF,GAAc,EACd,IAAMhzB,EAAO,IAAI/D,KAAM,CAAEmsB,GAAc,CAAE/9G,KAAM1d,EAAOkvG,WAEtD,OADAk3B,EAAYxT,EAAIC,gBAAiBxf,WAK5B,QAAoBr5G,IAAfgG,EAAOq7H,IAElB,MAAM,IAAIp4H,MAAO,2BAA6B+3H,EAAe,kCAI9D,OAAOvhI,QAAQR,QAASmtI,GAAY1sI,MAAM,SAAW0sI,GAEpD,OAAO,IAAI3sI,SAAS,SAAWR,EAASC,GAEvC,IAAIo0G,EAASr0G,GAEuB,IAA/Bo1G,EAAOoF,sBAEXnG,EAAS,SAAWiG,GAEnBt6G,EAAS,IAAImpG,GAAemR,MAM9BlF,EAAOQ,KAAMZ,GAAYm4B,EAAWtoI,EAAQtB,MAAQ8wG,OAAQtzG,EAAWd,SAIrEQ,MAAM,SAAWg8B,IAIC,IAAhB2wG,GAEJzT,EAAI6T,gBAAiBL,GAItB1wG,EAAQlD,OAAQ,EAEXyoG,EAAWh/H,OAAOy5B,EAAQz5B,KAAOg/H,EAAWh/H,MAG1CqqI,IAAW5wG,EAAQ3D,OAASxM,IAEnC,IACMmhH,GADWxmC,EAAKymC,UAAY,IACR1L,EAAWyL,UAAa,GAYlD,OAVAhxG,EAAQ7D,UAAYiuG,GAAe4G,EAAQ70G,YAAe/M,EAC1D4Q,EAAQ5D,UAAYguG,GAAe4G,EAAQ50G,YAAe9M,EAC1D0Q,EAAQ/D,MAAQ0uG,GAAiBqG,EAAQ/0G,QAAWnN,EACpDkR,EAAQ9D,MAAQyuG,GAAiBqG,EAAQ90G,QAAWpN,EAEpD+qF,EAAOkzB,aAAapwH,IAAKqjB,EAAS,CACjChY,KAAM,WACNpa,MAAO03H,IAGDtlG,O,2BAaT,SAAewkG,EAAgB0M,EAASC,GAEvC,IAAMt3B,EAAS93G,KAEf,OAAOA,KAAKmkI,cAAe,UAAWiL,EAAOvjI,OAAQ5J,MAAM,SAAWg8B,GAUrE,QANyB17B,IAApB6sI,EAAOnJ,UAA6C,GAAnBmJ,EAAOnJ,UAAiC,UAAZkJ,GAA0C,GAAnBC,EAAOnJ,UAE/F3gH,QAAQM,KAAM,mCAAqCwpH,EAAOnJ,SAAW,gBAAkBkJ,EAAU,uBAI7Fr3B,EAAOtrD,WAAYkzE,GAAWgB,uBAA0B,CAE5D,IAAM3rC,OAAkCxyF,IAAtB6sI,EAAO5iF,WAA2B4iF,EAAO5iF,WAAYkzE,GAAWgB,4BAA0Bn+H,EAE5G,GAAKwyF,EAAY,CAEhB,IAAMs6C,EAAgBv3B,EAAOkzB,aAAajqI,IAAKk9B,GAC/CA,EAAU65E,EAAOtrD,WAAYkzE,GAAWgB,uBAAwB4O,cAAerxG,EAAS82D,GACxF+iB,EAAOkzB,aAAapwH,IAAKqjB,EAASoxG,IAMpC5M,EAAgB0M,GAAYlxG,O,iCAc9B,SAAqBgyB,GAEpB,IAAM1pB,EAAW0pB,EAAK1pB,SAClBsP,EAAWoa,EAAKpa,SAEd05F,OAAoDhtI,IAAhCgkC,EAAS9c,WAAW66B,QACxCkrF,OAAgDjtI,IAA9BgkC,EAAS9c,WAAWmzB,MACtC6yF,OAAgDltI,IAA/BgkC,EAAS9c,WAAW6a,OACrCqgD,GAAqC,IAAvB10B,EAAKxa,cACnBi6F,EAAkB7wI,OAAOgI,KAAM0/B,EAASyd,iBAAkBxlD,OAAS,EACnEmxI,EAAkBD,QAAuDntI,IAApCgkC,EAASyd,gBAAgB1f,OAEpE,GAAK2rB,EAAK3a,SAAW,CAEpB,IAAM3uC,EAAW,kBAAoBkvC,EAASpb,KAE1Cm1G,EAAiB5vI,KAAKkG,MAAMnF,IAAK4F,GAE9BipI,IAENA,EAAiB,IAAIrzD,GACrB1iC,GAAW16C,UAAUg8B,KAAKh6B,KAAMyuI,EAAgB/5F,GAChD+5F,EAAehzF,MAAMzhB,KAAM0a,EAAS+G,OACpCgzF,EAAer6H,IAAMsgC,EAAStgC,IAC9Bq6H,EAAezwF,iBAAkB,EAEjCn/C,KAAKkG,MAAM6/B,IAAKp/B,EAAUipI,IAI3B/5F,EAAW+5F,OAEL,GAAK3/E,EAAK5a,OAAS,CAEzB,IAAM1uC,EAAW,qBAAuBkvC,EAASpb,KAE7Co1G,EAAe7vI,KAAKkG,MAAMnF,IAAK4F,GAE5BkpI,IAENA,EAAe,IAAIxzD,GACnBxiC,GAAW16C,UAAUg8B,KAAKh6B,KAAM0uI,EAAch6F,GAC9Cg6F,EAAajzF,MAAMzhB,KAAM0a,EAAS+G,OAElC58C,KAAKkG,MAAM6/B,IAAKp/B,EAAUkpI,IAI3Bh6F,EAAWg6F,EAKZ,GAAKN,GAAqBC,GAAmBC,GAAkB9qD,GAAe+qD,EAAkB,CAE/F,IAAI/oI,EAAW,kBAAoBkvC,EAASpb,KAAO,IAE9Cob,EAASswF,mCAAmCx/H,GAAY,wBACxDg+E,IAAch+E,GAAY,aAC1B4oI,IAAoB5oI,GAAY,oBAChC6oI,IAAkB7oI,GAAY,kBAC9B8oI,IAAiB9oI,GAAY,iBAC7B+oI,IAAkB/oI,GAAY,kBAC9BgpI,IAAkBhpI,GAAY,kBAEnC,IAAI2+E,EAAiBtlF,KAAKkG,MAAMnF,IAAK4F,GAE9B2+E,IAENA,EAAiBzvC,EAASvX,QAErBqmD,IAAcW,EAAezlC,UAAW,GACxC2vF,IAAkBlqD,EAAerrC,cAAe,GAChDw1F,IAAiBnqD,EAAe5oC,aAAc,GAC9CgzF,IAAkBpqD,EAAe3lC,cAAe,GAChDgwF,IAAkBrqD,EAAe1lC,cAAe,GAEhD2vF,IAEJjqD,EAAetM,gBAAiB,EAG3BsM,EAAejnC,cAAcinC,EAAejnC,YAAYtiC,IAAO,GAC/DupE,EAAe5nC,uBAAuB4nC,EAAe5nC,qBAAqB3hC,IAAO,IAIvF/b,KAAKkG,MAAM6/B,IAAKp/B,EAAU2+E,GAE1BtlF,KAAKgrI,aAAapwH,IAAK0qE,EAAgBtlF,KAAKgrI,aAAajqI,IAAK80C,KAI/DA,EAAWyvC,EAMPzvC,EAASkI,YAAqCx7C,IAA5BgkC,EAAS9c,WAAW4uB,UAAgD91C,IAA3BgkC,EAAS9c,WAAWsS,IAEnFwK,EAASte,aAAc,MAAOse,EAAS9c,WAAWsS,IAInDk0B,EAAKpa,SAAWA,I,6BAIjB,WAEC,OAAOqmC,K,0BASR,SAAc93B,GAEb,IAKI0rF,EALEh4B,EAAS93G,KACTyoG,EAAOzoG,KAAKyoG,KACZj8C,EAAaxsD,KAAKwsD,WAClBk2E,EAAcj6B,EAAK/zD,UAAW0P,GAG9Bq+E,EAAiB,GACjBsN,EAAqBrN,EAAYl2E,YAAc,GAE/Cs6D,EAAU,GAEhB,GAAKipB,EAAoBrQ,GAAWY,uCAA0C,CAE7E,IAAM0P,EAAcxjF,EAAYkzE,GAAWY,uCAC3CwP,EAAeE,EAAYC,kBAC3BnpB,EAAQ3iH,KAAM6rI,EAAYE,aAAczN,EAAgBC,EAAa5qB,SAE/D,GAAKi4B,EAAoBrQ,GAAWU,qBAAwB,CAElE,IAAM+P,EAAe3jF,EAAYkzE,GAAWU,qBAC5C0P,EAAeK,EAAaF,kBAC5BnpB,EAAQ3iH,KAAMgsI,EAAaD,aAAczN,EAAgBC,EAAa5qB,QAEhE,CAKN,IAAM6qB,EAAoBD,EAAYE,sBAAwB,GAK9D,GAHAH,EAAe7lF,MAAQ,IAAI0D,GAAO,EAAK,EAAK,GAC5CmiF,EAAevoF,QAAU,EAEpBn3C,MAAMC,QAAS2/H,EAAkBE,iBAAoB,CAEzD,IAAMlzG,EAAQgzG,EAAkBE,gBAEhCJ,EAAe7lF,MAAM9jB,UAAWnJ,GAChC8yG,EAAevoF,QAAUvqB,EAAO,QAIWptB,IAAvCogI,EAAkBG,kBAEtBhc,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,MAAOE,EAAkBG,mBAI9EL,EAAe1lF,eAAiDx6C,IAArCogI,EAAkByN,eAA+BzN,EAAkByN,eAAiB,EAC/G3N,EAAe3lF,eAAkDv6C,IAAtCogI,EAAkB0N,gBAAgC1N,EAAkB0N,gBAAkB,OAE7D9tI,IAA/CogI,EAAkB2N,2BAEtBxpB,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,eAAgBE,EAAkB2N,2BACtFxpB,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,eAAgBE,EAAkB2N,4BAIvFR,EAAe9vI,KAAKwsI,YAAY,SAAWjB,GAE1C,OAAOA,EAAI0E,iBAAmB1E,EAAI0E,gBAAiB7rF,MAIpD0iE,EAAQ3iH,KAAMnC,QAAQ64H,IAAK76H,KAAKsrI,YAAY,SAAWC,GAEtD,OAAOA,EAAIgF,sBAAwBhF,EAAIgF,qBAAsBnsF,EAAeq+E,SAM7C,IAA5BC,EAAYrpD,cAEhBopD,EAAezoF,KAv1sCC,GA21sCjB,IAAMw2F,EAAY9N,EAAY8N,WAAazG,GA4D3C,OA1DKyG,IAAczG,IAElBtH,EAAetoF,aAAc,EAG7BsoF,EAAe7nF,YAAa,IAI5B6nF,EAAetoF,aAAc,EAExBq2F,IAAczG,KAElBtH,EAAe1mF,eAAwCx5C,IAA5BmgI,EAAY+N,YAA4B/N,EAAY+N,YAAc,UAM5DluI,IAA9BmgI,EAAYgO,eAA+BZ,IAAiB9tF,KAEhE8kE,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,YAAaC,EAAYgO,gBAG7EjO,EAAepkF,YAAc,IAAI3qB,GAAS,GAAK,QAENnxB,IAApCmgI,EAAYgO,cAActhG,OAE9BqzF,EAAepkF,YAAYzjC,IAAK8nH,EAAYgO,cAActhG,OAASszF,EAAYgO,cAActhG,aAMzD7sC,IAAjCmgI,EAAYiO,kBAAkCb,IAAiB9tF,KAEnE8kE,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,QAASC,EAAYiO,wBAE1BpuI,IAA1CmgI,EAAYiO,iBAAiBC,WAEjCnO,EAAezkF,eAAiB0kF,EAAYiO,iBAAiBC,gBAM3BruI,IAA/BmgI,EAAYmO,gBAAgCf,IAAiB9tF,KAEjEygF,EAAexlF,UAAW,IAAIqD,IAAQxnB,UAAW4pG,EAAYmO,sBAIzBtuI,IAAhCmgI,EAAYoO,iBAAiChB,IAAiB9tF,IAElE8kE,EAAQ3iH,KAAM2zG,EAAOirB,cAAeN,EAAgB,cAAeC,EAAYoO,kBAIzE9uI,QAAQ64H,IAAK/T,GAAU7kH,MAAM,WAEnC,IAAI4zC,EAwBJ,OApBCA,EAFIi6F,IAAiB5J,GAEV15E,EAAYkzE,GAAWY,uCAAwCyQ,eAAgBtO,GAI/E,IAAIqN,EAAcrN,GAIzBC,EAAYl+H,OAAOqxC,EAASrxC,KAAOk+H,EAAYl+H,MAG/CqxC,EAAStgC,MAAMsgC,EAAStgC,IAAIilB,SAAWvL,IACvC4mB,EAAS8I,cAAc9I,EAAS8I,YAAYnkB,SAAWvL,IAE5Do7G,GAAwBx0F,EAAU6sF,GAElC5qB,EAAOkzB,aAAapwH,IAAKi7B,EAAU,CAAE5vB,KAAM,YAAapa,MAAOu4C,IAE1Ds+E,EAAYl2E,YAAay9E,GAAgCz9E,EAAY3W,EAAU6sF,GAE7E7sF,O,8BAOT,SAAkBm7F,GAMjB,IAJA,IAAMC,EAAgBpyB,GAAgBqyB,iBAAkBF,GAAgB,IAEpExsI,EAAOysI,EAED1yI,EAAI,EAAGyB,KAAKqrI,cAAe7mI,KAAWjG,EAE/CiG,EAAOysI,EAAgB,IAAM1yI,EAM9B,OAFAyB,KAAKqrI,cAAe7mI,IAAS,EAEtBA,I,4BAYR,SAAgB2sI,GAEf,IAAMr5B,EAAS93G,KACTwsD,EAAaxsD,KAAKwsD,WAClBtmD,EAAQlG,KAAKirI,eAEnB,SAASmG,EAAsBhM,GAE9B,OAAO54E,EAAYkzE,GAAWc,4BAC5B6Q,gBAAiBjM,EAAWttB,GAC5B71G,MAAM,SAAWskC,GAEjB,OAAO+qG,GAAwB/qG,EAAU6+F,EAAWttB,MAQvD,IAFA,IAAMgP,EAAU,GAENvoH,EAAI,EAAGonC,EAAKwrG,EAAW3yI,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEvD,IAAM6mI,EAAY+L,EAAY5yI,GACxBoI,EAAW+jI,GAAoBtF,GAG/B9xE,EAASptD,EAAOS,GAEtB,GAAK2sD,EAGJwzD,EAAQ3iH,KAAMmvD,EAAOtvC,aAEf,CAEN,IAAIutH,OAAe,EAKlBA,EAHInM,EAAU54E,YAAc44E,EAAU54E,WAAYkzE,GAAWc,4BAG3C4Q,EAAsBhM,GAKtBkM,GAAwB,IAAIvtF,GAAkBqhF,EAAWttB,GAK5E5xG,EAAOS,GAAa,CAAEy+H,UAAWA,EAAWphH,QAASutH,GAErDzqB,EAAQ3iH,KAAMotI,IAMhB,OAAOvvI,QAAQ64H,IAAK/T,K,sBASrB,SAAU0qB,GAWT,IATA,IAAM15B,EAAS93G,KACTyoG,EAAOzoG,KAAKyoG,KACZj8C,EAAaxsD,KAAKwsD,WAElBg+E,EAAU/hC,EAAKwjC,OAAQuF,GACvBL,EAAa3G,EAAQ2G,WAErBrqB,EAAU,GAENvoH,EAAI,EAAGonC,EAAKwrG,EAAW3yI,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEvD,IAAMs3C,OAAwCtzC,IAA7B4uI,EAAY5yI,GAAIs3C,SAC9Bm0F,GAAuBhqI,KAAKkG,OAC5BlG,KAAKmkI,cAAe,WAAYgN,EAAY5yI,GAAIs3C,UAEnDixE,EAAQ3iH,KAAM0xC,GAMf,OAFAixE,EAAQ3iH,KAAM2zG,EAAO25B,eAAgBN,IAE9BnvI,QAAQ64H,IAAK/T,GAAU7kH,MAAM,SAAWq/G,GAO9C,IALA,IAAM5sE,EAAY4sE,EAAQ72G,MAAO,EAAG62G,EAAQ9iH,OAAS,GAC/Ci2C,EAAa6sE,EAASA,EAAQ9iH,OAAS,GAEvCytI,EAAS,GAEL1tI,EAAI,EAAGonC,EAAK8O,EAAWj2C,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEvD,IAAMgoC,EAAWkO,EAAYl2C,GACvB6mI,EAAY+L,EAAY5yI,GAI1B0xD,OAAI,EAEFpa,EAAWnB,EAAWn2C,GAE5B,GAAK6mI,EAAUz+D,OAASmhE,IACtB1C,EAAUz+D,OAASmhE,IACnB1C,EAAUz+D,OAASmhE,SACAvlI,IAAnB6iI,EAAUz+D,MAOiB,KAJ5B1W,GAAiC,IAA1Bu6E,EAAQ/0F,cACZ,IAAI8xD,GAAahhE,EAAUsP,GAC3B,IAAIsT,GAAM5iB,EAAUsP,IAEbJ,eAA4Bwa,EAAK1pB,SAAS9c,WAAWi+E,WAAW5lD,YAIzEmO,EAAKyhF,uBAIDtM,EAAUz+D,OAASmhE,GAEvB73E,EAAK1pB,SAAWorG,GAAqB1hF,EAAK1pB,SAz8sClB,GA28sCb6+F,EAAUz+D,OAASmhE,KAE9B73E,EAAK1pB,SAAWorG,GAAqB1hF,EAAK1pB,SA58sCpB,SAg9sCjB,GAAK6+F,EAAUz+D,OAASmhE,GAE9B73E,EAAO,IAAI65C,GAAcvjE,EAAUsP,QAE7B,GAAKuvF,EAAUz+D,OAASmhE,GAE9B73E,EAAO,IAAIi5C,GAAM3iE,EAAUsP,QAErB,GAAKuvF,EAAUz+D,OAASmhE,GAE9B73E,EAAO,IAAI85C,GAAUxjE,EAAUsP,OAEzB,IAAKuvF,EAAUz+D,OAASmhE,GAM9B,MAAM,IAAIt8H,MAAO,iDAAmD45H,EAAUz+D,MAJ9E1W,EAAO,IAAIm6C,GAAQ7jE,EAAUsP,GAQzBh3C,OAAOgI,KAAMopD,EAAK1pB,SAASyd,iBAAkBxlD,OAAS,GAE1D4qD,GAAoB6G,EAAMu6E,GAI3Bv6E,EAAKzrD,KAAOszG,EAAOwqB,iBAAkBkI,EAAQhmI,MAAU,QAAUgtI,GAEjEnH,GAAwBp6E,EAAMu6E,GAEzBpF,EAAU54E,YAAay9E,GAAgCz9E,EAAYyD,EAAMm1E,GAE9EttB,EAAO85B,oBAAqB3hF,GAE5Bg8E,EAAO9nI,KAAM8rD,GAId,GAAuB,IAAlBg8E,EAAOztI,OAEX,OAAOytI,EAAQ,GAMhB,IAFA,IAAMtuH,EAAQ,IAAI21E,GAER/0F,EAAI,EAAGonC,EAAKsmG,EAAOztI,OAAQD,EAAIonC,EAAIpnC,IAE5Cof,EAAMooB,IAAKkmG,EAAQ1tI,IAIpB,OAAOof,O,wBAWT,SAAYk0H,GAEX,IAAI1uG,EACE2uG,EAAY9xI,KAAKyoG,KAAKrV,QAASy+C,GAC/B5sI,EAAS6sI,EAAWA,EAAU7rH,MAEpC,GAAOhhB,EAqBP,MAdwB,gBAAnB6sI,EAAU7rH,KAEdkd,EAAS,IAAIgqB,GAAmBj8B,GAAUyB,SAAU1tB,EAAO8sI,MAAQ9sI,EAAO+sI,aAAe,EAAG/sI,EAAOgtI,OAAS,EAAGhtI,EAAOitI,MAAQ,KAEhG,iBAAnBJ,EAAU7rH,OAErBkd,EAAS,IAAIy3E,IAAsB31G,EAAOktI,KAAMltI,EAAOktI,KAAMltI,EAAOmtI,MAAQntI,EAAOmtI,KAAMntI,EAAOgtI,MAAOhtI,EAAOitI,OAI1GJ,EAAUttI,OAAO2+B,EAAO3+B,KAAOxE,KAAKsiI,iBAAkBwP,EAAUttI,OAErE6lI,GAAwBlnG,EAAQ2uG,GAEzB9vI,QAAQR,QAAS2hC,GAnBvB7d,QAAQM,KAAM,kD,sBA4BhB,SAAUiiF,GAET,IAAMwqC,EAAUryI,KAAKyoG,KAAKsjC,MAAOlkC,GAE3ByqC,EAAY,CAAEz+C,OAAQw+C,EAAQx+C,QAEpC,YAAqCtxF,IAAhC8vI,EAAQE,oBAELvwI,QAAQR,QAAS8wI,GAIlBtyI,KAAKmkI,cAAe,WAAYkO,EAAQE,qBAAsBtwI,MAAM,SAAWuwI,GAIrF,OAFAF,EAAUC,oBAAsBC,EAEzBF,O,2BAWT,SAAeG,GAYd,IAVA,IAEMC,EAFO1yI,KAAKyoG,KAEQz1D,WAAYy/F,GAEhCE,EAAe,GACfC,EAAwB,GACxBC,EAAyB,GACzBC,EAAkB,GAClBC,EAAiB,GAEbx0I,EAAI,EAAGonC,EAAK+sG,EAAaM,SAASx0I,OAAQD,EAAIonC,EAAIpnC,IAAO,CAElE,IAAM6yC,EAAUshG,EAAaM,SAAUz0I,GACjC0wI,EAAUyD,EAAaxD,SAAU99F,EAAQ69F,SACzC5wI,EAAS+yC,EAAQ/yC,OACjBmG,OAAuBjC,IAAhBlE,EAAOkhH,KAAqBlhH,EAAOkhH,KAAOlhH,EAAO21C,GACxDi/F,OAAoC1wI,IAA5BmwI,EAAan9F,WAA2Bm9F,EAAan9F,WAAY05F,EAAQgE,OAAUhE,EAAQgE,MACnG13G,OAAqCh5B,IAA5BmwI,EAAan9F,WAA2Bm9F,EAAan9F,WAAY05F,EAAQ1zG,QAAW0zG,EAAQ1zG,OAE3Go3G,EAAaxuI,KAAMnE,KAAKmkI,cAAe,OAAQ3/H,IAC/CouI,EAAsBzuI,KAAMnE,KAAKmkI,cAAe,WAAY8O,IAC5DJ,EAAuB1uI,KAAMnE,KAAKmkI,cAAe,WAAY5oG,IAC7Du3G,EAAgB3uI,KAAM8qI,GACtB8D,EAAe5uI,KAAM9F,GAItB,OAAO2D,QAAQ64H,IAAK,CAEnB74H,QAAQ64H,IAAK8X,GACb3wI,QAAQ64H,IAAK+X,GACb5wI,QAAQ64H,IAAKgY,GACb7wI,QAAQ64H,IAAKiY,GACb9wI,QAAQ64H,IAAKkY,KAEV9wI,MAAM,SAAW0pI,GAUpB,IARA,IAAMhK,EAAQgK,EAAc,GACtBuH,EAAiBvH,EAAc,GAC/BwH,EAAkBxH,EAAc,GAChCuD,EAAWvD,EAAc,GACzByH,EAAUzH,EAAc,GAExBx/B,EAAS,GARoB,WAUzB5tG,EAAOonC,GAEhB,IAAM45E,EAAOoiB,EAAOpjI,GACd80I,EAAgBH,EAAgB30I,GAChC+0I,EAAiBH,EAAiB50I,GAClC0wI,EAAUC,EAAU3wI,GACpBF,EAAS+0I,EAAS70I,GAExB,QAAcgE,IAATg9G,EAAqB,iBAE1BA,EAAKrsE,eACLqsE,EAAK3kF,kBAAmB,EAExB,IAAIm4E,OAAkB,EAEtB,OAAS02B,GAAmBprI,EAAO0G,OAElC,KAAK0kI,GAAkB3b,QAEtB/a,EAAqBI,GACrB,MAED,KAAKs2B,GAAkBhxG,SAEtBs6E,EAAqBO,GACrB,MAED,KAAKm2B,GAAkBt6F,SACvB,KAAKs6F,GAAkBr6F,MACvB,QAEC2jE,EAAqBS,GAKvB,IAAM+/B,EAAah0B,EAAK/6G,KAAO+6G,EAAK/6G,KAAO+6G,EAAK9kF,KAE1C62E,OAA0C/uG,IAA1B0sI,EAAQ39B,cAA8Bq4B,GAAesF,EAAQ39B,eAAkB7iF,GAE/Fg8G,EAAc,GAEfhB,GAAmBprI,EAAO0G,QAAW0kI,GAAkB3b,QAG3DvO,EAAKrrE,UAAU,SAAWjzC,IAEF,IAAlBA,EAAOm0C,QAAmBn0C,EAAOooD,uBAErCohF,EAAYtmI,KAAMlD,EAAOuD,KAAOvD,EAAOuD,KAAOvD,EAAOw5B,SAQvDgwG,EAAYtmI,KAAMovI,GAInB,IAAIC,EAAcF,EAAe3jH,MAEjC,GAAK2jH,EAAexxF,WAAa,CAKhC,IAHA,IAAM1S,EAAQ27F,GAA6ByI,EAAYh0I,aACjDi0I,EAAS,IAAIlwF,aAAciwF,EAAYh1I,QAEnC2gB,EAAI,EAAGgmC,EAAKquF,EAAYh1I,OAAQ2gB,EAAIgmC,EAAIhmC,IAEjDs0H,EAAQt0H,GAAMq0H,EAAar0H,GAAMiwB,EAIlCokG,EAAcC,EAIf,IAAM,IAAIt0H,EAAI,EAAGgmC,EAAKslF,EAAYjsI,OAAQ2gB,EAAIgmC,EAAIhmC,IAAO,CAExD,IAAMitF,EAAQ,IAAI2G,EACjB03B,EAAatrH,GAAM,IAAMsqH,GAAmBprI,EAAO0G,MACnDsuI,EAAc1jH,MACd6jH,EACAliC,GAI8B,gBAA1B29B,EAAQ39B,gBAEZlF,EAAMkB,kBAAoB,SAAkDztG,GAM3E,OAAO,IAAI2nI,GAA4BxnI,KAAKsrG,MAAOtrG,KAAKkH,OAAQlH,KAAKssG,eAAiB,EAAGzsG,IAK1FusG,EAAMkB,kBAAkBC,2CAA4C,GAIrEpB,EAAOhoG,KAAMioG,KAzGL7tG,EAAI,EAAGonC,EAAKg8F,EAAMnjI,OAAQD,EAAIonC,EAAIpnC,IAAO,EAAzCA,GA+GV,IAAMiG,EAAOkuI,EAAaluI,KAAOkuI,EAAaluI,KAAO,aAAeiuI,EAEpE,OAAO,IAAIh/B,GAAejvG,OAAMjC,EAAW4pG,Q,4BAM7C,SAAgBy1B,GAEf,IAAMn5B,EAAOzoG,KAAKyoG,KACZqP,EAAS93G,KACT8hI,EAAUr5B,EAAKk5B,MAAOC,GAE5B,YAAsBr/H,IAAjBu/H,EAAQ7xE,KAA4B,KAElC6nD,EAAOqsB,cAAe,OAAQrC,EAAQ7xE,MAAOhuD,MAAM,SAAWguD,GAEpE,IAAMsvD,EAAOzH,EAAO0qB,YAAa1qB,EAAOozB,UAAWpJ,EAAQ7xE,KAAMA,GAmBjE,YAhByB1tD,IAApBu/H,EAAQhU,SAEZvO,EAAKrrE,UAAU,SAAW5zC,GAEzB,GAAOA,EAAE80C,OAET,IAAM,IAAI72C,EAAI,EAAGonC,EAAKm8F,EAAQhU,QAAQtvH,OAAQD,EAAIonC,EAAIpnC,IAErD+B,EAAE+oD,sBAAuB9qD,GAAMujI,EAAQhU,QAASvvH,MAQ5CghH,O,sBAWT,SAAUqiB,GAET,IAAMn5B,EAAOzoG,KAAKyoG,KACZj8C,EAAaxsD,KAAKwsD,WAClBsrD,EAAS93G,KAET8hI,EAAUr5B,EAAKk5B,MAAOC,GAGtBniB,EAAWqiB,EAAQt9H,KAAOszG,EAAOwqB,iBAAkBR,EAAQt9H,MAAS,GAE1E,OAAS,WAER,IAAMsiH,EAAU,GAEV4sB,EAAc57B,EAAO00B,YAAY,SAAWjB,GAEjD,OAAOA,EAAIoI,gBAAkBpI,EAAIoI,eAAgB/R,MA8BlD,OA1BK8R,GAEJ5sB,EAAQ3iH,KAAMuvI,QAISnxI,IAAnBu/H,EAAQ3+F,QAEZ2jF,EAAQ3iH,KAAM2zG,EAAOqsB,cAAe,SAAUrC,EAAQ3+F,QAASlhC,MAAM,SAAWkhC,GAE/E,OAAO20E,EAAO0qB,YAAa1qB,EAAOqzB,YAAarJ,EAAQ3+F,OAAQA,OAMjE20E,EAAOwzB,YAAY,SAAWC,GAE7B,OAAOA,EAAIqI,sBAAwBrI,EAAIqI,qBAAsBhS,MAE1D74H,SAAS,SAAWib,GAEvB8iG,EAAQ3iH,KAAM6f,MAIRhiB,QAAQ64H,IAAK/T,GApCZ,GAsCH7kH,MAAM,SAAWg/D,GAEtB,IAAIs+C,EAqBJ,IAhBCA,GAFuB,IAAnBuiB,EAAQ35B,OAEL,IAAID,GAEAjnC,EAAQziE,OAAS,EAErB,IAAI80F,GAEmB,IAAnBryB,EAAQziE,OAEZyiE,EAAS,GAIT,IAAI9uB,MAIE8uB,EAAS,GAEtB,IAAM,IAAI1iE,EAAI,EAAGonC,EAAKs7B,EAAQziE,OAAQD,EAAIonC,EAAIpnC,IAE7CghH,EAAKx5E,IAAKk7B,EAAS1iE,IAiBrB,GAXKujI,EAAQt9H,OAEZ+6G,EAAKtsE,SAASzuC,KAAOs9H,EAAQt9H,KAC7B+6G,EAAK/6G,KAAOi7G,GAIb4qB,GAAwB9qB,EAAMuiB,GAEzBA,EAAQt1E,YAAay9E,GAAgCz9E,EAAY+yD,EAAMuiB,QAEpDv/H,IAAnBu/H,EAAQjpG,OAAuB,CAEnC,IAAMA,EAAS,IAAI0T,GACnB1T,EAAOC,UAAWgpG,EAAQjpG,QAC1B0mF,EAAKn8E,aAAcvK,aAIUt2B,IAAxBu/H,EAAQ4H,aAEZnqB,EAAKpwE,SAASrW,UAAWgpG,EAAQ4H,kBAIRnnI,IAArBu/H,EAAQrpG,UAEZ8mF,EAAKzgF,WAAWhG,UAAWgpG,EAAQrpG,eAIbl2B,IAAlBu/H,EAAQ1yF,OAEZmwE,EAAKnwE,MAAMtW,UAAWgpG,EAAQ1yF,OAQhC,OAFA0oE,EAAOkzB,aAAapwH,IAAK2kG,EAAM,CAAEt5F,KAAM,QAASpa,MAAO+1H,IAEhDriB,O,uBAWT,SAAWs0B,GAEV,IAAMprC,EAAOzoG,KAAKyoG,KACZj8C,EAAaxsD,KAAKwsD,WAClBsnF,EAAW9zI,KAAKyoG,KAAKmjC,OAAQiI,GAK7BzkF,EAAQ,IAAIkkC,GACbwgD,EAAStvI,OAAO4qD,EAAM5qD,KALZxE,KAK0BsiI,iBAAkBwR,EAAStvI,OAEpE6lI,GAAwBj7E,EAAO0kF,GAE1BA,EAAStnF,YAAay9E,GAAgCz9E,EAAY4C,EAAO0kF,GAM9E,IAJA,IAAMC,EAAUD,EAASnS,OAAS,GAE5B7a,EAAU,GAENvoH,EAAI,EAAGonC,EAAKouG,EAAQv1I,OAAQD,EAAIonC,EAAIpnC,IAE7CuoH,EAAQ3iH,KAAM6vI,GAAmBD,EAASx1I,GAAK6wD,EAAOq5C,EAjBxCzoG,OAqBf,OAAOgC,QAAQ64H,IAAK/T,GAAU7kH,MAAM,WAEnC,OAAOmtD,S,KAQV,SAAS4kF,GAAmBC,EAAQC,EAAczrC,EAAMqP,GAEvD,IAAMgqB,EAAUr5B,EAAKk5B,MAAOsS,GAE5B,OAAOn8B,EAAOqsB,cAAe,OAAQ8P,GAAShyI,MAAM,SAAWs9G,GAE9D,YAAsBh9G,IAAjBu/H,EAAQqK,KAA4B5sB,EAMlCzH,EAAOqsB,cAAe,OAAQrC,EAAQqK,MAAOlqI,MAAM,SAAWkqI,GAMpE,IAFA,IAAMgI,EAAgB,GAEZ51I,EAAI,EAAGonC,GAJjB2sG,EAAYnG,GAIoBt4C,OAAOr1F,OAAQD,EAAIonC,EAAIpnC,IAEtD41I,EAAchwI,KAAM2zG,EAAOqsB,cAAe,OAAQmO,EAAUz+C,OAAQt1F,KAIrE,OAAOyD,QAAQ64H,IAAKsZ,MAEjBlyI,MAAM,SAAWmyI,GAuCpB,OArCA70B,EAAKrrE,UAAU,SAAW+b,GAEzB,GAAOA,EAAK7a,OAAZ,CAKA,IAHA,IAAM4nC,EAAQ,GACRirB,EAAe,GAEX9oF,EAAI,EAAGgmC,EAAKivF,EAAW51I,OAAQ2gB,EAAIgmC,EAAIhmC,IAAO,CAEvD,IAAMk1H,EAAYD,EAAYj1H,GAE9B,GAAKk1H,EAAY,CAEhBr3D,EAAM74E,KAAMkwI,GAEZ,IAAMC,EAAM,IAAI/nG,QAEuBhqC,IAAlC+vI,EAAUC,qBAEd+B,EAAIx7G,UAAWw5G,EAAUC,oBAAoB5iH,MAAW,GAAJxQ,GAIrD8oF,EAAa9jG,KAAMmwI,QAInBhvH,QAAQM,KAAM,mDAAoD0sH,EAAUz+C,OAAQ10E,IAMtF8wC,EAAKznD,KAAM,IAAI8/F,GAAUtrB,EAAOirB,GAAgBh4C,EAAKzsB,iBAI/C+7E,KAvDR,IAAI+yB,KA2DDrwI,MAAM,SAAWs9G,GAIpB20B,EAAanuG,IAAKw5E,GAElB,IAAMuH,EAAU,GAEhB,GAAKgb,EAAQ/7H,SAIZ,IAFA,IAAMA,EAAW+7H,EAAQ/7H,SAEfxH,EAAI,EAAGonC,EAAK5/B,EAASvH,OAAQD,EAAIonC,EAAIpnC,IAAO,CAErD,IAAMyJ,EAAQjC,EAAUxH,GACxBuoH,EAAQ3iH,KAAM6vI,GAAmBhsI,EAAOu3G,EAAM9W,EAAMqP,IAMtD,OAAO91G,QAAQ64H,IAAK/T,MA+HtB,SAASwqB,GAAwB/qG,EAAUokG,EAAc7yB,GAExD,IAAMruF,EAAakhH,EAAalhH,WAE1Bq9F,EAAU,GAEhB,SAASytB,EAAyBjH,EAAexR,GAEhD,OAAOhkB,EAAOqsB,cAAe,WAAYmJ,GACvCrrI,MAAM,SAAWuwI,GAEjBjsG,EAASte,aAAc6zG,EAAe0W,MAMzC,IAAM,IAAMgC,KAAqB/qH,EAAa,CAE7C,IAAMi8G,EAAqBC,GAAY6O,IAAuBA,EAAkBjnI,cAG3Em4H,KAAsBn/F,EAAS9c,YAEpCq9F,EAAQ3iH,KAAMowI,EAAyB9qH,EAAY+qH,GAAqB9O,IAIzE,QAA8BnjI,IAAzBooI,EAAavlF,UAA2B7e,EAAS16B,MAAQ,CAE7D,IAAM2mI,EAAW16B,EAAOqsB,cAAe,WAAYwG,EAAavlF,SAAUnjD,MAAM,SAAWuwI,GAE1FjsG,EAAS0hB,SAAUuqF,MAIpB1rB,EAAQ3iH,KAAMquI,GAQf,OAJAnI,GAAwB9jG,EAAUokG,GA5JnC,SAAwBpkG,EAAUokG,EAAc7yB,GAE/C,IAAMruF,EAAakhH,EAAalhH,WAE1Bwc,EAAM,IAAIjB,GAEhB,QAA6BziC,IAAxBknB,EAAWw/G,SAAhB,CAEC,IAAMuJ,EAAW16B,EAAOrP,KAAKo9B,UAAWp8G,EAAWw/G,UAE7Cl0H,EAAMy9H,EAASz9H,IACfC,EAAMw9H,EAASx9H,IAIrB,QAAazS,IAARwS,QAA6BxS,IAARyS,EAA1B,CAOC,GALAixB,EAAIrrB,IACH,IAAIynB,GAASttB,EAAK,GAAKA,EAAK,GAAKA,EAAK,IACtC,IAAIstB,GAASrtB,EAAK,GAAKA,EAAK,GAAKA,EAAK,KAGlCw9H,EAAS1wF,WAAa,CAE1B,IAAM2yF,EAAW1J,GAA6BhF,GAAuByM,EAAS1M,gBAC9E7/F,EAAIlxB,IAAIgf,eAAgB0gH,GACxBxuG,EAAIjxB,IAAI+e,eAAgB0gH,GAkB3B,IAAMrB,EAAUzI,EAAayI,QAE7B,QAAiB7wI,IAAZ6wI,EAAwB,CAK5B,IAHA,IAAMsB,EAAkB,IAAIryG,GACtB+D,EAAS,IAAI/D,GAET9jC,EAAI,EAAGonC,EAAKytG,EAAQ50I,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEpD,IAAMF,EAAS+0I,EAAS70I,GAExB,QAAyBgE,IAApBlE,EAAO4qI,SAAyB,CAEpC,IAAMuJ,EAAW16B,EAAOrP,KAAKo9B,UAAWxnI,EAAO4qI,UACzCl0H,EAAMy9H,EAASz9H,IACfC,EAAMw9H,EAASx9H,IAIrB,QAAazS,IAARwS,QAA6BxS,IAARyS,EAAoB,CAQ7C,GALAoxB,EAAOkoG,KAAMx9H,KAAKkE,IAAKlE,KAAKihB,IAAKhd,EAAK,IAAOjE,KAAKihB,IAAK/c,EAAK,MAC5DoxB,EAAOmoG,KAAMz9H,KAAKkE,IAAKlE,KAAKihB,IAAKhd,EAAK,IAAOjE,KAAKihB,IAAK/c,EAAK,MAC5DoxB,EAAOooG,KAAM19H,KAAKkE,IAAKlE,KAAKihB,IAAKhd,EAAK,IAAOjE,KAAKihB,IAAK/c,EAAK,MAGvDw9H,EAAS1wF,WAAa,CAE1B,IAAM2yF,EAAW1J,GAA6BhF,GAAuByM,EAAS1M,gBAC9E1/F,EAAOrS,eAAgB0gH,GAQxBC,EAAgB1/H,IAAKoxB,QAIrB9gB,QAAQM,KAAM,wEASjBqgB,EAAI0uG,eAAgBD,GAIrBnuG,EAASC,YAAcP,EAEvB,IAAMW,EAAS,IAAIgC,GAEnB3C,EAAIgB,UAAWL,EAAO3R,QACtB2R,EAAOnC,OAASwB,EAAIlxB,IAAIg0B,WAAY9C,EAAIjxB,KAAQ,EAEhDuxB,EAAS2d,eAAiBtd,OA1ExBthB,QAAQM,KAAM,wEA8HhBgvH,CAAeruG,EAAUokG,EAAc7yB,GAEhC91G,QAAQ64H,IAAK/T,GAAU7kH,MAAM,WAEnC,YAAgCM,IAAzBooI,EAAayI,QA/kEtB,SAA0B7sG,EAAU6sG,EAASt7B,GAK5C,IAHA,IAAI+8B,GAAmB,EACnBC,GAAiB,EAEXv2I,EAAI,EAAGonC,EAAKytG,EAAQ50I,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEpD,IAAMF,EAAS+0I,EAAS70I,GAKxB,QAHyBgE,IAApBlE,EAAO4qI,WAAyB4L,GAAmB,QACjCtyI,IAAlBlE,EAAO6qI,SAAuB4L,GAAiB,GAE/CD,GAAoBC,EAAiB,MAI3C,IAAOD,IAAsBC,EAAiB,OAAO9yI,QAAQR,QAAS+kC,GAKtE,IAHA,IAAMwuG,EAA2B,GAC3BC,EAAyB,GAErBz2I,EAAI,EAAGonC,EAAKytG,EAAQ50I,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEpD,IAAMF,EAAS+0I,EAAS70I,GAExB,GAAKs2I,EAAmB,CAEvB,IAAMI,OAAsC1yI,IAApBlE,EAAO4qI,SAC5BnxB,EAAOqsB,cAAe,WAAY9lI,EAAO4qI,UACzC1iG,EAAS9c,WAAW0lB,SAEvB4lG,EAAyB5wI,KAAM8wI,GAIhC,GAAKH,EAAiB,CAErB,IAAMG,OAAoC1yI,IAAlBlE,EAAO6qI,OAC5BpxB,EAAOqsB,cAAe,WAAY9lI,EAAO6qI,QACzC3iG,EAAS9c,WAAW6a,OAEvB0wG,EAAuB7wI,KAAM8wI,IAM/B,OAAOjzI,QAAQ64H,IAAK,CACnB74H,QAAQ64H,IAAKka,GACb/yI,QAAQ64H,IAAKma,KACV/yI,MAAM,SAAW4jI,GAEpB,IAAMqP,EAAiBrP,EAAW,GAC5BjmF,EAAeimF,EAAW,GAMhC,OAJKgP,IAAmBtuG,EAASyd,gBAAgB7U,SAAW+lG,GACvDJ,IAAiBvuG,EAASyd,gBAAgB1f,OAASsb,GACxDrZ,EAAS0d,sBAAuB,EAEzB1d,KAqhEJ4uG,CAAiB5uG,EAAUokG,EAAayI,QAASt7B,GACjDvxE,KAWL,SAASorG,GAAqBprG,EAAUiuF,GAEvC,IAAI3oH,EAAQ06B,EAAS6uG,WAIrB,GAAe,OAAVvpI,EAAiB,CAErB,IAAMu5C,EAAU,GAEVjW,EAAW5I,EAAS9xB,aAAc,YAExC,QAAkBlS,IAAb4sC,EAcJ,OADA7pB,QAAQxjB,MAAO,kGACRykC,EAZP,IAAM,IAAIhoC,EAAI,EAAGA,EAAI4wC,EAAS3J,MAAOjnC,IAEpC6mD,EAAQjhD,KAAM5F,GAIfgoC,EAAS0hB,SAAU7C,GACnBv5C,EAAQ06B,EAAS6uG,WAanB,IAAMC,EAAoBxpI,EAAM25B,MAAQ,EAClC8vG,EAAa,GAEnB,GAjwuC2B,IAiwuCtB9gB,EAIJ,IAAM,IAAIj2H,EAAI,EAAGA,GAAK82I,EAAmB92I,IAExC+2I,EAAWnxI,KAAM0H,EAAMkpB,KAAM,IAC7BugH,EAAWnxI,KAAM0H,EAAMkpB,KAAMx2B,IAC7B+2I,EAAWnxI,KAAM0H,EAAMkpB,KAAMx2B,EAAI,SAQlC,IAAM,IAAIA,EAAI,EAAGA,EAAI82I,EAAmB92I,IAElCA,EAAI,IAAM,GAEd+2I,EAAWnxI,KAAM0H,EAAMkpB,KAAMx2B,IAC7B+2I,EAAWnxI,KAAM0H,EAAMkpB,KAAMx2B,EAAI,IACjC+2I,EAAWnxI,KAAM0H,EAAMkpB,KAAMx2B,EAAI,MAKjC+2I,EAAWnxI,KAAM0H,EAAMkpB,KAAMx2B,EAAI,IACjC+2I,EAAWnxI,KAAM0H,EAAMkpB,KAAMx2B,EAAI,IACjC+2I,EAAWnxI,KAAM0H,EAAMkpB,KAAMx2B,KAQzB+2I,EAAW92I,OAAS,IAAQ62I,GAElC/vH,QAAQxjB,MAAO,2FAMhB,IAAMyzI,EAAchvG,EAASjI,QAG7B,OAFAi3G,EAAYttF,SAAUqtF,GAEfC,EAIR,IAAoDpyI,GAAEqyI,GAAItyI,GAAEyH,GAAEytB,GAAE93B,GAAE0I,GAAE1F,GAAYmtB,GAA1ErtB,GAAE,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAoCqtB,GAAuFttB,KAAIA,GAAE,KAAxFstB,GAAEglH,KAAK,GAAG,OAAOhlH,GAAEA,GAAEilH,QAAQ,GAAG,UAAUjlH,GAAEA,GAAEklH,KAAK,GAAG,OAAOllH,GAAEA,GAAEmlH,KAAK,GAAG,OAAoB,SAASnlH,GAAGA,EAAEA,EAAEolH,YAAY,GAAG,cAA/B,CAA+CL,KAAMA,GAAI,KAAK,SAAS/kH,GAAGA,EAAEA,EAAEqlH,YAAY,GAAG,cAAcrlH,EAAEA,EAAEslH,MAAM,KAAK,QAAQtlH,EAAEA,EAAEulH,MAAM,KAAK,QAAnF,CAA6F9yI,KAAIA,GAAE,KAAK,SAASutB,GAAGA,EAAEA,EAAEqlH,YAAY,GAAG,cAAcrlH,EAAEA,EAAEwlH,KAAK,GAAG,OAAzD,CAAkEtrI,KAAIA,GAAE,KAAK,SAAS8lB,GAAGA,EAAEA,EAAEqlH,YAAY,GAAG,cAAcrlH,EAAEA,EAAEo5G,OAAO,GAAG,SAASp5G,EAAEA,EAAEwlH,KAAK,GAAG,OAAOxlH,EAAEA,EAAEylH,IAAI,GAAG,MAAMzlH,EAAEA,EAAE0lH,KAAK,GAAG,OAAO1lH,EAAEA,EAAE2lH,KAAK,GAAG,OAAO3lH,EAAEA,EAAE4lH,MAAM,GAAG,QAA3J,CAAqKj+G,KAAIA,GAAE,KAAK,SAAS3H,GAAGA,EAAEA,EAAE6lH,eAAe,GAAG,iBAAiB7lH,EAAEA,EAAE8lH,oBAAoB,GAAG,sBAA9E,CAAsGj2I,KAAIA,GAAE,KAAK,SAASmwB,GAAGA,EAAEA,EAAE+lH,IAAI,GAAG,MAAM/lH,EAAEA,EAAEgmH,IAAI,GAAG,MAAMhmH,EAAEA,EAAEimH,IAAI,GAAG,MAAMjmH,EAAEA,EAAEkmH,IAAI,IAAI,MAA3E,CAAmF3tI,KAAIA,GAAE,KAAK,SAASynB,GAAGA,EAAEA,EAAE+lH,IAAI,GAAG,MAAM/lH,EAAEA,EAAEmmH,KAAK,GAAG,OAAOnmH,EAAEA,EAAEgmH,IAAI,GAAG,MAAMhmH,EAAEA,EAAEomH,KAAK,GAAG,OAA7E,CAAsFvzI,KAAIA,GAAE,K,IAAWwzI,GAAE,aAAa,oBAAC92I,KAAK+2I,SAAS,EAAE/2I,KAAKg3I,SAAS,EAAEh3I,KAAKi3I,WAAW,EAAEj3I,KAAKk3I,YAAY,EAAEl3I,KAAKm3I,WAAW,EAAEn3I,KAAKo3I,WAAW,EAAEp3I,KAAKq3I,UAAU,EAAEr3I,KAAKs3I,uBAAuBn0I,GAAEsyI,KAAKz1I,KAAKu3I,OAAO,GAAGv3I,KAAKw3I,qBAAqB,CAAC,CAACC,SAAS,EAAEC,eAAelC,GAAIK,YAAY8B,cAAc,EAAEC,oBAAoB,GAAGC,WAAW30I,GAAE4yI,YAAYgC,eAAentI,GAAEsrI,KAAK8B,iBAAiBptI,GAAEsrI,KAAKx3H,MAAMne,GAAEg2I,eAAe0B,oBAAoB,CAACl8H,EAAE,EAAEC,EAAE,EAAEugB,EAAE,EAAE1I,EAAE,GAAGqkH,WAAW,GAAGlnD,QAAQ,KAAK/wF,KAAKk4I,SAAS,GAAGl4I,KAAKm4I,WAAW,MAAa75H,G,WAAE,SAAAA,EAAYmS,EAAErtB,EAAED,EAAE5E,GAAE,oBAACyB,KAAKo4I,UAAU,IAAIhtC,SAAS36E,EAAEjnB,OAAOinB,EAAE6zG,WAAWlhI,EAAED,GAAGnD,KAAKq4I,cAAc95I,EAAEyB,KAAK2jD,QAAQ,E,8CAAG,WAAa,IAAMlzB,EAAEzwB,KAAKo4I,UAAUrJ,SAAS/uI,KAAK2jD,SAAS,OAAO3jD,KAAK2jD,SAAS,EAAElzB,I,yBAAE,WAAc,IAAMA,EAAEzwB,KAAKo4I,UAAUE,UAAUt4I,KAAK2jD,QAAQ3jD,KAAKq4I,eAAe,OAAOr4I,KAAK2jD,SAAS,EAAElzB,I,yBAAE,WAAc,IAAMA,EAAEzwB,KAAKo4I,UAAUxT,UAAU5kI,KAAK2jD,QAAQ3jD,KAAKq4I,eAAe,OAAOr4I,KAAK2jD,SAAS,EAAElzB,I,yBAAE,WAAc,IAAMA,EAAEzwB,KAAKo4I,UAAUxT,UAAU5kI,KAAK2jD,QAAQ3jD,KAAKq4I,eAAe,WAAG,IAAGr4I,KAAKo4I,UAAUxT,UAAU5kI,KAAK2jD,QAAQ,EAAE3jD,KAAKq4I,eAAe,OAAOr4I,KAAK2jD,SAAS,EAAElzB,I,mBAAE,SAAMA,GAAG,OAAOzwB,KAAK2jD,SAASlzB,EAAEzwB,O,mBAAK,SAAMywB,GAAoC,IAA9B,IAAJrtB,EAAI,uDAAF,EAASD,EAAEnD,KAAK2jD,QAAYplD,EAAE,EAAOyB,KAAKo4I,UAAUrJ,SAAS/uI,KAAK2jD,WAAWvgD,GAAG7E,EAAEkyB,GAAGlyB,IAAIyB,KAAK2jD,UAAU,OAAOplD,EAAEkyB,GAAGzwB,KAAK2jD,UAAU,IAAIsQ,WAAWj0D,KAAKo4I,UAAU5uI,OAAOxJ,KAAKo4I,UAAU9T,WAAWnhI,EAAE5E,O,KAAI,SAASg6I,GAAE9nH,GAAG,MAAO,oBAAoB2qF,aAAa,IAAIA,aAAaC,OAAO5qF,GAAG+nH,EAAOtsI,KAAKukB,GAAGhoB,SAAS,QAeryE,IAkvBI8gE,GAAMtrE,GAAUw6I,GAlvBdC,GAAa,IAAIzlF,QAEjB0lF,G,kDAEL,WAAa3hC,GAAU,kCAEtB,cAAOA,IAEF4hC,eAAiB,GACtB,EAAKC,iBAAmB,KACxB,EAAKC,kBAAoB,KAEzB,EAAK/f,YAAc,EACnB,EAAKC,WAAa,GAClB,EAAKC,iBAAmB,EACxB,EAAKC,gBAAkB,GACvB,EAAK6f,aAAe,KAZE,E,qDAgBvB,SAAmBh0I,GAIlB,OAFA/E,KAAK44I,eAAiB7zI,EAEf/E,O,4BAIR,SAAgB+4H,GAIf,OAFA/4H,KAAK+4H,YAAcA,EAEZ/4H,O,2BAIR,SAAemvD,GAYd,OAVAnvD,KAAK+4I,aAAe,CACnBC,cAAe7pF,EAAS3C,WAAWhkC,IAAK,iCACxCywH,cAAe9pF,EAAS3C,WAAWhkC,IAAK,iCACxC0wH,cAAe/pF,EAAS3C,WAAWhkC,IAAK,gCACxC2wH,aAAchqF,EAAS3C,WAAWhkC,IAAK,iCACvC4wH,cAAejqF,EAAS3C,WAAWhkC,IAAK,gCACxC6wH,eAAgBlqF,EAAS3C,WAAWhkC,IAAK,mCACrC2mC,EAAS3C,WAAWhkC,IAAK,0CAGvBxoB,O,kBAIR,SAAMgF,EAAK6wG,EAAQC,EAAYC,GAAU,WAElCa,EAAS,IAAIU,GAAYt3G,KAAKg3G,SAEpCJ,EAAO0B,gBAAiB,eACxB1B,EAAO2B,mBAAoBv4G,KAAKyjB,iBAEhC,IAAMwa,EAAU,IAAIysE,GA2BpB,OAzBAkM,EAAOQ,KAAMpyG,GAAK,SAAEwE,GAInB,GAAKkvI,GAAWlwH,IAAKhf,GAIpB,OAFmBkvI,GAAW33I,IAAKyI,GAEjBwa,QAAQ/hB,KAAM4zG,GAASkG,MAAOhG,GAIjD,EAAKujC,eAAgB,CAAE9vI,IACrBvH,MAAM,SAAWs3I,GAEjBt7G,EAAQ9C,KAAMo+G,GACdt7G,EAAQomB,aAAc,EAEjBwxD,GAASA,EAAQ53E,MAGtB89E,MAAOhG,KAEPD,EAAYC,GAER93E,I,gCAKR,SAAoB53B,GAMnB,IAJA,IAAQkxI,EAAWlxI,EAAXkxI,OAEFvkF,EAAU,IAAIwmF,IAEVj7I,EAAI,EAAGA,EAAIg5I,EAAO/4I,OAAQD,IAEnCy0D,EAAQjtB,IAAKwxG,EAAQh5I,GAAIogB,KAAKnV,QAI/B,OAAOxJ,KAAKs5I,eAAgBv2I,MAAMmJ,KAAM8mD,GAAjC,2BAAiD3sD,GAAjD,IAA0DozI,UAAU,O,4BAS5E,SAAgBzmF,GAQf,IARsC,IAElC0mE,EACAI,EAHkC,OAAdh4G,EAAc,uDAAL,GAK3Bu3G,EAAav3G,EACfi4G,EAAW,EAELx7H,EAAI,EAAGA,EAAIy0D,EAAQx0D,OAAQD,IAEpCw7H,GAAY/mE,EAASz0D,GAAIs7H,WAI1B,IAAM6f,EAAiB15I,KAAK25I,gBAAiB5f,GAC3C93H,MAAM,SAAEi4H,GAKR,OAHAR,EAASQ,EACTJ,EAAS,EAAKb,mBAEP,IAAIj3H,SAAS,SAAER,EAASC,GAE9Bi4H,EAAOS,WAAYL,GAAW,CAAEt4H,UAASC,UAEzCi4H,EAAOU,YAAa,CAAEn0G,KAAM,YAAa+tB,GAAI8lF,EAAQ9mE,QAASA,EAASqmE,WAAYA,GAAcrmE,SAKlG/wD,MAAM,SAAEsJ,GAER,IAAQmvB,EAAmCnvB,EAAnCmvB,QAASpB,EAA0B/tB,EAA1B+tB,MAAOC,EAAmBhuB,EAAnBguB,OAAQe,EAAW/uB,EAAX+uB,OAE1B2D,EAAU,IAAIysE,GAAmBhwE,EAASpB,EAAOC,EAAQe,EAAQ9M,GAMvE,OALAyQ,EAAQ5D,UAA+B,IAAnBK,EAAQl8B,OAAe6uB,EAAeE,EAC1D0Q,EAAQ7D,UAAY/M,EACpB4Q,EAAQpD,iBAAkB,EAC1BoD,EAAQomB,aAAc,EAEfpmB,KAqBT,OAhBAy7G,EACE39B,OAAO,kBAAM,KACb95G,MAAM,WAEDy3H,GAAUI,IAEdJ,EAAO6B,WAAaxB,SACbL,EAAOS,WAAYL,OAO7B4e,GAAW99H,IAAKo4C,EAAS,GAAK,CAAEhvC,QAAS01H,IAElCA,I,6BAIR,WAAkB,WAEjB,IAAO15I,KAAK84I,kBAAoB,CAG/B,IAAMc,EAAW,IAAItiC,GAAYt3G,KAAKg3G,SACtC4iC,EAASvhC,QAASr4G,KAAK44I,gBACvBgB,EAASrhC,mBAAoBv4G,KAAKyjB,iBAClC,IAAMs3G,EAAY,IAAI/4H,SAAS,SAAER,EAASC,GAEzCm4I,EAASxiC,KAAM,sBAAuB51G,OAASe,EAAWd,MAKrDo4I,EAAe,IAAIviC,GAAYt3G,KAAKg3G,SAC1C6iC,EAAaxhC,QAASr4G,KAAK44I,gBAC3BiB,EAAavhC,gBAAiB,eAC9BuhC,EAAathC,mBAAoBv4G,KAAKyjB,iBACtC,IAAMq2H,EAAgB,IAAI93I,SAAS,SAAER,EAASC,GAE7Co4I,EAAaziC,KAAM,wBAAyB51G,OAASe,EAAWd,MAIjEzB,KAAK84I,kBAAoB92I,QAAQ64H,IAAK,CAAEE,EAAW+e,IACjD73I,MAAM,YAAoC,uBAAhC84H,EAAgC,KAArB+e,EAAqB,KAEpC33I,EAAKw2I,EAAmBoB,YAAYtxI,WAEpCyyH,EAAO,CACZ,kBACA,uBAAyBj8G,KAAKC,UAAWy5H,EAAmBqB,cAC5D,2BAA6B/6H,KAAKC,UAAWy5H,EAAmBsB,kBAChE,sBAAwBh7H,KAAKC,UAAWy5H,EAAmBuB,aAC3D,4BACAnf,EACA,eACA54H,EAAGyR,UAAWzR,EAAGqL,QAAS,KAAQ,EAAGrL,EAAGmS,YAAa,OACpDxH,KAAM,MAER,EAAKosH,gBAAkBiC,IAAIC,gBAAiB,IAAIvjB,KAAM,CAAEqjB,KACxD,EAAK2d,iBAAmBiB,KAM3B,OAAO95I,KAAK84I,oB,6BAIb,SAAiB/e,GAAW,WAE3B,OAAO/5H,KAAKm6I,kBAAkBl4I,MAAM,WAEnC,GAAK,EAAK+2H,WAAWx6H,OAAS,EAAKu6H,YAAc,CAEhD,IAAMW,EAAS,IAAI2B,OAAQ,EAAKnC,iBAEhCQ,EAAOS,WAAa,GACpBT,EAAO6B,UAAY,EAEnB7B,EAAOU,YAAa,CACnBn0G,KAAM,OACNnE,OAAQ,EAAKi3H,aACbF,iBAAkB,EAAKA,mBAGxBnf,EAAO8B,UAAY,SAAWp4H,GAE7B,IAAMmI,EAAUnI,EAAEub,KAElB,OAASpT,EAAQ0a,MAEhB,IAAK,YACJyzG,EAAOS,WAAY5uH,EAAQyoC,IAAKxyC,QAAS+J,GACzC,MAED,IAAK,QACJmuH,EAAOS,WAAY5uH,EAAQyoC,IAAKvyC,OAAQ8J,GACxC,MAED,QACC+Z,QAAQxjB,MAAO,kDAAoDyJ,EAAQ0a,KAAO,OAMrF,EAAK+yG,WAAW70H,KAAMu1H,QAItB,EAAKV,WAAW/sD,MAAM,SAAWthE,EAAGC,GAEnC,OAAOD,EAAE4wH,UAAY3wH,EAAE2wH,WAAc,EAAI,KAM3C,IAAM7B,EAAS,EAAKV,WAAY,EAAKA,WAAWx6H,OAAS,GAIzD,OAFAk7H,EAAO6B,WAAaxB,EAEbL,O,qBAMT,WAEC,IAAM,IAAIn7H,EAAI,EAAGA,EAAIyB,KAAKg5H,WAAWx6H,OAAQD,IAE5CyB,KAAKg5H,WAAYz6H,GAAIk9H,YAMtB,OAFAz7H,KAAKg5H,WAAWx6H,OAAS,EAElBwB,S,GAxSwB+2G,IAgTjC4hC,GAAmBuB,YAAc,CAChCnE,MAAO,EACPqE,UAAW,GAGZzB,GAAmBsB,iBAAmB,CACrCI,KAAM,EACNC,KAAM,EACNC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,mBAAoB,EACpBC,OAAQ,EACRC,aAAc,EACdC,cAAe,EACfC,SAAU,GACVC,QAAS,GACTC,4BAA6B,GAC7BC,OAAQ,GACRC,OAAQ,GACRC,OAAQ,GACRC,SAAU,IAGX1C,GAAmBqB,aAAe,CACjCjsH,WAAYA,GACZutH,qBA3rvC4B,MA4rvC5BC,iBA9qvCwB,MA+qvCxBhtH,qBAAsBA,GACtBF,yBAA0BA,GAC1BF,sBAAuBA,GACvBqtH,gBAnsvCuB,MAosvCvBltH,gBAAiBA,GACjBF,wBAAyBA,GACzBF,qBAAsBA,IAMvByqH,GAAmBoB,YAAc,WAEhC,IAAIj4H,EACAg3H,EACA2C,EAEEzB,EAAe0B,cACfzB,EAAmB0B,kBACnBzB,EAAc0B,aAEpBpgB,UAAY,SAAWp4H,GAEtB,IA2Cc43H,EA3CRzvH,EAAUnI,EAAEub,KAElB,OAASpT,EAAQ0a,MAEhB,IAAK,OACJnE,EAASvW,EAAQuW,OAsCLk5G,EArCNzvH,EAAQstI,iBAuChBC,EAAoB,IAAI92I,SAAS,SAAER,GAElCi6I,EAAc,CAAEzgB,aAAY6gB,qBAAsBr6I,GAClDs6I,MAAOL,MAEJx5I,MAAM,WAETw5I,EAAYM,qBA7CX,MAED,IAAK,YACJjD,EAAkB72I,MAAM,WAEvB,IAQC,IANA,MAAqDsJ,EAAQ8tH,WAAWogB,SA4C7E,SAA4BpgB,GAE3B,IAAQ2iB,EAAyC3iB,EAAzC2iB,YAAa1iH,EAA4B+/F,EAA5B//F,MAAOC,EAAqB8/F,EAArB9/F,OAAQs1G,EAAaxV,EAAbwV,SAEpC,EAA2CoN,EAAqBD,EAAa1iH,EAAOC,EAAQs1G,GAApFqN,EAAR,EAAQA,iBAAkBC,EAA1B,EAA0BA,aAEpBC,EAAkBX,EAAYY,wBAAyBH,GAE7DI,EAAQb,EAAYc,kBAAmBL,GAAoB,iDAE3D,IAAMxhH,EAAU,GAEhB,GAAKshH,IAAgB9B,EAAYnE,MAAQ,CAExC,IAAMyG,EAAa,IAAIf,EAAYgB,6BAEnC,EAAmFpjB,EAAW8e,WAAtFuE,EAAR,EAAQA,cAAeC,EAAvB,EAAuBA,cAAeC,EAAtC,EAAsCA,cAAeC,EAArD,EAAqDA,cAAeC,EAApE,EAAoEA,WAEpE,IAMCR,EAFKE,EAAWO,eAAgBL,EAAeC,EAAeC,EAAeC,GAEjE,sDAIZP,EAFKE,EAAWQ,aAAcF,GAElB,oDAEZ,IAAM,IAAIv+I,EAAI,EAAGA,EAAI86H,EAAWke,OAAO/4I,OAAQD,IAAO,CAErD,IAAM0mG,EAAQo0B,EAAWke,OAAQh5I,GAC3B0+I,EAAY5jB,EAAW8e,WAAW+E,WAAY3+I,GAE9C4+I,EAAgBC,EAA8BlB,EAAkBj3C,EAAM3rE,MAAO2rE,EAAM1rE,QACnF4H,EAAM,IAAI8yB,WAAYkpF,GAiB5Bb,EAfKE,EAAWa,eACfnB,EACA/6G,EAAKg8G,EAAgBf,EACrBn3C,EAAMtmF,KACN2+H,EAAkBpB,EAAkBj3C,EAAM3rE,OAC1CikH,EAAmBrB,EAAkBj3C,EAAM1rE,QAC3C0rE,EAAM3rE,MAAO2rE,EAAM1rE,OAAQ0rE,EAAMp5F,MACjCoxI,EAAUO,mBAAoBP,EAAUQ,mBACxCR,EAAUS,qBAAsBT,EAAUU,qBAC1CV,EAAUW,WACV/O,GACA,EACA,EAAG,GAGQ,+DAAiE5pC,EAAMp5F,MAAQ,KAE3F6uB,EAAQv2B,KAAM,CAAEwa,KAAMwiB,EAAK7H,MAAO2rE,EAAM3rE,MAAOC,OAAQ0rE,EAAM1rE,UArC/D,QA2CCijH,EAAWppF,eAMZ,IAAM,IAAI70D,EAAI,EAAGA,EAAI86H,EAAWke,OAAO/4I,OAAQD,IAAO,CAErD,IAAM0mG,EAAQo0B,EAAWke,OAAQh5I,GAE3B4+I,EAAgBC,EAA8BlB,EAAkBj3C,EAAM3rE,MAAO2rE,EAAM1rE,QACnF4H,EAAM,IAAI8yB,WAAYkpF,GAkB5Bb,EAhBWb,EAAYoC,oBACtB3B,EACA/6G,EAAKg8G,EAAgBf,EACrBn3C,EAAMtmF,KACN2+H,EAAkBpB,EAAkBj3C,EAAM3rE,OAC1CikH,EAAmBrB,EAAkBj3C,EAAM1rE,QAC3C0rE,EAAM3rE,MAAO2rE,EAAM1rE,OAAQ0rE,EAAMp5F,MACjC,EACAo5F,EAAMtmF,KAAKk7G,WACX,EACAgV,GACA,EACA,EAAG,GACD,GAAK,GAGI,oEAAsE5pC,EAAMp5F,MAAQ,KAEhG6uB,EAAQv2B,KAAM,CAAEwa,KAAMwiB,EAAK7H,MAAO2rE,EAAM3rE,MAAOC,OAAQ0rE,EAAM1rE,SAM/D,MAAO,CAAED,QAAOC,SAAQs1G,WAAUn0G,UAASJ,OAAQ6hH,GA7I5C2B,CAAmBvyI,EAAQ8tH,YAiJnC,SAAoB7vH,GAEnB,IAAMu0I,EAAY,IAAItC,EAAYuC,UAAW,IAAI/pF,WAAYzqD,IAEvDwyI,EAAc+B,EAAUE,UAAY/D,EAAYE,UAAYF,EAAYnE,MACxEz8G,EAAQykH,EAAUG,cAAe,EAAG,GACpC3kH,EAASwkH,EAAUI,eAAgB,EAAG,GACtC5G,EAASwG,EAAUK,aAAc,GACjCvP,EAAWkP,EAAUM,cAE3B,SAASC,IAERP,EAAUQ,QACVR,EAAU3qF,SAIX,MAA2C6oF,EAAqBD,EAAa1iH,EAAOC,EAAQs1G,GAApFqN,EAAR,EAAQA,iBAAkBC,EAA1B,EAA0BA,aAE1B,IAAO7iH,IAAWC,IAAYg+G,EAG7B,MADA+G,IACM,IAAI9yI,MAAO,8CAIlB,IAAOuyI,EAAUS,mBAGhB,MADAF,IACM,IAAI9yI,MAAO,sDAMlB,IAFA,IAAMkvB,EAAU,GAEN+jH,EAAM,EAAGA,EAAMlH,EAAQkH,IAAS,CAEzC,IAAMC,EAAWX,EAAUG,cAAe,EAAGO,GACvCE,EAAYZ,EAAUI,eAAgB,EAAGM,GACzCt9G,EAAM,IAAI8yB,WAAY8pF,EAAUa,8BAA+B,EAAGH,EAAKvC,IAW7E,IATe6B,EAAUV,eACxBl8G,EACA,EACAs9G,EACAvC,EACA,EACArN,GAMA,MADAyP,IACM,IAAI9yI,MAAO,qDAIlBkvB,EAAQv2B,KAAM,CAAEwa,KAAMwiB,EAAK7H,MAAOolH,EAAUnlH,OAAQolH,IAMrD,OAFAL,IAEO,CAAEhlH,QAAOC,SAAQs1G,WAAUn0G,UAASJ,OAAQ6hH,GA/M5C0C,CAAWtzI,EAAQynD,QAAS,IAFvB15B,EAAR,EAAQA,MAAOC,EAAf,EAAeA,OAAQs1G,EAAvB,EAAuBA,SAAUn0G,EAAjC,EAAiCA,QAASJ,EAA1C,EAA0CA,OAIpC04B,EAAU,GAENz0D,EAAI,EAAGA,EAAIm8B,EAAQl8B,SAAWD,EAEvCy0D,EAAQ7uD,KAAMu2B,EAASn8B,GAAIogB,KAAKnV,QAIjCpH,KAAKg4H,YAAa,CAAEn0G,KAAM,YAAa+tB,GAAIzoC,EAAQyoC,GAAI1a,QAAOC,SAAQs1G,WAAUn0G,UAASJ,UAAU04B,GAElG,MAAQlxD,GAETwjB,QAAQxjB,MAAOA,GAEfM,KAAKg4H,YAAa,CAAEn0G,KAAM,QAAS+tB,GAAIzoC,EAAQyoC,GAAIlyC,MAAOA,EAAMyJ,gBA4MrE,IAAMuzI,EAAiB,CACtB,CACCC,GAAI,gBACJ/C,YAAa,CAAE9B,EAAYE,WAC3B8B,iBAAkB,CAAEjC,EAAiBc,SAAUd,EAAiBc,UAChEoB,aAAc,CAAEnC,EAAasB,qBAAsBtB,EAAasB,sBAChE0D,cAAe/5G,IACfg6G,cAAe,EACfnyD,iBAAiB,GAElB,CACCiyD,GAAI,gBACJ/C,YAAa,CAAE9B,EAAYnE,MAAOmE,EAAYE,WAC9C8B,iBAAkB,CAAEjC,EAAiBW,OAAQX,EAAiBW,QAC9DuB,aAAc,CAAEnC,EAAauB,iBAAkBvB,EAAauB,kBAC5DyD,cAAe,EACfC,cAAe,EACfnyD,iBAAiB,GAElB,CACCiyD,GAAI,eACJ/C,YAAa,CAAE9B,EAAYnE,MAAOmE,EAAYE,WAC9C8B,iBAAkB,CAAEjC,EAAiBM,IAAKN,EAAiBO,KAC3D2B,aAAc,CAAEnC,EAAa9rH,qBAAsB8rH,EAAa7rH,uBAChE6wH,cAAe,EACfC,cAAe,EACfnyD,iBAAiB,GAElB,CACCiyD,GAAI,gBACJ/C,YAAa,CAAE9B,EAAYnE,MAAOmE,EAAYE,WAC9C8B,iBAAkB,CAAEjC,EAAiBI,KAAMJ,EAAiBK,MAC5D6B,aAAc,CAAEnC,EAAa1rH,gBAAiB0rH,EAAazrH,sBAC3DywH,cAAe,EACfC,cAAe,EACfnyD,iBAAiB,GAElB,CACCiyD,GAAI,gBACJ/C,YAAa,CAAE9B,EAAYnE,MAAOmE,EAAYE,WAC9C8B,iBAAkB,CAAEjC,EAAiBI,KAAMJ,EAAiBI,MAC5D8B,aAAc,CAAEnC,EAAawB,gBAAiBxB,EAAawB,iBAC3DwD,cAAe,EACfC,cAAe,EACfnyD,iBAAiB,GAElB,CACCiyD,GAAI,iBACJ/C,YAAa,CAAE9B,EAAYnE,MAAOmE,EAAYE,WAC9C8B,iBAAkB,CAAEjC,EAAiBY,aAAcZ,EAAiBa,eACpEqB,aAAc,CAAEnC,EAAa5rH,wBAAyB4rH,EAAa3rH,0BACnE2wH,cAAe,EACfC,cAAe,EACfnyD,iBAAiB,IAIboyD,EAAgBJ,EAAe7yE,MAAM,SAAWthE,EAAGC,GAExD,OAAOD,EAAEq0I,cAAgBp0I,EAAEo0I,iBAGtBG,EAAgBL,EAAe7yE,MAAM,SAAWthE,EAAGC,GAExD,OAAOD,EAAEs0I,cAAgBr0I,EAAEq0I,iBAI5B,SAAShD,EAAqBD,EAAa1iH,EAAOC,EAAQs1G,GAOzD,IALA,IAGMxoI,EAAU21I,IAAgB9B,EAAYnE,MAAQmJ,EAAgBC,EAE1D5gJ,EAAI,EAAGA,EAAI8H,EAAQ7H,OAAQD,IAAO,CAE3C,IAAM6gJ,EAAM/4I,EAAS9H,GAErB,GAAOujB,EAAQs9H,EAAIL,MACZK,EAAIpD,YAAYqD,SAAUrD,MAC5BoD,EAAItyD,iBAAuBp8D,EAAc4I,IAAW5I,EAAc6I,KAKvE,MAAO,CAAE2iH,iBAHUkD,EAAIlD,iBAAkBrN,EAAW,EAAI,GAG7BsN,aAFZiD,EAAIjD,aAActN,EAAW,EAAI,IAWjD,OALAvpH,QAAQM,KAAM,8FAKP,CAAEs2H,iBAHUjC,EAAiBiB,OAGTiB,aAFZnC,EAAajsH,YAM7B,SAASuuH,EAAQ7qI,EAAIlG,GAEpB,IAAOkG,EAAK,MAAM,IAAIjG,MAAOD,GAI9B,SAAS+xI,EAAkBpB,EAAkB5iH,GAE5C,OAAOxoB,KAAK+f,KAAMyI,EAAQmiH,EAAY6D,oBAAqBpD,IAI5D,SAASqB,EAAmBrB,EAAkB3iH,GAE7C,OAAOzoB,KAAK+f,KAAM0I,EAASkiH,EAAY8D,qBAAsBrD,IAI9D,SAASkB,EAA8BlB,EAAkB5iH,EAAOC,GAE/D,IAAM6iH,EAAkBX,EAAYY,wBAAyBH,GAE7D,GAAKT,EAAY+D,qBAAsBtD,GAEtC,OAAO5iH,EAAQC,EAAS6iH,EAIzB,GAAKF,IAAqBjC,EAAiBY,cACtCqB,IAAqBjC,EAAiBa,cAAgB,CAI1D,IAAM2E,EAAgBnmH,EAAQ,GAAM,EAC9BomH,EAAiBnmH,EAAS,GAAM,EAEtC,OAASzoB,KAAKkE,IAAK,EAAGyqI,GAAgB3uI,KAAKkE,IAAK,EAAG0qI,GAAiB,EAAI,GAAM,EAI/E,OAASpC,EAAkBpB,EAAkB5iH,GAC1CikH,EAAmBrB,EAAkB3iH,GACrC6iH,EAIJ,SAAS1rH,EAAcjxB,GAEtB,OAAKA,GAAS,GAEuB,KAA5BA,EAAUA,EAAQ,IAAyB,IAAVA,IAY5C,IAkYIkgJ,GAAMC,GAgHNC,GAAMC,GAeNC,GAEAC,GAngBEC,GAAe,CAEpBC,IAAK,CAEJC,gCAAiC,SAAWt0I,GAE3C4sI,GAAO,IAAIxkF,WAAYh2D,GAAS0C,QAAQ+pE,OAAOlhE,WAwB5C42I,G,oFAEL,WAiBC,OAfO72E,KAENA,GAAOkyC,MAAO,gCAAkC4kC,IAC9Cp+I,MAAM,SAAE+gB,GAAF,OAAgBA,EAASs9H,iBAC/Br+I,MAAM,SAAEq+I,GAAF,OAAmB5lB,YAAY6lB,YAAaD,EAAaL,OAC/Dh+I,MAAM,SAAEpC,GAER5B,GAAW4B,EAAO5B,SAElBgiJ,GAAaC,IAAIC,gCAAiC,OAM9C52E,K,oBAIR,SAAS55C,GAA8B,IAAvB6wH,EAAuB,uDAAJ,EAG5BC,EAAiB9wH,EAAMkqG,WACvB6mB,EAAgBziJ,GAAS0C,QAAQggJ,OAAQF,GAC/ChI,GAAK79H,IAAK+U,EAAO+wH,GAGjBF,EAAmBA,GAAoBp6H,OAAQnoB,GAAS0C,QAAQigJ,0BAA2BF,EAAeD,IAC1G,IAAMI,EAAkB5iJ,GAAS0C,QAAQggJ,OAAQH,GAC3CM,EAAa7iJ,GAAS0C,QAAQogJ,gBAAiBF,EAAiBL,EAAkBE,EAAeD,GAGjGO,EAAMvI,GAAKhuI,MAAOo2I,EAAiBA,EAAkBC,GAI3D,OAHA7iJ,GAAS0C,QAAQsgJ,KAAMP,GACvBziJ,GAAS0C,QAAQsgJ,KAAMJ,GAEhBG,M,KAsCHX,GAAO,mksCAkBPa,G,kDAEL,WAAalqC,GAAU,kCAEtB,cAAOA,IAEFmqC,YAAc,IAAIxI,GAAoB3hC,GAC3C,EAAKoqC,KAAO,IAAIhB,GAEhB,EAAKgB,KAAK73E,OAEqB,qBAAnB83E,gBAEX/7H,QAAQM,KAEP,kIAboB,E,qDAsBvB,SAAmB7gB,GAIlB,OAFA/E,KAAKmhJ,YAAYG,kBAAmBv8I,GAE7B/E,O,4BAIR,SAAgB+E,GAIf,OAFA/E,KAAKmhJ,YAAYI,eAAgBx8I,GAE1B/E,O,2BAIR,SAAemvD,GAId,OAFAnvD,KAAKmhJ,YAAYtd,cAAe10E,GAEzBnvD,O,qBAIR,WAIC,OAFAA,KAAKmhJ,YAAY9iH,UAEVr+B,O,kBAIR,SAAMgF,EAAK6wG,EAAQC,EAAYC,GAE9B,IAAIprD,EAAQ3qD,KAERi+B,EAAU,IAAIysE,GA0BlB,OAxBoB,IAAI1oG,SAAS,SAAWR,EAASC,GAEpD,IAAI61G,GAAY3sD,EAAMqsD,SACpBqB,QAAS1tD,EAAM5lD,MACfuzG,gBAAiB,eACjBlB,KAAMpyG,EAAKxD,EAASs0G,EAAYr0G,MAKjCQ,MAAM,SAAWuH,GAEjBmhD,EAAM/tC,MAAOpT,GAAQ,SAAW+vI,GAE/Bt7G,EAAQ9C,KAAMo+G,GACdt7G,EAAQomB,aAAc,EAEjBwxD,GAASA,EAAQ53E,KAEpB83E,MAGHgG,MAAOhG,GAEF93E,I,mBAIR,SAAOz0B,EAAQqsG,EAAQE,GAEtB,IAAIprD,EAAQ3qD,KAERwhJ,EA/9BuyE,SAAW/wH,GAAG,IAAMttB,EAAE,IAAI8wD,WAAWxjC,EAAEjnB,OAAOinB,EAAE6zG,WAAWlhI,GAAE5E,QAAQ,GAAG2E,EAAE,KAAKC,GAAE,IAAID,EAAE,KAAKC,GAAE,IAAID,EAAE,KAAKC,GAAE,IAAID,EAAE,KAAKC,GAAE,IAAID,EAAE,KAAKC,GAAE,IAAID,EAAE,KAAKC,GAAE,IAAID,EAAE,KAAKC,GAAE,IAAID,EAAE,KAAKC,GAAE,IAAID,EAAE,KAAKC,GAAE,IAAID,EAAE,KAAKC,GAAE,IAAID,EAAE,MAAMC,GAAE,KAAKD,EAAE,MAAMC,GAAE,IAAI,MAAM,IAAIoI,MAAM,+BAA+B,IAAMjN,EAAE,IAAIu4I,GAAE5zI,EAAE,GAAGmgD,YAAY6Q,kBAAkBvpD,EAAE,IAAI2T,GAAEmS,EAAErtB,GAAE5E,OAAO0E,GAAE,GAAI3E,EAAEw4I,SAASpsI,EAAE82I,cAAcljJ,EAAEy4I,SAASrsI,EAAE82I,cAAcljJ,EAAE04I,WAAWtsI,EAAE82I,cAAcljJ,EAAE24I,YAAYvsI,EAAE82I,cAAcljJ,EAAE44I,WAAWxsI,EAAE82I,cAAcljJ,EAAE64I,WAAWzsI,EAAE82I,cAAcljJ,EAAE84I,UAAU1sI,EAAE82I,cAAc,IAAMrpH,EAAEztB,EAAE82I,cAAcljJ,EAAE+4I,uBAAuB3sI,EAAE82I,cAA+J,IAAjJ,IAAMnhJ,EAAEqK,EAAE82I,cAAcz4I,EAAE2B,EAAE82I,cAAcn+I,EAAEqH,EAAE82I,cAAc9mI,EAAEhQ,EAAE82I,cAAcv8H,EAAEva,EAAE+2I,cAAcnrI,EAAE5L,EAAE+2I,cAAc5lI,EAAE,IAAIwC,GAAEmS,EAAErtB,GAAE5E,OAAO0E,EAAE,EAAEk1B,EAAE,GAAE,GAAYh1B,EAAE,EAAEA,EAAEg1B,EAAEh1B,IAAI7E,EAAEg5I,OAAOpzI,KAAK,CAACw9I,UAAU,IAAI1tF,WAAWxjC,EAAEjnB,OAAOinB,EAAE6zG,WAAWxoH,EAAE4lI,cAAc5lI,EAAE4lI,eAAeE,uBAAuB9lI,EAAE4lI,gBAA8iB,IAA9hB,IAAMhoG,EAAE,IAAIp7B,GAAEmS,EAAEnwB,EAAE0I,GAAE,GAAI+S,EAAE,CAAC07H,SAAS/9F,EAAEmoG,MAAM,GAAGC,cAAcpK,eAAeh+F,EAAEooG,cAAcnK,cAAcj+F,EAAEooG,cAAclK,oBAAoBl+F,EAAEooG,cAAcjK,WAAWn+F,EAAEqoG,aAAajK,eAAep+F,EAAEqoG,aAAahK,iBAAiBr+F,EAAEqoG,aAAatjI,MAAMi7B,EAAEqoG,aAAa/J,oBAAoB,CAACl8H,EAAE49B,EAAEqoG,aAAa,EAAEhmI,EAAE29B,EAAEqoG,aAAa,EAAEzlH,EAAEod,EAAEqoG,aAAa,EAAEnuH,EAAE8lB,EAAEqoG,aAAa,GAAG9J,WAAW,CAACv+F,EAAEqoG,aAAaroG,EAAEqoG,aAAaroG,EAAEqoG,aAAaroG,EAAEqoG,aAAaroG,EAAEqoG,aAAaroG,EAAEqoG,aAAaroG,EAAEqoG,aAAaroG,EAAEqoG,cAAchxD,QAAQ,IAAIixD,GAAGjmI,EAAE67H,oBAAoB,EAAE,GAAG,EAAUnnH,EAAE,EAAEA,EAAEuxH,EAAEvxH,IAAI1U,EAAEg1E,QAAQtgE,GAAG,CAACwxH,UAAUvoG,EAAEooG,cAAcI,UAAUxoG,EAAEqoG,aAAaI,UAAUzoG,EAAEqoG,aAAaK,eAAe,CAAC1oG,EAAEqoG,aAAaroG,EAAEqoG,aAAaroG,EAAEqoG,aAAaroG,EAAEqoG,cAAcM,YAAY3oG,EAAE+nG,cAAca,YAAY5oG,EAAE+nG,eAAeljJ,EAAEi5I,qBAAqBh5I,OAAO,EAAED,EAAEi5I,qBAAqBrzI,KAAK4X,GAA2B,IAAxB,IAAMnR,EAAE,IAAI0T,GAAEmS,EAAEntB,EAAEqX,GAAE,GAAS/P,EAAE+4C,QAAQhpC,GAAG,CAAC,IAAM8V,EAAE7lB,EAAE62I,cAAcr+I,EAAEwH,EAAE23I,MAAM9xH,GAAGttB,EAAEo1I,GAAEn1I,GAAGF,EAAE0H,EAAE23I,MAAM9xH,EAAErtB,EAAEy2H,YAAYt7H,EAAE25I,SAAS/0I,GAAGA,EAAEyC,MAAM,SAAS2yI,GAAEr1I,GAAGA,EAAE0H,EAAE+4C,QAAQ,GAAG/4C,EAAEi3I,MAAM,EAAEj3I,EAAE+4C,QAAQ,GAAI,GAAGptC,GAAG,EAAE,OAAOhY,EAA2I,IAAzI,IAAMk5B,EAAE,IAAInZ,GAAEmS,EAAEvL,EAAE3O,GAAE,GAAIisI,EAAE/qH,EAAEqqH,cAAcluH,EAAE6D,EAAEqqH,cAAcW,EAAEhrH,EAAEgqH,cAAciB,EAAEjrH,EAAEgqH,cAAclkI,EAAEka,EAAEgqH,cAAckB,EAAElrH,EAAEgqH,cAAcmB,EAAE,GAAWnyH,EAAE,EAAEA,EAAE2H,EAAE3H,IAAImyH,EAAEz+I,KAAK,CAACy5I,WAAWnmH,EAAEgqH,cAAcjE,mBAAmB/lH,EAAEgqH,cAAchE,mBAAmBhmH,EAAEgqH,cAAc/D,qBAAqBjmH,EAAEgqH,cAAc9D,qBAAqBlmH,EAAEgqH,gBAAgB,IAAMoB,EAAE39H,EAAEuS,EAAEksB,QAAQm/F,EAAED,EAAEJ,EAAEM,EAAED,EAAEJ,EAAEM,EAAED,EAAExlI,EAAE0lI,EAAE,IAAIhvF,WAAWxjC,EAAEjnB,OAAOinB,EAAE6zG,WAAWue,EAAEJ,GAAGrqI,EAAE,IAAI67C,WAAWxjC,EAAEjnB,OAAOinB,EAAE6zG,WAAWwe,EAAEJ,GAAGz/I,EAAE,IAAIgxD,WAAWxjC,EAAEjnB,OAAOinB,EAAE6zG,WAAWye,EAAExlI,GAAG2lI,EAAE,IAAIjvF,WAAWxjC,EAAEjnB,OAAOinB,EAAE6zG,WAAW0e,EAAEL,GAAG,OAAOpkJ,EAAE45I,WAAW,CAACuE,cAAc8F,EAAE5F,cAAchpH,EAAEspH,WAAW0F,EAAEjG,cAAcsG,EAAEpG,cAAczkI,EAAE0kI,WAAW75I,EAAEkgJ,aAAaD,GAAG3kJ,EA+9B33JgY,CAAG,IAAI09C,WAAYzqD,IAE7B,GAAKg4I,EAAIrK,WAAa,EAErB,MAAM,IAAI3rI,MAAO,+DAIlB,GAAKg2I,EAAIpK,WAAa,EAErB,MAAM,IAAI5rI,MAAO,iEAIlB,GAAKg2I,EAAInK,UAAY,EAEpB,MAAM,IAAI7rI,MAAO,gEAIlB,IAAI43I,EAAMC,GAAUC,YAAa9B,GAqCjC,OAnCA6B,GAAUE,aAAc/B,EAAKxhJ,KAAKohJ,MAAOn/I,MAAM,SAAWs1I,GAEzD,IAAIyE,EAAcoH,EAAIvL,aAAe30I,GAAE8yI,MACpC2C,GAAmBuB,YAAYE,UAC/BzB,GAAmBuB,YAAYnE,MAE9ByN,EAAc,CAEjBjM,OAAQA,EACRj+G,MAAOkoH,EAAIvK,WACX19G,OAAQioH,EAAItK,YACZ8E,YAAaA,EACbnN,SAAUwU,GAAUI,SAAUjC,IAU/B,OANKxF,IAAgBrD,GAAmBuB,YAAYnE,QAEnDyN,EAAYrL,WAAaqJ,EAAIrJ,YAIvBxtF,EAAMw2F,YAAYuC,mBAAoBF,MAE1CvhJ,MAAM,SAAWg8B,GAEpBA,EAAQzD,SAAW4oH,EAAIrL,mBAAqB3/G,GAAE69G,KAC3ChnH,GACAD,GACHiP,EAAQnD,iBAAmBuoH,GAAUM,oBAAqBnC,GAE1D3rC,EAAQ53E,MAEL89E,MAAOhG,GAEJ/1G,S,GAvJgBo4G,IA6JrBirC,GAAY,CAEfE,aAAc,WAAF,4BAAE,WAAiB/B,EAAKJ,GAAtB,2BAAAz2I,EAAA,yDAER62I,EAAIlK,yBAA2Bn0I,GAAEwyI,KAFzB,gCAINyL,EAAK73E,OAJC,OAYb,IAJIguE,EAAS,GACTj+G,EAAQkoH,EAAIvK,WACZ19G,EAASioH,EAAItK,YAEP0M,EAAa,EAAGA,EAAapC,EAAIjK,OAAO/4I,OAAQolJ,IAErDC,EAAa/yI,KAAKkE,IAAK,EAAGlE,KAAKmgB,MAAOqI,EAAQxoB,KAAK8f,IAAK,EAAGgzH,KAC3DE,EAAchzI,KAAKkE,IAAK,EAAGlE,KAAKmgB,MAAOsI,EAASzoB,KAAK8f,IAAK,EAAGgzH,KAC7DjC,EAAYH,EAAIjK,OAAQqM,GAAajC,UAEpCH,EAAIlK,yBAA2Bn0I,GAAEwyI,OAErCgM,EAAYP,EAAK/lC,OAAQsmC,EAAWH,EAAIjK,OAAQqM,GAAahC,yBAI9DrK,EAAOpzI,KAAM,CAEZ0H,MAAO+3I,EACPtqH,MAAOuqH,EACPtqH,OAAQuqH,EACRnlI,KAAMgjI,IA7BK,yBAmCNpK,GAnCM,2CAAF,qDAAE,GAuCd+L,YAAa,SAAW9B,GAGvB,OAAOA,EAAIhK,qBAAsB,IAIlCiM,SAAU,SAAWjC,GAEpB,IAAI4B,EAAMpjJ,KAAKsjJ,YAAa9B,GAI5B,OAAK4B,EAAIvL,aAAe30I,GAAE8yI,OAEW,GAA7BoN,EAAIryD,QAAS,GAAIoxD,aAAsB7+I,GAAEszI,KAYrB,IAAvBwM,EAAIryD,QAAQvyF,SACkB,GAA7B4kJ,EAAIryD,QAAS,GAAIoxD,aAAsBn5I,GAAE2tI,KAUhDgN,oBAAqB,SAAWnC,GAI/B,SAFUxhJ,KAAKsjJ,YAAa9B,GAEZ/iI,MAAQne,GAAEi2I,uBAqBtBwN,GAAiBlhJ,OAAO,iBACxBmhJ,GAAgBnhJ,OAAO,gBACvBohJ,GAASphJ,OAAO,SAChBqhJ,GAAqBrhJ,OAAO,qBAC5BshJ,GAASthJ,OAAO,SAShBuhJ,G,WACF,WAAYl+I,GAA8B,IAAvBm+I,EAAuB,uDAAH,EAAG,oBACtCrkJ,KAAK2/I,IAAQ,IAAIx4H,IACjBnnB,KAAK4/I,IAAQ,GACb5/I,KAAKmkJ,IAAUj+I,EACflG,KAAKkkJ,IAAsBG,E,mDAY/B,WACI,OAAOrkJ,KAAKkkJ,K,IALhB,SAAsBzkJ,GAClBO,KAAKkkJ,IAAsBzkJ,EAC3BO,KAAKikJ,Q,iBAQT,WACI,OAAOjkJ,KAAKmkJ,M,2BAKhB,SAAcplJ,GACV,OAAOiB,KAAK+jJ,IAAgBhjJ,IAAIhC,IAAQ,I,mBAM5C,WACIiB,KAAK+jJ,IAAgB3zF,QACrBpwD,KAAKgkJ,IAAiB,K,oBAM1B,SAAOjlJ,GACEiB,KAAK+jJ,IAAgBv7H,IAAIzpB,IAC1BiB,KAAK+jJ,IAAgBnpI,IAAI7b,EAAK,GAElCiB,KAAK+jJ,IAAgBnpI,IAAI7b,EAAKiB,KAAK+jJ,IAAgBhjJ,IAAIhC,GAAO,GAC9D,IAAMulJ,EAAoBtkJ,KAAKgkJ,IAAex2I,QAAQzO,IAC3B,IAAvBulJ,GACAtkJ,KAAKgkJ,IAAeruI,OAAO2uI,EAAmB,GAElDtkJ,KAAKgkJ,IAAen3I,QAAQ9N,GAG5BiB,KAAKikJ,Q,qBAOT,SAAQllJ,GACAiB,KAAK+jJ,IAAgBv7H,IAAIzpB,IACzBiB,KAAK+jJ,IAAgBnpI,IAAI7b,EAAK+R,KAAKkE,IAAIhV,KAAK+jJ,IAAgBhjJ,IAAIhC,GAAO,EAAG,IAE9EiB,KAAKikJ,Q,MAEPtE,GAAOoE,GAAgBnE,GAAOoE,GAAeC,I,MAA/C,WACI,KAAIjkJ,KAAKgkJ,IAAexlJ,OAASwB,KAAKkkJ,KAGtC,IAAK,IAAI3lJ,EAAIyB,KAAKgkJ,IAAexlJ,OAAS,EAAGD,GAAKyB,KAAKkkJ,MAAuB3lJ,EAAG,CAC7E,IAAMQ,EAAMiB,KAAKgkJ,IAAezlJ,GAEV,IADAyB,KAAK+jJ,IAAgBhjJ,IAAIhC,KAE3CiB,KAAKmkJ,IAAQ/wF,OAAOr0D,GACpBiB,KAAKgkJ,IAAeruI,OAAOpX,EAAG,S,KAwBxCgmJ,GAAiB,SAACv/I,EAAK4xG,GAAyC,IAAjC4tC,EAAiC,uDAAd,aAC9C1uC,EAAa,SAAC1kG,GAChB,IAAMqzI,EAAWrzI,EAAMonG,OAASpnG,EAAMszI,MACtCF,EAAiB1zI,KAAKkE,IAAI,EAAGlE,KAAKiE,IAAI,EAAGyxC,SAASi+F,GAAYA,EAAW,MAE7E,OAAO,IAAIziJ,SAAQ,SAACR,EAASC,GACzBm1G,EAAOQ,KAAKpyG,EAAKxD,EAASs0G,EAAYr0G,OAGxCyE,GAAQ,IAAIihB,IACZw9H,GAAY,IAAIx9H,IAEhBu3G,GAAc,IAAIhG,GAElBiG,GAAa,IAAIuiB,GACjB0D,GAAU/hJ,OAAO,UACjBgiJ,GAAkBhiJ,OAAO,kBACzBiiJ,GAAgBjiJ,OAAO,gBACvBkiJ,G,kDACF,WAAYC,GAAc,kCACtB,gBACKlF,IAAQ,IAAIrhB,GACjB,EAAKqmB,IAAiBE,EACtB,EAAKJ,IAASK,eAAevmB,IAC7B,EAAKkmB,IAASM,cAAcvmB,IALN,E,4BAwDpBkhB,GAAOgF,GAAiB/E,GAAO8E,GAASC,I,IAA9C,WACI,OAAO7kJ,KAAKR,YAAYqlJ,M,4DAM5B,WAAc7/I,EAAKiD,GAAnB,iCAAA0C,EAAA,6DAA4B65I,EAA5B,+BAA+C,aAC3CxkJ,KAAK87B,cAAc,CAAE7V,KAAM,UAAWhe,QAASA,EAASixB,IAAKl0B,IACxDkB,GAAMsiB,IAAIxjB,KACLmgJ,EAAeZ,GAAev/I,EAAKhF,KAAK4kJ,KAAU,SAACQ,GACrDZ,EAA4B,GAAXY,MAEfJ,EAAehlJ,KAAK8kJ,IACpBO,EAAoBF,EACrBljJ,MAAK,SAACqjJ,GACP,OAAON,EAAaO,QAAQD,MAE3BrjJ,MAAK,SAACujJ,GAEP,OADAhB,EAAiB,IACV,IAAIQ,EAAaQ,MAE5Bt/I,GAAM0U,IAAI5V,EAAKqgJ,IAfvB,SAiBUn/I,GAAMnF,IAAIiE,GAjBpB,OAkBI2/I,GAAU/pI,IAAI5V,GAAK,GACfw/I,GACAA,EAAiB,GApBzB,gD,kHA4BA,WAAWx/I,EAAKiD,GAAhB,sCAAA0C,EAAA,6DAAyB65I,EAAzB,+BAA4C,aAA5C,SACUxkJ,KAAKmlI,QAAQngI,EAAKiD,EAASu8I,GADrC,uBAEuBt+I,GAAMnF,IAAIiE,GAFjC,cAEUs6H,EAFV,gBAGwBA,EAAKhhG,QAH7B,cAGUA,EAHV,OAIIt+B,KAAK6kJ,IAAiBY,OAAOzgJ,GAG7Bs5B,EAAMD,QAAW,WACb,IAAMqnH,EAAkBpnH,EAAMD,QAC1BsnH,GAAW,EACf,OAAO,WACCA,IAGJA,GAAW,EACXD,EAAgBtlJ,MAAMk+B,GACtB,EAAKumH,IAAiBe,QAAQ5gJ,KATrB,GAPrB,kBAmBWs5B,GAnBX,iD,gGApFA,SAA+Bt5B,GAC3B+6I,GAAuB/6I,EACvB05H,GAAYmnB,eAAe7gJ,K,qCAE/B,WACI,OAAO+6I,K,uCAEX,SAAiC/6I,GAC7Bg7I,GAAyBh7I,EACzB25H,GAAW2iB,kBAAkBt8I,K,uCAEjC,WACI,OAAOg7I,K,kCAEX,SAA4B7wF,GACxBwvE,GAAWkF,cAAc10E,K,iBAE7B,WACI,OAAOjpD,K,wBAGX,WAAoB,WAChBA,GAAM6C,SAAQ,SAAC+8I,EAAQ9gJ,GACnB,EAAKouD,OAAOpuD,MAEhBhF,KAAK6kJ,IAAiBngF,U,iBAE1B,SAAW1/D,GACP,OAAOkB,GAAMsiB,IAAIxjB,K,2DAGrB,WAAoBA,GAApB,0EACShF,KAAKwoB,IAAIxjB,GADlB,wDAIU+gJ,EAAY7/I,GAAMnF,IAAIiE,GAC5B2/I,GAAUvxF,OAAOpuD,GACjBkB,GAAMktD,OAAOpuD,GANjB,SAOuB+gJ,EAPvB,cASS1nH,UATT,gD,uFAeA,SAA0Br5B,GACtB,QAAS2/I,GAAU5jJ,IAAIiE,O,GAvDCwqB,IAkHhCu1H,GAAkBlF,IAAQ,IAAIuE,GAAoBW,I,IAE5CiB,G,kDAEJ,WAAa/9I,GAAU,kCAEvB,gBAEKA,QAAUA,GAAWqC,SAASgF,cAAe,OAElD,EAAKrH,QAAQuR,MAAM21B,SAAW,WAE9B,EAAK78B,iBAAkB,WAAW,WAEjCtS,KAAKk0C,UAAU,SAAWjzC,GAEpBA,EAAOgH,mBAAmBg+I,SAAyC,OAA9BhlJ,EAAOgH,QAAQi+I,YAExDjlJ,EAAOgH,QAAQi+I,WAAWC,YAAallJ,EAAOgH,eAd1B,E,wCAwBxB,SAAMM,EAAQ0tC,GAMb,OAJA,4DAAY1tC,EAAQ0tC,GAEpBj2C,KAAKiI,QAAUM,EAAON,QAAQm+I,WAAW,GAElCpmJ,S,GAhCiBmyC,IAsC1B6zG,GAAY7mJ,UAAUknJ,eAAgB,EAItC,IAAMC,GAAU,IAAIjkH,GACdkkH,GAAc,IAAIh6G,GAClBi6G,GAAwB,IAAIj6G,GAC5Bk6G,GAAO,IAAIpkH,GACXqkH,GAAO,IAAIrkH,GAEXskH,GAEL,aAAc,oBAEb,IAEI7oD,EAAQC,EACR6oD,EAAYC,EAHVtrI,EAAQvb,KAKRkG,EAAQ,CACb+6D,QAAS,IAAIhO,SAGRiqC,EAAa5yF,SAASgF,cAAe,OAwC3C,SAASi2E,EAActkF,EAAQmuD,EAAOjsB,GAErC,GAAKliC,EAAOolJ,cAAgB,CAE3BplJ,EAAOwhE,eAAgBlnD,EAAO6zC,EAAOjsB,GAErCmjH,GAAQ7yG,sBAAuBxyC,EAAOuiC,aACtC8iH,GAAQljH,aAAcojH,IAEtB,IAAMv+I,EAAUhH,EAAOgH,QAElB,SAASoO,KAAMlM,UAAUwhB,QAG7B1jB,EAAQuR,MAAMu7E,UAAY,kCAAoCjkF,KAAKsjB,MAAOkyH,GAAQxqI,EAAI8qI,EAAaA,GAAe,MAAQ91I,KAAKsjB,OAASkyH,GAAQvqI,EAAI8qI,EAAcA,GAAgB,MAIlL5+I,EAAQuR,MAAMu7E,UAAY,mCAAsCuxD,GAAQxqI,EAAI8qI,EAAaA,GAAe,QAAYN,GAAQvqI,EAAI8qI,EAAcA,GAAgB,MAI/J5+I,EAAQuR,MAAMwiF,QAAY/6F,EAAO0xC,SAAW2zG,GAAQhqH,IAAO,GAAKgqH,GAAQhqH,GAAK,EAAM,GAAK,OAExF,IAAMwqH,EAAa,CAClBC,wBAAyBC,EAAsB7jH,EAAQliC,IAGxDiF,EAAM+6D,QAAQrmD,IAAK3Z,EAAQ6lJ,GAEtB7+I,EAAQi+I,aAAehpD,GAE3BA,EAAW+pD,YAAah/I,GAIzBhH,EAAOgiG,cAAe1nF,EAAO6zC,EAAOjsB,GAIrC,IAAM,IAAI5kC,EAAI,EAAGyK,EAAI/H,EAAO8E,SAASvH,OAAQD,EAAIyK,EAAGzK,IAEnDgnF,EAActkF,EAAO8E,SAAUxH,GAAK6wD,EAAOjsB,GAM7C,SAAS6jH,EAAsBE,EAASC,GAKvC,OAHAV,GAAKhzG,sBAAuByzG,EAAQ1jH,aACpCkjH,GAAKjzG,sBAAuB0zG,EAAQ3jH,aAE7BijH,GAAKjyH,kBAAmBkyH,IA5FhCxpD,EAAW1jF,MAAM4tI,SAAW,SAE5BpnJ,KAAKk9F,WAAaA,EAElBl9F,KAAK6nC,QAAU,WAEd,MAAO,CACNvO,MAAOwkE,EACPvkE,OAAQwkE,IAKV/9F,KAAKwF,OAAS,SAAW4pD,EAAOjsB,IAEL,IAArBisB,EAAMw2B,YAAsBx2B,EAAM9a,oBAChB,OAAlBnR,EAAOiP,QAAkBjP,EAAOmR,oBAErCiyG,GAAYprH,KAAMgI,EAAOE,oBACzBmjH,GAAsBpwH,iBAAkB+M,EAAOG,iBAAkBijH,IAEjEhhE,EAAcn2B,EAAOA,EAAOjsB,GAyF7B,SAAiBisB,GAahB,IAXA,IAAMi4F,EAhBP,SAA2Bj4F,GAE1B,IAAMvvD,EAAS,GAQf,OANAuvD,EAAMlb,UAAU,SAAWjzC,GAErBA,EAAOolJ,eAAgBxmJ,EAAOsE,KAAMlD,MAInCpB,EAMQynJ,CAAkBl4F,GAAQ6c,MAAM,SAAWthE,EAAGC,GAK5D,OAHkB1E,EAAM+6D,QAAQlgE,IAAK4J,GAAIo8I,wBACvB7gJ,EAAM+6D,QAAQlgE,IAAK6J,GAAIm8I,2BAMpCQ,EAAOF,EAAO7oJ,OAEVD,EAAI,EAAGyK,EAAIq+I,EAAO7oJ,OAAQD,EAAIyK,EAAGzK,IAE1C8oJ,EAAQ9oJ,GAAI0J,QAAQuR,MAAMguI,OAASD,EAAOhpJ,EAvG3CkpJ,CAAQr4F,IAITpvD,KAAKsgG,QAAU,SAAWhnE,EAAOC,GAKhCqtH,GAHA9oD,EAASxkE,GAGa,EACtButH,GAHA9oD,EAAUxkE,GAGc,EAExB2jE,EAAW1jF,MAAM8f,MAAQA,EAAQ,KACjC4jE,EAAW1jF,MAAM+f,OAASA,EAAS,OAkHhCmuH,GAAiB,SAAC1iJ,GAAD,OAAYA,GAAe,SAARA,EAAkB2iJ,GAAU3iJ,GAAO,MACvE4iJ,GAAsB,WACxB,IAAIl8H,EAAJ,CAGA,IAAMm8H,EAAc,GAOpB,MANK78H,GACD68H,EAAY1jJ,KAAK,oBAEhBinB,GACDy8H,EAAY1jJ,KAAK,sBAEf,IAAIqH,MAAJ,mFAAsFq8I,EAAY/6I,KAAK,UAQ3G66I,GAAY,SAACG,GAEf,OADY,IAAI3sB,IAAI2sB,EAAYz9I,OAAOxF,SAAS4D,YACrCA,YASTs/I,GAAW,SAAC5lJ,EAAI6lJ,GAClB,IAAIC,EAAQ,KACNC,EAAY,WACD,MAATD,IAGJ9lJ,EAAE,WAAF,aACA8lJ,EAAQ7lJ,KAAKm1G,YAAW,kBAAM0wC,EAAQ,OAAMD,KAQhD,OANAE,EAAUC,MAAQ,WACD,MAATF,IACA7lJ,KAAKgmJ,aAAaH,GAClBA,EAAQ,OAGTC,GAELG,GAAW,SAAClmJ,EAAI6lJ,GAClB,IAAIC,EAAQ,KACZ,OAAO,WAAa,2BAAT5lJ,EAAS,yBAATA,EAAS,gBACH,MAAT4lJ,GACA7lJ,KAAKgmJ,aAAaH,GAEtBA,EAAQ7lJ,KAAKm1G,YAAW,WACpB0wC,EAAQ,KACR9lJ,EAAE,WAAF,EAAME,KACP2lJ,KASLpzI,GAAQ,SAACnV,EAAO6oJ,EAAYC,GAApB,OAAmCz3I,KAAKkE,IAAIszI,EAAYx3I,KAAKiE,IAAIwzI,EAAY9oJ,KA0BrF+oJ,GAAc,WAGhB,IAAMC,EAAyB,WAC3B,IADiC,EAC3BC,EAAyB,MAAjBp+I,SAASq+I,KACnB5lJ,MAAMmJ,KAAK5B,SAASq+I,KAAKC,iBAAiB,SAC1C,GAH6B,cAIdF,GAJc,IAIjC,2BAA0B,CACtB,GAAkB,aADI,QACblkJ,KACL,OAAO,GANkB,8BASjC,OAAO,EAToB,GAc/B,OAHKikJ,GACDnjI,QAAQM,KAAK,mFAEV,kBAAM6iI,EAAwBp+I,OAAOw+I,iBAzCd,GAwBd,GA4BdC,GAAe,WACjB,IACMC,EAAsB,IAAI9rI,OAAJ,cADI,0BACJ,UAC5B,OAAO,kBAAO7a,KAAK4mJ,oBACf5mJ,KAAK4mJ,mBAAmBC,WACvB7mJ,KAAKyC,UAAYzC,KAAKyC,SAAS8I,QAC5BvL,KAAKyC,SAAS8I,OAAO/H,MAAMmjJ,IANlB,GAiCfG,GAAa,eAAClB,EAAD,uDAAM,EAAN,OAAY,IAAIhmJ,SAAQ,SAAAR,GAAO,OAAI+1G,WAAW/1G,EAASwmJ,OAMpEmB,GAAe,SAAC9qJ,EAAQ+qJ,GAAT,IAAoBC,EAApB,uDAAgC,KAAhC,OAAyC,IAAIrnJ,SAAQ,SAAAR,GAOtEnD,EAAOiU,iBAAiB82I,GANxB,SAAS3uI,EAAQrJ,GACRi4I,IAAaA,EAAUj4I,KACxB5P,EAAQ4P,GACR/S,EAAOkU,oBAAoB62I,EAAW3uI,WAsB5C6uI,GAAqB,GASrBC,G,WACF,aAAoD,IAAxCC,EAAwC,uDAApBF,GAAoB,oBAChDtpJ,KAAKypJ,SAAW,EAChBzpJ,KAAK0pJ,iBAAmB,EACxB1pJ,KAAK2pJ,aAAaH,G,gDAEtB,SAAaA,GACTxpJ,KAAK0pJ,iBACD,EAAI54I,KAAKkE,IAlBU,KAkBkBw0I,K,oBAE7C,SAAO1tI,EAAG8tI,EAAOC,EAAsBC,GACnC,IAAMC,EAAW,KAAS/pJ,KAAK0pJ,iBAC/B,GAAS,MAAL5tI,GAAgC,IAAnBguI,EACb,OAAOF,EAEX,GAAI9tI,IAAM8tI,GAA2B,IAAlB5pJ,KAAKypJ,SACpB,OAAOG,EAEX,GAAIC,EAAuB,EACvB,OAAO/tI,EAKX,IAAMkuI,EAAUluI,EAAI8tI,EACdK,EAAuBjqJ,KAAKypJ,SAAWzpJ,KAAK0pJ,iBAAmBM,EAC/DE,EAAgBF,EAASH,EAAuBI,EAChDnrF,EAAQhuD,KAAK+gB,KAAK7xB,KAAK0pJ,iBAAmBG,GAC1CM,GAAeF,EAAuBjqJ,KAAK0pJ,iBAAmBQ,GAAiBprF,EAC/EsrF,GAAgBpqJ,KAAK0pJ,kBAAoBS,EAAcF,EAAuBnrF,GACpF,OAAIhuD,KAAKihB,IAAIo4H,GAAeJ,EAAWj5I,KAAKihB,IAAI+3H,IAC5CM,EAAeJ,GAAU,GAGzBhqJ,KAAKypJ,SAAW,EACTG,IAGP5pJ,KAAKypJ,SAAWU,EACTP,EAAQM,EAAgBprF,O,KAmBrCurF,GAAa,SAAC5qJ,EAAOixE,GAAR,MAAkB,CAAEzqD,KAAM,SAAUqkI,OAAQ7qJ,EAAOixE,SAmBhE65E,GAAoB,WACtB,IAAMrkJ,EAAQ,GAEd,OAAO,SAACskJ,GACJ,IAAM7jJ,EAAW6jJ,EACjB,GAAI7jJ,KAAYT,EACZ,OAAOA,EAAMS,GAIjB,IAFA,IAAM8jJ,EAAc,GAChBC,EAAkB,EACfF,GAAa,CAChB,KAAME,EATe,IASyB,CAE1CF,EAAc,GACd,MAEJ,IAAMG,EAAwBC,GAAgBJ,GACxCK,EAAaF,EAAsBhpB,MAAM,GAC/C,GAAkB,MAAdkpB,GAAkD,IAA5BA,EAAWC,MAAMtsJ,OACvC,MAEJisJ,EAAYtmJ,KAAK0mJ,GACjBL,EAAcG,EAAsBI,eAExC,OAAO7kJ,EAAMS,GAAY8jJ,GAxBP,GAgCpBG,GAAmB,WACrB,IAAMI,EAAc,8BACdC,EAAiB,sBACjBC,EAAuB,SAG7B,OAAO,SAACV,GAEJ,IADA,IAAMM,EAAQ,GACPN,EAAYhsJ,SACfgsJ,EAAcA,EAAY1/I,QACtBogJ,EAAqB70I,KAAKm0I,KAGzB,GAT0B,MAStBA,EAAY,GAAuC,CACxD,MAAkCW,GAAuBX,GAAjD7oB,EAAR,EAAQA,MACR6oB,EADA,EAAeO,eAEfD,EAAM3mJ,KAAK,CACP8hB,KAAM,WACNzhB,KAAM,CAAEyhB,KAAM,QAASxmB,MAAO,QAC9BU,UAAWwhI,SAGd,GAAIqpB,EAAY30I,KAAKm0I,GAAc,CACpC,IAAMY,EAAmBC,GAAWb,GAC9Bc,EAAYF,EAAiBzpB,MAAM,GAEzC,GAtB2B,OAqB3B6oB,EAAcY,EAAiBL,gBACf,GAAuC,CACnD,MAAkCI,GAAuBX,GAAjD7oB,EAAR,EAAQA,MAAOopB,EAAf,EAAeA,eACfD,EAAM3mJ,KAAK,CAAE8hB,KAAM,WAAYzhB,KAAM8mJ,EAAWnrJ,UAAWwhI,IAC3D6oB,EAAcO,OAGdD,EAAM3mJ,KAAKmnJ,QAGd,GAAIL,EAAe50I,KAAKm0I,GAEzBM,EAAM3mJ,KAAK,CAAE8hB,KAAM,WAAYxmB,MAAO+qJ,EAAY,KAClDA,EAAcA,EAAY//I,MAAM,OAE/B,CACD,MApCY,MAoCsB+/I,EAAY,GAC1Ce,GAASf,GACTgB,GAAYhB,GAFR7oB,EAAR,EAAQA,MAAOopB,EAAf,EAAeA,eAKf,GAAqB,IAAjBppB,EAAMnjI,OACN,MAEJssJ,EAAM3mJ,KAAKw9H,EAAM,IACjB6oB,EAAcO,EAGtB,MAAO,CAAEppB,MAAO,CAAC,CAAE17G,KAAM,aAAc6kI,UAAUC,eAAgBP,IArDhD,GA2DnBa,GAAc,WAChB,IAAMI,EAAe,iCACrB,OAAO,SAACjB,GACJ,IAAM5kJ,EAAQ4kJ,EAAY5kJ,MAAM6lJ,GAGhC,MAAO,CAAE9pB,MAAO,CAAC,CAAE17G,KAAM,QAASxmB,MAFX,MAATmG,EAAgB4kJ,EAAcA,EAAYz9I,OAAO,EAAGnH,EAAMiG,SAErBk/I,eADnB,MAATnlJ,EAAgB,GAAK4kJ,EAAYz9I,OAAOnH,EAAMiG,SALzD,GAcd2/I,GAAe,WAEjB,IAAME,EAAW,mDACXC,EAAU,YACVC,EAAgB,0BACtB,OAAO,SAACpB,GACJ,IAAMqB,EAAarB,EAAY5kJ,MAAM8lJ,GAC/BjsJ,EAAsB,MAAdosJ,EAAqB,IAAMA,EAAW,GAE9CC,GADNtB,EAAuB,MAAT/qJ,EAAgB+qJ,EAAcA,EAAY//I,MAAMhL,EAAMjB,SACtCoH,MAAM+lJ,GAChCj7E,EAAoB,MAAbo7E,GAAsC,KAAjBA,EAAU,GAAYA,EAAU,GAAK,KAC/Df,EAA8B,MAAbe,EAAoBtB,EAAcA,EAAY//I,MAAMimE,EAAKlyE,QAIhF,OAHY,MAARkyE,GAAiBk7E,EAAcv1I,KAAKq6D,KACpCA,EAAO,MAEJ,CACHixD,MAAO,CAAC,CACA17G,KAAM,SACNqkI,OAAQzpG,WAAWphD,IAAU,EAC7BixE,KAAMA,IAEdq6E,mBArBS,GA4BfQ,GAAY,WAEd,IAAMQ,EAAS,cACf,OAAO,SAACvB,GAEJ,IAAMwB,GADNxB,EAAcA,EAAY//I,MAAM,GAAGK,QACNlF,MAAMmmJ,GAEnC,MAAO,CACHpqB,MAFsB,MAAZqqB,EAAmB,GAAK,CAAC,CAAE/lI,KAAM,MAAOxmB,MAAOusJ,EAAS,KAGlEjB,eAA4B,MAAZiB,EAAmBxB,EAC/BA,EAAY//I,MAAMuhJ,EAAS,GAAGxtJ,UAV5B,GAkBZ2sJ,GAAyB,SAACX,GAC5B,IAAMyB,EAAkB,GAGxB,IADAzB,EAAcA,EAAY//I,MAAM,GAAGK,OAC5B0/I,EAAYhsJ,QAAQ,CACvB,IAAMmsJ,EAAwBC,GAAgBJ,GAG9C,GAFAyB,EAAgB9nJ,KAAKwmJ,EAAsBhpB,MAAM,IAE1B,OADvB6oB,EAAcG,EAAsBI,eAAejgJ,QACnC,GACZ0/I,EAAcA,EAAY//I,MAAM,GAAGK,YAElC,GAAuB,MAAnB0/I,EAAY,GAAY,CAE7BA,EAAcA,EAAY//I,MAAM,GAChC,OAGR,MAAO,CAAEk3H,MAAOsqB,EAAiBlB,eAAgBP,IAE/C0B,GAAgBrpJ,OAAO,gBAMvBspJ,G,WACF,WAAYC,GAAc,oBACtBpsJ,KAAKksJ,IAAiBE,E,wCAM1B,SAAKC,EAAKx9I,GAEN,IADA,IAAMy9I,EAAYD,EAAI5hJ,QACf6hJ,EAAU9tJ,QAAQ,CACrB,IAAMkF,EAAO4oJ,EAAU/sD,QAIvB,OAHIv/F,KAAKksJ,IAAe1+I,QAAQ9J,EAAKuiB,OAAS,GAC1CpX,EAASnL,GAELA,EAAKuiB,MACT,IAAK,aACDqmI,EAAUz/I,QAAV,MAAAy/I,EAAS,YAAY5oJ,EAAKonJ,QAC1B,MACJ,IAAK,WACDwB,EAAUz/I,QAAV,MAAAy/I,EAAS,CAAS5oJ,EAAKc,MAAd,mBAAuBd,EAAKvD,mB,KAMnDosJ,GAAO1tJ,OAAOsyB,OAAO,CAAElL,KAAM,SAAUqkI,OAAQ,EAAG55E,KAAM,OAyBxD87E,GAAmB,SAACnC,GAAwC,IAA5BoC,EAA4B,uDAAN,EAClDnC,EAAiBD,EAAjBC,OAAQ55E,EAAS25E,EAAT35E,KACd,GAAKlqB,SAAS8jG,IAIT,GAAwB,QAApBD,EAAW35E,MAAqC,MAAnB25E,EAAW35E,KAC7C,OAAO25E,OAJPC,EAASmC,EACT/7E,EAAO,MAKX,IAAMg8E,EAA0B,QAATh8E,GAA4B,MAAV45E,EACnC7qJ,EAAQitJ,EAAiBpC,EAAS,EAClC13H,EAAUnzB,EAAQqR,KAAKif,GAAK,IAClC,MAAO,CAAE9J,KAAM,SAAUqkI,OAAQ13H,EAAS89C,KAAM,QAS9Ci8E,GAAqB,SAACtC,GAAuC,IAS3Dj7G,EATgCw9G,EAA2B,uDAAN,EACnDtC,EAAiBD,EAAjBC,OAAQ55E,EAAS25E,EAAT35E,KACd,GAAKlqB,SAAS8jG,IAIT,GAAwB,MAApBD,EAAW35E,KAChB,OAAO25E,OAJPC,EAASsC,EACTl8E,EAAO,IAMX,OAAQA,GACJ,QACIthC,EAAQ,EACR,MACJ,IAAK,KACDA,EAAQ,IACR,MACJ,IAAK,KACDA,EAAQ,KAGhB,IAAM3vC,EAAQ2vC,EAAQk7G,EACtB,MAAO,CAAErkI,KAAM,SAAUqkI,OAAQ7qJ,EAAOixE,KAAM,MAU5Cm8E,GAAiB,WACnB,IAAM7qE,EAAW,SAACu9B,GAAD,OAAUA,GACrButC,EAAkB,CACpB,IAAO9qE,EACP,IAAOwqE,GACP,EAAKxqE,EACL,GAAM2qE,GACN,GAAMA,IAEV,OAAO,SAACptC,GAA0B,IAApBwtC,EAAoB,uDAATR,GACfjC,EAAiB/qC,EAAjB+qC,OAAQ55E,EAAS6uC,EAAT7uC,KAKd,GAJKlqB,SAAS8jG,KACVA,EAASyC,EAASzC,OAClB55E,EAAOq8E,EAASr8E,MAER,MAARA,EACA,OAAO6uC,EAEX,IAAM5qF,EAAYm4H,EAAgBp8E,GAClC,OAAiB,MAAb/7C,EACOo4H,EAEJp4H,EAAU4qF,IAtBF,GA4CjBytC,G,kDACF,WAAYlrI,GAAQ,kCAChB,cAAMxX,SAASgF,cAAc,SACxBg1B,OAAS,IAAIjC,GAAQ,EAAG,EAAG,GAChC,EAAK4qH,aAAc,EACnB,EAAK1vC,eAAiB,EACtB,EAAK2vC,MAAQ5iJ,SAASgF,cAAc,OACpC,EAAKw/E,KAAOxkF,SAASgF,cAAc,QACnC,EAAKrH,QAAQklJ,UAAUpnH,IAAI,sBAC3B,EAAK+oD,KAAKtqF,KAAOsd,EAAOtd,KACxB,EAAKyD,QAAQg/I,YAAY,EAAKiG,OAC9B,EAAKA,MAAMjG,YAAY,EAAKn4D,MAC5B,EAAKs+D,eAAetrI,EAAOqtB,UAC3B,EAAKk+G,aAAavrI,EAAOwiB,QAZT,E,8CAcpB,WACI,OAAQtkC,KAAKiI,QAAQklJ,UAAUG,SAAS,U,kBAK5C,WACSttJ,KAAKutJ,cAAiBvtJ,KAAKitJ,aAC5BjtJ,KAAKwtJ,kBAAiB,K,kBAM9B,YACQxtJ,KAAKutJ,cAAiBvtJ,KAAKitJ,aAC3BjtJ,KAAKwtJ,kBAAiB,K,uBAM9B,WACIxtJ,KAAKu9G,mB,uBAMT,WAII,OAHIv9G,KAAKu9G,eAAiB,KACpBv9G,KAAKu9G,eAEoB,IAAxBv9G,KAAKu9G,iB,4BAMhB,SAAepuE,GACX,GAAgB,MAAZA,EAAJ,CAGA,IADA,IAAMs+G,EAAgBlD,GAAiBp7G,GAAU,GAAG27G,MAC3CvsJ,EAAI,EAAGA,EAAI,IAAKA,EACrByB,KAAKmvC,SAASu+G,aAAanvJ,EAAGsuJ,GAAcY,EAAclvJ,IAAI+rJ,QAElEtqJ,KAAKs0C,uB,0BAMT,SAAahQ,GACT,GAAc,MAAVA,EAGJ,IADA,IAAMqpH,EAAcpD,GAAiBjmH,GAAQ,GAAGwmH,MACvCvsJ,EAAI,EAAGA,EAAI,IAAKA,EACrByB,KAAKskC,OAAOopH,aAAanvJ,EAAGsuJ,GAAcc,EAAYpvJ,IAAI+rJ,U,oBAGlE,SAAO13H,GACH5yB,KAAKktJ,MAAM1zI,MAAMu7E,UAAjB,iBAAuCniE,EAAvC,U,8BAEJ,SAAiBg7H,GAETA,EACA5tJ,KAAKiI,QAAQklJ,UAAUp5G,OAAO,QAG9B/zC,KAAKiI,QAAQklJ,UAAUpnH,IAAI,QAI/B/lC,KAAK8uF,KAAK++D,gBAAgB9kJ,SAAQ,SAACw2G,GAC/B,GAAIA,EAAKuuC,WAAaC,KAAKC,aAA3B,CAGA,IAAM/lJ,EAAUs3G,EAEV0uC,EAAsBhmJ,EAAQimJ,QAAQD,oBAC5C,GAA2B,MAAvBA,EAA6B,CAC7B,IAAMnyB,EAAgB,QAAH,OAAWmyB,GAE1BL,EACA3lJ,EAAQggB,aAAa6zG,EAAe,IAGpC7zH,EAAQ+f,gBAAgB8zG,GAGhC7zH,EAAQ6zB,cAAc,IAAIsqE,YAAY,qBAAsB,CACxDC,OAAQ,CACJ1zD,QAASi7G,UAIrB5tJ,KAAKitJ,aAAc,M,GA/GLjH,IAwIhBmI,GAAiB,SAACC,EAAO/hB,EAAMgiB,GACjC,IAAI5uJ,EAAQ4uJ,EACNC,EAAS,IAAIjsH,GA0BnB,OAzBA+rH,EAAMl6G,UAAS,SAACjzC,GACZ,IAAI1C,EAAGyK,EACP/H,EAAOqlC,mBAAkB,GAAO,GAChC,IAAMC,EAAWtlC,EAAOslC,SACxB,QAAiBhkC,IAAbgkC,EACA,GAAIA,EAAS0jB,WAAY,CACrB,IAAMW,EAAWrkB,EAASqkB,SAC1B,IAAKrsD,EAAI,EAAGyK,EAAI4hD,EAASpsD,OAAQD,EAAIyK,EAAGzK,IACpC+vJ,EAAOnzH,KAAKyvB,EAASrsD,IACrB+vJ,EAAOlrH,aAAaniC,EAAOuiC,aAC3B/jC,EAAQ4sI,EAAK5sI,EAAO6uJ,QAGvB,GAAI/nH,EAAS6gB,iBAAkB,CAChC,IAAQjY,EAAa5I,EAAS9c,WAAtB0lB,SACR,QAAiB5sC,IAAb4sC,EACA,IAAK5wC,EAAI,EAAGyK,EAAImmC,EAAS3J,MAAOjnC,EAAIyK,EAAGzK,IACnC+vJ,EAAOzrG,oBAAoB1T,EAAU5wC,GAChC6kC,aAAaniC,EAAOuiC,aACzB/jC,EAAQ4sI,EAAK5sI,EAAO6uJ,OAMjC7uJ,GA0CL8uJ,G,kDACF,WAAYn/F,EAAOo/F,EAAUx0G,GAAM,kCAC/B,gBACKy0G,eAAiB,IAAIjyE,GAC1B,EAAKh2C,YAAc,IAAIxB,GACvB,EAAK1b,KAAO,IAAI+Y,GAChB,EAAKqsH,YAAc,EACnB,EAAKC,YAAa,EAClB,EAAK30G,KAAO,SACZ,EAAKqK,aAAc,EAEnB,EAAKu8B,UAAY,EACjB,EAAKhuC,YAAa,EAClB,EAAKE,eAAgB,EACrB,EAAK7hB,MAAQ,IAAIk4B,GAAK,IAAImL,GAAe,EAAKm6F,gBAC9C,EAAKx9H,MAAMshG,SAASzhH,KAAKif,GAAK,GAC9B,EAAKkB,MAAM4hB,eAAgB,EAC3B,EAAK5hB,MAAM2hB,YAAa,EACxB,EAAK3hB,MAAM6hB,eAAgB,EAC3B,EAAK/M,IAAI,EAAK9U,OACdm+B,EAAM/wD,OAAO0nC,IAAb,gBACA,EAAK1nC,OAAS+wD,EAAM/wD,OACpB,EAAKuwJ,SAASx/F,EAAOo/F,EAAUx0G,GArBA,E,4CA2BnC,SAASoV,EAAOo/F,EAAUx0G,GAKtB,GAJAh6C,KAAKg6C,KAAOA,EACZh6C,KAAK2uJ,WAAav/F,EAAMy/F,eAAerwJ,OAAS,EAChDwB,KAAKwmC,YAAYrL,KAAKi0B,EAAM5oB,aAC5BxmC,KAAKspB,KAAK6R,KAAKi0B,EAAM9lC,MACH,SAAdtpB,KAAKg6C,KAAiB,CACtB,MAAqBh6C,KAAKwmC,YAAlBzxB,EAAR,EAAQA,IAAKC,EAAb,EAAaA,IADS,EAEL,CAACD,EAAIunB,EAAGvnB,EAAIgH,GAA5BhH,EAAIgH,EAFiB,KAEdhH,EAAIunB,EAFU,WAGL,CAACtnB,EAAIsnB,EAAGtnB,EAAI+G,GAA5B/G,EAAI+G,EAHiB,KAGd/G,EAAIsnB,EAHU,WAIO,CAACt8B,KAAKspB,KAAKgT,EAAGt8B,KAAKspB,KAAKvN,GAApD/b,KAAKspB,KAAKvN,EAJW,KAIR/b,KAAKspB,KAAKgT,EAJF,KAKtBt8B,KAAKy4B,SAAS3c,EAAIhL,KAAKif,GAAK,EAC5B/vB,KAAKy4B,SAAS1c,EAAIjL,KAAKif,GAE3B,IAAQyW,EAAsBxmC,KAAtBwmC,YAAald,EAAStpB,KAATspB,KACrB,GAAItpB,KAAK2uJ,WAAY,CACjB,IAAMG,EAzDQ,EAyDOh+I,KAAKkE,IAAIsU,EAAKxN,EAAGwN,EAAKvN,EAAGuN,EAAKgT,GACnDhT,EAAKvN,EAAI+yI,EACTtoH,EAAYmuG,eAAerrH,EAAKylI,UAAUD,GAAc/6H,gBAAgB,KACxEyS,EAAYxxB,IAAI+G,EAAIyqB,EAAYzxB,IAAIgH,EAAI+yI,EACxCxlI,EAAK1O,IAAIk0I,EAAcA,EAAcA,GAEzCtoH,EAAYS,UAAUjnC,KAAKixB,MAAMke,UACjC,IAAM6/G,EAAexoH,EAAYxxB,IAAI+G,EAzE9B,KAyEkCuN,EAAKvN,EACjC,WAATi+B,GACAh6C,KAAKmvC,SAASpzB,EAAIizI,EAClBhvJ,KAAK8gE,OAAO39B,OAAOx2B,GAAGiO,IAAI,EAAG,EAAG,KAGhC5a,KAAKmvC,SAASpzB,EAAI,EAClB/b,KAAKmvC,SAAS7S,EAAI0yH,EAClBhvJ,KAAK8gE,OAAO39B,OAAOx2B,GAAGiO,IAAI,EAAG,EAAG,IAEpC5a,KAAKivJ,YAAYT,K,yBAMrB,SAAYA,GACR,IAAMvqE,EAAanzE,KAAK8f,IAAI,EAvFT,EAwFJ,EAAX49H,GACJxuJ,KAAKkvJ,WAAWjrE,K,wBAKpB,SAAWkrE,GACP,MAAiCnvJ,KAAK8gE,OAA9B39B,EAAR,EAAQA,OAAQk+C,EAAhB,EAAgBA,QAAS9rE,EAAzB,EAAyBA,IACjB+T,EAAsBtpB,KAAtBspB,KAAMkd,EAAgBxmC,KAAhBwmC,YACH,MAAPjxB,IACAA,EAAI8oB,UACJr+B,KAAK8gE,OAAOvrD,IAAM,MAElBvV,KAAK2uJ,aACLQ,GAhGc,GAkGlB,IAAM71H,EAAQxoB,KAAKmgB,MAAM3H,EAAKxN,EAAIwN,EAAKgT,EAAI6yH,EAAaA,EAAa7lI,EAAKxN,EAAIwN,EAAKgT,GAC7E/C,EAASzoB,KAAKmgB,MAAM3H,EAAKxN,EAAIwN,EAAKgT,EAAI6yH,EAAa7lI,EAAKgT,EAAIhT,EAAKxN,EAAIqzI,GAC3E9tE,EAAQzmE,IAAI0e,EAAOC,GAEnB,IAAM61H,EAAW,IAAM9lI,EAAKxN,EAAIwd,EAC1B+1H,EAAY,IAAM/lI,EAAKgT,EAAI/C,EACjC4J,EAAO8M,MAAQzJ,EAAYxxB,IAAI8G,EAAIszI,EACnCjsH,EAAO+M,OAAS1J,EAAYzxB,IAAI+G,EAAIszI,EACpCjsH,EAAOiN,OAAS5J,EAAYzxB,IAAIunB,EAAI+yH,EACpClsH,EAAOgN,IAAM3J,EAAYxxB,IAAIsnB,EAAI+yH,EACjCrvJ,KAAKsvJ,kBAAkBtvJ,KAAK0uJ,YAAa,GACzC1uJ,KAAKixB,MAAMme,MAAMx0B,IAAI0O,EAAKxN,EAAI,EAAIszI,EAAU9lI,EAAKgT,EAAI,EAAI+yH,EAAW,GACpErvJ,KAAKqkD,aAAc,I,0BAMvB,SAAau8B,GACT5gF,KAAKyuJ,eAAev0G,QAAU0mC,EAC1BA,EAAY,GACZ5gF,KAAK2yC,SAAU,EACf3yC,KAAKixB,MAAM0hB,SAAU,IAGrB3yC,KAAK2yC,SAAU,EACf3yC,KAAKixB,MAAM0hB,SAAU,K,0BAG7B,WACI,OAAO3yC,KAAKyuJ,eAAev0G,U,yBAO/B,SAAYq1G,GACU,WAAdvvJ,KAAKg6C,MAKTh6C,KAAK8gE,OAAO39B,OAAOx2B,GAAGiO,IAAI9J,KAAKmiB,IAAIs8H,GAAW,EAAGz+I,KAAKkiB,IAAIu8H,IAC1DvvJ,KAAK8gE,OAAO+lB,eAAe7mF,OAJvBA,KAAK8gE,OAAO+lB,eAAe7mF,Q,+BAYnC,SAAkBovC,EAAO3xB,GACrB,IAAM+xI,EAAQxvJ,KAAKspB,KAAKvN,EAChBonB,EAAWnjC,KAAK8gE,OAAhB39B,OACRnjC,KAAK0uJ,YAAct/G,EACnBjM,EAAOkN,KAAO,EACdlN,EAAOmN,IAAMk/G,EAAQ/xI,EAAS2xB,EAC9BjM,EAAOwqB,yBACPxqB,EAAOiM,MAAMqgH,UAAUrgH,GAGvB,IAAM4/G,EAzKC,KAyKcQ,EACrBxvJ,KAAKixB,MAAMke,SAASpzB,EAAI,EAAIizI,EAAe7rH,EAAOmN,Q,GAnJrC4qE,IAsKfw0C,GAAoBC,KAAuB7+I,KAAKif,GAAK,IACrD6/H,GAAoB9+I,KAAKmiB,IAAIy8H,IAC7BG,GAAkB/+I,KAAKk9C,IAAI0hG,IAC3BliG,GAAO,IAAInrB,GACXhkC,GAAS,IAAIgkC,GACbytH,GAAc,IAAIztH,GAClBmnB,GAAY,IAAIwhE,GAChB+kC,GAAY,IAAI1tH,GAMhB2tH,G,kDACF,cAAgD,MAAlC52H,EAAkC,EAAlCA,OAAQnxB,EAA0B,EAA1BA,QAASqxB,EAAiB,EAAjBA,MAAOC,EAAU,EAAVA,OAAU,qBAC5C,gBACK90B,QAAU,KACf,EAAKwrJ,mBAAqB,IAAItJ,GAC9B,EAAKrtH,MAAQ,EACb,EAAKC,OAAS,EACd,EAAK8zB,OAAS,EACd,EAAK6iG,SAAU,EACf,EAAKC,YAAc,EACnB,EAAKC,iBAAmB,KAGxB,EAAKjtH,OAAS,IAAIgqB,GAAkB,GAAI,EAAG,GAAK,KAChD,EAAKnoD,IAAM,KACX,EAAK3G,OAAS,IAAI8zC,GAClB,EAAKk+G,eAAiB,IAAIl+G,GAC1B,EAAK08G,eAAiB,GACtB,EAAKroH,YAAc,IAAIxB,GACvB,EAAK1b,KAAO,IAAI+Y,GAChB,EAAKiuH,oBAAsB,EAC3B,EAAKC,kBAAoB,EACzB,EAAKC,kBApCW,GAqChB,EAAK1vF,OAAS,KACd,EAAK2vF,gBAAkB,EACvB,EAAKC,eAAiB,EACtB,EAAKC,SAAW,EAChB,EAAKC,UAAW,EAChB,EAAKC,aAAc,EACnB,EAAKC,WAAa,IAAIzuH,GACtB,EAAK0uH,cAAgB,IAAIxH,GACzB,EAAKyH,cAAgB,IAAIzH,GACzB,EAAK0H,cAAgB,IAAI1H,GACzB,EAAK2H,aAAe,KACpB,EAAKC,0BAA4B,KACjC,EAAKC,iBAAmB,IAAIjqI,IAC5B,EAAKkqI,uBAAyB,KAC9B,EAAK7sJ,KAAO,aACZ,EAAKyD,QAAUA,EACf,EAAKmxB,OAASA,EAGd,EAAK+J,OAAS,IAAIgqB,GAAkB,GAAI,EAAG,GAAK,KAChD,EAAKhqB,OAAO3+B,KAAO,aACnB,EAAKuhC,IAAI,EAAK1nC,QACd,EAAKiiG,QAAQhnE,EAAOC,GACpB,EAAKl7B,OAAOmG,KAAO,SACnB,EAAK6rJ,eAAe7rJ,KAAO,iBAC3B,EAAKnG,OAAO0nC,IAAI,EAAKsqH,gBACrB,EAAKxtC,MAAQ,IAAIsE,GAAe,EAAKkpC,gBACrC,IAAQnzD,EAAe,EAAK+yD,mBAApB/yD,WACA1jF,EAAU0jF,EAAV1jF,MAlDoC,OAmD5CA,EAAMwiF,QAAU,OAChBxiF,EAAM83I,cAAgB,OACtB93I,EAAM21B,SAAW,WACjB31B,EAAM22B,IAAM,IACZ,EAAKloC,QAAQspJ,WAAW/8I,cAAc,YAAYyyI,YAAY/pD,GAvDlB,E,iDA+DhD,WAEQl9F,KAAKyE,QAAUzE,KAAKo5B,OAAOI,WAAW,Q,8DAO9C,WAAgB40H,GAAhB,SAAAzjJ,EAAA,6DACI3K,KAAK0kE,QACL1kE,KAAKqwJ,eAAetqH,IAAIqoH,GAF5B,SAGUpuJ,KAAKwxJ,aAHf,gD,qHAQA,WAAgBxsJ,GAAhB,kDAAA2F,EAAA,yDAAqB65I,EAArB,+BAAwC,aAC/Bx/I,GAAOA,IAAQhF,KAAKgF,IAD7B,uBAEQw/I,EAAiB,GAFzB,6BAKIxkJ,KAAK0kE,QACL1kE,KAAKgF,IAAMA,EACkB,MAAzBhF,KAAKowJ,iBAPb,iCAQkCpwJ,KAAKowJ,iBAAiBh5C,KAAKotC,GAR7D,cAQciN,EARd,OASQzxJ,KAAKswJ,oBAAsBmB,EAAYC,aAAe9B,GACtD5vJ,KAAKuwJ,kBAAoBkB,EAAYlB,kBACrCvwJ,KAAK2xJ,aACL3xJ,KAAK87B,cAAc,CAAE7V,KAAM,aAAcjhB,IAAKhF,KAAKgF,MAZ3D,kCAiB0C,MAAlChF,KAAKmxJ,4BACLnxJ,KAAKmxJ,4BACLnxJ,KAAKmxJ,0BAA4B,MAnBzC,oBAuBqB,IAAInvJ,QAAJ,uCAAY,WAAOR,EAASC,GAAhB,eAAAkJ,EAAA,6DACrB,EAAKwmJ,0BAA4B,kBAAM1vJ,KADlB,kBAGI,EAAKwG,QAAQ2pJ,IAAWh7C,OAAOQ,KAAKpyG,EAAK,EAAKiD,QAASu8I,GAH3D,OAGX3kJ,EAHW,OAIjB2B,EAAQ3B,GAJS,gDAOjB4B,EAAO,EAAD,IAPW,yDAAZ,yDAvBrB,QAuBQ69H,EAvBR,6DAmCqB,MAAT,KAnCZ,sEAyCIt/H,KAAK0kE,QACL1kE,KAAKgF,IAAMA,EACXhF,KAAKkxJ,aAAe5xB,EACR,MAARA,GACAt/H,KAAKqwJ,eAAetqH,IAAIu5F,EAAKlwE,OAEzBpc,EAAessF,EAAftsF,WACFo+G,EAAmB,IAAIjqI,IACvB0nI,EAAiB,GAjD3B,cAkD4B77G,GAlD5B,IAkDI,2BAAW+C,EAAyB,QAChCq7G,EAAiBx2I,IAAIm7B,EAAUvxC,KAAMuxC,GACrC84G,EAAe1qJ,KAAK4xC,EAAUvxC,MApDtC,qCAsDIxE,KAAKgzC,WAAaA,EAClBhzC,KAAKoxJ,iBAAmBA,EACxBpxJ,KAAK6uJ,eAAiBA,EAxD1B,UAyDU7uJ,KAAKwxJ,aAzDf,2D,sHA2DA,4BAAA7mJ,EAAA,yDACI3K,KAAK6xJ,oBACDxzJ,EAAS,MACY,IAArB2B,KAAK6wJ,YAHb,gCAIc7wJ,KAAKiI,QAAQ6pJ,cAAc,gBAJzC,OAKQzzJ,EAAS2B,KAAK+xJ,YALtB,OAOI/xJ,KAAKgyJ,cAAc3zJ,GACnB2B,KAAK2xJ,aACL3xJ,KAAKiyJ,mBAAmBjyJ,KAAKywJ,iBAC7BzwJ,KAAK87B,cAAc,CAAE7V,KAAM,aAAcjhB,IAAKhF,KAAKgF,MAVvD,iD,yEAYA,WACIhF,KAAKgF,IAAM,KACXhF,KAAKkwJ,SAAU,EACI,MAAflwJ,KAAK8gE,QACL9gE,KAAK8gE,OAAOoxF,aAAa,GAE7B,IAAM5yB,EAAOt/H,KAAKkxJ,aAElB,GAAY,MAAR5xB,EAAc,qBACMt/H,KAAKqwJ,eAAetqJ,UAD1B,IACd,2BAAkD,KAAvCiC,EAAuC,QAC9ChI,KAAKqwJ,eAAet8G,OAAO/rC,IAFjB,8BAIds3H,EAAKjhG,UACLr+B,KAAKkxJ,aAAe,KAEW,MAA/BlxJ,KAAKqxJ,yBACLrxJ,KAAKqxJ,uBAAuB7+F,OAC5BxyD,KAAKqxJ,uBAAyB,MAElCrxJ,KAAK6iH,MAAMsvC,gBACXnyJ,KAAK6iH,MAAMuvC,YAAYpyJ,Q,uBAE3B,WACI,OAAOA,KAAKkxJ,e,qBAKhB,SAAQ53H,EAAOC,GACX,GAAIv5B,KAAKs5B,QAAUA,GAASt5B,KAAKu5B,SAAWA,EAA5C,CAQA,GALAv5B,KAAKs5B,MAAQxoB,KAAKkE,IAAIskB,EAAO,GAC7Bt5B,KAAKu5B,OAASzoB,KAAKkE,IAAIukB,EAAQ,GAC/Bv5B,KAAKiwJ,mBAAmB3vD,QAAQhnE,EAAOC,GACvCv5B,KAAKqtD,OAASrtD,KAAKs5B,MAAQt5B,KAAKu5B,OAChCv5B,KAAK2xJ,aACwB,MAAzB3xJ,KAAKowJ,iBAA0B,CAC/B,IAAMiC,EAAM7J,KACZxoJ,KAAKowJ,iBAAiBkC,OAAOh5H,EAAQ+4H,EAAK94H,EAAS84H,GAEvDryJ,KAAKkwJ,SAAU,K,+BAEnB,WAEI,GADAlwJ,KAAK3B,OAAO01C,OAAO/zC,KAAKqwJ,iBACC,IAArBrwJ,KAAK6wJ,YAAsB,CAI3B7wJ,KAAKwmC,YAAc2nH,GAAenuJ,KAAKqwJ,gBAHzB,SAACpqH,EAAKqoH,GAChB,OAAOroH,EAAIL,cAAc0oH,KAEiC,IAAItpH,SAGlEhlC,KAAKwmC,YAAY+rH,cAAcvyJ,KAAKqwJ,gBAExCrwJ,KAAKwmC,YAAYqB,QAAQ7nC,KAAKspB,MAC9BtpB,KAAK3B,OAAO0nC,IAAI/lC,KAAKqwJ,kB,2BAUzB,WAA6B,WAAfp7H,EAAe,uDAAN,KACnBj1B,KAAK3B,OAAO01C,OAAO/zC,KAAKqwJ,gBACV,MAAVp7H,IACAA,EAASj1B,KAAKwmC,YAAYS,UAAU,IAAI5E,KAE5C,IAAMmwH,EAAgB,SAAC/yJ,EAAO6uJ,GAC1B,OAAOx9I,KAAKkE,IAAIvV,EAAOw1B,EAAOT,kBAAkB85H,KAE9CoD,EAAe5gJ,KAAKujB,KAAK85H,GAAenuJ,KAAKqwJ,eAAgBmC,EAAe,IAClFxyJ,KAAKswJ,oBAAsBoB,EAAe9B,GAC1C,IAAM6C,EAAgB,SAAChzJ,EAAO6uJ,GAC1BA,EAAOjqH,IAAIpP,GACX,IAAMy9H,EAAW5hJ,KAAKujB,KAAKi6H,EAAOxyI,EAAIwyI,EAAOxyI,EAAIwyI,EAAOhyH,EAAIgyH,EAAOhyH,GACnE,OAAOxrB,KAAKkE,IAAIvV,EAAOizJ,GAAY,EAAKpC,oBAAsBx/I,KAAKihB,IAAIu8H,EAAOvyI,MAElF/b,KAAKuwJ,kBACDpC,GAAenuJ,KAAKqwJ,eAAgBoC,EAAe,GAAK5C,GAC5D7vJ,KAAK3B,OAAO0nC,IAAI/lC,KAAKqwJ,kB,wBAMzB,WACI,IAAMsC,EAAW9C,GAAkB/+I,KAAKkE,IAAI,EAAGhV,KAAKuwJ,kBAAoBvwJ,KAAKqtD,QAC7ErtD,KAAKwwJ,kBAAoB,EAAI1/I,KAAKi9C,KAAK4kG,GAAY,IAAM7hJ,KAAKif,K,qBAKlE,WACI,MAAO,CAAEuJ,MAAOt5B,KAAKs5B,MAAOC,OAAQv5B,KAAKu5B,U,uBAK7C,SAAUq5H,EAAQC,EAAQC,GACtB9yJ,KAAK8wJ,WAAWl2I,KAAKg4I,GAASC,GAASC,K,sCAK3C,SAAyBtJ,GACrBxpJ,KAAK+wJ,cAAcpH,aAAaH,GAChCxpJ,KAAKgxJ,cAAcrH,aAAaH,GAChCxpJ,KAAKixJ,cAActH,aAAaH,K,uBAKpC,WACI,OAAOuG,GAAU50H,KAAKn7B,KAAK8wJ,YAAY/8H,gBAAgB,K,wBAK3D,WACI/zB,KAAK+yJ,aA/iCS,O,0BAqjClB,SAAahhJ,GACT,IAAMihJ,EAAOhzJ,KAAK8wJ,WACZzyJ,EAAS2B,KAAK3B,OAAO8wC,SAC3B,IAAK6jH,EAAKhrH,OAAO3pC,GAAS,CACtB,IAAMomC,EAASzkC,KAAKswJ,oBACdx0I,EAAYzd,EAAZyd,EAAGC,EAAS1d,EAAT0d,EAAGugB,EAAMj+B,EAANi+B,EACZxgB,EAAI9b,KAAK+wJ,cAAc9nI,OAAOnN,EAAGk3I,EAAKl3I,EAAG/J,EAAO0yB,GAChD1oB,EAAI/b,KAAKgxJ,cAAc/nI,OAAOlN,EAAGi3I,EAAKj3I,EAAGhK,EAAO0yB,GAChDnI,EAAIt8B,KAAKixJ,cAAchoI,OAAOqT,EAAG02H,EAAK12H,EAAGvqB,EAAO0yB,GAChDzkC,KAAK3B,OAAO8wC,SAASv0B,IAAIkB,EAAGC,EAAGugB,GAC/Bt8B,KAAK3B,OAAOi2C,oBACZt0C,KAAKizJ,kBAAkBjzJ,KAAKkzJ,KAC5BlzJ,KAAKkwJ,SAAU,K,0BAMvB,SAAaiD,EAAQC,GACjB,MAAiBpzJ,KAAKmvC,SAAdrzB,EAAR,EAAQA,EAAGwgB,EAAX,EAAWA,EACXt8B,KAAKkzJ,IAAMpiJ,KAAKyjB,MAAM4+H,EAASr3I,EAAGs3I,EAAS92H,K,eAY/C,WACI,OAAOt8B,KAAKy4B,SAAS1c,G,IAPzB,SAAQwzI,GACJvvJ,KAAKy4B,SAAS1c,EAAIwzI,EAClBvvJ,KAAKs0C,mBAAkB,GACvBt0C,KAAKizJ,kBAAkB1D,GACvBvvJ,KAAKkwJ,SAAU,I,yBAQnB,WACI,OAAmC,MAA/BlwJ,KAAKqxJ,uBACErxJ,KAAKqxJ,uBAAuBh/F,KAEhC,G,IAPX,SAAkB5yD,GACdO,KAAK6iH,MAAMwwC,QAAQ5zJ,K,oBAQvB,WACI,OAAmC,MAA/BO,KAAKqxJ,wBACLrxJ,KAAKqxJ,uBAAuBiC,UACrBtzJ,KAAKqxJ,uBAAuBiC,UAAU5/C,SAE1C,I,8BAEX,WACI,OAAsC,MAA/B1zG,KAAKqxJ,yB,2BAQhB,WAA8C,IAAhC7sJ,EAAgC,uDAAzB,KAAM+uJ,EAAmB,uDAAH,EACvC,GAAyB,MAArBvzJ,KAAKkxJ,aAAT,CAGA,IAAQl+G,EAAehzC,KAAfgzC,WACR,GAAkB,MAAdA,GAA4C,IAAtBA,EAAWx0C,OAArC,CAIA,IAAIg1J,EAAgB,KACR,MAARhvJ,IACAgvJ,EAAgBxzJ,KAAKoxJ,iBAAiBrwJ,IAAIyD,IAEzB,MAAjBgvJ,IACAA,EAAgBxgH,EAAW,IAE/B,IACI,IAAgCygH,EAAwBzzJ,KAAhDqxJ,uBACRrxJ,KAAKqxJ,uBACDrxJ,KAAK6iH,MAAM6wC,WAAWF,EAAexzJ,MAAM2zJ,OAC/C3zJ,KAAKqxJ,uBAAuBljG,SAAU,EACX,MAAvBslG,GACAzzJ,KAAKqxJ,yBAA2BoC,GAChCzzJ,KAAKqxJ,uBAAuBhsC,cAAcouC,EAAqBF,GAAe,GAGtF,MAAOzxJ,GACHwjB,QAAQxjB,MAAMA,SArBdwjB,QAAQM,KAAR,iE,2BAwBR,WACuC,MAA/B5lB,KAAKqxJ,yBACLrxJ,KAAKqxJ,uBAAuB7+F,OAC5BxyD,KAAKqxJ,uBAAuB3sF,QAC5B1kE,KAAKqxJ,uBAAyB,MAElCrxJ,KAAK6iH,MAAMsvC,kB,6BAEf,SAAgB1uJ,GACZzD,KAAK6iH,MAAM55F,OAAOxlB,K,0BAMtB,WACI,IAAMq9D,EAAS9gE,KAAK8gE,OACpB,GAAc,MAAVA,EAAgB,CAChB,IAAM9mB,EAAoC,SAA7Bh6C,KAAKiI,QAAQ2rJ,YAAyB,OAAS,SAC5D9yF,EAAO8tF,SAAS5uJ,KAAMA,KAAK0wJ,eAAgB12G,M,gCAMnD,SAAmBy2G,GAEf,GADAzwJ,KAAKywJ,gBAAkBA,EACE,MAArBzwJ,KAAKkxJ,aAAT,CAGA,IAAIpwF,EAAS9gE,KAAK8gE,OACZ9mB,EAAoC,SAA7Bh6C,KAAKiI,QAAQ2rJ,YAAyB,OAAS,SAC9C,MAAV9yF,GACAA,EAAOoxF,aAAazB,GACpB3vF,EAAO8tF,SAAS5uJ,KAAMA,KAAK0wJ,eAAgB12G,IAEtCy2G,EAAkB,KACvB3vF,EAAS,IAAIytF,GAAOvuJ,KAAMA,KAAK0wJ,eAAgB12G,IACxCk4G,aAAazB,GACpBzwJ,KAAK8gE,OAASA,M,+BAQtB,SAAkB0tF,GACdxuJ,KAAK0wJ,eAAiBlC,EACtB,IAAM1tF,EAAS9gE,KAAK8gE,OACN,MAAVA,GACAA,EAAOmuF,YAAYT,K,+BAO3B,SAAkBe,GACd,IAAMzuF,EAAS9gE,KAAK8gE,OACN,MAAVA,GACAA,EAAO+yF,YAAYtE,K,2BAO3B,WACI,IAAMzuF,EAAS9gE,KAAK8gE,OACpB,GAAc,MAAVA,EACA,OAAO,EAGP,IAAQzc,EAAgByc,EAAhBzc,YAER,OADAyc,EAAOzc,aAAc,EACdA,I,qCAOf,SAAwBjV,EAAO3xB,GAC3B,IAAMqjD,EAAS9gE,KAAK8gE,OACN,MAAVA,GACAA,EAAOwuF,kBAAkBlgH,EAAO3xB,K,wCAQxC,SAA2Bq2I,GAA8B,IAAf7yJ,EAAe,uDAANjB,KAC/CwpD,GAAUuqG,cAAcD,EAAe9zJ,KAAKmjC,QAC5C,IAAM6wH,EAAOxqG,GAAU6hE,gBAAgBpqH,GAAQ,GAC/C,GAAoB,IAAhB+yJ,EAAKx1J,OACL,OAAO,KAEX,IAAMy1J,EAAMD,EAAK,GACjB,OAAgB,MAAZC,EAAIjqG,KACG,MAEXiqG,EAAIjqG,KAAK1lB,OAAO0e,mBAAkB,IAAI5tB,IAAU2hB,gBAAgBk9G,EAAIhzJ,OAAOuiC,cACpE,CAAE2L,SAAU8kH,EAAI9tH,MAAO7B,OAAQ2vH,EAAIjqG,KAAK1lB,W,wBAOnD,SAAW4vH,GACPl0J,KAAK3B,OAAO0nC,IAAImuH,GAIhBl0J,KAAKiwJ,mBAAmB/yD,WAAW+pD,YAAYiN,EAAQjsJ,W,2BAE3D,SAAcisJ,GACVl0J,KAAK3B,OAAO01C,OAAOmgH,K,yBAKvB,SAAY7nB,GAER,IADA,IAAQtmI,EAAa/F,KAAK3B,OAAlB0H,SACCxH,EAAI,EAAGyK,EAAIjD,EAASvH,OAAQD,EAAIyK,EAAGzK,IAAK,CAC7C,IAAM21J,EAAUnuJ,EAASxH,GACrB21J,aAAmBlH,IACnB3gB,EAAK6nB,M,4BAQjB,SAAeC,GAAgB,WAC3Bn0J,KAAKo0J,aAAY,SAACF,GACd1mG,GAAKryB,KAAKg5H,GACV91J,GAAOo1C,sBAAsBygH,EAAQ1wH,aACrCgqB,GAAKnpB,IAAIhmC,IACTyxJ,GAAY30H,KAAK+4H,EAAQ5vH,QACpBgI,mBAAmB,EAAKjuC,OAAOmlC,aAChCgqB,GAAK7tB,IAAImwH,IAAe,EACxBoE,EAAQG,OAGRH,EAAQtG,Y,4BAQpB,SAAeh7H,GACX5yB,KAAKo0J,aAAY,SAACF,GACdA,EAAQI,OAAO1hI,Q,mCAOvB,SAAsB+f,GAClB3yC,KAAKo0J,aAAY,SAACF,GACdA,EAAQvhH,QAAUA,O,wBAG1B,WACI,IAAQxP,EAAWnjC,KAAXmjC,OACJnjC,KAAKkwJ,UACLlwJ,KAAKu0J,eAAepxH,EAAOgM,UAC3BnvC,KAAKiwJ,mBAAmB/yD,WAAW1jF,MAAMwiF,QAAU,GACnDh8F,KAAKiwJ,mBAAmBzqJ,OAAOxF,KAAMmjC,Q,GAliBxBojE,IA+iBnBiuD,GA2IN,WAEC,IAAMC,EAAiB,IAAI5pD,GAAmB,CAE7C9+C,SAAU,CACTtN,aAAc,CAAEh/C,MAAO,MACvB0+C,UAAW,CAAE1+C,MAAO,MACpBoxH,UAAW,CAAEpxH,MAAO,IAAIi0B,GAAS,EAAG,KAGrC04B,aAAY,qQAkBZC,eAAc,4sEAqGdtS,SA9x1CiB,EA+x1CjBY,WAAW,EACXC,YAAY,IAMb,OAFA65G,EAAexuI,KAAO,qBAEfwuI,EApRgBC,GAElBC,GAAQ,IAAIxrG,GAAM,IAAImL,GAAe,EAAG,GAAKkgG,IAE7CI,GAAc,IAAIh6C,GAAoB,EAAG,EAAG,EAAG,EAAG,EAAG,GAEvDi6C,GAAc,KAEd9xE,GAAY,KAEV+xE,G,WAEL,WAAa3lG,GAAW,qBAEvB4zB,GAAY5zB,GAEFtyC,QAAS83I,GAAOC,I,mDAI3B,SAAiB/+G,GAEhB,GAAK,iBAAkBA,KAAa,EAApC,CAEA,IAAQ4I,EAA4B5I,EAA5B4I,aAAcN,EAActI,EAAdsI,UAEtB,GAAsB,OAAjBM,GAAuC,OAAdN,GAAwBM,EAAa5jB,kBAAmBgb,EAAS5C,SAAS8hH,iBAAxG,CAEAl/G,EAAS5C,SAAS8hH,kBAAmB,EAErC,IAAIz7H,EAAQxoB,KAAKkE,IAAKypC,EAAaxlB,MAAMK,MAAO6kB,EAAUllB,MAAMK,OAC5DC,EAASzoB,KAAKkE,IAAKypC,EAAaxlB,MAAMM,OAAQ4kB,EAAUllB,MAAMM,QAElE,GAAOrI,GAAUR,aAAc4I,IAAapI,GAAUR,aAAc6I,GAApE,CAEA,IAAMy7H,EAAYjyE,GAAUxzB,kBAEtB6S,EAAY2gB,GAAU3gB,UAc5B,GAZA2gB,GAAU3gB,WAAY,EAED,OAAhByyF,IAAwBA,GAAYv7H,QAAUA,GAASu7H,GAAYt7H,SAAWA,IAE7D,OAAhBs7H,IAAuBA,GAAYx2H,WAExCw2H,GAAc,IAAIj3H,GAAmBtE,EAAOC,EAAQ,CAAE2E,aAAa,KAEvDH,aAAc,GAItBzE,IAAUmlB,EAAaxlB,MAAMK,OAASC,IAAWklB,EAAaxlB,MAAMM,OAAS,CAEjF,IAAMt0B,EAAS,CACdi1B,MAAOukB,EAAavkB,MACpBC,MAAOskB,EAAatkB,MACpBC,UAAWqkB,EAAarkB,UACxBC,UAAWokB,EAAapkB,UACxB6D,aAAa,GAGR+2H,EAAqB,IAAIr3H,GAAmBtE,EAAOC,EAAQt0B,GAEjEgwJ,EAAmBh3H,QAAQpD,iBAAkB,EAI7CkoD,GAAUvzB,gBAAiBylG,GAE3Bp/G,EAAS4I,aAAew2G,EAAmBh3H,QAEtC4X,EAAS6I,cAAgBD,IAAe5I,EAAS6I,aAAe7I,EAAS4I,cAEzE5I,EAASkI,OAASU,IAAe5I,EAASkI,MAAQlI,EAAS4I,cAIhE5I,EAAS4I,aAAahhC,OAAO0d,KAAMsjB,EAAahhC,QAChDo4B,EAAS4I,aAAa1gC,OAAOod,KAAMsjB,EAAa1gC,QAChD83B,EAAS4I,aAAaxpB,OAAOkG,KAAMsjB,EAAaxpB,QAChD4gB,EAAS4I,aAAahmB,SAAWgmB,EAAahmB,SAE9Cod,EAAS4I,aAAa7jB,iBAAmB6jB,EAAa7jB,iBACtDib,EAAS4I,aAAa5lB,OAAOsC,KAAMsjB,EAAa5lB,QAIjD27H,GAAgBzoG,SAAStN,aAAah/C,MAAQg/C,EAE9C+1G,GAAgBzoG,SAAS5N,UAAU1+C,MAAQ0+C,EAM3C,IAJA,IAAMhP,EAAW,IAAIzb,GAAS,EAAG,GAE3Bm9F,EAAY2jC,GAAgBzoG,SAAS8kE,UAAUpxH,MAE3Cg/I,EAAM,EAAGnlH,GAAS,GAAKC,GAAU,IAAMklH,EAAKnlH,GAAS,EAAGC,GAAU,EAM3Es3F,EAAUj2G,IAAK,EAAM0e,EAAO,EAAMC,GAEtB,GAAPklH,GAAW5tB,EAAUj2G,IAAK,EAAK,GAEpCi6I,GAAY72H,SAASpjB,IAAKu0B,EAASrzB,EAAGqzB,EAASpzB,EAAGud,EAAOC,GAEzDs7H,GAAY/2H,QAAQljB,IAAKu0B,EAASrzB,EAAGqzB,EAASpzB,EAAGud,EAAOC,GAExDwpD,GAAUvzB,gBAAiBqlG,IAE3B9xE,GAAUv9E,OAAQmvJ,GAAOC,IAEzB7xE,GAAUiiB,yBAA0B71D,EAAU0G,EAAS4I,aAAcggG,GAErE+V,GAAgBzoG,SAAStN,aAAah/C,MAAQo2C,EAAS4I,aAInDA,IAAiB5I,EAAS4I,cAAeA,EAAapgB,UAE3D0kD,GAAUvzB,gBAAiBwlG,GAE3BjyE,GAAU3gB,UAAYA,O,qBAIvB,WAECoyF,GAAgBn2H,UAEhBs2H,GAAMpuH,SAASlI,UAEK,MAAfw2H,IAAsBA,GAAYx2H,c,KAiKzC,IAAM62H,GAAS,GAITC,GAAYrkJ,KAAKif,GAAL,GACZqlI,GAAU,IAAI1hI,GAKd2hI,GAAY,SAACzqG,EAAU0qG,EAASC,GAGlC,IAFA,IAAI7wH,EAAM4wH,EAAU,EAAKC,EAAU,EAAI,GAAKzkJ,KAAKif,GAAK,EACjDwlI,EAAU,EAAIzkJ,KAAKif,GAAK,EAAIjf,KAAKif,GAC7BxxB,EAAI,EAAGA,GAVH,KAUoBA,EAC7BqsD,EAASzmD,KAAKmxJ,EAAU,IAAwBxkJ,KAAKkiB,IAAI0R,GAAM6wH,EAAU,IAAwBzkJ,KAAKmiB,IAAIyR,GAAM,EAAG4wH,EAAUJ,GAASpkJ,KAAKkiB,IAAI0R,GAAM6wH,EAAUL,GAASpkJ,KAAKmiB,IAAIyR,GAAM,GACvLA,GAAOywH,IAeTK,G,kDACF,WAAYpmG,EAAOpV,GAAM,0BACrB,IAAMzT,EAAW,IAAIwd,GACfsnB,EAAY,GACZzgB,EAAW,GACTthC,EAAsB8lC,EAAtB9lC,KAAMkd,EAAgB4oB,EAAhB5oB,YACR1qB,EAAIwN,EAAKxN,EAAI,EACbC,GAAc,SAATi+B,EAAkB1wB,EAAKvN,EAAIuN,EAAKgT,GAAK,EAChD+4H,GAAUzqG,EAAU9uC,EAAGC,GACvBs5I,GAAUzqG,GAAW9uC,EAAGC,GACxBs5I,GAAUzqG,GAAW9uC,GAAIC,GACzBs5I,GAAUzqG,EAAU9uC,GAAIC,GAExB,IADA,IAAM05I,EAAc7qG,EAASpsD,OAAS,EAC7BD,EAAI,EAAGA,EAAIk3J,EAAc,EAAGl3J,GAAK,EACtC8sE,EAAUlnE,KAAK5F,EAAGA,EAAI,EAAGA,EAAI,EAAGA,EAAGA,EAAI,EAAGA,EAAI,GAElD,IAAMA,EAAIk3J,EAAc,EACxBpqF,EAAUlnE,KAAK5F,EAAGA,EAAI,EAAG,EAAGA,EAAG,EAAG,GAClCgoC,EAASte,aAAa,WAAY,IAAIq7B,GAAuBsH,EAAU,IACvErkB,EAAS0hB,SAASojB,IAClB,cAAM9kC,IACDyT,KAAOA,EACZ,IAAMnE,EAAW,EAAKA,SAWtB,OAVAA,EAASmE,KA/21CE,EAg31CXnE,EAASsE,aAAc,EACvBtE,EAASqE,QAAU,EACnB,EAAKw7G,YAAc,EACnB,EAAKC,cAAgB,IAAIpM,GACzB,EAAKqM,SACD,IAAIzsG,GAAK,IAAImL,GAAc,GAAKx4C,EAAIo5I,IAAS,GAAKn5I,EAAIm5I,MAC1D,EAAKU,SAASjjH,SAAU,EACxB,EAAK5M,IAAI,EAAK6vH,UACdpvH,EAAYS,UAAU,EAAKkI,UACnB6K,GACJ,IAAK,SACD,EAAKu4E,SAASzhH,KAAKif,GAAK,GACxB,EAAK8lI,aAAervH,EAAYzxB,IAAIgH,EACpC,EAAKozB,SAASpzB,EAAI,EAAK85I,aACvB,MACJ,IAAK,OACD,EAAKA,aAAervH,EAAYzxB,IAAIunB,EACpC,EAAK6S,SAAS7S,EAAI,EAAKu5H,aAxCV,OA0CrBzmG,EAAM/wD,OAAO0nC,IAAb,gBA1CqB,E,0CAgDzB,SAAOqpB,EAAO0mG,EAASC,GACnBX,GAAQx6I,IAAIk7I,GAAUC,GACtB/1J,KAAK41J,SAASjjH,SAAU,EACxB,IAAMqjH,EAAY5mG,EAAM6mG,2BAA2Bb,GAASp1J,KAAK41J,UAEjE,OADA51J,KAAK41J,SAASjjH,SAAU,EACJ,MAAbqjH,EAAoB,KAAOA,EAAU7mH,W,wBAchD,WACI,MAAkB,SAAdnvC,KAAKg6C,KACEh6C,KAAKmvC,SAAS7S,EAAIt8B,KAAK61J,aAGvB71J,KAAKmvC,SAASpzB,EAAI/b,KAAK61J,c,IAbtC,SAAiBp4I,GACK,SAAdzd,KAAKg6C,KACLh6C,KAAKmvC,SAAS7S,EAAIt8B,KAAK61J,aAAep4I,EAGtCzd,KAAKmvC,SAASpzB,EAAI/b,KAAK61J,aAAep4I,I,gBAc9C,SAASk1B,GACL3yC,KAAK01J,YAAc/iH,EA5GP,IA4G+B,I,2BAK/C,SAAc5gC,GACV,IAAM8jC,EAAW71C,KAAK61C,SACtBA,EAASqE,QACLl6C,KAAK21J,cAAc1sI,OAAO4sB,EAASqE,QAASl6C,KAAK01J,YAAa3jJ,EAAO,GACzE/R,KAAK2yC,QAAUkD,EAASqE,QAAU,I,qBAKtC,WACI,IAAIg8G,EACJ,EAA+Bl2J,KAAK41J,SAA5BrvH,EAAR,EAAQA,SAAUsP,EAAlB,EAAkBA,SAClBtP,EAASlI,UACTwX,EAASxX,UACTr+B,KAAKumC,SAASlI,UACdr+B,KAAK61C,SAASxX,UACS,QAAtB63H,EAAKl2J,KAAKoyC,cAA2B,IAAP8jH,GAAyBA,EAAGniH,OAAO/zC,U,GArG/CmpD,IA0IrBgtG,GACc,iBADdA,GAEe,kBAFfA,GAGa,gBAHbA,GAIM,SAENC,GACQ,WADRA,GAEY,eAEZ11E,GAAU,IAAIr+C,GACdrK,GAAU,IAAIuU,GACd8pH,GAAc,IAAIh0H,GAClBi0H,G,kDACF,WAAYnnG,GAAU,kCAClB,gBACKA,SAAWA,EAChB,EAAKonG,eAAiB,KACtB,EAAKC,aAAc,EACnB,EAAKxyD,eAAiB,IAAI3hE,GAC1B,EAAKo0H,aAAe,KACpB,EAAKC,SAAW,KAChB,EAAKC,kBAAoB,KACzB,EAAKC,mBAAqB,KAC1B,EAAKC,cAAgB,KACrB,EAAKvkG,MAAQ,KACb,EAAKwkG,iBAAmB,KACxB,EAAKC,uBAAyB,KAC9B,EAAK3iE,YAAc,KACnB,EAAK4iE,gBAAkB,KACvB,EAAKC,eAAiB,KACtB,EAAKC,yBAA2B,KAChC,EAAKC,QAAU,KACf,EAAKC,UAAW,EAChB,EAAKC,OAAS,EACd,EAAKpK,aAAc,EACnB,EAAK3pH,iBAAmB,IAAIiJ,GAC5B,EAAKhJ,wBAA0B,IAAIgJ,GACnC,EAAKyoH,UAAY,IAAI3yH,GACrB,EAAKi1H,mBAAoB,EACzB,EAAKC,eAAgB,EACrB,EAAKC,YAAa,EAClB,EAAKC,gBAAiB,EACtB,EAAKC,iBAAmB,IAAIr1H,GAC5B,EAAKs1H,WAAa,EAClB,EAAKC,UAAY,EACjB,EAAKC,aAAe,IAAIx1H,GACxB,EAAKy1H,QAAU,EACf,EAAKC,UAAY,EACjB,EAAKC,QAAU,IAAIzO,GACnB,EAAK0O,QAAU,IAAI1O,GACnB,EAAK2O,QAAU,IAAI3O,GACnB,EAAK4O,UAAY,IAAI5O,GACrB,EAAK6O,YAAc,IAAI7O,GACvB,EAAK8O,gCAAkC,kBAAM,EAAKC,kBAClD,EAAKC,cAAgB,WACQ,MAArB,EAAK9B,cAAwB,EAAK//D,eAClC,EAAK+/D,aAAap4H,UAClB,EAAKo4H,aAAe,IAAIjB,GAAa,EAAKgD,eAAgB,EAAKhC,YAAc,OAAS,YAG9F,EAAKiC,cAAgB,SAACrnJ,GAClB,IAAMsnJ,EAAY,EAAK3B,uBACvB,GAAiB,MAAb2B,EAAJ,CAGA,IAAMC,EAAU,EAAKrmG,MAAMsmG,mCAAmCF,GACxDtpG,EAAQ,EAAKopG,eACbvyH,EAAM,EAAKwwH,aACjB,GAAuB,IAAnBkC,EAAQn6J,OAAc,CACtB,EAAK41F,YAAchjF,EAAMgjF,YACzB,IAAQ1sD,EAAS,EAAK0sD,YAAYykE,QAA1BnxH,KACF2uH,EAAcpwH,EAAI6yH,OAAO,EAAKN,eAAgB9wH,EAAK,GAAIA,EAAK,IAClEzB,EAAI2nH,MAAO,EACQ,MAAfyI,GACA,EAAKkB,eAAgB,EACrB,EAAKG,iBAAiBv8H,KAAKk7H,KAED,IAArB,EAAKG,cACV,EAAKgB,YAAa,EAClB,EAAKI,UA9FH,IA8FelwH,EAAK,SAGzB,GAAuB,IAAnBixH,EAAQn6J,OAAc,CAC3BynC,EAAI2nH,MAAO,EACX,EAAK6J,gBAAiB,EACtB,IAAQsB,EAAe,EAAKC,YAAYL,GAAhCI,WACR,EAAKpB,WAAaoB,EAAa3pG,EAAMhgB,MAAMtzB,KAGnD,EAAKm9I,YAAc,WACf,EAAK1B,eAAgB,EACrB,EAAKC,YAAa,EAClB,EAAKC,gBAAiB,EACtB,EAAKrjE,YAAc,KACnB,EAAKyjE,aAAa97I,GACd,EAAK06I,aAAayC,aAAe,EAAKV,eAAeppH,MAAMtzB,EAC/D,EAAK26I,aAAa7I,MAAO,GAE7B,EAAKuL,cAAgBhqG,EAASgqG,cAC9B,EAAKA,cAAcluI,GAAGkjC,SAAU,EAtFd,E,2FAwFtB,4BAAAxjD,EAAA,6DACIi9I,KADJ,SAE0Bz9I,UAAU8gB,GAAGmuI,eAAe,eAAgB,CAC9DC,iBAAkB,CAAC,YACnBC,iBAAkB,CAAC,eACnBC,WAAY,CAAEn4C,KAAMphH,KAAKm3J,WALjC,cAEUl1F,EAFV,OAOIjiE,KAAKm5J,cAAcluI,GAAGqsE,sBAAsB,SAPhD,SAQUt3F,KAAKm5J,cAAcluI,GAAGusE,WAAWv1B,GAR3C,gCASWA,GATX,gD,gFAcA,WACI,OAAOjiE,KAAKg3J,kB,yEAMhB,sBAAArsJ,EAAA,sEAEQi9I,KAFR,SAGqBz9I,UAAU8gB,GAAGE,mBAAmB,gBAHrD,+EAMQ7F,QAAQM,KAAK,uCACbN,QAAQM,KAAR,MACAN,QAAQM,KAAK,gCARrB,mBASe,GATf,yD,kHAeA,WAAcwpC,GAAd,gCAAAzkD,EAAA,6DACQ3K,KAAK02F,cACLpxE,QAAQM,KAAK,sDAEb4zI,EAAwB,IAAIx3J,SAAQ,SAACR,EAASi4J,GAC9ClnG,uBAAsB,kBAAM/wD,UAEhC4tD,EAAMsqG,uBAAsB,GAC5BtqG,EAAM8gG,SAAU,EARpB,SAUUsJ,EAVV,cAYIx5J,KAAKg3J,gBAAkB5nG,EACvBpvD,KAAKm3J,QAAU/nG,EAAMnnD,QAAQspJ,WAAW/8I,cAAc,eAb1D,UAciCxU,KAAK25J,mBAdtC,eAcUpD,EAdV,QAemBjkJ,iBAAiB,OAAO,WACnC,EAAKsnJ,uBACN,CAAEC,MAAM,KACLC,EAAa1qG,EAAMnnD,QAAQspJ,WAAW/8I,cAAc,+BAC/C24I,UAAUpnH,IAAI,WACzB+zH,EAAWxnJ,iBAAiB,QAAStS,KAAKq4J,iCAC1Cr4J,KAAKk3J,yBAA2B4C,EArBpC,UAsBiCvD,EAAet+D,sBAAsB,UAtBtE,QAsBU8hE,EAtBV,OAuBI/5J,KAAKo3J,UAAW,EAChBp3J,KAAKq3J,OAAS,EACdr3J,KAAKitJ,aAAc,EACnBjtJ,KAAK22J,kBAAoBvnG,EAAM8jG,IAC/BlzJ,KAAK83J,QAAU1oG,EAAM8jG,IACrBlzJ,KAAK+3J,UAAY,EACjB/3J,KAAK62J,cAAgBznG,EAAMkR,WAC3BlR,EAAMkR,WAAa,KACnBtgE,KAAK42J,mBAAqBxnG,EAAMqhG,gBAChCrhG,EAAM6iG,mBAAmB,GACzBjyJ,KAAKg1J,UAAU75H,KAAKi0B,EAAM2iG,aAC1B3iG,EAAM98C,iBAAiB,aAActS,KAAKu4J,eACpC3lI,EArLQ,GAqLkB9hB,KAAKif,GAAK,IACpCka,GAA2B,IAArBjqC,KAAKw2J,iBACbj0J,EACA,IAAIy3J,MAAM,IAAIC,SAAS,EAAG,EAAG,GAAI,CAAEn+I,EAAG,EAAGC,GAAIjL,KAAKmiB,IAAIL,GAAU0J,GAAIxrB,KAAKkiB,IAAIJ,KACjF2jI,EAAelrI,qBAAqB,CAAE6uI,MAAOH,EAAgBI,UAAWlwH,IACnEhoC,MAAK,SAAAm4J,GACN,EAAKtD,iBAAmBsD,KAE5Bp6J,KAAKu2J,eAAiBA,EACtBv2J,KAAKy2J,aACD,IAAIjB,GAAapmG,EAAOpvD,KAAKw2J,YAAc,OAAS,UACxDx2J,KAAKs3J,mBAAoB,EACzBt3J,KAAKg4J,QAAQrO,aA/LD,KAgMZ3pJ,KAAKi4J,QAAQtO,aAhMD,KAiMZ3pJ,KAAKk4J,QAAQvO,aAjMD,KAkMZ3pJ,KAAK02J,SAAW2D,YAAY30C,MAC5B1lH,KAAK87B,cAAc,CAAE7V,KAAM,SAAU5E,OAAQ80I,KAnDjD,iD,0HAwDA,mCAAAxrJ,EAAA,yDACS3K,KAAK02F,aADd,wDAIU4jE,EAAiB,IAAIt4J,SAAQ,SAACR,GAChC,EAAKy1J,eAAiBz1J,KAL9B,kBAQcxB,KAAKu2J,eAAetvJ,MARlC,uBAScqzJ,EATd,yDAYQh1I,QAAQM,KAAK,8CACbN,QAAQM,KAAR,MACA5lB,KAAK45J,qBAdb,0D,8EAoBA,WACI,OAA8B,MAAvB55J,KAAKw4J,iB,kBAEhB,WACI,OAAOx4J,KAAKg1J,Y,0BAEhB,WACI,IAAM5lG,EAAQpvD,KAAKw4J,eACnB,GAAa,MAATppG,EAAe,CACf,IAAM/wD,EAAS+wD,EAAM2iG,YACrB/xJ,KAAKg1J,UAAU75H,KAAK98B,GAChB2B,KAAKw2J,YAGLpnG,EAAMmrG,UAAUl8J,EAAOyd,EAAGzd,EAAO0d,EAAGqzC,EAAM5oB,YAAYzxB,IAAIunB,GAI1D8yB,EAAMmrG,UAAUl8J,EAAOyd,EAAGszC,EAAM5oB,YAAYzxB,IAAIgH,EAAG1d,EAAOi+B,M,gCAItE,WACI,IAAM2lC,EAAUjiE,KAAKu2J,eACN,MAAXt0F,IACAA,EAAQ1vD,oBAAoB,cAAevS,KAAKy4J,eAChDx2F,EAAQ1vD,oBAAoB,YAAavS,KAAKi5J,aAC9Cj5J,KAAKu2J,eAAiB,MAE1B,IAAMnnG,EAAQpvD,KAAKw4J,eACnB,GAAa,MAATppG,EAAe,CACf,IAAQnnD,EAAYmnD,EAAZnnD,QACRmnD,EAAMjgB,SAASv0B,IAAI,EAAG,EAAG,GACzBw0C,EAAMhgB,MAAMx0B,IAAI,EAAG,EAAG,GACtBw0C,EAAMorG,wBAAwB,EAAG,GACjC,IAAMtH,EAAMlzJ,KAAK22J,kBACN,MAAPzD,IACA9jG,EAAM8jG,IAAMA,GAEhB,IAAMtyE,EAAY5gF,KAAK42J,mBACN,MAAbh2E,GACAxxB,EAAM6iG,mBAAmBrxE,GAE7B,IAAMtgB,EAAatgE,KAAK62J,cACN,MAAdv2F,IACAlR,EAAMkR,WAAaA,GAEvB,IAAMn6B,EAAQnmC,KAAKg1J,UACnB5lG,EAAMmrG,UAAUp0H,EAAMrqB,EAAGqqB,EAAMpqB,EAAGoqB,EAAM7J,GACxC8yB,EAAM78C,oBAAoB,aAAcvS,KAAKu4J,eAC7CnpG,EAAMqrG,eAAe,GACrBxyJ,EAAQ6pJ,cAAc,gBACtB7pJ,EAAQ6pJ,cAAc,kBACtB7pJ,EAAQyyJ,IAAWzyJ,EAAQ0yJ,yBAG/B36J,KAAKmvD,SAAS51B,OAAS,EACvB,IAAMugI,EAAa95J,KAAKk3J,yBACN,MAAd4C,IACAA,EAAW3M,UAAUp5G,OAAO,WAC5B+lH,EAAWvnJ,oBAAoB,QAASvS,KAAKq4J,iCAC7Cr4J,KAAKk3J,yBAA2B,MAEpC,IAAMwB,EAAY14J,KAAK+2J,uBACN,MAAb2B,IACAA,EAAUz0I,SACVjkB,KAAK+2J,uBAAyB,MAElC,IAAM6D,EAAmB56J,KAAK82J,iBACN,MAApB8D,IACAA,EAAiB32I,SACjBjkB,KAAK82J,iBAAmB,MAEH,MAArB92J,KAAKy2J,eACLz2J,KAAKy2J,aAAap4H,UAClBr+B,KAAKy2J,aAAe,MAExBz2J,KAAK02J,SAAW,KAChB12J,KAAK22J,kBAAoB,KACzB32J,KAAK42J,mBAAqB,KAC1B52J,KAAK62J,cAAgB,KACrB72J,KAAKg3J,gBAAkB,KACvBh3J,KAAKsyD,MAAQ,KACbtyD,KAAKo0F,YAAc,KACnBp0F,KAAKm3J,QAAU,KACY,MAAvBn3J,KAAKi3J,gBACLj3J,KAAKi3J,iBAETj3J,KAAK87B,cAAc,CAAE7V,KAAM,SAAU5E,OAAQ80I,O,wBAEjD,SAAW3oG,GACP,IAAM6b,EAAa7b,EAAKunC,UAAUl8D,OAC5Bu2B,EAAQpvD,KAAKw4J,eACXr1H,EAAWisB,EAAXjsB,OAKR,GAJAA,EAAOkN,KAAO,GACdlN,EAAOmN,IAAM,IACbtwC,KAAKw4J,eAAeiC,eAAe3pJ,KAAKyjB,MAAM80C,EAAW,GAAIA,EAAW,KACxErpE,KAAKgkG,eAAeppF,IAAIyuD,EAAW,IAAKA,EAAW,IAAKA,EAAW,MAC9DrpE,KAAKitJ,YAAa,CACnB,IAAQ99G,EAAsBigB,EAAtBjgB,SAAUlnC,EAAYmnD,EAAZnnD,QAClB,EAA0BjI,KAAKm3J,QAAQwD,wBAA/BrhI,EAAR,EAAQA,MAAOC,EAAf,EAAeA,OACf61B,EAAMkxC,QAAQhnE,EAAOC,GACqB,MAAtCv5B,KAAKm5J,cAAcluI,GAAGi3C,eACtBliE,KAAKsjC,iBAAiBnI,KAAKn7B,KAAKm5J,cAAcluI,GAAGotE,UAAUl1D,GAAQG,kBACnEtjC,KAAKujC,wBAAwBpI,KAAKn7B,KAAKsjC,kBAAkBpL,UAE7D,MAA0BjwB,EACrB4yJ,iBADGjiI,EAAR,EAAQA,MAAO6L,EAAf,EAAeA,OAGTq2H,EAAkBp6E,GAAQ9lE,IAAIyuD,EAAW,GAAIA,EAAW,GAAIA,EAAW,KAC7Eja,EAAM8jG,IAAMpiJ,KAAKyjB,MAAMumI,EAAgBh/I,EAAGg/I,EAAgBx+H,GAAK1D,EAC/D54B,KAAK83J,QAAU1oG,EAAM8jG,IACrB/jH,EAAShU,KAAKn7B,KAAKgkG,gBACdj+D,IAAI+0H,EAAgB/mI,gBAAgB,EAAI0Q,IAC7CzkC,KAAK63J,aAAa18H,KAAKgU,GACvBigB,EAAMsqG,uBAAsB,GAC5B15J,KAAKitJ,aAAc,EAOvB,GAHA9pH,EAAOG,iBAAiBnI,KAAKn7B,KAAKsjC,kBAClCH,EAAOI,wBAAwBpI,KAAKn7B,KAAKujC,yBAErCiqB,EAAKutG,sBAAwBvtG,EAAKwtG,yBAA0B,CAC5D,IAAM5rH,EAAQoe,EAAKwtG,yBACnBxtG,EAAKutG,qBAAqBjqJ,KAAKkE,IAAIo6B,EApVpB,MAsVnB,IACMpR,EADQh+B,KAAKu2J,eAAe5zE,YAAYmV,UACvBlR,YAAYp5B,GACnCxtD,KAAKm5J,cAAc34D,YAAYxiE,EAASliB,EAAGkiB,EAASjiB,EAAGiiB,EAAS1E,MAAO0E,EAASzE,U,4BAEpF,SAAe+4B,GAAO,WACZomG,EAAY14J,KAAK82J,iBACvB,GAAiB,MAAb4B,EAAJ,CAGA,IAAMuC,EAAiB3oG,EAAM4oG,kBAAkBxC,GAC/C,GAA6B,GAAzBuC,EAAez8J,OAAnB,CAGA,IAAMy1J,EAAMgH,EAAe,GACrBE,EAAWn7J,KAAKo7J,YAAYnH,GAClC,GAAgB,MAAZkH,EAAJ,CAGAn7J,KAAKq7J,WAAWF,GAChBzC,EAAUz0I,SACVjkB,KAAK82J,iBAAmB,KACxB,IAAQ70F,EAAY3P,EAAZ2P,QACRA,EAAQ3vD,iBAAiB,cAAetS,KAAKy4J,eAC7Cx2F,EAAQ3vD,iBAAiB,YAAatS,KAAKi5J,aAC3Ch3F,EACKq5F,sCAAsC,CAAEC,QAAS,wBACjDt5J,MAAK,SAAAm4J,GACN,EAAKrD,uBAAyBqD,U,yBAGtC,SAAYpE,GACR,IAAMwF,EAAWx7J,KAAKm5J,cAAcluI,GAAGssE,oBACjCzB,EAAOkgE,EAAUnhE,QAAQ2mE,GAC/B,GAAY,MAAR1lE,EACA,OAAO,KAEX,IAAM2lE,EAAYzjI,GAAQc,UAAUg9D,EAAKf,UAAUl8D,QAOnD,OANyB,IAArB74B,KAAKw2J,cAELx2J,KAAK83J,QAAUhnJ,KAAKyjB,MAAMknI,EAAUznI,SAAS,GAAIynI,EAAUznI,SAAS,KAIjEynI,EAAUznI,SAAS,GAAK,MAASh0B,KAAKw2J,YACzCH,GAAY5iH,sBAAsBgoH,GAClC,O,wBAER,SAAWxH,GACPj0J,KAAKy2J,aAAa7I,MAAO,EACrB5tJ,KAAKw2J,YACLx2J,KAAK63J,aAAa18H,KAAK84H,GAGvBj0J,KAAK63J,aAAa97I,EAAIk4I,EAAIl4I,EAE9B/b,KAAK+yJ,eACL/yJ,KAAK87B,cAAc,CAAE7V,KAAM,SAAU5E,OAAQ80I,O,yBAEjD,SAAYwC,GACR,IAAM+C,EAAY/C,EAAQ,GAAGvkE,YAAYykE,QAAQnxH,KAC3Ci0H,EAAYhD,EAAQ,GAAGvkE,YAAYykE,QAAQnxH,KAC3CsiH,EAAS2R,EAAU,GAAKD,EAAU,GAClCE,EAASD,EAAU,GAAKD,EAAU,GAClCpnI,EAAQxjB,KAAKyjB,MAAMqnI,EAAQ5R,GAC7B6R,EAAW77J,KAAK43J,UAAYtjI,EAQhC,OAPIunI,EAAW/qJ,KAAKif,GAChB8rI,GAAY,EAAI/qJ,KAAKif,GAEhB8rI,GAAY/qJ,KAAKif,KACtB8rI,GAAY,EAAI/qJ,KAAKif,IAEzB/vB,KAAK43J,UAAYtjI,EACV,CACHykI,WAAYjoJ,KAAKujB,KAAK21H,EAASA,EAAS4R,EAASA,GACjDC,SAAUA,K,0BAGlB,SAAavpG,GAAO,WACVomG,EAAY14J,KAAK+2J,uBACvB,GAAiB,MAAb2B,IAGC14J,KAAKu3J,eAAkBv3J,KAAKy3J,gBAAmBz3J,KAAKw3J,YAAzD,CAGA,IAAMmB,EAAUrmG,EAAMsmG,mCAAmCF,GACnDtpG,EAAQpvD,KAAKw4J,eACbppH,EAAQggB,EAAMhgB,MAAMtzB,EAG1B,GAAI9b,KAAKy3J,eACL,GAAIkB,EAAQn6J,OAAS,EAGjBwB,KAAKy3J,gBAAiB,MAErB,CACD,MAAiCz3J,KAAKg5J,YAAYL,GAA1CI,EAAR,EAAQA,WAAY8C,EAApB,EAAoBA,SAIpB,IAHyB,IAArB77J,KAAKw2J,cACLx2J,KAAK83J,SAAW+D,GAEhBzsG,EAAMwhG,SAAU,CAChB,IAAMxhH,EAAQ2pH,EAAa/4J,KAAK23J,WAChC33J,KAAK+3J,UACA3oH,EAlcD,KAkc4BA,EAjc7B,kBAicuD,EAAIA,QAKrE,GAAuB,IAAnBupH,EAAQn6J,OAUjB,GAAIwB,KAAKw3J,WAAY,CACjB,IAAMljI,EA3dI,IA2dIt0B,KAAKo0F,YAAYykE,QAAQnxH,KAAK,GAC5C1nC,KAAK83J,SAAWxjI,EAAQt0B,KAAK43J,UAC7B53J,KAAK43J,UAAYtjI,OAEZt0B,KAAKu3J,eACVoB,EAAQ5vJ,SAAQ,SAAA+yJ,GACZ,KAAIA,EAAO1nE,cAAgB,EAAKA,aAC5B0nE,EAAOx6C,QAAQ9iH,OAAS,GAD5B,CAIA,IAAMy1J,EAAM,EAAKmH,YAAYU,EAAOx6C,QAAQ,IAC5C,GAAW,MAAP2yC,EAAJ,CAIA,GADA,EAAK4D,aAAaxzH,IAAI,EAAKqzH,mBACF,IAArB,EAAKlB,YAAuB,CAC5B,IAAM/4I,EAASw2I,EAAIl4I,EAAI,EAAK27I,iBAAiB37I,EAG7C,GAAI0B,EAAS,EAAG,CACZ,EAAKg5I,aAAayC,aAAez7I,EAAS2xB,EAC1C,EAAKopH,eAAegC,wBAAwBprH,EAAO3xB,GAEnD,IAAMumF,EAAiBtjB,GAAQvlD,KAAK,EAAK6oE,gBACnCpvE,GAASnX,GAAUumF,EAAejoF,EAAIk4I,EAAIl4I,GAChDioF,EAAejwE,eAAea,GAC9Bq/H,EAAIlgI,eAAe,EAAIa,GAAOmR,IAAIi+D,IAG1C,EAAK6zD,aAAa9xH,IAAIkuH,GACtB,EAAKyD,iBAAiBv8H,KAAK84H,YAzC9B,CAGDj0J,KAAKu3J,eAAgB,EACrBv3J,KAAKw3J,YAAa,EAClBx3J,KAAKy3J,gBAAiB,EACtB,IAAQsB,EAAe/4J,KAAKg5J,YAAYL,GAAhCI,WACR/4J,KAAK23J,WAAaoB,EAAa3pH,M,uBAsCvC,SAAUr9B,GACN,IAAMq9C,EAAQpvD,KAAKw4J,eACXrpH,EAA+CigB,EAA/CjgB,SAAU+jH,EAAqC9jG,EAArC8jG,IAA0BzuH,EAAW2qB,EAAhCkhG,oBACjB0C,EAAOhzJ,KAAK63J,aACZkE,EAAW3sG,EAAMhgB,MAAMtzB,EACvBmqB,EAAMjmC,KAAKy2J,aACjB,GAA6B,MAAzBz2J,KAAK82J,oBACH9D,EAAKhrH,OAAOmH,IAAanvC,KAAK+3J,YAAcgE,GAAW,CACzD,IAAMjgJ,EAAYqzB,EAAZrzB,EAAGC,EAASozB,EAATpzB,EAAGugB,EAAM6S,EAAN7S,EACZxgB,EAAI9b,KAAKg4J,QAAQ/uI,OAAOnN,EAAGk3I,EAAKl3I,EAAG/J,EAAO0yB,GAC1C1oB,EAAI/b,KAAKi4J,QAAQhvI,OAAOlN,EAAGi3I,EAAKj3I,EAAGhK,EAAO0yB,GAC1CnI,EAAIt8B,KAAKk4J,QAAQjvI,OAAOqT,EAAG02H,EAAK12H,EAAGvqB,EAAO0yB,GAC1C0K,EAASv0B,IAAIkB,EAAGC,EAAGugB,GACnB,IAAM0/H,EAAWh8J,KAAKo4J,YAAYnvI,OAAO8yI,EAAU/7J,KAAK+3J,UAAWhmJ,EAAO,GAE1E,GADAq9C,EAAMhgB,MAAMx0B,IAAIohJ,EAAUA,EAAUA,IAC/Bh8J,KAAKu3J,cAAe,CACrB,IAAM95I,EAASu1I,EAAKj3I,EAAIA,EACpB/b,KAAKs3J,oBAA0C,IAArBt3J,KAAKw2J,aAC/BvwH,EAAIizH,aAAez7I,EAASu+I,EAC5B5sG,EAAMorG,wBAAwBwB,EAAUv+I,IAExB,IAAXA,IACLzd,KAAKs3J,mBAAoB,EACzBrxH,EAAI2nH,MAAO,EACXx+F,EAAM6iG,mBAthBE,IAuhBRjyJ,KAAKg4J,QAAQrO,aAAaL,IAC1BtpJ,KAAKi4J,QAAQtO,aAAaL,IAC1BtpJ,KAAKk4J,QAAQvO,aAAaL,MAItCrjH,EAAIg2H,cAAclqJ,GAClBq9C,EAAM2jG,aAAahhJ,GAEnBq9C,EAAM8jG,IAAMlzJ,KAAKm4J,UAAUlvI,OAAOiqI,EAAKlzJ,KAAK83J,QAAS/lJ,EAAOjB,KAAKif,M,0BAKrE,SAAasiC,EAAMC,GACftyD,KAAKsyD,MAAQA,IACXtyD,KAAKq3J,OACP,IAAMmE,EAAWx7J,KAAKm5J,cAAcluI,GAAGssE,oBACjCzB,EAAOxjC,EAAMqnC,cAAc6hE,GACrB,MAAR1lE,IAAkC,IAAlB91F,KAAKo3J,UAAqBp3J,KAAKq3J,OA7iBvC,KA8iBRr3J,KAAKo3J,UAAW,EAChBp3J,KAAK87B,cAAc,CAAE7V,KAAM,WAAY5E,OAAQ+0I,MAEnD,IAAMhnG,EAAQpvD,KAAKw4J,eACnB,GAAY,MAAR1iE,GAAyB,MAAT1mC,GAAkBA,EAAMnnD,QAAQi0J,MAApD,EAIsB,IAAlBl8J,KAAKo3J,WACLp3J,KAAKo3J,UAAW,EAChBp3J,KAAK87B,cAAc,CAAE7V,KAAM,WAAY5E,OAAQ+0I,MAMnD,IAtBsB,EAsBlB+F,GAAc,EAtBI,cAuBHrmE,EAAK8D,OAvBF,IAuBtB,2BAA+B,KAApBpsC,EAAoB,QAE3B,GADAxtD,KAAKo8J,WAAW5uG,GACZ2uG,EAAa,CACbn8J,KAAKq8J,eAAe/pG,GACpBtyD,KAAKs8J,aAAahqG,GAClB,IAAMvgD,EAAQsgD,EAAOryD,KAAK02J,SAC1B12J,KAAKu8J,UAAUxqJ,GACf/R,KAAKmvD,SAASqtG,UAAUptG,EAAOiD,EAAMtgD,GACrC/R,KAAK02J,SAAWrkG,EAIpB,IAAMQ,EAAK7yD,KAAKm5J,cAAc3/H,aAC9Bq5B,EAAGg1B,WAAU,GACbh1B,EAAGzC,MAAMyC,EAAG4pG,kBACZ5pG,EAAGg1B,WAAU,GACb7nF,KAAKm5J,cAAc3zJ,OAAO4pD,EAAOA,EAAMjsB,QACvCg5H,GAAc,GAxCI,oCAWlBn8J,KAAKm5J,cAAc/oG,Y,GAphBN5gC,IA6kBnBktI,G,WACF,WAAYvtG,GAAU,oBAElBA,EAASgqG,cAAc5+E,MAAQ,CAAEC,mBAAmB,GAIpDx4E,QAAQR,UAAUS,MAAK,WACnBG,KAAK05B,cAAc,IAAIsqE,YAAY,8BAA+B,CAC9DC,OAAQ,CACJl3C,WACAwtG,MAAO,CACHzwG,kBACA0wG,QAAS9iI,GACTqvB,QACAo9C,SACAs2D,oBAAqBvoG,GACrBsmD,sBACAh9E,6B,4CAMpB,SAASwxB,GACLhtD,KAAK05B,cAAc,IAAIsqE,YAAY,iCAAkC,CAAEC,OAAQ,CAAEj3C,c,yBAErF,SAAYA,GACRhtD,KAAK05B,cAAc,IAAIsqE,YAAY,mCAAoC,CAAEC,OAAQ,CAAEj3C,gB,KAIrF0tG,G,6FAEL,SAAiBz+J,EAAQkK,GAAuB,IAAflC,EAAe,uDAAL,GAEpC02J,EAAM,IAAI16H,GACf26H,EAAO,IAAIx+H,GACX4Q,EAAQ,IAAI/M,GACZ46H,EAAiB,IAAI1wH,GACrB2wH,EAAiB,IAAI3wH,GACrB4wH,EAAe,IAAI5wH,GAEpBlmC,EAAQ+2J,oBAA4C76J,IAA3B8D,EAAQ+2J,gBAA+B/2J,EAAQ+2J,eACxE/2J,EAAQg3J,sBAAgD96J,IAA7B8D,EAAQg3J,kBAAiCh3J,EAAQg3J,iBAC5Eh3J,EAAQi3J,yBAAsD/6J,IAAhC8D,EAAQi3J,qBAAoCj3J,EAAQi3J,oBAClFj3J,EAAQk3J,qBAA8Ch7J,IAA5B8D,EAAQk3J,iBAAgCl3J,EAAQk3J,gBAC1El3J,EAAQm3J,SAAsBj7J,IAAhB8D,EAAQm3J,IAAoBn3J,EAAQm3J,IAAM,MACxDn3J,EAAQo3J,MAAQp3J,EAAQo3J,OAAS,GAEjC,IAGIC,EACHl1D,EAAMhkG,EAAMm5J,EACZC,EALKC,EAAct1J,EAAOurC,WAAavrC,EAAOqtC,SAASonC,MAAQh9E,KAAK89J,SAAUv1J,GAC9Ey0E,EAAQ3+E,EAAOy1C,WAAaz1C,EAAOu3C,SAASonC,MAAQh9E,KAAK89J,SAAUz/J,GAmBpE,GAXKA,EAAOy1C,WAEXz1C,EAAOu3C,SAASkgD,QAIhBzvF,EAAQk3J,iBAAkB,EAC1Bl3J,EAAQ+2J,gBAAiB,GAIrB/2J,EAAQg3J,iBAAmB,CAE/BO,EAAgB,GAEhB,IAAM,IAAIr/J,EAAI,EAAGA,EAAIy+E,EAAMx+E,OAAQD,IAElCq/J,EAAcz5J,KAAM64E,EAAOz+E,GAAI4wC,SAAS7Q,SAM1C,GAAKj4B,EAAQ+2J,eAAiB,CAI7B/+J,EAAOi2C,oBAEPj2C,EAAOmlC,YAAYw+C,WAInB,IAAM,IAAIzjF,EAAI,EAAGA,EAAIF,EAAO0H,SAASvH,SAAWD,EAE/CF,EAAO0H,SAAUxH,GAAI+1C,mBAAmB,GAM1C,GAAKjuC,EAAQ6vH,QAAU,CAEtBwnC,EAAY,GAEZ,IAAM,IAAIn/J,EAAI,EAAGA,EAAIy+E,EAAMx+E,SAAWD,EAErCiqG,EAAOxrB,EAAOz+E,GACdiG,EAAO6B,EAAQo3J,MAAOj1D,EAAKhkG,OAAUgkG,EAAKhkG,KAErC6B,EAAQ6vH,SAAW7vH,EAAQ6vH,QAAS1xH,KAExCgkG,EAAK3vE,OAAOwa,SAAUhtC,EAAQ6vH,QAAS1xH,IAEvCgkG,EAAK3vE,OAAOua,UAAWo1D,EAAKr5D,SAAUq5D,EAAK1pE,WAAY0pE,EAAKp5D,OAE5Do5D,EAAKl0D,qBAINopH,EAAUv5J,KAAMqkG,EAAKhlE,YAAYlF,SAMnC,IAAM,IAAI//B,EAAI,EAAGA,EAAIy+E,EAAMx+E,SAAWD,EAAI,CASzC,GAPAiqG,EAAOxrB,EAAOz+E,GACdiG,EAAO6B,EAAQo3J,MAAOj1D,EAAKhkG,OAAUgkG,EAAKhkG,KAE1Cm5J,EAAS39J,KAAKwhH,cAAeh9G,EAAMq5J,GAEnCV,EAAahiI,KAAMqtE,EAAKhlE,aAEnBm6H,EAAS,CAwBb,GAtBAA,EAAOrpH,oBAEFjuC,EAAQk3J,gBAEZL,EAAe/hI,KAAMwiI,EAAOn6H,cAI5B05H,EAAe/hI,KAAM98B,EAAOmlC,aAActL,SAC1CglI,EAAe7pH,SAAUsqH,EAAOn6H,cAMjC4L,EAAMykF,mBAAoBqpC,GAC1BA,EAAe9tH,MAAOA,EAAMx0B,IAAK,EAAIw0B,EAAMtzB,EAAG,EAAIszB,EAAMrzB,EAAG,EAAIqzB,EAAM9S,IAIrE6gI,EAAatsH,2BAA4BmsH,EAAKhtH,sBAAuBktH,IAEhE7+J,EAAOy1C,WAAa,CAExB,IAAMk0D,EAAYhrB,EAAMxvE,QAASg7F,GAChCu1D,EAAcL,EAAYA,EAAW11D,GAAci1D,EAAe9hI,KAAM98B,EAAOu3C,SAASqyD,aAAcD,IAAc9vE,SAErHilI,EAAa9pH,SAAU0qH,GAIxBZ,EAAaz6F,aAAcw6F,GAIvB10D,EAAKp2D,QAAUo2D,EAAKp2D,OAAO+1D,QAE/BK,EAAK3vE,OAAOsC,KAAMqtE,EAAKp2D,OAAO5O,aAActL,SAC5CswE,EAAK3vE,OAAOwa,SAAU8pH,IAItB30D,EAAK3vE,OAAOsC,KAAMgiI,GAId92J,EAAQi3J,qBAAuB94J,IAAS6B,EAAQm3J,KAEpDh1D,EAAK3vE,OAAOmlI,YAAajB,EAAIniJ,IAAK,EAAG4tF,EAAKr5D,SAASpzB,EAAG,IAIvDysF,EAAK3vE,OAAOua,UAAWo1D,EAAKr5D,SAAUq5D,EAAK1pE,WAAY0pE,EAAKp5D,OAE5Do5D,EAAKl0D,oBAIN,GAAKjuC,EAAQg3J,iBAEZ,IAAM,IAAI9+J,EAAI,EAAGA,EAAIy+E,EAAMx+E,SAAWD,EAErCiqG,EAAOxrB,EAAOz+E,IACdiG,EAAO6B,EAAQo3J,MAAOj1D,EAAKhkG,OAAUgkG,EAAKhkG,QAE5B6B,EAAQm3J,KAErBh1D,EAAKr5D,SAAShU,KAAMyiI,EAAer/J,IAQjC8H,EAAQ+2J,gBAIZ/+J,EAAOi2C,mBAAmB,K,0BAM5B,SAAqBj2C,EAAQkK,EAAQ2jG,GAAqB,IAAf7lG,EAAe,uDAAL,GAEpDA,EAAQ43J,2BAA0D17J,IAAlC8D,EAAQ43J,uBAAsC53J,EAAQ43J,sBACtF53J,EAAQ4lG,SAAsB1pG,IAAhB8D,EAAQ4lG,IAAoB5lG,EAAQ4lG,IAAM,GACxD5lG,EAAQo3J,MAAQp3J,EAAQo3J,OAAS,GAE1Bl1J,EAAOurC,aAEbvrC,EAASvI,KAAKk+J,sBAAuB31J,IAItC,IAMI41J,EACH31D,EAAc41D,EACd55J,EARK65J,EAAYvtJ,KAAKsjB,MAAO83E,EAAKwH,UAAartG,EAAQ4lG,IAAM,KAAS,KACtEl6F,EAAQ,EAAI1L,EAAQ4lG,IACpBqyD,EAAkB,GAClBz7C,EAAQ,IAAIsE,GAAgB5+G,GAC5By0E,EAAQh9E,KAAK89J,SAAUz/J,EAAOu3C,UAC9B2oH,EAAY,GAKb17C,EAAM6wC,WAAYxnD,GAAOynD,OACzB9wC,EAAM55F,OAAQ,GAEd1gB,EAAO+rC,oBAEP,IAAM,IAAI/1C,EAAI,EAAGA,EAAI8/J,IAAc9/J,EAAI,CAEtC,IAAM8zD,EAAO9zD,EAAIwT,EAEjB/R,KAAKw+J,SAAUngK,EAAQkK,EAAQlC,GAE/B,IAAM,IAAI8Y,EAAI,EAAGA,EAAI69D,EAAMx+E,SAAW2gB,EAErC3a,EAAO6B,EAAQo3J,MAAOzgF,EAAO79D,GAAI3a,OAAUw4E,EAAO79D,GAAI3a,KAE7CxE,KAAKwhH,cAAeh9G,EAAM+D,EAAOqtC,YAIzC4yD,EAAOxrB,EAAO79D,GACdi/I,EAAWG,EAAWp/I,GAAMo/I,EAAWp/I,IAAO,CAAEqpF,KAAMA,GAEjDniG,EAAQm3J,MAAQh5J,IAEb45J,EAASrB,MAEfqB,EAASrB,IAAM,CACdzxD,MAAO,IAAI/nD,aAAc86G,GACzBn3J,OAAQ,IAAIq8C,aAA0B,EAAZ86G,KAKvBh4J,EAAQ43J,wBAED,IAAN1/J,IAEJ4/J,EAAiB31D,EAAKr5D,SAAS7Q,SAIhCkqE,EAAKr5D,SAAS9K,IAAK85H,IAIpBC,EAASrB,IAAIzxD,MAAO/sG,GAAM8zD,EAE1Bm2C,EAAKr5D,SAAS6F,QAASopH,EAASrB,IAAI71J,OAAY,EAAJ3I,IAItC6/J,EAASpB,OAEfoB,EAASpB,KAAO,CACf1xD,MAAO,IAAI/nD,aAAc86G,GACzBn3J,OAAQ,IAAIq8C,aAA0B,EAAZ86G,KAK5BD,EAASpB,KAAK1xD,MAAO/sG,GAAM8zD,EAE3Bm2C,EAAK1pE,WAAWkW,QAASopH,EAASpB,KAAK91J,OAAY,EAAJ3I,IAMjDskH,EAAM55F,OAAQlX,GAEdxJ,EAAO+rC,oBAIR,IAAM,IAAI/1C,EAAI,EAAGA,EAAIggK,EAAU//J,SAAWD,GAEzC6/J,EAAWG,EAAWhgK,MAIhB6/J,EAASrB,KAEbuB,EAAgBn6J,KAAM,IAAIqvG,GACzB,UAAY4qD,EAAS51D,KAAKhkG,KAAO,aACjC45J,EAASrB,IAAIzxD,MACb8yD,EAASrB,IAAI71J,SAKfo3J,EAAgBn6J,KAAM,IAAImvG,GACzB,UAAY8qD,EAAS51D,KAAKhkG,KAAO,eACjC45J,EAASpB,KAAK1xD,MACd8yD,EAASpB,KAAK91J,UASjB,OAFA27G,EAAM47C,cAAevyD,GAEd,IAAIuH,GAAevH,EAAK1nG,MAAQ,EAAG85J,K,mCAI3C,SAA8B1oH,GAE7B,IAAMrtC,EAAS,IAAIwjH,GAAgBn2E,EAASonC,MAAO,IAGnD,OAFAz0E,EAAOqtC,SAAWA,EAEXrtC,I,gCAIR,SAA2BlK,EAAQkK,GAAuB,IAAflC,EAAe,uDAAL,GAE9Cq4J,EAAkB,IAAIr8H,GAC3Bs8H,EAAY,IAAIt8H,GAChBu8H,EAAkB,IAAIv8H,GACtBw8H,EAAY,IAAIx8H,GAChBy8H,EAAY,IAAIprI,GAChBqrI,EAAY,IAAIrrI,GAEjBrtB,EAAQm3J,SAAsBj7J,IAAhB8D,EAAQm3J,IAAoBn3J,EAAQm3J,IAAM,MACxDn3J,EAAQo3J,MAAQp3J,EAAQo3J,OAAS,GAE1Bl1J,EAAOurC,aAEbvrC,EAASvI,KAAKk+J,sBAAuB31J,IAItC,IAMIigG,EAAMm1D,EACTn5J,EAAMjG,EAPDygK,EAAWngK,OAAOgI,KAAMR,EAAQo3J,OACrCwB,EAAapgK,OAAOqI,OAAQb,EAAQo3J,OACpCI,EAAct1J,EAAOurC,WAAavrC,EAAOqtC,SAASonC,MAAQh9E,KAAK89J,SAAUv1J,GACzEy0E,EAAQ3+E,EAAOy1C,WAAaz1C,EAAOu3C,SAASonC,MAAQh9E,KAAK89J,SAAUz/J,GACnE63H,EAAU,GAOX,IAFA73H,EAAOu3C,SAASkgD,OAEVv3F,EAAI,EAAGA,EAAIy+E,EAAMx+E,SAAWD,EAOjC,GALAiqG,EAAOxrB,EAAOz+E,GACdiG,EAAO6B,EAAQo3J,MAAOj1D,EAAKhkG,OAAUgkG,EAAKhkG,MAE1Cm5J,EAAS39J,KAAKwhH,cAAeh9G,EAAMq5J,KAEpBr5J,IAAS6B,EAAQm3J,IAAM,CAErC,IAAM0B,EAAal/J,KAAKm/J,eAAgB32D,EAAKp2D,OAAQ4sH,GACpDI,EAAep/J,KAAKm/J,eAAgBxB,EAAOvrH,OAAQ6sH,GAEpDC,EAAW5qH,oBACX8qH,EAAa9qH,oBAEboqH,EAAgBjrH,sBAAuByrH,EAAW17H,aAClDm7H,EAAUlrH,sBAAuB+0D,EAAKhlE,aAEtCo7H,EAAgBnrH,sBAAuB2rH,EAAa57H,aACpDq7H,EAAUprH,sBAAuBkqH,EAAOn6H,aAExCs7H,EAAUhrI,WACT,IAAIJ,GAASirI,EAAU7iJ,EAAG6iJ,EAAU5iJ,GACpC,IAAI2X,GAASgrI,EAAgB5iJ,EAAG4iJ,EAAgB3iJ,IAC/C4Y,YAEFoqI,EAAUjrI,WACT,IAAIJ,GAASmrI,EAAU/iJ,EAAG+iJ,EAAU9iJ,GACpC,IAAI2X,GAASkrI,EAAgB9iJ,EAAG8iJ,EAAgB7iJ,IAC/C4Y,YAEF,IAAM0qI,EAAgBP,EAAUxqI,QAAUyqI,EAAUzqI,QAE9C7W,GAAS,IAAI8uB,IAAU+yH,sBAC5B,IAAI5uH,GACH,EACA,EACA2uH,IAIF72D,EAAK3vE,OAAOwa,SAAU51B,GAEtB+qF,EAAK3vE,OAAOua,UAAWo1D,EAAKr5D,SAAUq5D,EAAK1pE,WAAY0pE,EAAKp5D,OAE5Do5D,EAAKl0D,oBAEL4hF,EAAS1xH,GAASiZ,EAMpB,OAAOy4G,I,yBAIR,SAAoBtgF,EAAU6nH,GAI7B,IAFA,IAAMzgF,EAAQh9E,KAAK89J,SAAUloH,GAEnBr3C,EAAI,EAAGA,EAAIy+E,EAAMx+E,SAAWD,EAAI,CAEzC,IAAMiqG,EAAOxrB,EAAOz+E,GAEfk/J,EAAOj1D,EAAKhkG,QAEhBgkG,EAAKhkG,KAAOi5J,EAAOj1D,EAAKhkG,OAM1B,OAAOxE,O,sBAIR,SAAiB41C,GAEhB,OAAO7yC,MAAMC,QAAS4yC,GAAaA,EAAWA,EAASonC,Q,2BAIxD,SAAsBx4E,EAAMoxC,GAE3B,IAAM,IAAIr3C,EAAI,EAAGy+E,EAAQh9E,KAAK89J,SAAUloH,GAAYr3C,EAAIy+E,EAAMx+E,OAAQD,IAErE,GAAKiG,IAASw4E,EAAOz+E,GAAIiG,KAExB,OAAOw4E,EAAOz+E,K,4BAMjB,SAAuBiqG,EAAMi1D,GAE5B,KAAQj1D,EAAKL,QAAS,CAErB,IAAsC,IAAjCs1D,EAAMjwJ,QAASg7F,EAAKhkG,MAExB,OAAOgkG,EAIRA,EAAOA,EAAKp2D,U,+BAMd,SAA0B5tC,EAAM2nG,GAK/B,IAHA,IAAMrlG,EAAS,iBACdjH,EAAS,CAAE2E,KAAMA,GAERjG,EAAI,EAAGA,EAAI4tG,EAAO3tG,SAAWD,EAAI,CAI1C,IAAMghK,EAAYz4J,EAAOwW,KAAM6uF,EAAQ5tG,GAAIiG,MAEtC+6J,GAAa/6J,IAAS+6J,EAAW,KAErC1/J,EAAQ0/J,EAAW,IAAQhhK,GAM7B,OAAOsB,I,iCAIR,SAA4B+1C,EAAU4pH,GAErC,IAAM3B,EAAc79J,KAAK89J,SAAUloH,GAClC6pH,EAAcz/J,KAAK89J,SAAU0B,GAC7BxiF,EAAQ,GAETrvE,EAAS,IAAM,IAAIpP,EAAI,EAAGA,EAAIs/J,EAAYr/J,OAAQD,IAIjD,IAFA,IAAM+2G,EAAWuoD,EAAat/J,GAAIiG,KAExB2a,EAAI,EAAGA,EAAIsgJ,EAAYjhK,OAAQ2gB,IAExC,GAAKm2F,IAAamqD,EAAatgJ,GAAI3a,KAAO,CAEzCw4E,EAAM74E,KAAMmxG,GAEZ,SAAS3nG,EAQZ,OAAOqvE,I,mBAIR,SAAcz0E,GAEb,IAAMm3J,EAAe,IAAIv4I,IACnBw4I,EAAc,IAAIx4I,IAElBmX,EAAQ/1B,EAAO+1B,QA8BrB,OA5BAshI,GAAkBr3J,EAAQ+1B,GAAO,SAAWuhI,EAAYC,GAEvDJ,EAAa9kJ,IAAKklJ,EAAYD,GAC9BF,EAAY/kJ,IAAKilJ,EAAYC,MAI9BxhI,EAAM4V,UAAU,SAAWqrE,GAE1B,GAAOA,EAAK9pE,cAAZ,CAEA,IAAMsqH,EAAaxgD,EACbygD,EAAaN,EAAa3+J,IAAKw+G,GAC/Bs+C,EAAcmC,EAAWpqH,SAASonC,MAExC+iF,EAAWnqH,SAAWoqH,EAAWpqH,SAAStX,QAC1CyhI,EAAWpqH,WAAWxa,KAAM6kI,EAAWrqH,YAEvCoqH,EAAWnqH,SAASonC,MAAQ6gF,EAAYtoJ,KAAK,SAAWizF,GAEvD,OAAOm3D,EAAY5+J,IAAKynG,MAIzBu3D,EAAWv3J,KAAMu3J,EAAWnqH,SAAUmqH,EAAWpqH,gBAI3CrX,M,KAOT,SAASshI,GAAkBj1J,EAAGC,EAAGiE,GAEhCA,EAAUlE,EAAGC,GAEb,IAAM,IAAIrM,EAAI,EAAGA,EAAIoM,EAAE5E,SAASvH,OAAQD,IAEvCqhK,GAAkBj1J,EAAE5E,SAAUxH,GAAKqM,EAAE7E,SAAUxH,GAAKsQ,GAoBtD,IAAMoxJ,GAAYp9J,OAAO,YACnBq9J,GAAWr9J,OAAO,WAClBs9J,GAAgBt9J,OAAO,gBACvBu9J,GAASv9J,OAAO,SAchBmiJ,G,WACF,WAAYQ,GAAc,oBACtBxlJ,KAAKmgK,IAAiB3a,E,wCA+B1B,WACI,OAAOxlJ,KAAKmgK,IAAeroD,S,sBAE/B,WACI,OAAO93G,KAAKmgK,IAAentH,a,iBAE/B,WACI,OAAOhzC,KAAKmgK,IAAe/wG,Q,kBAE/B,WACI,OAAOpvD,KAAKmgK,IAAev0B,S,mBAE/B,WACI,OAAO5rI,KAAKmgK,IAAe/sE,U,iBAE/B,WACI,OAAOpzF,KAAKmgK,IAAetgC,Q,oBAE/B,WACI,OAAO7/H,KAAKmgK,IAAeltH,W,mBAK/B,WAGI,OAAO,IAAIotH,EAFqBrgK,KAAKR,aAClBQ,KAAKogK,S,qBAO5B,WACIpgK,KAAK4rI,OAAO7iI,SAAQ,SAACqmD,GACjBA,EAAMlb,UAAS,SAACjzC,GACZ,GAAKA,EAAOm0C,OAAZ,CAGA,IAAM6a,EAAOhvD,GACK8B,MAAMC,QAAQitD,EAAKpa,UAAYoa,EAAKpa,SAAW,CAACoa,EAAKpa,WAC7D9sC,SAAQ,SAAA8sC,GACdA,EAASxX,aAEb4xB,EAAK1pB,SAASlI,mB,KAOzB+hI,G,MAAD,WACI,IAAM73J,EAASvI,KAAKmgK,IAGd/wG,EAAQ0tG,GAAcx+H,MAAMt+B,KAAKovD,OACjCw8E,EAAS,CAACx8E,GACVnc,EAAW1qC,EAAO0qC,SAAWp0C,OAAOyJ,OAAO,GAAIC,EAAO0qC,UAAY,GACxE,OAAOp0C,OAAOyJ,OAAOzJ,OAAOyJ,OAAO,GAAIC,GAAS,CAAE6mD,QAAOw8E,SAAQ34F,gB,sBAlFrE,SAAe1qC,GACX,GAAoB,MAAhBA,EAAO6mD,MACP,MAAM,IAAI5jD,MAAM,+BAEpB,GAAIjD,EAAO03J,IACP,OAAO13J,EAEX,IAAM+3J,EAAWtgK,KAAKkgK,IAAU33J,GAIhC,OADA+3J,EAASL,KAAa,EACfK,I,KAMHJ,G,MAAR,SAAkB33J,GAGd,IAAQ6mD,EAAU7mD,EAAV6mD,MACFw8E,EAAS,CAACx8E,GAChB,OAAOvwD,OAAOyJ,OAAOzJ,OAAOyJ,OAAO,GAAIC,GAAS,CAAE6mD,QAAOw8E,e,KAoE3D20B,GAAU,8GASVC,GAAa39J,OAAO,aACpB49J,GAAQ59J,OAAO,QACf69J,GAAkB79J,OAAO,kBACzB89J,GAAkB99J,OAAO,kBACzB+9J,GAA8B/9J,OAAO,8BACrCg+J,GAA8Bh+J,OAAO,8BACrCi+J,GAA2Bj+J,OAAO,2BAUlCk+J,G,WACF,WAAYC,EAAW1hC,EAAM2hC,EAAgBC,GAAgB,oBACzDlhK,KAAKwgK,IAAcQ,EACnBhhK,KAAKygK,IAASnhC,EACdt/H,KAAK0gK,IAAmBQ,EACxBlhK,KAAK2gK,IAAmBM,E,2CA+H5B,WACI,OAAOjhK,KAAKwgK,M,gBAKhB,WACI,OAAOxgK,KAAKygK,M,0BAQhB,WACI,OAAOzgK,KAAK0gK,M,0BAMhB,WACI,OAAO1gK,KAAK2gK,M,yBAEhB,SAAYQ,GAAoC,WAAtB5kJ,EAAsB,uDAAX,aAC3B6kJ,EAAmB,IAAI5nB,IAiC7B,OAhCAx5I,KAAKghK,UAAU5xG,MAAMlb,SAArB,uCAA8B,WAAOjzC,GAAP,+BAAA0J,EAAA,yDAClBy/H,EAAmBnpI,EAAOgyC,SAA1Bm3F,eACHnpI,EAAOm0C,QAA4B,MAAlBg1F,EAFI,oDAMH,OADjBi3B,EAAkBj3B,EAAc,wBALZ,iDAStBhmF,GAAiB,EATK,cAUJi9G,EAAgBC,UAVZ,gEAUftnI,EAVe,SAWVunI,SAAS/zJ,QAAQ2zJ,IAAiB,GAXxB,wBAYlB/8G,EAAgBpqB,EAAQ6b,SAZN,0KAgBtBuO,EAAgB,GAhBM,oEAmBH,EAAK48G,UAAUlpD,OAAOqsB,cAAc,WAAY//E,GAnB7C,QAmBpBvO,EAnBoB,OAoB1BurH,EAAiBr7H,IAAIqe,GACrBnjD,EAAO40C,SAAWA,EAClB,EAAKmrH,UAAUlpD,OAAO85B,oBAAoB3wI,GAC1Csb,IACMilJ,EAAc,EAAKliC,KAAK5qF,UAAU0P,GAEpB,OADhBq9G,EAAe,EAAKP,eAAengK,IAAIygK,MAEvCC,EAAe,IAAIjoB,IACnB,EAAK0nB,eAAetmJ,IAAI4mJ,EAAaC,IAEzCA,EAAa17H,IAAI9kC,EAAO40C,UA9BE,gEAA9B,kCAAA71C,KAAA,gBAgCOohK,K,mBA9KX,SAAYJ,EAAWU,GACnB,OAAoC,MAAhCA,EACO1hK,KAAK8gK,IAA0BE,EAAWU,GAG1C1hK,KAAK6gK,IAA6BG,K,KAGzCH,G,MAAR,SAAqCG,GACjC,IAAM1hC,EAAO0hC,EAAUlpD,OAAOrP,KACtBuiC,EAAiBg2B,EAAUlpD,OAA3BkzB,aACFk2B,EAAiB,IAAI/5I,IACrBw6I,EAAkB,CAAEn9J,KAAM,WAC1Bo9J,EAAmB,CAAE37I,KAAM,YAAapa,OAAQ,GA+BtD,OA7BAm/H,EAAajiI,SAAQ,SAAC84J,EAAsBC,GAKZ,MAAxBD,IACID,EAAiB/1J,MAAQ,IACH,MAAlByzH,EAAK5qF,YACL4qF,EAAK5qF,UAAY,IAErBktH,EAAiB/1J,MAAQyzH,EAAK5qF,UAAUl2C,OACxC8gI,EAAK5qF,UAAUvwC,KAAKw9J,IAExBE,EAAuBD,GAE3B,MAAwBC,EAAhB57I,EAAR,EAAQA,KAAMpa,EAAd,EAAcA,MAER21J,GADeliC,EAAKr5G,IAAS,IACFpa,GACjC,GAAmB,MAAf21J,EAAJ,CAIA,IAAIC,EAAeP,EAAengK,IAAIygK,GAClB,MAAhBC,IACAA,EAAe,IAAIjoB,IACnB0nB,EAAetmJ,IAAI4mJ,EAAaC,IAEpCA,EAAa17H,IAAI+7H,OAEd,IAAIf,EAAqBC,EAAW1hC,EAAM0L,EAAck2B,K,KAO3DJ,G,MAAR,SAAkCiB,EAAgBL,GAQ9C,IAPA,IAAMM,EAAoBN,EAA6BV,UACjDiB,EAAeP,EAA6BpiC,KAC5C4iC,EAAYjjJ,KAAKrC,MAAMqC,KAAKC,UAAU+iJ,IACtCE,EAAsB,IAAIh7I,IAC1Bi7I,EAAsB,IAAIj7I,IAC1Bw6I,EAAkB,CAAEn9J,KAAM,WAC1Bo9J,EAAmB,CAAE37I,KAAM,YAAapa,OAAQ,GAC7CtN,EAAI,EAAGA,EAAIyjK,EAAkBp2B,OAAOptI,OAAQD,IACjDyB,KAAK4gK,IAA6BoB,EAAkBp2B,OAAOrtI,GAAIwjK,EAAen2B,OAAOrtI,IAAI,SAAC0C,EAAQohK,GAC9F,IAAIC,EAAmBZ,EAA6BT,eAAelgK,IAAIE,GAC/C,MAApBqhK,IACIV,EAAiB/1J,MAAQ,IACE,MAAvBq2J,EAAUxtH,YACVwtH,EAAUxtH,UAAY,IAE1BktH,EAAiB/1J,MAAQq2J,EAAUxtH,UAAUl2C,OAC7C0jK,EAAUxtH,UAAUvwC,KAAKw9J,IAE7BW,EAAmBV,GAEvB,MAAwBU,EAAhBr8I,EAAR,EAAQA,KAAMpa,EAAd,EAAcA,MACR02J,EAAeL,EAAUj8I,GAAMpa,GACrCs2J,EAAoBvnJ,IAAIynJ,EAAa,CAAEp8I,OAAMpa,UAC7C,IAAM22J,EAAeJ,EAAoBrhK,IAAIwhK,IAAiB,IAAI/oB,IAClEgpB,EAAaz8H,IAAIs8H,GACjBD,EAAoBxnJ,IAAI2nJ,EAAcC,MAG9C,OAAO,IAAIzB,EAAqBgB,EAAgBG,EAAWC,EAAqBC,K,KAQ5ExB,G,MAAR,SAAqC6B,EAAUC,EAAU7zJ,IAIpC,SAAXqlC,EAAYvpC,EAAGC,GAEjB,GADAiE,EAASlE,EAAGC,GACRD,EAAEmpC,WAAY,CACd,GAAWnpC,EALDyqC,OAMN,GAAIryC,MAAMC,QAAQ2H,EAAEkrC,UAChB,IAAK,IAAIt3C,EAAI,EAAGA,EAAIoM,EAAEkrC,SAASr3C,SAAUD,EACrC21C,EAASvpC,EAAEkrC,SAASt3C,GAAIqM,EAAEirC,SAASt3C,SAIvC21C,EAASvpC,EAAEkrC,SAAUjrC,EAAEirC,UAG/B,IAAK,IAAIt3C,EAAI,EAAGA,EAAIoM,EAAE5E,SAASvH,SAAUD,EACrC21C,EAASvpC,EAAE5E,SAASxH,GAAIqM,EAAE7E,SAASxH,KAI/C21C,CAASuuH,EAAUC,O,KAkFrBC,GAAyB9/J,OAAO,yBAChC+/J,GAAwB//J,OAAO,wBAM/BggK,G,wKAqEF,WACI,OAAO7iK,KAAKmgK,IAAeyC,M,KAK9BxC,G,MAAD,WAAW,WACD9hI,EAAQ,qCAAM8hI,GAAT,iBACL0C,EAA6B,IAAI37I,IAqBvC,OApBAmX,EAAM8wB,MAAMlb,UAAS,SAACqrE,GAKlB,GAAIA,EAAKnqE,OAAQ,CACb,IAAM6a,EAAOsvD,EACTx8G,MAAMC,QAAQitD,EAAKpa,UACnBoa,EAAKpa,SAAWoa,EAAKpa,SAAStgC,KAAI,SAACsgC,GAAD,OAAc,EAAK8sH,IAAwB9sH,EAAUitH,MAEjE,MAAjB7yG,EAAKpa,WACVoa,EAAKpa,SAAW,EAAK8sH,IAAwB1yG,EAAKpa,SAAUitH,QAOxExkI,EAAMskI,IACF7B,GAAqB70J,KAAKoyB,EAAOt+B,KAAK+iK,sBACnCzkI,I,KAMVqkI,G,MAAD,SAAyB9sH,EAAUitH,GAI/B,GAAIA,EAA2Bt6I,IAAIqtB,EAASpb,MACxC,OAAOqoI,EAA2B/hK,IAAI80C,EAASpb,MAEnD,IAAM6D,EAAQuX,EAASvX,QACH,MAAhBuX,EAAStgC,MACT+oB,EAAM/oB,IAAMsgC,EAAStgC,IAAI+oB,QACzBA,EAAM/oB,IAAI8uC,aAAc,GAEF,MAAtBxO,EAASsI,YACT7f,EAAM6f,UAAYtI,EAASsI,UAAU7f,QACrCA,EAAM6f,UAAUkG,aAAc,GAEN,MAAxBxO,EAAS8I,cACTrgB,EAAMqgB,YAAc9I,EAAS8I,YAAYrgB,QACzCA,EAAMqgB,YAAY0F,aAAc,GAGpC,IAAI5F,EAAe,KAKnB,GAJ6B,MAAzB5I,EAAS4I,eACTA,EAAe5I,EAAS4I,aAAangB,SAGrB,MAAhBmgB,EAAsB,CACtBA,EAAa4F,aAAc,EAC3B/lB,EAAMmgB,aAAeA,EAErB,MAA8CukH,GAASC,UAA/C9J,EAAR,EAAQA,cAAe+J,EAAvB,EAAuBA,mBAGf/0G,EAAYgrG,EAAcluI,GAA1BkjC,QACRgrG,EAAcluI,GAAGkjC,SAAU,EAC3B+0G,EAAmBroI,gBAAgByD,GACnC66H,EAAcluI,GAAGkjC,QAAUA,EAI3BtY,EAAS4I,eAAiB5I,EAAS6I,aACnCpgB,EAAMogB,aAAeD,EAES,MAAzB5I,EAAS6I,eACdpgB,EAAMogB,aAAe7I,EAAS6I,aAAapgB,QAC3CA,EAAMogB,aAAa2F,aAAc,GAIjCxO,EAAS4I,eAAiB5I,EAASkI,MACnCzf,EAAMyf,MAAQU,EAES,MAAlB5I,EAASkI,QACdzf,EAAMyf,MAAQlI,EAASkI,MAAMzf,QAC7BA,EAAMyf,MAAMsG,aAAc,GAO9B,IAAM8+G,EAAqBttH,EAASwG,gBAuBpC,OAtBA/d,EAAM+d,gBAAkBxG,EAASswF,iCAC7B,SAACp2E,GACGozG,EAAmBpzG,OAAQxtD,GAC3BwtD,EAAO1D,eAAiB0D,EAAO1D,eAAerhD,QAAQ,gCAAiCu1J,KAE3F,SAACxwG,GACGA,EAAO1D,eAAiB0D,EAAO1D,eAAerhD,QAAQ,gCAAiCu1J,IACvF4C,EAAmBpzG,OAAQxtD,IAGnC+7B,EAAMkd,WA5r5CI,EA+r5CNld,EAAM6b,cACN7b,EAAMsc,YAAa,GAIlBtc,EAAMyd,WAAczd,EAAM6b,cAC3B7b,EAAMyd,WAAa,IAEvB+mH,EAA2BloJ,IAAIi7B,EAASpb,KAAM6D,GACvCA,K,MAxLH4hI,G,MAAR,SAAkB33J,GACd,IAAM+3J,EAAW,2BAAMJ,GAAT,gBAAmB33J,GACM,MAAnC+3J,EAASsC,MACTtC,EAASsC,IAAyB7B,GAAqB70J,KAAKo0J,IAEhE,IAAQlxG,EAAUkxG,EAAVlxG,MACFg0G,EAAoB,GAC1Bh0G,EAAMlb,UAAS,SAACqrE,GAcZ,GAXAA,EAAKxsE,YAAc,IAInBwsE,EAAKzsE,eAAgB,EAIhBysE,EAAK/6G,OACN+6G,EAAK/6G,KAAO+6G,EAAK9kF,MAEhB8kF,EAAKnqE,OAAV,CAGAmqE,EAAK3sE,YAAa,EAClB,IAAMqd,EAAOsvD,EACTplE,GAAc,GACAp3C,MAAMC,QAAQitD,EAAKpa,UAAYoa,EAAKpa,SAAW,CAACoa,EAAKpa,WAC7D9sC,SAAQ,SAAA8sC,GACVA,EAASknC,wBACLlnC,EAASsE,aA5i5Cd,IA4i5C6BtE,EAASmE,OACjCG,GAAc,EACdtE,EAASmE,KAhj5Cf,MAoj5CFG,GACAipH,EAAkBj/J,KAAK8rD,OAW/B,cAAmBmzG,EAAnB,eAAsC,CAAjC,IAAMnzG,EAAI,KAELozG,GADYtgK,MAAMC,QAAQitD,EAAKpa,UAAYoa,EAAKpa,SAAW,CAACoa,EAAKpa,WAClCtgC,KAAI,SAACsgC,GACtC,IAAMytH,EAAeztH,EAASvX,QAE9B,OADAglI,EAAatpH,KAnk5CZ,EAok5CMspH,KAELC,EAAoBxgK,MAAMC,QAAQitD,EAAKpa,UACzCwtH,EACAA,EAAmB,GACjBG,EAAWvzG,EAAK3xB,QACtBklI,EAAS3tH,SAAW0tH,EACpBC,EAASzwH,aAAe,EACxBkd,EAAK7d,OAAOrM,IAAIy9H,GAEpB,OAAOlD,M,GAnEuBtb,IAmMhCye,G,kDAEL,WAAazsD,GAAU,kCAEtB,cAAOA,IAEF/wF,KAAOuH,EAJU,E,yCAUvB,SAAOhkB,GAEN,IAUCk6J,EAAa,SAAWC,EAAiBC,GAExC,OAASD,GAER,KARgB,EAQMr+I,QAAQxjB,MAAO,iCAAoC8hK,GAAO,KAC/E,MACD,KATiB,EASMt+I,QAAQxjB,MAAO,kCAAqC8hK,GAAO,KACjF,MACD,KAVkB,EAUMt+I,QAAQxjB,MAAO,sCAAyC8hK,GAAO,KACtF,MACD,QACA,KAZkB,EAYMt+I,QAAQxjB,MAAO,6BAAgC8hK,GAAO,KAI/E,OAtBqB,GAyCtBC,EAAQ,SAAWr6J,EAAQs6J,EAAWC,GAIrCD,EAAcA,GAAY,KAK1B,IAJA,IAAIvtJ,EAAI/M,EAAOuzJ,IACdx+J,GAAM,EAAGkY,EAAM,EAAGvT,EAAI,GACtB8gK,EAAQzsJ,OAAOG,aAAatX,MAAO,KAAM,IAAI+iD,YAAa35C,EAAO4qD,SAAU79C,EAAGA,EAL7D,OAOR,GAAMhY,EAAIylK,EAAMx2J,QAXjB,QAW6CiJ,EAAMqtJ,GAAiBvtJ,EAAI/M,EAAOqwH,YAEvF32H,GAAK8gK,EAAOvtJ,GAAOutJ,EAAMxlK,OACzB+X,GAViB,IAWjBytJ,GAASzsJ,OAAOG,aAAatX,MAAO,KAAM,IAAI+iD,YAAa35C,EAAO4qD,SAAU79C,EAAGA,EAX9D,OAelB,OAAO,EAAIhY,KAQL,IAAUwlK,IAAUv6J,EAAOuzJ,KAAOtmJ,EAAMlY,EAAI,GAC1C2E,EAAI8gK,EAAMv5J,MAAO,EAAGlM,KA+OxB0lK,EAAqB,SAAWhkD,EAAaikD,EAAcC,EAAWC,GAE3E,IAAMhhK,EAAI68G,EAAaikD,EAAe,GAChC90H,EAAQt+B,KAAK8f,IAAK,EAAKxtB,EAAI,KAAU,IAE3C+gK,EAAWC,EAAa,GAAMnkD,EAAaikD,EAAe,GAAM90H,EAChE+0H,EAAWC,EAAa,GAAMnkD,EAAaikD,EAAe,GAAM90H,EAChE+0H,EAAWC,EAAa,GAAMnkD,EAAaikD,EAAe,GAAM90H,GAI3Di1H,EAAoB,SAAWpkD,EAAaikD,EAAcC,EAAWC,GAE1E,IAAMhhK,EAAI68G,EAAaikD,EAAe,GAChC90H,EAAQt+B,KAAK8f,IAAK,EAAKxtB,EAAI,KAAU,IAE3C+gK,EAAWC,EAAa,GAAM/3C,GAAUi4C,YAAarkD,EAAaikD,EAAe,GAAM90H,GACvF+0H,EAAWC,EAAa,GAAM/3C,GAAUi4C,YAAarkD,EAAaikD,EAAe,GAAM90H,GACvF+0H,EAAWC,EAAa,GAAM/3C,GAAUi4C,YAAarkD,EAAaikD,EAAe,GAAM90H,IAIlFm1H,EAAY,IAAItwG,WAAYzqD,GAClC+6J,EAAUxH,IAAM,EAChB,IAAMyH,EA9Pa,SAAWh7J,GAI5B,IA2BIitC,EAAM7wC,EA1BT6+J,EAAW,oCACXC,EAAc,uCACdC,EAAY,uBACZC,EAAgB,oCAGhB3sD,EAAS,CAER7F,MAAO,EAEPxxD,OAAQ,GAERikH,SAAU,GAEVC,YAAa,OAEbxqI,OAAQ,GAERyqI,MAAO,EAEPpU,SAAU,EAEVr3H,MAAO,EAAGC,OAAQ,GAMpB,GAAK/vB,EAAOuzJ,KAAOvzJ,EAAOqwH,cAAkBpjF,EAAOotH,EAAOr6J,IAEzD,OAAOk6J,EA5GS,EA4GoB,mBAKrC,KAAS99J,EAAQ6wC,EAAK7wC,MApCC,cAsCtB,OAAO89J,EAjHW,EAiHoB,qBAQvC,IAJAzrD,EAAO7F,OAvFiB,EAwFxB6F,EAAO6sD,YAAcl/J,EAAO,GAC5BqyG,EAAOr3D,QAAUnK,EAAO,MAKlB,KADLA,EAAOotH,EAAOr6J,KAId,GAFAyuG,EAAOr3D,QAAUnK,EAAO,KAEnB,MAAQA,EAAK/qC,OAAQ,IAkC1B,IA3BK9F,EAAQ6wC,EAAK7wC,MAAO6+J,MAExBxsD,EAAO8sD,MAAQlkH,WAAYj7C,EAAO,GAAK,MAInCA,EAAQ6wC,EAAK7wC,MAAO8+J,MAExBzsD,EAAO04C,SAAW9vG,WAAYj7C,EAAO,GAAK,MAItCA,EAAQ6wC,EAAK7wC,MAAO++J,MAExB1sD,EAAO7F,OArHU,EAsHjB6F,EAAO39E,OAAS10B,EAAO,KAInBA,EAAQ6wC,EAAK7wC,MAAOg/J,MAExB3sD,EAAO7F,OA3Hc,EA4HrB6F,EAAO1+E,OAASwnB,SAAUn7C,EAAO,GAAK,IACtCqyG,EAAO3+E,MAAQynB,SAAUn7C,EAAO,GAAK,KA9HpB,EAkIXqyG,EAAO7F,OAjIQ,EAiIyB6F,EAAO7F,MAAkC,WAhCvF6F,EAAO4sD,UAAYpuH,EAAO,KAoC5B,OAtImB,EAsIVwhE,EAAO7F,MArIO,EA2Id6F,EAAO7F,MAMT6F,EAJCyrD,EA7KW,EA6KoB,gCAN/BA,EAvKW,EAuKoB,4BA8JhBsB,CAAiBT,GAE1C,IA5UuB,IA4UMC,EAAmB,CAE/C,IAAM5wI,EAAI4wI,EAAiBlrI,MAC1B3e,EAAI6pJ,EAAiBjrI,OACrB0rI,EAtJqB,SAAWz7J,EAAQoqB,EAAGjZ,GAE3C,IAAMuqJ,EAAiBtxI,EAEvB,GAEKsxI,EAAiB,GAASA,EAAiB,OAE3C,IAAM17J,EAAQ,IAAW,IAAMA,EAAQ,IAAyB,IAAdA,EAAQ,GAI9D,OAAO,IAAIyqD,WAAYzqD,GAIxB,GAAK07J,KAAuB17J,EAAQ,IAAO,EAAMA,EAAQ,IAExD,OAAOk6J,EAvMW,EAuMoB,wBAIvC,IAAMyB,EAAY,IAAIlxG,WAAY,EAAIrgC,EAAIjZ,GAE1C,IAAOwqJ,EAAU3mK,OAEhB,OAAOklK,EA9MW,EA8MoB,mCAYvC,IARA,IAAIjmJ,EAAS,EAAGs/I,EAAM,EAEhBqI,EAAU,EAAIF,EACdG,EAAY,IAAIpxG,WAAY,GAC5BqxG,EAAkB,IAAIrxG,WAAYmxG,GACpCG,EAAgB5qJ,EAGV4qJ,EAAgB,GAASxI,EAAMvzJ,EAAOqwH,YAAe,CAE9D,GAAKkjC,EAAM,EAAIvzJ,EAAOqwH,WAErB,OAAO6pC,EAjOQ,GA0OhB,GALA2B,EAAW,GAAM77J,EAAQuzJ,KACzBsI,EAAW,GAAM77J,EAAQuzJ,KACzBsI,EAAW,GAAM77J,EAAQuzJ,KACzBsI,EAAW,GAAM77J,EAAQuzJ,KAElB,GAAKsI,EAAW,IAAW,GAAKA,EAAW,KAAeA,EAAW,IAAO,EAAMA,EAAW,KAASH,EAE5G,OAAOxB,EA1OU,EA0OqB,4BAQvC,IAFA,IAAI7mC,EAAM,EAAGr3F,OAAK,EAERq3F,EAAMuoC,GAAerI,EAAMvzJ,EAAOqwH,YAAe,CAG1D,IAAM2rC,GADNhgI,EAAQh8B,EAAQuzJ,MACa,IAG7B,GAFKyI,IAAehgI,GAAS,KAEtB,IAAMA,GAAaq3F,EAAMr3F,EAAQ4/H,EAEvC,OAAO1B,EA1PS,EA0PsB,qBAIvC,GAAK8B,EAIJ,IADA,IAAMC,EAAYj8J,EAAQuzJ,KAChBx+J,EAAI,EAAGA,EAAIinC,EAAOjnC,IAE3B+mK,EAAiBzoC,KAAW4oC,OAQ7BH,EAAgB1qJ,IAAKpR,EAAO4qD,SAAU2oG,EAAKA,EAAMv3H,GAASq3F,GAC1DA,GAAOr3F,EAAOu3H,GAAOv3H,EAUvB,IADA,IAAMx8B,EAAIk8J,EACA3mK,EAAI,EAAGA,EAAIyK,EAAGzK,IAAO,CAE9B,IAAImc,EAAM,EACVyqJ,EAAW1nJ,GAAW6nJ,EAAiB/mK,EAAImc,GAC3CA,GAAOwqJ,EACPC,EAAW1nJ,EAAS,GAAM6nJ,EAAiB/mK,EAAImc,GAC/CA,GAAOwqJ,EACPC,EAAW1nJ,EAAS,GAAM6nJ,EAAiB/mK,EAAImc,GAC/CA,GAAOwqJ,EACPC,EAAW1nJ,EAAS,GAAM6nJ,EAAiB/mK,EAAImc,GAC/C+C,GAAU,EAIX8nJ,IAID,OAAOJ,EAkCWO,CAAqBnB,EAAUnwG,SAAUmwG,EAAUxH,KAAOnpI,EAAGjZ,GAEhF,IAlVsB,IAkVOsqJ,EAAkB,CAE9C,IAAItmJ,EAAM2b,EAAQrU,EACd0/I,EAEJ,OAAS3lK,KAAKimB,MAEb,KAAKuH,EAEJ7O,EAAOsmJ,EACP3qI,EA/+5CavM,KAg/5Cb9H,EAAOuH,EACP,MAED,KAAKG,GAEJg4I,EAAgBV,EAAgBzmK,OAAS,EAAM,EAG/C,IAFA,IAAMonK,EAAa,IAAIriH,aAAcoiH,GAE3BxmJ,EAAI,EAAGA,EAAIwmJ,EAAaxmJ,IAEjC8kJ,EAAoBgB,EAAqB,EAAJ9lJ,EAAOymJ,EAAgB,EAAJzmJ,GAIzDR,EAAOinJ,EACPtrI,EAASxM,GACT7H,EAAO0H,GACP,MAED,KAAKC,GAEJ+3I,EAAgBV,EAAgBzmK,OAAS,EAAM,EAG/C,IAFA,IAAMqnK,EAAY,IAAI1iH,YAAawiH,GAEzBxmJ,EAAI,EAAGA,EAAIwmJ,EAAaxmJ,IAEjCklJ,EAAmBY,EAAqB,EAAJ9lJ,EAAO0mJ,EAAe,EAAJ1mJ,GAIvDR,EAAOknJ,EACPvrI,EAASxM,GACT7H,EAAO2H,GACP,MAED,QAECtI,QAAQxjB,MAAO,uCAAwC9B,KAAKimB,MAK9D,MAAO,CACNqT,MAAO1F,EAAG2F,OAAQ5e,EAClBgE,KAAMA,EACNs5F,OAAQusD,EAAiB5jH,OACzBmkH,MAAOP,EAAiBO,MACxBpU,SAAU6T,EAAiB7T,SAC3Br2H,OAAQA,EACRrU,KAAMA,IAOT,OAAO,O,yBAIR,SAAaxmB,GAGZ,OADAO,KAAKimB,KAAOxmB,EACLO,O,kBAIR,SAAMgF,EAAK6wG,EAAQC,EAAYC,GAuC9B,mEAAmB/wG,GArCnB,SAAyBi5B,EAASo7E,GAEjC,OAASp7E,EAAQhY,MAEhB,KAAKuH,EAEJyQ,EAAQzD,SAAWrL,GACnB8O,EAAQ5D,UAAYnN,EACpB+Q,EAAQ7D,UAAYlN,EACpB+Q,EAAQpD,iBAAkB,EAC1BoD,EAAQlD,OAAQ,EAChB,MAED,KAAKpN,GASL,KAAKC,GAEJqQ,EAAQzD,SAAWxL,GACnBiP,EAAQ5D,UAAYhN,EACpB4Q,EAAQ7D,UAAY/M,EACpB4Q,EAAQpD,iBAAkB,EAC1BoD,EAAQlD,OAAQ,EAKb86E,GAASA,EAAQ53E,EAASo7E,KAIQvD,EAAYC,O,GAxd7BqD,IA4enB0sD,G,kDACF,aAAc,2BACV,gBACK32H,SAASpzB,GAAK,IACnB,IAAMwqB,EAAW,IAAIgkB,GACrBhkB,EAASi8B,gBAAgB,MACzB,IAAMujG,EAAe,IAAI7pF,GAAqB,CAAEn/B,UAAW,EAAG/C,KAhs6CrD,IAis6CHgsH,EAAc,IAAI9pF,GAAqB,CAAEn/B,UAAW,IACpDkpH,EAAY,IAAItrD,GAAW,SAAU,IAAO,GAAI,GACtDsrD,EAAU92H,SAASv0B,IAAI,KAAO,OAAQ,IACtC,EAAKmrB,IAAIkgI,GACT,IAAMC,EAAO,IAAI/8G,GAAK5iB,EAAUw/H,GAChCG,EAAK/2H,SAASv0B,KAAK,KAAO,OAAQ,MAClCsrJ,EAAK92H,MAAMx0B,IAAI,OAAQ,OAAQ,QAC/B,EAAKmrB,IAAImgI,GACT,IAAMC,EAAO,IAAIh9G,GAAK5iB,EAAUy/H,GAChCG,EAAKh3H,SAASv0B,KAAK,OAAQ,MAAO,OAClCurJ,EAAK1tI,SAAS7d,IAAI,GAAI,KAAO,GAC7BurJ,EAAK/2H,MAAMx0B,IAAI,MAAO,MAAO,OAC7B,EAAKmrB,IAAIogI,GACT,IAAMC,EAAO,IAAIj9G,GAAK5iB,EAAUy/H,GAChCI,EAAKj3H,SAASv0B,KAAK,OAAQ,MAAQ,MACnCwrJ,EAAK3tI,SAAS7d,IAAI,EAAG,KAAO,GAC5BwrJ,EAAKh3H,MAAMx0B,IAAI,KAAO,MAAO,OAC7B,EAAKmrB,IAAIqgI,GACT,IAAMC,EAAO,IAAIl9G,GAAK5iB,EAAUy/H,GAChCK,EAAKl3H,SAASv0B,IAAI,MAAO,KAAO,OAChCyrJ,EAAK5tI,SAAS7d,IAAI,EAAG,KAAO,GAC5ByrJ,EAAKj3H,MAAMx0B,IAAI,MAAO,MAAO,OAC7B,EAAKmrB,IAAIsgI,GACT,IAAMC,EAAO,IAAIn9G,GAAK5iB,EAAUy/H,GAChCM,EAAKn3H,SAASv0B,KAAK,MAAO,KAAO,OACjC0rJ,EAAK7tI,SAAS7d,IAAI,EAAG,KAAO,GAC5B0rJ,EAAKl3H,MAAMx0B,IAAI,MAAO,MAAO,OAC7B,EAAKmrB,IAAIugI,GACT,IAAMC,EAAO,IAAIp9G,GAAK5iB,EAAUy/H,GAChCO,EAAKp3H,SAASv0B,IAAI,OAAQ,MAAQ,OAClC2rJ,EAAK9tI,SAAS7d,IAAI,GAAI,KAAO,GAC7B2rJ,EAAKn3H,MAAMx0B,IAAI,MAAO,MAAO,OAC7B,EAAKmrB,IAAIwgI,GACT,IAAMC,EAAO,IAAIr9G,GAAK5iB,EAAUy/H,GAChCQ,EAAKr3H,SAASv0B,KAAK,OAAQ,MAAQ,OACnC4rJ,EAAK/tI,SAAS7d,IAAI,EAAG,KAAO,GAC5B4rJ,EAAKp3H,MAAMx0B,IAAI,MAAO,MAAO,OAC7B,EAAKmrB,IAAIygI,GAET,IAAMC,EAAS,IAAIt9G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,KAC/DD,EAAOt3H,SAASv0B,KAAK,OAAQ,MAAO,OACpC6rJ,EAAOr3H,MAAMx0B,IAAI,GAAK,MAAO,OAC7B,EAAKmrB,IAAI0gI,GAET,IAAME,EAAS,IAAIx9G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,KAC/DC,EAAOx3H,SAASv0B,KAAK,OAAQ,QAAS,OACtC+rJ,EAAOv3H,MAAMx0B,IAAI,GAAK,MAAO,OAC7B,EAAKmrB,IAAI4gI,GAET,IAAMC,EAAS,IAAIz9G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,KAC/DE,EAAOz3H,SAASv0B,IAAI,OAAQ,QAAS,OACrCgsJ,EAAOx3H,MAAMx0B,IAAI,IAAM,MAAO,OAC9B,EAAKmrB,IAAI6gI,GAET,IAAMC,EAAS,IAAI19G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,KAC/DG,EAAO13H,SAASv0B,KAAK,KAAO,KAAM,OAClCisJ,EAAOz3H,MAAMx0B,IAAI,KAAM,MAAO,MAC9B,EAAKmrB,IAAI8gI,GAET,IAAMC,EAAS,IAAI39G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,KAC/DI,EAAO33H,SAASv0B,IAAI,MAAO,QAAS,QACpCksJ,EAAO13H,MAAMx0B,IAAI,IAAK,EAAK,IAC3B,EAAKmrB,IAAI+gI,GAET,IAAMC,EAAS,IAAI59G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,MAtErD,OAuEVK,EAAO53H,SAASv0B,IAAI,EAAK,GAAM,GAC/BmsJ,EAAO33H,MAAMx0B,IAAI,EAAK,GAAK,GAC3B,EAAKmrB,IAAIghI,GAzEC,E,2DA2Ed,SAAwBnmF,GACpB,IAAM/qC,EAAW,IAAImM,GAErB,OADAnM,EAAS+G,MAAM6yG,UAAU7uE,GAClB/qC,M,GA/EgB0wD,IAiGzBygE,G,kDACF,aAAc,2BACV,gBACK73H,SAASpzB,GAAK,IACnB,IAAMwqB,EAAW,IAAIgkB,GACrBhkB,EAASi8B,gBAAgB,MACzB,IAAMujG,EAAe,IAAI7pF,GAAqB,CAAEn/B,UAAW,EAAG/C,KAjy6CrD,IAky6CHgsH,EAAc,IAAI9pF,GAAqB,CAAEn/B,UAAW,IACpDkpH,EAAY,IAAItrD,GAAW,SAAU,IAAO,GAAI,GACtDsrD,EAAU92H,SAASv0B,IAAI,GAAK,GAAM,IAClC,EAAKmrB,IAAIkgI,GACT,IAAMC,EAAO,IAAI/8G,GAAK5iB,EAAUw/H,GAChCG,EAAK/2H,SAASv0B,IAAI,EAAK,KAAM,GAC7BsrJ,EAAK92H,MAAMx0B,IAAI,KAAM,KAAM,MAC3B,EAAKmrB,IAAImgI,GACT,IAAMC,EAAO,IAAIh9G,GAAK5iB,EAAUy/H,GAChCG,EAAKh3H,SAASv0B,KAAK,QAAS,EAAK,OACjCurJ,EAAK1tI,SAAS7d,IAAI,GAAI,KAAO,GAC7BurJ,EAAK/2H,MAAMx0B,IAAI,MAAO,MAAO,OAC7B,EAAKmrB,IAAIogI,GACT,IAAMC,EAAO,IAAIj9G,GAAK5iB,EAAUy/H,GAChCI,EAAKj3H,SAASv0B,KAAK,OAAQ,MAAQ,MACnCwrJ,EAAK3tI,SAAS7d,IAAI,EAAG,KAAO,GAC5BwrJ,EAAKh3H,MAAMx0B,IAAI,KAAO,MAAO,OAC7B,EAAKmrB,IAAIqgI,GACT,IAAMC,EAAO,IAAIl9G,GAAK5iB,EAAUy/H,GAChCK,EAAKl3H,SAASv0B,IAAI,OAAQ,IAAM,OAChCyrJ,EAAK5tI,SAAS7d,IAAI,EAAG,KAAO,GAC5ByrJ,EAAKj3H,MAAMx0B,IAAI,MAAO,MAAO,OAC7B,EAAKmrB,IAAIsgI,GACT,IAAMC,EAAO,IAAIn9G,GAAK5iB,EAAUy/H,GAChCM,EAAKn3H,SAASv0B,KAAK,MAAO,KAAO,OACjC0rJ,EAAK7tI,SAAS7d,IAAI,EAAG,KAAO,GAC5B0rJ,EAAKl3H,MAAMx0B,IAAI,MAAO,MAAO,OAC7B,EAAKmrB,IAAIugI,GACT,IAAMC,EAAO,IAAIp9G,GAAK5iB,EAAUy/H,GAChCO,EAAKp3H,SAASv0B,IAAI,OAAQ,MAAQ,OAClC2rJ,EAAK9tI,SAAS7d,IAAI,GAAI,KAAO,GAC7B2rJ,EAAKn3H,MAAMx0B,IAAI,MAAO,MAAO,OAC7B,EAAKmrB,IAAIwgI,GACT,IAAMC,EAAO,IAAIr9G,GAAK5iB,EAAUy/H,GAChCQ,EAAKr3H,SAASv0B,KAAK,OAAQ,MAAQ,OACnC4rJ,EAAK/tI,SAAS7d,IAAI,EAAG,KAAO,GAC5B4rJ,EAAKp3H,MAAMx0B,IAAI,MAAO,MAAO,OAC7B,EAAKmrB,IAAIygI,GAET,IAAMC,EAAS,IAAIt9G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,KAC/DD,EAAOt3H,SAASv0B,KAAK,GAAM,GAAM,GACjC6rJ,EAAOr3H,MAAMx0B,IAAI,GAAK,IAAK,KAC3B,EAAKmrB,IAAI0gI,GAET,IAAME,EAAS,IAAIx9G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,KAC/DC,EAAOx3H,SAASv0B,KAAK,GAAM,IAAO,GAClC+rJ,EAAOv3H,MAAMx0B,IAAI,GAAK,IAAK,KAC3B,EAAKmrB,IAAI4gI,GAET,IAAMC,EAAS,IAAIz9G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,KAC/DE,EAAOz3H,SAASv0B,IAAI,GAAM,GAAM,GAChCgsJ,EAAOx3H,MAAMx0B,IAAI,GAAK,EAAK,GAC3B,EAAKmrB,IAAI6gI,GAET,IAAMC,EAAS,IAAI19G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,KAC/DG,EAAO13H,SAASv0B,IAAI,EAAK,EAAK,IAC9BisJ,EAAOz3H,MAAMx0B,IAAI,EAAK,EAAK,IAC3B,EAAKmrB,IAAI8gI,GAET,IAAMC,EAAS,IAAI39G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,KAC/DI,EAAO33H,SAASv0B,IAAI,EAAK,GAAM,IAC/BksJ,EAAO13H,MAAMx0B,IAAI,IAAK,IAAK,IAC3B,EAAKmrB,IAAI+gI,GAET,IAAMC,EAAS,IAAI59G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,KAC/DK,EAAO53H,SAASv0B,KAAK,EAAK,IAAO,IACjCmsJ,EAAO33H,MAAMx0B,IAAI,IAAK,IAAK,IAC3B,EAAKmrB,IAAIghI,GAET,IAAME,EAAS,IAAI99G,GAAK5iB,EAAU,EAAKmgI,wBAAwB,IA3ErD,OA4EVO,EAAO93H,SAASv0B,IAAI,EAAK,GAAM,GAC/BqsJ,EAAO73H,MAAMx0B,IAAI,GAAK,GAAK,IAC3B,EAAKmrB,IAAIkhI,GA9EC,E,2DAgFd,SAAwBrmF,GACpB,IAAM/qC,EAAW,IAAImM,GAErB,OADAnM,EAAS+G,MAAM6yG,UAAU7uE,GAClB/qC,M,GApFmB0wD,IAuG5B2gE,GAAc,gBACdC,GAAY,IAAI7tD,GAChB8tD,GAAY,IAAI3D,GAKhBxwH,GAAW,CACbjuC,IAAK,MAEHqiK,G,kDACF,WAAYlO,GAAe,kCACvB,gBACKmO,wBAA0B,KAC/B,EAAKC,2BAA6B,KAClC,EAAKC,YAAc,IAAIrgJ,IACvB,EAAKsgJ,oBAAsB,IAAItgJ,IAC/B,EAAKwmG,eAAiB,IAAIA,GAAewrC,GANlB,E,+EAQ3B,WAAWn0J,GAAX,iCAAA2F,EAAA,6DAAgB65I,EAAhB,+BAAmC,aAAnC,SAEckjB,EAAQR,GAAY7wJ,KAAKrR,GACzB4xG,EAAS8wD,EAAQN,GAAYD,GAH3C,SAI8B,IAAInlK,SAAQ,SAACR,EAASC,GAAV,OAAqBm1G,EAAOQ,KAAKpyG,EAAKxD,GAAS,SAAC4P,GAC9EozI,EAAiBpzI,EAAMonG,OAASpnG,EAAMszI,MAAQ,MAC/CjjJ,MANX,cAIcw8B,EAJd,OAOQumH,EAAiB,GACjBxkJ,KAAK2nK,YAAY1pI,EAASj5B,GAC1Bi5B,EAAQjE,QAAUnN,EACd66I,GACAzpI,EAAQzD,SAAWrL,GACnB8O,EAAQ5D,UAAYnN,EACpB+Q,EAAQ7D,UAAYlN,EACpB+Q,EAAQlD,OAAQ,GAGhBkD,EAAQzD,SAAWtL,GAjB/B,kBAmBe+O,GAnBf,yBAsBYumH,GACAA,EAAiB,GAvB7B,2E,2IAgCA,gEAAA75I,EAAA,6DAAsCi9J,EAAtC,+BAAkD,KAAMC,EAAxD,+BAAyE,KAAMxhK,EAA/E,+BAAyF,GAC7EyhK,EAAoBzhK,EAApByhK,gBACFC,EAA8C,MAAnBD,EAA0BA,EAAgBE,gBAAkB,cAEnE,KADpBC,EAAuC,YAAnBJ,KAEtBA,EAAiB,MAEfK,EAAoBxgB,GAAemgB,GAP7C,SASYM,EAAcnmK,QAAQR,QAAQ,MAG5BomK,IACFO,EAAcnoK,KAAKooK,kBAAkBR,EAAWE,IAIhDO,EAFEH,EAGEloK,KAAKsoK,0BAA0BJ,EAAmBJ,GAE/CF,EAGH5nK,KAAKsoK,0BAA0BV,EAAWE,IAIF,IAAtBG,EAClBjoK,KAAKuoK,iCACLvoK,KAAKwoK,8BA7BrB,UA+B6CxmK,QAAQ64H,IAAI,CAACwtC,EAAqBF,IA/B/E,uCA+BaN,EA/Bb,KA+B6BY,EA/B7B,KAgC8B,MAAlBZ,EAhCZ,uBAiCkB,IAAIr8J,MAAM,mCAjC5B,iCAmCe,CAAEq8J,iBAAgBY,WAnCjC,yBAsCQV,EAAyB,GAtCjC,2E,+EAyCA,SAAY9pI,EAASj5B,GACF,MAAXi5B,IAGJA,EAAQgV,SAAWp0C,OAAOyJ,OAAOzJ,OAAOyJ,OAAO,GAAI2qC,IAAY,CAC3DjuC,IAAKA,O,+BAMb,SAAkBA,EAAK8iK,GACnB,IAAK9nK,KAAKwnK,YAAYh/I,IAAIxjB,GAAM,CAC5B,IAAMw/I,EAAmBsjB,EAAkBA,EAAgBE,gBAAkB,aACvEU,EAAiB1oK,KAAKo3G,KAAKpyG,EAAKw/I,GACtCxkJ,KAAKwnK,YAAY5sJ,IAAI5V,EAAK0jK,GAE9B,OAAO1oK,KAAKwnK,YAAYzmK,IAAIiE,K,uCAMhC,SAA0BA,EAAK8iK,GAAiB,WAC5C,IAAK9nK,KAAKynK,oBAAoBj/I,IAAIxjB,GAAM,CACpC,IAAMqjK,EAAsBroK,KAAKooK,kBAAkBpjK,EAAK8iK,GAAiB7lK,MAAK,SAACw+D,GAC3E,IAAMkoG,EAAS,EAAKh7C,eAAei7C,oBAAoBnoG,GAEvD,OADA,EAAKknG,YAAYgB,EAAO1qI,QAASj5B,GAC1B2jK,KAEX3oK,KAAK2tH,eAAek7C,+BACpB7oK,KAAKynK,oBAAoB7sJ,IAAI5V,EAAKqjK,GAEtC,OAAOroK,KAAKynK,oBAAoB1mK,IAAIiE,K,yCAKxC,WACI,GAAoC,MAAhChF,KAAKsnK,wBAAiC,CACtC,IAAMwB,EAAe,IAAIhD,GACzB9lK,KAAKsnK,wBACDtnK,KAAK2tH,eAAeo7C,UAAUD,EAvItB,KAwIZ9oK,KAAK2nK,YAAY3nK,KAAKsnK,wBAAwBrpI,QAAS,MAE3D,OAAOj8B,QAAQR,QAAQxB,KAAKsnK,2B,4CAOhC,WACI,GAAuC,MAAnCtnK,KAAKunK,2BAAoC,CACzC,IAAMuB,EAAe,IAAI9B,GACzBhnK,KAAKunK,2BACDvnK,KAAK2tH,eAAeo7C,UAAUD,EArJtB,KAsJZ9oK,KAAK2nK,YAAY3nK,KAAKunK,2BAA2BtpI,QAAS,MAE9D,OAAOj8B,QAAQR,QAAQxB,KAAKunK,8B,4DAEhC,kCAAA58J,EAAA,sDACUq+J,EAAiB,GAIvBhpK,KAAKynK,oBAAoB1+J,SAAQ,SAACkgK,GAC9BD,EAAe7kK,KAAK8kK,MAExBjpK,KAAKynK,oBAAoBr3G,QAR7B,MAS8B44G,EAT9B,gDASeC,EATf,uBAWiCA,EAXjC,cAYmB5qI,UAZnB,qFAkBwC,MAAhCr+B,KAAKsnK,0BACLtnK,KAAKsnK,wBAAwBjpI,UAC7Br+B,KAAKsnK,wBAA0B,MAEI,MAAnCtnK,KAAKunK,6BACLvnK,KAAKunK,2BAA2BlpI,UAChCr+B,KAAKunK,2BAA6B,MAxB1C,0D,2DA/IuB/3I,IA+LrB05I,GAAc,CAAC,EAAG,IAAM,IAAM,GAAK,GAAK,IAAM,KAa9ClG,G,kDACF,WAAY38J,GAAS,2BACjB,gBACKuwG,OAAS,IAAImuC,GAAkB8d,IACpC,EAAKvpI,MAAQ,EACb,EAAKC,OAAS,EACd,EAAK84H,IAAM,EACX,EAAK8W,SAAW,KAChB,EAAKv9B,OAAS,IAAI4N,IAClB,EAAK4vB,uBAAwB,EAC7B,EAAKC,UAAY,EACjB,EAAKC,SAvBa,EAwBlB,EAAKC,iBAAmB,GACxB,EAAKC,mBAAqB,SAACp4J,GACvB,EAAK0qB,cAAc,CAAE7V,KAAM,cAAewjJ,YAAar4J,KAE3D,EAAKihJ,IAAM7J,KACX,EAAKkhB,cAAgBp/J,SAASgF,cAAc,UAC5C,EAAKo6J,cAAc11H,GAAK,eACxB,EAAK21H,SAAW,EAAKD,cACrB,EAAKC,SAASr3J,iBAAiB,mBAAoB,EAAKk3J,oBACxD,IACI,EAAKrQ,cAAgB,IAAI7yD,GAAe,CACpCltE,OAAQ,EAAKuwI,SACb/0I,OAAO,EACPijE,WAAW,EACX8E,gBAAiB,mBACjBF,uBAAuB,IAE3B,EAAK08D,cAAc/2F,WAAY,EAC/B,EAAK+2F,cAAcr/E,eAAiB5qD,GACpC,EAAKiqI,cAAc3/E,yBAA0B,EAC7C,EAAK2/E,cAAc94D,cAAc,GACjC,EAAK84D,cAAc17E,UAAUtvB,SAAU,EACvC,EAAKgrG,cAAc17E,UAAUx3D,KA7n7ChB,EA8n7Cb,EAAKkzI,cAAc17E,UAAUmI,YAAa,EAC1C,EAAKujF,SACU,MAAX9iK,GAAqBA,EAAQk0E,MAAQ,IAAImiF,GAAJ,gBAAqB,KAC9D,EAAKvD,cAAc5+E,MAAQ,CAAEC,oBAAqB,EAAK2uF,UAGvD,EAAKhQ,cAAcx2F,YAzl7CD,EA2l7CtB,MAAO7gE,GACHwjB,QAAQM,KAAK9jB,GA3CA,OA6CjB,EAAK8nK,WAAa,IAAItT,GAAJ,gBAClB,EAAKuT,aACD,EAAKC,UAAY,IAAIzC,GAAa,EAAKlO,eAAiB,KAC5D,EAAK+J,mBAAqB,IAAIpO,GAAmB,EAAKqE,eACtDpU,GAAkBglB,qBAAqB,EAAK5Q,eAC5C,EAAK6Q,qBACL,EAAKtT,SAAW2D,YAAY30C,MAC5B,EAAK6jD,iBAAmB,EApDP,E,2CA6DrB,WACI,OAA6B,MAAtBvpK,KAAKm5J,gB,uBAEhB,WACI,OAAO+P,GAAYlpK,KAAKqpK,a,oBAE5B,SAAaj6H,GAET,IADA,IAAI7wC,EAAI,EACDA,EAAI2qK,GAAY1qK,UACf0qK,GAAY3qK,GAAK6wC,MAGnB7wC,EAENyB,KAAKspK,SAAW/qK,EAAI,I,gCAMxB,WACI,IAAM8zJ,EAAM7J,KACZ,GAAI6J,IAAQryJ,KAAKqyJ,IAAK,qBAIEryJ,KAAK4rI,QAJP,IAIlB,2BAAiC,KACrB3jI,EADqB,QACrBA,QACRA,EAAQgiK,IAAahiK,EAAQ0yJ,0BANf,+BAUtB,IAZiB,EAYbrhI,EAAQ,EACRC,EAAS,EAbI,cAcGv5B,KAAK4rI,QAdR,IAcjB,2BAAiC,KAAtBx8E,EAAsB,QAC7B91B,EAAQxoB,KAAKkE,IAAIskB,EAAO81B,EAAM91B,OAC9BC,EAASzoB,KAAKkE,IAAIukB,EAAQ61B,EAAM71B,SAhBnB,8BAkBjB,GAAID,IAAUt5B,KAAKs5B,OAASC,IAAWv5B,KAAKu5B,QAAU84H,IAAQryJ,KAAKqyJ,IAAnE,CAGAryJ,KAAKs5B,MAAQA,EACbt5B,KAAKu5B,OAASA,EACdv5B,KAAKqyJ,IAAMA,EACPryJ,KAAK8pK,WACL9pK,KAAKm5J,cAAc74D,QAAQhnE,EAAQ+4H,EAAK94H,EAAS84H,GAAK,GAG1D,IAAMjjH,EAAQpvC,KAAKkqK,YACbC,EAAW7wI,EAAQ8V,EACnBg7H,EAAY7wI,EAAS6V,EAG3BpvC,KAAK0pK,cAAclwJ,MAAM8f,MAAzB,UAAoC6wI,EAApC,MACAnqK,KAAK0pK,cAAclwJ,MAAM+f,OAAzB,UAAqC6wI,EAArC,MAlCiB,oBAsCGpqK,KAAK4rI,QAtCR,IAsCjB,2BAAiC,KAAtBx8E,EAAsB,QACrBh2B,EAAWg2B,EAAXh2B,OACRA,EAAOE,MAAQxoB,KAAKsjB,MAAMkF,EAAQ+4H,GAClCj5H,EAAOG,OAASzoB,KAAKsjB,MAAMmF,EAAS84H,GACpCj5H,EAAO5f,MAAM8f,MAAb,UAAwB6wI,EAAxB,MACA/wI,EAAO5f,MAAM+f,OAAb,UAAyB6wI,EAAzB,MACAh7G,EAAM8gG,SAAU,GA5CH,kC,iCA+CrB,WACI,IAAMmZ,EAAYrpK,KAAKqpK,UAQvB,GAPIrpK,KAAKupK,iBAlJc,IAmJnBvpK,KAAKqpK,UAAYrpK,KAAKspK,WACpBtpK,KAAKqpK,UAEFrpK,KAAKupK,iBAvJQ,IAuJoCvpK,KAAKqpK,UAAY,KACrErpK,KAAKqpK,UAEPA,GAAarpK,KAAKqpK,UAAtB,CAGA,IAAMj6H,EAAQpvC,KAAKkqK,YACnBlqK,KAAKupK,iBACD,GACJ,IAAMjwI,EAAQt5B,KAAKs5B,MAAQ8V,EACrB7V,EAASv5B,KAAKu5B,OAAS6V,EAC7BpvC,KAAK0pK,cAAclwJ,MAAM8f,MAAzB,UAAoCA,EAApC,MACAt5B,KAAK0pK,cAAclwJ,MAAM+f,OAAzB,UAAqCA,EAArC,MAlBkB,oBAmBEv5B,KAAK4rI,QAnBP,IAmBlB,2BAAiC,KAAtBx8E,EAAsB,QACrB51C,EAAU41C,EAAMh2B,OAAhB5f,MACRA,EAAM8f,MAAN,UAAiBA,EAAjB,MACA9f,EAAM+f,OAAN,UAAkBA,EAAlB,MACA61B,EAAM8gG,SAAU,GAvBF,kC,2BA0BtB,SAAc9gG,GAAO,WACjBpvD,KAAK4rI,OAAO7lG,IAAIqpB,GAChB,IAAQh2B,EAAWg2B,EAAXh2B,OACFgW,EAAQpvC,KAAKkqK,YACnB9wI,EAAOE,MAAQxoB,KAAKsjB,MAAMp0B,KAAKs5B,MAAQt5B,KAAKqyJ,KAC5Cj5H,EAAOG,OAASzoB,KAAKsjB,MAAMp0B,KAAKu5B,OAASv5B,KAAKqyJ,KAC9Cj5H,EAAO5f,MAAM8f,MAAb,UAAwBt5B,KAAKs5B,MAAQ8V,EAArC,MACAhW,EAAO5f,MAAM+f,OAAb,UAAyBv5B,KAAKu5B,OAAS6V,EAAvC,MACIpvC,KAAKopK,uBACLhwI,EAAO+zH,UAAUpnH,IAAI,QAEzBqpB,EAAM8gG,SAAU,EACZlwJ,KAAK8pK,WAAa9pK,KAAK4rI,OAAOtiH,KAAO,GACrCtpB,KAAKm5J,cAAczmG,kBAAiB,SAACL,EAAMC,GAAP,OAAiB,EAAK9sD,OAAO6sD,EAAMC,MAEtD,MAAjBtyD,KAAKmpK,UACLnpK,KAAKmpK,SAASkB,SAASj7G,K,6BAG/B,SAAgBA,GACZpvD,KAAK4rI,OAAOx4E,OAAOhE,GACfpvD,KAAK8pK,WAAkC,IAArB9pK,KAAK4rI,OAAOtiH,MAC9BtpB,KAAKm5J,cAAczmG,iBAAiB,MAEnB,MAAjB1yD,KAAKmpK,UACLnpK,KAAKmpK,SAASmB,YAAYl7G,K,2BAGlC,SAAcA,GACV,OAAOpvD,KAAKopK,sBAAwBh6G,EAAMnnD,QAAQsiK,IAC9CvqK,KAAK0pK,gB,0BAQb,WACI,IADW,EACPc,EAAgB,EAChBC,EAAgB,KAFT,cAGSzqK,KAAK4rI,QAHd,IAGX,2BAAiC,KAAtBx8E,EAAsB,QACTA,EAAZnnD,QACIyiK,gBAA4C,MAA1Bt7G,EAAMghG,qBAC9Boa,EACFC,EAAgBr7G,EAAMh2B,SAPnB,8BAUX,GAAqB,MAAjBqxI,EAAJ,CAGA,IAAMrB,EAAwBoB,EAAgB,GAlx8CzB,MAmx8Cbd,EAAkB1pK,KAAlB0pK,cACR,GAAIN,IAA0BppK,KAAKopK,wBAC9BA,GACGM,EAAciB,gBAAkBF,EAAcE,cAFtD,CAKA3qK,KAAKopK,sBAAwBA,EACzBA,GACAM,EAAcvc,UAAUp5G,OAAO,QAtBxB,oBAwBS/zC,KAAK4rI,QAxBd,IAwBX,2BAAiC,KAAtBx8E,EAAsB,QAC7B,GAA8B,MAA1BA,EAAMghG,iBAAV,CAGA,IAAMh3H,EAASg2B,EAAMnnD,QAAQsiK,IACzBnB,GACAhwI,EAAO+zH,UAAUpnH,IAAI,QACrBqpB,EAAM8gG,SAAU,GAEX9gG,EAAMh2B,SAAWqxI,IACtBr7G,EAAMh2B,OAAOuxI,cAAc1jB,YAAYyiB,GACvCA,EAAcvc,UAAUpnH,IAAI,QAC5B3M,EAAO+zH,UAAUp5G,OAAO,QACxBqb,EAAM8gG,SAAU,KArCb,mC,2BA8Cf,WAEI,IADA,IAAMtkB,EAAS,GACf,MAAsB,EAAC,GAAO,GAA9B,eAAqC,CAAhC,IAAgC,EAA1Bj5F,EAAO,KAAmB,cACb3yC,KAAK4rI,QADQ,IACjC,2BAAiC,KAAtBx8E,EAAsB,QACzBA,EAAMnnD,QAAQyiK,iBAAmB/3H,GACjCi5F,EAAOznI,KAAKirD,IAHa,+BAOrC,OAAOw8E,I,wBAEX,WACI,OAAO5rI,KAAK4pK,WAAWlzE,e,uBAM3B,SAAUtnC,EAAO3+B,EAAG1e,GAChB,IAAQ9J,EAAsBmnD,EAAtBnnD,QAAS0oJ,EAAavhG,EAAbuhG,SACjB1oJ,EAAQ2iK,IAAOn6I,EAAG1e,GAClB,IAAM84J,EAAuC,kBAAbla,IAA0BvuJ,KAAK8iD,MAAMyrG,GACrE3wJ,KAAKm5J,cAAc/7D,oBAAsBytE,EAAmBla,EAAW,EACnEvhG,EAAM07G,kBACN9qK,KAAKm5J,cAAc17E,UAAUp5B,aAAc,K,oBAGnD,SAAO5zB,EAAG6hC,GACN,GAAa,MAATA,EAGA,OAFAtyD,KAAK4pK,WAAWmB,aAAat6I,EAAG6hC,QAChCtyD,KAAK4pK,WAAWpR,eAAewS,aAGnC,IAAMj5J,EAAQ0e,EAAIzwB,KAAK02J,SAEvB,GADA12J,KAAK02J,SAAWjmI,EACXzwB,KAAK8pK,YAAa9pK,KAAK02F,aAA5B,CAGA12F,KAAKupK,kBAAoB30J,GAtSV,IAsSkC7C,EAAQ/R,KAAKupK,mBAnS5C,KAoSlBvpK,KAAKirK,eACLjrK,KAAKgqK,qBACLhqK,KAAKkrK,sBACL,IAfa,EAeL7Y,EAAqBryJ,KAArBqyJ,IAAK6X,EAAgBlqK,KAAhBkqK,YAfA,cAgBOlqK,KAAKmrK,iBAhBZ,IAgBb,2BAA0C,KAA/B/7G,EAA+B,QAC9BnnD,EAAYmnD,EAAZnnD,QACR,IAAKA,EAAQyiK,kBAAkBt7G,EAAM+gG,YAAc,MAGnDnwJ,KAAKw8J,UAAUptG,EAAO3+B,EAAG1e,GACpBq9C,EAAM8gG,SAGX,GAA8B,MAA1B9gG,EAAMghG,iBAAV,CAcA,IAAKnoJ,EAAQyiK,iBAAmB1qK,KAAKopK,sBAAuB,qBAG7BppK,KAAK4rI,QAHwB,IAGxD,2BAAwC,KAA7Bw/B,EAA6B,QAChCA,EAAanjK,QAAQyiK,iBACrBU,EAAalb,SAAU,IALyB,+BAW5D,IAAM52H,EAAQxoB,KAAKiE,IAAIjE,KAAK+f,KAAKu+B,EAAM91B,MAAQ4wI,EAAc7X,GAAMryJ,KAAK2pK,SAASrwI,OAC3EC,EAASzoB,KAAKiE,IAAIjE,KAAK+f,KAAKu+B,EAAM71B,OAAS2wI,EAAc7X,GAAMryJ,KAAK2pK,SAASpwI,QAOnF,GAJAv5B,KAAKm5J,cAAc3pG,gBAAgB,MACnCxvD,KAAKm5J,cAAc34D,YAAY,EAAG1vF,KAAKmgB,MAAMjxB,KAAKu5B,OAAS84H,GAAO94H,EAAQD,EAAOC,GACjFv5B,KAAKm5J,cAAc3zJ,OAAO4pD,EAAOA,EAAMjsB,QACvCisB,EAAM47G,aACFhrK,KAAKopK,sBAAuB,CACP,MAAjBh6G,EAAM3qD,SACN2qD,EAAM1qD,gBAGN,IAAM2mK,EAAYj8G,EAAM3qD,QACxB4mK,EAAUC,UAAU,EAAG,EAAGhyI,EAAOC,GACjC8xI,EAAU1xI,UAAU35B,KAAK2pK,SAAU,EAAG,EAAGrwI,EAAOC,EAAQ,EAAG,EAAGD,EAAOC,GAG7E61B,EAAM8gG,SAAU,EACZjoJ,EAAQuwG,UACNppD,EAAM+gG,gBA7CZ,CACI/gG,EAAMjsB,OAAO+P,eACb,MAAqCkc,EAAMjsB,OAAnCtK,EAAR,EAAQA,OAAQyK,EAAhB,EAAgBA,iBACV+lC,EAAaxwC,EAAO7E,SAASvpB,QAC7BpM,EAAS+wD,EAAM2iG,YACrB1oF,EAAW,KAAOhrE,EAAOyd,EACzButD,EAAW,KAAOhrE,EAAO0d,EACzBstD,EAAW,KAAOhrE,EAAOi+B,EACzB8yB,EAAMghG,iBAAiB5qJ,OAAO,CAC1B6jE,WAAYA,EACZ/lC,iBAAkBA,EAAiBtP,aAnClC,kC,qBA0EjB,WAC6B,MAArBh0B,KAAK6pK,cACL7pK,KAAK6pK,aAAaxrI,UAEI,MAAtBr+B,KAAKm5J,eACLn5J,KAAKm5J,cAAc96H,UAEvBr+B,KAAK6pK,aAAe,KACpB7pK,KAAKm5J,cAAgB,KACrBn5J,KAAK4rI,OAAOx7E,QACZpwD,KAAK2pK,SAASp3J,oBAAoB,mBAAoBvS,KAAKwpK,uB,sBAvS/D,WACI,OAAOxpK,KAAKurK,a,4BAEhB,WACIvrK,KAAKurK,WAAWltI,UAChBr+B,KAAKurK,WAAa,IAAIvI,EAAS,CAAEzoF,MAAOuuE,W,GA5DzBt5H,IAiWvBwzI,GAASuI,WAAa,IAAIvI,GAAS,CAAEzoF,MAAOuuE,OAoB5C,IAsCI0iB,GAAMC,GAsHNC,GAAMC,GAAMC,GAAMC,GAAMxoK,GAAIyoK,GAAIC,GAAIC,GAAIC,GAAIC,GA5J1CC,GAAa,uCAAG,WAAOC,GAAP,SAAAzhK,EAAA,+EACX,IAAI3I,SAAQ,SAACR,EAASC,GACzB,IACM4qK,EAAYD,EAAcxmK,MAAM,cACtC,IAAKymK,EACD,OAAO5qK,EAAO,IAAI+J,MAAJ,UAAa4gK,EAAb,8BAMlB,IAJA,IAAMnmJ,EAAOomJ,EAAU,GACjBC,EAASF,EAAcphK,QAAQ,0BAA2B,IAC1DuhK,EAAiB30D,KAAK00D,GACtBE,EAAa,GACV/uJ,EAAS,EAAGA,EAAS8uJ,EAAe/tK,OAAQif,GATnC,IASwD,CAGtE,IAFA,IAAMhT,EAAQ8hK,EAAe9hK,MAAMgT,EAAQA,EAV7B,KAWRgvJ,EAAc,IAAI1pK,MAAM0H,EAAMjM,QAC3BD,EAAI,EAAGA,EAAIkM,EAAMjM,OAAQD,IAC9BkuK,EAAYluK,GAAKkM,EAAMU,WAAW5M,GAEtC,IAAMgmK,EAAY,IAAItwG,WAAWw4G,GACjCD,EAAWroK,KAAKogK,GAEpB/iK,EAAQ,IAAIq2G,KAAK20D,EAAY,CAAEvmJ,cApBjB,2CAAH,sDAuCbymJ,GAAqB7pK,OAAO,qBAC5B8pK,GAAyB9pK,OAAO,yBAChC+pK,GAAiB/pK,OAAO,iBAsBxBgqK,G,WACF,aAAc,+BAIV7sK,KAAKwrK,IAAQlhK,SAASwiK,yBAItB9sK,KAAKsS,iBAAmB,wBAAa,IAAKs6J,KAAgBt6J,iBAArB,oBACrCtS,KAAKuS,oBAAsB,wBAAa,IAAKq6J,KAAgBr6J,oBAArB,oBACxCvS,KAAK87B,cAAgB,wBAAa,IAAK8wI,KAAgB9wI,cAArB,oBAClC97B,KAAKyrK,IAAQ,IAAIjyB,I,sDAKrB,WACI,OAAOx5I,KAAK0sK,IAAoBpjJ,O,2BAiBpC,WAAgB,WACNyjJ,EAAW,CAAE3nB,SAAU,GAO7B,OANAplJ,KAAK0sK,IAAoB3mI,IAAIgnI,GACK,IAA9B/sK,KAAKgtK,sBAGLhtK,KAAK2sK,MAEF,SAACvnB,GACJ,IAAI6nB,EAMJ,OALAA,EAAen8J,KAAKkE,IAAIJ,GAAMwwI,EAAU,EAAG,GAAI2nB,EAAS3nB,aACnC2nB,EAAS3nB,WAC1B2nB,EAAS3nB,SAAW6nB,EACpB,EAAKN,OAEFI,EAAS3nB,Y,MAGtBomB,GAAOoB,GAAgBnB,GAAOiB,GAAoBC,I,MAApD,WACI,IAD2E,EACvEO,EAAgB,EAChBC,EAAc,EACdC,EAAsB,EAHiD,cAIpDptK,KAAK0sK,KAJ+C,IAI3E,2BAAiD,KACrCtnB,EADqC,QACrCA,SAER8nB,GAAiB9nB,GAjFI,GAgF6Bt0I,KAAK8f,IAAI,EAAGu8I,MAE7C,IAAb/nB,GACAgoB,KATmE,8BAYvEA,IAAwBptK,KAAKgtK,uBAC7BE,EAAgB,EAChBltK,KAAK0sK,IAAoBt8G,SAE7BpwD,KAAK87B,cAAc,IAAIsqE,YAAY,WAAY,CAAEC,OAAQ,CAAE6mE,wB,KAkB/DG,GAAsD,SAAUC,EAAYjvK,EAAQU,EAAKqC,GAGpF,IAFL,IAA2Hq2B,EAAvHnZ,EAAIne,UAAU3B,OAAQ45B,EAAI9Z,EAAI,EAAIjgB,EAAkB,OAAT+C,EAAgBA,EAAOvC,OAAOwC,yBAAyBhD,EAAQU,GAAOqC,EAEvG7C,EAAI+uK,EAAW9uK,OAAS,EAAGD,GAAK,EAAGA,KAASk5B,EAAI61I,EAAW/uK,MAAI65B,GAAK9Z,EAAI,EAAImZ,EAAEW,GAAK9Z,EAAI,EAAImZ,EAAEp5B,EAAQU,EAAKq5B,GAAKX,EAAEp5B,EAAQU,KAASq5B,GAChJ,OAAO9Z,EAAI,GAAK8Z,GAAKv5B,OAAOC,eAAeT,EAAQU,EAAKq5B,GAAIA,GAQ1Dm1I,GAAajjK,SAASgF,cAAc,UACtCk+J,GAAc,KACZC,GAAY5qK,OAAO,YACnB6qK,GAAyB7qK,OAAO,yBAChC8qK,GAAoB9qK,OAAO,oBAC3B+qK,GAAkB/qK,OAAO,kBACzBgrK,GAAqBhrK,OAAO,qBAC5BirK,GAAiBjrK,OAAO,iBACxBkrK,GAAUlrK,OAAO,UACjBonK,GAAcpnK,OAAO,cACrBmrK,GAAwBnrK,OAAO,wBAC/BorK,GAAuBprK,OAAO,uBAC9BqrK,GAA2BrrK,OAAO,2BAClCsrK,GAAatrK,OAAO,aACpBurK,GAAcvrK,OAAO,cACrBwrK,GAAgBxrK,OAAO,gBACvByrK,GAAczrK,OAAO,cACrB0rK,GAAa1rK,OAAO,aACpB2rK,GAAoB3rK,OAAO,SAC3B0nK,GAAU1nK,OAAO,UACjB4rK,GAAS5rK,OAAO,SAChB6rK,GAAe7rK,OAAO,eACtB+nK,GAAQ/nK,OAAO,QACf8rK,GAAe9rK,OAAO,eACtB63J,GAAY73J,OAAO,YACnB+uJ,GAAY/uJ,OAAO,YACnB+rK,GAAmB/rK,OAAO,mBAC1BgsK,GAAahsK,OAAO,aACpBisK,GAAqBjsK,OAAO,qBAC5BksK,GAAwBlsK,OAAO,wBAC/Bq5J,GAAgBr5J,OAAO,gBACvBmsK,GAAmBnsK,OAAO,mBAC1BosK,GAAa,SAACjvJ,GAChB,MAAO,CACHlE,EAAGkE,EAAElE,EACLC,EAAGiE,EAAEjE,EACLugB,EAAGtc,EAAEsc,EACL7zB,SAJG,WAKC,gBAAUzI,KAAK8b,EAAf,aAAqB9b,KAAK+b,EAA1B,aAAgC/b,KAAKs8B,EAArC,QAON4yI,G,kDAIF,aAAc,2BACV,gBACKC,IAAM,KACX,EAAKj2I,IAAM,KACX,EAAKwyI,KAAQ,EACb,EAAKC,KAAQ,EACb,EAAKC,IAAQ,EACb,EAAKC,IAAQ,KACb,EAAKxoK,IAAMglJ,IAAS,WAChB,IAAM+mB,EAAe,EAAKzU,wBAC1B,EAAKsP,IAAamF,KA/DY,IAiElC,EAAKtD,IAAMzjB,IAAS,SAACgnB,GACjB,IAAMC,EAAgB,EAAK5E,eACvB4E,IAAkBD,GAClB,EAAKvzI,cAAc,IAAIsqE,YAAY,mBAAoB,CAAEC,OAAQ,CAAE1zD,QAAS28H,QAnEvC,GAsE7C,EAAKvD,IAAM,KACX,EAAKC,IAAM,KACX,EAAKC,IAAM,IAAIY,GACf,EAAKX,IAAM,SAAC96J,GACR,EAAK0qB,cAAc,IAAIsqE,YAAY,QAAS,CAAEC,OAAQ,CAAEpgF,KAAM,mBAAoBspJ,YAAan+J,EAAMq4J,iBAKzG,IAAM/8I,EAAW,EAAKltB,YAAYktB,SAC9BriB,OAAOqb,UACPrb,OAAOqb,SAAS8pJ,aAAhB,eAAmC,IAIvC,EAAKC,aAAa,CAAE9oG,KAAM,SAC1B,IAWIrtC,EAAOC,EAXLg4H,EAAa,EAAKA,WAYxB,GAXAA,EAAWtK,YAAYv6H,EAASxhB,QAAQk7I,WAAU,IAClD,EAAKmoB,IAAchd,EAAW/8I,cAAc,cAC5C,EAAKg6J,IACDjd,EAAW/8I,cAAc,cAC7B,EAAK+1J,IAAWhZ,EAAW/8I,cAAc,UACzC,EAAKm5J,IACD,EAAKa,IAAmB/5J,aAAa,cAKrC,EAAKi7J,YAAa,CAClB,IAAMC,EAAO,EAAKhV,wBAClBrhI,EAAQq2I,EAAKr2I,MACbC,EAASo2I,EAAKp2I,YAGdD,EAvGgB,IAwGhBC,EAvGiB,IAkDX,OAwDV,EAAKk1I,IACD,IAAIze,GAAW,CAAE52H,OAAQ,EAAKmxI,IAAUtiK,QAAS,eAAMqxB,QAAOC,WAClE,EAAKk1I,IAAQn8J,iBAAiB,aAA9B,uCAA4C,WAAOlB,GAAP,SAAAzG,EAAA,6DACxC,EAAK2jK,MACL,EAAKK,MAFmC,SAIlCzlB,KAJkC,OAKxC,EAAKptH,cAAc,IAAIsqE,YAAY,OAAQ,CAAEC,OAAQ,CAAErhG,IAAKoM,EAAMpM,QAL1B,2CAA5C,kCAAAhF,KAAA,gBASAgC,QAAQR,UAAUS,MAAK,WACnB,EAAKgoK,IAAa,EAAKtP,4BAEvBrvI,IAGA,EAAKsiJ,IACD,IAAIriJ,gBAAe,SAACjW,GAIhB,IAAI,EAAKs8I,IAAWl7D,aAApB,CAJ4B,oBAOVphF,GAPU,IAO5B,2BAA2B,KAAlBE,EAAkB,QACnBA,EAAMnX,SAAN,gBACA,EAAK4rK,IAAaz0J,EAAMo6J,cATJ,oCAcpCpkJ,EACA,EAAKwiJ,IAAyB,IAAIviJ,sBAAqB,SAAAnW,GAAW,oBAC5CA,GAD4C,IAC9D,2BAA2B,KAAlBE,EAAkB,QACvB,GAAIA,EAAMnX,SAAN,eAAuB,CACvB,IAAMgxK,EAAgB,EAAK3E,eAC3B,EAAKuD,IAAwBz4J,EAAMq6J,eACnC,EAAK3B,IAA0BmB,GAC3B,EAAKpB,MAA0B,EAAK/R,OACpC,EAAKmS,QAP6C,iCAW/D,CACCjtD,KAAM,KAMN0uD,WAAY,MACZ1mE,UAAW,IAMf,EAAK6kE,KAAwB,EAlHvB,E,wCAsJd,WACI,OAAOjuK,KAAK6uK,Q,MAEVnD,GAAOuC,GAAsBtC,GAAOoC,GAASnC,GAAOwC,GAAavC,GAAOgC,GAAoBxqK,GAAKqqK,GAAwB5B,GAAKoC,GAA0BnC,GAAK6B,GAAiB5B,GAAKgC,GAAuB/B,GAAK2C,GAAkBhd,I,IAAvO,WACI,OAAOoR,GAASC,Y,0BAGpB,WACI,OAAOjjK,KAAK8uK,Q,+BAEhB,WACI,0IACIxjJ,EACAtrB,KAAK4tK,IAAiBmC,QAAQ/vK,MAG9BoC,KAAKkQ,iBAAiB,SAAUtS,KAAK0tK,KAErCliJ,GACAxrB,KAAKguK,IAAuB+B,QAAQ/vK,MAExC,IAAMmvD,EAAWnvD,KAAK4xJ,IACtBziG,EAAS78C,iBAAiB,cAAetS,KAAK8tK,KAC9C3+G,EAAS6gH,cAAchwK,KAAKyuK,KACI,MAA5BzuK,KAAK6tK,MACLzrK,KAAKgmJ,aAAapoJ,KAAK6tK,KACvB7tK,KAAK6tK,IAAsB,KAG3B7tK,KAAK8xJ,cAAc,MAAO,S,kCAGlC,WAAuB,WACnB,gJACIxmI,EACAtrB,KAAK4tK,IAAiBqC,UAAUjwK,MAGhCoC,KAAKmQ,oBAAoB,SAAUvS,KAAK0tK,KAExCliJ,GACAxrB,KAAKguK,IAAuBiC,UAAUjwK,MAE1C,IAAMmvD,EAAWnvD,KAAK4xJ,IACtBziG,EAAS58C,oBAAoB,cAAevS,KAAK8tK,KACjD3+G,EAAS+gH,gBAAgBlwK,KAAKyuK,KAC9BzuK,KAAK6tK,IAAsBzrK,KAAKm1G,YAAW,WACvC,EAAKk3D,IAAQ/pG,UA3PM,O,qBA8P3B,SAAQ17C,GAkBJ,GAjBA,+DAAcA,GAKVA,EAAkBR,IAAI,SACN,MAAZxoB,KAAKk5B,KACLl5B,KAAK+tK,KAAW,EAChB/tK,KAAKouK,IAAe,EACpBpuK,KAAKyuK,IAAQ/pG,SAER1kE,KAAKk5B,MAAQl5B,KAAKyuK,IAAQzpK,MAC/BhF,KAAK+tK,KAAW,EAChB/tK,KAAKouK,IAAe,EACpBpuK,KAAKquK,QAGTrlJ,EAAkBR,IAAI,OAAQ,CAC9B,IAAM2nJ,EAAwB,MAAZnwK,KAAKmvK,IAAcnvK,KAAK2tK,IAAqB3tK,KAAKmvK,IACpEnvK,KAAKwuK,IAAmBvmJ,aAAa,aAAckoJ,M,uBAI3D,SAAUlqJ,EAAMmqJ,GACZ,OAAOpwK,KAAK4xJ,IACPye,cAAcrwK,KAAKyuK,KACnB70I,UAAU3T,EAAMmqJ,K,2DAGzB,WAAa/pK,GAAb,sDAAAsE,EAAA,6DACU8sG,EAAWpxG,EAAUA,EAAQoxG,cAAWl1G,EACxC+tK,EAAkBjqK,EAAUA,EAAQiqK,qBAAkB/tK,EACtDguK,EAAclqK,EAAUA,EAAQkqK,iBAAchuK,EAHxD,EAIyDvC,KAAKyuK,IAAlDn1I,EAJZ,EAIYA,MAAOC,EAJnB,EAImBA,OAAQg3H,EAJ3B,EAI2BA,kBAAmBljG,EAJ9C,EAI8CA,OAJ9C,EAKiCrtD,KAAK4xJ,IAA1BS,EALZ,EAKYA,IAAK6X,EALjB,EAKiBA,YACTsG,EAAcl3I,EAAQ4wI,EAAc7X,EACpCoe,EAAel3I,EAAS2wI,EAAc7X,EACtCjkG,EAAU,EACVC,EAAU,GACM,IAAhBkiH,IACIhgB,EAAoBljG,GACdqjH,EAAYD,EAClBA,EAAe3/J,KAAKsjB,MAAMo8I,EAAcjgB,GACxCliG,GAAWqiH,EAAYD,GAAgB,IAGjCE,EAAWH,EACjBA,EAAc1/J,KAAKsjB,MAAMq8I,EAAelgB,GACxCniG,GAAWuiH,EAAWH,GAAe,IAG7CjD,GAAWj0I,MAAQk3I,EACnBjD,GAAWh0I,OAASk3I,EAvBxB,4BAyBe,IAAIzuK,QAAJ,uCAAY,WAAOR,EAASC,GAAhB,SAAAkJ,EAAA,yDACI,MAAf6iK,KACAA,GAAcD,GAAW/zI,WAAW,OAExCg0I,GAAY7zI,UAAU,EAAKi4H,IAAWye,cAAc,EAAK5B,KAAUrgH,EAASC,EAASmiH,EAAaC,EAAc,EAAG,EAAGD,EAAaC,IAC/HlD,GAAWqD,SALA,mBASNn5D,GAAyB,cAAbA,EATN,yCAUAj2G,EAAQ+rK,GAAWqD,aAVnB,UAaVrD,GAAWsD,OAbD,6BAcJrvK,EAdI,SAcU2qK,GAAcoB,GAAW3zI,UAAU69E,EAAU64D,IAdvD,oEAgBf/C,GAAWsD,QAAO,SAACj1D,GACf,IAAKA,EACD,OAAOn6G,EAAO,IAAI+J,MAAM,mCAE5BhK,EAAQo6G,KACTnE,EAAU64D,GArBE,4CAAZ,0DAzBf,yBAkDQtwK,KAAKiqK,IAAa,CAAE3wI,QAAOC,WAlDnC,4E,qFAqDA,SAAiB41B,GACbnvD,KAAKyuK,IAAQre,iBAAmBjhG,I,gCAEpC,WACInvD,KAAKyuK,IAAQre,iBAAmB,O,KAE/B+d,G,IAAL,WACI,OAAoB,MAAZnuK,KAAKmvK,KAA4B,SAAbnvK,KAAKmvK,IAAkBnvK,KAAK2tK,IACpD3tK,KAAKmvK,M,KAMZN,G,MAAD,WACI,OAAO7uK,KAAK+tK,M,KAGfe,G,MAAD,WACI,OAAO9uK,KAAKw4G,QAAUx4G,KAAKiuK,M,KAE9Be,G,MAAD,WACI,OAAOhvK,KAAK0qK,iB,KAEfqE,G,MAAD,WACI,QAAS/uK,KAAKk5B,KAAOl5B,KAAKiuK,M,KAE7B/R,G,MAAD,WACI,OAAOl8J,KAAK+tK,M,KAKf9D,G,MAAD,YAAiC,IAAjB3wI,EAAiB,EAAjBA,MAAOC,EAAU,EAAVA,OACnBv5B,KAAKuuK,IAAY/0J,MAAM8f,MAAvB,UAAkCA,EAAlC,MACAt5B,KAAKuuK,IAAY/0J,MAAM+f,OAAvB,UAAmCA,EAAnC,MACAv5B,KAAK06J,IAAW,CAAEphI,MAAOunB,WAAWvnB,GAAQC,OAAQsnB,WAAWtnB,O,KAElEqxI,G,MAAD,SAAQkG,EAAOC,M,KAEdzC,G,MAAD,WACQtuK,KAAK+tK,MAGT/tK,KAAK+tK,KAAW,EAChB/tK,KAAKouK,IAAe/T,YAAY30C,S,KAEnCgpD,G,MAAD,WACI1uK,KAAKyuK,IAAQve,SAAU,I,KAE1Bye,G,MAAD,c,KAECjU,G,MAAD,SAAYt3J,GACRpD,KAAKyuK,IAAQnuE,QAAQl9F,EAAEk2B,MAAOl2B,EAAEm2B,U,MAO5B2yI,GAAK4B,GAAgBO,I,6CAA7B,gCAAA1jK,EAAA,0DACQ3K,KAAKw4G,QAAWx4G,KAAK+uK,MAD7B,wDAIUiC,EAAuBhxK,KAAK4uK,IAAkB5G,gBAC9Cz/J,EAASvI,KAAKk5B,IALxB,kBAOcl5B,KAAKyuK,IAAQwC,UAAU1oK,GAAQ,SAAC68I,GAAD,OAAc4rB,EAAgC,GAAX5rB,MAPhF,OAQc/+C,EAAS,CAAErhG,IAAKuD,GACtBvI,KAAK87B,cAAc,IAAIsqE,YAAY,UAAW,CAAEC,YATxD,kDAYQrmG,KAAK87B,cAAc,IAAIsqE,YAAY,QAAS,CAAEC,OAAQ,EAAF,MAZ5D,yBAeQ2qE,EAAqB,IACrBz+G,uBAAsB,WAClBA,uBAAsB,WAClBy+G,EAAqB,SAlBrC,6E,sEAlOA,WACI,MAAO,iB,oBAGX,WAII,OAHKhxK,KAAKkB,eAAeusK,MACrBztK,KAAKytK,IAjz8CI,SAACyD,GAClB,IAAM5yI,EAAQh0B,SAASgF,cAAc,YAKrC,OAJAgvB,EAAM3R,UAAYD,EAASC,UACvBtiB,OAAOqb,UACPrb,OAAOqb,SAASyrJ,gBAAgB7yI,EAAO4yI,GAEpC5yI,EA2y8CmB8yI,CAAapxK,KAAKqxK,KAEjCrxK,KAAKytK,M,0BAOhB,WACI,OAAO1oB,GAAkBF,IAAiBR,mB,IAL9C,SAA0B5kJ,GACtBslJ,GAAkBF,IAAiBR,kBAAoB5kJ,I,8BAiB3D,WACI,OAAOujK,GAASC,UAAUqO,U,IAX9B,SAA8B7xK,GACtBA,EAAQ,GACR6lB,QAAQM,KAAK,+EAEbnmB,GAAS,GACT6lB,QAAQM,KAAK,kFAEjBo9I,GAASC,UAAUqO,SAAW7xK,M,GAnJDonB,GAmXrCwmJ,GAAa,CACTxsK,EAAS,CAAEolB,KAAM1O,UAClB23J,GAAuB/vK,UAAW,WAAO,GAC5CkuK,GAAa,CACTxsK,EAAS,CAAEolB,KAAM1O,UAClB23J,GAAuB/vK,UAAW,WAAO,GAgB5C,IAAIoyK,GAAsD,SAAUjE,EAAYjvK,EAAQU,EAAKqC,GAGpF,IAFL,IAA2Hq2B,EAAvHnZ,EAAIne,UAAU3B,OAAQ45B,EAAI9Z,EAAI,EAAIjgB,EAAkB,OAAT+C,EAAgBA,EAAOvC,OAAOwC,yBAAyBhD,EAAQU,GAAOqC,EAEvG7C,EAAI+uK,EAAW9uK,OAAS,EAAGD,GAAK,EAAGA,KAASk5B,EAAI61I,EAAW/uK,MAAI65B,GAAK9Z,EAAI,EAAImZ,EAAEW,GAAK9Z,EAAI,EAAImZ,EAAEp5B,EAAQU,EAAKq5B,GAAKX,EAAEp5B,EAAQU,KAASq5B,GAChJ,OAAO9Z,EAAI,GAAK8Z,GAAKv5B,OAAOC,eAAeT,EAAQU,EAAKq5B,GAAIA,GAG1Do5I,GAAmB3uK,OAAO,mBAC1B4uK,GAAU5uK,OAAO,UA0HjB6uK,GAAc7uK,OAAO,cACrB8uK,GAAoB9uK,OAAO,oBAC3B+uK,GAAY/uK,OAAO,YACnBgvK,GAAchvK,OAAO,cACrBivK,GAAiBjvK,OAAO,iBAExBixJ,GAAgB,IAAIpgI,GACpBq+I,GAAe,IAAIxlI,GACnBylI,GAAqB,IAAI58I,GA2I3B68I,GAAO,SAAU3zJ,GAAK,OAAO68G,IAAIC,gBAAgB,IAAIvjB,KAAK,CAACv5F,GAAI,CAAE2H,KAAM,sBAC3E,IACIk1G,IAAI6T,gBAAgBijC,GAAK,KAE7B,MAAO7uK,IAEH6uK,GAAO,SAAU3zJ,GAAK,MAAO,6CAA+CD,UAAUC,IAI1F,IAAI4zJ,GAAKj+G,WAAYk+G,GAAMhvH,YAAaivH,GAAM/uH,YAE1CgvH,GAAO,IAAIH,GAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAgB,EAAG,EAAoB,IAG1II,GAAO,IAAIJ,GAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAiB,EAAG,IAEjIK,GAAO,IAAIL,GAAG,CAAC,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,KAE7EM,GAAO,SAAUC,EAAI/7H,GAErB,IADA,IAAI9rC,EAAI,IAAIunK,GAAI,IACP5zK,EAAI,EAAGA,EAAI,KAAMA,EACtBqM,EAAErM,GAAKm4C,GAAS,GAAK+7H,EAAGl0K,EAAI,GAGhC,IAAI65B,EAAI,IAAIg6I,GAAIxnK,EAAE,KAClB,IAASrM,EAAI,EAAGA,EAAI,KAAMA,EACtB,IAAK,IAAI4gB,EAAIvU,EAAErM,GAAI4gB,EAAIvU,EAAErM,EAAI,KAAM4gB,EAC/BiZ,EAAEjZ,GAAOA,EAAIvU,EAAErM,IAAO,EAAKA,EAGnC,MAAO,CAACqM,EAAGwtB,IAEXs6I,GAAOF,GAAKH,GAAM,GAAIM,GAAKD,GAAK,GAAIE,GAAQF,GAAK,GAErDC,GAAG,IAAM,IAAKC,GAAM,KAAO,GAI3B,IAHA,IAA0BC,GAAfL,GAAKF,GAAM,GAAiB,GAEnCQ,GAAM,IAAIX,GAAI,OACT5zK,GAAI,EAAGA,GAAI,QAASA,GAAG,CAE5B,IAAIud,IAAU,MAAJvd,MAAgB,GAAW,MAAJA,KAAe,EAEhDud,IAAU,OADVA,IAAU,MAAJA,MAAgB,GAAW,MAAJA,KAAe,MACtB,GAAW,KAAJA,KAAe,EAC5Cg3J,GAAIv0K,MAAY,MAAJud,MAAgB,GAAW,IAAJA,KAAe,KAAQ,EAK9D,IAAIi3J,GAAQ,SAAUC,EAAIC,EAAI76I,GAO1B,IANA,IAAIl1B,EAAI8vK,EAAGx0K,OAEPD,EAAI,EAEJyK,EAAI,IAAImpK,GAAIc,GAET10K,EAAI2E,IAAK3E,IACVyK,EAAEgqK,EAAGz0K,GAAK,GAEhB,IAII20K,EAJAC,EAAK,IAAIhB,GAAIc,GACjB,IAAK10K,EAAI,EAAGA,EAAI00K,IAAM10K,EAClB40K,EAAG50K,GAAM40K,EAAG50K,EAAI,GAAKyK,EAAEzK,EAAI,IAAO,EAGtC,GAAI65B,EAAG,CAEH86I,EAAK,IAAIf,GAAI,GAAKc,GAElB,IAAIG,EAAM,GAAKH,EACf,IAAK10K,EAAI,EAAGA,EAAI2E,IAAK3E,EAEjB,GAAIy0K,EAAGz0K,GAQH,IANA,IAAI80K,EAAM90K,GAAK,EAAKy0K,EAAGz0K,GAEnB+0K,EAAML,EAAKD,EAAGz0K,GAEdyhB,EAAImzJ,EAAGH,EAAGz0K,GAAK,MAAQ+0K,EAElB/1J,EAAIyC,GAAM,GAAKszJ,GAAO,EAAItzJ,GAAKzC,IAAKyC,EAEzCkzJ,EAAGJ,GAAI9yJ,KAAOozJ,GAAOC,OAOjC,IADAH,EAAK,IAAIf,GAAIjvK,GACR3E,EAAI,EAAGA,EAAI2E,IAAK3E,EACby0K,EAAGz0K,KACH20K,EAAG30K,GAAKu0K,GAAIK,EAAGH,EAAGz0K,GAAK,QAAW,GAAKy0K,EAAGz0K,IAItD,OAAO20K,GAGPK,GAAM,IAAIrB,GAAG,KACjB,IAAS3zK,GAAI,EAAGA,GAAI,MAAOA,GACvBg1K,GAAIh1K,IAAK,EACb,IAASA,GAAI,IAAKA,GAAI,MAAOA,GACzBg1K,GAAIh1K,IAAK,EACb,IAASA,GAAI,IAAKA,GAAI,MAAOA,GACzBg1K,GAAIh1K,IAAK,EACb,IAASA,GAAI,IAAKA,GAAI,MAAOA,GACzBg1K,GAAIh1K,IAAK,EAEb,IAAIi1K,GAAM,IAAItB,GAAG,IACjB,IAAS3zK,GAAI,EAAGA,GAAI,KAAMA,GACtBi1K,GAAIj1K,IAAK,EAEb,IAAIk1K,GAAoBV,GAAKQ,GAAK,EAAG,GAEjCG,GAAoBX,GAAKS,GAAK,EAAG,GAEjCG,GAAO,SAAUp9J,GAAK,OAASA,EAAI,EAAK,IAAU,EAAJA,GAAS,IAGvDq9J,GAAM,SAAU5zJ,EAAG9c,EAAGE,IACb,MAALF,GAAaA,EAAI,KACjBA,EAAI,IACC,MAALE,GAAaA,EAAI4c,EAAExhB,UACnB4E,EAAI4c,EAAExhB,QAEV,IAAI2E,EAAI,IAAK6c,aAAamyJ,GAAMA,GAAMnyJ,aAAaoyJ,GAAMA,GAAMF,IAAI9uK,EAAIF,GAEvE,OADAC,EAAEyX,IAAIoF,EAAEo0C,SAASlxD,EAAGE,IACbD,GAGP0wK,GAAQ,SAAUp8I,EAAGlhB,EAAGyJ,GACxBA,IAAU,EAAJzJ,EACN,IAAIjW,EAAKiW,EAAI,EAAK,EAClBkhB,EAAEn3B,IAAM0f,EACRyX,EAAEn3B,EAAI,IAAM0f,IAAM,GAGlB8zJ,GAAU,SAAUr8I,EAAGlhB,EAAGyJ,GAC1BA,IAAU,EAAJzJ,EACN,IAAIjW,EAAKiW,EAAI,EAAK,EAClBkhB,EAAEn3B,IAAM0f,EACRyX,EAAEn3B,EAAI,IAAM0f,IAAM,EAClByX,EAAEn3B,EAAI,IAAM0f,IAAM,IAGlB+zJ,GAAQ,SAAUt8I,EAAGw7I,GAGrB,IADA,IAAIxiJ,EAAI,GACClyB,EAAI,EAAGA,EAAIk5B,EAAEj5B,SAAUD,EACxBk5B,EAAEl5B,IACFkyB,EAAEtsB,KAAK,CAAEjB,EAAG3E,EAAG+E,EAAGm0B,EAAEl5B,KAE5B,IAAI2E,EAAIutB,EAAEjyB,OACNw1K,EAAKvjJ,EAAEhmB,QACX,IAAKvH,EACD,MAAO,CAAC+wK,GAAI,GAChB,GAAS,GAAL/wK,EAAQ,CACR,IAAI8c,EAAI,IAAIkyJ,GAAGzhJ,EAAE,GAAGvtB,EAAI,GAExB,OADA8c,EAAEyQ,EAAE,GAAGvtB,GAAK,EACL,CAAC8c,EAAG,GAEfyQ,EAAEw7C,MAAK,SAAUthE,EAAGC,GAAK,OAAOD,EAAErH,EAAIsH,EAAEtH,KAGxCmtB,EAAEtsB,KAAK,CAAEjB,GAAI,EAAGI,EAAG,QACnB,IAAI0F,EAAIynB,EAAE,GAAI2H,EAAI3H,EAAE,GAAIqnB,EAAK,EAAGC,EAAK,EAAGC,EAAK,EAO7C,IANAvnB,EAAE,GAAK,CAAEvtB,GAAI,EAAGI,EAAG0F,EAAE1F,EAAI80B,EAAE90B,EAAG0F,EAAGA,EAAGovB,EAAGA,GAMhC2f,GAAM70C,EAAI,GACb8F,EAAIynB,EAAEA,EAAEqnB,GAAIx0C,EAAImtB,EAAEunB,GAAI10C,EAAIw0C,IAAOE,KACjC5f,EAAI3H,EAAEqnB,GAAMC,GAAMtnB,EAAEqnB,GAAIx0C,EAAImtB,EAAEunB,GAAI10C,EAAIw0C,IAAOE,KAC7CvnB,EAAEsnB,KAAQ,CAAE70C,GAAI,EAAGI,EAAG0F,EAAE1F,EAAI80B,EAAE90B,EAAG0F,EAAGA,EAAGovB,EAAGA,GAE9C,IAAI87I,EAASF,EAAG,GAAG9wK,EACnB,IAAS3E,EAAI,EAAGA,EAAI2E,IAAK3E,EACjBy1K,EAAGz1K,GAAG2E,EAAIgxK,IACVA,EAASF,EAAGz1K,GAAG2E,GAGvB,IAAIixK,EAAK,IAAIhC,GAAI+B,EAAS,GAEtBE,EAAMC,GAAG5jJ,EAAEsnB,EAAK,GAAIo8H,EAAI,GAC5B,GAAIC,EAAMnB,EAAI,CAIN10K,EAAI,EAAR,IAAWqzB,EAAK,EAEZ0iJ,EAAMF,EAAMnB,EAAIsB,EAAM,GAAKD,EAE/B,IADAN,EAAG/nG,MAAK,SAAUthE,EAAGC,GAAK,OAAOupK,EAAGvpK,EAAE1H,GAAKixK,EAAGxpK,EAAEzH,IAAMyH,EAAErH,EAAIsH,EAAEtH,KACvD/E,EAAI2E,IAAK3E,EAAG,CACf,IAAIi2K,EAAOR,EAAGz1K,GAAG2E,EACjB,KAAIixK,EAAGK,GAAQvB,GAKX,MAJArhJ,GAAM2iJ,GAAO,GAAMH,EAAMD,EAAGK,IAC5BL,EAAGK,GAAQvB,EAMnB,IADArhJ,KAAQ0iJ,EACD1iJ,EAAK,GAAG,CACX,IAAI6iJ,EAAOT,EAAGz1K,GAAG2E,EACbixK,EAAGM,GAAQxB,EACXrhJ,GAAM,GAAMqhJ,EAAKkB,EAAGM,KAAU,IAE5Bl2K,EAEV,KAAOA,GAAK,GAAKqzB,IAAMrzB,EAAG,CACtB,IAAIm2K,EAAOV,EAAGz1K,GAAG2E,EACbixK,EAAGO,IAASzB,MACVkB,EAAGO,KACH9iJ,GAGVwiJ,EAAMnB,EAEV,MAAO,CAAC,IAAIf,GAAGiC,GAAKC,IAGpBC,GAAK,SAALA,EAAelxK,EAAG6F,EAAGyuB,GACrB,OAAe,GAARt0B,EAAED,EACH4N,KAAKkE,IAAIq/J,EAAGlxK,EAAE6F,EAAGA,EAAGyuB,EAAI,GAAI48I,EAAGlxK,EAAEi1B,EAAGpvB,EAAGyuB,EAAI,IAC1CzuB,EAAE7F,EAAED,GAAKu0B,GAGhBk9I,GAAK,SAAUr2J,GAGf,IAFA,IAAIpb,EAAIob,EAAE9f,OAEH0E,IAAMob,IAAIpb,KAMjB,IAJA,IAAI0xK,EAAK,IAAIzC,KAAMjvK,GAEf2xK,EAAM,EAAGC,EAAMx2J,EAAE,GAAIy2J,EAAM,EAC3BnhJ,EAAI,SAAU5T,GAAK40J,EAAGC,KAAS70J,GAC1BzhB,EAAI,EAAGA,GAAK2E,IAAK3E,EACtB,GAAI+f,EAAE/f,IAAMu2K,GAAOv2K,GAAK2E,IAClB6xK,MACD,CACD,IAAKD,GAAOC,EAAM,EAAG,CACjB,KAAOA,EAAM,IAAKA,GAAO,IACrBnhJ,EAAE,OACFmhJ,EAAM,IACNnhJ,EAAEmhJ,EAAM,GAAOA,EAAM,IAAO,EAAK,MAAUA,EAAM,GAAM,EAAK,OAC5DA,EAAM,QAGT,GAAIA,EAAM,EAAG,CAEd,IADAnhJ,EAAEkhJ,KAAQC,EACHA,EAAM,EAAGA,GAAO,EACnBnhJ,EAAE,MACFmhJ,EAAM,IACNnhJ,EAAImhJ,EAAM,GAAM,EAAK,MAAOA,EAAM,GAE1C,KAAOA,KACHnhJ,EAAEkhJ,GACNC,EAAM,EACND,EAAMx2J,EAAE/f,GAGhB,MAAO,CAACq2K,EAAGxgH,SAAS,EAAGygH,GAAM3xK,IAG7B8xK,GAAO,SAAU1nI,EAAIsnI,GAErB,IADA,IAAI5rK,EAAI,EACCzK,EAAI,EAAGA,EAAIq2K,EAAGp2K,SAAUD,EAC7ByK,GAAKskC,EAAG/uC,GAAKq2K,EAAGr2K,GACpB,OAAOyK,GAIPisK,GAAQ,SAAUC,EAAKnY,EAAKoY,GAE5B,IAAIjyK,EAAIiyK,EAAI32K,OACR8B,EAAIqzK,GAAK5W,EAAM,GACnBmY,EAAI50K,GAAS,IAAJ4C,EACTgyK,EAAI50K,EAAI,GAAK4C,IAAM,EACnBgyK,EAAI50K,EAAI,GAAc,IAAT40K,EAAI50K,GACjB40K,EAAI50K,EAAI,GAAkB,IAAb40K,EAAI50K,EAAI,GACrB,IAAK,IAAI/B,EAAI,EAAGA,EAAI2E,IAAK3E,EACrB22K,EAAI50K,EAAI/B,EAAI,GAAK42K,EAAI52K,GACzB,OAAqB,GAAb+B,EAAI,EAAI4C,IAGhBkyK,GAAO,SAAUD,EAAKD,EAAKG,EAAOC,EAAMC,EAAI/nI,EAAIilI,EAAI+C,EAAIC,EAAIC,EAAIn/J,GAChEs9J,GAAMqB,EAAK3+J,IAAK8+J,KACdE,EAAG,KAML,IALA,IAAIrf,EAAK6d,GAAMwB,EAAI,IAAKI,EAAMzf,EAAG,GAAI0f,EAAM1f,EAAG,GAC1C2f,EAAK9B,GAAMvmI,EAAI,IAAKsoI,EAAMD,EAAG,GAAIE,EAAMF,EAAG,GAC1CG,EAAKrB,GAAGgB,GAAMM,EAAOD,EAAG,GAAIE,EAAMF,EAAG,GACrChyK,EAAK2wK,GAAGmB,GAAMK,EAAOnyK,EAAG,GAAIoyK,EAAMpyK,EAAG,GACrCqyK,EAAS,IAAIlE,GAAI,IACZ5zK,EAAI,EAAGA,EAAI03K,EAAKz3K,SAAUD,EAC/B83K,EAAiB,GAAVJ,EAAK13K,MAChB,IAASA,EAAI,EAAGA,EAAI43K,EAAK33K,SAAUD,EAC/B83K,EAAiB,GAAVF,EAAK53K,MAGhB,IAFA,IAAI8E,EAAK0wK,GAAMsC,EAAQ,GAAIC,EAAMjzK,EAAG,GAAIkzK,EAAOlzK,EAAG,GAC9CmzK,EAAO,GACJA,EAAO,IAAMF,EAAI/D,GAAKiE,EAAO,MAAOA,GAE3C,IAKIC,EAAIC,EAAIC,EAAIC,EALZC,EAAQnB,EAAK,GAAM,EACnBoB,EAAQ9B,GAAKO,EAAIhC,IAAOyB,GAAKxnI,EAAIgmI,IAAOf,EACxCsE,EAAQ/B,GAAKO,EAAII,GAAOX,GAAKxnI,EAAIsoI,GAAOrD,EAAK,GAAK,EAAI+D,EAAOxB,GAAKqB,EAAQC,IAAQ,EAAID,EAAO,IAAM,EAAIA,EAAO,IAAM,EAAIA,EAAO,KACnI,GAAIQ,GAAQC,GAASD,GAAQE,EACzB,OAAO9B,GAAMC,EAAK3+J,EAAG4+J,EAAI/gH,SAASqhH,EAAIA,EAAKC,IAG/C,GADA7B,GAAMqB,EAAK3+J,EAAG,GAAKwgK,EAAQD,IAASvgK,GAAK,EACrCwgK,EAAQD,EAAO,CACfL,EAAK1D,GAAK4C,EAAKC,EAAK,GAAIc,EAAKf,EAAKgB,EAAK5D,GAAK+C,EAAKC,EAAK,GAAIa,EAAKd,EAC/D,IAAIkB,EAAMjE,GAAKuD,EAAKC,EAAM,GAC1B1C,GAAMqB,EAAK3+J,EAAG2/J,EAAM,KACpBrC,GAAMqB,EAAK3+J,EAAI,EAAG6/J,EAAM,GACxBvC,GAAMqB,EAAK3+J,EAAI,GAAIigK,EAAO,GAC1BjgK,GAAK,GACL,IAAShY,EAAI,EAAGA,EAAIi4K,IAAQj4K,EACxBs1K,GAAMqB,EAAK3+J,EAAI,EAAIhY,EAAG+3K,EAAI/D,GAAKh0K,KACnCgY,GAAK,EAAIigK,EAET,IADA,IAAIS,EAAO,CAAChB,EAAME,GACTvzK,EAAK,EAAGA,EAAK,IAAKA,EACvB,KAAIs0K,EAAOD,EAAKr0K,GAChB,IAASrE,EAAI,EAAGA,EAAI24K,EAAK14K,SAAUD,EAAG,CAClC,IAAIkY,EAAgB,GAAVygK,EAAK34K,GACfs1K,GAAMqB,EAAK3+J,EAAGygK,EAAIvgK,IAAOF,GAAK+/J,EAAI7/J,GAC9BA,EAAM,KACNo9J,GAAMqB,EAAK3+J,EAAI2gK,EAAK34K,KAAO,EAAK,KAAMgY,GAAK2gK,EAAK34K,KAAO,WAKnEk4K,EAAKhD,GAAKiD,EAAKnD,GAAKoD,EAAKjD,GAAKkD,EAAKpD,GAEvC,IAASj1K,EAAI,EAAGA,EAAIi3K,IAAMj3K,EACtB,GAAI+2K,EAAK/2K,GAAK,IAAK,CACXkY,EAAO6+J,EAAK/2K,KAAO,GAAM,GAC7Bu1K,GAAQoB,EAAK3+J,EAAGkgK,EAAGhgK,EAAM,MAAOF,GAAKmgK,EAAGjgK,EAAM,KAC1CA,EAAM,IACNo9J,GAAMqB,EAAK3+J,EAAI++J,EAAK/2K,KAAO,GAAM,IAAKgY,GAAK87J,GAAK57J,IACpD,IAAI0qB,EAAgB,GAAVm0I,EAAK/2K,GACfu1K,GAAQoB,EAAK3+J,EAAGogK,EAAGx1I,IAAO5qB,GAAKqgK,EAAGz1I,GAC9BA,EAAM,IACN2yI,GAAQoB,EAAK3+J,EAAI++J,EAAK/2K,KAAO,EAAK,MAAOgY,GAAK+7J,GAAKnxI,SAGvD2yI,GAAQoB,EAAK3+J,EAAGkgK,EAAGnB,EAAK/2K,KAAMgY,GAAKmgK,EAAGpB,EAAK/2K,IAInD,OADAu1K,GAAQoB,EAAK3+J,EAAGkgK,EAAG,MACZlgK,EAAImgK,EAAG,MAGdS,GAAoB,IAAI/E,GAAI,CAAC,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,QAAS,QAAS,QAAS,UAE/F6B,GAAmB,IAAI/B,GAAG,GA0H1BkF,GAAsB,WAEtB,IADA,IAAI3mJ,EAAI,IAAI2hJ,GAAI,KACP7zK,EAAI,EAAGA,EAAI,MAAOA,EAAG,CAE1B,IADA,IAAI+f,EAAI/f,EAAGuN,EAAI,IACNA,GACLwS,GAAU,EAAJA,GAAU,YAAeA,IAAM,EACzCmS,EAAElyB,GAAK+f,EAEX,OAAOmS,EARe,GAWtB4mJ,GAAM,WACN,IAAI/4J,GAAK,EACT,MAAO,CACH/H,EAAG,SAAUkhB,GAGT,IADA,IAAI6/I,EAAKh5J,EACA/f,EAAI,EAAGA,EAAIk5B,EAAEj5B,SAAUD,EAC5B+4K,EAAKF,GAAW,IAALE,EAAY7/I,EAAEl5B,IAAO+4K,IAAO,EAC3Ch5J,EAAIg5J,GAER7/I,EAAG,WAAc,OAAQnZ,KAI7Bi5J,GAAO,SAAUpC,EAAK/1B,EAAKo4B,EAAKC,EAAMC,GACtC,OAlJO,SAAUvC,EAAKwC,EAAKC,EAAMJ,EAAKC,EAAMI,GAC5C,IAAI30K,EAAIiyK,EAAI32K,OACR8B,EAAI,IAAI4xK,GAAGsF,EAAMt0K,EAAI,GAAK,EAAI4N,KAAK+f,KAAK3tB,EAAI,MAASu0K,GAErD7jJ,EAAItzB,EAAE8zD,SAASojH,EAAKl3K,EAAE9B,OAASi5K,GAC/B1a,EAAM,EACV,IAAK4a,GAAOz0K,EAAI,EACZ,IAAK,IAAI3E,EAAI,EAAGA,GAAK2E,EAAG3E,GAAK,MAAO,CAEhC,IAAI6E,EAAI7E,EAAI,MACR6E,EAAIF,EAEJ65J,EAAMkY,GAAMrhJ,EAAGmpI,EAAKoY,EAAI/gH,SAAS71D,EAAG6E,KAIpCwwB,EAAEr1B,GAAKs5K,EACP9a,EAAMkY,GAAMrhJ,EAAGmpI,EAAKoY,EAAI/gH,SAAS71D,EAAG2E,SAI3C,CAeD,IAdA,IAAIk8I,EAAM+3B,GAAIQ,EAAM,GAChBx0K,EAAIi8I,IAAQ,GAAI9gI,EAAU,KAAN8gI,EACpB04B,GAAS,GAAKF,GAAQ,EAEtBG,EAAO,IAAI5F,GAAI,OAAQxpB,EAAO,IAAIwpB,GAAI2F,EAAQ,GAC9CE,EAAQlnK,KAAK+f,KAAK+mJ,EAAO,GAAIK,EAAQ,EAAID,EACzCE,EAAM,SAAU35K,GAAK,OAAQ42K,EAAI52K,GAAM42K,EAAI52K,EAAI,IAAMy5K,EAAU7C,EAAI52K,EAAI,IAAM05K,GAAUH,GAGvFxC,EAAO,IAAIlD,GAAI,MAEfmD,EAAK,IAAIpD,GAAI,KAAM3kI,EAAK,IAAI2kI,GAAI,IAEhCgG,EAAO,EAAG1F,EAAK,EAAU+C,GAAPj3K,EAAI,EAAQ,GAAG65K,EAAK,EAAG3C,EAAK,EAC3Cl3K,EAAI2E,IAAK3E,EAAG,CAGf,IAAI85K,EAAKH,EAAI35K,GAET+5K,EAAW,MAAJ/5K,EAAWg6K,EAAQ5vB,EAAK0vB,GAKnC,GAJAN,EAAKO,GAAQC,EACb5vB,EAAK0vB,GAAMC,EAGPF,GAAM75K,EAAG,CAET,IAAIi6K,EAAMt1K,EAAI3E,EACd,IAAK45K,EAAO,KAAQ3C,EAAK,QAAUgD,EAAM,IAAK,CAC1Czb,EAAMqY,GAAKD,EAAKvhJ,EAAG,EAAG0hJ,EAAMC,EAAI/nI,EAAIilI,EAAI+C,EAAIC,EAAIl3K,EAAIk3K,EAAI1Y,GACxDyY,EAAK2C,EAAO1F,EAAK,EAAGgD,EAAKl3K,EACzB,IAAK,IAAI4gB,EAAI,EAAGA,EAAI,MAAOA,EACvBo2J,EAAGp2J,GAAK,EACZ,IAASA,EAAI,EAAGA,EAAI,KAAMA,EACtBquB,EAAGruB,GAAK,EAGhB,IAAInW,EAAI,EAAGyuB,EAAI,EAAGghJ,EAAOn6J,EAAGo6J,EAAOJ,EAAOC,EAAS,MACnD,GAAIC,EAAM,GAAKH,GAAMH,EAAI35K,EAAIm6K,GAMzB,IALA,IAAIC,EAAO7nK,KAAKiE,IAAI5R,EAAGq1K,GAAO,EAC1BI,EAAO9nK,KAAKiE,IAAI,MAAOxW,GAGvBgrD,EAAKz4C,KAAKiE,IAAI,IAAKyjK,GAChBE,GAAOE,KAAUH,GAAQH,GAAQC,GAAO,CAC3C,GAAIpD,EAAI52K,EAAIyK,IAAMmsK,EAAI52K,EAAIyK,EAAI0vK,GAAM,CAEhC,IADA,IAAIG,EAAK,EACFA,EAAKtvH,GAAM4rH,EAAI52K,EAAIs6K,IAAO1D,EAAI52K,EAAIs6K,EAAKH,KAAQG,GAEtD,GAAIA,EAAK7vK,EAAG,CAGR,GAFAA,EAAI6vK,EAAIphJ,EAAIihJ,EAERG,EAAKF,EACL,MAIJ,IAAIG,EAAMhoK,KAAKiE,IAAI2jK,EAAKG,EAAK,GACzBE,EAAK,EACT,IAAS55J,EAAI,EAAGA,EAAI25J,IAAO35J,EAAG,CAC1B,IAAI65J,EAAMz6K,EAAIm6K,EAAMv5J,EAAI,MAAS,MAE7B6zJ,EAAMgG,EADAjB,EAAKiB,GACM,MAAS,MAC1BhG,EAAK+F,IACLA,EAAK/F,EAAIuF,EAAQS,KAMjCN,IADAJ,EAAOC,IAAOA,EAAQR,EAAKO,IACJ,MAAS,MAIxC,GAAI7gJ,EAAG,CAGH69I,EAAKE,KAAQ,UAAa5C,GAAM5pK,IAAM,GAAM6pK,GAAMp7I,GAClD,IAAIwhJ,EAAiB,GAAXrG,GAAM5pK,GAASkwK,EAAiB,GAAXrG,GAAMp7I,GACrCg7I,GAAMJ,GAAK4G,GAAO3G,GAAK4G,KACrB3D,EAAG,IAAM0D,KACTzrI,EAAG0rI,GACLd,EAAK75K,EAAIyK,IACPmvK,OAGF7C,EAAKE,KAAQL,EAAI52K,KACfg3K,EAAGJ,EAAI52K,KAIrBw+J,EAAMqY,GAAKD,EAAKvhJ,EAAGikJ,EAAKvC,EAAMC,EAAI/nI,EAAIilI,EAAI+C,EAAIC,EAAIl3K,EAAIk3K,EAAI1Y,IAErD8a,GAAa,EAAN9a,IACRA,EAAMkY,GAAMrhJ,EAAGmpI,EAAM,EAAGkX,KAEhC,OAAOL,GAAItzK,EAAG,EAAGk3K,EAAM7D,GAAK5W,GAAO0a,GA6B5B0B,CAAKhE,EAAkB,MAAb/1B,EAAIn6C,MAAgB,EAAIm6C,EAAIn6C,MAAkB,MAAXm6C,EAAIg6B,IAActoK,KAAK+f,KAAuD,IAAlD/f,KAAKkE,IAAI,EAAGlE,KAAKiE,IAAI,GAAIjE,KAAKggB,IAAIqkJ,EAAI32K,WAAoB,GAAK4gJ,EAAIg6B,IAAM5B,EAAKC,GAAOC,IAGrK2B,GAAM,SAAU1uK,EAAGC,GACnB,IAAItK,EAAI,GACR,IAAK,IAAIwL,KAAKnB,EACVrK,EAAEwL,GAAKnB,EAAEmB,GACb,IAAK,IAAIA,KAAKlB,EACVtK,EAAEwL,GAAKlB,EAAEkB,GACb,OAAOxL,GAGPg5K,GAAS,SAAU7hJ,EAAG7sB,EAAGoV,GACzB,KAAOA,IAAKpV,EACR6sB,EAAE7sB,GAAKoV,EAAGA,KAAO,GAQzB,SAASu5J,GAAY56J,EAAMD,GACvB,OAAO64J,GAAK54J,EAAMD,GAAQ,GAAI,EAAG,GAGrC,IAAI86J,GAAO,SAAPA,EAAiB/hJ,EAAGlhB,EAAGka,EAAGnwB,GAC1B,IAAK,IAAIwL,KAAK2rB,EAAG,CACb,IAAI/uB,EAAM+uB,EAAE3rB,GAAI3I,EAAIoT,EAAIzK,EACpBpD,aAAewpK,GACfzhJ,EAAEttB,GAAK,CAACuF,EAAKpI,GACRyC,MAAMC,QAAQ0F,GACnB+nB,EAAEttB,GAAK,CAACuF,EAAI,GAAI2wK,GAAI/4K,EAAGoI,EAAI,KAE3B8wK,EAAK9wK,EAAKvF,EAAI,IAAKstB,EAAGnwB,KAI9Bw1B,GAA2B,oBAAf2jJ,aAA4C,IAAIA,YAE5D9xC,GAA2B,oBAAfvsB,aAA4C,IAAIA,YAGhE,IACIusB,GAAGtsB,OAAO44D,GAAI,CAAEyF,QAAQ,IAClB,EAEV,MAAOt2K,KAQP,SAASu2K,GAAQ5uK,EAAK6uK,GAClB,GAAIA,EAAQ,CAER,IADA,IAAIC,EAAO,IAAI3H,GAAGnnK,EAAIvM,QACbD,EAAI,EAAGA,EAAIwM,EAAIvM,SAAUD,EAC9Bs7K,EAAKt7K,GAAKwM,EAAII,WAAW5M,GAC7B,OAAOs7K,EAEX,GAAI/jJ,GACA,OAAOA,GAAGlX,OAAO7T,GACrB,IAAI/B,EAAI+B,EAAIvM,OACRs7K,EAAK,IAAI5H,GAAGnnK,EAAIvM,QAAUuM,EAAIvM,QAAU,IACxCu7K,EAAK,EACLnmJ,EAAI,SAAU5T,GAAK85J,EAAGC,KAAQ/5J,GAClC,IAASzhB,EAAI,EAAGA,EAAIyK,IAAKzK,EAAG,CACxB,GAAIw7K,EAAK,EAAID,EAAGt7K,OAAQ,CACpB,IAAI2E,EAAI,IAAI+uK,GAAG6H,EAAK,GAAM/wK,EAAIzK,GAAM,IACpC4E,EAAEyX,IAAIk/J,GACNA,EAAK32K,EAET,IAAImb,EAAIvT,EAAII,WAAW5M,GACnB+f,EAAI,KAAOs7J,EACXhmJ,EAAEtV,GACGA,EAAI,MACTsV,EAAE,IAAOtV,GAAK,GAAKsV,EAAE,IAAW,GAAJtV,IACvBA,EAAI,OAASA,EAAI,OAElBsV,EAAE,KADNtV,EAAI,OAAa,QAAJA,GAAyC,KAAtBvT,EAAII,aAAa5M,KAC/B,IAAMq1B,EAAE,IAAQtV,GAAK,GAAM,IAAMsV,EAAE,IAAQtV,GAAK,EAAK,IAAMsV,EAAE,IAAW,GAAJtV,KAEtFsV,EAAE,IAAOtV,GAAK,IAAMsV,EAAE,IAAQtV,GAAK,EAAK,IAAMsV,EAAE,IAAW,GAAJtV,IAE/D,OAAOs1J,GAAIkG,EAAI,EAAGC,GAGtB,IAAIC,GAAO,SAAUrhK,GACjB,IAAIw6J,EAAK,EACT,GAAIx6J,EACA,IAAK,IAAI7M,KAAK6M,EAAI,CACd,IAAI3P,EAAI2P,EAAG7M,GAAGtN,OACd,GAAIwK,EAAI,MACJ,KAAM,uBACVmqK,GAAMnqK,EAAI,EAGlB,OAAOmqK,GAGP8G,GAAM,SAAUxiJ,EAAG7sB,EAAGtH,EAAGnB,EAAIu3C,EAAGp7B,EAAG+uB,EAAI6lI,GACvC,IAAIP,EAAKxwK,EAAG3D,OAAQma,EAAKrV,EAAE42K,MAAOvqD,EAAMujD,GAAMA,EAAG10K,OAC7C27K,EAAMH,GAAKrhK,GACf2gK,GAAO7hJ,EAAG7sB,EAAS,MAANyiC,EAAa,SAAY,UAAYziC,GAAK,EAC7C,MAANyiC,IACA5V,EAAE7sB,KAAO,GAAI6sB,EAAE7sB,KAAOtH,EAAE82K,IAC5B3iJ,EAAE7sB,GAAK,GAAIA,GAAK,EAChB6sB,EAAE7sB,KAAQtH,EAAE+2K,MAAQ,GAAW,MAAL/7J,GAAa,GAAImZ,EAAE7sB,KAAO8uC,GAAK,EACzDjiB,EAAE7sB,KAAuB,IAAhBtH,EAAEg3K,YAAmB7iJ,EAAE7sB,KAAOtH,EAAEg3K,aAAe,EACxD,IAAI1oJ,EAAK,IAAI3a,KAAgB,MAAX3T,EAAEi3K,MAAgBtjK,KAAKyuG,MAAQpiH,EAAEi3K,OAAQx+J,EAAI6V,EAAG4oJ,cAAgB,KAClF,GAAIz+J,EAAI,GAAKA,EAAI,IACb,KAAM,8BAgBV,GAfAu9J,GAAO7hJ,EAAG7sB,EAAImR,GAAK,GAAQ6V,EAAG6oJ,WAAa,GAAM,GAAO7oJ,EAAG8oJ,WAAa,GAAO9oJ,EAAG+oJ,YAAc,GAAO/oJ,EAAGgpJ,cAAgB,EAAMhpJ,EAAGipJ,eAAiB,GAAKjwK,GAAK,EACrJ,MAAL0T,IACAg7J,GAAO7hJ,EAAG7sB,EAAGtH,EAAE+zK,KACfiC,GAAO7hJ,EAAG7sB,EAAI,EAAG0T,GACjBg7J,GAAO7hJ,EAAG7sB,EAAI,EAAGtH,EAAEgmB,OAEvBgwJ,GAAO7hJ,EAAG7sB,EAAI,GAAI+nK,GAClB2G,GAAO7hJ,EAAG7sB,EAAI,GAAIuvK,GAAMvvK,GAAK,GACnB,MAANyiC,IACAisI,GAAO7hJ,EAAG7sB,EAAG+kH,GACb2pD,GAAO7hJ,EAAG7sB,EAAI,EAAGtH,EAAEw3K,OACnBxB,GAAO7hJ,EAAG7sB,EAAI,GAAIyiC,GAAKziC,GAAK,IAEhC6sB,EAAE7c,IAAIzY,EAAIyI,GACVA,GAAK+nK,EACDwH,EACA,IAAK,IAAIruK,KAAK6M,EAAI,CACd,IAAIoiK,EAAMpiK,EAAG7M,GAAI9C,EAAI+xK,EAAIv8K,OACzB86K,GAAO7hJ,EAAG7sB,GAAIkB,GACdwtK,GAAO7hJ,EAAG7sB,EAAI,EAAG5B,GACjByuB,EAAE7c,IAAImgK,EAAKnwK,EAAI,GAAIA,GAAK,EAAI5B,EAKpC,OAFI2mH,IACAl4F,EAAE7c,IAAIs4J,EAAItoK,GAAIA,GAAK+kH,GAChB/kH,GAiBX,SAASowK,GAAQr8J,EAAMD,GACdA,IACDA,EAAO,IACX,IAAI0Z,EAAI,GACJs9E,EAAQ,GACZ8jE,GAAK76J,EAAM,GAAIyZ,EAAG1Z,GAClB,IAAIpe,EAAI,EACJ26K,EAAM,EACV,IAAK,IAAI94K,KAAMi2B,EAAG,CACd,IAAI89H,EAAK99H,EAAEj2B,GAAKwzG,EAAOugD,EAAG,GAAI3/I,EAAI2/I,EAAG,GACjCokB,EAAyB,GAAX/jK,EAAE0uF,MAAa,EAAI,EAChB/hG,GAAjBI,EAAIq2K,GAAQx3K,IAAW3D,OACvB08K,EAAM3kK,EAAE4kK,QAAS59J,EAAI29J,GAAOvB,GAAQuB,GAAMlzB,EAAKzqI,GAAKA,EAAE/e,OACtD27K,EAAMH,GAAKzjK,EAAE2jK,OACjB,GAAIh3K,EAAI,MACJ,KAAM,oBACV,IAAIu0B,EAAI6iJ,EAAcf,GAAY5jE,EAAMp/F,GAAKo/F,EAAM3sG,EAAIyuB,EAAEj5B,OACrD8f,EAAI+4J,KACR/4J,EAAE/H,EAAEo/F,GACJD,EAAMvxG,KAAKk1K,GAAI9iK,EAAG,CACd+S,KAAMqsF,EAAKn3G,OACX64K,IAAK/4J,EAAEmZ,IACPnZ,EAAGmZ,EACHn0B,EAAGA,EACHia,EAAGA,EACHm8B,EAAGx2C,GAAKf,EAAG3D,QAAW+e,GAAM29J,EAAI18K,QAAUwpJ,EAC1C1nJ,EAAGA,EACHg6K,YAAaA,KAEjBh6K,GAAK,GAAK4C,EAAIi3K,EAAMnxK,EACpBiyK,GAAO,GAAK,GAAK/3K,EAAIi3K,IAAQnyB,GAAM,GAAKh/I,EAG5C,IADA,IAAIksK,EAAM,IAAIhD,GAAG+I,EAAM,IAAKG,EAAK96K,EAAG+6K,EAAMJ,EAAM36K,EACvC/B,EAAI,EAAGA,EAAIm3G,EAAMl3G,SAAUD,EAAG,CACnC,IAAI+E,EAAIoyG,EAAMn3G,GACd07K,GAAI/E,EAAK5xK,EAAEhD,EAAGgD,EAAGA,EAAEA,EAAGA,EAAEo2C,EAAGp2C,EAAEgb,EAAE9f,QAC/B,IAAI88K,EAAO,GAAKh4K,EAAEA,EAAE9E,OAASw7K,GAAK12K,EAAE42K,OACpChF,EAAIt6J,IAAItX,EAAEgb,EAAGhb,EAAEhD,EAAIg7K,GACnBrB,GAAI/E,EAAK50K,EAAGgD,EAAGA,EAAEA,EAAGA,EAAEo2C,EAAGp2C,EAAEgb,EAAE9f,OAAQ8E,EAAEhD,EAAGgD,EAAEia,GAAIjd,GAAK,GAAKg7K,GAAQh4K,EAAEia,EAAIja,EAAEia,EAAE/e,OAAS,GAGzF,OAvDM,SAAU8B,EAAGsK,EAAG0T,EAAGmZ,EAAGr0B,GAC5Bk2K,GAAOh5K,EAAGsK,EAAG,WACb0uK,GAAOh5K,EAAGsK,EAAI,EAAG0T,GACjBg7J,GAAOh5K,EAAGsK,EAAI,GAAI0T,GAClBg7J,GAAOh5K,EAAGsK,EAAI,GAAI6sB,GAClB6hJ,GAAOh5K,EAAGsK,EAAI,GAAIxH,GAiDlBm4K,CAAIrG,EAAK50K,EAAGo1G,EAAMl3G,OAAQ68K,EAAKD,GACxBlG,E,IAGLsG,G,4HAEL,WAAapsH,GAAb,qCAAAzkD,EAAA,sDAEK4wB,EAqGL,iJAnGOmZ,EAAY,GACZpZ,EAAW,GAEjB8zB,EAAMlb,UAAU,SAAEjzC,GAEjB,GAAKA,EAAOm0C,OAAS,CAEpB,IAAM7O,EAAWtlC,EAAOslC,SAClBsP,EAAW50C,EAAO40C,SAExBnB,EAAWmB,EAASpb,MAASob,EAEP,OAAjBA,EAAStgC,MAAe+lB,EAAUua,EAAStgC,IAAIklB,MAASob,EAAStgC,KAC1C,OAAvBsgC,EAASsI,YAAqB7iB,EAAUua,EAASsI,UAAU1jB,MAASob,EAASsI,WAC1D,OAAnBtI,EAASkI,QAAiBziB,EAAUua,EAASkI,MAAMtjB,MAASob,EAASkI,OAC3C,OAA1BlI,EAAS4I,eAAwBnjB,EAAUua,EAAS4I,aAAahkB,MAASob,EAAS4I,cACzD,OAA1B5I,EAAS6I,eAAwBpjB,EAAUua,EAAS6I,aAAajkB,MAASob,EAAS6I,cAC1D,OAAzB7I,EAAS8I,cAAuBrjB,EAAUua,EAAS8I,YAAYlkB,MAASob,EAAS8I,aAEtFpjB,GAAUkgJ,GAAYx6K,EAAQy6K,GAAWn1I,EAAUsP,QAMrDta,GAAUogJ,GAAgBjnI,GAC1BnZ,GAAUqgJ,GAAetgJ,GAEnBo6E,EAAQ,CAAE,aAAcikE,GAASp+I,IAhCxC,OAAA5wB,EAAA,KAkCqB2wB,GAlCrB,qDAkCab,EAlCb,WAoCQwD,EAAU3C,EAAUb,GApC5B,UAqC6DohJ,GAAS59I,EAAQhF,OArC9E,QAqCEy8E,EAAO,oBAAsBz3E,EAAQ+V,GAAK,QArC5C,8BA8CC,IAAY8nI,KAFRr+J,EAAS,EAEWi4F,EAEjBC,EAAOD,EAAOomE,GACdC,EAAa,GAAKD,EAASt9K,OAMZ,KAFfw9K,EAAuB,IAF7Bv+J,GAAUs+J,MAOHE,EAAU,IAAIhoH,WADF,GAAK+nH,GAGvBtmE,EAAOomE,GAAa,CAAEnmE,EAAM,CAAEukE,MAAO,CAAEgC,MAAOD,MAI/Cx+J,EAASk4F,EAAKn3G,OAhEhB,yBAoEQw8K,GAAStlE,EAAO,CAAEzQ,MAAO,KApEjC,4C,uEA0Ec42E,G,iFAAf,WAAwB5iJ,GAAxB,mBAAAtuB,EAAA,2DAEoC,qBAArBsxB,kBAAoChD,aAAiBgD,kBACnC,qBAAtB9C,mBAAqCF,aAAiBE,mBAClC,qBAApBwzD,iBAAmC1zD,aAAiB0zD,iBACpC,qBAAhBzwD,aAA+BjD,aAAiBiD,aAL3D,wBAOQkT,EAAQ,KAAOt+B,KAAKkE,IAAKikB,EAAMK,MAAOL,EAAMM,SAE5CH,EAAS9uB,SAASgF,cAAe,WAChCgqB,MAAQL,EAAMK,MAAQxoB,KAAKiE,IAAK,EAAGq6B,GAC1ChW,EAAOG,OAASN,EAAMM,OAASzoB,KAAKiE,IAAK,EAAGq6B,GAE5BhW,EAAOI,WAAY,MAC3BG,UAAWV,EAAO,EAAG,EAAGG,EAAOE,MAAOF,EAAOG,QAdvD,SAgBqB,IAAIv3B,SAAS,SAAAR,GAAO,OAAI43B,EAAOy3I,OAAQrvK,EAAS,aAAc,MAhBnF,cAgBQo6G,EAhBR,YAiBa3nD,WAjBb,UAiB+B2nD,EAAK0kC,cAjBpC,0G,sBA4CA,SAASm7B,GAAYx6K,EAAQk7K,GAE5B,IAAM33K,EAAO,UAAYvD,EAAO+yC,GAC1B+gD,EAcP,SAAsBl8D,GAErB,IAAMlJ,EAAQkJ,EAAO7E,SAErB,kBAAaooJ,GAAgBzsJ,EAAO,GAApC,aAA8CysJ,GAAgBzsJ,EAAO,GAArE,aAA+EysJ,GAAgBzsJ,EAAO,GAAtG,aAAgHysJ,GAAgBzsJ,EAAO,IAAvI,MAlBkB0sJ,CAAap7K,EAAOuiC,aAEtC,2BAAsBh/B,EAAtB,kDAEmCuwF,EAFnC,6EAKMonF,EALN,WAoBD,SAASC,GAAgBzsJ,EAAOlS,GAE/B,iBAAYkS,EAAOlS,EAAS,GAA5B,aAAsCkS,EAAOlS,EAAS,GAAtD,aAAgEkS,EAAOlS,EAAS,GAAhF,aAA0FkS,EAAOlS,EAAS,GAA1G,KAMD,SAASi+J,GAAWn1I,EAAUsP,GAE7B,IAAMrxC,EAAO,YAAc+hC,EAASyN,GAC9BvqB,EAAa8c,EAAS9c,WACtB+b,EAAQ/b,EAAW0lB,SAAS3J,MAQlC,MANK,QAAS/b,GAEbnE,QAAQM,KAAM,8CAIf,oBAAqBphB,EAArB,uDAkBD,SAA+B+hC,GAE9B,IAAMf,EAA2B,OAAnBe,EAAS16B,MAAiB06B,EAAS16B,MAAM8jB,MAAMnxB,OAAS+nC,EAAS9c,WAAW0lB,SAAS3J,MAEnG,OAAOziC,MAAOyiC,EAAQ,GAAI0rF,KAAM,GAAIpkH,KAAM,MApBNwvK,CAAsB/1I,GAF1D,iDA0BD,SAAiCA,GAEhC,GAAwB,OAAnBA,EAAS16B,MAEb,OAAO06B,EAAS16B,MAAM8jB,MAAM7iB,KAAM,MAOnC,IAHA,IAAM6iB,EAAQ,GACRnxB,EAAS+nC,EAAS9c,WAAW0lB,SAAS3J,MAElCjnC,EAAI,EAAGA,EAAIC,EAAQD,IAE5BoxB,EAAMxrB,KAAM5F,GAIb,OAAOoxB,EAAM7iB,KAAM,MAxCkByvK,CAAwBh2I,GAH7D,kEAIsDsP,EAAS7B,GAJ/D,4CAKgCwoI,GAAmB/yJ,EAAW6a,OAAQkB,GALtE,6FAQ8Bg3I,GAAmB/yJ,EAAW0lB,SAAU3J,GARtE,8CAqED,SAA4Bhf,EAAWgf,GAEtC,QAAmBjjC,IAAdikB,EAGJ,OADAlB,QAAQM,KAAM,8BACP7iB,MAAOyiC,GAAQ0rF,KAAM,UAAWpkH,KAAM,MAO9C,IAHA,IAAM6iB,EAAQ,GACRhR,EAAO6H,EAAUmJ,MAEbpxB,EAAI,EAAGA,EAAIogB,EAAKngB,OAAQD,GAAK,EAEtCoxB,EAAMxrB,KAAN,WAAiBwa,EAAMpgB,EAAI,GAAIk+K,YAnJf,GAmJhB,aAA8D,EAAI99J,EAAMpgB,EAAI,GAAIk+K,YAnJhE,GAmJhB,MAID,OAAO9sJ,EAAM7iB,KAAM,MA9Ee4vK,CAAmBjzJ,EAAWsS,GAAIyJ,GATpE,mHA+CD,SAASg3I,GAAmBh2J,EAAWgf,GAEtC,QAAmBjjC,IAAdikB,EAGJ,OADAlB,QAAQM,KAAM,kCACP7iB,MAAOyiC,GAAQ0rF,KAAM,aAAcpkH,KAAM,MAOjD,IAHA,IAAM6iB,EAAQ,GACRhR,EAAO6H,EAAUmJ,MAEbpxB,EAAI,EAAGA,EAAIogB,EAAKngB,OAAQD,GAAK,EAEtCoxB,EAAMxrB,KAAN,WAAiBwa,EAAMpgB,EAAI,GAAIk+K,YA7Hf,GA6HhB,aAA8D99J,EAAMpgB,EAAI,GAAIk+K,YA7H5D,GA6HhB,aAA2G99J,EAAMpgB,EAAI,GAAIk+K,YA7HzG,GA6HhB,MAID,OAAO9sJ,EAAM7iB,KAAM,MA4BpB,SAAS6uK,GAAgBjnI,GAExB,IAAM/kB,EAAQ,GAEd,IAAM,IAAM8K,KAAQia,EAAY,CAE/B,IAAMmB,EAAWnB,EAAWja,GAE5B9K,EAAMxrB,KAAMw4K,GAAe9mI,IAI5B,oCAEElmB,EAAM7iB,KAAM,IAFd,WASD,SAAS6vK,GAAe9mI,GAIvB,IAAM+mI,EAAM,eACNrnI,EAAa,GAsDnB,OApDsB,OAAjBM,EAAStgC,IAEbggC,EAAWpxC,KAAX,UAAqBy4K,EAArB,oEAAsF/mI,EAAStgC,IAAIy+B,GAAnG,kBAIAuB,EAAWpxC,KAAX,UAAqBy4K,EAArB,yCAA2DC,GAAYhnI,EAAS+G,SAInD,OAAzB/G,EAAS8I,YAEbpJ,EAAWpxC,KAAX,UAAqBy4K,EAArB,qEAAuF/mI,EAAS8I,YAAY3K,GAA5G,kBAEW6B,EAASoH,SAASJ,SAAW,GAExCtH,EAAWpxC,KAAX,UAAqBy4K,EAArB,0CAA4DC,GAAYhnI,EAASoH,YAItD,OAAvBpH,EAASsI,WAEb5I,EAAWpxC,KAAX,UAAqBy4K,EAArB,+DAAiF/mI,EAASsI,UAAUnK,GAApG,kBAIuB,OAAnB6B,EAASkI,OAEbxI,EAAWpxC,KAAX,UAAqBy4K,EAArB,+DAAiF/mI,EAASkI,MAAM/J,GAAhG,gBAI8B,OAA1B6B,EAAS4I,aAEblJ,EAAWpxC,KAAX,UAAqBy4K,EAArB,+DAAiF/mI,EAAS4I,aAAazK,GAAvG,gBAIAuB,EAAWpxC,KAAX,UAAqBy4K,EAArB,oCAAsD/mI,EAASiH,YAIjC,OAA1BjH,EAAS6I,aAEbnJ,EAAWpxC,KAAX,UAAqBy4K,EAArB,8DAAgF/mI,EAAS6I,aAAa1K,GAAtG,gBAIAuB,EAAWpxC,KAAX,UAAqBy4K,EAArB,mCAAqD/mI,EAASkH,YAI/D,uCAC6BlH,EAAS7B,GADtC,kFAG+D6B,EAAS7B,GAHxE,wJAQEuB,EAAWzoC,KAAM,MARnB,2GAiBD,SAAS8uK,GAAetgJ,GAEvB,IAAM3L,EAAQ,GAEd,IAAM,IAAM8K,KAAQa,EAAW,CAE9B,IAAM2C,EAAU3C,EAAUb,GAE1B9K,EAAMxrB,KAAM24K,GAAc7+I,IAI3B,mCAEEtO,EAAM7iB,KAAM,IAFd,WASD,SAASgwK,GAAc7+I,GAEtB,0CAC0BA,EAAQ+V,GADlC,mHAIgD/V,EAAQ+V,GAJxD,uMAgBD,SAAS6oI,GAAYjgI,GAEpB,iBAAYA,EAAMxkB,EAAlB,aAA0BwkB,EAAM13B,EAAhC,aAAwC03B,EAAMhyC,EAA9C,KAsCD,IAAiCmyK,GAgY7BC,GAAMC,GAAMC,GA9VZC,GAAsD,SAAU7P,EAAYjvK,EAAQU,EAAKqC,GAGpF,IAFL,IAA2Hq2B,EAAvHnZ,EAAIne,UAAU3B,OAAQ45B,EAAI9Z,EAAI,EAAIjgB,EAAkB,OAAT+C,EAAgBA,EAAOvC,OAAOwC,yBAAyBhD,EAAQU,GAAOqC,EAEvG7C,EAAI+uK,EAAW9uK,OAAS,EAAGD,GAAK,EAAGA,KAASk5B,EAAI61I,EAAW/uK,MAAI65B,GAAK9Z,EAAI,EAAImZ,EAAEW,GAAK9Z,EAAI,EAAImZ,EAAEp5B,EAAQU,EAAKq5B,GAAKX,EAAEp5B,EAAQU,KAASq5B,GAChJ,OAAO9Z,EAAI,GAAK8Z,GAAKv5B,OAAOC,eAAeT,EAAQU,EAAKq5B,GAAIA,GAE5DglJ,IAAiB,EACjBC,IAAuB,EACrBC,GAAkB,+BAClBC,IA3C2BR,GA2CkB,CAAC,aAAc,eAAgB,QAAS,QA3CzC,SAACS,GAC/C,IACI,IADA,EACM/yB,EAAcF,GAAiBizB,GAC/B/f,GAAShT,EAAYjsJ,OAASisJ,EAAY,GAAGK,MAAQ,IACtD77I,QAAO,SAACwuK,GAAD,OAAeA,GAAgC,UAAnBA,EAAUx3J,QAC7C1Q,KAAI,SAAAkoK,GAAS,OAAIA,EAAUh+K,SAC3BwP,QAAO,SAAAzK,GAAI,OAAIu4K,GAAavvK,QAAQhJ,IAAS,KAG5C3E,EAAS,IAAI25I,IARnB,cASmBikB,GATnB,IASA,2BAA0B,KAAfj5J,EAAe,QACtB3E,EAAOkmC,IAAIvhC,IAVf,8BAYA,OAAO3E,EAEX,MAAO69K,IAEP,OAAO,IAAIlkC,MA2BTmkC,GAAmB,qBACnBC,GACU,aADVA,GAEY,eAFZA,GAGK,QAHLA,GAII,OAEJC,GAAqBh7K,OAAO,qBAC5Bi7K,GAAoBj7K,OAAO,oBAC3Bk7K,GAAmBl7K,OAAO,mBAC1Bm7K,GAAsBn7K,OAAO,sBAC7Bo7K,GAAiBp7K,OAAO,iBACxBq7K,GAAUr7K,OAAO,UACjBs7K,GAAWt7K,OAAO,WAClBu7K,GAAYv7K,OAAO,YACnBw7K,GAAWx7K,OAAO,WAClBy7K,GAA4Bz7K,OAAO,4BACnC07K,GAAc17K,OAAO,cACrB27K,GAAgB37K,OAAO,gBACvB47K,GAAW57K,OAAO,WAClB67K,GAAgB77K,OAAO,gBACvB87K,GAAe97K,OAAO,eAgUtB+7K,GAAY/7K,OAAO,YACnBg8K,GAAah8K,OAAO,aAWpBi8K,G,WACF,aAAc,oBACV9+K,KAAKg9K,IAAQ,K,4CAqHjB,WACI,OAAO,I,sBAQX,WAII,OAHKh9K,KAAK++K,YAAkC,MAApB/+K,KAAK6+K,MACzB7+K,KAAK6+K,IAAc7+K,KAAK4+K,OAErB5+K,KAAK6+K,O,6BAxHhB,SAAsBt/D,GAAoB,IAAdy/D,EAAc,uDAANzyB,GAChC,GAAIhtC,aAAgBu/D,EAChB,OAAOv/D,EAEX,GAAkB,WAAdA,EAAKt5F,KACL,MAAkB,MAAds5F,EAAK7uC,KACE,IAAIuuG,GAAoB1/D,EAAMy/D,GAElCz/D,EAEX,OAAQA,EAAK/6G,KAAK/E,OACd,IAAK,OACD,OAAO,IAAIy/K,GAAc3/D,EAAMy/D,GACnC,IAAK,MACD,OAAO,IAAIG,GAAa5/D,GAEhC,OAAOgtC,K,sBASX,SAAgB6yB,GACZ,OAAIA,aAAuBN,EAChBM,EAAYtxE,WAEhBsxE,I,wBAMX,SAAkBA,GACd,QAAIA,aAAuBN,IAChBM,EAAYL,a,6BA6B3B,SAAuBM,EAAWC,GAC9B,IAAQN,EAAoBM,EAApBN,MAAOO,EAAaD,EAAbC,SACPC,EAASD,EAATC,KACR,OAAOR,EAAMzpK,KAAI,SAACkqK,EAAW5zK,GAEzB,IAAM6zK,EAAoC,MAAfF,EAAK3zK,GAAiB4zK,EAAYD,EAAK3zK,GAG9D8zK,EAAgBN,EAAUxzK,GAASwzK,EAAUxzK,GAAS6zK,EAE1D,GAA2B,UAAvBC,EAAc15J,KAAkB,CAChC,IAAM25J,EAAUD,EAAclgL,MAE1BmgL,KAAWL,IACXI,EAAgBJ,EAASK,GAAS/zK,IAS1C,OAJqB,MAAjB8zK,GAAgD,UAAvBA,EAAc15J,OACvC05J,EAAgBD,GAGO,MAAvBC,EAAcjvG,KACP25E,GAAWs1B,EAAcr1B,OAAS,IAAMm1B,EAAUn1B,OAAQm1B,EAAU/uG,OAG/EivG,EAAgB9yB,GAAc8yB,EAAeF,IAE3B/uG,OAAS+uG,EAAU/uG,KAC1B+uG,EAGJE,S,KAwBnB3C,GAAO6B,GACP,IAsPIgB,GAAMC,GAAMC,GAAM/7K,GAtPhBg8K,GAAcn9K,OAAO,cACrBo9K,GAASp9K,OAAO,SAKhBo8K,G,kDACF,WAAYiB,EAAYlB,GAAO,kCAC3B,gBACKgB,IAAeE,EACpB,EAAKD,IAAUjB,EAHY,E,4CAK/B,WACI,OAAO,I,KAEVJ,G,MAAD,WACI,OAAOv0B,GAAWrqJ,KAAKggL,IAAa11B,OAAS,IAAMtqJ,KAAKigL,IAAQ31B,OAAQtqJ,KAAKigL,IAAQvvG,U,GAV3DouG,IAa5BqB,GAAat9K,OAAO,aAmBpBs8K,G,kDACF,WAAYiB,GAAa,2BACrB,gBACKnD,IAAQ,KACb,IAAM3xB,EAAY80B,EAAYjgL,UAAU3B,OAAS4hL,EAAYjgL,UAAU,GAAG2qJ,MAAM,GAAK,KAHhE,OAIJ,MAAbQ,GAAwC,UAAnBA,EAAUrlI,OAC/B,EAAKk6J,IAAc70B,GALF,E,4CAQzB,WACI,OAAO,I,MAGT2xB,GAAOkD,GAAYvB,I,MAArB,WACI,GAAwB,MAApB5+K,KAAKmgL,IACL,OAAQngL,KAAKmgL,IAAY1gL,OACrB,IAAK,kBAMD,MAAO,CAAEwmB,KAAM,SAAUqkI,OALMjgJ,OAAOg2K,aACZvvK,KAAKkE,IAAI1K,SAAS4wH,KAAKolD,aAAch2K,SAAS4wH,KAAKg+B,aAAc5uJ,SAASi2K,gBAAgBC,aAAcl2K,SAASi2K,gBAAgBD,aAAch2K,SAASi2K,gBAAgBrnB,cAEzK7uJ,OAAOo2K,cAC5B,EACsC/vG,KAAM,MAG5D,OAAO67E,O,GAzBYuyB,IA4BrB4B,GAAuB,SACvBC,GAAa99K,OAAO,YAapBq8K,G,kDACF,WAAY0B,GAA4B,MAAd5B,EAAc,uDAANzyB,GAG9B,GAHoC,qBACpC,gBACK2wB,IAAQ,KACyB,IAAlC0D,EAAazgL,UAAU3B,OACvB,sBAIJ,IAFA,IAAMssJ,EAAQ81B,EAAazgL,UAAU,GAAG2qJ,MAAMrgJ,QACxCo2K,EAAmB,GAClB/1B,EAAMtsJ,QAAQ,CACjB,IAAMsiL,EAAOh2B,EAAMvrD,QACnB,GAAIshF,EAAiBriL,OAAS,EAAG,CAC7B,IAAMuiL,EAAeF,EAAiBA,EAAiBriL,OAAS,GAChE,GAA0B,aAAtBuiL,EAAa96J,MACby6J,GAAqBrqK,KAAK0qK,EAAathL,OAAQ,CAC/C,IAAMuhL,EAAWH,EAAiB90K,MAC5Bk1K,EAAYJ,EAAiB90K,MACnC,GAAiB,MAAbk1K,EACA,sBAEJJ,EAAiB18K,KAAK,IAAI+8K,GAAkBF,EAAUlC,GAAUqC,eAAeF,EAAWjC,GAAQF,GAAUqC,eAAeL,EAAM9B,KACjI,UAGR6B,EAAiB18K,KAAmB,aAAd28K,EAAK76J,KAAsB66J,EAC7ChC,GAAUqC,eAAeL,EAAM9B,IAEvC,KAAO6B,EAAiBriL,OAAS,GAAG,CAChC,MAAgCqiL,EAAiBlrK,OAAO,EAAG,GAA3D,mBAAOs6B,EAAP,KAAa+wI,EAAb,KAAuB9wI,EAAvB,KACA,GAAsB,aAAlB8wI,EAAS/6J,KACT,sBAEJ46J,EAAiBh0K,QAAQ,IAAIq0K,GAAkBF,EAAUlC,GAAUqC,eAAelxI,EAAM+uI,GAAQF,GAAUqC,eAAejxI,EAAO8uI,KA/BhG,OAkCJ,IAA5B6B,EAAiBriL,SACjB,EAAKmiL,IAAcE,EAAiB,IAnCJ,E,4CAsCxC,WACI,OAA2B,MAApB7gL,KAAK2gL,KAAuB7B,GAAUC,WAAW/+K,KAAK2gL,O,MAE/DzD,GAAOyD,GAAY/B,I,MAArB,WACI,OAA2B,MAApB5+K,KAAK2gL,IAAsB7B,GAAUhxE,SAAS9tG,KAAK2gL,KACtDp0B,O,GA5CgBuyB,IA+CtBsC,GAAYv+K,OAAO,YACnBw+K,GAAQx+K,OAAO,QACfy+K,GAASz+K,OAAO,SAYhBq+K,G,kDACF,WAAYF,EAAU/wI,EAAMC,GAAO,kCAC/B,gBACKkxI,IAAaJ,EAClB,EAAKK,IAASpxI,EACd,EAAKqxI,IAAUpxI,EAJgB,E,4CAMnC,WACI,OAAO4uI,GAAUC,WAAW/+K,KAAKqhL,MAC7BvC,GAAUC,WAAW/+K,KAAKshL,O,KAEjC1C,G,MAAD,WACI,IAAM2C,EAAW10B,GAAciyB,GAAUhxE,SAAS9tG,KAAKqhL,MACjDG,EAAY30B,GAAciyB,GAAUhxE,SAAS9tG,KAAKshL,MACxCL,EAA8BM,EAAtCj3B,OAAyBm3B,EAAaF,EAAnB7wG,KACXgxG,EAAgCF,EAAxCl3B,OAA0Bq3B,EAAcH,EAApB9wG,KAE5B,GAAiB,MAAbixG,GAAiC,MAAZF,GAAoBE,GAAaF,EACtD,OAAOl1B,GAMX,IACI9sJ,EADEixE,EAAO+wG,GAAYE,EAEzB,OAAQ3hL,KAAKohL,IAAW3hL,OACpB,IAAK,IACDA,EAAQwhL,EAAYS,EACpB,MACJ,IAAK,IACDjiL,EAAQwhL,EAAYS,EACpB,MACJ,IAAK,IACDjiL,EAAQwhL,EAAYS,EACpB,MACJ,IAAK,IACDjiL,EAAQwhL,EAAYS,EACpB,MACJ,QACI,OAAOn1B,GAEf,MAAO,CAAEtmI,KAAM,SAAUqkI,OAAQ7qJ,EAAOixE,Y,GA1ChBouG,IA6C1B8C,GAAgB/+K,OAAO,gBACvBg/K,GAAch/K,OAAO,cAYrBi/K,G,kDACF,WAAYr3B,EAAa60B,GAAY,2BACjC,gBACKuC,IAAevC,EACpB,IAAMyC,EAAkBt3B,EAAY,GAC9BK,EAA2B,MAAnBi3B,EAA0BA,EAAgBj3B,MAAQ,GAJ/B,OAKjC,EAAK82B,IACDtC,EAAWN,MAAMzpK,KAAI,SAACkqK,EAAW5zK,GAC7B,IAAMi1K,EAAOh2B,EAAMj/I,GACnB,OAAY,MAARi1K,EACO,CAAE76J,KAAM,QAASxmB,MAAO,QAEjB,UAAdqhL,EAAK76J,KACE66J,EAEJhC,GAAUqC,eAAeL,EAAMrB,MAdb,E,4CAiBrC,WAAiB,oBACaz/K,KAAK4hL,KADlB,IACb,2BAA+C,KAApCxC,EAAoC,QAC3C,IAAKN,GAAUC,WAAWK,GACtB,OAAO,GAHF,8BAMb,OAAO,I,KAEVR,G,MAAD,WACI,IAAMS,EAAYr/K,KAAK4hL,IAAersK,KAAI,SAAA6pK,GAAW,OAAIN,GAAUhxE,SAASsxE,MAC5E,OAAON,GAAUkD,gBAAgB3C,EAAWr/K,KAAK6hL,KAC5CtsK,KAAI,SAAA80I,GAAU,OAAIA,EAAWC,c,GA7Bbw0B,IAgDvBmD,GAAap/K,OAAO,aACpBq/K,GAAoBr/K,OAAO,oBAC3Bs/K,GAAsBt/K,OAAO,sBAC7Bu/K,GAAmBv/K,OAAO,mBAC1Bw/K,GAAUx/K,OAAO,UACjBy/K,GAAkBz/K,OAAO,YASzB0/K,G,WACF,WAAY1zK,GAAU,oBAClB7O,KAAKsiL,IAAmBzzK,E,2CAiB5B,WAC4C,IAApC0zK,EAAeN,IAAY34J,MAC3Bi5J,EAAeL,MAEnBK,EAAeN,IAAYl8I,IAAI/lC,Q,wBAKnC,WACIuiL,EAAeN,IAAY7uH,OAAOpzD,MACM,IAApCuiL,EAAeN,IAAY34J,MAC3Bi5J,EAAeJ,Q,KAGtBE,G,MAAD,WACIriL,KAAKsiL,S,MA/BDF,G,MAAR,WAA4B,oBACDG,EAAeN,KADd,IACxB,2BAAmD,SACtCI,OAFW,iC,MAKnBxC,GAAOoC,GAAYC,I,MAA5B,WACI73K,OAAOiI,iBAAiB,SAAUtS,KAAKoiL,IAAmB,CAAEI,SAAS,M,KAEjEL,G,MAAR,WACI93K,OAAOkI,oBAAoB,SAAUvS,KAAKoiL,S,KA0BlDG,GAAe1C,IAAQ,IAAIrmC,IAC3B,IAAMipC,GAAwB5/K,OAAO,wBAC/B6/K,GAAa7/K,OAAO,aACpB8/K,GAAgB9/K,OAAO,gBACvB+/K,GAAY//K,OAAO,YAoBnBggL,G,WACF,WAAYh0K,GAAU,+BAClB7O,KAAK8/K,IAAQ,GACb9/K,KAAK+/K,IAAQ,IAAI5zB,GAAU,CAAC,aAC5BnsJ,KAAKgE,IAAM,WACP,EAAKy+K,IAAuB,CAAEK,aAAc,mBAEhD9iL,KAAKyiL,IAAyB5zK,E,qDAMlC,SAAkBw9I,GAAK,WACb02B,EAAkB,GAClBC,EAAkBhjL,KAAK2iL,IAsB7B,IAAK,IAAMM,KArBXjjL,KAAK0iL,IAAYQ,KAAK72B,GAAK,SAAA82B,GACvB,IAAQ3+K,EAAS2+K,EAAT3+K,KAEF4+K,EADgBD,EAAahjL,UAAU,GACb2qJ,MAAM,GACtC,GAAmB,QAAftmJ,EAAK/E,OAAgC,MAAb2jL,GACL,UAAnBA,EAAUn9J,KAGd,OAAQm9J,EAAU3jL,OACd,IAAK,kBACD,GAAwC,MAApCsjL,EAAgB,iBAA0B,CAC1C,IAAMM,EAAW,kBAAmBL,EAChCA,EAAgB,iBAChB,IAAIT,GAAe,EAAKK,KAC5BS,EAAStT,iBACFiT,EAAgB,iBACvBD,EAAgB,iBAAmBM,OAKpBL,EAAiB,CAC3BA,EAAgBC,GACxBxsF,aAEbz2F,KAAK2iL,IAAiBI,I,qBAM1B,WACI,IAAK,IAAME,KAAoBjjL,KAAK2iL,IAAgB,CAC/B3iL,KAAK2iL,IAAeM,GAC5BxsF,kB,KAIrBqpF,GAAO6C,GAAe5C,GAAO2C,GAAY1+K,GAAK4+K,GA8C9C,IA63CIU,GAAMC,GA73CJ/pK,GAAQ,SAACsI,GACX,IAAM0hK,EAAiB1hK,EAAO0hK,iBAAkB,EAC1CC,EAAgB3hK,EAAOw9J,sBAAsBn6J,SAC/CrD,EAAOw9J,WACN,kBAAMx9J,EAAOw9J,YAClB,OAAO,SAACl1J,EAAO0qF,GAAiB,MACtB4uE,EAAkBt5J,EAAMhB,QACxBu6J,EAA4Bv5J,EAAMw5J,kBAClCC,EAA+Bz5J,EAAM05J,qBACrCC,EAAiBlhL,OAAO,GAAD,OAAIiyG,EAAJ,kBACvBkvE,EAAkBnhL,OAAO,GAAD,OAAIiyG,EAAJ,mBACxBmvE,EAAmBphL,OAAO,GAAD,OAAIiyG,EAAJ,oBACzBovE,EAAmBrhL,OAAO,GAAD,OAAIiyG,EAAJ,oBAC/Bj2G,OAAOob,iBAAiBmQ,GAAxB,KAAAvrB,OAAA,IAAAA,CAAA,EACKklL,EAAiB,CAAEtkL,MAAO,KAAMb,UAAU,IAD/CC,OAAA,IAAAA,CAAA,EAEKmlL,EAAkB,CAAEvkL,MAAO,KAAMb,UAAU,IAFhDC,OAAA,IAAAA,CAAA,EAGKolL,EAAmB,CAChBxkL,MAAO,WAAY,WACT4sJ,EAAM9B,GAAiBvqJ,KAAK80G,IAClC90G,KAAKgkL,GACD,IAAIlC,GAAez1B,EAAKo3B,EAAczjL,OACd,MAAxBA,KAAK+jL,IAA2BP,IAChCxjL,KAAK+jL,GACD,IAAIlB,IAAc,kBAAM,EAAKqB,SAET,MAAxBlkL,KAAK+jL,IACL/jL,KAAK+jL,GAAgBI,kBAAkB93B,MAbvDxtJ,OAAA,IAAAA,CAAA,EAiBKqlL,EAAmB,CAChBzkL,MAAO,WACH,GAA6B,MAAzBO,KAAKgkL,GAAT,CAGA,IAAMnkL,EAASG,KAAKgkL,GAAiBl2E,WAGrC9tG,KAAK8hB,EAAOsiK,eAAevkL,OAzBvChB,OAAA,IAAAA,CAAA,YA4Ba,CACLY,MAAO,SAAUupB,GAITA,EAAkBR,IAAIssF,KACtB90G,KAAKikL,KACLjkL,KAAKkkL,MAETR,EAAgBviL,KAAKnB,KAAMgpB,MArCvCnqB,OAAA,IAAAA,CAAA,sBAwCuB,CACfY,MAAO,WACHkkL,EAA0BxiL,KAAKnB,MAC/BA,KAAK8xJ,cAAch9C,EAAc90G,KAAK80G,OA3ClDj2G,OAAA,IAAAA,CAAA,yBA8C0B,CAClBY,MAAO,WACHokL,EAA6B1iL,KAAKnB,MACN,MAAxBA,KAAK+jL,KACL/jL,KAAK+jL,GAAgB1lJ,UACrBr+B,KAAK+jL,GAAkB,SAnDvC,MAwEFM,GAAkBxlL,OAAOsyB,OAAO,CAClCmzJ,cAAe,EACfC,cAAet/I,IACfu/I,kBAAmB1zK,KAAKif,GAAK,EAC7B00J,kBAAmB3zK,KAAKif,GAAKjf,KAAKif,GAAK,EACvC20J,uBAAwBz/I,IACxB0/I,sBAAuB1/I,IACvB2/I,mBAAoB,GACpBC,mBAAoB,GACpBC,kBAAmB,eACnBC,YAAa,UAGXC,GAAiB,0BACjBC,GAA2Bn0K,KAAKif,GAAK,EACrCm1J,GAAmB,IACnBC,GACO,GADPA,GAES,GAFTA,GAGI,GAHJA,GAIE,GAJFA,GAKK,GALLA,GAMI,GAEJC,GACgB,mBADhBA,GAEI,OAoBJC,G,kDACF,WAAYliJ,EAAQl7B,GAAS,kCACzB,gBACKk7B,OAASA,EACd,EAAKl7B,QAAUA,EACf,EAAKq9K,YAAc,EACnB,EAAKC,qBAAsB,EAC3B,EAAKC,cAAe,EACpB,EAAKC,cAAe,EACpB,EAAKC,gBAAiB,EAEtB,EAAKC,UAAY,IAAIn6D,GACrB,EAAKo6D,cAAgB,IAAIp6D,GACzB,EAAKq6D,YAAc,IAAIt8B,GACvB,EAAKu8B,UAAY,IAAIv8B,GACrB,EAAKw8B,aAAe,IAAIx8B,GACxB,EAAKy8B,OAASl1K,KAAKggB,IAAIuzJ,GAAgBQ,oBACvC,EAAKoB,WAAa,EAAKD,OACvB,EAAKE,UAAY,IAAI38B,GAErB,EAAK48B,eAAgB,EACrB,EAAKC,oBAAsB,CACvBC,QAAS,EACTC,QAAS,GAEb,EAAKC,UAAY,SACjB,EAAKC,cAAe,EACpB,EAAKC,cAAgB,SAACr1K,GAClB,GAAK,EAAK+0K,eAAkB,EAAKO,YAAjC,CAKA,GAAI1B,GAAe3uK,KAAKjF,EAAM6U,MAAO,CACjC,IAAQ0gK,EAAYv1K,EAAZu1K,QACR,OAAQ,EAAKJ,WACT,IAAK,OACD,GAAI,EAAKK,YAAYpoL,OAAS,GAAKmoL,EAAQnoL,OAAS,EAAG,CACnD,IAAMqoL,EAAoB,EAAKC,iBAAiB,EAAKF,YAAY,GAAI,EAAKA,YAAY,IAChFG,EAAgB,EAAKD,iBAAiBH,EAAQ,GAAIA,EAAQ,IAC1DK,EAAY9B,IAAoB2B,EAAoBE,GAAiB,GAC3E,EAAKE,gBAAgB,EAAG,EAAGD,GAE/B,MACJ,IAAK,SACD,IAAQjC,EAAgB,EAAKmC,SAArBnC,YACR,IAAK,EAAKyB,cAAgC,SAAhBzB,EAAwB,CAC9C,EAAKyB,cAAe,EACpB,MAA6BG,EAAQ,GAA7BN,EAAR,EAAQA,QAASC,EAAjB,EAAiBA,QACX7xJ,EAAK3jB,KAAKihB,IAAIs0J,EAAU,EAAKD,oBAAoBC,SACjD3xJ,EAAK5jB,KAAKihB,IAAIu0J,EAAU,EAAKF,oBAAoBE,SAEvD,GAAqB,UAAhBvB,GAA2BrwJ,EAAKD,GAChB,UAAhBswJ,GAA2BtwJ,EAAKC,EAEjC,YADA,EAAK6xJ,UAAY,UAIzB,EAAKY,wBAAwBR,EAAQ,IACrC,MACJ,IAAK,SACD,OAER,EAAKC,YAAcD,OAGnB,EAAKQ,wBAAwB/1K,GAE7BA,EAAMg2K,YACNh2K,EAAMquF,mBAGd,EAAK4nF,cAAgB,SAACj2K,GAGlB,GAFA,EAAK+0K,eAAgB,EACrB,EAAKT,gBAAiB,EAClBV,GAAe3uK,KAAKjF,EAAM6U,MAAO,CACjC,IAAQ0gK,EAAYv1K,EAAZu1K,QAER,OADA,EAAKH,cAAe,EACZG,EAAQnoL,QACZ,QACA,KAAK,EACD,EAAK+nL,UAAY,SACjB,EAAKe,wBAAwBX,EAAQ,IACrC,MACJ,KAAK,EACD,EAAKJ,UAAY,EAAKf,aAAe,SAAW,OAGxD,EAAKoB,YAAcD,OAGnB,EAAKW,wBAAwBl2K,IAGrC,EAAKm2K,YAAc,SAACC,GAChB,EAAKv/K,QAAQuR,MAAMiuK,OAAS,OAC5B,EAAKtB,eAAgB,EACjB,EAAKT,gBACL,EAAK5pJ,cAAc,CAAE7V,KAAM,qBAAsByhK,QAAS7oL,OAAOyJ,OAAO,GAAI,EAAK89K,wBAGzF,EAAKuB,QAAU,SAACv2K,GACZ,GAAK,EAAKs1K,YAAV,CAGA,IAAMM,EAAY51K,EAAMwqJ,QACA,GAAnBxqJ,EAAMw2K,UAAiB,GAAK,GAAK1C,GAAmB,GACzD,EAAK+B,gBAAgB,EAAG,EAAGD,GACvB51K,EAAMg2K,YACNh2K,EAAMquF,mBAGd,EAAKooF,UAAY,SAACz2K,GAId,IAAI02K,GAAc,EAClB,OAAQ12K,EAAM22K,SACV,KAAK5C,GACD2C,GAAc,EACd,EAAKb,gBAAgB,EAAG,EAAG/B,IAC3B,MACJ,KAAKC,GACD2C,GAAc,EACd,EAAKb,gBAAgB,EAAG,GAAG,KAC3B,MACJ,KAAK9B,GACD2C,GAAc,EACd,EAAKb,gBAAgB,GAAIhC,GAA0B,GACnD,MACJ,KAAKE,GACD2C,GAAc,EACd,EAAKb,gBAAgB,EAAGhC,GAA0B,GAClD,MACJ,KAAKE,GACD2C,GAAc,EACd,EAAKb,iBAAiBhC,GAA0B,EAAG,GACnD,MACJ,KAAKE,GACD2C,GAAc,EACd,EAAKb,gBAAgBhC,GAA0B,EAAG,GAGtD6C,GAAe12K,EAAMg2K,YACrBh2K,EAAMquF,kBAGd,EAAKynF,SAAWroL,OAAOyJ,OAAO,GAAI+7K,IAClC,EAAK2D,SAAS,EAAGl3K,KAAKif,GAAK,EAAG,GAC9B,EAAKk4J,eAAe,KACpB,EAAKC,aArJoB,E,oDAuJ7B,WACI,OAAOloL,KAAKulL,sB,+BAEhB,WACI,IAAiC,IAA7BvlL,KAAKulL,oBAA+B,CACpC,IAAQt9K,EAAYjI,KAAZiI,QACRA,EAAQqK,iBAAiB,YAAatS,KAAKymL,eAC3Cx+K,EAAQqK,iBAAiB,YAAatS,KAAKqnL,eACtCrnL,KAAKwlL,cACNv9K,EAAQqK,iBAAiB,QAAStS,KAAK2nL,SAE3C1/K,EAAQqK,iBAAiB,UAAWtS,KAAK6nL,WACzC5/K,EAAQqK,iBAAiB,aAActS,KAAKqnL,cAAe,CAAE7E,SAAS,IACtEv6K,EAAQqK,iBAAiB,YAAatS,KAAKymL,eAC3CrkL,KAAKkQ,iBAAiB,UAAWtS,KAAKunL,aACtCnlL,KAAKkQ,iBAAiB,WAAYtS,KAAKunL,aACvCvnL,KAAKiI,QAAQuR,MAAMiuK,OAAS,OAC5BznL,KAAKulL,qBAAsB,K,gCAGnC,WACI,IAAiC,IAA7BvlL,KAAKulL,oBAA8B,CACnC,IAAQt9K,EAAYjI,KAAZiI,QACRA,EAAQsK,oBAAoB,YAAavS,KAAKymL,eAC9Cx+K,EAAQsK,oBAAoB,YAAavS,KAAKqnL,eACzCrnL,KAAKwlL,cACNv9K,EAAQsK,oBAAoB,QAASvS,KAAK2nL,SAE9C1/K,EAAQsK,oBAAoB,UAAWvS,KAAK6nL,WAC5C5/K,EAAQsK,oBAAoB,aAAcvS,KAAKqnL,eAC/Cp/K,EAAQsK,oBAAoB,YAAavS,KAAKymL,eAC9CrkL,KAAKmQ,oBAAoB,UAAWvS,KAAKunL,aACzCnlL,KAAKmQ,oBAAoB,WAAYvS,KAAKunL,aAC1Ct/K,EAAQuR,MAAMiuK,OAAS,GACvBznL,KAAKulL,qBAAsB,K,mBAMnC,WACI,OAAOvlL,KAAKknL,W,uBAEhB,SAAgBt/F,GACR5nF,KAAKwlL,cAAgB59F,IACrB5nF,KAAKwlL,aAAe59F,GACJ,IAAZA,EACA5nF,KAAKiI,QAAQsK,oBAAoB,QAASvS,KAAK2nL,SAG/C3nL,KAAKiI,QAAQqK,iBAAiB,QAAStS,KAAK2nL,Y,gCAWxD,WAA6C,IAA1BtpL,EAA0B,uDAAjB,IAAImtH,GAC5B,OAAOntH,EAAO88B,KAAKn7B,KAAK2lL,a,4BAK5B,WACI,OAAO3lL,KAAKmjC,OAAOiqB,M,0BAOvB,SAAa85H,GACTroL,OAAOyJ,OAAOtI,KAAKknL,SAAUA,GAG7BlnL,KAAKgoL,WACLhoL,KAAKioL,eAAen3K,KAAK+gB,IAAI7xB,KAAKimL,e,2BAKtC,SAAckC,EAAWC,GACrBpoL,KAAKmjC,OAAOkN,KAAOv/B,KAAKkE,IAAImzK,EAAWC,EAAW,KAClDpoL,KAAKmjC,OAAOmN,IAAM83I,EAClBpoL,KAAKmjC,OAAOwqB,2B,0BAKhB,SAAaN,GACTrtD,KAAKmjC,OAAOkqB,OAASA,EACrBrtD,KAAKmjC,OAAOwqB,2B,sBAUhB,WAAyH,IAAhH06H,EAAgH,uDAApGroL,KAAK4lL,cAAchtJ,MAAO0vJ,EAA0E,uDAAhEtoL,KAAK4lL,cAAclhJ,IAAK6jJ,EAAwC,uDAA3BvoL,KAAK4lL,cAAcnhJ,OAC7G,EAA6HzkC,KAAKknL,SAA1HxC,EAAR,EAAQA,sBAAuBC,EAA/B,EAA+BA,sBAAuBH,EAAtD,EAAsDA,kBAAmBC,EAAzE,EAAyEA,kBAAmBH,EAA5F,EAA4FA,cAAeC,EAA3G,EAA2GA,cAC3G,EAA+BvkL,KAAK4lL,cAA5BhtJ,EAAR,EAAQA,MAAO8L,EAAf,EAAeA,IAAKD,EAApB,EAAoBA,OACd+jJ,EAAY5zK,GAAMyzK,EAAW3D,EAAuBC,GACrDn+H,SAASk+H,IACTl+H,SAASm+H,KACV3kL,KAAK2lL,UAAU/sJ,MACX54B,KAAKyoL,UAAUzoL,KAAK2lL,UAAU/sJ,MAAQ4vJ,GAAaA,GAE3D,IAAME,EAAU9zK,GAAM0zK,EAAS9D,EAAmBC,GAC5CkE,EAAa/zK,GAAM2zK,EAAYjE,EAAeC,GACpD,OAAIiE,IAAc5vJ,GAAS8vJ,IAAYhkJ,GAAOikJ,IAAelkJ,KAG7DzkC,KAAK4lL,cAAchtJ,MAAQ4vJ,EAC3BxoL,KAAK4lL,cAAclhJ,IAAMgkJ,EACzB1oL,KAAK4lL,cAAcnhJ,OAASkkJ,EAC5B3oL,KAAK4lL,cAAcgD,WACnB5oL,KAAKylL,cAAe,GACb,K,uBAKX,SAAUhhJ,GACNzkC,KAAK4lL,cAAcnhJ,OAASA,EAC5BzkC,KAAKgoL,a,4BAKT,SAAe56H,GACX,MAAmDptD,KAAKknL,SAAhDtC,EAAR,EAAQA,mBAAoBC,EAA5B,EAA4BA,mBAC5Bz3H,EAAMx4C,GAAMw4C,EAAKw3H,EAAoBC,GACrC7kL,KAAKimL,WAAan1K,KAAKggB,IAAIs8B,K,gCAK/B,SAAmBo8F,GACfxpJ,KAAK6lL,YAAYl8B,aAAaH,GAC9BxpJ,KAAK8lL,UAAUn8B,aAAaH,GAC5BxpJ,KAAK+lL,aAAap8B,aAAaH,GAC/BxpJ,KAAKkmL,UAAUv8B,aAAaH,K,yBAShC,SAAYq/B,EAAYC,EAAU9B,GAC9B,MAA+BhnL,KAAK4lL,cAA5BhtJ,EAAR,EAAQA,MAAO8L,EAAf,EAAeA,IAAKD,EAApB,EAAoBA,OACpB,EAAiFzkC,KAAKknL,SAA9E5C,EAAR,EAAQA,cAAeC,EAAvB,EAAuBA,cAAeK,EAAtC,EAAsCA,mBAAoBC,EAA1D,EAA0DA,mBACpDkE,EAAS/oL,KAAK2lL,UAAU/sJ,MAAQA,EAChCowJ,EAAcl4K,KAAKif,GAAK,KACxBs4J,EAAYzvJ,EAAQhkB,GAAMi0K,GAAaG,EAAcD,EAAQC,EAAcD,GAC3ET,EAAU5jJ,EAAMokJ,EAChBG,EAA2B,IAAdjC,EACf,EACAA,EAAY,GAAKzC,EAAgB9/I,IAC5B3zB,KAAKggB,IAAI+zJ,GAAsB7kL,KAAKimL,aACpCxhJ,EAAS6/I,IACLtkL,KAAKimL,WAAan1K,KAAKggB,IAAI8zJ,IAClC2D,EAAa9jJ,EACfuiJ,EACIl2K,KAAKiE,IAAIyxC,SAASyiI,GAAcA,EAAahkJ,IAAUs/I,EAAgBD,GAE/E,GADAtkL,KAAKgoL,SAASK,EAAWC,EAASC,GAChB,IAAdvB,EAAiB,CACjB,IAAMf,EAAajmL,KAAKimL,WAAae,EACrChnL,KAAKioL,eAAen3K,KAAK+gB,IAAIo0J,O,wBAOrC,WACIjmL,KAAKipB,OAAO,EA/mQE,O,oBAwnQlB,SAAO6nJ,EAAO/+J,GACV,IAAI/R,KAAKkpL,eAAT,CAGA,MAA6ClpL,KAAKknL,SAA1CzC,EAAR,EAAQA,kBAAmBF,EAA3B,EAA2BA,cACrBwE,EAAS/oL,KAAK2lL,UAAU/sJ,MAAQ54B,KAAK4lL,cAAchtJ,MACrD9nB,KAAKihB,IAAIg3J,GAAUj4K,KAAKif,KACvBy2B,SAASxmD,KAAKknL,SAASxC,yBACvBl+H,SAASxmD,KAAKknL,SAASvC,yBACxB3kL,KAAK2lL,UAAU/sJ,OAA6B,EAApB9nB,KAAKk7B,KAAK+8I,GAAcj4K,KAAKif,IAEzD/vB,KAAK2lL,UAAU/sJ,MAAQ54B,KAAK6lL,YAAY58J,OAAOjpB,KAAK2lL,UAAU/sJ,MAAO54B,KAAK4lL,cAAchtJ,MAAO7mB,EAAOjB,KAAKif,IAC3G/vB,KAAK2lL,UAAUjhJ,IAAM1kC,KAAK8lL,UAAU78J,OAAOjpB,KAAK2lL,UAAUjhJ,IAAK1kC,KAAK4lL,cAAclhJ,IAAK3yB,EAAO0yK,GAC9FzkL,KAAK2lL,UAAUlhJ,OAASzkC,KAAK+lL,aAAa98J,OAAOjpB,KAAK2lL,UAAUlhJ,OAAQzkC,KAAK4lL,cAAcnhJ,OAAQ1yB,EAAOwyK,GAC1GvkL,KAAKgmL,OAAShmL,KAAKkmL,UAAUj9J,OAAOjpB,KAAKgmL,OAAQhmL,KAAKimL,WAAYl0K,EAAO,GACzE/R,KAAKmpL,gB,0BAET,WACI,OAAOnpL,KAAK4lL,cAAchtJ,QAAU54B,KAAK2lL,UAAU/sJ,OAC/C54B,KAAK4lL,cAAclhJ,MAAQ1kC,KAAK2lL,UAAUjhJ,KAC1C1kC,KAAK4lL,cAAcnhJ,SAAWzkC,KAAK2lL,UAAUlhJ,QAC7CzkC,KAAKimL,aAAejmL,KAAKgmL,S,wBAEjC,WAEIhmL,KAAK2lL,UAAUiD,WACf5oL,KAAKmjC,OAAOgM,SAASi6I,iBAAiBppL,KAAK2lL,WAC3C3lL,KAAKmjC,OAAOkmJ,qBAAqB,IAAI34I,GAAM1wC,KAAK2lL,UAAUjhJ,IAAM5zB,KAAKif,GAAK,EAAG/vB,KAAK2lL,UAAU/sJ,MAAO,EAAG,QAClG54B,KAAKmjC,OAAOiqB,MAAQt8C,KAAK+gB,IAAI7xB,KAAKgmL,UAClChmL,KAAKmjC,OAAOiqB,IAAMt8C,KAAK+gB,IAAI7xB,KAAKgmL,QAChChmL,KAAKmjC,OAAOwqB,0BAEhB,IAAMplD,EAASvI,KAAKylL,aAAeL,GAAgCA,GACnEplL,KAAK87B,cAAc,CAAE7V,KAAM,SAAU1d,a,uBAEzC,WACI,MAAuC,sBAAnCvI,KAAKknL,SAASpC,kBACG9kL,KAAKiI,QAAQqhL,cACdC,gBAAkBvpL,KAAKiI,QAEA,iBAApCjI,KAAKknL,SAASpC,oB,6BAEzB,SAAgB+D,EAAYC,EAAU9B,GAClChnL,KAAKwpL,YAAYX,EAAa7oL,KAAKslL,YAAawD,EAAW9oL,KAAKslL,YAAa0B,GAC7EhnL,KAAKylL,cAAe,EAKpBzlL,KAAK87B,cAAc,CAAE7V,KAAM,SAAU1d,OAAQ68K,O,uBAGjD,SAAUxyJ,GACN,IAAMkvB,GAAclvB,EAAU9hB,KAAKif,KAAO,EAAIjf,KAAKif,IAEnD,OAAiB,GADD+xB,EAAahxC,KAAKmgB,MAAM6wB,IACnBhxC,KAAKif,GAAKjf,KAAKif,K,yCAExC,SAA4B05J,GACxB,OAAO,EAAI34K,KAAKif,GAAK05J,EAAczpL,KAAKiI,QAAQu4K,e,8BAEpD,SAAiBkJ,EAAUC,GACvB,IAAiBC,EAAwBF,EAAjCrD,QAAwBwD,EAASH,EAAlBpD,QAEjBwD,EADmCH,EAAjCtD,QACcuD,EAChBG,EAFmCJ,EAAlBrD,QAEDuD,EACtB,OAAO/4K,KAAKujB,KAAKy1J,EAASA,EAASC,EAASA,K,qCAEhD,SAAwBrC,GACpB,IAAQrB,EAAqBqB,EAArBrB,QAASC,EAAYoB,EAAZpB,QACXuC,EAAa7oL,KAAKgqL,4BAA4B3D,EAAUrmL,KAAKomL,oBAAoBC,SACjFyC,EAAW9oL,KAAKgqL,4BAA4B1D,EAAUtmL,KAAKomL,oBAAoBE,SACrFtmL,KAAKomL,oBAAoBC,QAAUA,EACnCrmL,KAAKomL,oBAAoBE,QAAUA,GACP,IAAxBtmL,KAAK0lL,iBACL1lL,KAAK0lL,gBAAiB,EACtB1lL,KAAK87B,cAAc,CAAE7V,KAAM,uBAAwByhK,QAAS7oL,OAAOyJ,OAAO,GAAIo/K,MAElF1nL,KAAKinL,gBAAgB4B,EAAYC,EAAU,K,qCAE/C,SAAwBpB,GACpB1nL,KAAKomL,oBAAoBC,QAAUqB,EAAQrB,QAC3CrmL,KAAKomL,oBAAoBE,QAAUoB,EAAQpB,QAC3CtmL,KAAKiI,QAAQuR,MAAMiuK,OAAS,e,GA3aPj4J,IA8bvBy6J,GAAgB,SAACx5J,GAAD,OAAOA,EAAI,GAAK,EAAIA,EAAIA,GAAU,EAAI,EAAIA,GAAKA,EAAlB,GAK7Cy5J,GAAc,SAACxzI,EAAOzvC,GAAR,IAAakjL,EAAb,uDAAoBF,GAApB,OAAsC,SAAC53H,GAAD,OAAU3b,GAASzvC,EAAMyvC,GAASyzI,EAAK93H,KA+B3F+3H,GAAW,SAAC/7B,EAAcg8B,GAI5B,IAHA,IAAMl+E,EAAS,GACT2hB,EAAU,GACZw8D,EAAYj8B,EACP9vJ,EAAI,EAAGA,EAAI8rL,EAAU7rL,SAAUD,EAAG,CACvC,IAAMgsL,EAAWF,EAAU9rL,GACnBkB,EAAkB8qL,EAAlB9qL,MAAO43J,EAAWkzB,EAAXlzB,OACT8yB,EAAOI,EAASJ,MAAQF,GACxB79E,EAAQ89E,GAAYI,EAAW7qL,EAAO0qL,GAC5Ch+E,EAAOhoG,KAAKioG,GACZ0hB,EAAQ3pH,KAAKkzJ,GACbizB,EAAY7qL,EAEhB,OAtCa,SAAC0sG,EAAQ2hB,GACtB,IAAM08D,EAAc18D,EAAQ28D,QAAO,SAAC/lC,EAAO58C,GAAR,OAAmB48C,EAAQ58C,IAAQ,GAChE4iF,EAAS58D,EAAQv4G,KAAI,SAAAuyF,GAAM,OAAIA,EAAS0iF,KAC9C,OAAO,SAACn4H,GAIJ,IAHA,IAAI3b,EAAQ,EACRi0I,EAAQ1lJ,IACRmnE,EAAQ,kBAAM,GACT7tG,EAAI,EAAGA,EAAImsL,EAAOlsL,SACvBmsL,EAAQD,EAAOnsL,GACf6tG,EAAQD,EAAO5tG,KACX8zD,GAAS3b,EAAQi0I,MAHYpsL,EAMjCm4C,GAASi0I,EAEb,OAAOv+E,GAAO/5C,EAAO3b,GAASi0I,IAuB3BC,CAASz+E,EAAQ2hB,IAiBxB+8D,GAAsD,SAAUvd,EAAYjvK,EAAQU,EAAKqC,GAGpF,IAFL,IAA2Hq2B,EAAvHnZ,EAAIne,UAAU3B,OAAQ45B,EAAI9Z,EAAI,EAAIjgB,EAAkB,OAAT+C,EAAgBA,EAAOvC,OAAOwC,yBAAyBhD,EAAQU,GAAOqC,EAEvG7C,EAAI+uK,EAAW9uK,OAAS,EAAGD,GAAK,EAAGA,KAASk5B,EAAI61I,EAAW/uK,MAAI65B,GAAK9Z,EAAI,EAAImZ,EAAEW,GAAK9Z,EAAI,EAAImZ,EAAEp5B,EAAQU,EAAKq5B,GAAKX,EAAEp5B,EAAQU,KAASq5B,GAChJ,OAAO9Z,EAAI,GAAK8Z,GAAKv5B,OAAOC,eAAeT,EAAQU,EAAKq5B,GAAIA,GAS1D0yJ,GAASV,GAAS,EAAG,CACvB,CAAE/yB,OAAQ,EAAG53J,OAAQ,GACrB,CAAE43J,OAAQ,EAAG53J,OAAQ,GACrB,CAAE43J,OAAQ,EAAG53J,MAAO,GACpB,CAAE43J,OAAQ,EAAG53J,MAAO,GACpB,CAAE43J,OAAQ,EAAG53J,MAAO,GACpB,CAAE43J,OAAQ,GAAI53J,MAAO,KAEnBsrL,GAAOX,GAAS,EAAG,CACrB,CAAE/yB,OAAQ,EAAG53J,MAAO,GACpB,CAAE43J,OAAQ,EAAG53J,MAAO,GACpB,CAAE43J,OAAQ,EAAG53J,MAAO,GACpB,CAAE43J,OAAQ,EAAG53J,MAAO,KAElBurL,GAAuB,kBACvBC,GAAwB,iBACxBC,GAAwB,OACxBC,GAAuB,IAAMv7B,GAC7Bw7B,GAA4B,CAAC,QAAS,QAAS,OAAQ,QACvDC,GAAsB,CAAC,SAAU,GAAI,UAGrCC,GACI,OADJA,GAEY,eAGZC,GAEM,SAENC,GACY,eAGZC,GACK,QAILC,GAAwB,SAACzjL,GAC3B,MAAO,CACH+2K,MAAO,CAAC30B,GAAWpiJ,EAAQ0jL,IAA4B76K,KAAKif,GAAK,IAAK,QACtEwvJ,SAAU,CAAEC,KAAM,CAAC,SAGrBoM,GAA2B,CAC7B5M,MAAO,CAACxyB,GAAiBnC,GAAW,GAAI,SACxCk1B,SAAU,CAAEC,KAAM,CAAC,QAEjBqM,GAA2B,SAAC5jL,GAC9B,IAAMmnD,EAAQnnD,EAAQwmK,IACtB,MAAO,CACHuQ,MAAO,CAACxyB,GAAiBnC,GAAW,GAAI,SACxCk1B,SAAU,CAAEC,KAAM,CAACn1B,GAAWj7F,EAAMohG,kBAAmB,WAGzDs7B,GAAyB,WAC3B,IAAMC,EAAexhC,GAAiBygC,IAAsB,GACvDlgC,MACClyH,EAAQi0H,GAAck/B,EAAa,IACnCrnJ,EAAMmoH,GAAck/B,EAAa,IACvC,OAAO,SAAC9jL,GACJ,IAAMw8B,EAASx8B,EAAQwmK,IAAQne,oBAC/B,MAAO,CACH0uB,MAAO,CAACpmJ,EAAO8L,EAAK2lH,GAAW5lH,EAAQ,MACvC86I,SAAU,CAAEC,KAAM,CAAC,KAAM,KAAMn1B,GAAW,IAAK,SAT5B,GAazB2hC,GAA2B,SAAC/jL,GAC9B,IAAMw8B,EAAS0mJ,GAAuBljL,EAAQwmK,IAAQne,oBACtD,MAAO,CACH0uB,MAAO,CACH30B,IAAYplH,IAAU,OACtBolH,GAAWv5I,KAAKif,GAAK,EAAG,OACxBs6H,GAAW5lH,EAAQ,MAEvB86I,SAAU,CAAEC,KAAM,CAAC,KAAM,KAAM,SAGjCyM,GAA2B,SAAChkL,GAC9B,IAAMikL,EAAkBJ,GAAsB7jL,GAExCkkL,EADY,IAAIrK,GAAe,GAAIoK,GACTp+E,WAAW,GAC3C,MAAO,CACHkxE,MAAO,CACH30B,GAAWplH,IAAU,OACrBolH,GAAWv5I,KAAKif,GAAKjf,KAAKif,GAAK,EAAG,OAClCs6H,GAAW8hC,EAAe,MAE9B5M,SAAU,CAAEC,KAAM,CAAC,KAAM,KAAM,SAGjC4M,GAAyB,SAACnkL,GAC5B,IAAMgtB,EAAShtB,EAAQwmK,IAAQjoI,YAAYS,UAAU,IAAI5E,IACzD,MAAO,CACH28I,MAAO,CACH30B,GAAWp1H,EAAOnZ,EAAG,KACrBuuI,GAAWp1H,EAAOlZ,EAAG,KACrBsuI,GAAWp1H,EAAOqH,EAAG,MAEzBijJ,SAAU,CAAEC,KAAM,CAAC,KAAM,KAAM,SAGjC6M,GAAUv7K,KAAKif,GAAK,EACpBu8J,GAAWx7K,KAAKif,GAAK,EACrBw8J,GAAaF,GAAU,EACvBG,GAAM,EAAM17K,KAAKif,GACjB08J,GAAY5pL,OAAO,YACnB6pL,GAAiB7pL,OAAO,iBACxB8pL,GAA2B9pL,OAAO,2BAClC+pL,GAA0B/pL,OAAO,0BACjCgqL,GAAchqL,OAAO,cACrBiqL,GAAyBjqL,OAAO,yBAChCkqL,GAAUlqL,OAAO,UACjBmqL,GAAWnqL,OAAO,WAClBoqL,GAAYpqL,OAAO,YACnBqqL,GAAmBrqL,OAAO,mBAC1BsqL,GAAuBtqL,OAAO,uBAC9BuqL,GAAqBvqL,OAAO,qBAC5BwqL,GAA4BxqL,OAAO,4BACnCyqL,GAAoBzqL,OAAO,oBAC3B0qL,GAAe1qL,OAAO,eACtB8oL,GAA2B9oL,OAAO,2BAClC2qL,GAAiB3qL,OAAO,iBACxB4qL,GAAc5qL,OAAO,cACrB6qL,GAAe7qL,OAAO,eACtB8qL,GAAoB9qL,OAAO,oBAC3B+qL,GAAmB/qL,OAAO,mBAC1BgrL,GAAmBhrL,OAAO,mBAC1BirL,GAAoBjrL,OAAO,oBAC3BkrL,GAAsBlrL,OAAO,sBAC7BmrL,GAAsBnrL,OAAO,sBAC7BorL,GAAsBprL,OAAO,sBAC7BqrL,GAAsBrrL,OAAO,sBAgd/BsrL,GAAsD,SAAU7gB,EAAYjvK,EAAQU,EAAKqC,GAGpF,IAFL,IAA2Hq2B,EAAvHnZ,EAAIne,UAAU3B,OAAQ45B,EAAI9Z,EAAI,EAAIjgB,EAAkB,OAAT+C,EAAgBA,EAAOvC,OAAOwC,yBAAyBhD,EAAQU,GAAOqC,EAEvG7C,EAAI+uK,EAAW9uK,OAAS,EAAGD,GAAK,EAAGA,KAASk5B,EAAI61I,EAAW/uK,MAAI65B,GAAK9Z,EAAI,EAAImZ,EAAEW,GAAK9Z,EAAI,EAAImZ,EAAEp5B,EAAQU,EAAKq5B,GAAKX,EAAEp5B,EAAQU,KAASq5B,GAChJ,OAAO9Z,EAAI,GAAK8Z,GAAKv5B,OAAOC,eAAeT,EAAQU,EAAKq5B,GAAIA,GAM1Dg2J,GAAyBvrL,OAAO,yBAChCwrL,GAAuBxrL,OAAO,uBAC9ByrL,GAAqBzrL,OAAO,qBAC5B0rL,GAA2B1rL,OAAO,2BAClC2rL,GAAa3rL,OAAO,aA4IpB4rL,GAA6B5rL,OAAO,6BACpC6rL,GAAgB7rL,OAAO,gBAYvB8rL,G,kDACF,aAAc,2BACV,gBAOKrL,IAAQ,KACb,EAAKsL,2BAA6B,IAAIznK,IACtC,EAAK0nK,gBAAkB,GAUvB,EAAKC,cAAgBxkL,SAASgF,cAAc,KAC5C,EAAKy/K,wBAAyB,EAC9B,EAAKxL,IAAQl7B,IAAS,kBAAM,EAAK2mC,iBArCP,KAsC1B,IAAQF,EAAR,eAAQA,cACAt1K,EAAUs1K,EAAVt1K,MAxBE,OAyBVs1K,EAAc7mK,aAAa,OAAQ,UACnC6mK,EAAc3hC,UAAUpnH,IAAI,sBAC5BvsB,EAAM22B,IAAM32B,EAAMy2B,KAAO,IACzBz2B,EAAM83I,cAAgB,OA5BZ,E,oDAkCd,SAAiB29B,GACb,IAAIjvL,KAAK4uL,2BAA2BpmK,IAAIymK,GAAxC,CAGA,IAAIC,EAAiB,aACfC,GAA8C,IAAvBF,EAAYz2E,UAAsBy2E,EAAY/1J,IACrEk2J,EAAuB,IAAIptL,SAAQ,SAACR,GACtC,GAAK2tL,EAAL,CAIA,IAAME,EAAiB,SAAjBA,IACF7tL,IACAytL,EAAY18K,oBAAoB,OAAQ88K,GACxCJ,EAAY18K,oBAAoB,QAAS88K,IAE7CJ,EAAY38K,iBAAiB,OAAQ+8K,GACrCJ,EAAY38K,iBAAiB,QAAS+8K,GACtCH,EAAiBG,OAVb7tL,OAYRxB,KAAK4uL,2BAA2Bh0K,IAAIq0K,EAAa,CAAEC,mBACnDlvL,KAAK6uL,gBAAgB1qL,KAAKirL,GACY,MAAlCpvL,KAAKsvL,4BACLtvL,KAAKsvL,0BAA4BL,M,gCAOzC,SAAmBA,GACf,GAAKjvL,KAAK4uL,2BAA2BpmK,IAAIymK,GAAzC,CAGA,IAAMM,EAAWvvL,KAAK4uL,2BAChBY,EAAiBD,EAASxuL,IAAIkuL,GACpCM,EAASn8H,OAAO67H,GAChBO,EAAeN,iBACXlvL,KAAKsvL,4BAA8BL,IACnCjvL,KAAKsvL,0BAA4BC,EAASjmK,KAAO,EAlqStC,SAAC/T,GACpB,GAAgB,MAAZA,EAAI1O,KACJ,OAAO0O,EAAI1O,OAAOnD,OAAOjE,OAAS,KAEtC,IAAIgwL,EAAW,KACf,IACIl6K,EAAIxM,SAAQ,SAAC+8I,EAAQ/mJ,EAAK2wL,GAGtB,MAFAD,EAAW1wL,EAEL,IAAIyM,SAGlB,MAAOkyK,IAEP,OAAO+R,EAqpSKE,CAAeJ,GACf,S,qCAGZ,WACI,OAAOvvL,KAAKyuL,K,IAEhB,SAA8BhvL,GAE1B,GADwBO,KAAKyuL,MACLhvL,EAAxB,CAGA,IAAQqvL,EAAkB9uL,KAAlB8uL,cACK,MAATrvL,GAAqC,MAApBA,EAAM8xJ,WACvB9xJ,EAAM8xJ,WAAWtK,YAAY6nC,GAEI,MAA5BA,EAAc5oC,YACnB4oC,EAAc5oC,WAAWC,YAAY2oC,GAEzC9uL,KAAKyuL,IAA8BhvL,EACnCO,KAAK0uL,S,iEAET,4BAAA/jL,EAAA,0DACQ3K,KAAK+uL,wBAA0D,IAAhC/uL,KAAK6uL,gBAAgBrwL,OAD5D,iDAIIwB,KAAK8uL,cAAcc,YArHS,4DAsH5B5vL,KAAK+uL,wBAAyB,EAC9B/uL,KAAK87B,cAAc,CAAE7V,KAAM,6BAN/B,WAOWjmB,KAAK6uL,gBAAgBrwL,OAPhC,wBAQgBqwL,EAAoB7uL,KAApB6uL,gBACR7uL,KAAK6uL,gBAAkB,GAT/B,UAUc7sL,QAAQ64H,IAAIg0D,GAV1B,+BAYI7uL,KAAK8uL,cAAcc,YA5HW,wCA6H9B5vL,KAAK+uL,wBAAyB,EAC9B/uL,KAAK87B,cAAc,CAAE7V,KAAM,+BAd/B,iD,2DAjGiCuJ,IAkHrC8zJ,GAAOmL,GAA4BlL,GAAOmL,GAgB1C,IAAImB,GAAsD,SAAUviB,EAAYjvK,EAAQU,EAAKqC,GAGpF,IAFL,IAA2Hq2B,EAAvHnZ,EAAIne,UAAU3B,OAAQ45B,EAAI9Z,EAAI,EAAIjgB,EAAkB,OAAT+C,EAAgBA,EAAOvC,OAAOwC,yBAAyBhD,EAAQU,GAAOqC,EAEvG7C,EAAI+uK,EAAW9uK,OAAS,EAAGD,GAAK,EAAGA,KAASk5B,EAAI61I,EAAW/uK,MAAI65B,GAAK9Z,EAAI,EAAImZ,EAAEW,GAAK9Z,EAAI,EAAImZ,EAAEp5B,EAAQU,EAAKq5B,GAAKX,EAAEp5B,EAAQU,KAASq5B,GAChJ,OAAO9Z,EAAI,GAAK8Z,GAAKv5B,OAAOC,eAAeT,EAAQU,EAAKq5B,GAAIA,GAI1D03J,GAAiC,0DACjCC,GAAmC,wEAGnCC,GACI,OADJA,GAGM,SAENC,GACI,OADJA,GAGK,QAELC,GACW,cAEXC,GAAyB,IAAIxB,GAC7ByB,GAA6BvtL,OAAO,6BACpCwtL,GAA8BxtL,OAAO,8BACrCytL,GAA0BztL,OAAO,0BACjC0tL,GAAwB1tL,OAAO,wBAC/B2tL,GAAyB3tL,OAAO,yBAChC4tL,GAAc5tL,OAAO,cACrB6tL,GAAmB7tL,OAAO,mBAC1B8tL,GAAqB9tL,OAAO,qBAC5B+tL,GAAwB/tL,OAAO,wBAC/BguL,GAAgBhuL,OAAO,gBACvBiuL,GAAyBjuL,OAAO,yBAChCkuL,GAAWluL,OAAO,WAClBmuL,GAAanuL,OAAO,aACpBouL,GAAcpuL,OAAO,cA4TrBquL,G,WAEL,aAAc,oBAEblxL,KAAK6+H,gBAAkB,GAEvB7+H,KAAK8+H,UAAU,SAAWqyD,GAEzB,OAAO,IAAIC,GAAoBD,MAIhCnxL,KAAK8+H,UAAU,SAAWqyD,GAEzB,OAAO,IAAIE,GAA6BF,MAIzCnxL,KAAK8+H,UAAU,SAAWqyD,GAEzB,OAAO,IAAIG,GAAoCH,M,4CAMjD,SAAUtiL,GAQT,OANoD,IAA/C7O,KAAK6+H,gBAAgBrxH,QAASqB,IAElC7O,KAAK6+H,gBAAgB16H,KAAM0K,GAIrB7O,O,wBAIR,SAAY6O,GAQX,OANoD,IAA/C7O,KAAK6+H,gBAAgBrxH,QAASqB,IAElC7O,KAAK6+H,gBAAgBlpH,OAAQ3V,KAAK6+H,gBAAgBrxH,QAASqB,GAAY,GAIjE7O,O,mBAUR,SAAOizI,EAAOs+C,EAAQlrL,GAKrB,IAHA,IAAM8qL,EAAS,IAAIK,GACbjyD,EAAU,GAENhhI,EAAI,EAAGonC,EAAK3lC,KAAK6+H,gBAAgBrgI,OAAQD,EAAIonC,EAAIpnC,IAE1DghI,EAAQp7H,KAAMnE,KAAK6+H,gBAAiBtgI,GAAK4yL,IAI1CA,EAAOpwD,WAAYxB,GACnB4xD,EAAOM,MAAOx+C,EAAOs+C,EAAQlrL,O,KAUzBqrL,GACG,EADHA,GAEE,EAFFA,GAGM,EAHNA,GAIO,EAJPA,GAKM,EALNA,GASU,KATVA,GAUW,KAVXA,GAWE,KAXFA,GAYS,KAZTA,GAaS,MAbTA,GAciB,MAdjBA,GAgBI,KAhBJA,GAiBG,KAjBHA,GAkBmB,KAlBnBA,GAmBkB,KAnBlBA,GAoBkB,KApBlBA,GAqBiB,KArBjBA,GAuBU,MAvBVA,GAwBY,MAxBZA,GAyBG,MAGHC,GAAiB,GAEvBA,GAAgBzkK,MAAkBwkK,GAClCC,GAAgBxkK,MAA+BukK,GAC/CC,GAAgBvkK,MAA8BskK,GAC9CC,GAAgBtkK,MAAiBqkK,GACjCC,GAAgBrkK,MAA8BokK,GAC9CC,GAAgBpkK,MAA6BmkK,GAE7CC,GAAgB3kK,MAAwB0kK,GACxCC,GAAgB5kK,KAAmB2kK,GACnCC,GAAgB1kK,MAA2BykK,GAE3C,IAAME,GAAkB,CACvBxiJ,MAAO,QACPD,SAAU,cACVrQ,WAAY,WACZuqB,sBAAuB,WAwBxB,SAASwoI,GAAYC,EAAQpqI,GAE5B,OAASoqI,EAAOtzL,SAAWkpD,EAAOlpD,QAAYszL,EAAO5kL,OAAO,SAAWjF,EAAS4D,GAE/E,OAAO5D,IAAYy/C,EAAQ77C,MAsG7B,SAASkmL,GAAqBC,GAE7B,OAAqC,EAA9BlhL,KAAK+f,KAAMmhK,EAAa,GAWhC,SAASC,GAAsB3xC,GAA+B,IAAlB4xC,EAAkB,uDAAJ,EAEnDC,EAAeJ,GAAqBzxC,EAAYzmB,YAEtD,GAAKs4D,IAAiB7xC,EAAYzmB,WAAa,CAE9C,IAAMlqG,EAAQ,IAAIskC,WAAYk+H,GAG9B,GAFAxiK,EAAM/U,IAAK,IAAIq5C,WAAYqsF,IAEN,IAAhB4xC,EAEJ,IAAM,IAAI3zL,EAAI+hJ,EAAYzmB,WAAYt7H,EAAI4zL,EAAc5zL,IAEvDoxB,EAAOpxB,GAAM2zL,EAMf,OAAOviK,EAAMnmB,OAId,OAAO82I,EAIR,IAAI8xC,GAAe,KAKbZ,G,WAEL,aAAc,oBAEbxxL,KAAKu/H,QAAU,GAEfv/H,KAAKqG,QAAU,GACfrG,KAAK8mH,QAAU,GACf9mH,KAAKgzD,QAAU,GAEfhzD,KAAKskI,WAAa,EAClBtkI,KAAKgzD,QAAU,GACfhzD,KAAKqyL,QAAU,IAAIlrK,IACnBnnB,KAAK+rI,MAAQ,GACb/rI,KAAKigI,eAAiB,GAEtBjgI,KAAKsyL,KAAO,IAAInrK,IAChBnnB,KAAKuyL,IAAM,EAEXvyL,KAAKyoG,KAAO,CACXo3B,MAAO,CACN5kG,QAAS,MACTQ,UAAW,uBAIbz7B,KAAKkG,MAAQ,CACZ+lI,OAAQ,IAAI9kH,IACZsC,WAAY,IAAItC,IAChBqrK,qBAAsB,IAAIrrK,IAC1ButB,UAAW,IAAIvtB,IACfmU,SAAU,IAAInU,IACdwU,OAAQ,IAAIxU,K,8CAKd,SAAYo4G,GAEXv/H,KAAKu/H,QAAUA,I,mBAUhB,SAAO0T,EAAOs+C,EAAQlrL,GAErBrG,KAAKqG,QAAUxH,OAAOyJ,OAAQ,GAAI,CAEjCmqL,QAAQ,EACRC,KAAK,EACLC,aAAa,EACbC,mBAAmB,EACnBC,aAAa,EACbnrH,eAAgBziC,IAChB+N,WAAY,GACZ8/I,yBAAyB,GACvBzsL,GAEErG,KAAKqG,QAAQ2sC,WAAWx0C,OAAS,IAGrCwB,KAAKqG,QAAQqsL,KAAM,GAIpB1yL,KAAKs8J,aAAcrpB,GAEnB,IAAMk+C,EAASnxL,KAEfgC,QAAQ64H,IAAK76H,KAAK8mH,SAAU7kH,MAAM,WAEjC,IAAM+wD,EAAUm+H,EAAOn+H,QACjBy1C,EAAO0oF,EAAO1oF,KACdpiG,EAAU8qL,EAAO9qL,QACjB45H,EAAiBkxD,EAAOlxD,eAGxBrkB,EAAO,IAAI/D,KAAM7kD,EAAS,CAAE/sC,KAAM,6BAGlC8sK,EAAqBl0L,OAAOgI,KAAMo5H,GAOxC,GALK8yD,EAAmBv0L,OAAS,IAAIiqG,EAAKw3B,eAAiB8yD,GAGtDtqF,EAAKz1C,SAAWy1C,EAAKz1C,QAAQx0D,OAAS,IAAIiqG,EAAKz1C,QAAS,GAAI6mE,WAAaje,EAAKtyF,OAE3D,IAAnBjjB,EAAQosL,OAAkB,CAI9B,IAAMO,EAAS,IAAI3oL,OAAO4oL,WAC1BD,EAAOE,kBAAmBt3E,GAC1Bo3E,EAAOG,UAAY,WAGlB,IAAMC,EAAcnB,GAAsBe,EAAOnzL,QAC3CwzL,EAAoB,IAAIjoF,SAAU,IAAI9hG,YA3QlB,IA4Q1B+pL,EAAkBC,UAAW,EAAGF,EAAYv5D,YAAY,GACxDw5D,EAAkBC,UAAW,EA3QP,SA2Q8B,GAGpD,IAAMC,EAAYtB,GAnPvB,SAA8BuB,GAE7B,QAA4BjxL,IAAvB8H,OAAOovK,YAEX,OAAO,IAAIA,aAAc76J,OAAQ40K,GAAOhqL,OAMzC,IAFA,IAAMmmB,EAAQ,IAAIskC,WAAY,IAAI3qD,YAAakqL,EAAKh1L,SAE1CD,EAAI,EAAGonC,EAAK6tJ,EAAKh1L,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEjD,IAAMkB,EAAQ+zL,EAAKroL,WAAY5M,GAG/BoxB,EAAOpxB,GAAMkB,EAAQ,IAAO,GAAOA,EAIpC,OAAOkwB,EAAMnmB,OAgO+BiqL,CAAqBx0K,KAAKC,UAAWupF,IAAU,IACjFirF,EAAkB,IAAItoF,SAAU,IAAI9hG,YAjRhB,IAkR1BoqL,EAAgBJ,UAAW,EAAGC,EAAU15D,YAAY,GACpD65D,EAAgBJ,UAAW,EAlRJ,YAkR4B,GAGnD,IAAMr7E,EAAS,IAAI3uG,YA1RC,IA2Rdo7H,EAAa,IAAIt5B,SAAU6M,GACjCysB,EAAW4uD,UAAW,EA3RF,YA2RuB,GAC3C5uD,EAAW4uD,UAAW,EA3RP,GA2RuB,GACtC,IAAMK,EA9Rc,GA+RjBD,EAAgB75D,WAAa05D,EAAU15D,WACvCw5D,EAAkBx5D,WAAau5D,EAAYv5D,WAC9C6K,EAAW4uD,UAAW,EAAGK,GAAiB,GAE1C,IAAMC,EAAU,IAAI/7E,KAAM,CACzBI,EACAy7E,EACAH,EACAF,EACAD,GACE,CAAEntK,KAAM,6BAEL4tK,EAAY,IAAIxpL,OAAO4oL,WAC7BY,EAAUX,kBAAmBU,GAC7BC,EAAUV,UAAY,WAErB5B,EAAQsC,EAAUh0L,eAQpB,GAAK4oG,EAAKz1C,SAAWy1C,EAAKz1C,QAAQx0D,OAAS,EAAI,CAE9C,IAAMw0L,EAAS,IAAI3oL,OAAO4oL,WAC1BD,EAAOc,cAAel4E,GACtBo3E,EAAOG,UAAY,WAElB,IAAMY,EAAaf,EAAOnzL,OAC1B4oG,EAAKz1C,QAAS,GAAI4wE,IAAMmwD,EACxBxC,EAAQ9oF,SAMT8oF,EAAQ9oF,Q,+BAgBZ,SAAmBxnG,EAAQkpI,GAE1B,GAA+C,IAA1CtrI,OAAOgI,KAAM5F,EAAOgyC,UAAWz0C,OAApC,CAEA,IAAM6H,EAAUrG,KAAKqG,QACf45H,EAAiBjgI,KAAKigI,eAE5B,IAEC,IAAMx3B,EAAOxpF,KAAKrC,MAAOqC,KAAKC,UAAWje,EAAOgyC,WAEhD,GAAK5sC,EAAQysL,yBAA2BrqF,EAAK2hC,eAAiB,CAI7D,IAAM,IAAMlK,UAFkB39H,IAAzB4nI,EAAU39E,aAA2B29E,EAAU39E,WAAa,IAEpCi8C,EAAK2hC,eAEjCD,EAAU39E,WAAY0zE,GAAkBz3B,EAAK2hC,eAAgBlK,GAC7DD,EAAgBC,IAAkB,SAI5Bz3B,EAAK2hC,eAIRvrI,OAAOgI,KAAM4hG,GAAOjqG,OAAS,IAAI2rI,EAAUI,OAAS9hC,GAExD,MAAQ3mG,GAETwjB,QAAQM,KAAM,oCAAuC3kB,EAAOuD,KAA9C,2DAC+C1C,EAAMyJ,a,oBAYrE,SAAQtK,GAIP,OAFOjB,KAAKsyL,KAAK9pK,IAAKvnB,IAAWjB,KAAKsyL,KAAK13K,IAAK3Z,EAAQjB,KAAKuyL,OAEtDvyL,KAAKsyL,KAAKvxL,IAAKE,K,yCAUvB,SAA6BqjC,GAI5B,GAFctkC,KAAKkG,MAERssL,qBAAqBhqK,IAAK8b,GAAW,OAAO,EAIvD,IAFA,IAAMtkB,EAAI,IAAIqiB,GAEJ9jC,EAAI,EAAGonC,EAAKrB,EAAOkB,MAAOjnC,EAAIonC,EAAIpnC,IAG3C,GAAKuS,KAAKihB,IAAK/R,EAAE6iC,oBAAqBve,EAAQ/lC,GAAIC,SAAW,GAAQ,KAAS,OAAO,EAItF,OAAO,I,6CAWR,SAAiC8lC,GAEhC,IAAMp+B,EAAQlG,KAAKkG,MAEnB,GAAKA,EAAMssL,qBAAqBhqK,IAAK8b,GAAW,OAAOp+B,EAAMssL,qBAAqBzxL,IAAKujC,GAKvF,IAHA,IAAM9d,EAAY8d,EAAOhG,QACnBte,EAAI,IAAIqiB,GAEJ9jC,EAAI,EAAGonC,EAAKnf,EAAUgf,MAAOjnC,EAAIonC,EAAIpnC,IAE9CyhB,EAAE6iC,oBAAqBr8B,EAAWjoB,GAErB,IAARyhB,EAAElE,GAAmB,IAARkE,EAAEjE,GAAmB,IAARiE,EAAEsc,EAGhCtc,EAAEsuH,KAAM,GAIRtuH,EAAE2U,YAIHnO,EAAUu8B,OAAQxkD,EAAGyhB,EAAElE,EAAGkE,EAAEjE,EAAGiE,EAAEsc,GAMlC,OAFAp2B,EAAMssL,qBAAqB53K,IAAK0pB,EAAQ9d,GAEjCA,I,mCAWR,SAAuB4oH,EAAQnxG,GAE9B,IAAI+1J,GAAe,EACbC,EAAe,GAEK,IAArBh2J,EAAQxgB,OAAO3B,GAAgC,IAArBmiB,EAAQxgB,OAAO1B,IAE7Ck4K,EAAax2K,OAASwgB,EAAQxgB,OAAOu3B,UACrCg/I,GAAe,GAIU,IAArB/1J,EAAQxF,WAEZw7J,EAAax7J,SAAWwF,EAAQxF,SAChCu7J,GAAe,GAIU,IAArB/1J,EAAQlgB,OAAOjC,GAAgC,IAArBmiB,EAAQlgB,OAAOhC,IAE7Ck4K,EAAa7kJ,MAAQnR,EAAQlgB,OAAOi3B,UACpCg/I,GAAe,GAIXA,IAEJ5kD,EAAO5iF,WAAa4iF,EAAO5iF,YAAc,GACzC4iF,EAAO5iF,WAAP,sBAA+CynI,EAC/Cj0L,KAAKigI,eAAL,uBAAiD,K,2BAWnD,SAAez2H,GAEd,IAAMi/F,EAAOzoG,KAAKyoG,KACZz1C,EAAUhzD,KAAKgzD,QAOrB,OALOy1C,EAAKz1C,UAAUy1C,EAAKz1C,QAAU,CAAE,CAAE6mE,WAAY,KAGrD7mE,EAAQ7uD,KAAMqF,GAEP,I,+BAaR,SAAmBgd,EAAWs/G,EAAepvF,EAAOlR,EAAOnnC,GAE1D,IAMI61L,EANEzrF,EAAOzoG,KAAKyoG,KAEXA,EAAKw7B,cAAcx7B,EAAKw7B,YAAc,IAQ5CiwD,EAFIpuD,IAAkB4rD,GAEN,EAEL5rD,IAAkB4rD,GAEb,EAIA,EAQjB,IAJA,IAAM73D,EAAak4D,GAAqBvsJ,EAAQhf,EAAU67B,SAAW6xI,GAC/DC,EAAW,IAAI/oF,SAAU,IAAI9hG,YAAauwH,IAC5Cp8G,EAAS,EAEHlf,EAAIm4C,EAAOn4C,EAAIm4C,EAAQlR,EAAOjnC,IAEvC,IAAM,IAAIoM,EAAI,EAAGA,EAAI6b,EAAU67B,SAAU13C,IAAO,CAE/C,IAAIlL,OAAK,EAEJ+mB,EAAU67B,SAAW,EAIzB5iD,EAAQ+mB,EAAUmJ,MAAOpxB,EAAIioB,EAAU67B,SAAW13C,GAIvC,IAANA,EAAUlL,EAAQ+mB,EAAUuO,KAAMx2B,GACvB,IAANoM,EAAUlL,EAAQ+mB,EAAUwO,KAAMz2B,GAC5B,IAANoM,EAAUlL,EAAQ+mB,EAAUiX,KAAMl/B,GAC5B,IAANoM,IAAUlL,EAAQ+mB,EAAUkX,KAAMn/B,IAIxCunI,IAAkB4rD,GAEtByC,EAASC,WAAY32K,EAAQhe,GAAO,GAEzBqmI,IAAkB4rD,GAE7ByC,EAASb,UAAW71K,EAAQhe,GAAO,GAExBqmI,IAAkB4rD,GAE7ByC,EAASE,UAAW52K,EAAQhe,GAAO,GAExBqmI,IAAkB4rD,IAE7ByC,EAASG,SAAU72K,EAAQhe,GAI5Bge,GAAUy2K,EAMZ,IAAM7mD,EAAgB,CAErB7jI,OAAQxJ,KAAKu0L,cAAeJ,EAAS3qL,QACrC86H,WAAYtkI,KAAKskI,WACjBzK,WAAYA,GAyBb,YArBgBt3H,IAAXlE,IAAuBgvI,EAAchvI,OAASA,GAE9CA,IAAWqzL,KAGfrkD,EAAc9I,WAAa/9G,EAAU67B,SAAW6xI,GAIjDl0L,KAAKskI,YAAczK,EAEnBpxB,EAAKw7B,YAAY9/H,KAAMkpI,GAGR,CAEdr5F,GAAIy0D,EAAKw7B,YAAYzlI,OAAS,EAC9Bq7H,WAAY,K,oCAad,SAAwBje,GAEvB,IAAMu1E,EAASnxL,KACTyoG,EAAO0oF,EAAO1oF,KAIpB,OAFOA,EAAKw7B,cAAcx7B,EAAKw7B,YAAc,IAEtC,IAAIjiI,SAAS,SAAWR,GAE9B,IAAMwxL,EAAS,IAAI3oL,OAAO4oL,WAC1BD,EAAOE,kBAAmBt3E,GAC1Bo3E,EAAOG,UAAY,WAElB,IAAM3pL,EAASyoL,GAAsBe,EAAOnzL,QAEtCwtI,EAAgB,CACrB7jI,OAAQ2nL,EAAOoD,cAAe/qL,GAC9B86H,WAAY6sD,EAAO7sD,WACnBzK,WAAYrwH,EAAOqwH,YAGpBs3D,EAAO7sD,YAAc96H,EAAOqwH,WAC5Br4H,EAASinG,EAAKw7B,YAAY9/H,KAAMkpI,GAAkB,S,6BAgBrD,SAAiB7mH,EAAW+f,EAAUmQ,EAAOlR,GAE5C,IAaIsgG,EAbEz/H,EAAUrG,KAAKqG,QACfoiG,EAAOzoG,KAAKyoG,KAelB,GAAKjiF,EAAUmJ,MAAMnwB,cAAgB+jD,aAEpCuiF,EAAgB4rD,QAEV,GAAKlrK,EAAUmJ,MAAMnwB,cAAgB6jD,YAE3CyiF,EAAgB4rD,QAEV,GAAKlrK,EAAUmJ,MAAMnwB,cAAgB2jD,YAE3C2iF,EAAgB4rD,OAEV,IAAKlrK,EAAUmJ,MAAMnwB,cAAgBy0D,WAM3C,MAAM,IAAIzoD,MAAO,mEAJjBs6H,EAAgB4rD,GAYjB,QAJenvL,IAAVm0C,IAAsBA,EAAQ,QACpBn0C,IAAVijC,IAAsBA,EAAQhf,EAAUgf,OAGxCn/B,EAAQusL,wBAAkCrwL,IAAbgkC,GAA6C,OAAnBA,EAAS16B,MAAiB,CAErF,IAAM5E,EAAMyvC,EAAQlR,EACdgvJ,EAAOjuJ,EAAS4d,UAAU3e,QAAUP,IACvCze,EAAUgf,MACVe,EAAS4d,UAAUzN,MAAQnQ,EAAS4d,UAAU3e,MAEjDkR,EAAQ5lC,KAAKkE,IAAK0hC,EAAOnQ,EAAS4d,UAAUzN,QAC5ClR,EAAQ10B,KAAKiE,IAAK9N,EAAKutL,GAAS99I,GAEnB,IAAIlR,EAAQ,GAK1B,GAAe,IAAVA,EAAc,OAAO,KAE1B,IACIivJ,EADEC,EAxpBR,SAAoBluK,EAAWkwB,EAAOlR,GASrC,IAPA,IAAMjK,EAAS,CAEdxmB,IAAK,IAAIhS,MAAOyjB,EAAU67B,UAAW6uE,KAAM9qG,OAAOuuK,mBAClD3/K,IAAK,IAAIjS,MAAOyjB,EAAU67B,UAAW6uE,KAAM9qG,OAAOwuK,oBAIzCr2L,EAAIm4C,EAAOn4C,EAAIm4C,EAAQlR,EAAOjnC,IAEvC,IAAM,IAAIoM,EAAI,EAAGA,EAAI6b,EAAU67B,SAAU13C,IAAO,CAE/C,IAAIlL,OAAK,EAEJ+mB,EAAU67B,SAAW,EAIzB5iD,EAAQ+mB,EAAUmJ,MAAOpxB,EAAIioB,EAAU67B,SAAW13C,GAIvC,IAANA,EAAUlL,EAAQ+mB,EAAUuO,KAAMx2B,GACvB,IAANoM,EAAUlL,EAAQ+mB,EAAUwO,KAAMz2B,GAC5B,IAANoM,EAAUlL,EAAQ+mB,EAAUiX,KAAMl/B,GAC5B,IAANoM,IAAUlL,EAAQ+mB,EAAUkX,KAAMn/B,IAI7Cg9B,EAAOxmB,IAAKpK,GAAMmG,KAAKiE,IAAKwmB,EAAOxmB,IAAKpK,GAAKlL,GAC7C87B,EAAOvmB,IAAKrK,GAAMmG,KAAKkE,IAAKumB,EAAOvmB,IAAKrK,GAAKlL,GAM/C,OAAO87B,EAmnBSs5J,CAAWruK,EAAWkwB,EAAOlR,QAK1BjjC,IAAbgkC,IAEJkuJ,EAAmBjuK,IAAc+f,EAAS16B,MAAQ6lL,GAAuCA,IAI1F,IAAM1tD,EAAahkI,KAAK80L,kBAAmBtuK,EAAWs/G,EAAepvF,EAAOlR,EAAOivJ,GAE7E7uD,EAAc,CAEnB5B,WAAYA,EAAWhwF,GACvBswF,WAAYN,EAAWM,WACvBwB,cAAeA,EACftgG,MAAOA,EACPxwB,IAAK0/K,EAAO1/K,IACZD,IAAK2/K,EAAO3/K,IACZkR,KA7Ea,CAEb09D,EAAG,SACHC,EAAG,OACHmxG,EAAG,OACHC,EAAG,OACHC,GAAI,QAuESzuK,EAAU67B,WAOxB,OAH8B,IAAzB77B,EAAUs7B,aAAsB8jF,EAAY9jF,YAAa,GACvD2mD,EAAKo9B,YAAYp9B,EAAKo9B,UAAY,IAElCp9B,EAAKo9B,UAAU1hI,KAAMyhI,GAAgB,I,0BAW7C,SAAc3sG,EAAOqB,EAAQS,GAE5B,IAAMo2J,EAASnxL,KACTkG,EAAQirL,EAAOjrL,MACfuiG,EAAO0oF,EAAO1oF,KACdpiG,EAAU8qL,EAAO9qL,QACjBygH,EAAUqqE,EAAOrqE,QAEhB5gH,EAAMy1B,OAAOnT,IAAKyQ,IAAU/yB,EAAMy1B,OAAO/gB,IAAKqe,EAAO,IAE5D,IAAMi8J,EAAehvL,EAAMy1B,OAAO56B,IAAKk4B,GACjCw+E,EAAWn9E,IAAWvM,GAAa,YAAc,aACjDhvB,EAAM04G,EAAW,UAAY18E,EAAMtyB,WAEzC,QAA6BlG,IAAxB2yL,EAAcn2L,GAAsB,OAAOm2L,EAAcn2L,GAEvD0pG,EAAK9sE,SAAS8sE,EAAK9sE,OAAS,IAEnC,IAAMw5J,EAAW,CAAE19E,SAAUA,GAE7B,GAAKpxG,EAAQwsL,YAAc,CAE1B,IAAMz5J,EAASg5J,GAAeA,IAAgB9nL,SAASgF,cAAe,UAEtE8pB,EAAOE,MAAQxoB,KAAKiE,IAAKkkB,EAAMK,MAAOjzB,EAAQqhE,gBAC9CtuC,EAAOG,OAASzoB,KAAKiE,IAAKkkB,EAAMM,OAAQlzB,EAAQqhE,gBAEhD,IAAM0tH,EAAMh8J,EAAOI,WAAY,MAS/B,IAPe,IAAVuB,IAEJq6J,EAAIvwI,UAAW,EAAGzrB,EAAOG,QACzB67J,EAAIhmJ,MAAO,GAAK,IAIkB,qBAArBnT,kBAAoChD,aAAiBgD,kBACnC,qBAAtB9C,mBAAqCF,aAAiBE,mBAClC,qBAApBwzD,iBAAmC1zD,aAAiB0zD,iBACpC,qBAAhBzwD,aAA+BjD,aAAiBiD,YAEzDk5J,EAAIz7J,UAAWV,EAAO,EAAG,EAAGG,EAAOE,MAAOF,EAAOG,YAE3C,CAEDe,IAAWvM,IAAcuM,IAAWxM,IAExCxI,QAAQxjB,MAAO,2DAIXm3B,EAAMK,MAAQjzB,EAAQqhE,gBAAkBzuC,EAAMM,OAASlzB,EAAQqhE,iBAEnEpiD,QAAQM,KAAM,yDAA0DqT,GAIzE,IAAIta,EAAOsa,EAAMta,KAEjB,GAAK2b,IAAWxM,GAAY,CAE3BnP,EAAO,IAAI02K,kBAAmBp8J,EAAMM,OAASN,EAAMK,MAAQ,GAE3D,IAAM,IAAI/6B,EAAI,EAAG4gB,EAAI,EAAG5gB,EAAIogB,EAAKngB,OAAQD,GAAK,EAAG4gB,GAAK,EAErDR,EAAMpgB,EAAI,GAAM06B,EAAMta,KAAMQ,EAAI,GAChCR,EAAMpgB,EAAI,GAAM06B,EAAMta,KAAMQ,EAAI,GAChCR,EAAMpgB,EAAI,GAAM06B,EAAMta,KAAMQ,EAAI,GAChCR,EAAMpgB,EAAI,GAAM,IAMlB62L,EAAI17J,aAAc,IAAID,UAAW9a,EAAMsa,EAAMK,MAAOL,EAAMM,QAAU,EAAG,IAIhD,IAAnBlzB,EAAQosL,OAEZ3rE,EAAQ3iH,KAAM,IAAInC,SAAS,SAAWR,GAErC43B,EAAOy3I,QAAQ,SAAWj1D,GAEzBu1E,EAAOmE,uBAAwB15E,GAAO35G,MAAM,SAAWojI,GAEtD8vD,EAASnxD,WAAaqB,EACtB7jI,SAICi2G,OAMJ09E,EAASvxD,IAAMxqG,EAAOQ,UAAW69E,QAMlC09E,EAASvxD,IAAM3qG,EAAMC,IAItB,IAAMrtB,EAAQ48F,EAAK9sE,OAAOx3B,KAAMgxL,GAAa,EAE7C,OADAD,EAAcn2L,GAAQ8M,EACfA,I,4BASR,SAAgB0J,GAEf,IAAMkzF,EAAOzoG,KAAKyoG,KAEXA,EAAKymC,WAAWzmC,EAAKymC,SAAW,IAEvC,IAAMqmD,EAAa,CAClBn7J,UAAWu3J,GAAgBp8K,EAAI6kB,WAC/BC,UAAWs3J,GAAgBp8K,EAAI8kB,WAC/BH,MAAOy3J,GAAgBp8K,EAAI2kB,OAC3BC,MAAOw3J,GAAgBp8K,EAAI4kB,QAG5B,OAAOsuE,EAAKymC,SAAS/qI,KAAMoxL,GAAe,I,4BAS3C,SAAgBhgL,GAEf,IAAMrP,EAAQlG,KAAKkG,MACbuiG,EAAOzoG,KAAKyoG,KAElB,GAAKviG,EAAMo1B,SAAS9S,IAAKjT,GAAQ,OAAOrP,EAAMo1B,SAASv6B,IAAKwU,GAErDkzF,EAAKntE,WAAWmtE,EAAKntE,SAAW,IAEvC,IAAMkoG,EAAa,CAClByL,QAASjvI,KAAKw1L,eAAgBjgL,GAC9BhN,OAAQvI,KAAKy1L,aAAclgL,EAAI0jB,MAAO1jB,EAAI+kB,OAAQ/kB,EAAIwlB,QAGlDxlB,EAAI/Q,OAAOg/H,EAAWh/H,KAAO+Q,EAAI/Q,MAEtCxE,KAAKsrI,YAAY,SAAWC,GAE3BA,EAAImqD,cAAgBnqD,EAAImqD,aAAcngL,EAAKiuH,MAI5C,IAAM33H,EAAQ48F,EAAKntE,SAASn3B,KAAMq/H,GAAe,EAEjD,OADAt9H,EAAMo1B,SAAS1gB,IAAKrF,EAAK1J,GAClBA,I,6BASR,SAAiBgqC,GAEhB,IAAM3vC,EAAQlG,KAAKkG,MACbuiG,EAAOzoG,KAAKyoG,KAElB,GAAKviG,EAAMwuC,UAAUlsB,IAAKqtB,GAAa,OAAO3vC,EAAMwuC,UAAU3zC,IAAK80C,GAEnE,GAAKA,EAASoX,iBAGb,OADA3nC,QAAQM,KAAM,qDACP,KAID6iF,EAAK/zD,YAAY+zD,EAAK/zD,UAAY,IAGzC,IAAMguF,EAAc,CAAEE,qBAAsB,KAEH,IAApC/sF,EAASknC,yBAAoE,IAAjClnC,EAASoM,qBAEzD38B,QAAQM,KAAM,iFAKf,IAAMg3B,EAAQ/G,EAAS+G,MAAM5H,UAAUvuC,OAAQ,CAAEovC,EAASqE,UAqB1D,GAnBO23I,GAAYj1I,EAAO,CAAE,EAAG,EAAG,EAAG,MAEpC8lF,EAAYE,qBAAqBC,gBAAkBjmF,GAI/C/G,EAASknC,wBAEb2lD,EAAYE,qBAAqBwN,eAAiBv6F,EAASkH,UAC3D2lF,EAAYE,qBAAqByN,gBAAkBx6F,EAASiH,YAI5D4lF,EAAYE,qBAAqBwN,eAAiB,GAClD1N,EAAYE,qBAAqByN,gBAAkB,IAK/Cx6F,EAAS6I,cAAgB7I,EAAS4I,aAEtC,GAAK5I,EAAS6I,eAAiB7I,EAAS4I,aAAe,CAEtD,IAAMk3I,EAAmB,CAAE9pL,MAAO7L,KAAK41L,eAAgB//I,EAAS6I,eAChE1+C,KAAK61L,sBAAuBF,EAAkB9/I,EAAS6I,cACvDgkF,EAAYE,qBAAqB0N,yBAA2BqlD,OAI5DrwK,QAAQM,KAAM,qGAOhB,GAAKiwB,EAAStgC,IAAM,CAEnB,IAAMugL,EAAkB,CAAEjqL,MAAO7L,KAAK41L,eAAgB//I,EAAStgC,MAC/DvV,KAAK61L,sBAAuBC,EAAiBjgJ,EAAStgC,KACtDmtH,EAAYE,qBAAqBE,iBAAmBgzD,EAIrD,GAAKjgJ,EAASoH,SAAW,CAGxB,IAAMA,EAAWpH,EAASoH,SAAS3e,QAAQvK,eAAgB8hB,EAASqH,mBAAoBlI,UASxF,GAPO68I,GAAY50I,EAAU,CAAE,EAAG,EAAG,MAEpCylF,EAAYmO,eAAiB5zF,GAKzBpH,EAAS8I,YAAc,CAE3B,IAAMo3I,EAAiB,CAAElqL,MAAO7L,KAAK41L,eAAgB//I,EAAS8I,cAC9D3+C,KAAK61L,sBAAuBE,EAAgBlgJ,EAAS8I,aACrD+jF,EAAYoO,gBAAkBilD,GAOhC,GAAKlgJ,EAASsI,UAAY,CAEzB,IAAM63I,EAAe,CAAEnqL,MAAO7L,KAAK41L,eAAgB//I,EAASsI,YAEvDtI,EAASwI,cAA4C,IAA7BxI,EAASwI,YAAYviC,IAE5C+5B,EAASwI,YAAYviC,IAAM+5B,EAASwI,YAAYtiC,GAEpDuJ,QAAQM,KAAM,0FAIfowK,EAAa5mJ,MAAQyG,EAASwI,YAAYviC,GAI3C9b,KAAK61L,sBAAuBG,EAAcngJ,EAASsI,WACnDukF,EAAYgO,cAAgBslD,EAK7B,GAAKngJ,EAASkI,MAAQ,CAErB,IAAMk4I,EAAkB,CACvBpqL,MAAO7L,KAAK41L,eAAgB//I,EAASkI,OACrCkoF,SAAU,GAGsB,IAA5BpwF,EAASmI,iBAEbi4I,EAAgBrlD,SAAW/6F,EAASmI,gBAIrCh+C,KAAK61L,sBAAuBI,EAAiBpgJ,EAASkI,OACtD2kF,EAAYiO,iBAAmBslD,EAK3BpgJ,EAASsE,YAEbuoF,EAAY8N,UAAY,QAInB36F,EAASkG,UAAY,IAEzB2mF,EAAY8N,UAAY,OACxB9N,EAAY+N,YAAc56F,EAASkG,WAh6nDpB,IAu6nDZlG,EAASmE,OAAsB0oF,EAAYrpD,aAAc,GACvC,KAAlBxjC,EAASrxC,OAAck+H,EAAYl+H,KAAOqxC,EAASrxC,MAExDxE,KAAKk2L,kBAAmBrgJ,EAAU6sF,GAElC1iI,KAAKsrI,YAAY,SAAWC,GAE3BA,EAAI4qD,eAAiB5qD,EAAI4qD,cAAetgJ,EAAU6sF,MAInD,IAAM72H,EAAQ48F,EAAK/zD,UAAUvwC,KAAMu+H,GAAgB,EAEnD,OADAx8H,EAAMwuC,UAAU95B,IAAKi7B,EAAUhqC,GACxBA,I,yBASR,SAAaokD,GAEZ,IAAM/pD,EAAQlG,KAAKkG,MACbuiG,EAAOzoG,KAAKyoG,KAEZ2tF,EAAoB,CAAEnmI,EAAK1pB,SAAS9L,MAE1C,GAAK13B,MAAMC,QAASitD,EAAKpa,UAExB,IAAM,IAAIt3C,EAAI,EAAGyK,EAAIinD,EAAKpa,SAASr3C,OAAQD,EAAIyK,EAAGzK,IAEjD63L,EAAkBjyL,KAAM8rD,EAAKpa,SAAUt3C,GAAIk8B,WAM5C27J,EAAkBjyL,KAAM8rD,EAAKpa,SAASpb,MAIvC,IAAM47J,EAAeD,EAAkBtpL,KAAM,KAE7C,GAAK5G,EAAM+lI,OAAOzjH,IAAK6tK,GAAiB,OAAOnwL,EAAM+lI,OAAOlrI,IAAKs1L,GAEjE,IACI1vH,EADEpgC,EAAW0pB,EAAK1pB,SA0BtB,GApBCogC,EAFI1W,EAAKqyC,eAEFovF,GAEIzhI,EAAKsyC,WAETmvF,GAEIzhI,EAAK5a,OAETq8I,GAEIzhI,EAAK3a,SAETo8I,GAIAzhI,EAAKpa,SAAS0J,UAAYmyI,GAAwBA,IAIvB,IAA9BnrJ,EAAS6gB,iBAEb,MAAM,IAAI57C,MAAO,qEAIlB,IAAMg/H,EAAU,GACV/gH,EAAa,GACb0nH,EAAa,GACbiC,EAAU,GAGVkjD,EAAiB,CACtBv6J,GAAI,aACJsc,IAAK,aACLuE,MAAO,UACP8qD,WAAY,YACZG,UAAW,YAGN0uF,EAAiBhwJ,EAAS9xB,aAAc,eAEtBlS,IAAnBg0L,GAAkCv2L,KAAKw2L,4BAA6BD,KAExEjxK,QAAQM,KAAM,yFAEd2gB,EAASte,aAAc,SAAUjoB,KAAKy2L,gCAAiCF,KAMxE,IAAIG,EAAoB,KAExB,IAAM,IAAI56D,KAAiBv1F,EAAS9c,WAGnC,GAAsC,UAAjCqyG,EAAc/uH,OAAQ,EAAG,GAA9B,CAEA,IAAMyZ,EAAY+f,EAAS9c,WAAYqyG,GACvCA,EAAgBw6D,EAAgBx6D,IAAmBA,EAAcv9G,cASjE,GAJE,4EAE2BlI,KAAMylH,KAAkBA,EAAgB,IAAMA,GAEtE51H,EAAMujB,WAAWjB,IAAKxoB,KAAK22L,OAAQnwK,IAEvCiD,EAAYqyG,GAAkB51H,EAAMujB,WAAW1oB,IAAKf,KAAK22L,OAAQnwK,QAFlE,CAQAkwK,EAAoB,KACpB,IAAM/mK,EAAQnJ,EAAUmJ,MAED,aAAlBmsG,GACAnsG,aAAiBwzB,aACjBxzB,aAAiBskC,aAErB3uC,QAAQM,KAAM,yEACd8wK,EAAoB,IAAIt0I,GAAiB,IAAIe,YAAaxzB,GAASnJ,EAAU67B,SAAU77B,EAAUs7B,aAIlG,IAAM0wF,EAAWxyI,KAAK42L,gBAAiBF,GAAqBlwK,EAAW+f,GAErD,OAAbisG,IAEJ/oH,EAAYqyG,GAAkB0W,EAC9BtsI,EAAMujB,WAAW7O,IAAK5a,KAAK22L,OAAQnwK,GAAagsH,KASlD,QAHwBjwI,IAAnBg0L,GAA+BhwJ,EAASte,aAAc,SAAUsuK,GAG3B,IAArC13L,OAAOgI,KAAM4iB,GAAajrB,OAAe,OAAO,KAGrD,QAAoC+D,IAA/B0tD,EAAK5G,uBAAuC4G,EAAK5G,sBAAsB7qD,OAAS,EAAI,CAExF,IAAMsvH,EAAU,GACV2c,EAAc,GACdosD,EAAoB,GAE1B,QAAoCt0L,IAA/B0tD,EAAK3G,sBAET,IAAM,IAAMvqD,KAAOkxD,EAAK3G,sBAEvButI,EAAmB5mI,EAAK3G,sBAAuBvqD,IAAUA,EAM3D,IAAM,IAAIR,EAAI,EAAGA,EAAI0xD,EAAK5G,sBAAsB7qD,SAAWD,EAAI,CAE9D,IAAMF,EAAS,GACXy4L,GAAS,EAEb,IAAM,IAAMh7D,KAAiBv1F,EAASyd,gBAKrC,GAAuB,aAAlB83E,GAAkD,WAAlBA,EAArC,CAaA,IAAMt1G,EAAY+f,EAASyd,gBAAiB83E,GAAiBv9H,GACvDi2I,EAAoB1Y,EAAcv9G,cAOlCw4K,EAAgBxwJ,EAAS9c,WAAYqyG,GAE3C,GAAK51H,EAAMujB,WAAWjB,IAAKxoB,KAAK22L,OAAQnwK,IAEvCnoB,EAAQm2I,GAAsBtuI,EAAMujB,WAAW1oB,IAAKf,KAAK22L,OAAQnwK,QAFlE,CAQA,IAAMwwK,EAAoBxwK,EAAU8X,QAEpC,IAAOiI,EAAS0d,qBAEf,IAAM,IAAI9kC,EAAI,EAAGgmC,EAAK3+B,EAAUgf,MAAOrmB,EAAIgmC,EAAIhmC,IAE9C63K,EAAkBj0I,OACjB5jC,EACAqH,EAAUuO,KAAM5V,GAAM43K,EAAchiK,KAAM5V,GAC1CqH,EAAUwO,KAAM7V,GAAM43K,EAAc/hK,KAAM7V,GAC1CqH,EAAUiX,KAAMte,GAAM43K,EAAct5J,KAAMte,IAO7C9gB,EAAQm2I,GAAsBx0I,KAAK42L,gBAAiBI,EAAmBzwJ,GACvErgC,EAAMujB,WAAW7O,IAAK5a,KAAK22L,OAAQI,GAAiB14L,EAAQm2I,UA/CpDsiD,IAENxxK,QAAQM,KAAM,+DACdkxK,GAAS,GAgDZ1jD,EAAQjvI,KAAM9F,GAEdyvH,EAAQ3pH,KAAM8rD,EAAK5G,sBAAuB9qD,SAENgE,IAA/B0tD,EAAK3G,uBAAsCmhF,EAAYtmI,KAAM0yL,EAAmBt4L,IAItFisI,EAAQ1c,QAAUA,EAEb2c,EAAYjsI,OAAS,IAEzBgsI,EAAQD,OAAS,GACjBC,EAAQD,OAAOE,YAAcA,GAM/B,IAAMwsD,EAAkBl0L,MAAMC,QAASitD,EAAKpa,UAE5C,GAAKohJ,GAA8C,IAA3B1wJ,EAAS/mB,OAAOhhB,OAAe,OAAO,KAK9D,IAHA,IAAMk2C,EAAYuiJ,EAAkBhnI,EAAKpa,SAAW,CAAEoa,EAAKpa,UACrDr2B,EAASy3K,EAAkB1wJ,EAAS/mB,OAAS,CAAE,CAAE4kC,cAAe,EAAG1N,WAAOn0C,EAAWijC,WAAOjjC,IAExFhE,EAAI,EAAGonC,EAAKnmB,EAAOhhB,OAAQD,EAAIonC,EAAIpnC,IAAO,CAEnD,IAAM6mI,EAAY,CACjBz+D,KAAMA,EACNl9C,WAAYA,GAOb,GAJAzpB,KAAKk2L,kBAAmB3vJ,EAAU6+F,GAE7BgO,EAAQ50I,OAAS,IAAI4mI,EAAUgO,QAAUA,GAEtB,OAAnB7sG,EAAS16B,MAAiB,CAE9B,IAAIlF,EAAW3G,KAAK22L,OAAQpwJ,EAAS16B,YAEVtJ,IAAtBid,EAAQjhB,GAAIm4C,YAA6Cn0C,IAAtBid,EAAQjhB,GAAIinC,QAEnD7+B,GAAY,IAAM6Y,EAAQjhB,GAAIm4C,MAAQ,IAAMl3B,EAAQjhB,GAAIinC,OAIpDt/B,EAAMujB,WAAWjB,IAAK7hB,GAE1By+H,EAAUhgF,QAAUl/C,EAAMujB,WAAW1oB,IAAK4F,IAI1Cy+H,EAAUhgF,QAAUplD,KAAK42L,gBAAiBrwJ,EAAS16B,MAAO06B,EAAU/mB,EAAQjhB,GAAIm4C,MAAOl3B,EAAQjhB,GAAIinC,OACnGt/B,EAAMujB,WAAW7O,IAAKjU,EAAUy+H,EAAUhgF,UAIhB,OAAtBggF,EAAUhgF,gBAA0BggF,EAAUhgF,QAIpD,IAAMvP,EAAW71C,KAAKk3L,gBAAiBxiJ,EAAWl1B,EAAQjhB,GAAI6lD,gBAE5C,OAAbvO,IAAoBuvF,EAAUvvF,SAAWA,GAE9Cs7F,EAAWhtI,KAAMihI,GAIlBoF,EAAQ2G,WAAaA,EAEd1oC,EAAKwjC,SAASxjC,EAAKwjC,OAAS,IAEnCjsI,KAAKsrI,YAAY,SAAWC,GAE3BA,EAAI4rD,WAAa5rD,EAAI4rD,UAAWlnI,EAAMu6E,MAIvC,IAAM3+H,EAAQ48F,EAAKwjC,OAAO9nI,KAAMqmI,GAAY,EAE5C,OADAtkI,EAAM+lI,OAAOrxH,IAAKy7K,EAAcxqL,GACzBA,I,2BASR,SAAes3B,GAEd,IAAMslE,EAAOzoG,KAAKyoG,KAEXA,EAAKrV,UAAUqV,EAAKrV,QAAU,IAErC,IAAMgkG,EAAUj0J,EAAO8gE,qBAEjB6tC,EAAY,CACjB7rH,KAAMmxK,EAAU,eAAiB,eA0BlC,OAvBKA,EAEJtlD,EAAUulD,aAAe,CACxBllD,KAAqB,EAAfhvG,EAAO+M,MACbkiG,KAAmB,EAAbjvG,EAAOgN,IACb+hG,KAAM/uG,EAAOmN,KAAO,EAAI,KAAQnN,EAAOmN,IACvC2hG,MAAO9uG,EAAOkN,KAAO,EAAI,EAAIlN,EAAOkN,MAKrCyhG,EAAUwlD,YAAc,CACvBtlD,YAAa7uG,EAAOkqB,OACpB0kF,KAAM7gH,GAAUuB,SAAU0Q,EAAOiqB,KACjC8kF,KAAM/uG,EAAOmN,KAAO,EAAI,KAAQnN,EAAOmN,IACvC2hG,MAAO9uG,EAAOkN,KAAO,EAAI,EAAIlN,EAAOkN,MAMjB,KAAhBlN,EAAO3+B,OAAcstI,EAAUttI,KAAO2+B,EAAOld,MAE3CwiF,EAAKrV,QAAQjvF,KAAM2tI,GAAc,I,8BAczC,SAAkB5lC,EAAMkV,GAEvB,IAAM3Y,EAAOzoG,KAAKyoG,KACZ4pF,EAAUryL,KAAKqyL,QAEd5pF,EAAKz1D,aAAay1D,EAAKz1D,WAAa,IAQ3C,IAJA,IAAMm5D,GAFND,EAAOglF,GAAaqG,MAAMC,uBAAwBtrF,EAAK5tE,QAAS8iF,IAE5CjV,OACd6mC,EAAW,GACX9D,EAAW,GAEP3wI,EAAI,EAAGA,EAAI4tG,EAAO3tG,SAAWD,EAAI,CAE1C,IAAM6tG,EAAQD,EAAQ5tG,GAChBk5L,EAAe54E,GAAgBC,eAAgB1S,EAAM5nG,MACvDkzL,EAAY74E,GAAgBW,SAAU4B,EAAMq2E,EAAah4E,UACvDk4E,EAAgB/F,GAAiB6F,EAAa3iF,cAgBpD,GAdiC,UAA5B2iF,EAAav3E,aAIhBw3E,GAFgC,IAA5BA,EAAUjiJ,cAEFiiJ,EAAU9hJ,SAAS4rE,cAAei2E,EAAap3E,kBAI/C99G,IAMPm1L,IAAeC,EAGrB,OADAryK,QAAQM,KAAM,6DAA8DwmF,EAAM5nG,MAC3E,KAIR,IACIozL,EAAiBxrF,EAAMllG,OAAO1I,OAAS4tG,EAAMd,MAAM9sG,OAElDm5L,IAAkB/F,GAAgBvoI,wBAEtCuuI,GAAkBF,EAAUruI,sBAAsB7qD,QAInD,IAAI8yG,OAAa,GAO0D,IAAtElF,EAAMkB,kBAAkBC,2CAE5B+D,EAAgB,cAKhBsmF,GAAkB,GAIlBtmF,EAFWlF,EAAMoG,qBAAuBhkF,GAExB,OAIA,SAIjB0gH,EAAS/qI,KAAM,CACd8uI,MAAOjzI,KAAK42L,gBAAiB,IAAIx0I,GAAiBgqD,EAAMd,MApCnC,IAqCrB/vE,OAAQv7B,KAAK42L,gBAAiB,IAAIx0I,GAAiBgqD,EAAMllG,OAAQ0wL,IACjEtmF,cAAeA,IAGhB0hC,EAAS7uI,KAAM,CACd8qI,QAASC,EAAS1wI,OAAS,EAC3BH,OAAQ,CACPkhH,KAAM8yE,EAAQtxL,IAAK22L,GACnB3yL,KAAM4yL,KAYT,OANAlvF,EAAKz1D,WAAW7uC,KAAM,CACrBK,KAAM0nG,EAAK1nG,MAAQ,QAAUikG,EAAKz1D,WAAWx0C,OAC7C0wI,SAAUA,EACV8D,SAAUA,IAGJvqC,EAAKz1D,WAAWx0C,OAAS,I,yBAQhC,SAAayC,GAEb,IAAMwnG,EAAOzoG,KAAKyoG,KACZ4pF,EAAUryL,KAAKqyL,QAEf9yE,EAAO9W,EAAKk5B,MAAO0wD,EAAQtxL,IAAKE,IAEhC20C,EAAW30C,EAAO20C,SAExB,QAAkBrzC,IAAbqzC,EAAyB,OAAO,KAErC,IAAMiiJ,EAAY52L,EAAO20C,SAASonC,MAAO,GAEzC,QAAmBz6E,IAAds1L,EAA0B,OAAO,KAMtC,IAJA,IAAMhkG,EAAS,GACT0+C,EAAsB,IAAIhvF,aAAsC,GAAxB3N,EAASonC,MAAMx+E,QACvDs5L,EAAuB,IAAIvrJ,GAEvBhuC,EAAI,EAAGA,EAAIq3C,EAASonC,MAAMx+E,SAAWD,EAE9Cs1F,EAAO1vF,KAAMkuL,EAAQtxL,IAAK60C,EAASonC,MAAOz+E,KAC1Cu5L,EAAqB38J,KAAMya,EAASqyD,aAAc1pG,IAClDu5L,EAAqBzkJ,SAAUpyC,EAAO00C,YAAaX,QAASu9F,EAAyB,GAAJh0I,GAclF,YAVoBgE,IAAfkmG,EAAKsjC,QAAsBtjC,EAAKsjC,MAAQ,IAE7CtjC,EAAKsjC,MAAM5nI,KAAM,CAChBouI,oBAAqBvyI,KAAK42L,gBAAiB,IAAIx0I,GAAiBmwF,EAAqB,KACrF1+C,OAAQA,EACRj+C,SAAUy8I,EAAQtxL,IAAK82L,KAGNt4E,EAAK4sB,KAAO1jC,EAAKsjC,MAAMvtI,OAAS,I,yBAWnD,SAAayC,GAEZ,IAAMwnG,EAAOzoG,KAAKyoG,KACZpiG,EAAUrG,KAAKqG,QACfgsL,EAAUryL,KAAKqyL,QAEd5pF,EAAKk5B,QAAQl5B,EAAKk5B,MAAQ,IAEjC,IAAMG,EAAU,GAEhB,GAAKz7H,EAAQqsL,IAAM,CAElB,IAAMj6J,EAAWx3B,EAAO69B,WAAWkW,UAC7B7F,EAAWluC,EAAOkuC,SAAS6F,UAC3B5F,EAAQnuC,EAAOmuC,MAAM4F,UAEpB68I,GAAYp5J,EAAU,CAAE,EAAG,EAAG,EAAG,MAEvCqpG,EAAQrpG,SAAWA,GAIbo5J,GAAY1iJ,EAAU,CAAE,EAAG,EAAG,MAEpC2yF,EAAQ4H,YAAcv6F,GAIhB0iJ,GAAYziJ,EAAO,CAAE,EAAG,EAAG,MAEjC0yF,EAAQ1yF,MAAQA,QAMZnuC,EAAO25B,kBAEX35B,EAAOiyC,gBAImC,IA3kDtC2+I,GA2kDkB5wL,EAAO43B,OA3kDN7E,SAAU,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,MA6kDhF8tG,EAAQjpG,OAAS53B,EAAO43B,OAAO7E,UAWjC,GAJqB,KAAhB/yB,EAAOuD,OAAcs9H,EAAQt9H,KAAO+S,OAAQtW,EAAOuD,OAExDxE,KAAKk2L,kBAAmBj1L,EAAQ6gI,GAE3B7gI,EAAOm0C,QAAUn0C,EAAOo0C,QAAUp0C,EAAOq0C,SAAW,CAExD,IAAMk8F,EAAYxxI,KAAK+3L,YAAa92L,GAEjB,OAAduwI,IAAqB1P,EAAQ7xE,KAAOuhF,QAE9BvwI,EAAOyyC,WAElBouF,EAAQ3+F,OAASnjC,KAAKg4L,cAAe/2L,IAMtC,GAFKA,EAAOw0C,eAAgBz1C,KAAK+rI,MAAM5nI,KAAMlD,GAExCA,EAAO8E,SAASvH,OAAS,EAAI,CAIjC,IAFA,IAAMuH,EAAW,GAEPxH,EAAI,EAAGyK,EAAI/H,EAAO8E,SAASvH,OAAQD,EAAIyK,EAAGzK,IAAO,CAE1D,IAAMyJ,EAAQ/G,EAAO8E,SAAUxH,GAE/B,GAAKyJ,EAAM2qC,UAAmC,IAAxBtsC,EAAQssL,YAAwB,CAErD,IAAM/wD,EAAY5hI,KAAKi4L,YAAajwL,GAEjB,OAAd45H,GAAqB77H,EAAS5B,KAAMy9H,IAMtC77H,EAASvH,OAAS,IAAIsjI,EAAQ/7H,SAAWA,GAI/C/F,KAAKsrI,YAAY,SAAWC,GAE3BA,EAAI2sD,WAAa3sD,EAAI2sD,UAAWj3L,EAAQ6gI,MAIzC,IAAMF,EAAYn5B,EAAKk5B,MAAMx9H,KAAM29H,GAAY,EAE/C,OADAuwD,EAAQz3K,IAAK3Z,EAAQ2gI,GACdA,I,0BAQR,SAAcxyE,GAEb,IAAMq5C,EAAOzoG,KAAKyoG,KACZpiG,EAAUrG,KAAKqG,QAEdoiG,EAAKmjC,SAEXnjC,EAAKmjC,OAAS,GACdnjC,EAAKr5C,MAAQ,GAId,IAAM0kF,EAAW,GAEG,KAAf1kF,EAAM5qD,OAAcsvI,EAAStvI,KAAO4qD,EAAM5qD,MAE/CikG,EAAKmjC,OAAOznI,KAAM2vI,GAIlB,IAFA,IAAMnS,EAAQ,GAEJpjI,EAAI,EAAGyK,EAAIomD,EAAMrpD,SAASvH,OAAQD,EAAIyK,EAAGzK,IAAO,CAEzD,IAAMyJ,EAAQonD,EAAMrpD,SAAUxH,GAE9B,GAAKyJ,EAAM2qC,UAAmC,IAAxBtsC,EAAQssL,YAAwB,CAErD,IAAM/wD,EAAY5hI,KAAKi4L,YAAajwL,GAEjB,OAAd45H,GAAqBD,EAAMx9H,KAAMy9H,IAMnCD,EAAMnjI,OAAS,IAAIs1I,EAASnS,MAAQA,GAEzC3hI,KAAKk2L,kBAAmB9mI,EAAO0kF,K,4BAQhC,SAAgB7yE,GAEf,IAAM7R,EAAQ,IAAIm3C,GAClBn3C,EAAM5qD,KAAO,WAEb,IAAM,IAAIjG,EAAI,EAAGA,EAAI0iE,EAAQziE,OAAQD,IAIpC6wD,EAAMrpD,SAAS5B,KAAM88D,EAAS1iE,IAI/ByB,KAAKm4L,aAAc/oI,K,0BAOpB,SAAc6jF,GAEb,IAAM5sI,EAAUrG,KAAKqG,QAErB4sI,EAAQA,aAAiBlwI,MAAQkwI,EAAQ,CAAEA,GAE3CjzI,KAAKsrI,YAAY,SAAWC,GAE3BA,EAAI6sD,aAAe7sD,EAAI6sD,YAAanlD,MAMrC,IAFA,IAAMolD,EAAsB,GAElB95L,EAAI,EAAGA,EAAI00I,EAAMz0I,OAAQD,IAE7B00I,EAAO10I,aAAegoG,GAE1BvmG,KAAKm4L,aAAcllD,EAAO10I,IAI1B85L,EAAoBl0L,KAAM8uI,EAAO10I,IAM9B85L,EAAoB75L,OAAS,GAAIwB,KAAKs4L,eAAgBD,GAE3D,IAAM,IAAI95L,EAAI,EAAGA,EAAIyB,KAAK+rI,MAAMvtI,SAAWD,EAE1CyB,KAAKu4L,YAAav4L,KAAK+rI,MAAOxtI,IAI/B,IAAM,IAAIA,EAAI,EAAGA,EAAI8H,EAAQ2sC,WAAWx0C,SAAWD,EAElDyB,KAAKw4L,iBAAkBnyL,EAAQ2sC,WAAYz0C,GAAK00I,EAAO,IAIxDjzI,KAAKsrI,YAAY,SAAWC,GAE3BA,EAAIktD,YAAcltD,EAAIktD,WAAYxlD,Q,wBAMpC,SAAY5G,GAEX,IAAM,IAAI9tI,EAAI,EAAGonC,EAAK3lC,KAAKu/H,QAAQ/gI,OAAQD,EAAIonC,EAAIpnC,IAElD8tI,EAAMrsI,KAAKu/H,QAAShhI,Q,KAajB6yL,G,WAEL,WAAaD,GAAS,oBAErBnxL,KAAKmxL,OAASA,EACdnxL,KAAKwE,KAAO,sB,6CAIb,SAAWy6E,EAAO6iD,GAEjB,GAAO7iD,EAAMtrC,QAEb,GAAOsrC,EAAMgC,oBAAwBhC,EAAMwC,cAAkBxC,EAAMqC,YAAnE,CAOA,IAAM6vG,EAASnxL,KAAKmxL,OACd1oF,EAAO0oF,EAAO1oF,KACdw3B,EAAiBkxD,EAAOlxD,eAExBkC,EAAW,GAEZljD,EAAMz6E,OAAO29H,EAAS39H,KAAOy6E,EAAMz6E,MAExC29H,EAASvlF,MAAQqiC,EAAMriC,MAAM5H,UAE7BmtF,EAASvhD,UAAY3B,EAAM2B,UAEtB3B,EAAMgC,mBAEVkhD,EAASl8G,KAAO,cAELg5D,EAAMwC,cAEjB0gD,EAASl8G,KAAO,QAEXg5D,EAAM1rC,SAAW,IAAI4uF,EAAS5vG,MAAQ0sD,EAAM1rC,WAEtC0rC,EAAMqC,cAEjB6gD,EAASl8G,KAAO,OAEXg5D,EAAM1rC,SAAW,IAAI4uF,EAAS5vG,MAAQ0sD,EAAM1rC,UAEjD4uF,EAAS7kD,KAAO,GAChB6kD,EAAS7kD,KAAK8kD,gBAAmBnjD,EAAMsC,SAAW,GAAQtC,EAAM3qD,OAAU,EAC1E6tG,EAAS7kD,KAAK+kD,eAAiBpjD,EAAM3qD,YAIjB/xB,IAAhB08E,EAAMngB,OAAuC,IAAhBmgB,EAAMngB,OAEvCx5C,QAAQM,KAAM,sGAKVq5D,EAAM5gF,QACJ4gF,EAAM5gF,OAAO+zC,SAAW6sC,GACE,IAA5BA,EAAM5gF,OAAO8wC,SAASrzB,GACM,IAA5BmjE,EAAM5gF,OAAO8wC,SAASpzB,IACQ,IAA9BkjE,EAAM5gF,OAAO8wC,SAAS7S,GAE1BhX,QAAQM,KAAM,mIAKRq6G,EAAgBjgI,KAAKwE,QAE3BikG,EAAKj8C,WAAai8C,EAAKj8C,YAAc,GACrCi8C,EAAKj8C,WAAYxsD,KAAKwE,MAAS,CAAE8nD,OAAQ,IACzC2zE,EAAgBjgI,KAAKwE,OAAS,GAI/B,IAAM8nD,EAASm8C,EAAKj8C,WAAYxsD,KAAKwE,MAAO8nD,OAC5CA,EAAOnoD,KAAMg+H,GAEbL,EAAQt1E,WAAas1E,EAAQt1E,YAAc,GAC3Cs1E,EAAQt1E,WAAYxsD,KAAKwE,MAAS,CAAEy6E,MAAO3yB,EAAO9tD,OAAS,QArE1D8mB,QAAQM,KAAM,8EAA+Eq5D,O,KAgF1FoyG,G,WAEL,WAAaF,GAAS,oBAErBnxL,KAAKmxL,OAASA,EACdnxL,KAAKwE,KAAO,sB,iDAIb,SAAeqxC,EAAU6sF,GAExB,GAAO7sF,EAASoM,oBAAhB,CAEA,IACMg+E,EADSjgI,KAAKmxL,OACUlxD,eAE9ByC,EAAYl2E,WAAak2E,EAAYl2E,YAAc,GACnDk2E,EAAYl2E,WAAYxsD,KAAKwE,MAAS,GAEtCy7H,EAAgBjgI,KAAKwE,OAAS,EAE9Bk+H,EAAYE,qBAAqBwN,eAAiB,EAClD1N,EAAYE,qBAAqByN,gBAAkB,Q,KAW/CihD,G,WAEL,WAAaH,GAAS,oBAErBnxL,KAAKmxL,OAASA,EACdnxL,KAAKwE,KAAO,sC,iDAIb,SAAeqxC,EAAU6sF,GAExB,GAAO7sF,EAASswF,iCAAhB,CAEA,IAAMgrD,EAASnxL,KAAKmxL,OACdlxD,EAAiBkxD,EAAOlxD,eAExBiE,EAAe,GAEhBxB,EAAYE,qBAAqBC,kBAErCqB,EAAagD,cAAgBxE,EAAYE,qBAAqBC,iBAI/D,IAAMwE,EAAiB,CAAE,EAAG,EAAG,GAW/B,GAVAxxF,EAASsH,SAASnI,QAASqyF,EAAgB,GAC3CnD,EAAamD,eAAiBA,EAC9BnD,EAAakD,iBAAmBvxF,EAAS4wF,WAEpC/D,EAAYE,qBAAqBE,mBAErCoB,EAAaiD,eAAiBzE,EAAYE,qBAAqBE,kBAI3DjtF,EAAS+I,YAAc,CAE3B,IAAM85I,EAAiB,CAAE7sL,MAAOslL,EAAOyE,eAAgB//I,EAAS+I,cAChEuyI,EAAO0E,sBAAuB6C,EAAgB7iJ,EAAS+I,aACvDslF,EAAaoD,0BAA4BoxD,EAI1Ch2D,EAAYl2E,WAAak2E,EAAYl2E,YAAc,GACnDk2E,EAAYl2E,WAAYxsD,KAAKwE,MAAS0/H,EACtCjE,EAAgBjgI,KAAKwE,OAAS,O,KAShC0sL,GAAaqG,MAAQ,CAEpBoB,eAAgB,SAAWvsF,EAAO/5C,GAEjC,IAOIxmD,EAPE+sL,EAAY,KACZvsF,EAAYD,EAAME,eAElBhB,EAAQ,IAAIc,EAAMmF,eAAgBnF,EAAMd,MAAM9sG,OAAS,GACvD0I,EAAS,IAAIklG,EAAMoF,gBAAiBpF,EAAMllG,OAAO1I,OAAS6tG,GAC1DwB,EAAczB,EAAMkB,kBAAmB,IAAIlB,EAAMoF,gBAAiBnF,IAIxE,GAA4B,IAAvBD,EAAMd,MAAM9sG,OAAe,CAE/B8sG,EAAO,GAAMj5C,EAEb,IAAM,IAAI9zD,EAAI,EAAGA,EAAI8tG,EAAW9tG,IAE/B2I,EAAQ3I,GAAM,EAIfsN,EAAQ,OAEF,GAAKwmD,EAAO+5C,EAAMd,MAAO,GAAM,CAErC,GAAKx6F,KAAKihB,IAAKq6E,EAAMd,MAAO,GAAMj5C,GAASumI,EAAY,OAAO,EAE9DttF,EAAO,GAAMj5C,EACbi5C,EAAM1wF,IAAKwxF,EAAMd,MAAO,GAExBpkG,EAAO0T,IAAKizF,EAAYC,SAAUz7C,GAAQ,GAC1CnrD,EAAO0T,IAAKwxF,EAAMllG,OAAQmlG,GAE1BxgG,EAAQ,OAEF,GAAKwmD,EAAO+5C,EAAMd,MAAOc,EAAMd,MAAM9sG,OAAS,GAAM,CAE1D,GAAKsS,KAAKihB,IAAKq6E,EAAMd,MAAOc,EAAMd,MAAM9sG,OAAS,GAAM6zD,GAASumI,EAE/D,OAAOxsF,EAAMd,MAAM9sG,OAAS,EAI7B8sG,EAAOA,EAAM9sG,OAAS,GAAM6zD,EAC5Bi5C,EAAM1wF,IAAKwxF,EAAMd,MAAO,GAExBpkG,EAAO0T,IAAKwxF,EAAMllG,OAAQ,GAC1BA,EAAO0T,IAAKizF,EAAYC,SAAUz7C,GAAQ+5C,EAAMllG,OAAO1I,QAEvDqN,EAAQy/F,EAAM9sG,OAAS,OAIvB,IAAM,IAAID,EAAI,EAAGA,EAAI6tG,EAAMd,MAAM9sG,OAAQD,IAAO,CAE/C,GAAKuS,KAAKihB,IAAKq6E,EAAMd,MAAO/sG,GAAM8zD,GAASumI,EAAY,OAAOr6L,EAE9D,GAAK6tG,EAAMd,MAAO/sG,GAAM8zD,GAAQ+5C,EAAMd,MAAO/sG,EAAI,GAAM8zD,EAAO,CAE7Di5C,EAAM1wF,IAAKwxF,EAAMd,MAAM7gG,MAAO,EAAGlM,EAAI,GAAK,GAC1C+sG,EAAO/sG,EAAI,GAAM8zD,EACjBi5C,EAAM1wF,IAAKwxF,EAAMd,MAAM7gG,MAAOlM,EAAI,GAAKA,EAAI,GAE3C2I,EAAO0T,IAAKwxF,EAAMllG,OAAOuD,MAAO,GAAKlM,EAAI,GAAM8tG,GAAa,GAC5DnlG,EAAO0T,IAAKizF,EAAYC,SAAUz7C,IAAU9zD,EAAI,GAAM8tG,GACtDnlG,EAAO0T,IAAKwxF,EAAMllG,OAAOuD,OAASlM,EAAI,GAAM8tG,IAAe9tG,EAAI,GAAM8tG,GAErExgG,EAAQtN,EAAI,EAEZ,OAWH,OAHA6tG,EAAMd,MAAQA,EACdc,EAAMllG,OAASA,EAER2E,GAIR2rL,uBAAwB,SAAWtrF,EAAMkV,GAMxC,IAJA,IAAMjV,EAAS,GACT0sF,EAAe,GACfC,EAAe5sF,EAAKC,OAEhB5tG,EAAI,EAAGA,EAAIu6L,EAAat6L,SAAWD,EAAI,CAEhD,IAAIw6L,EAAcD,EAAcv6L,GAC1By6L,EAAqBn6E,GAAgBC,eAAgBi6E,EAAYv0L,MACjEy0L,EAAkBp6E,GAAgBW,SAAU4B,EAAM43E,EAAmBv5E,UAE3E,GAAyC,0BAApCu5E,EAAmBlkF,mBAAiFvyG,IAArCy2L,EAAmBn5E,cAAvF,CAQA,GAAKk5E,EAAYzrF,oBAAsByrF,EAAYnnF,kCAC/CmnF,EAAYzrF,oBAAsByrF,EAAYlnF,+BAAiC,CAElF,GAAKknF,EAAYzrF,kBAAkBC,0CAIlC,MAAM,IAAI/hG,MAAO,gFAIlB8Z,QAAQM,KAAM,iGAEdmzK,EAAcA,EAAYz6J,SACdmzE,iBAAkBhjF,IAI/B,IAAMyqK,EAAcD,EAAgB5vI,sBAAsB7qD,OACpDq/G,EAAco7E,EAAgB3vI,sBAAuB0vI,EAAmBn5E,eAE9E,QAAqBt9G,IAAhBs7G,EAEJ,MAAM,IAAIryG,MAAO,oDAAsDwtL,EAAmBn5E,eAI3F,IAAIs5E,OAAW,EAIf,QAA8C52L,IAAzCs2L,EAAcI,EAAgBx+J,MAAnC,CAwBA,IAAM2+J,EAAoBL,EAAYzrF,kBAAmB,IAAIyrF,EAAYvnF,gBAAiB,IAE1F2nF,EAAcN,EAAcI,EAAgBx+J,MAI5C,IAAM,IAAItb,EAAI,EAAGA,EAAIg6K,EAAY7tF,MAAM9sG,OAAQ2gB,IAE9Cg6K,EAAYjyL,OAAQiY,EAAI+5K,EAAcr7E,GAAgBu7E,EAAkBtrF,SAAUqrF,EAAY7tF,MAAOnsF,IAOtG,IAAM,IAAIA,EAAI,EAAGA,EAAI45K,EAAYztF,MAAM9sG,OAAQ2gB,IAAO,CAErD,IAAMk6K,EAAgBr5L,KAAK24L,eAAgBQ,EAAaJ,EAAYztF,MAAOnsF,IAC3Eg6K,EAAYjyL,OAAQmyL,EAAgBH,EAAcr7E,GAAgBk7E,EAAY7xL,OAAQiY,QA1CvF,CAMC,IAFA,IAAMjY,EAAS,KAFfiyL,EAAcJ,EAAYz6J,SAEKkzE,iBAAiB0nF,EAAcC,EAAY7tF,MAAM9sG,QAEtE2gB,EAAI,EAAGA,EAAIg6K,EAAY7tF,MAAM9sG,OAAQ2gB,IAE9CjY,EAAQiY,EAAI+5K,EAAcr7E,GAAgBs7E,EAAYjyL,OAAQiY,GAM/Dg6K,EAAY30L,MAASw0L,EAAmBv5E,UAAY,IAAO,yBAC3D05E,EAAYjyL,OAASA,EAErB2xL,EAAcI,EAAgBx+J,MAAS0+J,EACvChtF,EAAOhoG,KAAMg1L,SAtDbhtF,EAAOhoG,KAAM40L,GAsFf,OAFA7sF,EAAKC,OAASA,EAEPD,IAoBT,IA+BIotF,GAAMC,GA/BJC,GAAqB32L,OAAO,qBAC5B42L,GAAgB52L,OAAO,gBACvB62L,GAAY72L,OAAO,YAOnB82L,GACF,WAAYp9K,EAAUtU,GAAmC,IAA1B2xL,EAA0B,uDAAN,KAAM,oBACrD55L,KAAK05L,IAAan9K,EAClBvc,KAAKy5L,IAAiBxxL,EACtBjI,KAAKw5L,IAAsBI,GAmB7BhjF,GAAS,IAAIkC,GACb+gF,GAAmBh3L,OAAO,iBAC1Bi3L,GAAOj3L,OAAO,OACdk3L,GAAoBl3L,OAAO,oBAI3Bm3L,G,kDACF,WAAYz9K,EAAU0c,EAAOghK,GAAoB,MAO7C,GAP6C,qBAC7C,cAAM19K,EAAU0c,EAAOghK,IAClBX,SAAQ/2L,EACb,EAAKg3L,IAAQ,IAAItmI,QACA,MAAbh6B,EAAM2qG,MACN,EAAKk2D,IAAQ7gK,EAAM2qG,KAEC,MAApB3qG,EAAM+qG,WAAoB,qBACJi2D,GADI,IAC1B,2BAA0C,KAA/Bh8J,EAA+B,QACtC,EAAK87J,IAAmBn/K,IAAIqjB,EAASA,EAAQhF,QAFvB,+BAPe,S,2BAa5C4gK,G,IAAL,WACI,OAAO75L,KAAKw5L,M,gBAEhB,WACI,OAAOx5L,KAAKy5L,IAAej1L,MAAQ,K,eAEvC,WACI,OAAOxE,KAAK85L,M,gBAEhB,WACI,OAAmB,MAAZ95L,KAAK4jI,IAAc,WAAa,a,2DAE3C,WAAaA,GAAb,qBAAAj5H,EAAA,6DACI3K,KAAK85L,IAAQl2D,EADjB,SAEwB,IAAI5hI,SAAQ,SAACR,EAASC,GACtCm1G,GAAOQ,KAAKwsB,EAAKpiI,OAASe,EAAWd,MAH7C,OAEUw3B,EAFV,qBAK0Bj5B,KAAK65L,KAL/B,IAKI,2BAAW57J,EAAmC,QAI7B,MAAThF,GACkC,MAAlCj5B,KAAKy5L,IAAez1D,WACpB/lG,EAAQhF,MAAQj5B,KAAK+5L,IAAmBh5L,IAAIk9B,GAG5CA,EAAQhF,MAAQA,EAEpBgF,EAAQomB,aAAc,EAhB9B,8BAkBIrkD,KAAK05L,MAlBT,gD,4DA1BkBC,IA+CtBL,GAAOQ,GAAMP,GAAOQ,GAgBpB,IAyLIG,GAAMC,GAuGNC,GAAMvkB,GAAIG,GA4FV9f,GA5XEmkC,GAAe,WACjB,IAAMC,EAAkB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACvD,OAAO,SAAC76L,GAAD,OAAW66L,EAAgB9sL,QAAQ/N,IAAU,GAFnC,GAIf86L,GAAe,WACjB,IAAMC,EAAkB,CAAC,KAAM,MAC/B,OAAO,SAAC/6L,GAAD,OAAW+6L,EAAgBhtL,QAAQ/N,IAAU,GAFnC,GAIfg7L,GAAc,WAChB,IAAMC,EAAY,CAAC,MAAO,MAAO,OACjC,OAAO,SAACj7L,GAAD,OAAWi7L,EAAUltL,QAAQ/N,IAAU,GAF9B,GAiBdk7L,GAAiB93L,OAAO,iBACxB+3L,GAAe/3L,OAAO,eAItBg4L,G,kDAIF,WAAYt+K,EAAU0yH,EAASgrD,GAAoB,2BAMtB,MAArBhrD,EAAQ50G,YACR40G,EAAQ50G,UAAY,MAEC,MAArB40G,EAAQ70G,YACR60G,EAAQ70G,UAAY,MAEH,MAAjB60G,EAAQ/0G,QACR+0G,EAAQ/0G,MAAQ,OAEC,MAAjB+0G,EAAQ90G,QACR80G,EAAQ90G,MAAQ,OAhB2B,YAkBzC5d,EAAU0yH,EAASgrD,G,2BArBxBU,G,IAAL,WACI,OAAO36L,KAAKw5L,M,gBAsBhB,WACI,OAAOx5L,KAAKy5L,IAAej1L,MAAQ,K,qBAEvC,WACI,OAAOxE,KAAKy5L,IAAep/J,Y,qBAE/B,WACI,OAAOr6B,KAAKy5L,IAAer/J,Y,iBAE/B,WACI,OAAOp6B,KAAKy5L,IAAev/J,Q,iBAE/B,WACI,OAAOl6B,KAAKy5L,IAAet/J,Q,0BAE/B,SAAalrB,GACTjP,KAAK46L,IAAc,YAAa3rL,K,0BAEpC,SAAaA,GACTjP,KAAK46L,IAAc,YAAa3rL,K,sBAEpC,SAAS03D,GACL3mE,KAAK46L,IAAc,QAASj0H,K,sBAEhC,SAASA,GACL3mE,KAAK46L,IAAc,QAASj0H,K,KAE/Bi0H,G,MAAD,SAAe/5L,EAAUpB,GACrB,IAAMwvI,EAAUjvI,KAAKy5L,IACrB,GAvEoB,SAAC54L,EAAUpB,GACnC,OAAQoB,GACJ,IAAK,YACD,OAAOw5L,GAAY56L,GACvB,IAAK,YACD,OAAO86L,GAAY96L,GACvB,IAAK,QACL,IAAK,QACD,OAAOg7L,GAAWh7L,GACtB,QACI,MAAM,IAAI+L,MAAJ,qCAAwC3K,EAAxC,kBA6DNi6L,CAAoBj6L,EAAUpB,GAAQ,CACtCwvI,EAAQpuI,GAAYpB,EADkB,oBAEhBO,KAAK26L,KAFW,IAEtC,2BAA4C,KAAjC18J,EAAiC,QACxCA,EAAQp9B,GAAYpB,EACpBw+B,EAAQomB,aAAc,GAJY,+BAO1CrkD,KAAK05L,U,GA5DSC,IA8EhBoB,GAAUl4L,OAAO,UACjBm4L,GAAWn4L,OAAO,WAIlB+5J,G,kDACF,WAAYrgJ,EAAU+iH,EAAMrhG,EAASg8J,GAAoB,0BACrD,cAAM19K,EAAU0hB,EAASg8J,GACzB,IAAiBgB,EAAqCh9J,EAA9CgxG,QAA+BisD,EAAej9J,EAAvB11B,OACzB0mI,EAA4B,MAAjB3P,EAAK4P,UAAoC,MAAhB+rD,EACtC37D,EAAK4P,SAAS+rD,GACd,GAEJ,GADA,EAAKD,IAAY,IAAIH,GAAQt+K,EAAU0yH,EAASgrD,GAC7B,MAAf36D,EAAK3jG,QAAgC,MAAdu/J,EAAoB,CAC3C,IAAMjiK,EAAQqmG,EAAK3jG,OAAOu/J,GACb,MAATjiK,IACA,EAAK8hK,IAAW,IAAIf,GAAQz9K,EAAU0c,EAAOghK,IAVA,S,sCAczD,WACI,OAAOj6L,KAAKy5L,IAAej1L,MAAQ,K,mBAEvC,WACI,OAAOxE,KAAKg7L,M,kBAEhB,WACI,OAAOh7L,KAAK+6L,Q,GAtBEpB,IAwChBwB,GAAWt4L,OAAO,WAIlBu4L,G,kDACF,WAAY7+K,EAAU+iH,EAAM+7D,EAAapB,GAAoB,0BACzD,cAAM19K,EAAU8+K,EAAapB,GAC7B,IAAe12D,EAAiB83D,EAAxBxvL,MACFoyB,EAAUqhG,EAAKhkG,SAASioG,GAH2B,OAI1C,MAAXtlG,IACA,EAAKk9J,IAAY,IAAIv+B,GAAQrgJ,EAAU+iH,EAAMrhG,EAASg8J,IALD,E,yCAQ7D,WACI,OAAOj6L,KAAKm7L,Q,GAVMxB,IA6BpB2B,GAAkBz4L,OAAO,kBACzB04L,GAAoB14L,OAAO,oBAC3B24L,GAA4B34L,OAAO,4BAInC44L,G,kDACF,WAAYl/K,EAAU+iH,EAAMsD,EAAsB84D,GAAqB,2BACnE,cAAMn/K,EAAUqmH,EAAsB84D,IACjCxB,IAAQ,KACb,EAAKC,IAAQ,KAE+B,MAAxCv3D,EAAqBC,kBACrBD,EAAqBC,gBAAkB,CAAC,EAAG,EAAG,EAAG,IAET,MAAxCD,EAAqByN,kBACrBzN,EAAqByN,gBAAkB,GAEA,MAAvCzN,EAAqBwN,iBACrBxN,EAAqBwN,eAAiB,GAE1C,IAdmE,EAc3DtN,EAA+CF,EAA/CE,iBAAkBwN,EAA6B1N,EAA7B0N,yBACpBqrD,EAAoB,IAAIniD,IACxBoiD,EAA4B,IAAIpiD,IAhB6B,cAiB5CkiD,GAjB4C,IAiBnE,2BAA4C,KAAjC7lJ,EAAiC,QAChB,MAApBitF,GAA4C,MAAhBjtF,EAAStgC,KACrComL,EAAkB51J,IAAI8P,EAAStgC,KAKH,MAA5B+6H,GAA6D,MAAzBz6F,EAAS6I,cAC7Ck9I,EAA0B71J,IAAI8P,EAAS6I,eAzBoB,qCA4B/Di9I,EAAkBryK,KAAO,IACzB,EAAKiyK,IACD,IAAIH,GAAY7+K,EAAU+iH,EAAMwD,EAAkB64D,IAEtDC,EAA0BtyK,KAAO,IACjC,EAAKkyK,IAA6B,IAAIJ,GAAY7+K,EAAU+iH,EAAMgR,EAA0BsrD,IAjC7B,E,4BAoCjE1B,GAAOqB,GAAmBpB,GAAOqB,GAA2BF,I,IAAlE,WACI,OAAOt7L,KAAKw5L,M,2BAEhB,WACI,OAAOx5L,KAAKy5L,IAAe52D,kB,0BAE/B,WACI,OAAO7iI,KAAKy5L,IAAerpD,iB,2BAE/B,WACI,OAAOpwI,KAAKy5L,IAAeppD,kB,4BAE/B,WACI,OAAOrwI,KAAKu7L,M,oCAEhB,WACI,OAAOv7L,KAAKw7L,M,gCAEhB,SAAmBK,GAAM,oBACE77L,KAAKs7L,KADP,IACrB,2BAA8C,KAAnCzlJ,EAAmC,QAC1CA,EAAS+G,MAAM9jB,UAAU+iK,GACzBhmJ,EAASqE,QAAW2hJ,EAAM,IAHT,8BAKQ77L,KAAKy5L,IACb52D,gBAAkBg5D,EACvC77L,KAAK05L,Q,+BAET,SAAkBj6L,GAAO,oBACEO,KAAKs7L,KADP,IACrB,2BAA8C,SACjCv+I,UAAYt9C,GAFJ,8BAIQO,KAAKy5L,IACbrpD,eAAiB3wI,EACtCO,KAAK05L,Q,gCAET,SAAmBj6L,GAAO,oBACCO,KAAKs7L,KADN,IACtB,2BAA8C,SACjCx+I,UAAYr9C,GAFH,8BAIOO,KAAKy5L,IACbppD,gBAAkB5wI,EACvCO,KAAK05L,U,GA9EsBC,IAiG7BmC,GAAwBj5L,OAAO,wBAC/Bk5L,GAAiBl5L,OAAO,iBACxBm5L,GAAoBn5L,OAAO,oBAC3Bo5L,GAAmBp5L,OAAO,mBAI1Bq5L,G,kDACF,WAAY3/K,EAAU+iH,EAAMzpF,EAAU6lJ,GAAqB,MAKvD,GALuD,qBACvD,cAAMn/K,EAAUs5B,EAAU6lJ,IACrBtB,IAAQ,KACb,EAAKvkB,IAAM,KACX,EAAKG,IAAM,KACgB,MAAvB0lB,EACA,sBAEiC,MAAjC7lJ,EAAS+sF,uBACT/sF,EAAS+sF,qBAAuB,IAEpC,EAAKk5D,IAAyB,IAAIL,GAAqBl/K,EAAU+iH,EAAMzpF,EAAS+sF,qBAAsB84D,GACtG,IAZuD,EAY/ChrD,EAAqD76F,EAArD66F,cAAeC,EAAsC96F,EAAtC86F,iBAAkBG,EAAoBj7F,EAApBi7F,gBACnCqrD,EAAiB,IAAI3iD,IACrB4iD,EAAoB,IAAI5iD,IACxB6iD,EAAmB,IAAI7iD,IAf0B,cAgBhCkiD,GAhBgC,IAgBvD,2BAA4C,KAAjC7lJ,EAAiC,QAChCsI,EAAkCtI,EAAlCsI,UAAWJ,EAAuBlI,EAAvBkI,MAAOY,EAAgB9I,EAAhB8I,YACL,MAAjB+xF,GAAsC,MAAbvyF,GACzBg+I,EAAep2J,IAAIoY,GAEC,MAApBwyF,GAAqC,MAAT5yF,GAC5Bq+I,EAAkBr2J,IAAIgY,GAEH,MAAnB+yF,GAA0C,MAAfnyF,GAC3B09I,EAAiBt2J,IAAI4Y,IAzB0B,qCA4BnDw9I,EAAe7yK,KAAO,IACtB,EAAKyyK,IACD,IAAIX,GAAY7+K,EAAU+iH,EAAMoR,EAAeyrD,IAEnDC,EAAkB9yK,KAAO,IACzB,EAAK0yK,IACD,IAAIZ,GAAY7+K,EAAU+iH,EAAMqR,EAAkByrD,IAEtDC,EAAiB/yK,KAAO,IACxB,EAAK2yK,IACD,IAAIb,GAAY7+K,EAAU+iH,EAAMwR,EAAiBurD,IAtCF,E,sCAyC3D,WACI,OAAOr8L,KAAKy5L,IAAej1L,MAAQ,K,gCAEvC,WACI,OAAOxE,KAAK87L,M,yBAEhB,WACI,OAAO97L,KAAK+7L,M,4BAEhB,WACI,OAAO/7L,KAAKg8L,M,2BAEhB,WACI,OAAOh8L,KAAKi8L,M,0BAEhB,WACI,OAAOj8L,KAAKy5L,IAAe5oD,iB,+BAE/B,SAAkByrD,GAAK,oBACIt8L,KAAKw5L,KADT,IACnB,2BAAiD,SACpCv8I,SAASnkB,UAAUwjK,IAFb,8BAInBt8L,KAAKy5L,IAAe5oD,eAAiByrD,EACrCt8L,KAAK05L,U,GAjEUC,IAoEvBS,GAAO2B,GAAgBlmB,GAAKmmB,GAAmBhmB,GAAKimB,GAiBpD,IAAMM,GAAa15L,OAAO,aAMpB25L,G,WACF,WAAYz5B,GAA4C,WAAtBxmJ,EAAsB,uDAAX,aAAW,oBACpDvc,KAAKk2J,IAAM,GACX,IAAQ52B,EAAyByjC,EAAzBzjC,KAAM4hC,EAAmB6B,EAAnB7B,eACd5hC,EAAK5qF,UAAU3rC,SAAQ,SAAA8sC,GACnB,EAAK0mJ,IAAYp4L,KAAK,IAAI+3L,GAAS3/K,EAAU+iH,EAAMzpF,EAAUqrH,EAAengK,IAAI80C,Q,2CASxF,WACI,OAAO71C,KAAKu8L,Q,KAGpBrmC,GAAKqmC,GAgBL,IAAIE,GAAsD,SAAUnvB,EAAYjvK,EAAQU,EAAKqC,GAGpF,IAFL,IAA2Hq2B,EAAvHnZ,EAAIne,UAAU3B,OAAQ45B,EAAI9Z,EAAI,EAAIjgB,EAAkB,OAAT+C,EAAgBA,EAAOvC,OAAOwC,yBAAyBhD,EAAQU,GAAOqC,EAEvG7C,EAAI+uK,EAAW9uK,OAAS,EAAGD,GAAK,EAAGA,KAASk5B,EAAI61I,EAAW/uK,MAAI65B,GAAK9Z,EAAI,EAAImZ,EAAEW,GAAK9Z,EAAI,EAAImZ,EAAEp5B,EAAQU,EAAKq5B,GAAKX,EAAEp5B,EAAQU,KAASq5B,GAChJ,OAAO9Z,EAAI,GAAK8Z,GAAKv5B,OAAOC,eAAeT,EAAQU,EAAKq5B,GAAIA,GAE1DskK,GAAe75L,OAAO,eACtB85L,GAAS95L,OAAO,SAChB+5L,GAAY/5L,OAAO,YA0JrBg6L,GAAoD,SAAUvvB,EAAYjvK,EAAQU,EAAKqC,GAGlF,IAFL,IAA2Hq2B,EAAvHnZ,EAAIne,UAAU3B,OAAQ45B,EAAI9Z,EAAI,EAAIjgB,EAAkB,OAAT+C,EAAgBA,EAAOvC,OAAOwC,yBAAyBhD,EAAQU,GAAOqC,EAEvG7C,EAAI+uK,EAAW9uK,OAAS,EAAGD,GAAK,EAAGA,KAASk5B,EAAI61I,EAAW/uK,MAAI65B,GAAK9Z,EAAI,EAAImZ,EAAEW,GAAK9Z,EAAI,EAAImZ,EAAEp5B,EAAQU,EAAKq5B,GAAKX,EAAEp5B,EAAQU,KAASq5B,GAChJ,OAAO9Z,EAAI,GAAK8Z,GAAKv5B,OAAOC,eAAeT,EAAQU,EAAKq5B,GAAIA,GAI1D0kK,GAAyBhsL,KAAKif,GAAK,GAEnCgtK,GAAyB,CAC3B/d,MAAO,CAACxyB,GAAiBnC,GAAWyyC,GAAwB,SAC5Dvd,SAAU,CAAEC,KAAM,CAAC,QAEjBwd,GAAuBn6L,OAAO,uBAC9Bo6L,GAAoBp6L,OAAO,oBAC3Bq6L,GAAoBr6L,OAAO,oBAC3Bs6L,GAAkBt6L,OAAO,kBAkKzBmmJ,GAvtOkB,SAACA,GACrB,IAAIkN,EAAI2f,EAAIG,EAyHZ,OA1H4C,kDAGxC,aAAc,kCACV,eAAS71K,YACJ+1J,GAAM,IAAI/uI,IACf,EAAK0uJ,GAAM,SAACunB,GACRA,EAAUr0L,SAAQ,SAACs0L,GAGTA,aAAoBC,gBACJ,cAAlBD,EAASp3K,OACTo3K,EAASE,WAAWx0L,SAAQ,SAACw2G,GACzB,EAAKsyD,IAAatyD,MAEtB89E,EAASG,aAAaz0L,SAAQ,SAACw2G,GAC3B,EAAKuyD,IAAgBvyD,MAEzB,EAAKmvD,WAIjB,EAAKsH,GAAM,IAAIynB,iBAAiB,EAAK9rB,KAnB3B,EAH0B,qDAwBxC,WACI,0EACA,IAAK,IAAIpzK,EAAI,EAAGA,EAAIyB,KAAK+F,SAASvH,SAAUD,EACxCyB,KAAK6xK,IAAa7xK,KAAK+F,SAASxH,IAEpC,IAAQm/L,EAAat7L,KAAbs7L,SACQ,MAAZA,EACA19L,KAAK4xK,IAAW7B,QAAQ/vK,KAAM,CAAE29L,WAAW,IAG3C39L,KAAK4xK,IACD8rB,EAASE,gBAAgB59L,KAAMA,KAAK2xK,OAnCR,kCAsCxC,WACI,6EACA,IAAQ+rB,EAAat7L,KAAbs7L,SACQ,MAAZA,EACA19L,KAAK4xK,IAAWn7E,aAGhBinG,EAASG,kBAAkB79L,KAAK4xK,OA7CA,2BAsDxC,SAAc9vJ,GACV,IAAMoyI,EAAUl0J,KAAK0xK,IAAa3wK,IAAI+gB,EAAOtd,MAC9B,MAAX0vJ,IAGJA,EAAQ9G,eAAetrI,EAAOqtB,UAC9B+kH,EAAQ7G,aAAavrI,EAAOwiB,QAC5BtkC,KAAK0uK,SA7D+B,wCAsExC,SAA2BovB,EAAQC,GAC/B,IAAM3uI,EAAQpvD,KAAKyuK,IACXn1I,EAA0B81B,EAA1B91B,MAAOC,EAAmB61B,EAAnB71B,OAAQl7B,EAAW+wD,EAAX/wD,OACvBy1J,GAAcl5I,IAAIkjL,EAASxkK,EAAOykK,EAASxkK,GACtCxF,eAAe,GACfg7H,UAAU,GACf+E,GAAc/3I,IAAM,EACpB,IAAMk4I,EAAM7kG,EAAM6mG,2BAA2BnC,IAC7C,GAAW,MAAPG,EACA,OAAO,KAEX8d,GAAa52I,KAAK98B,EAAOmlC,aAAatL,SACtC,IAAMiX,EAAW8/H,GAAWhb,EAAI9kH,SAAS/L,aAAa2uI,KAGtD,OAFAC,GAAmBj7H,gBAAgBg7H,IAE5B,CAAE5iI,SAAUA,EAAU7K,OADd2qI,GAAWhb,EAAI3vH,OAAO0e,kBAAkBgvH,QApFnB,MAuFtC9b,EAAKwb,GAAamE,EAAKlE,GAAmBqE,EAAKpE,GAAWC,IAvFpB,MAuFxC,SAA0EtyD,GACtE,GAAMA,aAAgBr1F,aACe,IAAjCq1F,EAAKzwB,KAAKthF,QAAQ,WADtB,CAIA,IAAI0mJ,EAAUl0J,KAAK0xK,IAAa3wK,IAAIw+G,EAAKzwB,MAC1B,MAAXolE,EACAA,EAAQ8pC,aAGR9pC,EAAU,IAAIlH,GAAQ,CAClBxoJ,KAAM+6G,EAAKzwB,KACX3/C,SAAUowE,EAAK2uC,QAAQ/+G,SACvB7K,OAAQi7E,EAAK2uC,QAAQ5pH,SAEzBtkC,KAAK0xK,IAAa92J,IAAI2kG,EAAKzwB,KAAMolE,GACjCl0J,KAAKyuK,IAAQwvB,WAAW/pC,IAE5Bl0J,KAAKyuK,IAAQve,SAAU,KAzGa,KA2GvC4hB,GA3GuC,MA2GxC,SAAiBvyD,GACb,GAAMA,aAAgBr1F,YAAtB,CAGA,IAAMgqI,EAAUl0J,KAAK0xK,IAAa3wK,IAAIw+G,EAAKzwB,MACtColE,IAGDA,EAAQgqC,cACRl+L,KAAKyuK,IAAQ0vB,cAAcjqC,GAC3Bl0J,KAAK0xK,IAAat+G,OAAOmsD,EAAKzwB,OAElC9uF,KAAKyuK,IAAQve,SAAU,QAvHa,GAEDlH,GAqtOpBo1C,CAxUH,SAACp1C,GACrB,IAAIkN,EAAI2f,EAAIG,EACNqoB,EAFsC,kDAGxC,aAAc,kCACV,eAASl+L,YACJ+1J,QAAM3zJ,EACX,EAAKszK,GAAM,KACX,EAAKG,GAAM,GACX,EAAKsoB,iBAAc/7L,EACnB,EAAKg8L,YAAc,QACnB,EAAKnvJ,MAAQ,QAPH,EAH0B,uCAcxC,WACI,OAAOpvC,KAAK28L,MAfwB,6BAiBxC,WACI,OAAO38L,KAAK48L,MAlBwB,qBAoBxC,SAAQ5zK,GAAmB,WAEvB,GADA,+DAAcA,GACVA,EAAkBR,IAAI,eAAgB,CACtC,IAAM+4I,EAAWvhK,KAAK48L,IAChB57B,EAAYhhK,KAAK08L,IACf4B,EAAgBt+L,KAAhBs+L,YACFn9B,EAAeI,EAASi9B,WAAU,SAACx+K,GAAD,OAAOA,IAAMs+K,KACrD,GAAiB,MAAbt9B,GAAqBG,EAAe,EACpC,OAEJ,IARsC,EAQhC5kJ,EAAW,WACb,EAAKmyJ,OAEHtN,EAAmBJ,EAAU+B,qBAAqB07B,YAAYt9B,EAAc5kJ,GAClF,EAAiCykJ,EAAU+B,qBAAnCzjC,EAAR,EAAQA,KAAM4hC,EAAd,EAAcA,eAZwB,cAalBE,GAbkB,IAatC,2BAAsC,KAA3Bv1J,EAA2B,QAC5BgqC,EAAWypF,EAAK5qF,UAAU7oC,GAChC7L,KAAK28L,IAAQjoJ,UAAU7oC,GAAS,IAAIqwL,GAAS3/K,EAAU+iH,EAAMzpF,EAAUqrH,EAAengK,IAAI80C,KAfxD,+BAkB1C,GAAI7sB,EAAkBR,IAAI,gBACtBQ,EAAkBR,IAAI,SAAU,CAChC,IAAQ6nI,EAAmBrwJ,KAAKyuK,IAAxBpe,eACFkuC,EAAch0C,GAAiBvqJ,KAAKu+L,aAAa,GAClDzzC,MACC4zC,EAAO7xC,GAAc0xC,EAAY,IAAIj0C,OACrCq0C,EAAQ9xC,GAAc0xC,EAAY,IAAIj0C,OACtC4I,EAAMrG,GAAc0xC,EAAY,IAAIj0C,OAC1C+F,EAAevxH,WAAW2D,aAAa,IAAIiO,GAAMiuJ,EAAOzrC,EAAKwrC,EAAM,QACnE,IAAMtvJ,EAAQm7G,GAAiBvqJ,KAAKovC,OAAO,GACtC07G,MACLuF,EAAejhH,MAAMx0B,IAAIw0B,EAAM,GAAGk7G,OAAQl7G,EAAM,GAAGk7G,OAAQl7G,EAAM,GAAGk7G,QACpEtqJ,KAAKyuK,IAAQ5c,oBACb7xJ,KAAKyuK,IAAQmwB,eACb5+L,KAAK4xJ,IAAWgY,WAAWrR,gBAC3Bv4J,KAAK0uK,SAvD2B,MA0DtCxY,EAAKymC,GAAQ9mB,EAAK6mB,GAAc1mB,EAAK4mB,GAAWjuB,IA1DV,MA0DxC,WAAmE,WAC/D,qCAAMA,GAAN,iBACA3uK,KAAK48L,IAAa,GAClB,IAAQiC,EAAgB7+L,KAAKyuK,IAArBowB,YACR,GAAmB,MAAfA,EAAqB,CACrB,IAAQ97B,EAAyB87B,EAAzB97B,qBACoB,MAAxBA,GACA87B,IAAgB7+L,KAAK08L,MACrB18L,KAAK28L,IAAU,IAAIH,GAAMz5B,GAAsB,WAC3C,EAAK2L,UAKb,IAAQtkC,EAAmBy0D,EAAY5rJ,SAA/Bm3F,eACR,GAAsB,MAAlBA,EAAwB,CACxB,IAAMrnE,EAAYqnE,EAAc,uBACf,MAAbrnE,IACA/iE,KAAK48L,IACD75H,EAAUw+F,SAAShsJ,KAAI,SAAAupL,GAAO,OAAIA,EAAQt6L,QAC9CxE,KAAK8xJ,cAAc,iBAI/B9xJ,KAAK08L,IAAgBmC,EAErB7+L,KAAK87B,cAAc,IAAIsqE,YAAY,wBApFC,gEAuFxC,WAAkB//F,GAAlB,eAAAsE,EAAA,6DACUykD,EAAQpvD,KAAKyuK,IADvB,kBAEW,IAAIzsK,QAAJ,uCAAY,WAAOR,GAAP,mBAAAmJ,EAAA,sDAET+T,EAAO,CACT+zK,QAAQ,EACRE,aAAa,EACbjrH,eAAgBziC,IAChB85J,yBAAyB,EACzBjM,yBAAyB,EACzBD,aAAa,GAEjBh0L,OAAOyJ,OAAOoW,EAAMrY,GAEpBqY,EAAKs0B,WAAaoc,EAAMpc,WACxBt0B,EAAKk0K,mBAAoB,EACnB9xH,EAAS1R,EAAM0R,OACjBnuB,GAAU,EAEA,MAAVmuB,IACAnuB,EAAUmuB,EAAOnuB,QACjBmuB,EAAOnuB,SAAU,IAEJ,IAAIu+I,IACZt0K,MAAMwyC,EAAMihG,gBAAgB,SAAC/wB,GAClC,OAAO99H,EAAQ,IAAIq2G,KAAK,CAACn5F,EAAK+zK,OAASnzD,EAAOrgH,KAAKC,UAAUogH,IAAQ,CACjEr5G,KAAMvH,EAAK+zK,OAAS,2BAChB,wBAET/zK,GACW,MAAVoiD,IACAA,EAAOnuB,QAAUA,GA7BN,4CAAZ,wDAFX,gDAvFwC,4DAEDq2G,GAkI3C,OATAyzC,GAAa,CACT57L,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,kBACrC63K,EAA6Bl/L,UAAW,mBAAe,GAC1Ds9L,GAAa,CACT57L,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,iBACrC63K,EAA6Bl/L,UAAW,mBAAe,GAC1Ds9L,GAAa,CACT57L,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,WACrC63K,EAA6Bl/L,UAAW,aAAS,GAC7Ck/L,EAoMgCW,CAjKtB,SAACh2C,GAClB,IAAIkN,EAAI2f,EAAIG,EACNipB,EAFmC,kDAGrC,aAAc,kCACV,eAAS9+L,YACJ++L,YAAa,EAClB,EAAKC,gBAfiB,IAgBtB,EAAKC,kBAAoB,OACzB,EAAKlpC,GAAMmE,YAAY30C,MACvB,EAAKmwD,GAAM,EACX,EAAKG,GAAM,SAAC5kK,GACH,EAAK8tL,YAGkB,qBAAxB9tL,EAAMi1F,OAAO99F,SACb,EAAKy0L,IAAwB3iC,YAAY30C,QAZvC,EAHuB,qDAmBrC,WACI,0EACA1lH,KAAKsS,iBAAiB,gBAAiBtS,KAAKm9L,KAC5Cn9L,KAAKg9L,IAAwB3iC,YAAY30C,QAtBR,kCAwBrC,WACI,6EACA1lH,KAAKuS,oBAAoB,gBAAiBvS,KAAKm9L,KAC/Cn9L,KAAKg9L,IAAwB3iC,YAAY30C,QA3BR,qBA6BrC,SAAQ18F,GACJ,+DAAcA,GACVA,EAAkBR,IAAI,gBACtBxoB,KAAKg9L,IAAwB3iC,YAAY30C,SAhCZ,MAmCnCwwC,EAAK8mC,GAAsBnnB,EAAKonB,GAAmBC,IAnChB,MAmCrC,SAAyE1jL,GACrExZ,KAAKi9L,IAAqBzjL,EAAM,KApCC,KAsCpCoxJ,GAtCoC,MAsCrC,SAAQv4G,EAAMtgD,GAEV,GADA,qCAAM64J,GAAN,gBAAav4G,EAAMtgD,GACd/R,KAAKk/L,YAAel/L,KAAKgvK,QAC1BhvK,KAAK4xJ,IAAWl7D,aADpB,CAIA,IAAM2oG,EAAgBvuL,KAAKiE,IAAIhD,EAAOsgD,EAAOryD,KAAKg9L,IAAwBh9L,KAAKm/L,iBAC3EE,EAAgB,IAChBr/L,KAAKyuK,IAAQvb,IAAMlzJ,KAAK22J,kBACpB32J,KAAKi9L,IAAqBoC,EAAgB,SA/CjB,6BAkDrC,WACI,OAAOr/L,KAAKyuK,IAAQvb,MAnDa,oCAqDrC,WAAkC,IAAXt6H,EAAW,uDAAH,EAC3B54B,KAAKyuK,IAAQvb,IAAMt6H,MAtDc,GAEDowH,GAkExC,OAXAgtB,EAAKmnB,GACLN,GAAW,CACPh8L,EAAS,CAAEolB,KAAMC,QAASM,UAAW,iBACtCy4K,EAA0B9/L,UAAW,kBAAc,GACtD09L,GAAW,CACPh8L,EAAS,CAAEolB,KAAMG,OAAQI,UAAW,uBACrCy4K,EAA0B9/L,UAAW,uBAAmB,GAC3D09L,GAAW,CACPrjL,GAAM,CAAE8lK,WAAYyd,GAAwB3Y,cAAe8Y,KAC3Dr8L,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,yBACrCy4K,EAA0B9/L,UAAW,yBAAqB,GACtD8/L,EA6FgDK,CAlzHlC,SAACt2C,GACtB,IAAIkN,EAAI2f,EAAIG,EACNupB,EAFuC,kDAGzC,aAAc,kCACV,eAASp/L,YACJq/L,iBAAmB,KACxB,EAAKC,YAAc,KACnB,EAAKhvC,gBAfgB,EAgBrB,EAAKC,eAfe,EAgBpB,EAAKC,SAfQ,EAgBb,EAAKuF,GAAM,KACX,EAAK2f,GAAM,KACX,EAAKG,GAAM,SAAC5kK,GACJA,EAAMnJ,UAAN,gBACA,EAAKqmL,OAXH,EAH2B,qDAkBzC,WACI,0EACAtuL,KAAK4xJ,IAAWh7C,OAAOtkG,iBAAiB,UAAWtS,KAAKwuL,OApBnB,kCAsBzC,WACI,6EACAxuL,KAAK4xJ,IAAWh7C,OAAOrkG,oBAAoB,UAAWvS,KAAKwuL,OAxBtB,qBA0BzC,SAAQxlK,GACJ,+DAAcA,GACVA,EAAkBR,IAAI,qBACtBxoB,KAAKyuK,IAAQxc,mBAtCR,GAsC2BjyJ,KAAKywJ,iBACrCzwJ,KAAK0uK,OAEL1lJ,EAAkBR,IAAI,oBACtBxoB,KAAKyuK,IAAQixB,kBAAkB1/L,KAAK0wJ,gBACpC1wJ,KAAK0uK,OAEL1lJ,EAAkBR,IAAI,cACtBxoB,KAAKyuK,IAAQ9d,SAAW3wJ,KAAK2wJ,SAC7B3wJ,KAAK0uK,QAEJ1lJ,EAAkBR,IAAI,qBACvBQ,EAAkBR,IAAI,iBACtBxoB,KAAK+uK,OACL/uK,KAAKsuL,QA3C4B,MA8CvCp4B,EAAKk4B,GAAwBvY,EAAK0Y,GAA0BvY,EAAKwY,GAAY7f,IA9CtC,MA8CzC,WACI,qCAAMA,GAAN,iBACoC,MAAhC3uK,KAAKouL,KACLpuL,KAAKquL,IAAsBruL,KAAKouL,OAjDC,KAoDlCE,GApDkC,6CAoDzC,+CAAA3jL,EAAA,yDACY80L,EAAkCz/L,KAAlCy/L,YAAaD,EAAqBx/L,KAArBw/L,iBACiB,MAAlCx/L,KAAKuuL,MACLvuL,KAAKuuL,MACLvuL,KAAKuuL,IAA4B,MAGjB,OADZ1kB,EAAiB7pK,KAAK4xJ,IAAtBiY,cANZ,0EAWiD,IAAI7nK,QAAJ,uCAAY,WAAOR,EAASC,GAAhB,eAAAkJ,EAAA,6DAC3Cg1L,EAAe91B,EAAa+1B,gCAAgCl4C,GAAe+3C,GAAcD,EAAkB,CAAE13B,gBAAiB,EAAK8G,MACzI,EAAK2f,IAA4B,kBAAM9sL,EAAOk+L,IAFG,KAGjDn+L,EAHiD,SAGnCm+L,EAHmC,6EAAZ,yDAXjD,gBAWgB93B,EAXhB,EAWgBA,eAAgBY,EAXhC,EAWgCA,OAKlB3rF,EAAc+qF,EAAe5pI,QAI/Bj+B,KAAKyuK,IAAQnuG,WAHH,MAAVmoG,EAG0BA,EAAOx1H,SAASjuC,MACtC83E,EAAY7pC,SAASjuC,IACrB83E,EACA2rF,EAGsB,KAE9BzoK,KAAKquL,IAAsBxmB,EAAe5pI,SAC1Cj+B,KAAKyuK,IAAQ3yI,cAAc,CAAE7V,KAAM,kBA7B3C,uDAgCY,gBAA0Bza,OAhCtC,uBAiCYxL,KAAKquL,IAAsB,MAjCvC,+DApDyC,2DA8FxCA,GA9FwC,MA8FzC,SAAuBxmB,GACnB7nK,KAAKouL,IAA0BvmB,EAC/B7nK,KAAKyuK,IAAQ3xF,YAAc98E,KAAKouL,IAChCpuL,KAAK87B,cAAc,IAAIsqE,YAAY,uBACnCpmG,KAAK0uK,UAlGgC,GAED1lB,GAoH5C,OAjBAmlC,GAAa,CACTttL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,uBACrC+4K,EAA8BpgM,UAAW,wBAAoB,GAChEgvL,GAAa,CACTttL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,kBACrC+4K,EAA8BpgM,UAAW,mBAAe,GAC3DgvL,GAAa,CACTttL,EAAS,CAAEolB,KAAMG,OAAQI,UAAW,sBACrC+4K,EAA8BpgM,UAAW,uBAAmB,GAC/DgvL,GAAa,CACTttL,EAAS,CAAEolB,KAAMG,OAAQI,UAAW,qBACrC+4K,EAA8BpgM,UAAW,sBAAkB,GAC9DgvL,GAAa,CACTttL,EAAS,CACLolB,KAAMG,UAEXm5K,EAA8BpgM,UAAW,gBAAY,GACjDogM,EA4rH6DM,CAhxIlD,SAAC72C,GACnB,IAAIkN,EAAI2f,EAAIG,EAAIhyK,EAAIX,EAAIyoK,EAAIC,EAAIC,EAAIC,EAAIC,EAAI4zB,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIl8L,EAC9Dm8L,EAFoC,kDAGtC,aAAc,kCACV,eAASjgM,YACJkgM,gBAAiB,EACtB,EAAKC,YAActV,GACnB,EAAKuV,aAAetV,GACpB,EAAKuV,YAActV,GACnB,EAAKuV,eAAiB,OACtB,EAAKC,eAAiB,OACtB,EAAKC,eAAiB,OACtB,EAAKC,eAAiB,OACtB,EAAKC,2BAjI4B,IAkIjC,EAAKC,uBAAyBvV,GAC9B,EAAKwV,kBAAoBzV,GACzB,EAAKxG,kBAAoB0G,GACzB,EAAKwV,iBAAmB,EACxB,EAAKjc,YAAc0G,GACnB,EAAKwV,aAAc,EACnB,EAAKC,mBAAqB53C,GAC1B,EAAK63C,OAAS,SACd,EAAKjrC,GAAM,EAAK3E,WAAW/8I,cAAc,uBACzC,EAAKqhK,GAAM,EAAKtkB,WAAW/8I,cAAc,6CACzC,EAAKwhK,GAAM/wI,IACX,EAAKjhC,GAAM,EACX,EAAKX,GAAM4hC,IACX,EAAK6mI,IAAM,EACX,EAAKC,IAAM,EACX,EAAKC,GAAM,IAAIqZ,GAAe,EAAK5W,IAAQtrI,OAAQ,EAAKqrI,KACxD,EAAKvC,GAAM,EACX,EAAKC,GAAM,IAAI1gD,GACf,EAAKs0E,IAAM,EACX,EAAKC,IAAM,EACX,EAAKC,IAAM,EACX,EAAKC,GAAM,WACP,IAAMhtD,EAAQ,EAAKu7B,IACdhoH,SAAS,EAAK+mI,OACf,EAAKA,IAAgBlzB,YAAY30C,OAOrC,IAAMyqD,EAAY,EAAKhC,IACnBl7B,EAAMx+H,aAAa,gBAAkB07J,GACrCl9B,EAAMhrH,aAAa,aAAckoJ,GAEjC,EAAK4wB,oBAAsBzV,IAC1B,EAAK8B,MACN,EAAKD,KAAwB,IAGrC,EAAK+S,GAAM,WACH,EAAKa,oBAAsBzV,KAG/B,EAAK6B,KAAwB,EAC7B,EAAKT,IAAgBv/B,UAAUp5G,OAAO,WACtC,EAAKs5I,IAA6BpoJ,IAClC,EAAKsoJ,IAAgBtoJ,MAEzB,EAAKk7J,GAAM,YAAgB,IAAb53L,EAAa,EAAbA,OACV,EAAKskL,MACL,EAAKne,MACDnmK,IAAW68K,KACX,EAAKgI,KAAsB,EAC3B,EAAKR,OAET,EAAK9wJ,cAAc,IAAIsqE,YAAY,gBAAiB,CAAEC,OAAQ,CAAE99F,cAEpE,EAAKtE,GAAM,SAACmN,GACW,yBAAfA,EAAM6U,KACN,EAAKsoJ,IAAYphB,UAAUpnH,IAAI,oBAG/B,EAAKwoI,IAAYphB,UAAUp5G,OAAO,qBA1EhC,EAHwB,kDAiFtC,WACI,MAA+B/zC,KAAKwtL,IACpC,MAAO,CACH50J,MAFJ,EAAQA,MAGJ8L,IAHJ,EAAeA,IAIXD,OAJJ,EAAoBA,OAKhBh8B,SAJG,WAKC,gBAAUzI,KAAK44B,MAAf,eAA2B54B,KAAK0kC,IAAhC,eAA0C1kC,KAAKykC,OAA/C,SAxF0B,6BA4FtC,WACI,OAAOwqI,GAAWjvK,KAAK4xJ,IAAWl7D,aAAe12F,KAAK4xJ,IAAWgY,WAAWvrK,OACxE2B,KAAKyuK,IAAQ1c,eA9FiB,4BAgGtC,WACI,OAAO/xJ,KAAKysL,IAAW2U,mBAjGW,mCAoGtC,WACI,OAAOphM,KAAKysL,IAAWpmL,QAAQu+K,qBArGG,mCAuGtC,WACI,OAAO5kL,KAAKysL,IAAWpmL,QAAQw+K,qBAxGG,8BA0GtC,WACI7kL,KAAKytL,KAAe,EACpBztL,KAAK8xJ,cAAc27B,IAAa,KA5GE,oCA8GtC,WACIztL,KAAKstL,IAAqB,EAC1BttL,KAAKqtL,IAA6BpoJ,IAClCjlC,KAAKotL,KAAsB,EAC3BptL,KAAKmtL,IACDntL,KAAK+gM,oBAAsBzV,IACvBtrL,KAAKqgM,iBApHqB,+BAsHtC,WACI,0EACArgM,KAAKysL,IAAWn6K,iBAAiB,SAAUtS,KAAKitL,KAChDjtL,KAAKysL,IAAWn6K,iBAAiB,uBAAwBtS,KAAKktL,KAC9DltL,KAAKysL,IAAWn6K,iBAAiB,qBAAsBtS,KAAKktL,OA1H1B,kCA4HtC,WACI,6EACAltL,KAAKysL,IAAWl6K,oBAAoB,SAAUvS,KAAKitL,KACnDjtL,KAAKysL,IAAWl6K,oBAAoB,uBAAwBvS,KAAKktL,KACjEltL,KAAKysL,IAAWl6K,oBAAoB,qBAAsBvS,KAAKktL,OAhI7B,qBAkItC,SAAQlkK,GAAmB,WACvB,+DAAcA,GACd,IAAMq4K,EAAWrhM,KAAKysL,IAChBx5C,EAAQjzI,KAAKwuK,IAqCnB,GApCIxlJ,EAAkBR,IAAI,oBAClBxoB,KAAKqgM,gBACLgB,EAASC,oBACLthM,KAAK+gM,oBAAsBzV,KAC3BtrL,KAAKmtL,KAAwB,GAEjCl6C,EAAM3gI,iBAAiB,QAAStS,KAAKgtL,KACrC/5C,EAAM3gI,iBAAiB,OAAQtS,KAAK+sL,OAGpC95C,EAAM1gI,oBAAoB,QAASvS,KAAKgtL,KACxC/5C,EAAM1gI,oBAAoB,OAAQvS,KAAK+sL,KACvCsU,EAASE,qBACTvhM,KAAK4sL,QAGT5jK,EAAkBR,IAAI,iBACtB64K,EAASJ,YAAcjhM,KAAKihM,aAE5Bj4K,EAAkBR,IAAI,YACtBxoB,KAAKyuK,IAAQ5d,YAA8B,UAAhB7wJ,KAAKmhM,SAEhCn4K,EAAkBR,IAAI,sBACtBQ,EAAkBR,IAAI,mBACtBQ,EAAkBR,IAAI,UAClBxoB,KAAK+gM,oBAAsBzV,IAC3BtrL,KAAKqgM,iBAAmBrgM,KAAKotL,IAC7BptL,KAAKmtL,KAAwB,EAG7BntL,KAAK4sL,OAGT5jK,EAAkBR,IAAI,2BACtBxoB,KAAK0sL,IAAgBv/B,UAAUq0C,OAAO,SAAUxhM,KAAK8gM,yBAA2BvV,IAEhFviK,EAAkBR,IAAI,qBAAsB,CAC5C,IAAMs8J,EAAoB9kL,KAAK8kL,kBAC/Buc,EAASI,aAAa,CAAE3c,sBAE5B,GAAI97J,EAAkBR,IAAI,eAAgB,CACtC,IAAMu8J,EAAc/kL,KAAK+kL,YACzBsc,EAASI,aAAa,CAAE1c,gBAExB/7J,EAAkBR,IAAI,sBACtB64K,EAAS/b,YAActlL,KAAKghM,kBAE5Bh4K,EAAkBR,IAAI,wBACtB64K,EAASK,mBAAmB1hM,KAAKkhM,oBACjClhM,KAAKyuK,IAAQkzB,yBAAyB3hM,KAAKkhM,sBAErB,IAAtBlhM,KAAKytL,KACLzrL,QAAQR,UAAUS,MAAK,WACnBo/L,EAASnZ,aACT,EAAKzZ,IAAQyZ,aACb,EAAKuF,KAAe,OA7LM,kEAiMtC,kCAAA9iL,EAAA,6DACUykD,EAAQpvD,KAAKyuK,IACbmzB,EAAuBxyI,EAAMohG,kBAFvC,SAGUxwJ,KAAK8xJ,cAAc,gBAH7B,cAII1iG,EAAM4iG,cAA8B,UAAhBhyJ,KAAKmhM,OAAqB/xI,EAAM2iG,iBAAcxvJ,GAClE6sD,EAAMuiG,aACAkwC,EAAuBzyI,EAAMohG,kBAC7BljG,EAAOttD,KAAKysL,IAAW2U,iBAAmBQ,EAChD5hM,KAAK2rL,IAA4BkW,EAAuBv0I,EACxDttD,KAAK2tL,KAAqB,EAC1B3tL,KAAK8xJ,cAAc,kBACnB9xJ,KAAK8xJ,cAAc,eACnB9xJ,KAAK8xJ,cAAc,kBACnB9xJ,KAAK8xJ,cAAc,kBAbvB,UAcU9xJ,KAAK8xJ,cAAc,eAd7B,iDAjMsC,4DAiNpCoE,EAAKw2B,GAAgB7W,EAAK8W,GAA0B3W,EAAKuX,GAAcvpL,EAAKspL,GAAmBjqL,EAAKgqL,GAA2BvhB,EAAKshB,GAAoBrhB,EAAKohB,GAAsBnhB,EAAKygB,GAAWxgB,EAAK0f,GAA0Bzf,EAAKshB,GAAgBsS,EAAKrS,GAAasS,EAAKrS,GAAcsS,EAAKrS,GAAmBE,IAjNhR,MAiNtC,SAAyUr0K,GACrUxZ,KAAKysL,IAAWxE,eAA0B,IAAXzuK,EAAM,GAAW1I,KAAKif,MAlNnB,KAoNrC69J,GApNqC,MAoNtC,SAAmBp0K,GACf,GAAIxZ,KAAK2tL,IAAoB,CACzB,MAAuB3tL,KAAK66J,iBAApBjiI,EAAR,EAAQA,MAAO8L,EAAf,EAAeA,IACflrB,EAAM,GAAKof,EACXpf,EAAM,GAAKkrB,EACX1kC,KAAK2tL,KAAqB,EAE9B3tL,KAAKysL,IAAWzE,SAASxuK,EAAM,GAAIA,EAAM,GAAIA,EAAM,MA3NjB,KA6NrCu0K,GA7NqC,MA6NtC,SAAsBv0K,GAClBxZ,KAAKysL,IAAWgV,aAAa,CACzB/c,sBAAuBlrK,EAAM,GAC7BgrK,kBAAmBhrK,EAAM,GACzB8qK,cAAe9qK,EAAM,KAEzBxZ,KAAK8hM,qBAnO6B,KAqOrC9T,GArOqC,MAqOtC,SAAsBx0K,GAClBxZ,KAAKysL,IAAWgV,aAAa,CACzB9c,sBAAuBnrK,EAAM,GAC7BirK,kBAAmBjrK,EAAM,GACzB+qK,cAAe/qK,EAAM,KAEzBxZ,KAAK8sL,IAAwBtzK,EAAM,IACnCxZ,KAAK8hM,qBA5O6B,KA8OrC7T,GA9OqC,MA8OtC,SAAsBz0K,GAClBxZ,KAAKysL,IAAWgV,aAAa,CAAE7c,mBAA+B,IAAXprK,EAAM,GAAW1I,KAAKif,KACzE/vB,KAAK8hM,qBAhP6B,KAkPrC5T,GAlPqC,MAkPtC,SAAsB10K,GAClBxZ,KAAKysL,IAAWgV,aAAa,CAAE5c,mBAA+B,IAAXrrK,EAAM,GAAW1I,KAAKif,KACzE/vB,KAAK8hM,qBApP6B,KAsPrChU,GAtPqC,MAsPtC,SAAoBt0K,GAChB,kBAAkBA,EAAlB,GAAOsC,EAAP,KAAUC,EAAV,KAAaugB,EAAb,KACAt8B,KAAKyuK,IAAQlU,UAAUz+I,EAAGC,EAAGugB,GAC7Bt8B,KAAK4xJ,IAAWgY,WAAW7W,iBAzPO,KA2PrC6X,GA3PqC,MA2PtC,SAAQv4G,EAAMtgD,GAEV,GADA,qCAAM64J,GAAN,gBAAav4G,EAAMtgD,IACf/R,KAAK4xJ,IAAWl7D,cAAiB12F,KAAKgvK,MAA1C,CAGA,IAAMtpD,EAAM20C,YAAY30C,MACxB,GAAI1lH,KAAKmtL,IAAuB,CAC5B,IAAM4U,EAAgB/hM,KAAK+gM,oBAAsBzV,GAC7CtrL,KAAKouK,IACLpuK,KAAKutL,IACLvtL,KAAKw4G,QACLkN,EAAMq8E,EAAgB/hM,KAAK6gM,6BAC3B7gM,KAAKwuK,IAAmBvmJ,aAAa,aA1X9B,yDA2XPjoB,KAAKmtL,KAAwB,EAC7BntL,KAAKqtL,IAA6B3nE,EAClC1lH,KAAK0sL,IAAgBv/B,UAAUpnH,IAAI,YAG3C,GAAIygB,SAASxmD,KAAKqtL,MACdrtL,KAAK8gM,yBAA2BvV,GAA+B,CAC/D,IAAMn8H,EAAQpvD,KAAKyuK,IACbuzB,GAAkBt8E,EAAM1lH,KAAKqtL,KA3ZrB,IA4ZV,EACE5vK,EAASqtK,GAAOkX,GAChB9nJ,EAAU6wI,GAAKiX,GAErB,GADAhiM,KAAK2sL,IAA0BnzK,MAAM0gC,QAArC,UAAkDA,GAC9Cz8B,IAAWzd,KAAKstL,IAAoB,CACpC,IAAMt0F,EAAUv7E,EAAS2xC,EAAM91B,MAAQ,IACjCuvJ,GAAcprK,EAASzd,KAAKstL,KAAsBx8K,KAAKif,GAAK,GAClE/vB,KAAK2sL,IAA0BnzK,MAAMu7E,UAArC,qBACkBiE,EADlB,OAEAh5F,KAAKysL,IAAWjD,YAAYX,EAAY,EAAG,GAC3C7oL,KAAKstL,IAAqB7vK,GAGlCzd,KAAKysL,IAAWxjK,OAAOopC,EAAMtgD,GAC7B/R,KAAKyuK,IAAQ1b,aAAahhJ,MA/RQ,KAiSrC66K,GAjSqC,MAiStC,WAEI5sL,KAAKmtL,KAAwB,EAC7BntL,KAAK0sL,IAAgBv/B,UAAUp5G,OAAO,WACtC/zC,KAAKqtL,IAA6BpoJ,MArSA,KA2SrC6nJ,GA3SqC,MA2StC,SAAyBroJ,GACrB,IAAQ6rH,EAAwBtwJ,KAAKyuK,IAA7Bne,oBAGFhgH,EAAM,EAFUx/B,KAAKkE,IAAIs7I,EAAqB7rH,GAGpDzkC,KAAKysL,IAAWwV,cAFH,EAEuB3xJ,KAhTF,KAkTrCu8I,GAlTqC,MAkTtC,WAMI,MAA2C7sL,KAAKwtL,IAAjC0U,EAAf,EAAQtpK,MAAuBupK,EAA/B,EAA0Bz9J,IAC1B,EAAuB1kC,KAAKysL,IAAW2V,mBAAmBpiM,KAAKwtL,KAAvD50J,EAAR,EAAQA,MAAO8L,EAAf,EAAeA,IACT46E,EAAWt/G,KAAKspL,cAEtB,GAAgB,MAAZhqE,GAAoBA,EAASiqE,gBAAkBvpL,KAAM,CACrD,IAAMqiM,GAAyB,EAAIvxL,KAAKmgB,OAAQixK,EAAY1V,GAAOD,IAAcF,KAAY,EACvFiW,GAAqB,EAAIxxL,KAAKmgB,OAAQ2H,EAAQ4zJ,GAAOD,IAAcF,KAAY,EAC/EkW,EAAkBzxL,KAAKmgB,MAAMkxK,EAAU7V,IACvCkW,EAAc1xL,KAAKmgB,MAAMyT,EAAM4nJ,IACrC,GAAIgW,IAAsBD,GACtBG,IAAgBD,EAAiB,CACjC,IAAME,EAAyBrX,GAA0BkX,GAEnDnyB,EAAY,mBAAH,OADUkb,GAAoBmX,IAC9B,OAAyCC,GACxDziM,KAAKwuK,IAAmBvmJ,aAAa,aAAckoJ,OAtUzB,KA0UrCzV,GA1UqC,MA0UtC,SAAYtpJ,GACR,IAAMiwL,EAAWrhM,KAAKysL,IAChBmV,EAAuB5hM,KAAKyuK,IAAQje,kBAG1C,qCAAMkK,GAAN,gBAAiBtpJ,GACjB,IAAMywL,EAAuB7hM,KAAKyuK,IAAQje,kBACpCljG,EAAO+zI,EAASD,iBAAmBQ,EACzC5hM,KAAK2rL,IAA4BkW,EAAuBv0I,EACxD+zI,EAASqB,aAAa1iM,KAAKyuK,IAAQphH,QACnCrtD,KAAK8xJ,cAAc,iBAAkB9xJ,KAAK4gM,gBAC1C5gM,KAAK8xJ,cAAc,cAAe9xJ,KAAKwgM,aACvCxgM,KAAK8hM,qBAtV6B,KAwVrCnzB,GAxVqC,MAwVtC,WACI,qCAAMA,GAAN,iBACA,IAAQne,EAAsBxwJ,KAAKyuK,IAA3Bje,kBACRxwJ,KAAK2rL,IAA4Bn7B,EAC7BxwJ,KAAK0tL,IACL1tL,KAAK2tL,KAAqB,EAG1B3tL,KAAK0tL,KAAgB,EAEzB1tL,KAAK8xJ,cAAc,iBAAkB9xJ,KAAK4gM,gBAC1C5gM,KAAK8xJ,cAAc,cAAe9xJ,KAAKwgM,aACvCxgM,KAAK8xJ,cAAc,iBAAkB9xJ,KAAKygM,gBAC1CzgM,KAAK8xJ,cAAc,iBAAkB9xJ,KAAK0gM,gBAC1C1gM,KAAK8xJ,cAAc,cAAe9xJ,KAAKsgM,aACvCtgM,KAAK8xJ,cAAc,eAAgB9xJ,KAAKugM,cACxCvgM,KAAK8hM,uBAxW6B,GAED94C,GA4bzC,OAnFAi3C,EAAKjT,GAAUkT,EAAKnT,GAASoT,EAAKlT,GAAWhpL,EAAKipL,GAClDrC,GAAa,CACThqL,EAAS,CAAEolB,KAAMC,QAASM,UAAW,qBACtC45K,EAA2BjhM,UAAW,sBAAkB,GAC3D0rL,GAAa,CACTrxK,GAAM,CACF8lK,WAAYwM,GACZtI,gBAAgB,EAChBY,cAAewJ,KAEnB/sL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,eAAgBG,WAAY,kBAAM,MACvEy5K,EAA2BjhM,UAAW,mBAAe,GACxD0rL,GAAa,CACTrxK,GAAM,CACF8lK,WAAY8M,GACZ5I,gBAAgB,EAChBY,cAAe0J,KAEnBjtL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,gBAAiBG,WAAY,kBAAM,MACxEy5K,EAA2BjhM,UAAW,oBAAgB,GACzD0rL,GAAa,CACTrxK,GAAM,CACF8lK,WAAYoM,GACZlI,gBAAgB,EAChBY,cAAeyJ,KAEnBhtL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,gBAAiBG,WAAY,kBAAM,MACxEy5K,EAA2BjhM,UAAW,mBAAe,GACxD0rL,GAAa,CACTrxK,GAAM,CACF8lK,WAAY0M,GACZ5H,cAAe2J,KAEnBltL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,mBAAoBG,WAAY,kBAAM,MAC3Ey5K,EAA2BjhM,UAAW,sBAAkB,GAC3D0rL,GAAa,CACTrxK,GAAM,CACF8lK,WAAY2M,GACZ7H,cAAe4J,KAEnBntL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,mBAAoBG,WAAY,kBAAM,MAC3Ey5K,EAA2BjhM,UAAW,sBAAkB,GAC3D0rL,GAAa,CACTrxK,GAAM,CACF8lK,WAAYsM,GACZxH,cAAe6J,KAEnBptL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,oBAAqBG,WAAY,kBAAM,MAC5Ey5K,EAA2BjhM,UAAW,sBAAkB,GAC3D0rL,GAAa,CACTrxK,GAAM,CACF8lK,WAAYuM,GACZzH,cAAe8J,KAEnBrtL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,oBAAqBG,WAAY,kBAAM,MAC5Ey5K,EAA2BjhM,UAAW,sBAAkB,GAC3D0rL,GAAa,CACThqL,EAAS,CAAEolB,KAAMG,OAAQI,UAAW,kCACrC45K,EAA2BjhM,UAAW,kCAA8B,GACvE0rL,GAAa,CACThqL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,8BACrC45K,EAA2BjhM,UAAW,8BAA0B,GACnE0rL,GAAa,CACThqL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,wBACrC45K,EAA2BjhM,UAAW,yBAAqB,GAC9D0rL,GAAa,CACThqL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,wBACrC45K,EAA2BjhM,UAAW,yBAAqB,GAC9D0rL,GAAa,CACThqL,EAAS,CAAEolB,KAAMG,OAAQI,UAAW,uBACrC45K,EAA2BjhM,UAAW,wBAAoB,GAC7D0rL,GAAa,CACThqL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,kBACrC45K,EAA2BjhM,UAAW,mBAAe,GACxD0rL,GAAa,CACThqL,EAAS,CAAEolB,KAAMC,QAASM,UAAW,kBACtC45K,EAA2BjhM,UAAW,mBAAe,GACxD0rL,GAAa,CACThqL,EAAS,CAAEolB,KAAMG,OAAQI,UAAW,yBACrC45K,EAA2BjhM,UAAW,0BAAsB,GAC/D0rL,GAAa,CACThqL,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,YACrC45K,EAA2BjhM,UAAW,cAAU,GAC5CihM,EAk1H8EuC,CAn6LzE,SAAC35C,GACb,IAAIkN,EAAI2f,EAAIG,EAAIhyK,EAAIX,EAAIyoK,EAAIC,EAAIC,EAAIC,EAAIC,EAClC02B,EAF8B,kDAGhC,aAAc,kCACV,eAASziM,YACJ25K,IAAK,EACV,EAAK+oB,QAAU,OACf,EAAKjvC,YAAc,QACnB,EAAKkvC,QAAUnlB,GACf,EAAKolB,OAAS,KACd,EAAK7sC,IAAM,EAGX,EAAK2f,GAAM,EAAKtkB,WAAW/8I,cAAc,cACzC,EAAKwhK,GAAM1rK,SAASgF,cAAc,KAClC,EAAKtL,GAAM,IAAIw1I,IACf,EAAKn2I,GAAMu6K,GACX,EAAK9R,IAAM,EACX,EAAKC,GAAM,SAAC36J,GACRA,EAAMquF,iBACN,EAAKujG,cAET,EAAKh3B,GAAM,YAAgB,IAAb3qJ,EAAa,EAAbA,OACNA,IAAW80I,IACX,EAAKvE,IAAWgY,WAAWpR,iBAAmB,EAAKiW,MACnD,EAAKxmJ,aAAa,YAAa5G,GAC/B,EAAKya,cAAc,IAAIsqE,YAAY,YAAa,CAAEC,OAAQ,CAAEhlF,aACxDA,IAAW80I,GACX,EAAKnuI,gBAAgB,eAEhB3G,IAAW80I,IAChB,EAAKluI,aAAa,cAAemuI,MAI7C,EAAK6V,GAAM,YAAgB,IAAb5qJ,EAAa,EAAbA,OACV,EAAK4G,aAAa,cAAe5G,GACjC,EAAKya,cAAc,IAAIsqE,YAAY,cAAe,CAAEC,OAAQ,CAAEhlF,cAElE,EAAK6qJ,GAAM,SAAC96J,GACU,qCAAdA,EAAMuN,MACN,EAAKmd,cAAc,IAAIsqE,YAAY,8BAtCjC,EAHkB,+CA6ChC,WACI,OAAOpmG,KAAKk+K,MAAaN,KA9CG,+BAgDhC,WACI,0EACA59K,KAAK4xJ,IAAWgY,WAAWt3J,iBAAiB,SAAUtS,KAAKu+K,KAC3Dv+K,KAAKioB,aAAa,YAAakuI,IAC/Bn2J,KAAK4xJ,IAAWgY,WAAWt3J,iBAAiB,WAAYtS,KAAKw+K,KAC7Dx+K,KAAKo+K,IAAW9rK,iBAAiB,UAAWtS,KAAKy+K,OArDrB,kCAuDhC,WACI,6EACAz+K,KAAK4xJ,IAAWgY,WAAWr3J,oBAAoB,SAAUvS,KAAKu+K,KAC9Dv+K,KAAK4xJ,IAAWgY,WAAWr3J,oBAAoB,WAAYvS,KAAKw+K,KAChEx+K,KAAKo+K,IAAW7rK,oBAAoB,UAAWvS,KAAKy+K,OA3DxB,2DA6DhC,WAAaz1J,GAAb,SAAAre,EAAA,yDACI,8DAAaqe,GACTA,EAAkBR,IAAI,aACtBxoB,KAAKyuK,IAAQ7d,SAA4B,UAAjB5wJ,KAAK6iM,SAE7B75K,EAAkBR,IAAI,iBACtBxoB,KAAKyuK,IAAQxc,mBAAmBjyJ,KAAKyuK,IAAQhe,iBAC7CzwJ,KAAK0uK,OAEJ1lJ,EAAkBR,IAAI,OAAUQ,EAAkBR,IAAI,YACtDQ,EAAkBR,IAAI,UAV/B,iDAaQQ,EAAkBR,IAAI,aACtBxoB,KAAKm+K,IAAYZ,GAAmBv9K,KAAK8iM,UAE7C9iM,KAAK0+K,MAhBT,gDA7DgC,sHAqFhC,sBAAA/zK,EAAA,2DACY3K,KAAKk+K,IADjB,cAEaN,GAFb,SAKaA,GALb,SAQaA,GARb,yBAGY59K,KAAKg+K,MAHjB,4CAMkBh+K,KAAK89K,MANvB,iDASY99K,KAAK+9K,MATjB,oCAYYz4J,QAAQM,KAAK,qGAZzB,sEArFgC,4DAsGxBswI,EAAK+nB,GAAgBpI,EAAKgI,GAAoB7H,EAAKoI,GAAWp6K,EAAKm6K,GAAU96K,EAAK66K,GAASpS,EAAKuS,GAAUtS,EAAKuS,GAA2BtS,EAAKuS,GAAatS,EAAKuS,GAAetS,EAAKuS,GAAUC,IAtGvK,6CAsGhC,oCAAA/zK,EAAA,yDACI3K,KAAKk+K,IAAWN,IACZ59K,KAAK85K,GAFb,iBAGcgpB,EAAU,GAChB9iM,KAAKm+K,IAAUp1K,SAAQ,SAACtJ,GACpBqjM,EAAQ3+L,KAAK1E,MALzB,MAO4BqjM,EAP5B,4CAOmBrjM,EAPnB,UAQ0B,UAAVA,GAAqBisB,IAA0B0xJ,IAR/D,uCASsBp9K,KAAK4xJ,IAAWgY,WAAWq5B,uBATjD,6DAUgBjjM,KAAKk+K,IAAWN,GAVhC,gCAa+B,iBAAVn+K,IAA4BgtB,GAChC4wJ,GAdjB,wBAegBr9K,KAAKk+K,IAAWN,GAfhC,gCAkB+B,eAAVn+K,IAA0B0sB,EAlB/C,wBAmBgBnsB,KAAKk+K,IAAWN,GAnBhC,yDAwBa59K,KAAKkjM,eAAgC,MAAfljM,KAAK+iM,QAC5B52K,IACAnsB,KAAKk+K,IAAWN,IA1B5B,QA6BQ59K,KAAKkjM,eACLljM,KAAK69K,IAAoB1wB,UAAUpnH,IAAI,WACvC/lC,KAAK69K,IAAoBvrK,iBAAiB,QAAStS,KAAKs+K,MAEnDt+K,KAAK69K,IAAoB1wB,UAAUG,SAAS,aACjDttJ,KAAK69K,IAAoBtrK,oBAAoB,QAASvS,KAAKs+K,KAC3Dt+K,KAAK69K,IAAoB1wB,UAAUp5G,OAAO,WAEpC1yB,EAAS80I,GACfn2J,KAAKioB,aAAa,YAAa5G,GAC/BrhB,KAAK87B,cAAc,IAAIsqE,YAAY,YAAa,CAAEC,OAAQ,CAAEhlF,cAvCpE,iDAtGgC,2DAgJzBy8J,GAhJyB,6CAgJhC,4BAAAnzK,EAAA,6DACI2a,QAAQwL,IAAI,6CADhB,SAEU9wB,KAAK2+K,MAFf,uBAIQ3+K,KAAK69K,IAAoBtrK,oBAAoB,QAASvS,KAAKs+K,MACnD1U,EAAe5pK,KAAK4xJ,IAApBgY,YACGpT,YAAmC,SAArBx2J,KAAK4zJ,YANtC,SAOcgW,EAAWu5B,QAAQnjM,KAAKyuK,KAPtC,gEAUQnpJ,QAAQM,KAAK,kDACbN,QAAQxjB,MAAR,MAXR,UAYc9B,KAAK4xJ,IAAWgY,WAAWtR,iBAZzC,eAaQ8kB,IAAiB,EACjB93J,QAAQM,KAAK,gCAdrB,UAec5lB,KAAK0+K,MAfnB,QAgBQ1+K,KAAKgjM,aAhBb,yBAmBQhjM,KAAK0+K,MAnBb,6EAhJgC,2DAsKzBC,GAtKyB,6CAsKhC,sBAAAh0K,EAAA,yDACS3K,KAAKw4G,OADd,uBAEQx4G,KAAKq+K,KAAY,EACjBr+K,KAAKquK,MAHb,SAIcllB,GAAanpJ,KAAM,QAJjC,OAKQA,KAAKq+K,KAAY,EALzB,gDAtKgC,2DA8K/BtP,GA9K+B,MA8KhC,WACI,OAAO,qCAAMA,GAAN,kBAAkC/uK,KAAKq+K,MA/KlB,KAqL/BN,GArL+B,MAqLhC,WAAqB,WACXl5K,EAAWzC,KAAKyC,SAAS4D,WACzB26L,EAAc,IAAIjoE,IAAIt2H,GACtBw+L,EAAW,IAAIloE,IAAIn7H,KAAKk5B,IAAKr0B,GAC7BI,EAAS,IAAIgF,gBAAgBo5L,EAAS11L,QAa5C,GAZAy1L,EAAYx1L,KAAO0vK,GAEnBr4K,EAAO2V,IAAI,OAAQ,gBACd3V,EAAOujB,IAAI,sBACZvjB,EAAO2V,IAAI,oBAAqB,QAEf,UAAjB5a,KAAK6iM,SACL59L,EAAO2V,IAAI,YAAa,SAEH,SAArB5a,KAAK4zJ,aACL3uJ,EAAO2V,IAAI,4BAA6B,QAExC3V,EAAOujB,IAAI,SAAU,CACrB,IAAM86K,EAAW,IAAInoE,IAAIl2H,EAAOlE,IAAI,SAAU8D,GAC9CI,EAAO2V,IAAI,QAAS0oL,EAAS76L,YAEjC,GAAIxD,EAAOujB,IAAI,QAAS,CACpB,IAAM+6K,EAAU,IAAIpoE,IAAIl2H,EAAOlE,IAAI,QAAS8D,GAC5CI,EAAO2V,IAAI,OAAQ2oL,EAAQ96L,YAE/B,IAAM+6L,EAAS,6CAAH,OAAgDv+L,EAAOwD,WAAa,SAC5EqW,mBAAmBukL,EACd56L,YAFG,oHAEoHqW,mBAAmBskL,EAAY36L,YAFnJ,SAmBZrG,KAAKkQ,iBAAiB,cAhBC,WACflQ,KAAKyC,SAAS+I,OAAS0vK,KACvBD,IAAuB,EAMvBj7K,KAAKsD,QAAQ+9L,OACbn+K,QAAQM,KAAK,yDACbN,QAAQM,KAAK,gCACb,EAAK84J,SAKuC,CAAE7kB,MAAM,IAC5D75J,KAAKo+K,IAAWn2J,aAAa,OAAQu7K,GACrCl+K,QAAQwL,IAAI,oDACZ9wB,KAAKo+K,IAAWslB,UApOY,KA0OzB1lB,GA1OyB,6CA0OhC,oCAAArzK,EAAA,yDACUg5L,GAAgB3jM,KAAK+iM,OAC3B/iM,KAAK69K,IAAoB1wB,UAAUp5G,OAAO,YACxB4vJ,EAHtB,gCAG2C3jM,KAAK4jM,cAHhD,8CAGgE5jM,KAAK+iM,OAHrE,OAGUc,EAHV,KAIUR,EAAW,IAAIloE,IAAI0oE,EAAWzhM,KAAKyC,SAAS4D,YAC7B,UAAjBzI,KAAK6iM,UACDQ,EAASz1L,OACTy1L,EAASz1L,MAAQ,KAErBy1L,EAASz1L,MAAQ,2BAEfk2L,EAAS9jM,KAAKo+K,KACbn2J,aAAa,MAAO,MACrB87K,EAAMz5L,SAASgF,cAAc,OACnCw0L,EAAO78C,YAAY88C,GACnBD,EAAO77K,aAAa,OAAQo7K,EAAS56L,YACjCk7L,GACAG,EAAO77K,aAAa,WAAY,cAEpC3C,QAAQwL,IAAI,kDACZgzK,EAAOJ,QACPI,EAAO39C,YAAY49C,GACfJ,GACAxoE,IAAI6T,gBAAgB60D,GAExB7jM,KAAK69K,IAAoB1wB,UAAUpnH,IAAI,WAzB3C,iDA1OgC,sHAqQhC,0CAAAp7B,EAAA,6DACUqmK,EAAuBhxK,KAAK4uK,IAAkB5G,gBADxD,SAEUhoK,KAAK2+K,MAFf,cAGUvvH,EAAQpvD,KAAKyuK,IACb3tG,EAAS1R,EAAM0R,OACjBnuB,GAAU,EAEA,MAAVmuB,IACAnuB,EAAUmuB,EAAOnuB,QACjBmuB,EAAOnuB,SAAU,GAErBq+H,EAAqB,IACfgzB,EAAW,IAAIxoB,GAZzB,UAa8BwoB,EAASpnL,MAAMwyC,EAAMihG,gBAbnD,eAaU4zC,EAbV,OAcUroF,EAAO,IAAI/D,KAAK,CAACosF,GAAc,CACjCh+K,KAAM,uBAEJjhB,EAAMm2H,IAAIC,gBAAgBxf,GAChCo1D,EAAqB,GACP,MAAVlwG,IACAA,EAAOnuB,QAAUA,GApBzB,kBAsBW3tC,GAtBX,iDArQgC,2DAEDgkJ,GA2SnC,OAfAm0B,GAAa,CACTt8K,EAAS,CAAEolB,KAAMC,QAASM,UAAW,QACtCo8K,EAAqBzjM,UAAW,UAAM,GACzCg+K,GAAa,CACTt8K,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,cACrCo8K,EAAqBzjM,UAAW,eAAW,GAC9Cg+K,GAAa,CACTt8K,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,kBACrCo8K,EAAqBzjM,UAAW,mBAAe,GAClDg+K,GAAa,CACTt8K,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,cACrCo8K,EAAqBzjM,UAAW,eAAW,GAC9Cg+K,GAAa,CACTt8K,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,aACrCo8K,EAAqBzjM,UAAW,cAAU,GACtCyjM,EAsnL4FsB,CA/7GlF,SAACl7C,GAClB,IAAIkN,EAAI2f,EAAIG,EAAIhyK,EAAIX,EAAIyoK,EAAIC,EAAIC,EAAIC,EAAIC,EAAI4zB,EAAIC,EAAIC,EAC9CmE,EAFmC,kDAGrC,aAAqB,qDAAN9hM,EAAM,yBAANA,EAAM,iBACjB,+BAASA,KAKJ+hM,OAAS,KAQd,EAAKC,OAASrU,GAUd,EAAK34E,QAAU44E,GACf,EAAK/5B,IAAM,EACX,EAAK2f,IAAM,EACX,EAAKG,GAAM,EACX,EAAKhyK,GAAM,KAGX,EAAKX,GAAM,EAAKkuJ,WAAW/8I,cAAc,gBACzC,EAAKs3J,GAAM,EAAKva,WAAW/8I,cAAc,mBACzC,EAAKu3J,GAAM,EAAKxa,WAAW/8I,cAAc,gCACzC,EAAKw3J,GAAM,EAAKza,WAAW/8I,cAAc,iCACzC,EAAKy3J,GAAM,EAAKskB,IAAuB97K,aAAa,cACpD,EAAKy3J,GAAMnkB,IAAS,SAAC3C,GACjB,IAAMc,EAAa,EAAKkqC,IAA4BlqC,WACpD3zF,uBAAsB,WAClB,EAAK89H,IAA6B72K,MAAM0gC,QAAxC,UA5He,IA6HP,EAAMkrG,IACd,EAAKgrC,IAA4B52K,MAAMu7E,UAAvC,iBACcqwD,EADd,KAEiB,IAAbA,IAMAc,EAAWC,YAAY,EAAKiqC,KAC5BlqC,EAAWe,YAAY,EAAKmpC,MAKf,IAAbhrC,EACA,EAAKgrC,IAA4BjjC,UAAUpnH,IAAI,QAG/C,EAAKqqJ,IAA4BjjC,UAAUp5G,OAAO,aAjJpC,KAqJ1B,EAAK+rJ,GAAM,WACH,EAAKuE,SAAWrU,IAGpB,EAAKsU,iBAET,EAAKvE,GAAM,SAAC3uL,GACR,GAAI,EAAKizL,SAAWrU,GAGpB,OAAQ5+K,EAAM22K,SAGV,KA9JF,GA+JE,KA9JF,GA+JM,EAAKuc,kBAIjB,EAAKtE,GAAM,SAAC5uL,GACR,IAAMg0I,EAAWh0I,EAAMi1F,OAAO6mE,cAC9B,EAAK0jB,IACD9/K,KAAKkE,IAAIowI,EAAU,EAAKwrC,KACX,IAAbxrC,IACA,EAAKurC,IAAoBxoC,SACrB,EAAK+T,OAC4B,MAAhC,EAAKs0B,KACF,EAAK6T,SAAWrU,IACpB,EAAKS,OAGb,EAAKE,IAAoBvrC,GACzB,EAAKtpH,cAAc,IAAIsqE,YAAY,WAAY,CAAEC,OAAQ,CAAE6mE,cAAe9nB,OAE9E,IAAM4D,EAAqB5mJ,KAAK4mJ,oBAAsB,GAChDjJ,EAAuBiJ,EAAmBjJ,sBAC5C+vC,GACJ/qC,GAAkBw/C,wBAAwBxkD,GAC1C,IAAMC,EAAyBgJ,EAAmBhJ,wBAC9C+vC,GAtGa,OAuGjBhrC,GAAkBy/C,0BAA0BxkD,GAvG3B,EAHgB,iDAsIrC,WACQhgJ,KAAKk8J,MACLl8J,KAAKywL,OAGLzwL,KAAKwwL,IAA0BN,GAC/BlwL,KAAKquK,SA5IwB,wBAqJrC,WACI,IAAMo2B,EAAyBzkM,KAAKswL,IAC9BoU,EAAuB1kM,KAAKuwL,IAClCmU,EAAqB18K,gBAAgB,YACrC08K,EAAqB18K,gBAAgB,eACrCy8K,EAAuBt3C,UAAUpnH,IAAI,QACrC,IAAMspI,EAAgBrvK,KAAK0qK,eAC3B1qK,KAAK0wL,KAAoB,EACzB1wL,KAAKkuK,IAA0BmB,GAC/BrvK,KAAK6wL,KAAiB,IA9JW,2BAoKrC,WACI,OAAO5hB,GAAWjvK,KAAKyuK,IAAQnlJ,QArKE,+BAuKrC,WACI,0EAIAtpB,KAAKswL,IAAyBh+K,iBAAiB,QAAStS,KAAK+wL,KAC7D/wL,KAAKswL,IAAyBh+K,iBAAiB,UAAWtS,KAAKgxL,KAC/DhxL,KAAK4uK,IAAkBt8J,iBAAiB,WAAYtS,KAAKixL,KACzDd,GAAuBwU,iBAAiB3kM,QA/KP,kCAiLrC,WACI,6EACAA,KAAKswL,IAAyB/9K,oBAAoB,QAASvS,KAAK+wL,KAChE/wL,KAAKswL,IAAyB/9K,oBAAoB,UAAWvS,KAAKgxL,KAClEhxL,KAAK4uK,IAAkBr8J,oBAAoB,WAAYvS,KAAKixL,KAC5Dd,GAAuByU,mBAAmB5kM,QAtLT,4DAwLrC,WAAcgpB,GAAd,SAAAre,EAAA,sDACI,+DAAcqe,GACVA,EAAkBR,IAAI,WAA4B,MAAfxoB,KAAKokM,SACxCpkM,KAAKuwL,IAAuB/2K,MAAMqrL,gBAAlC,cACW7kM,KAAKokM,OADhB,MAGAp7K,EAAkBR,IAAI,QACtBxoB,KAAKuwL,IAAuBtoK,aAAa,aAAzC,UAA0DjoB,KAAKmuK,IAA/D,aAA+EnuK,KAAK8wL,OAEpF9nK,EAAkBR,IAAI,WAAaQ,EAAkBR,IAAI,aACzDxoB,KAAKquK,MAVb,gDAxLqC,6DAqMnCnY,EAAKw6B,GAAkB7a,EAAKgb,GAAe7a,EAAK4a,GAAuB5sL,EAAKwsL,GAAwBntL,EAAKitL,GAAyBxkB,EAAKykB,GAAuBxkB,EAAKqkB,GAA4BpkB,EAAKqkB,GAA6BpkB,EAAK6kB,GAAwB5kB,EAAKykB,GAAoBmP,EAAK/O,GAAUgP,EAAK/O,GAAYgP,EAAK/O,GAAaliB,IArMtS,MAqMrC,WACI,QAAS/uK,KAAKk5B,MACuB,MAAhCl5B,KAAKwwL,KACFxwL,KAAKq3G,UAAY44E,IAChBjwL,KAAKqkM,SAAWrU,IAAuBhwL,KAAKiuK,OAzMpB,KA2MpC/R,GA3MoC,MA2MrC,WAEI,QADgBl8J,KAARk5B,KACD,qCAAegjI,GAAf,kBAC6B,IAAhCl8J,KAAK4wL,MA9MwB,KAgNpCH,GAhNoC,MAgNrC,WAAgB,WACZzwL,KAAKwwL,IAA0B,KAC/B,IAAMiU,EAAyBzkM,KAAKswL,IAC9BoU,EAAuB1kM,KAAKuwL,IAClC,GAAIkU,EAAuBt3C,UAAUG,SAAS,QAAS,CACnDm3C,EAAuBt3C,UAAUp5G,OAAO,QACxC,IAAMs7H,EAAgBrvK,KAAK0qK,eAC3B1qK,KAAK0wL,KAAoB,EACzB1wL,KAAKkuK,IAA0BmB,GAG/Bo1B,EAAuBnyL,iBAAiB,iBAAiB,WACrDigD,uBAAsB,WAClB,EAAKs+H,KAAiB,EACtB,IAAMzvE,EAAO,EAAKkoE,cAGdloE,GACAA,EAAKmoE,gBAAkB,GACvB,EAAK/a,IAAmBjhH,QAI5Bm3I,EAAqBz8K,aAAa,cAAe,QACjDy8K,EAAqBI,UAAY,EACjC,EAAKhpK,cAAc,IAAIsqE,YAAY,0BAExC,CAAEyzD,MAAM,OA3OkB,KA8OpCiV,GA9OoC,MA8OrC,WACI,OAAO,qCAAMA,GAAN,kBAA+B9uK,KAAK0wL,MA/OV,KAiPpC1hB,GAjPoC,MAiPrC,WACI,OAAO,qCAAMA,GAAN,kBAA6BhvK,KAAK6wL,MAlPR,KAoP9BxiB,GApP8B,6CAoPrC,sBAAA1jK,EAAA,6DACI3K,KAAK4wL,IAAyB,EACE,MAA5B5wL,KAAKyuK,IAAQowB,aAAmC,MAAZ7+L,KAAKk5B,KACxCl5B,KAAK+uK,OAEN/uK,KAAK+kM,aALb,8CAOgB12B,GAPhB,iEApPqC,wFA+GrC,WACI,OAAOtpB,GAAkBigD,2BAhHQ,IA4GrC,SAAgCvlM,GAC5BslJ,GAAkBw/C,wBAAwB9kM,KA7GT,kCAqHrC,WACI,OAAOslJ,GAAkBkgD,6BAtHQ,IAkHrC,SAAkCxlM,GAC9BslJ,GAAkBy/C,0BAA0B/kM,KAnHX,qBA8HrC,SAAeoP,GACXm0J,GAASC,UAAUrsD,OAAOguC,IAAS5tC,QAAQP,eAAe5nG,OA/HzB,GAEDm6I,GAqQxC,OATA6mC,GAAa,CACThvL,EAAS,CAAEolB,KAAM1O,UAClB4sL,EAA0BhlM,UAAW,cAAU,GAClD0wL,GAAa,CACThvL,EAAS,CAAEolB,KAAM1O,UAClB4sL,EAA0BhlM,UAAW,cAAU,GAClD0wL,GAAa,CACThvL,EAAS,CAAEolB,KAAM1O,UAClB4sL,EAA0BhlM,UAAW,eAAW,GAC5CglM,EAwrGoGe,CAh2OxF,SAACl8C,GACpB,IAAIkN,EACEivC,EAFqC,kDAGvC,aAAc,kCACV,eAAShlM,YACJilM,UAAW,EAChB,EAAKC,mBAAgB9iM,EACrB,EAAK+iM,2BAA6B,IAClC,EAAKpvC,IAAM,EALD,EAHyB,qDAavC,WACI,OAAIl2J,KAAKw4G,OACEx4G,KAAKyuK,IAAQ5f,eAEjB,KAjB4B,oBAmBvC,WACI,OAAO7uJ,KAAKyuK,IAAQ/6D,WApBe,kBAsBvC,WACI,OAAO1zG,KAAKyxK,MAvBuB,uBAyBvC,WACI,OAAOzxK,KAAKyuK,IAAQuzB,eA1Be,IA4BvC,SAAgBviM,GACZO,KAAKyuK,IAAQuzB,cAAgBviM,EAC7BO,KAAK4xJ,IAAWuH,cAAc17E,UAAUp5B,aAAc,EACtDrkD,KAAK0uK,QA/B8B,mBAiCvC,WACQ1uK,KAAKyxK,MAGTzxK,KAAKyxK,KAAW,EAChBzxK,KAAK4xJ,IAAWuH,cAAc17E,UAAUmI,YAAa,EACrD5lF,KAAK87B,cAAc,IAAIsqE,YAAY,aAvCA,kBAyCvC,WACQpmG,KAAKyxK,KAAYzxK,KAAKulM,oBAAoB/mM,OAAS,IACnDwB,KAAKyxK,KAAW,EAChBzxK,KAAK4xJ,IAAWuH,cAAc17E,UAAUmI,YAAa,EAChD5lF,KAAKyuK,IAAQ+2B,oBACdxlM,KAAKwxK,MAETxxK,KAAK87B,cAAc,IAAIsqE,YAAY,YAhDJ,MAmDrC8vD,EAAKub,GAAS9C,IAnDuB,MAmDvC,WACI,qCAAMA,GAAN,iBACA3uK,KAAKyxK,KAAW,EACZzxK,KAAKolM,WACLplM,KAAKwxK,MACLxxK,KAAK2zJ,UAxD0B,KA2DtCiX,GA3DsC,MA2DvC,SAAQkG,EAAO/+J,GACX,qCAAM64J,GAAN,gBAAakG,EAAO/+J,GAChB/R,KAAKyxK,MACHzxK,KAAKgvK,QAAwBhvK,KAAK4xJ,IAAWl7D,eAGnD12F,KAAKyuK,IAAQg3B,gBAAgB1zL,EApET,KAqEpB/R,KAAK0uK,SAlE8B,qBAoEvC,SAAQ1lJ,GACJ,+DAAcA,GACVA,EAAkBR,IAAI,aAAexoB,KAAKolM,UAC1CplM,KAAK2zJ,OAEL3qI,EAAkBR,IAAI,kBACtBxoB,KAAKwxK,QA1E0B,KA6EhCnD,GA7EgC,6CA6EvC,sBAAA1jK,EAAA,6DAKI3K,KAAKyuK,IAAQi3B,gBALjB,uDAMiBr3B,GANjB,kEA7EuC,2DAqFtCmD,GArFsC,MAqFvC,WACIxxK,KAAKyuK,IAAQk3B,cAAc3lM,KAAKqlM,cAAerlM,KAAKslM,2BAzFhC,KA4FhBtlM,KAAKyxK,MACLzxK,KAAKyuK,IAAQg3B,gBAAgB,GAC7BzlM,KAAK0uK,WA3F0B,GAED1lB,GAsG1C,OATAuoB,GAAa,CACT1wK,EAAS,CAAEolB,KAAMC,WAClBi/K,EAA4BhmM,UAAW,gBAAY,GACtDoyK,GAAa,CACT1wK,EAAS,CAAEolB,KAAM1O,OAAQiP,UAAW,oBACrC2+K,EAA4BhmM,UAAW,qBAAiB,GAC3DoyK,GAAa,CACT1wK,EAAS,CAAEolB,KAAMG,OAAQI,UAAW,kCACrC2+K,EAA4BhmM,UAAW,kCAA8B,GACjEgmM,EAwvOiHS,CA9E1F,SAACC,GAC/B,IAAI3vC,EA6BE4vC,EAA2BjjM,OAAO,2BAIlCkjM,EAlCwC,kDAmC1C,aAAc,kCACV,eAAS5lM,YACJ+1J,GAAM,KAFD,EAnC4B,qDAyC1C,WACI,0IACsC,MAAlCl2J,KAAK8lM,KACL9lM,KAAK8lM,GA1Cc,SAAC7nM,GAI5B,GAA2B,MAAvBA,EAASszJ,YACTtzJ,EAASmuE,aAAa,yBACtB,OAAO,aAIX,IAAIhqE,KAAK4jM,0BAGJ,CACD,IAAMC,EAAsB,WACxB7jM,KAAK4jM,0BAA0B/nM,EAASszJ,aAO5C,OADAnvJ,KAAKkQ,iBAAiB,+BAAgC2zL,EAAqB,CAAEpsC,MAAM,IAC5E,WACHz3J,KAAKmQ,oBAAoB,+BAAgC0zL,IAGjE,OAfI7jM,KAAK4jM,0BAA0B/nM,EAASszJ,YAerC,aAgBkC20C,CAAuBlmM,SA5CtB,kCA+C1C,WACI,gJAGsC,MAAlCA,KAAK8lM,KACL9lM,KAAK8lM,KACL9lM,KAAK8lM,GAA4B,UArDC,GAkCRD,GAwBtC,OADA3vC,EAAK4vC,EACEC,EAoBgII,CAA0Bj3B,YACrKk3B,eAAejqB,OAAO,eAAgBnzB,M,sDC9yuDtC,IAAIq9C,EAAUzlM,EAAQ,IAMlB0lM,EAAgB,CAClBtqL,mBAAmB,EACnBuqL,aAAa,EACb7pL,cAAc,EACd8pL,cAAc,EACdC,aAAa,EACbC,iBAAiB,EACjBC,0BAA0B,EAC1BC,0BAA0B,EAC1BC,QAAQ,EACRC,WAAW,EACX7gL,MAAM,GAEJ8gL,EAAgB,CAClBviM,MAAM,EACNhG,QAAQ,EACRW,WAAW,EACX6nM,QAAQ,EACRC,QAAQ,EACR9mM,WAAW,EACX+mM,OAAO,GASLC,EAAe,CACjB,UAAY,EACZC,SAAS,EACTZ,cAAc,EACdC,aAAa,EACbK,WAAW,EACX7gL,MAAM,GAEJohL,EAAe,GAInB,SAASC,EAAWjgM,GAElB,OAAIg/L,EAAQkB,OAAOlgM,GACV8/L,EAIFE,EAAahgM,EAAS,WAAiBi/L,EAVhDe,EAAahB,EAAQmB,YAhBK,CACxB,UAAY,EACZhiM,QAAQ,EACRghM,cAAc,EACdC,aAAa,EACbK,WAAW,GAYbO,EAAahB,EAAQoB,MAAQN,EAY7B,IAAIroM,EAAiBD,OAAOC,eACxB0Y,EAAsB3Y,OAAO2Y,oBAC7BN,EAAwBrY,OAAOqY,sBAC/B7V,EAA2BxC,OAAOwC,yBAClCb,EAAiB3B,OAAO2B,eACxBknM,EAAkB7oM,OAAOM,UAsC7BuB,EAAOC,QArCP,SAASgnM,EAAqBC,EAAiBC,EAAiBC,GAC9D,GAA+B,kBAApBD,EAA8B,CAEvC,GAAIH,EAAiB,CACnB,IAAIK,EAAqBvnM,EAAeqnM,GAEpCE,GAAsBA,IAAuBL,GAC/CC,EAAqBC,EAAiBG,EAAoBD,GAI9D,IAAIjhM,EAAO2Q,EAAoBqwL,GAE3B3wL,IACFrQ,EAAOA,EAAKJ,OAAOyQ,EAAsB2wL,KAM3C,IAHA,IAAIG,EAAgBV,EAAWM,GAC3BK,EAAgBX,EAAWO,GAEtBtpM,EAAI,EAAGA,EAAIsI,EAAKrI,SAAUD,EAAG,CACpC,IAAIQ,EAAM8H,EAAKtI,GAEf,IAAKwoM,EAAchoM,MAAU+oM,IAAaA,EAAU/oM,OAAWkpM,IAAiBA,EAAclpM,OAAWipM,IAAiBA,EAAcjpM,IAAO,CAC7I,IAAIN,EAAa4C,EAAyBwmM,EAAiB9oM,GAE3D,IAEED,EAAe8oM,EAAiB7oM,EAAKN,GACrC,MAAO2E,OAKf,OAAOwkM,I,8FCjGM,SAAS,EAAWM,EAAQ7lM,EAAM8lM,GAc/C,OAZE,EADE,OAAAC,EAAA,KACWnoM,QAAQC,UAER,SAAoBgoM,EAAQ7lM,EAAM8lM,GAC7C,IAAIx9L,EAAI,CAAC,MACTA,EAAExG,KAAK/D,MAAMuK,EAAGtI,GAChB,IACIpE,EAAW,IADGknB,SAAS3c,KAAKpI,MAAM8nM,EAAQv9L,IAG9C,OADIw9L,GAAO,OAAA5nM,EAAA,GAAetC,EAAUkqM,EAAMhpM,WACnClB,IAIOmC,MAAM,KAAMD,WCZjB,SAAS,EAAiBgoM,GACvC,IAAIE,EAAwB,oBAARlhL,IAAqB,IAAIA,SAAQ5kB,EA8BrD,OA5BA,EAAmB,SAA0B4lM,GAC3C,GAAc,OAAVA,ICRkChmM,EDQEgmM,GCPsB,IAAzDhjL,SAAS1c,SAAStH,KAAKgB,GAAIqL,QAAQ,kBDOQ,OAAO26L,ECR5C,IAA2BhmM,EDUtC,GAAqB,oBAAVgmM,EACT,MAAM,IAAIhqM,UAAU,sDAGtB,GAAsB,qBAAXkqM,EAAwB,CACjC,GAAIA,EAAO7/K,IAAI2/K,GAAQ,OAAOE,EAAOtnM,IAAIonM,GAEzCE,EAAOztL,IAAIutL,EAAOG,GAGpB,SAASA,IACP,OAAO,EAAUH,EAAOhoM,UAAW,OAAAK,EAAA,GAAeR,MAAMR,aAW1D,OARA8oM,EAAQnpM,UAAYN,OAAOU,OAAO4oM,EAAMhpM,UAAW,CACjDK,YAAa,CACXC,MAAO6oM,EACP5pM,YAAY,EACZE,UAAU,EACVD,cAAc,KAGX,OAAA4B,EAAA,GAAe+nM,EAASH,KAGTA,K,6BE3Bb,IAAIn/L,EAAEpI,EAAQ,IAAiBuC,EAAE,MAAMoT,EAAE,MAAM5V,EAAQ4nM,SAAS,MAAM5nM,EAAQ6nM,WAAW,MAAM7nM,EAAQ8nM,SAAS,MAAM,IAAI31K,EAAE,MAAMsF,EAAE,MAAM3H,EAAE,MAAM9vB,EAAQ+nM,SAAS,MAAM,IAAIhvJ,EAAE,MAAM15B,EAAE,MACpM,GAAG,oBAAoBnd,QAAQA,OAAO8lM,IAAI,CAAC,IAAI/0K,EAAE/wB,OAAO8lM,IAAIxlM,EAAEywB,EAAE,iBAAiBrd,EAAEqd,EAAE,gBAAgBjzB,EAAQ4nM,SAAS30K,EAAE,kBAAkBjzB,EAAQ6nM,WAAW50K,EAAE,qBAAqBjzB,EAAQ8nM,SAAS70K,EAAE,kBAAkBd,EAAEc,EAAE,kBAAkBwE,EAAExE,EAAE,iBAAiBnD,EAAEmD,EAAE,qBAAqBjzB,EAAQ+nM,SAAS90K,EAAE,kBAAkB8lB,EAAE9lB,EAAE,cAAc5T,EAAE4T,EAAE,cAAc,IAAI9X,EAAE,oBAAoBjZ,QAAQA,OAAOC,SACtR,SAASw5B,EAAE3xB,GAAG,IAAI,IAAIC,EAAE,yDAAyDD,EAAE2T,EAAE,EAAEA,EAAEne,UAAU3B,OAAO8f,IAAI1T,GAAG,WAAWkU,mBAAmB3e,UAAUme,IAAI,MAAM,yBAAyB3T,EAAE,WAAWC,EAAE,iHACpU,IAAI63I,EAAE,CAACmmD,UAAU,WAAW,OAAM,GAAIC,mBAAmB,aAAaC,oBAAoB,aAAaC,gBAAgB,cAAcvmD,EAAE,GAAG,SAASpqI,EAAEzN,EAAEC,EAAE0T,GAAGte,KAAK1B,MAAMqM,EAAE3K,KAAKyE,QAAQmG,EAAE5K,KAAKwhI,KAAKghB,EAAExiJ,KAAKgpM,QAAQ1qL,GAAGmkI,EACpN,SAAST,KAA6B,SAASc,EAAEn4I,EAAEC,EAAE0T,GAAGte,KAAK1B,MAAMqM,EAAE3K,KAAKyE,QAAQmG,EAAE5K,KAAKwhI,KAAKghB,EAAExiJ,KAAKgpM,QAAQ1qL,GAAGmkI,EADsGrqI,EAAEjZ,UAAU8pM,iBAAiB,GAAG7wL,EAAEjZ,UAAU8R,SAAS,SAAStG,EAAEC,GAAG,GAAG,kBAAkBD,GAAG,oBAAoBA,GAAG,MAAMA,EAAE,MAAMa,MAAM8wB,EAAE,KAAKt8B,KAAKgpM,QAAQD,gBAAgB/oM,KAAK2K,EAAEC,EAAE,aAAawN,EAAEjZ,UAAU+pM,YAAY,SAASv+L,GAAG3K,KAAKgpM,QAAQH,mBAAmB7oM,KAAK2K,EAAE,gBACndq3I,EAAE7iJ,UAAUiZ,EAAEjZ,UAAsF,IAAI8D,EAAE6/I,EAAE3jJ,UAAU,IAAI6iJ,EAAE/+I,EAAEzD,YAAYsjJ,EAAE95I,EAAE/F,EAAEmV,EAAEjZ,WAAW8D,EAAEkmM,sBAAqB,EAAG,IAAIjmD,EAAE,CAACkmD,QAAQ,MAAMC,EAAExqM,OAAOM,UAAU+B,eAAe0hJ,EAAE,CAAC7jJ,KAAI,EAAGqtI,KAAI,EAAGk9D,QAAO,EAAGC,UAAS,GAChS,SAASC,EAAE7+L,EAAEC,EAAE0T,GAAG,IAAIlb,EAAEq0B,EAAE,GAAG3rB,EAAE,KAAK6O,EAAE,KAAK,GAAG,MAAM/P,EAAE,IAAIxH,UAAK,IAASwH,EAAEwhI,MAAMzxH,EAAE/P,EAAEwhI,UAAK,IAASxhI,EAAE7L,MAAM+M,EAAE,GAAGlB,EAAE7L,KAAK6L,EAAEy+L,EAAEloM,KAAKyJ,EAAExH,KAAKw/I,EAAE1hJ,eAAekC,KAAKq0B,EAAEr0B,GAAGwH,EAAExH,IAAI,IAAI8hB,EAAE/kB,UAAU3B,OAAO,EAAE,GAAG,IAAI0mB,EAAEuS,EAAE1xB,SAASuY,OAAO,GAAG,EAAE4G,EAAE,CAAC,IAAI,IAAI5hB,EAAEP,MAAMmiB,GAAG3H,EAAE,EAAEA,EAAE2H,EAAE3H,IAAIja,EAAEia,GAAGpd,UAAUod,EAAE,GAAGka,EAAE1xB,SAASzC,EAAE,GAAGqH,GAAGA,EAAE67L,aAAa,IAAIpjM,KAAK8hB,EAAEva,EAAE67L,kBAAe,IAAS/uK,EAAEr0B,KAAKq0B,EAAEr0B,GAAG8hB,EAAE9hB,IAAI,MAAM,CAACqmM,SAAStmM,EAAE8iB,KAAKtb,EAAE5L,IAAI+M,EAAEsgI,IAAIzxH,EAAErc,MAAMm5B,EAAEiyK,OAAOxmD,EAAEkmD,SACxU,SAASzmD,EAAEh4I,GAAG,MAAM,kBAAkBA,GAAG,OAAOA,GAAGA,EAAE8+L,WAAWtmM,EAAqG,IAAIwmM,EAAE,OAAO,SAASC,EAAEj/L,EAAEC,GAAG,MAAM,kBAAkBD,GAAG,OAAOA,GAAG,MAAMA,EAAE5L,IAA7K,SAAgB4L,GAAG,IAAIC,EAAE,CAAC,IAAI,KAAK,IAAI,MAAM,MAAM,IAAID,EAAEK,QAAQ,SAAQ,SAASL,GAAG,OAAOC,EAAED,MAAmF2wG,CAAO,GAAG3wG,EAAE5L,KAAK6L,EAAEnC,SAAS,IAC5W,SAASu6I,EAAEr4I,EAAEC,EAAE0T,EAAElb,EAAEq0B,GAAG,IAAI3rB,SAASnB,EAAK,cAAcmB,GAAG,YAAYA,IAAEnB,EAAE,MAAK,IAAIgQ,GAAE,EAAG,GAAG,OAAOhQ,EAAEgQ,GAAE,OAAQ,OAAO7O,GAAG,IAAK,SAAS,IAAK,SAAS6O,GAAE,EAAG,MAAM,IAAK,SAAS,OAAOhQ,EAAE8+L,UAAU,KAAKtmM,EAAE,KAAKoT,EAAEoE,GAAE,GAAI,GAAGA,EAAE,OAAW8c,EAAEA,EAAN9c,EAAEhQ,GAASA,EAAE,KAAKvH,EAAE,IAAIwmM,EAAEjvL,EAAE,GAAGvX,EAAEL,MAAMC,QAAQy0B,IAAInZ,EAAE,GAAG,MAAM3T,IAAI2T,EAAE3T,EAAEK,QAAQ2+L,EAAE,OAAO,KAAK3mD,EAAEvrH,EAAE7sB,EAAE0T,EAAE,IAAG,SAAS3T,GAAG,OAAOA,MAAK,MAAM8sB,IAAIkrH,EAAElrH,KAAKA,EAD/W,SAAW9sB,EAAEC,GAAG,MAAM,CAAC6+L,SAAStmM,EAAE8iB,KAAKtb,EAAEsb,KAAKlnB,IAAI6L,EAAEwhI,IAAIzhI,EAAEyhI,IAAI9tI,MAAMqM,EAAErM,MAAMorM,OAAO/+L,EAAE++L,QAC4RG,CAAEpyK,EAAEnZ,IAAImZ,EAAE14B,KAAK4b,GAAGA,EAAE5b,MAAM04B,EAAE14B,IAAI,IAAI,GAAG04B,EAAE14B,KAAKiM,QAAQ2+L,EAAE,OAAO,KAAKh/L,IAAIC,EAAEzG,KAAKszB,IAAI,EAAyB,GAAvB9c,EAAE,EAAEvX,EAAE,KAAKA,EAAE,IAAIA,EAAE,IAAOL,MAAMC,QAAQ2H,GAAG,IAAI,IAAIua,EACzf,EAAEA,EAAEva,EAAEnM,OAAO0mB,IAAI,CAAQ,IAAI5hB,EAAEF,EAAEwmM,EAAf99L,EAAEnB,EAAEua,GAAeA,GAAGvK,GAAGqoI,EAAEl3I,EAAElB,EAAE0T,EAAEhb,EAAEm0B,QAAQ,GAAU,oBAAPn0B,EANhE,SAAWqH,GAAG,OAAG,OAAOA,GAAG,kBAAkBA,EAAS,KAAsC,oBAAjCA,EAAEmR,GAAGnR,EAAEmR,IAAInR,EAAE,eAA0CA,EAAE,KAMlDoR,CAAEpR,IAAyB,IAAIA,EAAErH,EAAEnC,KAAKwJ,GAAGua,EAAE,IAAIpZ,EAAEnB,EAAEjH,QAAQ3B,MAA6B4Y,GAAGqoI,EAA1Bl3I,EAAEA,EAAErM,MAA0BmL,EAAE0T,EAAtBhb,EAAEF,EAAEwmM,EAAE99L,EAAEoZ,KAAkBuS,QAAQ,GAAG,WAAW3rB,EAAE,MAAMlB,EAAE,GAAGD,EAAEa,MAAM8wB,EAAE,GAAG,oBAAoB1xB,EAAE,qBAAqB/L,OAAOgI,KAAK8D,GAAGmC,KAAK,MAAM,IAAIlC,IAAI,OAAO+P,EAAE,SAASsoI,EAAEt4I,EAAEC,EAAE0T,GAAG,GAAG,MAAM3T,EAAE,OAAOA,EAAE,IAAIvH,EAAE,GAAGq0B,EAAE,EAAmD,OAAjDurH,EAAEr4I,EAAEvH,EAAE,GAAG,IAAG,SAASuH,GAAG,OAAOC,EAAEzJ,KAAKmd,EAAE3T,EAAE8sB,QAAcr0B,EAC1Z,SAAS0mM,EAAEn/L,GAAG,IAAI,IAAIA,EAAEo/L,QAAQ,CAAC,IAAIn/L,EAAED,EAAEq/L,QAAQp/L,EAAEA,IAAID,EAAEo/L,QAAQ,EAAEp/L,EAAEq/L,QAAQp/L,EAAEA,EAAE3I,MAAK,SAAS2I,GAAG,IAAID,EAAEo/L,UAAUn/L,EAAEA,EAAEq/L,QAAQt/L,EAAEo/L,QAAQ,EAAEp/L,EAAEq/L,QAAQp/L,MAAI,SAASA,GAAG,IAAID,EAAEo/L,UAAUp/L,EAAEo/L,QAAQ,EAAEp/L,EAAEq/L,QAAQp/L,MAAK,GAAG,IAAID,EAAEo/L,QAAQ,OAAOp/L,EAAEq/L,QAAQ,MAAMr/L,EAAEq/L,QAAS,IAAInnD,EAAE,CAACumD,QAAQ,MAAM,SAAS1mD,IAAI,IAAI/3I,EAAEk4I,EAAEumD,QAAQ,GAAG,OAAOz+L,EAAE,MAAMa,MAAM8wB,EAAE,MAAM,OAAO3xB,EAAE,IAAIo4I,EAAE,CAACmnD,uBAAuBrnD,EAAEsnD,wBAAwB,CAACC,WAAW,GAAGC,kBAAkBnnD,EAAEonD,qBAAqB,CAAClB,SAAQ,GAAI9gM,OAAOU,GACjerI,EAAQ4pM,SAAS,CAACh1L,IAAI0tI,EAAEl6I,QAAQ,SAAS4B,EAAEC,EAAE0T,GAAG2kI,EAAEt4I,GAAE,WAAWC,EAAExK,MAAMJ,KAAKG,aAAYme,IAAIknB,MAAM,SAAS76B,GAAG,IAAIC,EAAE,EAAuB,OAArBq4I,EAAEt4I,GAAE,WAAWC,OAAaA,GAAGoqC,QAAQ,SAASrqC,GAAG,OAAOs4I,EAAEt4I,GAAE,SAASA,GAAG,OAAOA,MAAK,IAAI6/L,KAAK,SAAS7/L,GAAG,IAAIg4I,EAAEh4I,GAAG,MAAMa,MAAM8wB,EAAE,MAAM,OAAO3xB,IAAIhK,EAAQsF,UAAUmS,EAAEzX,EAAQ8pM,cAAc3nD,EAAEniJ,EAAQ+pM,mDAAmD3nD,EAChXpiJ,EAAQ4hK,aAAa,SAAS53J,EAAEC,EAAE0T,GAAG,GAAG,OAAO3T,QAAG,IAASA,EAAE,MAAMa,MAAM8wB,EAAE,IAAI3xB,IAAI,IAAIvH,EAAE4F,EAAE,GAAG2B,EAAErM,OAAOm5B,EAAE9sB,EAAE5L,IAAI+M,EAAEnB,EAAEyhI,IAAIzxH,EAAEhQ,EAAE++L,OAAO,GAAG,MAAM9+L,EAAE,CAAoE,QAAnE,IAASA,EAAEwhI,MAAMtgI,EAAElB,EAAEwhI,IAAIzxH,EAAEuoI,EAAEkmD,cAAS,IAASx+L,EAAE7L,MAAM04B,EAAE,GAAG7sB,EAAE7L,KAAQ4L,EAAEsb,MAAMtb,EAAEsb,KAAKugL,aAAa,IAAIthL,EAAEva,EAAEsb,KAAKugL,aAAa,IAAIljM,KAAKsH,EAAEy+L,EAAEloM,KAAKyJ,EAAEtH,KAAKs/I,EAAE1hJ,eAAeoC,KAAKF,EAAEE,QAAG,IAASsH,EAAEtH,SAAI,IAAS4hB,EAAEA,EAAE5hB,GAAGsH,EAAEtH,IAAI,IAAIA,EAAEnD,UAAU3B,OAAO,EAAE,GAAG,IAAI8E,EAAEF,EAAE2C,SAASuY,OAAO,GAAG,EAAEhb,EAAE,CAAC4hB,EAAEniB,MAAMO,GAAG,IAAI,IAAIia,EAAE,EAAEA,EAAEja,EAAEia,IAAI2H,EAAE3H,GAAGpd,UAAUod,EAAE,GAAGna,EAAE2C,SAASmf,EAAE,MAAM,CAACukL,SAAStmM,EAAE8iB,KAAKtb,EAAEsb,KACxflnB,IAAI04B,EAAE20G,IAAItgI,EAAExN,MAAM8E,EAAEsmM,OAAO/uL,IAAIha,EAAQ+D,cAAc,SAASiG,EAAEC,GAA8K,YAA3K,IAASA,IAAIA,EAAE,OAAMD,EAAE,CAAC8+L,SAASrxK,EAAEuyK,sBAAsB//L,EAAEggM,cAAcjgM,EAAEkgM,eAAelgM,EAAEmgM,aAAa,EAAEzvL,SAAS,KAAKc,SAAS,OAAQd,SAAS,CAACouL,SAAS32K,EAAEopE,SAASvxF,GAAUA,EAAEwR,SAASxR,GAAGhK,EAAQ2O,cAAck6L,EAAE7oM,EAAQoqM,cAAc,SAASpgM,GAAG,IAAIC,EAAE4+L,EAAEhhM,KAAK,KAAKmC,GAAY,OAATC,EAAEqb,KAAKtb,EAASC,GAAGjK,EAAQqqM,UAAU,WAAW,MAAM,CAAC5B,QAAQ,OAAOzoM,EAAQ0X,WAAW,SAAS1N,GAAG,MAAM,CAAC8+L,SAASh5K,EAAEjrB,OAAOmF,IAAIhK,EAAQsqM,eAAetoD,EAC3ehiJ,EAAQuqM,KAAK,SAASvgM,GAAG,MAAM,CAAC8+L,SAASzpL,EAAEmrL,SAAS,CAACpB,SAAS,EAAEC,QAAQr/L,GAAGygM,MAAMtB,IAAInpM,EAAQwG,KAAK,SAASwD,EAAEC,GAAG,MAAM,CAAC6+L,SAAS/vJ,EAAEzzB,KAAKtb,EAAEy8L,aAAQ,IAASx8L,EAAE,KAAKA,IAAIjK,EAAQ0qM,YAAY,SAAS1gM,EAAEC,GAAG,OAAO83I,IAAI2oD,YAAY1gM,EAAEC,IAAIjK,EAAQwH,WAAW,SAASwC,EAAEC,GAAG,OAAO83I,IAAIv6I,WAAWwC,EAAEC,IAAIjK,EAAQ2qM,cAAc,aAAa3qM,EAAQ4qM,UAAU,SAAS5gM,EAAEC,GAAG,OAAO83I,IAAI6oD,UAAU5gM,EAAEC,IAAIjK,EAAQ6qM,oBAAoB,SAAS7gM,EAAEC,EAAE0T,GAAG,OAAOokI,IAAI8oD,oBAAoB7gM,EAAEC,EAAE0T,IAC9c3d,EAAQ8qM,gBAAgB,SAAS9gM,EAAEC,GAAG,OAAO83I,IAAI+oD,gBAAgB9gM,EAAEC,IAAIjK,EAAQ+qM,QAAQ,SAAS/gM,EAAEC,GAAG,OAAO83I,IAAIgpD,QAAQ/gM,EAAEC,IAAIjK,EAAQgrM,WAAW,SAAShhM,EAAEC,EAAE0T,GAAG,OAAOokI,IAAIipD,WAAWhhM,EAAEC,EAAE0T,IAAI3d,EAAQirM,OAAO,SAASjhM,GAAG,OAAO+3I,IAAIkpD,OAAOjhM,IAAIhK,EAAQkrM,SAAS,SAASlhM,GAAG,OAAO+3I,IAAImpD,SAASlhM,IAAIhK,EAAQs6B,QAAQ,U,6BCXxS,IAAI6wK,EAAGlrM,EAAQ,GAAS2c,EAAE3c,EAAQ,IAAiBw3B,EAAEx3B,EAAQ,IAAa,SAASmb,EAAEpR,GAAG,IAAI,IAAIC,EAAE,yDAAyDD,EAAE2T,EAAE,EAAEA,EAAEne,UAAU3B,OAAO8f,IAAI1T,GAAG,WAAWkU,mBAAmB3e,UAAUme,IAAI,MAAM,yBAAyB3T,EAAE,WAAWC,EAAE,iHAAiH,IAAIkhM,EAAG,MAAMtgM,MAAMuQ,EAAE,MAAM,IAAIgwL,EAAG,IAAIvyD,IAAIwyD,EAAG,GAAG,SAASC,EAAGthM,EAAEC,GAAGshM,EAAGvhM,EAAEC,GAAGshM,EAAGvhM,EAAE,UAAUC,GAC3e,SAASshM,EAAGvhM,EAAEC,GAAW,IAARohM,EAAGrhM,GAAGC,EAAMD,EAAE,EAAEA,EAAEC,EAAEpM,OAAOmM,IAAIohM,EAAGhmK,IAAIn7B,EAAED,IACzD,IAAIwhM,IAAK,qBAAqB9hM,QAAQ,qBAAqBA,OAAOC,UAAU,qBAAqBD,OAAOC,SAASgF,eAAe88L,EAAG,8VAA8VC,EAAGxtM,OAAOM,UAAU+B,eACrforM,EAAG,GAAGC,EAAG,GAC+M,SAAS/pD,EAAE73I,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,EAAE4hB,GAAGllB,KAAKwsM,gBAAgB,IAAI5hM,GAAG,IAAIA,GAAG,IAAIA,EAAE5K,KAAK87H,cAAcrkG,EAAEz3B,KAAKysM,mBAAmBrpM,EAAEpD,KAAK0sM,gBAAgBpuL,EAAEte,KAAK80G,aAAanqG,EAAE3K,KAAKimB,KAAKrb,EAAE5K,KAAK2sM,YAAYrpM,EAAEtD,KAAK4sM,kBAAkB1nL,EAAE,IAAI88H,EAAE,GACnb,uIAAuI31I,MAAM,KAAKtD,SAAQ,SAAS4B,GAAGq3I,EAAEr3I,GAAG,IAAI63I,EAAE73I,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,MAAM,CAAC,CAAC,gBAAgB,kBAAkB,CAAC,YAAY,SAAS,CAAC,UAAU,OAAO,CAAC,YAAY,eAAe5B,SAAQ,SAAS4B,GAAG,IAAIC,EAAED,EAAE,GAAGq3I,EAAEp3I,GAAG,IAAI43I,EAAE53I,EAAE,GAAE,EAAGD,EAAE,GAAG,MAAK,GAAG,MAAM,CAAC,kBAAkB,YAAY,aAAa,SAAS5B,SAAQ,SAAS4B,GAAGq3I,EAAEr3I,GAAG,IAAI63I,EAAE73I,EAAE,GAAE,EAAGA,EAAE4C,cAAc,MAAK,GAAG,MACve,CAAC,cAAc,4BAA4B,YAAY,iBAAiBxE,SAAQ,SAAS4B,GAAGq3I,EAAEr3I,GAAG,IAAI63I,EAAE73I,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,MAAM,8OAA8O0B,MAAM,KAAKtD,SAAQ,SAAS4B,GAAGq3I,EAAEr3I,GAAG,IAAI63I,EAAE73I,EAAE,GAAE,EAAGA,EAAE4C,cAAc,MAAK,GAAG,MACrb,CAAC,UAAU,WAAW,QAAQ,YAAYxE,SAAQ,SAAS4B,GAAGq3I,EAAEr3I,GAAG,IAAI63I,EAAE73I,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,MAAM,CAAC,UAAU,YAAY5B,SAAQ,SAAS4B,GAAGq3I,EAAEr3I,GAAG,IAAI63I,EAAE73I,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,MAAM,CAAC,OAAO,OAAO,OAAO,QAAQ5B,SAAQ,SAAS4B,GAAGq3I,EAAEr3I,GAAG,IAAI63I,EAAE73I,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,MAAM,CAAC,UAAU,SAAS5B,SAAQ,SAAS4B,GAAGq3I,EAAEr3I,GAAG,IAAI63I,EAAE73I,EAAE,GAAE,EAAGA,EAAE4C,cAAc,MAAK,GAAG,MAAM,IAAIs/L,EAAG,gBAAgB,SAASC,EAAGniM,GAAG,OAAOA,EAAE,GAAG4T,cAI3Y,SAASyiB,EAAGr2B,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAE4+I,EAAE9gJ,eAAe0J,GAAGo3I,EAAEp3I,GAAG,MAAW,OAAOxH,EAAE,IAAIA,EAAE6iB,MAAKwR,IAAO,EAAE7sB,EAAEpM,SAAS,MAAMoM,EAAE,IAAI,MAAMA,EAAE,MAAI,MAAMA,EAAE,IAAI,MAAMA,EAAE,QAPnJ,SAAYD,EAAEC,EAAE0T,EAAEmZ,GAAG,GAAG,OAAO7sB,GAAG,qBAAqBA,GADwE,SAAYD,EAAEC,EAAE0T,EAAEmZ,GAAG,GAAG,OAAOnZ,GAAG,IAAIA,EAAE2H,KAAK,OAAM,EAAG,cAAcrb,GAAG,IAAK,WAAW,IAAK,SAAS,OAAM,EAAG,IAAK,UAAU,OAAG6sB,IAAc,OAAOnZ,GAASA,EAAEkuL,gBAAmD,WAAnC7hM,EAAEA,EAAE4C,cAAc9C,MAAM,EAAE,KAAsB,UAAUE,GAAE,QAAQ,OAAM,GAC/ToiM,CAAGpiM,EAAEC,EAAE0T,EAAEmZ,GAAG,OAAM,EAAG,GAAGA,EAAE,OAAM,EAAG,GAAG,OAAOnZ,EAAE,OAAOA,EAAE2H,MAAM,KAAK,EAAE,OAAOrb,EAAE,KAAK,EAAE,OAAM,IAAKA,EAAE,KAAK,EAAE,OAAOs6C,MAAMt6C,GAAG,KAAK,EAAE,OAAOs6C,MAAMt6C,IAAI,EAAEA,EAAE,OAAM,EAOrDoiM,CAAGpiM,EAAE0T,EAAElb,EAAEq0B,KAAKnZ,EAAE,MAAMmZ,GAAG,OAAOr0B,EARpL,SAAYuH,GAAG,QAAG0hM,EAAGlrM,KAAKorM,EAAG5hM,KAAe0hM,EAAGlrM,KAAKmrM,EAAG3hM,KAAeyhM,EAAG/1L,KAAK1L,GAAU4hM,EAAG5hM,IAAG,GAAG2hM,EAAG3hM,IAAG,GAAS,IAQsEsiM,CAAGriM,KAAK,OAAO0T,EAAE3T,EAAEqd,gBAAgBpd,GAAGD,EAAEsd,aAAard,EAAE,GAAG0T,IAAIlb,EAAEspM,gBAAgB/hM,EAAEvH,EAAE0xG,cAAc,OAAOx2F,EAAE,IAAIlb,EAAE6iB,MAAQ,GAAG3H,GAAG1T,EAAExH,EAAE04H,cAAcrkG,EAAEr0B,EAAEqpM,mBAAmB,OAAOnuL,EAAE3T,EAAEqd,gBAAgBpd,IAAa0T,EAAE,KAAXlb,EAAEA,EAAE6iB,OAAc,IAAI7iB,IAAG,IAAKkb,EAAE,GAAG,GAAGA,EAAEmZ,EAAE9sB,EAAEuiM,eAAez1K,EAAE7sB,EAAE0T,GAAG3T,EAAEsd,aAAard,EAAE0T,MAH5d,0jCAA0jCjS,MAAM,KAAKtD,SAAQ,SAAS4B,GAAG,IAAIC,EAAED,EAAEK,QAAQ6hM,EACzmCC,GAAI9qD,EAAEp3I,GAAG,IAAI43I,EAAE53I,EAAE,GAAE,EAAGD,EAAE,MAAK,GAAG,MAAM,2EAA2E0B,MAAM,KAAKtD,SAAQ,SAAS4B,GAAG,IAAIC,EAAED,EAAEK,QAAQ6hM,EAAGC,GAAI9qD,EAAEp3I,GAAG,IAAI43I,EAAE53I,EAAE,GAAE,EAAGD,EAAE,gCAA+B,GAAG,MAAM,CAAC,WAAW,WAAW,aAAa5B,SAAQ,SAAS4B,GAAG,IAAIC,EAAED,EAAEK,QAAQ6hM,EAAGC,GAAI9qD,EAAEp3I,GAAG,IAAI43I,EAAE53I,EAAE,GAAE,EAAGD,EAAE,wCAAuC,GAAG,MAAM,CAAC,WAAW,eAAe5B,SAAQ,SAAS4B,GAAGq3I,EAAEr3I,GAAG,IAAI63I,EAAE73I,EAAE,GAAE,EAAGA,EAAE4C,cAAc,MAAK,GAAG,MAC/cy0I,EAAEmrD,UAAU,IAAI3qD,EAAE,YAAY,GAAE,EAAG,aAAa,gCAA+B,GAAG,GAAI,CAAC,MAAM,OAAO,SAAS,cAAcz5I,SAAQ,SAAS4B,GAAGq3I,EAAEr3I,GAAG,IAAI63I,EAAE73I,EAAE,GAAE,EAAGA,EAAE4C,cAAc,MAAK,GAAG,MAEzL,IAAI6/L,EAAGtB,EAAGpB,mDAAmD2C,EAAG,MAAMC,EAAG,MAAMv9L,EAAG,MAAMw9L,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAAMC,EAAG,MAChN,GAAG,oBAAoBvrM,QAAQA,OAAO8lM,IAAI,CAAC,IAAI7lD,EAAEjgJ,OAAO8lM,IAAI0E,EAAGvqD,EAAE,iBAAiBwqD,EAAGxqD,EAAE,gBAAgB/yI,EAAG+yI,EAAE,kBAAkByqD,EAAGzqD,EAAE,qBAAqB0qD,EAAG1qD,EAAE,kBAAkB2qD,EAAG3qD,EAAE,kBAAkB4qD,EAAG5qD,EAAE,iBAAiB6qD,EAAG7qD,EAAE,qBAAqB8qD,EAAG9qD,EAAE,kBAAkB+qD,EAAG/qD,EAAE,uBAAuBgrD,EAAGhrD,EAAE,cAAcirD,EAAGjrD,EAAE,cAAckrD,EAAGlrD,EAAE,eAAeA,EAAE,eAAemrD,EAAGnrD,EAAE,mBAAmBorD,EAAGprD,EAAE,0BAA0BqrD,EAAGrrD,EAAE,mBAAmBsrD,EAAGtrD,EAAE,uBACxc,IAAmLurD,EAA/KC,EAAG,oBAAoBzrM,QAAQA,OAAOC,SAAS,SAASyrM,EAAG5jM,GAAG,OAAG,OAAOA,GAAG,kBAAkBA,EAAS,KAAwC,oBAAnCA,EAAE2jM,GAAI3jM,EAAE2jM,IAAK3jM,EAAE,eAA0CA,EAAE,KAAY,SAAS6jM,EAAG7jM,GAAG,QAAG,IAAS0jM,EAAG,IAAI,MAAM7iM,QAAS,MAAM8S,GAAG,IAAI1T,EAAE0T,EAAEmwL,MAAM3jM,OAAOlF,MAAM,gBAAgByoM,EAAGzjM,GAAGA,EAAE,IAAI,GAAG,MAAM,KAAKyjM,EAAG1jM,EAAE,IAAI+jM,GAAG,EACjU,SAASC,EAAGhkM,EAAEC,GAAG,IAAID,GAAG+jM,EAAG,MAAM,GAAGA,GAAG,EAAG,IAAIpwL,EAAE9S,MAAMojM,kBAAkBpjM,MAAMojM,uBAAkB,EAAO,IAAI,GAAGhkM,EAAE,GAAGA,EAAE,WAAW,MAAMY,SAAU3M,OAAOC,eAAe8L,EAAEzL,UAAU,QAAQ,CAACyb,IAAI,WAAW,MAAMpP,WAAY,kBAAkBvL,SAASA,QAAQC,UAAU,CAAC,IAAID,QAAQC,UAAU0K,EAAE,IAAI,MAAMkB,GAAG,IAAI2rB,EAAE3rB,EAAE7L,QAAQC,UAAUyK,EAAE,GAAGC,OAAO,CAAC,IAAIA,EAAEzJ,OAAO,MAAM2K,GAAG2rB,EAAE3rB,EAAEnB,EAAExJ,KAAKyJ,EAAEzL,eAAe,CAAC,IAAI,MAAMqM,QAAS,MAAMM,GAAG2rB,EAAE3rB,EAAEnB,KAAK,MAAMmB,GAAG,GAAGA,GAAG2rB,GAAG,kBAAkB3rB,EAAE2iM,MAAM,CAAC,IAAI,IAAIrrM,EAAE0I,EAAE2iM,MAAMpiM,MAAM,MACnf/I,EAAEm0B,EAAEg3K,MAAMpiM,MAAM,MAAM6Y,EAAE9hB,EAAE5E,OAAO,EAAEmc,EAAErX,EAAE9E,OAAO,EAAE,GAAG0mB,GAAG,GAAGvK,GAAGvX,EAAE8hB,KAAK5hB,EAAEqX,IAAIA,IAAI,KAAK,GAAGuK,GAAG,GAAGvK,EAAEuK,IAAIvK,IAAI,GAAGvX,EAAE8hB,KAAK5hB,EAAEqX,GAAG,CAAC,GAAG,IAAIuK,GAAG,IAAIvK,EAAG,GAAG,GAAGuK,IAAQ,IAAJvK,GAASvX,EAAE8hB,KAAK5hB,EAAEqX,GAAG,MAAM,KAAKvX,EAAE8hB,GAAGla,QAAQ,WAAW,cAAc,GAAGka,GAAG,GAAGvK,GAAG,QAD3H,QAC2I+zL,GAAG,EAAGljM,MAAMojM,kBAAkBtwL,EAAE,OAAO3T,EAAEA,EAAEA,EAAE87L,aAAa97L,EAAEnG,KAAK,IAAIgqM,EAAG7jM,GAAG,GAC7T,SAASkkM,EAAGlkM,GAAG,OAAOA,EAAEmkM,KAAK,KAAK,EAAE,OAAON,EAAG7jM,EAAEsb,MAAM,KAAK,GAAG,OAAOuoL,EAAG,QAAQ,KAAK,GAAG,OAAOA,EAAG,YAAY,KAAK,GAAG,OAAOA,EAAG,gBAAgB,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO7jM,EAAEgkM,EAAGhkM,EAAEsb,MAAK,GAAM,KAAK,GAAG,OAAOtb,EAAEgkM,EAAGhkM,EAAEsb,KAAKzgB,QAAO,GAAM,KAAK,GAAG,OAAOmF,EAAEgkM,EAAGhkM,EAAEsb,KAAK8oL,SAAQ,GAAM,KAAK,EAAE,OAAOpkM,EAAEgkM,EAAGhkM,EAAEsb,MAAK,GAAM,QAAQ,MAAM,IAC9T,SAAS+oL,EAAGrkM,GAAG,GAAG,MAAMA,EAAE,OAAO,KAAK,GAAG,oBAAoBA,EAAE,OAAOA,EAAE87L,aAAa97L,EAAEnG,MAAM,KAAK,GAAG,kBAAkBmG,EAAE,OAAOA,EAAE,OAAOA,GAAG,KAAKoF,EAAG,MAAM,WAAW,KAAKu9L,EAAG,MAAM,SAAS,KAAKE,EAAG,MAAM,WAAW,KAAKD,EAAG,MAAM,aAAa,KAAKK,EAAG,MAAM,WAAW,KAAKC,EAAG,MAAM,eAAe,GAAG,kBAAkBljM,EAAE,OAAOA,EAAE8+L,UAAU,KAAKiE,EAAG,OAAO/iM,EAAE87L,aAAa,WAAW,YAAY,KAAKgH,EAAG,OAAO9iM,EAAEuxF,SAASuqG,aAAa,WAAW,YAAY,KAAKkH,EAAG,IAAI/iM,EAAED,EAAEnF,OACnd,OAD0doF,EAAEA,EAAE67L,aAAa77L,EAAEpG,MAAM,GAC5emG,EAAE87L,cAAc,KAAK77L,EAAE,cAAcA,EAAE,IAAI,cAAc,KAAKkjM,EAAG,OAAOkB,EAAGrkM,EAAEsb,MAAM,KAAK+nL,EAAG,OAAOgB,EAAGrkM,EAAEokM,SAAS,KAAKhB,EAAGnjM,EAAED,EAAEwgM,SAASxgM,EAAEA,EAAEygM,MAAM,IAAI,OAAO4D,EAAGrkM,EAAEC,IAAI,MAAM0T,KAAK,OAAO,KAAK,SAAS2wL,EAAGtkM,GAAG,cAAcA,GAAG,IAAK,UAAU,IAAK,SAAS,IAAK,SAAS,IAAK,SAAS,IAAK,YAAY,OAAOA,EAAE,QAAQ,MAAM,IAAI,SAASukM,EAAGvkM,GAAG,IAAIC,EAAED,EAAEsb,KAAK,OAAOtb,EAAEA,EAAE80G,WAAW,UAAU90G,EAAE4C,gBAAgB,aAAa3C,GAAG,UAAUA,GAE1Z,SAASukM,EAAGxkM,GAAGA,EAAEykM,gBAAgBzkM,EAAEykM,cADvD,SAAYzkM,GAAG,IAAIC,EAAEskM,EAAGvkM,GAAG,UAAU,QAAQ2T,EAAEzf,OAAOwC,yBAAyBsJ,EAAEnL,YAAYL,UAAUyL,GAAG6sB,EAAE,GAAG9sB,EAAEC,GAAG,IAAID,EAAEzJ,eAAe0J,IAAI,qBAAqB0T,GAAG,oBAAoBA,EAAEvd,KAAK,oBAAoBud,EAAE1D,IAAI,CAAC,IAAIxX,EAAEkb,EAAEvd,IAAIuC,EAAEgb,EAAE1D,IAAiL,OAA7K/b,OAAOC,eAAe6L,EAAEC,EAAE,CAACjM,cAAa,EAAGoC,IAAI,WAAW,OAAOqC,EAAEjC,KAAKnB,OAAO4a,IAAI,SAASjQ,GAAG8sB,EAAE,GAAG9sB,EAAErH,EAAEnC,KAAKnB,KAAK2K,MAAM9L,OAAOC,eAAe6L,EAAEC,EAAE,CAAClM,WAAW4f,EAAE5f,aAAmB,CAAC4d,SAAS,WAAW,OAAOmb,GAAG80C,SAAS,SAAS5hE,GAAG8sB,EAAE,GAAG9sB,GAAG0kM,aAAa,WAAW1kM,EAAEykM,cACxf,YAAYzkM,EAAEC,MAAuD0kM,CAAG3kM,IAAI,SAAS4kM,EAAG5kM,GAAG,IAAIA,EAAE,OAAM,EAAG,IAAIC,EAAED,EAAEykM,cAAc,IAAIxkM,EAAE,OAAM,EAAG,IAAI0T,EAAE1T,EAAE0R,WAAemb,EAAE,GAAqD,OAAlD9sB,IAAI8sB,EAAEy3K,EAAGvkM,GAAGA,EAAE6kM,QAAQ,OAAO,QAAQ7kM,EAAElL,QAAOkL,EAAE8sB,KAAanZ,IAAG1T,EAAE2hE,SAAS5hE,IAAG,GAAO,SAAS8kM,EAAG9kM,GAAwD,GAAG,qBAAxDA,EAAEA,IAAI,qBAAqBL,SAASA,cAAS,IAAkC,OAAO,KAAK,IAAI,OAAOK,EAAE4+K,eAAe5+K,EAAEuwH,KAAK,MAAMtwH,GAAG,OAAOD,EAAEuwH,MAC/Z,SAASw0E,EAAG/kM,EAAEC,GAAG,IAAI0T,EAAE1T,EAAE4kM,QAAQ,OAAOjyL,EAAE,GAAG3S,EAAE,CAAC+kM,oBAAe,EAAO50L,kBAAa,EAAOtb,WAAM,EAAO+vM,QAAQ,MAAMlxL,EAAEA,EAAE3T,EAAEilM,cAAcC,iBAAiB,SAASC,GAAGnlM,EAAEC,GAAG,IAAI0T,EAAE,MAAM1T,EAAEmQ,aAAa,GAAGnQ,EAAEmQ,aAAa0c,EAAE,MAAM7sB,EAAE4kM,QAAQ5kM,EAAE4kM,QAAQ5kM,EAAE+kM,eAAerxL,EAAE2wL,EAAG,MAAMrkM,EAAEnL,MAAMmL,EAAEnL,MAAM6e,GAAG3T,EAAEilM,cAAc,CAACC,eAAep4K,EAAE42H,aAAa/vI,EAAEyxL,WAAW,aAAanlM,EAAEqb,MAAM,UAAUrb,EAAEqb,KAAK,MAAMrb,EAAE4kM,QAAQ,MAAM5kM,EAAEnL,OAAO,SAASuwM,GAAGrlM,EAAEC,GAAe,OAAZA,EAAEA,EAAE4kM,UAAiBxuK,EAAGr2B,EAAE,UAAUC,GAAE,GAC3d,SAASs8C,GAAGv8C,EAAEC,GAAGolM,GAAGrlM,EAAEC,GAAG,IAAI0T,EAAE2wL,EAAGrkM,EAAEnL,OAAOg4B,EAAE7sB,EAAEqb,KAAK,GAAG,MAAM3H,EAAK,WAAWmZ,GAAM,IAAInZ,GAAG,KAAK3T,EAAElL,OAAOkL,EAAElL,OAAO6e,KAAE3T,EAAElL,MAAM,GAAG6e,GAAO3T,EAAElL,QAAQ,GAAG6e,IAAI3T,EAAElL,MAAM,GAAG6e,QAAQ,GAAG,WAAWmZ,GAAG,UAAUA,EAA8B,YAA3B9sB,EAAEqd,gBAAgB,SAAgBpd,EAAE1J,eAAe,SAAS+uM,GAAGtlM,EAAEC,EAAEqb,KAAK3H,GAAG1T,EAAE1J,eAAe,iBAAiB+uM,GAAGtlM,EAAEC,EAAEqb,KAAKgpL,EAAGrkM,EAAEmQ,eAAe,MAAMnQ,EAAE4kM,SAAS,MAAM5kM,EAAE+kM,iBAAiBhlM,EAAEglM,iBAAiB/kM,EAAE+kM,gBACnZ,SAAS1oJ,GAAGt8C,EAAEC,EAAE0T,GAAG,GAAG1T,EAAE1J,eAAe,UAAU0J,EAAE1J,eAAe,gBAAgB,CAAC,IAAIu2B,EAAE7sB,EAAEqb,KAAK,KAAK,WAAWwR,GAAG,UAAUA,QAAG,IAAS7sB,EAAEnL,OAAO,OAAOmL,EAAEnL,OAAO,OAAOmL,EAAE,GAAGD,EAAEilM,cAAcvhD,aAAa/vI,GAAG1T,IAAID,EAAElL,QAAQkL,EAAElL,MAAMmL,GAAGD,EAAEoQ,aAAanQ,EAAW,MAAT0T,EAAE3T,EAAEnG,QAAcmG,EAAEnG,KAAK,IAAImG,EAAEglM,iBAAiBhlM,EAAEilM,cAAcC,eAAe,KAAKvxL,IAAI3T,EAAEnG,KAAK8Z,GACvV,SAAS2xL,GAAGtlM,EAAEC,EAAE0T,GAAM,WAAW1T,GAAG6kM,EAAG9kM,EAAEulM,iBAAiBvlM,IAAE,MAAM2T,EAAE3T,EAAEoQ,aAAa,GAAGpQ,EAAEilM,cAAcvhD,aAAa1jJ,EAAEoQ,eAAe,GAAGuD,IAAI3T,EAAEoQ,aAAa,GAAGuD,IAAwF,SAASm0J,GAAG9nK,EAAEC,GAA6D,OAA1DD,EAAE4S,EAAE,CAACxX,cAAS,GAAQ6E,IAAMA,EAAlI,SAAYD,GAAG,IAAIC,EAAE,GAAuD,OAApDkhM,EAAGvB,SAASxhM,QAAQ4B,GAAE,SAASA,GAAG,MAAMA,IAAIC,GAAGD,MAAYC,EAAiDulM,CAAGvlM,EAAE7E,aAAU4E,EAAE5E,SAAS6E,GAASD,EACvU,SAASylM,GAAGzlM,EAAEC,EAAE0T,EAAEmZ,GAAe,GAAZ9sB,EAAEA,EAAEtE,QAAWuE,EAAE,CAACA,EAAE,GAAG,IAAI,IAAIxH,EAAE,EAAEA,EAAEkb,EAAE9f,OAAO4E,IAAIwH,EAAE,IAAI0T,EAAElb,KAAI,EAAG,IAAIkb,EAAE,EAAEA,EAAE3T,EAAEnM,OAAO8f,IAAIlb,EAAEwH,EAAE1J,eAAe,IAAIyJ,EAAE2T,GAAG7e,OAAOkL,EAAE2T,GAAG+xL,WAAWjtM,IAAIuH,EAAE2T,GAAG+xL,SAASjtM,GAAGA,GAAGq0B,IAAI9sB,EAAE2T,GAAGgyL,iBAAgB,OAAQ,CAAmB,IAAlBhyL,EAAE,GAAG2wL,EAAG3wL,GAAG1T,EAAE,KAASxH,EAAE,EAAEA,EAAEuH,EAAEnM,OAAO4E,IAAI,CAAC,GAAGuH,EAAEvH,GAAG3D,QAAQ6e,EAAiD,OAA9C3T,EAAEvH,GAAGitM,UAAS,OAAG54K,IAAI9sB,EAAEvH,GAAGktM,iBAAgB,IAAW,OAAO1lM,GAAGD,EAAEvH,GAAGmtM,WAAW3lM,EAAED,EAAEvH,IAAI,OAAOwH,IAAIA,EAAEylM,UAAS,IACpY,SAASG,GAAG7lM,EAAEC,GAAG,GAAG,MAAMA,EAAE6lM,wBAAwB,MAAMjlM,MAAMuQ,EAAE,KAAK,OAAOwB,EAAE,GAAG3S,EAAE,CAACnL,WAAM,EAAOsb,kBAAa,EAAOhV,SAAS,GAAG4E,EAAEilM,cAAcvhD,eAAe,SAASqiD,GAAG/lM,EAAEC,GAAG,IAAI0T,EAAE1T,EAAEnL,MAAM,GAAG,MAAM6e,EAAE,CAA+B,GAA9BA,EAAE1T,EAAE7E,SAAS6E,EAAEA,EAAEmQ,aAAgB,MAAMuD,EAAE,CAAC,GAAG,MAAM1T,EAAE,MAAMY,MAAMuQ,EAAE,KAAK,GAAGhZ,MAAMC,QAAQsb,GAAG,CAAC,KAAK,GAAGA,EAAE9f,QAAQ,MAAMgN,MAAMuQ,EAAE,KAAKuC,EAAEA,EAAE,GAAG1T,EAAE0T,EAAE,MAAM1T,IAAIA,EAAE,IAAI0T,EAAE1T,EAAED,EAAEilM,cAAc,CAACvhD,aAAa4gD,EAAG3wL,IAC/Y,SAASqoF,GAAGh8F,EAAEC,GAAG,IAAI0T,EAAE2wL,EAAGrkM,EAAEnL,OAAOg4B,EAAEw3K,EAAGrkM,EAAEmQ,cAAc,MAAMuD,KAAIA,EAAE,GAAGA,KAAM3T,EAAElL,QAAQkL,EAAElL,MAAM6e,GAAG,MAAM1T,EAAEmQ,cAAcpQ,EAAEoQ,eAAeuD,IAAI3T,EAAEoQ,aAAauD,IAAI,MAAMmZ,IAAI9sB,EAAEoQ,aAAa,GAAG0c,GAAG,SAASk5K,GAAGhmM,GAAG,IAAIC,EAAED,EAAEilL,YAAYhlL,IAAID,EAAEilM,cAAcvhD,cAAc,KAAKzjJ,GAAG,OAAOA,IAAID,EAAElL,MAAMmL,GAAG,IAAIgmM,GAAS,+BAATA,GAAwF,6BAC9X,SAASC,GAAGlmM,GAAG,OAAOA,GAAG,IAAK,MAAM,MAAM,6BAA6B,IAAK,OAAO,MAAM,qCAAqC,QAAQ,MAAM,gCAAgC,SAASsoK,GAAGtoK,EAAEC,GAAG,OAAO,MAAMD,GAAG,iCAAiCA,EAAEkmM,GAAGjmM,GAAG,+BAA+BD,GAAG,kBAAkBC,EAAE,+BAA+BD,EAC3U,IAAImmM,GAAenmM,GAAZomM,IAAYpmM,GAAsJ,SAASA,EAAEC,GAAG,GAAGD,EAAEqmM,eAAeJ,IAAQ,cAAcjmM,EAAEA,EAAEgiB,UAAU/hB,MAAM,CAA2F,KAA1FkmM,GAAGA,IAAIxmM,SAASgF,cAAc,QAAUqd,UAAU,QAAQ/hB,EAAEoC,UAAUvE,WAAW,SAAamC,EAAEkmM,GAAGG,WAAWtmM,EAAEsmM,YAAYtmM,EAAEw7I,YAAYx7I,EAAEsmM,YAAY,KAAKrmM,EAAEqmM,YAAYtmM,EAAEs8I,YAAYr8I,EAAEqmM,cAArZ,qBAAqBC,OAAOA,MAAMC,wBAAwB,SAASvmM,EAAE0T,EAAEmZ,EAAEr0B,GAAG8tM,MAAMC,yBAAwB,WAAW,OAAOxmM,GAAEC,EAAE0T,OAAU3T,IACtK,SAASymM,GAAGzmM,EAAEC,GAAG,GAAGA,EAAE,CAAC,IAAI0T,EAAE3T,EAAEsmM,WAAW,GAAG3yL,GAAGA,IAAI3T,EAAE0mM,WAAW,IAAI/yL,EAAEwvI,SAAwB,YAAdxvI,EAAEgzL,UAAU1mM,GAAUD,EAAEilL,YAAYhlL,EACrH,IAAI61B,GAAG,CAAC8wK,yBAAwB,EAAGC,mBAAkB,EAAGC,kBAAiB,EAAGC,kBAAiB,EAAGC,SAAQ,EAAGC,cAAa,EAAGC,iBAAgB,EAAGC,aAAY,EAAGC,SAAQ,EAAGC,MAAK,EAAGC,UAAS,EAAGC,cAAa,EAAGC,YAAW,EAAGC,cAAa,EAAGC,WAAU,EAAGC,UAAS,EAAGC,SAAQ,EAAGC,YAAW,EAAGC,aAAY,EAAGC,cAAa,EAAGC,YAAW,EAAGC,eAAc,EAAGC,gBAAe,EAAGC,iBAAgB,EAAGC,YAAW,EAAGC,WAAU,EAAGC,YAAW,EAAG/4J,SAAQ,EAAGnnB,OAAM,EAAGmgL,SAAQ,EAAGC,SAAQ,EAAGC,QAAO,EAAG5rD,QAAO,EAAGl6F,MAAK,EAAG+lJ,aAAY,EAC1fC,cAAa,EAAGC,aAAY,EAAGC,iBAAgB,EAAGC,kBAAiB,EAAGC,kBAAiB,EAAGC,eAAc,EAAGC,aAAY,GAAIC,GAAG,CAAC,SAAS,KAAK,MAAM,KAA6H,SAASC,GAAGnpM,EAAEC,EAAE0T,GAAG,OAAO,MAAM1T,GAAG,mBAAmBA,GAAG,KAAKA,EAAE,GAAG0T,GAAG,kBAAkB1T,GAAG,IAAIA,GAAG61B,GAAGv/B,eAAeyJ,IAAI81B,GAAG91B,IAAI,GAAGC,GAAGE,OAAOF,EAAE,KAC9Z,SAASmpM,GAAGppM,EAAEC,GAAa,IAAI,IAAI0T,KAAlB3T,EAAEA,EAAE6O,MAAmB5O,EAAE,GAAGA,EAAE1J,eAAeod,GAAG,CAAC,IAAImZ,EAAE,IAAInZ,EAAE9Q,QAAQ,MAAMpK,EAAE0wM,GAAGx1L,EAAE1T,EAAE0T,GAAGmZ,GAAG,UAAUnZ,IAAIA,EAAE,YAAYmZ,EAAE9sB,EAAEqpM,YAAY11L,EAAElb,GAAGuH,EAAE2T,GAAGlb,GADTvE,OAAOgI,KAAK45B,IAAI13B,SAAQ,SAAS4B,GAAGkpM,GAAG9qM,SAAQ,SAAS6B,GAAGA,EAAEA,EAAED,EAAEe,OAAO,GAAG6S,cAAc5T,EAAEiJ,UAAU,GAAG6sB,GAAG71B,GAAG61B,GAAG91B,SACrG,IAAIspM,GAAG12L,EAAE,CAAC22L,UAAS,GAAI,CAACnhF,MAAK,EAAG/xH,MAAK,EAAGmzM,IAAG,EAAGxkF,KAAI,EAAGykF,OAAM,EAAGC,IAAG,EAAGtQ,KAAI,EAAG9wD,OAAM,EAAGqhE,QAAO,EAAGC,MAAK,EAAGn5K,MAAK,EAAGo5K,OAAM,EAAGjsM,QAAO,EAAG6jG,OAAM,EAAGqoG,KAAI,IAClT,SAASz7J,GAAGruC,EAAEC,GAAG,GAAGA,EAAE,CAAC,GAAGqpM,GAAGtpM,KAAK,MAAMC,EAAE7E,UAAU,MAAM6E,EAAE6lM,yBAAyB,MAAMjlM,MAAMuQ,EAAE,IAAIpR,IAAI,GAAG,MAAMC,EAAE6lM,wBAAwB,CAAC,GAAG,MAAM7lM,EAAE7E,SAAS,MAAMyF,MAAMuQ,EAAE,KAAK,GAAK,kBAAkBnR,EAAE6lM,2BAAyB,WAAW7lM,EAAE6lM,yBAAyB,MAAMjlM,MAAMuQ,EAAE,KAAM,GAAG,MAAMnR,EAAE4O,OAAO,kBAAkB5O,EAAE4O,MAAM,MAAMhO,MAAMuQ,EAAE,MAC5V,SAAS24L,GAAG/pM,EAAEC,GAAG,IAAI,IAAID,EAAE6C,QAAQ,KAAK,MAAM,kBAAkB5C,EAAEymK,GAAG,OAAO1mK,GAAG,IAAK,iBAAiB,IAAK,gBAAgB,IAAK,YAAY,IAAK,gBAAgB,IAAK,gBAAgB,IAAK,mBAAmB,IAAK,iBAAiB,IAAK,gBAAgB,OAAM,EAAG,QAAQ,OAAM,GAAI,SAASgqM,GAAGhqM,GAA6F,OAA1FA,EAAEA,EAAEtM,QAAQsM,EAAEiqM,YAAYvqM,QAASwqM,0BAA0BlqM,EAAEA,EAAEkqM,yBAAgC,IAAIlqM,EAAEmjJ,SAASnjJ,EAAEu7I,WAAWv7I,EAAE,IAAImqM,GAAG,KAAKC,GAAG,KAAKC,GAAG,KACxb,SAASC,GAAGtqM,GAAG,GAAGA,EAAEuqM,GAAGvqM,GAAG,CAAC,GAAG,oBAAoBmqM,GAAG,MAAMtpM,MAAMuQ,EAAE,MAAM,IAAInR,EAAED,EAAEwqM,UAAUvqM,IAAIA,EAAEwqM,GAAGxqM,GAAGkqM,GAAGnqM,EAAEwqM,UAAUxqM,EAAEsb,KAAKrb,KAAK,SAASyqM,GAAG1qM,GAAGoqM,GAAGC,GAAGA,GAAG7wM,KAAKwG,GAAGqqM,GAAG,CAACrqM,GAAGoqM,GAAGpqM,EAAE,SAAS2qM,KAAK,GAAGP,GAAG,CAAC,IAAIpqM,EAAEoqM,GAAGnqM,EAAEoqM,GAAoB,GAAjBA,GAAGD,GAAG,KAAKE,GAAGtqM,GAAMC,EAAE,IAAID,EAAE,EAAEA,EAAEC,EAAEpM,OAAOmM,IAAIsqM,GAAGrqM,EAAED,KAAK,SAAS4qM,GAAG5qM,EAAEC,GAAG,OAAOD,EAAEC,GAAG,SAAS4qM,GAAG7qM,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,OAAOuH,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,SAASqyM,MAAM,IAAIC,GAAGH,GAAGI,IAAG,EAAGC,IAAG,EAAG,SAASC,KAAQ,OAAOd,IAAI,OAAOC,KAAGS,KAAKH,MAE9Z,SAASQ,GAAGnrM,EAAEC,GAAG,IAAI0T,EAAE3T,EAAEwqM,UAAU,GAAG,OAAO72L,EAAE,OAAO,KAAK,IAAImZ,EAAE29K,GAAG92L,GAAG,GAAG,OAAOmZ,EAAE,OAAO,KAAKnZ,EAAEmZ,EAAE7sB,GAAGD,EAAE,OAAOC,GAAG,IAAK,UAAU,IAAK,iBAAiB,IAAK,gBAAgB,IAAK,uBAAuB,IAAK,cAAc,IAAK,qBAAqB,IAAK,cAAc,IAAK,qBAAqB,IAAK,YAAY,IAAK,mBAAmB,IAAK,gBAAgB6sB,GAAGA,EAAE84K,YAAqB94K,IAAI,YAAb9sB,EAAEA,EAAEsb,OAAuB,UAAUtb,GAAG,WAAWA,GAAG,aAAaA,IAAIA,GAAG8sB,EAAE,MAAM9sB,EAAE,QAAQA,GAAE,EAAG,GAAGA,EAAE,OAAO,KAAK,GAAG2T,GAAG,oBACleA,EAAE,MAAM9S,MAAMuQ,EAAE,IAAInR,SAAS0T,IAAI,OAAOA,EAAE,IAAIy3L,IAAG,EAAG,GAAG5J,EAAG,IAAI,IAAI6J,GAAG,GAAGn3M,OAAOC,eAAek3M,GAAG,UAAU,CAACj1M,IAAI,WAAWg1M,IAAG,KAAM1rM,OAAOiI,iBAAiB,OAAO0jM,GAAGA,IAAI3rM,OAAOkI,oBAAoB,OAAOyjM,GAAGA,IAAI,MAAMrrM,IAAGorM,IAAG,EAAG,SAASE,GAAGtrM,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,EAAE4hB,EAAEvK,EAAE7O,GAAG,IAAI9C,EAAEjG,MAAM5D,UAAUsL,MAAMtJ,KAAKhB,UAAU,GAAG,IAAIyK,EAAExK,MAAMke,EAAEtV,GAAG,MAAM7F,GAAGnD,KAAK+1G,QAAQ5yG,IAAI,IAAI+yM,IAAG,EAAGC,GAAG,KAAKC,IAAG,EAAGC,GAAG,KAAKC,GAAG,CAACvgG,QAAQ,SAASprG,GAAGurM,IAAG,EAAGC,GAAGxrM,IAAI,SAAS4rM,GAAG5rM,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,EAAE4hB,EAAEvK,EAAE7O,GAAGoqM,IAAG,EAAGC,GAAG,KAAKF,GAAG71M,MAAMk2M,GAAGn2M,WACvV,SAASq2M,GAAG7rM,GAAG,IAAIC,EAAED,EAAE2T,EAAE3T,EAAE,GAAGA,EAAE8rM,UAAU,KAAK7rM,EAAE8rM,QAAQ9rM,EAAEA,EAAE8rM,WAAW,CAAC/rM,EAAEC,EAAE,GAAO,KAAa,MAAjBA,EAAED,GAAS8T,SAAcH,EAAE1T,EAAE8rM,QAAQ/rM,EAAEC,EAAE8rM,aAAa/rM,GAAG,OAAO,IAAIC,EAAEkkM,IAAIxwL,EAAE,KAAK,SAASq4L,GAAGhsM,GAAG,GAAG,KAAKA,EAAEmkM,IAAI,CAAC,IAAIlkM,EAAED,EAAEisM,cAAsE,GAAxD,OAAOhsM,IAAkB,QAAdD,EAAEA,EAAE8rM,aAAqB7rM,EAAED,EAAEisM,gBAAmB,OAAOhsM,EAAE,OAAOA,EAAEisM,WAAW,OAAO,KAAK,SAASppK,GAAG9iC,GAAG,GAAG6rM,GAAG7rM,KAAKA,EAAE,MAAMa,MAAMuQ,EAAE,MAEpS,SAAS+6L,GAAGnsM,GAAW,KAARA,EADtN,SAAYA,GAAG,IAAIC,EAAED,EAAE8rM,UAAU,IAAI7rM,EAAE,CAAS,GAAG,QAAXA,EAAE4rM,GAAG7rM,IAAe,MAAMa,MAAMuQ,EAAE,MAAM,OAAOnR,IAAID,EAAE,KAAKA,EAAE,IAAI,IAAI2T,EAAE3T,EAAE8sB,EAAE7sB,IAAI,CAAC,IAAIxH,EAAEkb,EAAEo4L,OAAO,GAAG,OAAOtzM,EAAE,MAAM,IAAIE,EAAEF,EAAEqzM,UAAU,GAAG,OAAOnzM,EAAE,CAAY,GAAG,QAAdm0B,EAAEr0B,EAAEszM,QAAmB,CAACp4L,EAAEmZ,EAAE,SAAS,MAAM,GAAGr0B,EAAE4E,QAAQ1E,EAAE0E,MAAM,CAAC,IAAI1E,EAAEF,EAAE4E,MAAM1E,GAAG,CAAC,GAAGA,IAAIgb,EAAE,OAAOmvB,GAAGrqC,GAAGuH,EAAE,GAAGrH,IAAIm0B,EAAE,OAAOgW,GAAGrqC,GAAGwH,EAAEtH,EAAEA,EAAEyzM,QAAQ,MAAMvrM,MAAMuQ,EAAE,MAAO,GAAGuC,EAAEo4L,SAASj/K,EAAEi/K,OAAOp4L,EAAElb,EAAEq0B,EAAEn0B,MAAM,CAAC,IAAI,IAAI4hB,GAAE,EAAGvK,EAAEvX,EAAE4E,MAAM2S,GAAG,CAAC,GAAGA,IAAI2D,EAAE,CAAC4G,GAAE,EAAG5G,EAAElb,EAAEq0B,EAAEn0B,EAAE,MAAM,GAAGqX,IAAI8c,EAAE,CAACvS,GAAE,EAAGuS,EAAEr0B,EAAEkb,EAAEhb,EAAE,MAAMqX,EAAEA,EAAEo8L,QAAQ,IAAI7xL,EAAE,CAAC,IAAIvK,EAAErX,EAAE0E,MAAM2S,GAAG,CAAC,GAAGA,IAC5f2D,EAAE,CAAC4G,GAAE,EAAG5G,EAAEhb,EAAEm0B,EAAEr0B,EAAE,MAAM,GAAGuX,IAAI8c,EAAE,CAACvS,GAAE,EAAGuS,EAAEn0B,EAAEgb,EAAElb,EAAE,MAAMuX,EAAEA,EAAEo8L,QAAQ,IAAI7xL,EAAE,MAAM1Z,MAAMuQ,EAAE,OAAQ,GAAGuC,EAAEm4L,YAAYh/K,EAAE,MAAMjsB,MAAMuQ,EAAE,MAAO,GAAG,IAAIuC,EAAEwwL,IAAI,MAAMtjM,MAAMuQ,EAAE,MAAM,OAAOuC,EAAE62L,UAAU/L,UAAU9qL,EAAE3T,EAAEC,EAAmB+iC,CAAGhjC,IAAS,OAAO,KAAK,IAAI,IAAIC,EAAED,IAAI,CAAC,GAAG,IAAIC,EAAEkkM,KAAK,IAAIlkM,EAAEkkM,IAAI,OAAOlkM,EAAE,GAAGA,EAAE5C,MAAM4C,EAAE5C,MAAM0uM,OAAO9rM,EAAEA,EAAEA,EAAE5C,UAAU,CAAC,GAAG4C,IAAID,EAAE,MAAM,MAAMC,EAAEmsM,SAAS,CAAC,IAAInsM,EAAE8rM,QAAQ9rM,EAAE8rM,SAAS/rM,EAAE,OAAO,KAAKC,EAAEA,EAAE8rM,OAAO9rM,EAAEmsM,QAAQL,OAAO9rM,EAAE8rM,OAAO9rM,EAAEA,EAAEmsM,SAAS,OAAO,KAC5c,SAASC,GAAGrsM,EAAEC,GAAG,IAAI,IAAI0T,EAAE3T,EAAE8rM,UAAU,OAAO7rM,GAAG,CAAC,GAAGA,IAAID,GAAGC,IAAI0T,EAAE,OAAM,EAAG1T,EAAEA,EAAE8rM,OAAO,OAAM,EAAG,IAAIO,GAAGC,GAAGC,GAAGC,GAAGC,IAAG,EAAGC,GAAG,GAAGC,GAAG,KAAK5iC,GAAG,KAAK6iC,GAAG,KAAKC,GAAG,IAAItwL,IAAIuwL,GAAG,IAAIvwL,IAAIwwL,GAAG,GAAGC,GAAG,6PAA6PvrM,MAAM,KACrb,SAASwrM,GAAGltM,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,MAAM,CAAC00M,UAAUntM,EAAEotM,aAAantM,EAAEotM,iBAAmB,GAAF15L,EAAK25L,YAAY70M,EAAE80M,iBAAiB,CAACzgL,IAAI,SAAS0gL,GAAGxtM,EAAEC,GAAG,OAAOD,GAAG,IAAK,UAAU,IAAK,WAAW4sM,GAAG,KAAK,MAAM,IAAK,YAAY,IAAK,YAAY5iC,GAAG,KAAK,MAAM,IAAK,YAAY,IAAK,WAAW6iC,GAAG,KAAK,MAAM,IAAK,cAAc,IAAK,aAAaC,GAAGrkJ,OAAOxoD,EAAEwtM,WAAW,MAAM,IAAK,oBAAoB,IAAK,qBAAqBV,GAAGtkJ,OAAOxoD,EAAEwtM,YAC3Z,SAASC,GAAG1tM,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,GAAG,OAAG,OAAOqH,GAAGA,EAAEstM,cAAc30M,GAASqH,EAAEktM,GAAGjtM,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,GAAG,OAAOsH,IAAY,QAARA,EAAEsqM,GAAGtqM,KAAassM,GAAGtsM,IAAID,IAAEA,EAAEqtM,kBAAkBvgL,EAAE7sB,EAAED,EAAEutM,iBAAiB,OAAO90M,IAAI,IAAIwH,EAAE4C,QAAQpK,IAAIwH,EAAEzG,KAAKf,GAAUuH,GAE9M,SAASiuC,GAAGjuC,GAAG,IAAIC,EAAE0tM,GAAG3tM,EAAEtM,QAAQ,GAAG,OAAOuM,EAAE,CAAC,IAAI0T,EAAEk4L,GAAG5rM,GAAG,GAAG,OAAO0T,EAAE,GAAW,MAAR1T,EAAE0T,EAAEwwL,MAAY,GAAW,QAARlkM,EAAE+rM,GAAGr4L,IAAmH,OAAtG3T,EAAEmtM,UAAUltM,OAAEwsM,GAAGzsM,EAAE4tM,cAAa,WAAWngL,EAAEogL,yBAAyB7tM,EAAE8tM,UAAS,WAAWtB,GAAG74L,cAAoB,GAAG,IAAI1T,GAAG0T,EAAE62L,UAAUuD,QAA8D,YAArD/tM,EAAEmtM,UAAU,IAAIx5L,EAAEwwL,IAAIxwL,EAAE62L,UAAUwD,cAAc,MAAahuM,EAAEmtM,UAAU,KAC1U,SAASc,GAAGjuM,GAAG,GAAG,OAAOA,EAAEmtM,UAAU,OAAM,EAAG,IAAI,IAAIltM,EAAED,EAAEutM,iBAAiB,EAAEttM,EAAEpM,QAAQ,CAAC,IAAI8f,EAAEu6L,GAAGluM,EAAEotM,aAAaptM,EAAEqtM,iBAAiBptM,EAAE,GAAGD,EAAEstM,aAAa,GAAG,OAAO35L,EAAE,OAAe,QAAR1T,EAAEsqM,GAAG52L,KAAa44L,GAAGtsM,GAAGD,EAAEmtM,UAAUx5L,GAAE,EAAG1T,EAAE20F,QAAQ,OAAM,EAAG,SAASu5G,GAAGnuM,EAAEC,EAAE0T,GAAGs6L,GAAGjuM,IAAI2T,EAAE80C,OAAOxoD,GACzQ,SAASmuM,KAAK,IAAI1B,IAAG,EAAG,EAAEC,GAAG94M,QAAQ,CAAC,IAAImM,EAAE2sM,GAAG,GAAG,GAAG,OAAO3sM,EAAEmtM,UAAU,CAAmB,QAAlBntM,EAAEuqM,GAAGvqM,EAAEmtM,aAAqBb,GAAGtsM,GAAG,MAAM,IAAI,IAAIC,EAAED,EAAEutM,iBAAiB,EAAEttM,EAAEpM,QAAQ,CAAC,IAAI8f,EAAEu6L,GAAGluM,EAAEotM,aAAaptM,EAAEqtM,iBAAiBptM,EAAE,GAAGD,EAAEstM,aAAa,GAAG,OAAO35L,EAAE,CAAC3T,EAAEmtM,UAAUx5L,EAAE,MAAM1T,EAAE20F,QAAQ,OAAO50F,EAAEmtM,WAAWR,GAAG/3G,QAAQ,OAAOg4G,IAAIqB,GAAGrB,MAAMA,GAAG,MAAM,OAAO5iC,IAAIikC,GAAGjkC,MAAMA,GAAG,MAAM,OAAO6iC,IAAIoB,GAAGpB,MAAMA,GAAG,MAAMC,GAAG1uM,QAAQ+vM,IAAIpB,GAAG3uM,QAAQ+vM,IACrZ,SAASE,GAAGruM,EAAEC,GAAGD,EAAEmtM,YAAYltM,IAAID,EAAEmtM,UAAU,KAAKT,KAAKA,IAAG,EAAGj/K,EAAE6gL,0BAA0B7gL,EAAE8gL,wBAAwBH,MACrH,SAASI,GAAGxuM,GAAG,SAASC,EAAEA,GAAG,OAAOouM,GAAGpuM,EAAED,GAAG,GAAG,EAAE2sM,GAAG94M,OAAO,CAACw6M,GAAG1B,GAAG,GAAG3sM,GAAG,IAAI,IAAI2T,EAAE,EAAEA,EAAEg5L,GAAG94M,OAAO8f,IAAI,CAAC,IAAImZ,EAAE6/K,GAAGh5L,GAAGmZ,EAAEqgL,YAAYntM,IAAI8sB,EAAEqgL,UAAU,OAA+F,IAAxF,OAAOP,IAAIyB,GAAGzB,GAAG5sM,GAAG,OAAOgqK,IAAIqkC,GAAGrkC,GAAGhqK,GAAG,OAAO6sM,IAAIwB,GAAGxB,GAAG7sM,GAAG8sM,GAAG1uM,QAAQ6B,GAAG8sM,GAAG3uM,QAAQ6B,GAAO0T,EAAE,EAAEA,EAAEq5L,GAAGn5M,OAAO8f,KAAImZ,EAAEkgL,GAAGr5L,IAAKw5L,YAAYntM,IAAI8sB,EAAEqgL,UAAU,MAAM,KAAK,EAAEH,GAAGn5M,QAAiB,QAAR8f,EAAEq5L,GAAG,IAAYG,WAAYl/J,GAAGt6B,GAAG,OAAOA,EAAEw5L,WAAWH,GAAGp4G,QAC/X,SAAS65G,GAAGzuM,EAAEC,GAAG,IAAI0T,EAAE,GAAkF,OAA/EA,EAAE3T,EAAE4C,eAAe3C,EAAE2C,cAAc+Q,EAAE,SAAS3T,GAAG,SAASC,EAAE0T,EAAE,MAAM3T,GAAG,MAAMC,EAAS0T,EAAE,IAAI+6L,GAAG,CAACC,aAAaF,GAAG,YAAY,gBAAgBG,mBAAmBH,GAAG,YAAY,sBAAsBI,eAAeJ,GAAG,YAAY,kBAAkBK,cAAcL,GAAG,aAAa,kBAAkBM,GAAG,GAAGC,GAAG,GACnF,SAASC,GAAGjvM,GAAG,GAAG+uM,GAAG/uM,GAAG,OAAO+uM,GAAG/uM,GAAG,IAAI0uM,GAAG1uM,GAAG,OAAOA,EAAE,IAAY2T,EAAR1T,EAAEyuM,GAAG1uM,GAAK,IAAI2T,KAAK1T,EAAE,GAAGA,EAAE1J,eAAeod,IAAIA,KAAKq7L,GAAG,OAAOD,GAAG/uM,GAAGC,EAAE0T,GAAG,OAAO3T,EAA9XwhM,IAAKwN,GAAGrvM,SAASgF,cAAc,OAAOkK,MAAM,mBAAmBnP,gBAAgBgvM,GAAGC,aAAavjK,iBAAiBsjK,GAAGE,mBAAmBxjK,iBAAiBsjK,GAAGG,eAAezjK,WAAW,oBAAoB1rC,eAAegvM,GAAGI,cAAcrP,YACxO,IAAIyP,GAAGD,GAAG,gBAAgBE,GAAGF,GAAG,sBAAsBG,GAAGH,GAAG,kBAAkBI,GAAGJ,GAAG,iBAAiBK,GAAG,IAAI9yL,IAAI+yL,GAAG,IAAI/yL,IAAIgzL,GAAG,CAAC,QAAQ,QAAQN,GAAG,eAAeC,GAAG,qBAAqBC,GAAG,iBAAiB,UAAU,UAAU,iBAAiB,iBAAiB,iBAAiB,iBAAiB,UAAU,UAAU,YAAY,YAAY,QAAQ,QAAQ,QAAQ,QAAQ,oBAAoB,oBAAoB,OAAO,OAAO,aAAa,aAAa,iBAAiB,iBAAiB,YAAY,YAC/e,qBAAqB,qBAAqB,UAAU,UAAU,WAAW,WAAW,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,aAAa,aAAaC,GAAG,gBAAgB,UAAU,WAAW,SAASI,GAAGzvM,EAAEC,GAAG,IAAI,IAAI0T,EAAE,EAAEA,EAAE3T,EAAEnM,OAAO8f,GAAG,EAAE,CAAC,IAAImZ,EAAE9sB,EAAE2T,GAAGlb,EAAEuH,EAAE2T,EAAE,GAAGlb,EAAE,MAAMA,EAAE,GAAGmb,cAAcnb,EAAEqH,MAAM,IAAIyvM,GAAGt/L,IAAI6c,EAAE7sB,GAAGqvM,GAAGr/L,IAAI6c,EAAEr0B,GAAG6oM,EAAG7oM,EAAE,CAACq0B,MAA2B4iL,EAAfjiL,EAAEkiL,gBAAkB,IAAIr3M,GAAE,EAC/X,SAASs3M,GAAG5vM,GAAG,GAAG,KAAK,EAAEA,GAAG,OAAO1H,GAAE,GAAG,EAAE,GAAG,KAAK,EAAE0H,GAAG,OAAO1H,GAAE,GAAG,EAAE,GAAG,KAAK,EAAE0H,GAAG,OAAO1H,GAAE,GAAG,EAAE,IAAI2H,EAAE,GAAGD,EAAE,OAAG,IAAIC,GAAS3H,GAAE,GAAG2H,GAAK,KAAO,GAAFD,IAAa1H,GAAE,GAAG,IAAc,KAAX2H,EAAE,IAAID,IAAkB1H,GAAE,GAAG2H,GAAK,KAAO,IAAFD,IAAc1H,GAAE,EAAE,KAAgB,KAAZ2H,EAAE,KAAKD,IAAkB1H,GAAE,EAAE2H,GAAK,KAAO,KAAFD,IAAe1H,GAAE,EAAE,MAAoB,KAAf2H,EAAE,QAAQD,IAAkB1H,GAAE,EAAE2H,GAAkB,KAAhBA,EAAE,SAASD,IAAkB1H,GAAE,EAAE2H,GAAO,SAAFD,GAAkB1H,GAAE,EAAE,UAAY,KAAO,UAAF0H,IAAoB1H,GAAE,EAAE,WAA2B,KAAjB2H,EAAE,UAAUD,IAAkB1H,GAAE,EAAE2H,GAAK,KAAK,WAAWD,IAAU1H,GAAE,EAAE,aACjfA,GAAE,EAAS0H,GACX,SAAS6vM,GAAG7vM,EAAEC,GAAG,IAAI0T,EAAE3T,EAAE8vM,aAAa,GAAG,IAAIn8L,EAAE,OAAOrb,GAAE,EAAE,IAAIw0B,EAAE,EAAEr0B,EAAE,EAAEE,EAAEqH,EAAE+vM,aAAax1L,EAAEva,EAAEgwM,eAAehgM,EAAEhQ,EAAEiwM,YAAY,GAAG,IAAIt3M,EAAEm0B,EAAEn0B,EAAEF,EAAEH,GAAE,QAAQ,GAAiB,KAAdK,EAAI,UAAFgb,GAAkB,CAAC,IAAIxS,EAAExI,GAAG4hB,EAAE,IAAIpZ,GAAG2rB,EAAE8iL,GAAGzuM,GAAG1I,EAAEH,IAAS,KAAL0X,GAAGrX,KAAUm0B,EAAE8iL,GAAG5/L,GAAGvX,EAAEH,SAAgB,KAAPK,EAAEgb,GAAG4G,IAASuS,EAAE8iL,GAAGj3M,GAAGF,EAAEH,IAAG,IAAI0X,IAAI8c,EAAE8iL,GAAG5/L,GAAGvX,EAAEH,IAAG,GAAG,IAAIw0B,EAAE,OAAO,EAAqC,GAAxBA,EAAEnZ,IAAI,GAAjBmZ,EAAE,GAAGojL,GAAGpjL,IAAa,EAAE,GAAGA,IAAI,GAAG,EAAK,IAAI7sB,GAAGA,IAAI6sB,GAAG,KAAK7sB,EAAEsa,GAAG,CAAO,GAANq1L,GAAG3vM,GAAMxH,GAAGH,GAAE,OAAO2H,EAAE3H,GAAEG,EAAqB,GAAG,KAAtBwH,EAAED,EAAEmwM,gBAAwB,IAAInwM,EAAEA,EAAEowM,cAAcnwM,GAAG6sB,EAAE,EAAE7sB,GAAcxH,EAAE,IAAbkb,EAAE,GAAGu8L,GAAGjwM,IAAU6sB,GAAG9sB,EAAE2T,GAAG1T,IAAIxH,EAAE,OAAOq0B,EAC1e,SAASujL,GAAGrwM,GAAgC,OAAO,KAApCA,GAAkB,WAAhBA,EAAE8vM,cAAsC9vM,EAAI,WAAFA,EAAa,WAAW,EAAE,SAASswM,GAAGtwM,EAAEC,GAAG,OAAOD,GAAG,KAAK,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,GAAG,OAAmB,KAAZA,EAAEuwM,GAAG,IAAItwM,IAASqwM,GAAG,GAAGrwM,GAAGD,EAAE,KAAK,GAAG,OAAoB,KAAbA,EAAEuwM,GAAG,KAAKtwM,IAASqwM,GAAG,EAAErwM,GAAGD,EAAE,KAAK,EAAE,OAAqB,KAAdA,EAAEuwM,GAAG,MAAMtwM,MAA4B,KAAjBD,EAAEuwM,GAAG,SAAStwM,MAAWD,EAAE,MAAMA,EAAE,KAAK,EAAE,OAA0B,KAAnBC,EAAEswM,GAAG,WAAWtwM,MAAWA,EAAE,WAAWA,EAAE,MAAMY,MAAMuQ,EAAE,IAAIpR,IAAK,SAASuwM,GAAGvwM,GAAG,OAAOA,GAAGA,EAAE,SAASwwM,GAAGxwM,GAAG,IAAI,IAAIC,EAAE,GAAG0T,EAAE,EAAE,GAAGA,EAAEA,IAAI1T,EAAEzG,KAAKwG,GAAG,OAAOC,EACrd,SAASwwM,GAAGzwM,EAAEC,EAAE0T,GAAG3T,EAAE8vM,cAAc7vM,EAAE,IAAI6sB,EAAE7sB,EAAE,EAAED,EAAEgwM,gBAAgBljL,EAAE9sB,EAAEiwM,aAAanjL,GAAE9sB,EAAEA,EAAE0wM,YAAWzwM,EAAE,GAAGiwM,GAAGjwM,IAAQ0T,EAAE,IAAIu8L,GAAG/pM,KAAKwqM,MAAMxqM,KAAKwqM,MAAiC,SAAY3wM,GAAG,OAAO,IAAIA,EAAE,GAAG,IAAIijC,GAAGjjC,GAAGqoK,GAAG,GAAG,GAAvEplI,GAAG98B,KAAKggB,IAAIkiJ,GAAGliK,KAAKigB,IAAqD,IAAIwqL,GAAGnjL,EAAEojL,8BAA8BC,GAAGrjL,EAAEogL,yBAAyBkD,IAAG,EAAG,SAASC,GAAGhxM,EAAEC,EAAE0T,EAAEmZ,GAAGk+K,IAAIF,KAAK,IAAIryM,EAAEw4M,GAAGt4M,EAAEqyM,GAAGA,IAAG,EAAG,IAAIH,GAAGpyM,EAAEuH,EAAEC,EAAE0T,EAAEmZ,GAAf,SAA2Bk+K,GAAGryM,IAAIuyM,MAAM,SAAS7hK,GAAGrpC,EAAEC,EAAE0T,EAAEmZ,GAAGgkL,GAAGF,GAAGK,GAAGpzM,KAAK,KAAKmC,EAAEC,EAAE0T,EAAEmZ,IACjb,SAASmkL,GAAGjxM,EAAEC,EAAE0T,EAAEmZ,GAAU,IAAIr0B,EAAX,GAAGs4M,GAAU,IAAIt4M,EAAE,KAAO,EAAFwH,KAAO,EAAE0sM,GAAG94M,SAAS,EAAEo5M,GAAGpqM,QAAQ7C,GAAGA,EAAEktM,GAAG,KAAKltM,EAAEC,EAAE0T,EAAEmZ,GAAG6/K,GAAGnzM,KAAKwG,OAAO,CAAC,IAAIrH,EAAEu1M,GAAGluM,EAAEC,EAAE0T,EAAEmZ,GAAG,GAAG,OAAOn0B,EAAEF,GAAG+0M,GAAGxtM,EAAE8sB,OAAO,CAAC,GAAGr0B,EAAE,CAAC,IAAI,EAAEw0M,GAAGpqM,QAAQ7C,GAA+B,OAA3BA,EAAEktM,GAAGv0M,EAAEqH,EAAEC,EAAE0T,EAAEmZ,QAAG6/K,GAAGnzM,KAAKwG,GAAU,GAfhO,SAAYA,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,OAAOwH,GAAG,IAAK,UAAU,OAAO2sM,GAAGc,GAAGd,GAAG5sM,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,IAAG,EAAG,IAAK,YAAY,OAAOuxK,GAAG0jC,GAAG1jC,GAAGhqK,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,IAAG,EAAG,IAAK,YAAY,OAAOo0M,GAAGa,GAAGb,GAAG7sM,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,IAAG,EAAG,IAAK,cAAc,IAAIE,EAAEF,EAAEg1M,UAAkD,OAAxCX,GAAG78L,IAAItX,EAAE+0M,GAAGZ,GAAG12M,IAAIuC,IAAI,KAAKqH,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,KAAU,EAAG,IAAK,oBAAoB,OAAOE,EAAEF,EAAEg1M,UAAUV,GAAG98L,IAAItX,EAAE+0M,GAAGX,GAAG32M,IAAIuC,IAAI,KAAKqH,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,KAAI,EAAG,OAAM,EAe9Hy4M,CAAGv4M,EAAEqH,EAAEC,EAAE0T,EAAEmZ,GAAG,OAAO0gL,GAAGxtM,EAAE8sB,GAAGqkL,GAAGnxM,EAAEC,EAAE6sB,EAAE,KAAKnZ,KAC9Q,SAASu6L,GAAGluM,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAEuxM,GAAGl9K,GAAW,GAAG,QAAXr0B,EAAEk1M,GAAGl1M,IAAe,CAAC,IAAIE,EAAEkzM,GAAGpzM,GAAG,GAAG,OAAOE,EAAEF,EAAE,SAAS,CAAC,IAAI8hB,EAAE5hB,EAAEwrM,IAAI,GAAG,KAAK5pL,EAAE,CAAS,GAAG,QAAX9hB,EAAEuzM,GAAGrzM,IAAe,OAAOF,EAAEA,EAAE,UAAU,GAAG,IAAI8hB,EAAE,CAAC,GAAG5hB,EAAE6xM,UAAUuD,QAAQ,OAAO,IAAIp1M,EAAEwrM,IAAIxrM,EAAE6xM,UAAUwD,cAAc,KAAKv1M,EAAE,UAAUE,IAAIF,IAAIA,EAAE,OAAqB,OAAd04M,GAAGnxM,EAAEC,EAAE6sB,EAAEr0B,EAAEkb,GAAU,KAAK,IAAIy9L,GAAG,KAAKC,GAAG,KAAKjjC,GAAG,KACzT,SAASkjC,KAAK,GAAGljC,GAAG,OAAOA,GAAG,IAAIpuK,EAAkB8sB,EAAhB7sB,EAAEoxM,GAAG19L,EAAE1T,EAAEpM,OAAS4E,EAAE,UAAU24M,GAAGA,GAAGt8M,MAAMs8M,GAAGnsB,YAAYtsL,EAAEF,EAAE5E,OAAO,IAAImM,EAAE,EAAEA,EAAE2T,GAAG1T,EAAED,KAAKvH,EAAEuH,GAAGA,KAAK,IAAIua,EAAE5G,EAAE3T,EAAE,IAAI8sB,EAAE,EAAEA,GAAGvS,GAAGta,EAAE0T,EAAEmZ,KAAKr0B,EAAEE,EAAEm0B,GAAGA,KAAK,OAAOshJ,GAAG31K,EAAEqH,MAAME,EAAE,EAAE8sB,EAAE,EAAEA,OAAE,GAAQ,SAASykL,GAAGvxM,GAAG,IAAIC,EAAED,EAAEo9K,QAA+E,MAAvE,aAAap9K,EAAgB,KAAbA,EAAEA,EAAEwxM,WAAgB,KAAKvxM,IAAID,EAAE,IAAKA,EAAEC,EAAE,KAAKD,IAAIA,EAAE,IAAW,IAAIA,GAAG,KAAKA,EAAEA,EAAE,EAAE,SAASyxM,KAAK,OAAM,EAAG,SAASC,KAAK,OAAM,EACjY,SAASC,GAAG3xM,GAAG,SAASC,EAAEA,EAAE6sB,EAAEr0B,EAAEE,EAAE4hB,GAA6G,IAAI,IAAI5G,KAAlHte,KAAKu8M,WAAW3xM,EAAE5K,KAAKw8M,YAAYp5M,EAAEpD,KAAKimB,KAAKwR,EAAEz3B,KAAKi4M,YAAY30M,EAAEtD,KAAK3B,OAAO6mB,EAAEllB,KAAKy8M,cAAc,KAAkB9xM,EAAEA,EAAEzJ,eAAeod,KAAK1T,EAAED,EAAE2T,GAAGte,KAAKse,GAAG1T,EAAEA,EAAEtH,GAAGA,EAAEgb,IAAgI,OAA5Hte,KAAK08M,oBAAoB,MAAMp5M,EAAEq5M,iBAAiBr5M,EAAEq5M,kBAAiB,IAAKr5M,EAAEs5M,aAAaR,GAAGC,GAAGr8M,KAAK68M,qBAAqBR,GAAUr8M,KAC1E,OAD+Eud,EAAE3S,EAAEzL,UAAU,CAACsgG,eAAe,WAAWz/F,KAAK28M,kBAAiB,EAAG,IAAIhyM,EAAE3K,KAAKi4M,YAAYttM,IAAIA,EAAE80F,eAAe90F,EAAE80F,iBAAiB,mBAAmB90F,EAAEiyM,cAC7ejyM,EAAEiyM,aAAY,GAAI58M,KAAK08M,mBAAmBN,KAAKU,gBAAgB,WAAW,IAAInyM,EAAE3K,KAAKi4M,YAAYttM,IAAIA,EAAEmyM,gBAAgBnyM,EAAEmyM,kBAAkB,mBAAmBnyM,EAAEoyM,eAAepyM,EAAEoyM,cAAa,GAAI/8M,KAAK68M,qBAAqBT,KAAKY,QAAQ,aAAaC,aAAab,KAAYxxM,EAChR,IAAoLsyM,GAAGC,GAAGC,GAAtLC,GAAG,CAACC,WAAW,EAAEC,QAAQ,EAAEn2B,WAAW,EAAEo2B,UAAU,SAAS7yM,GAAG,OAAOA,EAAE6yM,WAAWvmM,KAAKyuG,OAAOi3F,iBAAiB,EAAEc,UAAU,GAAG91E,GAAG20E,GAAGe,IAAIK,GAAGngM,EAAE,GAAG8/L,GAAG,CAAC7vJ,KAAK,EAAE64C,OAAO,IAAIs3G,GAAGrB,GAAGoB,IAAaE,GAAGrgM,EAAE,GAAGmgM,GAAG,CAAC5nD,QAAQ,EAAEC,QAAQ,EAAEswB,QAAQ,EAAEC,QAAQ,EAAEu3B,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,iBAAiBC,GAAGC,OAAO,EAAEC,QAAQ,EAAEC,cAAc,SAAS5zM,GAAG,YAAO,IAASA,EAAE4zM,cAAc5zM,EAAE6zM,cAAc7zM,EAAEiqM,WAAWjqM,EAAE8zM,UAAU9zM,EAAE6zM,YAAY7zM,EAAE4zM,eAAeG,UAAU,SAAS/zM,GAAG,MAAG,cAC3eA,EAASA,EAAE+zM,WAAU/zM,IAAIyyM,KAAKA,IAAI,cAAczyM,EAAEsb,MAAMi3L,GAAGvyM,EAAEmrJ,QAAQsnD,GAAGtnD,QAAQqnD,GAAGxyM,EAAEorJ,QAAQqnD,GAAGrnD,SAASonD,GAAGD,GAAG,EAAEE,GAAGzyM,GAAUuyM,KAAIyB,UAAU,SAASh0M,GAAG,MAAM,cAAcA,EAAEA,EAAEg0M,UAAUxB,MAAMyB,GAAGtC,GAAGsB,IAAiCiB,GAAGvC,GAA7B/+L,EAAE,GAAGqgM,GAAG,CAACkB,aAAa,KAA4CC,GAAGzC,GAA9B/+L,EAAE,GAAGmgM,GAAG,CAACa,cAAc,KAA0ES,GAAG1C,GAA5D/+L,EAAE,GAAG8/L,GAAG,CAAChY,cAAc,EAAE4Z,YAAY,EAAEC,cAAc,KAAsHC,GAAG7C,GAAxG/+L,EAAE,GAAG8/L,GAAG,CAAC+B,cAAc,SAASz0M,GAAG,MAAM,kBAAkBA,EAAEA,EAAEy0M,cAAc/0M,OAAO+0M,kBAAgDC,GAAG/C,GAArB/+L,EAAE,GAAG8/L,GAAG,CAAC1+L,KAAK,KAAc2gM,GAAG,CAACC,IAAI,SACxfC,SAAS,IAAIC,KAAK,YAAYC,GAAG,UAAUC,MAAM,aAAaC,KAAK,YAAYC,IAAI,SAASC,IAAI,KAAKC,KAAK,cAAcC,KAAK,cAAcC,OAAO,aAAaC,gBAAgB,gBAAgBC,GAAG,CAACC,EAAE,YAAYC,EAAE,MAAMC,GAAG,QAAQC,GAAG,QAAQtrB,GAAG,QAAQurB,GAAG,UAAUC,GAAG,MAAMC,GAAG,QAAQC,GAAG,WAAWC,GAAG,SAASC,GAAG,IAAIC,GAAG,SAASC,GAAG,WAAWC,GAAG,MAAMC,GAAG,OAAOC,GAAG,YAAYC,GAAG,UAAUC,GAAG,aAAaC,GAAG,YAAYC,GAAG,SAASC,GAAG,SAASC,IAAI,KAAKC,IAAI,KAAKC,IAAI,KAAKC,IAAI,KAAKC,IAAI,KAAKC,IAAI,KAAKC,IAAI,KACtfC,IAAI,KAAKC,IAAI,KAAKC,IAAI,MAAMC,IAAI,MAAMC,IAAI,MAAMC,IAAI,UAAUC,IAAI,aAAaC,IAAI,QAAQC,GAAG,CAACC,IAAI,SAASC,QAAQ,UAAUC,KAAK,UAAUC,MAAM,YAAY,SAASC,GAAGj4M,GAAG,IAAIC,EAAE5K,KAAKi4M,YAAY,OAAOrtM,EAAEuzM,iBAAiBvzM,EAAEuzM,iBAAiBxzM,MAAIA,EAAE43M,GAAG53M,OAAMC,EAAED,GAAM,SAASyzM,KAAK,OAAOwE,GAC9R,IACiEC,GAAGvG,GAD7D/+L,EAAE,GAAGmgM,GAAG,CAAC3+M,IAAI,SAAS4L,GAAG,GAAGA,EAAE5L,IAAI,CAAC,IAAI6L,EAAE00M,GAAG30M,EAAE5L,MAAM4L,EAAE5L,IAAI,GAAG,iBAAiB6L,EAAE,OAAOA,EAAE,MAAM,aAAaD,EAAEsb,KAAc,MAARtb,EAAEuxM,GAAGvxM,IAAU,QAAQ4M,OAAOG,aAAa/M,GAAI,YAAYA,EAAEsb,MAAM,UAAUtb,EAAEsb,KAAKk6L,GAAGx1M,EAAEo9K,UAAU,eAAe,IAAI1jK,KAAK,EAAExf,SAAS,EAAEk5M,QAAQ,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,EAAEngM,OAAO,EAAE+kM,OAAO,EAAE3E,iBAAiBC,GAAGjC,SAAS,SAASxxM,GAAG,MAAM,aAAaA,EAAEsb,KAAKi2L,GAAGvxM,GAAG,GAAGo9K,QAAQ,SAASp9K,GAAG,MAAM,YAAYA,EAAEsb,MAAM,UAAUtb,EAAEsb,KAAKtb,EAAEo9K,QAAQ,GAAGg7B,MAAM,SAASp4M,GAAG,MAAM,aAC7eA,EAAEsb,KAAKi2L,GAAGvxM,GAAG,YAAYA,EAAEsb,MAAM,UAAUtb,EAAEsb,KAAKtb,EAAEo9K,QAAQ,MAA4Ii7B,GAAG1G,GAA7H/+L,EAAE,GAAGqgM,GAAG,CAACxF,UAAU,EAAE9+K,MAAM,EAAEC,OAAO,EAAE0pL,SAAS,EAAEC,mBAAmB,EAAEC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,YAAY,EAAEC,UAAU,KAAmIC,GAAGlH,GAArH/+L,EAAE,GAAGmgM,GAAG,CAAC/2B,QAAQ,EAAE88B,cAAc,EAAEC,eAAe,EAAEzF,OAAO,EAAEC,QAAQ,EAAEH,QAAQ,EAAEC,SAAS,EAAEG,iBAAiBC,MAA0EuF,GAAGrH,GAA3D/+L,EAAE,GAAG8/L,GAAG,CAACvoG,aAAa,EAAEmqG,YAAY,EAAEC,cAAc,KAC/P0E,GAAGtH,GAD6Q/+L,EAAE,GAAGqgM,GAAG,CAAC5zD,OAAO,SAASr/I,GAAG,MAAM,WAAWA,EAAEA,EAAEq/I,OAAO,gBAAgBr/I,GAAGA,EAAEk5M,YAAY,GAClfjoD,OAAO,SAASjxJ,GAAG,MAAM,WAAWA,EAAEA,EAAEixJ,OAAO,gBAAgBjxJ,GAAGA,EAAEm5M,YAAY,eAAen5M,GAAGA,EAAEo5M,WAAW,GAAGC,OAAO,EAAEp8B,UAAU,KAAcq8B,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI5tL,GAAG81K,GAAI,qBAAqB9hM,OAAOisB,GAAG,KAAK61K,GAAI,iBAAiB7hM,WAAWgsB,GAAGhsB,SAAS45M,cAAc,IAAI72K,GAAG8+J,GAAI,cAAc9hM,SAASisB,GAAGiX,GAAG4+J,KAAM91K,IAAIC,IAAI,EAAEA,IAAI,IAAIA,IAAI6tL,GAAG5sM,OAAOG,aAAa,IAAI0sM,IAAG,EAC1W,SAASC,GAAG15M,EAAEC,GAAG,OAAOD,GAAG,IAAK,QAAQ,OAAO,IAAIs5M,GAAGz2M,QAAQ5C,EAAEm9K,SAAS,IAAK,UAAU,OAAO,MAAMn9K,EAAEm9K,QAAQ,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,OAAM,EAAG,QAAQ,OAAM,GAAI,SAASu8B,GAAG35M,GAAc,MAAM,kBAAjBA,EAAEA,EAAE07F,SAAkC,SAAS17F,EAAEA,EAAEgU,KAAK,KAAK,IAAI4lM,IAAG,EAE9Q,IAAIpxC,GAAG,CAACv2H,OAAM,EAAG4nK,MAAK,EAAGC,UAAS,EAAG,kBAAiB,EAAGC,OAAM,EAAGC,OAAM,EAAGr6D,QAAO,EAAGloI,UAAS,EAAGmQ,OAAM,EAAG5kB,QAAO,EAAGi3M,KAAI,EAAGpxB,MAAK,EAAGnhI,MAAK,EAAGrtD,KAAI,EAAG6/M,MAAK,GAAI,SAAS9uL,GAAGprB,GAAG,IAAIC,EAAED,GAAGA,EAAE80G,UAAU90G,EAAE80G,SAASlyG,cAAc,MAAM,UAAU3C,IAAIuoK,GAAGxoK,EAAEsb,MAAM,aAAarb,EAAQ,SAASk6M,GAAGn6M,EAAEC,EAAE0T,EAAEmZ,GAAG49K,GAAG59K,GAAsB,GAAnB7sB,EAAEwwK,GAAGxwK,EAAE,aAAgBpM,SAAS8f,EAAE,IAAIqpH,GAAG,WAAW,SAAS,KAAKrpH,EAAEmZ,GAAG9sB,EAAExG,KAAK,CAACiN,MAAMkN,EAAE/P,UAAU3D,KAAK,IAAIm6M,GAAG,KAAKC,GAAG,KAAK,SAAS3lM,GAAG1U,GAAGs6M,GAAGt6M,EAAE,GAAG,SAASmrB,GAAGnrB,GAAe,GAAG4kM,EAAT2V,GAAGv6M,IAAY,OAAOA,EACne,SAASw6M,GAAGx6M,EAAEC,GAAG,GAAG,WAAWD,EAAE,OAAOC,EAAE,IAAIw6M,IAAG,EAAG,GAAGjZ,EAAG,CAAC,IAAIkZ,GAAG,GAAGlZ,EAAG,CAAC,IAAImZ,GAAG,YAAYh7M,SAAS,IAAIg7M,GAAG,CAAC,IAAIC,GAAGj7M,SAASgF,cAAc,OAAOi2M,GAAGt9L,aAAa,UAAU,WAAWq9L,GAAG,oBAAoBC,GAAGC,QAAQH,GAAGC,QAAQD,IAAG,EAAGD,GAAGC,MAAM/6M,SAAS45M,cAAc,EAAE55M,SAAS45M,cAAc,SAASuB,KAAKV,KAAKA,GAAGW,YAAY,mBAAmBC,IAAIX,GAAGD,GAAG,MAAM,SAASY,GAAGh7M,GAAG,GAAG,UAAUA,EAAEmqG,cAAch/E,GAAGkvL,IAAI,CAAC,IAAIp6M,EAAE,GAAyB,GAAtBk6M,GAAGl6M,EAAEo6M,GAAGr6M,EAAEgqM,GAAGhqM,IAAIA,EAAE0U,GAAMs2L,GAAGhrM,EAAEC,OAAO,CAAC+qM,IAAG,EAAG,IAAIJ,GAAG5qM,EAAEC,GAAT,QAAoB+qM,IAAG,EAAGE,QAC3e,SAAS+P,GAAGj7M,EAAEC,EAAE0T,GAAG,YAAY3T,GAAG86M,KAAUT,GAAG1mM,GAARymM,GAAGn6M,GAAUi7M,YAAY,mBAAmBF,KAAK,aAAah7M,GAAG86M,KAAK,SAASK,GAAGn7M,GAAG,GAAG,oBAAoBA,GAAG,UAAUA,GAAG,YAAYA,EAAE,OAAOmrB,GAAGkvL,IAAI,SAASe,GAAGp7M,EAAEC,GAAG,GAAG,UAAUD,EAAE,OAAOmrB,GAAGlrB,GAAG,SAASo7M,GAAGr7M,EAAEC,GAAG,GAAG,UAAUD,GAAG,WAAWA,EAAE,OAAOmrB,GAAGlrB,GAAmE,IAAIq7M,GAAG,oBAAoBpnN,OAAOwyK,GAAGxyK,OAAOwyK,GAA5G,SAAY1mK,EAAEC,GAAG,OAAOD,IAAIC,IAAI,IAAID,GAAG,EAAEA,IAAI,EAAEC,IAAID,IAAIA,GAAGC,IAAIA,GAAoDs7M,GAAGrnN,OAAOM,UAAU+B,eAC7a,SAASilN,GAAGx7M,EAAEC,GAAG,GAAGq7M,GAAGt7M,EAAEC,GAAG,OAAM,EAAG,GAAG,kBAAkBD,GAAG,OAAOA,GAAG,kBAAkBC,GAAG,OAAOA,EAAE,OAAM,EAAG,IAAI0T,EAAEzf,OAAOgI,KAAK8D,GAAG8sB,EAAE54B,OAAOgI,KAAK+D,GAAG,GAAG0T,EAAE9f,SAASi5B,EAAEj5B,OAAO,OAAM,EAAG,IAAIi5B,EAAE,EAAEA,EAAEnZ,EAAE9f,OAAOi5B,IAAI,IAAIyuL,GAAG/kN,KAAKyJ,EAAE0T,EAAEmZ,MAAMwuL,GAAGt7M,EAAE2T,EAAEmZ,IAAI7sB,EAAE0T,EAAEmZ,KAAK,OAAM,EAAG,OAAM,EAAG,SAAS2uL,GAAGz7M,GAAG,KAAKA,GAAGA,EAAEsmM,YAAYtmM,EAAEA,EAAEsmM,WAAW,OAAOtmM,EAClU,SAAS07M,GAAG17M,EAAEC,GAAG,IAAwB6sB,EAApBnZ,EAAE8nM,GAAGz7M,GAAO,IAAJA,EAAE,EAAY2T,GAAG,CAAC,GAAG,IAAIA,EAAEwvI,SAAS,CAA0B,GAAzBr2H,EAAE9sB,EAAE2T,EAAEsxK,YAAYpxL,OAAUmM,GAAGC,GAAG6sB,GAAG7sB,EAAE,MAAM,CAAC20G,KAAKjhG,EAAEb,OAAO7S,EAAED,GAAGA,EAAE8sB,EAAE9sB,EAAE,CAAC,KAAK2T,GAAG,CAAC,GAAGA,EAAEgoM,YAAY,CAAChoM,EAAEA,EAAEgoM,YAAY,MAAM37M,EAAE2T,EAAEA,EAAE4nI,WAAW5nI,OAAE,EAAOA,EAAE8nM,GAAG9nM,IAAI,SAASioM,GAAG57M,EAAEC,GAAG,SAAOD,IAAGC,KAAED,IAAIC,KAAKD,GAAG,IAAIA,EAAEmjJ,YAAYljJ,GAAG,IAAIA,EAAEkjJ,SAASy4D,GAAG57M,EAAEC,EAAEs7I,YAAY,aAAav7I,EAAEA,EAAE2iJ,SAAS1iJ,KAAGD,EAAE67M,4BAAwD,GAA7B77M,EAAE67M,wBAAwB57M,MAClZ,SAAS67M,KAAK,IAAI,IAAI97M,EAAEN,OAAOO,EAAE6kM,IAAK7kM,aAAaD,EAAE+7M,mBAAmB,CAAC,IAAI,IAAIpoM,EAAE,kBAAkB1T,EAAE+7M,cAAc9hN,SAAS4N,KAAK,MAAMglB,GAAGnZ,GAAE,EAAG,IAAGA,EAAyB,MAAM1T,EAAE6kM,GAA/B9kM,EAAEC,EAAE+7M,eAAgCr8M,UAAU,OAAOM,EAAE,SAASg8M,GAAGj8M,GAAG,IAAIC,EAAED,GAAGA,EAAE80G,UAAU90G,EAAE80G,SAASlyG,cAAc,OAAO3C,IAAI,UAAUA,IAAI,SAASD,EAAEsb,MAAM,WAAWtb,EAAEsb,MAAM,QAAQtb,EAAEsb,MAAM,QAAQtb,EAAEsb,MAAM,aAAatb,EAAEsb,OAAO,aAAarb,GAAG,SAASD,EAAEk8M,iBACxZ,IAAIC,GAAG3a,GAAI,iBAAiB7hM,UAAU,IAAIA,SAAS45M,aAAa6C,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,IAAG,EAC3F,SAASC,GAAGx8M,EAAEC,EAAE0T,GAAG,IAAImZ,EAAEnZ,EAAEjU,SAASiU,EAAEA,EAAEhU,SAAS,IAAIgU,EAAEwvI,SAASxvI,EAAEA,EAAE4xL,cAAcgX,IAAI,MAAMH,IAAIA,KAAKtX,EAAGh4K,KAAU,mBAALA,EAAEsvL,KAAyBH,GAAGnvL,GAAGA,EAAE,CAACif,MAAMjf,EAAE2vL,eAAengN,IAAIwwB,EAAE4vL,cAAuF5vL,EAAE,CAAC6vL,YAA3E7vL,GAAGA,EAAEy4K,eAAez4K,EAAEy4K,cAAcqX,aAAal9M,QAAQm9M,gBAA+BF,WAAWG,aAAahwL,EAAEgwL,aAAaC,UAAUjwL,EAAEiwL,UAAUC,YAAYlwL,EAAEkwL,aAAcV,IAAId,GAAGc,GAAGxvL,KAAKwvL,GAAGxvL,EAAsB,GAApBA,EAAE2jJ,GAAG4rC,GAAG,aAAgBxoN,SAASoM,EAAE,IAAI+8H,GAAG,WAAW,SAAS,KAAK/8H,EAAE0T,GAAG3T,EAAExG,KAAK,CAACiN,MAAMxG,EAAE2D,UAAUkpB,IAAI7sB,EAAEvM,OAAO0oN,MACjf3M,GAAG,mjBAAmjB/tM,MAAM,KAC5jB,GAAG+tM,GAAG,oRAAoR/tM,MAAM,KAAK,GAAG+tM,GAAGD,GAAG,GAAG,IAAI,IAAIyN,GAAG,qFAAqFv7M,MAAM,KAAKw7M,GAAG,EAAEA,GAAGD,GAAGppN,OAAOqpN,KAAK3N,GAAGt/L,IAAIgtM,GAAGC,IAAI,GAAG3b,EAAG,eAAe,CAAC,WAAW,cACleA,EAAG,eAAe,CAAC,WAAW,cAAcA,EAAG,iBAAiB,CAAC,aAAa,gBAAgBA,EAAG,iBAAiB,CAAC,aAAa,gBAAgBD,EAAG,WAAW,oEAAoE5/L,MAAM,MAAM4/L,EAAG,WAAW,uFAAuF5/L,MAAM,MAAM4/L,EAAG,gBAAgB,CAAC,iBAAiB,WAAW,YAAY,UAAUA,EAAG,mBAAmB,2DAA2D5/L,MAAM,MAC5f4/L,EAAG,qBAAqB,6DAA6D5/L,MAAM,MAAM4/L,EAAG,sBAAsB,8DAA8D5/L,MAAM,MAAM,IAAIy7M,GAAG,sNAAsNz7M,MAAM,KAAK07M,GAAG,IAAIvuE,IAAI,0CAA0CntI,MAAM,KAAK5F,OAAOqhN,KACnf,SAASE,GAAGr9M,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE9sB,EAAEsb,MAAM,gBAAgBtb,EAAE8xM,cAAcn+L,EA/CjE,SAAY3T,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,EAAE4hB,EAAEvK,EAAE7O,GAA4B,GAAzByqM,GAAGn2M,MAAMJ,KAAKG,WAAc+1M,GAAG,CAAC,IAAGA,GAAgC,MAAM1qM,MAAMuQ,EAAE,MAA1C,IAAI/S,EAAEmtM,GAAGD,IAAG,EAAGC,GAAG,KAA8BC,KAAKA,IAAG,EAAGC,GAAGrtM,IA+CjEi/M,CAAGxwL,EAAE7sB,OAAE,EAAOD,GAAGA,EAAE8xM,cAAc,KACpG,SAASwI,GAAGt6M,EAAEC,GAAGA,EAAE,KAAO,EAAFA,GAAK,IAAI,IAAI0T,EAAE,EAAEA,EAAE3T,EAAEnM,OAAO8f,IAAI,CAAC,IAAImZ,EAAE9sB,EAAE2T,GAAGlb,EAAEq0B,EAAErmB,MAAMqmB,EAAEA,EAAElpB,UAAU5D,EAAE,CAAC,IAAIrH,OAAE,EAAO,GAAGsH,EAAE,IAAI,IAAIsa,EAAEuS,EAAEj5B,OAAO,EAAE,GAAG0mB,EAAEA,IAAI,CAAC,IAAIvK,EAAE8c,EAAEvS,GAAGpZ,EAAE6O,EAAE1c,SAAS+K,EAAE2R,EAAE8hM,cAA2B,GAAb9hM,EAAEA,EAAE3L,SAAYlD,IAAIxI,GAAGF,EAAEy5M,uBAAuB,MAAMlyM,EAAEq9M,GAAG5kN,EAAEuX,EAAE3R,GAAG1F,EAAEwI,OAAO,IAAIoZ,EAAE,EAAEA,EAAEuS,EAAEj5B,OAAO0mB,IAAI,CAAoD,GAA5CpZ,GAAP6O,EAAE8c,EAAEvS,IAAOjnB,SAAS+K,EAAE2R,EAAE8hM,cAAc9hM,EAAEA,EAAE3L,SAAYlD,IAAIxI,GAAGF,EAAEy5M,uBAAuB,MAAMlyM,EAAEq9M,GAAG5kN,EAAEuX,EAAE3R,GAAG1F,EAAEwI,IAAI,GAAGsqM,GAAG,MAAMzrM,EAAE0rM,GAAGD,IAAG,EAAGC,GAAG,KAAK1rM,EAC1a,SAASu4I,GAAEv4I,EAAEC,GAAG,IAAI0T,EAAE4pM,GAAGt9M,GAAG6sB,EAAE9sB,EAAE,WAAW2T,EAAEkK,IAAIiP,KAAK0V,GAAGviC,EAAED,EAAE,GAAE,GAAI2T,EAAEynB,IAAItO,IAAI,IAAI2V,GAAG,kBAAkBt8B,KAAKC,SAAStI,SAAS,IAAIgC,MAAM,GAAG,SAAS6iC,GAAG3iC,GAAGA,EAAEyiC,MAAMziC,EAAEyiC,KAAI,EAAG2+J,EAAGhjM,SAAQ,SAAS6B,GAAGm9M,GAAGv/L,IAAI5d,IAAI4iC,GAAG5iC,GAAE,EAAGD,EAAE,MAAM6iC,GAAG5iC,GAAE,EAAGD,EAAE,UACtO,SAAS6iC,GAAG7iC,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAE,EAAEjD,UAAU3B,aAAQ,IAAS2B,UAAU,GAAGA,UAAU,GAAG,EAAEmD,EAAEgb,EAA6D,GAA3D,oBAAoB3T,GAAG,IAAI2T,EAAEwvI,WAAWxqJ,EAAEgb,EAAE4xL,eAAkB,OAAOz4K,IAAI7sB,GAAGm9M,GAAGv/L,IAAI7d,GAAG,CAAC,GAAG,WAAWA,EAAE,OAAOvH,GAAG,EAAEE,EAAEm0B,EAAE,IAAIvS,EAAEgjM,GAAG5kN,GAAGqX,EAAEhQ,EAAE,MAAMC,EAAE,UAAU,UAAUsa,EAAEsD,IAAI7N,KAAK/P,IAAIxH,GAAG,GAAG+pC,GAAG7pC,EAAEqH,EAAEvH,EAAEwH,GAAGsa,EAAE6gB,IAAIprB,IAClS,SAASwyB,GAAGxiC,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAE82M,GAAGn5M,IAAI6J,GAAG,YAAO,IAASxH,EAAE,EAAEA,GAAG,KAAK,EAAEA,EAAEu4M,GAAG,MAAM,KAAK,EAAEv4M,EAAE4wC,GAAG,MAAM,QAAQ5wC,EAAEw4M,GAAGt9L,EAAElb,EAAEoF,KAAK,KAAKoC,EAAE0T,EAAE3T,GAAGvH,OAAE,GAAQ2yM,IAAI,eAAenrM,GAAG,cAAcA,GAAG,UAAUA,IAAIxH,GAAE,GAAIq0B,OAAE,IAASr0B,EAAEuH,EAAE2H,iBAAiB1H,EAAE0T,EAAE,CAACZ,SAAQ,EAAG8kK,QAAQp/K,IAAIuH,EAAE2H,iBAAiB1H,EAAE0T,GAAE,QAAI,IAASlb,EAAEuH,EAAE2H,iBAAiB1H,EAAE0T,EAAE,CAACkkK,QAAQp/K,IAAIuH,EAAE2H,iBAAiB1H,EAAE0T,GAAE,GACpW,SAASw9L,GAAGnxM,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,IAAIE,EAAEm0B,EAAE,GAAG,KAAO,EAAF7sB,IAAM,KAAO,EAAFA,IAAM,OAAO6sB,EAAE9sB,EAAE,OAAO,CAAC,GAAG,OAAO8sB,EAAE,OAAO,IAAIvS,EAAEuS,EAAEq3K,IAAI,GAAG,IAAI5pL,GAAG,IAAIA,EAAE,CAAC,IAAIvK,EAAE8c,EAAE09K,UAAUwD,cAAc,GAAGh+L,IAAIvX,GAAG,IAAIuX,EAAEmzI,UAAUnzI,EAAEurI,aAAa9iJ,EAAE,MAAM,GAAG,IAAI8hB,EAAE,IAAIA,EAAEuS,EAAEi/K,OAAO,OAAOxxL,GAAG,CAAC,IAAIpZ,EAAEoZ,EAAE4pL,IAAI,IAAG,IAAIhjM,GAAG,IAAIA,MAAKA,EAAEoZ,EAAEiwL,UAAUwD,iBAAkBv1M,GAAG,IAAI0I,EAAEgiJ,UAAUhiJ,EAAEo6I,aAAa9iJ,GAAE,OAAO8hB,EAAEA,EAAEwxL,OAAO,KAAK,OAAO/7L,GAAG,CAAS,GAAG,QAAXuK,EAAEozL,GAAG39L,IAAe,OAAe,GAAG,KAAX7O,EAAEoZ,EAAE4pL,MAAc,IAAIhjM,EAAE,CAAC2rB,EAAEn0B,EAAE4hB,EAAE,SAASva,EAAEgQ,EAAEA,EAAEurI,YAAYzuH,EAAEA,EAAEi/K,QAvD7c,SAAY/rM,EAAEC,EAAE0T,GAAG,GAAGs3L,GAAG,OAAOjrM,EAAEC,EAAE0T,GAAGs3L,IAAG,EAAG,IAAWF,GAAG/qM,EAAEC,EAAE0T,GAAlB,QAA6Bs3L,IAAG,EAAGC,MAuDoYsS,EAAG,WAAW,IAAI1wL,EAAEn0B,EAAEF,EAAEuxM,GAAGr2L,GAAG4G,EAAE,GACpfva,EAAE,CAAC,IAAIgQ,EAAEs/L,GAAGl5M,IAAI4J,GAAG,QAAG,IAASgQ,EAAE,CAAC,IAAI7O,EAAE67H,GAAG7rH,EAAEnR,EAAE,OAAOA,GAAG,IAAK,WAAW,GAAG,IAAIuxM,GAAG59L,GAAG,MAAM3T,EAAE,IAAK,UAAU,IAAK,QAAQmB,EAAE+2M,GAAG,MAAM,IAAK,UAAU/mM,EAAE,QAAQhQ,EAAEizM,GAAG,MAAM,IAAK,WAAWjjM,EAAE,OAAOhQ,EAAEizM,GAAG,MAAM,IAAK,aAAa,IAAK,YAAYjzM,EAAEizM,GAAG,MAAM,IAAK,QAAQ,GAAG,IAAIzgM,EAAE+/L,OAAO,MAAM1zM,EAAE,IAAK,WAAW,IAAK,WAAW,IAAK,YAAY,IAAK,YAAY,IAAK,UAAU,IAAK,WAAW,IAAK,YAAY,IAAK,cAAcmB,EAAE8yM,GAAG,MAAM,IAAK,OAAO,IAAK,UAAU,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,OAAO9yM,EAC1iB+yM,GAAG,MAAM,IAAK,cAAc,IAAK,WAAW,IAAK,YAAY,IAAK,aAAa/yM,EAAE03M,GAAG,MAAM,KAAK3J,GAAG,KAAKC,GAAG,KAAKC,GAAGjuM,EAAEkzM,GAAG,MAAM,KAAKhF,GAAGluM,EAAE63M,GAAG,MAAM,IAAK,SAAS73M,EAAE6xM,GAAG,MAAM,IAAK,QAAQ7xM,EAAE83M,GAAG,MAAM,IAAK,OAAO,IAAK,MAAM,IAAK,QAAQ93M,EAAEqzM,GAAG,MAAM,IAAK,oBAAoB,IAAK,qBAAqB,IAAK,gBAAgB,IAAK,cAAc,IAAK,cAAc,IAAK,aAAa,IAAK,cAAc,IAAK,YAAYrzM,EAAEk3M,GAAG,IAAIpvL,EAAE,KAAO,EAAFhpB,GAAK0xB,GAAG1I,GAAG,WAAWjpB,EAAE+uC,EAAE9lB,EAAE,OAAOjZ,EAAEA,EAAE,UAAU,KAAKA,EAAEiZ,EAAE,GAAG,IAAI,IAAQd,EAAJrC,EAAEgH,EAAI,OAC/ehH,GAAG,CAAK,IAAIzQ,GAAR8S,EAAErC,GAAU0kL,UAAsF,GAA5E,IAAIriL,EAAEg8K,KAAK,OAAO9uL,IAAI8S,EAAE9S,EAAE,OAAO05B,IAAc,OAAV15B,EAAE81L,GAAGrlL,EAAEipB,KAAY9lB,EAAEzvB,KAAKikN,GAAG33L,EAAEzQ,EAAE8S,MAASwJ,EAAE,MAAM7L,EAAEA,EAAEimL,OAAO,EAAE9iL,EAAEp1B,SAASmc,EAAE,IAAI7O,EAAE6O,EAAEmB,EAAE,KAAKwC,EAAElb,GAAG8hB,EAAE/gB,KAAK,CAACiN,MAAMuJ,EAAEpM,UAAUqlB,MAAM,GAAG,KAAO,EAAFhpB,GAAK,CAA4E,GAAnCkB,EAAE,aAAanB,GAAG,eAAeA,KAAtEgQ,EAAE,cAAchQ,GAAG,gBAAgBA,IAA2C,KAAO,GAAFC,MAAQkR,EAAEwC,EAAEigM,eAAejgM,EAAEkgM,eAAelG,GAAGx8L,KAAIA,EAAEusM,OAAgBv8M,GAAG6O,KAAGA,EAAEvX,EAAEiH,SAASjH,EAAEA,GAAGuX,EAAEvX,EAAE8sM,eAAev1L,EAAE4sM,aAAa5sM,EAAE2tM,aAAaj+M,OAAUyB,GAAqCA,EAAE2rB,EAAiB,QAAf3b,GAAnCA,EAAEwC,EAAEigM,eAAejgM,EAAEmgM,WAAkBnG,GAAGx8L,GAAG,QACleA,KAARwgB,EAAEk6K,GAAG16L,KAAU,IAAIA,EAAEgzL,KAAK,IAAIhzL,EAAEgzL,OAAKhzL,EAAE,QAAUhQ,EAAE,KAAKgQ,EAAE2b,GAAK3rB,IAAIgQ,GAAE,CAAgU,GAA/T8X,EAAEgrL,GAAG5+L,EAAE,eAAe05B,EAAE,eAAejpB,EAAE,QAAW,eAAe9lB,GAAG,gBAAgBA,IAAEipB,EAAEovL,GAAGhjM,EAAE,iBAAiB05B,EAAE,iBAAiBjpB,EAAE,WAAU6L,EAAE,MAAMxwB,EAAE6O,EAAEuqM,GAAGp5M,GAAGgnB,EAAE,MAAMhX,EAAEnB,EAAEuqM,GAAGppM,IAAGnB,EAAE,IAAIiZ,EAAE5T,EAAEyQ,EAAE,QAAQ3kB,EAAEwS,EAAElb,IAAK/E,OAAOi+B,EAAE3hB,EAAE4jM,cAAczrL,EAAE9S,EAAE,KAAKs4L,GAAGl1M,KAAKq0B,KAAI7D,EAAE,IAAIA,EAAE8lB,EAAEjpB,EAAE,QAAQ3U,EAAEwC,EAAElb,IAAK/E,OAAOy0B,EAAEc,EAAE2qL,cAAcjiL,EAAEtc,EAAE4T,GAAG0I,EAAEtc,EAAKlU,GAAGgQ,EAAElR,EAAE,CAAa,IAAR8uC,EAAE59B,EAAE2U,EAAE,EAAMqC,EAAhBc,EAAE9nB,EAAkBgnB,EAAEA,EAAEy1L,GAAGz1L,GAAGrC,IAAQ,IAAJqC,EAAE,EAAM9S,EAAE05B,EAAE15B,EAAEA,EAAEuoM,GAAGvoM,GAAG8S,IAAI,KAAK,EAAErC,EAAEqC,GAAGc,EAAE20L,GAAG30L,GAAGnD,IAAI,KAAK,EAAEqC,EAAErC,GAAGipB,EACpf6uK,GAAG7uK,GAAG5mB,IAAI,KAAKrC,KAAK,CAAC,GAAGmD,IAAI8lB,GAAG,OAAOA,GAAG9lB,IAAI8lB,EAAE+8J,UAAU,MAAM7rM,EAAEgpB,EAAE20L,GAAG30L,GAAG8lB,EAAE6uK,GAAG7uK,GAAG9lB,EAAE,UAAUA,EAAE,KAAK,OAAO9nB,GAAG08M,GAAGtjM,EAAEvK,EAAE7O,EAAE8nB,GAAE,GAAI,OAAO9X,GAAG,OAAOwgB,GAAGksL,GAAGtjM,EAAEoX,EAAExgB,EAAE8X,GAAE,GAAiE,GAAG,YAA1C9nB,GAAjB6O,EAAE8c,EAAEytL,GAAGztL,GAAGptB,QAAWo1G,UAAU9kG,EAAE8kG,SAASlyG,gBAA+B,UAAUzB,GAAG,SAAS6O,EAAEsL,KAAK,IAAIujL,EAAE2b,QAAQ,GAAGpvL,GAAGpb,GAAG,GAAGyqM,GAAG5b,EAAEwc,OAAO,CAACxc,EAAEsc,GAAG,IAAIjc,EAAE+b,QAAQ95M,EAAE6O,EAAE8kG,WAAW,UAAU3zG,EAAEyB,gBAAgB,aAAaoN,EAAEsL,MAAM,UAAUtL,EAAEsL,QAAQujL,EAAEuc,IAClV,OADyVvc,IAAIA,EAAEA,EAAE7+L,EAAE8sB,IAAKqtL,GAAG5/L,EAAEskL,EAAElrL,EAAElb,IAAWymM,GAAGA,EAAEl/L,EAAEgQ,EAAE8c,GAAG,aAAa9sB,IAAIk/L,EAAElvL,EAAEi1L,gBACte/F,EAAEkG,YAAY,WAAWp1L,EAAEsL,MAAMgqL,GAAGt1L,EAAE,SAASA,EAAElb,QAAOoqM,EAAEpyK,EAAEytL,GAAGztL,GAAGptB,OAAcM,GAAG,IAAK,WAAaorB,GAAG8zK,IAAI,SAASA,EAAEgd,mBAAgBE,GAAGld,EAAEmd,GAAGvvL,EAAEwvL,GAAG,MAAK,MAAM,IAAK,WAAWA,GAAGD,GAAGD,GAAG,KAAK,MAAM,IAAK,YAAYG,IAAG,EAAG,MAAM,IAAK,cAAc,IAAK,UAAU,IAAK,UAAUA,IAAG,EAAGC,GAAGjiM,EAAE5G,EAAElb,GAAG,MAAM,IAAK,kBAAkB,GAAG0jN,GAAG,MAAM,IAAK,UAAU,IAAK,QAAQK,GAAGjiM,EAAE5G,EAAElb,GAAG,IAAI0mM,EAAE,GAAGzzK,GAAGzrB,EAAE,CAAC,OAAOD,GAAG,IAAK,mBAAmB,IAAIg4I,EAAE,qBAAqB,MAAM/3I,EAAE,IAAK,iBAAiB+3I,EAAE,mBAAmB,MAAM/3I,EACrf,IAAK,oBAAoB+3I,EAAE,sBAAsB,MAAM/3I,EAAE+3I,OAAE,OAAY4hE,GAAGF,GAAG15M,EAAE2T,KAAKqkI,EAAE,oBAAoB,YAAYh4I,GAAG,MAAM2T,EAAEypK,UAAUplC,EAAE,sBAAsBA,IAAIp1G,IAAI,OAAOjvB,EAAEwkM,SAASyB,IAAI,uBAAuB5hE,EAAE,qBAAqBA,GAAG4hE,KAAKza,EAAEmS,OAAYD,GAAG,UAARD,GAAG34M,GAAkB24M,GAAGt8M,MAAMs8M,GAAGnsB,YAAY20B,IAAG,IAAe,GAAV1a,EAAEzuB,GAAG3jJ,EAAEkrH,IAAOnkJ,SAASmkJ,EAAE,IAAI08D,GAAG18D,EAAEh4I,EAAE,KAAK2T,EAAElb,GAAG8hB,EAAE/gB,KAAK,CAACiN,MAAMuxI,EAAEp0I,UAAUs7L,IAAIC,EAAEnnD,EAAEhkI,KAAKmrL,EAAW,QAARA,EAAEwa,GAAGhmM,MAAcqkI,EAAEhkI,KAAKmrL,MAASA,EAAEz8J,GA1BjK,SAAY1iC,EAAEC,GAAG,OAAOD,GAAG,IAAK,iBAAiB,OAAO25M,GAAG15M,GAAG,IAAK,WAAW,OAAG,KAAKA,EAAEm4M,MAAa,MAAKqB,IAAG,EAAUD,IAAG,IAAK,YAAY,OAAOx5M,EAAEC,EAAE+T,QAASwlM,IAAIC,GAAG,KAAKz5M,EAAE,QAAQ,OAAO,MA0BxB89M,CAAG99M,EAAE2T,GAzB1b,SAAY3T,EAAEC,GAAG,GAAG25M,GAAG,MAAM,mBAAmB55M,IAAI0rB,IAAIguL,GAAG15M,EAAEC,IAAID,EAAEsxM,KAAKljC,GAAGijC,GAAGD,GAAG,KAAKwI,IAAG,EAAG55M,GAAG,KAAK,OAAOA,GAAG,IAAK,QAAQ,OAAO,KAAK,IAAK,WAAW,KAAKC,EAAEmzM,SAASnzM,EAAEqzM,QAAQrzM,EAAEszM,UAAUtzM,EAAEmzM,SAASnzM,EAAEqzM,OAAO,CAAC,GAAGrzM,EAAE89M,MAAM,EAAE99M,EAAE89M,KAAKlqN,OAAO,OAAOoM,EAAE89M,KAAK,GAAG99M,EAAEm4M,MAAM,OAAOxrM,OAAOG,aAAa9M,EAAEm4M,OAAO,OAAO,KAAK,IAAK,iBAAiB,OAAOx1K,IAAI,OAAO3iC,EAAEk4M,OAAO,KAAKl4M,EAAE+T,KAAK,QAAQ,OAAO,MAyB2DgqM,CAAGh+M,EAAE2T,MAA2B,GAAxBmZ,EAAE2jJ,GAAG3jJ,EAAE,kBAAqBj5B,SAAS4E,EAAE,IAAIi8M,GAAG,gBACnf,cAAc,KAAK/gM,EAAElb,GAAG8hB,EAAE/gB,KAAK,CAACiN,MAAMhO,EAAEmL,UAAUkpB,IAAIr0B,EAAEub,KAAKmrL,IAAGmb,GAAG//L,EAAEta,MAAK,SAASw9M,GAAGz9M,EAAEC,EAAE0T,GAAG,MAAM,CAACrgB,SAAS0M,EAAEqE,SAASpE,EAAE6xM,cAAcn+L,GAAG,SAAS88J,GAAGzwK,EAAEC,GAAG,IAAI,IAAI0T,EAAE1T,EAAE,UAAU6sB,EAAE,GAAG,OAAO9sB,GAAG,CAAC,IAAIvH,EAAEuH,EAAErH,EAAEF,EAAE+xM,UAAU,IAAI/xM,EAAE0rM,KAAK,OAAOxrM,IAAIF,EAAEE,EAAY,OAAVA,EAAEwyM,GAAGnrM,EAAE2T,KAAYmZ,EAAE5qB,QAAQu7M,GAAGz9M,EAAErH,EAAEF,IAAc,OAAVE,EAAEwyM,GAAGnrM,EAAEC,KAAY6sB,EAAEtzB,KAAKikN,GAAGz9M,EAAErH,EAAEF,KAAKuH,EAAEA,EAAE+rM,OAAO,OAAOj/K,EAAE,SAAS8wL,GAAG59M,GAAG,GAAG,OAAOA,EAAE,OAAO,KAAK,GAAGA,EAAEA,EAAE+rM,aAAa/rM,GAAG,IAAIA,EAAEmkM,KAAK,OAAOnkM,GAAI,KACxa,SAAS69M,GAAG79M,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,IAAI,IAAIE,EAAEsH,EAAE2xM,WAAWr3L,EAAE,GAAG,OAAO5G,GAAGA,IAAImZ,GAAG,CAAC,IAAI9c,EAAE2D,EAAExS,EAAE6O,EAAE87L,UAAUztM,EAAE2R,EAAEw6L,UAAU,GAAG,OAAOrpM,GAAGA,IAAI2rB,EAAE,MAAM,IAAI9c,EAAEm0L,KAAK,OAAO9lM,IAAI2R,EAAE3R,EAAE5F,EAAa,OAAV0I,EAAEgqM,GAAGx3L,EAAEhb,KAAY4hB,EAAErY,QAAQu7M,GAAG9pM,EAAExS,EAAE6O,IAAKvX,GAAc,OAAV0I,EAAEgqM,GAAGx3L,EAAEhb,KAAY4hB,EAAE/gB,KAAKikN,GAAG9pM,EAAExS,EAAE6O,KAAM2D,EAAEA,EAAEo4L,OAAO,IAAIxxL,EAAE1mB,QAAQmM,EAAExG,KAAK,CAACiN,MAAMxG,EAAE2D,UAAU2W,IAAI,SAAS0jM,MAAM,IAAIC,GAAG,KAAKtzC,GAAG,KAAK,SAASuzC,GAAGn+M,EAAEC,GAAG,OAAOD,GAAG,IAAK,SAAS,IAAK,QAAQ,IAAK,SAAS,IAAK,WAAW,QAAQC,EAAEm+M,UAAU,OAAM,EAC3b,SAASC,GAAGr+M,EAAEC,GAAG,MAAM,aAAaD,GAAG,WAAWA,GAAG,aAAaA,GAAG,kBAAkBC,EAAE7E,UAAU,kBAAkB6E,EAAE7E,UAAU,kBAAkB6E,EAAE6lM,yBAAyB,OAAO7lM,EAAE6lM,yBAAyB,MAAM7lM,EAAE6lM,wBAAwBwY,OAAO,IAAIC,GAAG,oBAAoB3xG,WAAWA,gBAAW,EAAO4xG,GAAG,oBAAoB/gE,aAAaA,kBAAa,EAAO,SAASghE,GAAGz+M,GAAG,IAAIA,EAAEmjJ,SAASnjJ,EAAEilL,YAAY,GAAG,IAAIjlL,EAAEmjJ,WAAoB,OAATnjJ,EAAEA,EAAEuwH,QAAevwH,EAAEilL,YAAY,KACxc,SAASy5B,GAAG1+M,GAAG,KAAK,MAAMA,EAAEA,EAAEA,EAAE27M,YAAY,CAAC,IAAI17M,EAAED,EAAEmjJ,SAAS,GAAG,IAAIljJ,GAAG,IAAIA,EAAE,MAAM,OAAOD,EAAE,SAAS2+M,GAAG3+M,GAAGA,EAAEA,EAAE4+M,gBAAgB,IAAI,IAAI3+M,EAAE,EAAED,GAAG,CAAC,GAAG,IAAIA,EAAEmjJ,SAAS,CAAC,IAAIxvI,EAAE3T,EAAEgU,KAAK,GAAG,MAAML,GAAG,OAAOA,GAAG,OAAOA,EAAE,CAAC,GAAG,IAAI1T,EAAE,OAAOD,EAAEC,QAAQ,OAAO0T,GAAG1T,IAAID,EAAEA,EAAE4+M,gBAAgB,OAAO,KAAK,IAAIC,GAAG,EAA0D,IAAIC,GAAG34M,KAAKC,SAAStI,SAAS,IAAIgC,MAAM,GAAGi/M,GAAG,gBAAgBD,GAAGE,GAAG,gBAAgBF,GAAGpB,GAAG,oBAAoBoB,GAAGG,GAAG,iBAAiBH,GAC9d,SAASnR,GAAG3tM,GAAG,IAAIC,EAAED,EAAE++M,IAAI,GAAG9+M,EAAE,OAAOA,EAAE,IAAI,IAAI0T,EAAE3T,EAAEu7I,WAAW5nI,GAAG,CAAC,GAAG1T,EAAE0T,EAAE+pM,KAAK/pM,EAAEorM,IAAI,CAAe,GAAdprM,EAAE1T,EAAE6rM,UAAa,OAAO7rM,EAAE5C,OAAO,OAAOsW,GAAG,OAAOA,EAAEtW,MAAM,IAAI2C,EAAE2+M,GAAG3+M,GAAG,OAAOA,GAAG,CAAC,GAAG2T,EAAE3T,EAAE++M,IAAI,OAAOprM,EAAE3T,EAAE2+M,GAAG3+M,GAAG,OAAOC,EAAM0T,GAAJ3T,EAAE2T,GAAM4nI,WAAW,OAAO,KAAK,SAASgvD,GAAGvqM,GAAkB,QAAfA,EAAEA,EAAE++M,KAAK/+M,EAAE09M,MAAc,IAAI19M,EAAEmkM,KAAK,IAAInkM,EAAEmkM,KAAK,KAAKnkM,EAAEmkM,KAAK,IAAInkM,EAAEmkM,IAAI,KAAKnkM,EAAE,SAASu6M,GAAGv6M,GAAG,GAAG,IAAIA,EAAEmkM,KAAK,IAAInkM,EAAEmkM,IAAI,OAAOnkM,EAAEwqM,UAAU,MAAM3pM,MAAMuQ,EAAE,KAAM,SAASq5L,GAAGzqM,GAAG,OAAOA,EAAEg/M,KAAK,KAClb,SAASzB,GAAGv9M,GAAG,IAAIC,EAAED,EAAEi/M,IAAkC,YAA9B,IAASh/M,IAAIA,EAAED,EAAEi/M,IAAI,IAAIpwE,KAAY5uI,EAAE,IAAIi/M,GAAG,GAAGC,IAAI,EAAE,SAASC,GAAGp/M,GAAG,MAAM,CAACy+L,QAAQz+L,GAAG,SAAS0+L,GAAE1+L,GAAG,EAAEm/M,KAAKn/M,EAAEy+L,QAAQygB,GAAGC,IAAID,GAAGC,IAAI,KAAKA,MAAM,SAASlnE,GAAEj4I,EAAEC,GAAGk/M,KAAKD,GAAGC,IAAIn/M,EAAEy+L,QAAQz+L,EAAEy+L,QAAQx+L,EAAE,IAAIo/M,GAAG,GAAGrgB,GAAEogB,GAAGC,IAAIpgB,GAAEmgB,IAAG,GAAIE,GAAGD,GAC5P,SAASE,GAAGv/M,EAAEC,GAAG,IAAI0T,EAAE3T,EAAEsb,KAAKvJ,aAAa,IAAI4B,EAAE,OAAO0rM,GAAG,IAAIvyL,EAAE9sB,EAAEwqM,UAAU,GAAG19K,GAAGA,EAAE0yL,8CAA8Cv/M,EAAE,OAAO6sB,EAAE2yL,0CAA0C,IAAS9mN,EAALF,EAAE,GAAK,IAAIE,KAAKgb,EAAElb,EAAEE,GAAGsH,EAAEtH,GAAoH,OAAjHm0B,KAAI9sB,EAAEA,EAAEwqM,WAAYgV,4CAA4Cv/M,EAAED,EAAEy/M,0CAA0ChnN,GAAUA,EAAE,SAASinN,GAAG1/M,GAAyB,OAAO,QAA7BA,EAAEA,EAAEqR,yBAAmC,IAASrR,EAAE,SAAS2/M,KAAKjhB,GAAEO,IAAGP,GAAEM,IAAG,SAAS4gB,GAAG5/M,EAAEC,EAAE0T,GAAG,GAAGqrL,GAAEP,UAAU4gB,GAAG,MAAMx+M,MAAMuQ,EAAE,MAAM6mI,GAAE+mD,GAAE/+L,GAAGg4I,GAAEgnD,GAAEtrL,GAC/e,SAASksM,GAAG7/M,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE9sB,EAAEwqM,UAAgC,GAAtBxqM,EAAEC,EAAEoR,kBAAqB,oBAAoByb,EAAE/b,gBAAgB,OAAO4C,EAAwB,IAAI,IAAIlb,KAA9Bq0B,EAAEA,EAAE/b,kBAAiC,KAAKtY,KAAKuH,GAAG,MAAMa,MAAMuQ,EAAE,IAAIizL,EAAGpkM,IAAI,UAAUxH,IAAI,OAAOma,EAAE,GAAGe,EAAEmZ,GAAG,SAASgzL,GAAG9/M,GAAyG,OAAtGA,GAAGA,EAAEA,EAAEwqM,YAAYxqM,EAAE+/M,2CAA2CV,GAAGC,GAAGtgB,GAAEP,QAAQxmD,GAAE+mD,GAAEh/L,GAAGi4I,GAAEgnD,GAAEA,GAAER,UAAe,EAAG,SAASuhB,GAAGhgN,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE9sB,EAAEwqM,UAAU,IAAI19K,EAAE,MAAMjsB,MAAMuQ,EAAE,MAAMuC,GAAG3T,EAAE6/M,GAAG7/M,EAAEC,EAAEq/M,IAAIxyL,EAAEizL,0CAA0C//M,EAAE0+L,GAAEO,IAAGP,GAAEM,IAAG/mD,GAAE+mD,GAAEh/L,IAAI0+L,GAAEO,IAAGhnD,GAAEgnD,GAAEtrL,GAC7e,IAAIssM,GAAG,KAAKC,GAAG,KAAKC,GAAG1yL,EAAEogL,yBAAyBuS,GAAG3yL,EAAE6gL,0BAA0B+R,GAAG5yL,EAAE6yL,wBAAwBC,GAAG9yL,EAAE+yL,qBAAqBC,GAAGhzL,EAAEizL,sBAAsBC,GAAGlzL,EAAEkiL,aAAaiR,GAAGnzL,EAAEozL,iCAAiCC,GAAGrzL,EAAEszL,2BAA2BC,GAAGvzL,EAAEojL,8BAA8BoQ,GAAGxzL,EAAE8gL,wBAAwB2S,GAAGzzL,EAAE0zL,qBAAqBC,GAAG3zL,EAAE4zL,sBAAsBC,GAAG,GAAGC,QAAG,IAASd,GAAGA,GAAG,aAAae,GAAG,KAAKC,GAAG,KAAKC,IAAG,EAAGC,GAAGhB,KAAKtoE,GAAE,IAAIspE,GAAGhB,GAAG,WAAW,OAAOA,KAAKgB,IACtd,SAASC,KAAK,OAAOhB,MAAM,KAAKE,GAAG,OAAO,GAAG,KAAKE,GAAG,OAAO,GAAG,KAAKC,GAAG,OAAO,GAAG,KAAKC,GAAG,OAAO,GAAG,KAAKE,GAAG,OAAO,GAAG,QAAQ,MAAMvgN,MAAMuQ,EAAE,OAAQ,SAASywM,GAAG7hN,GAAG,OAAOA,GAAG,KAAK,GAAG,OAAO8gN,GAAG,KAAK,GAAG,OAAOE,GAAG,KAAK,GAAG,OAAOC,GAAG,KAAK,GAAG,OAAOC,GAAG,KAAK,GAAG,OAAOE,GAAG,QAAQ,MAAMvgN,MAAMuQ,EAAE,OAAQ,SAAS0wM,GAAG9hN,EAAEC,GAAW,OAARD,EAAE6hN,GAAG7hN,GAAUmgN,GAAGngN,EAAEC,GAAG,SAAS8hN,GAAG/hN,EAAEC,EAAE0T,GAAW,OAAR3T,EAAE6hN,GAAG7hN,GAAUogN,GAAGpgN,EAAEC,EAAE0T,GAAG,SAASquM,KAAK,GAAG,OAAOP,GAAG,CAAC,IAAIzhN,EAAEyhN,GAAGA,GAAG,KAAKpB,GAAGrgN,GAAGiiN,KAC3a,SAASA,KAAK,IAAIP,IAAI,OAAOF,GAAG,CAACE,IAAG,EAAG,IAAI1hN,EAAE,EAAE,IAAI,IAAIC,EAAEuhN,GAAGM,GAAG,IAAG,WAAW,KAAK9hN,EAAEC,EAAEpM,OAAOmM,IAAI,CAAC,IAAI2T,EAAE1T,EAAED,GAAG,GAAG2T,EAAEA,GAAE,SAAU,OAAOA,OAAM6tM,GAAG,KAAK,MAAM7tM,GAAG,MAAM,OAAO6tM,KAAKA,GAAGA,GAAG1hN,MAAME,EAAE,IAAIogN,GAAGU,GAAGkB,IAAIruM,EAA3J,QAAsK+tM,IAAG,IAAK,IAAIQ,GAAGzf,EAAGjD,wBAAwB,SAAS2iB,GAAGniN,EAAEC,GAAG,GAAGD,GAAGA,EAAE67L,aAAa,CAA4B,IAAI,IAAIloL,KAAnC1T,EAAE2S,EAAE,GAAG3S,GAAGD,EAAEA,EAAE67L,kBAA4B,IAAS57L,EAAE0T,KAAK1T,EAAE0T,GAAG3T,EAAE2T,IAAI,OAAO1T,EAAE,OAAOA,EAAE,IAAImiN,GAAGhD,GAAG,MAAMiD,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAK,SAASC,KAAKD,GAAGD,GAAGD,GAAG,KAC5b,SAASI,GAAGziN,GAAG,IAAIC,EAAEmiN,GAAG3jB,QAAQC,GAAE0jB,IAAIpiN,EAAEsb,KAAKi2E,SAAS0uG,cAAchgM,EAAE,SAASyiN,GAAG1iN,EAAEC,GAAG,KAAK,OAAOD,GAAG,CAAC,IAAI2T,EAAE3T,EAAE8rM,UAAU,IAAI9rM,EAAE2iN,WAAW1iN,KAAKA,EAAtB,CAAwB,GAAG,OAAO0T,IAAIA,EAAEgvM,WAAW1iN,KAAKA,EAAE,MAAW0T,EAAEgvM,YAAY1iN,OAAOD,EAAE2iN,YAAY1iN,EAAE,OAAO0T,IAAIA,EAAEgvM,YAAY1iN,GAAGD,EAAEA,EAAE+rM,QAAQ,SAAS6W,GAAG5iN,EAAEC,GAAGoiN,GAAGriN,EAAEuiN,GAAGD,GAAG,KAAsB,QAAjBtiN,EAAEA,EAAEghI,eAAuB,OAAOhhI,EAAE6iN,eAAe,KAAK7iN,EAAE8iN,MAAM7iN,KAAK8iN,IAAG,GAAI/iN,EAAE6iN,aAAa,MACvY,SAASG,GAAGhjN,EAAEC,GAAG,GAAGsiN,KAAKviN,IAAG,IAAKC,GAAG,IAAIA,EAAmG,GAA7F,kBAAkBA,GAAG,aAAaA,IAAEsiN,GAAGviN,EAAEC,EAAE,YAAWA,EAAE,CAACnG,QAAQkG,EAAE6R,aAAa5R,EAAElH,KAAK,MAAS,OAAOupN,GAAG,CAAC,GAAG,OAAOD,GAAG,MAAMxhN,MAAMuQ,EAAE,MAAMkxM,GAAGriN,EAAEoiN,GAAGrhF,aAAa,CAAC8hF,MAAM,EAAED,aAAa5iN,EAAEgjN,WAAW,WAAWX,GAAGA,GAAGvpN,KAAKkH,EAAE,OAAOD,EAAEigM,cAAc,IAAIijB,IAAG,EAAG,SAASC,GAAGnjN,GAAGA,EAAEojN,YAAY,CAACC,UAAUrjN,EAAEisM,cAAcqX,gBAAgB,KAAKC,eAAe,KAAKC,OAAO,CAACrnG,QAAQ,MAAMsnG,QAAQ,MAC1a,SAASC,GAAG1jN,EAAEC,GAAGD,EAAEA,EAAEojN,YAAYnjN,EAAEmjN,cAAcpjN,IAAIC,EAAEmjN,YAAY,CAACC,UAAUrjN,EAAEqjN,UAAUC,gBAAgBtjN,EAAEsjN,gBAAgBC,eAAevjN,EAAEujN,eAAeC,OAAOxjN,EAAEwjN,OAAOC,QAAQzjN,EAAEyjN,UAAU,SAASE,GAAG3jN,EAAEC,GAAG,MAAM,CAAC2jN,UAAU5jN,EAAE6jN,KAAK5jN,EAAEkkM,IAAI,EAAE2f,QAAQ,KAAK5/M,SAAS,KAAKnL,KAAK,MAAM,SAASgrN,GAAG/jN,EAAEC,GAAmB,GAAG,QAAnBD,EAAEA,EAAEojN,aAAwB,CAAY,IAAIzvM,GAAf3T,EAAEA,EAAEwjN,QAAernG,QAAQ,OAAOxoG,EAAE1T,EAAElH,KAAKkH,GAAGA,EAAElH,KAAK4a,EAAE5a,KAAK4a,EAAE5a,KAAKkH,GAAGD,EAAEm8G,QAAQl8G,GACrZ,SAAS+jN,GAAGhkN,EAAEC,GAAG,IAAI0T,EAAE3T,EAAEojN,YAAYt2L,EAAE9sB,EAAE8rM,UAAU,GAAG,OAAOh/K,GAAoBnZ,KAAhBmZ,EAAEA,EAAEs2L,aAAmB,CAAC,IAAI3qN,EAAE,KAAKE,EAAE,KAAyB,GAAG,QAAvBgb,EAAEA,EAAE2vM,iBAA4B,CAAC,EAAE,CAAC,IAAI/oM,EAAE,CAACqpM,UAAUjwM,EAAEiwM,UAAUC,KAAKlwM,EAAEkwM,KAAK1f,IAAIxwL,EAAEwwL,IAAI2f,QAAQnwM,EAAEmwM,QAAQ5/M,SAASyP,EAAEzP,SAASnL,KAAK,MAAM,OAAOJ,EAAEF,EAAEE,EAAE4hB,EAAE5hB,EAAEA,EAAEI,KAAKwhB,EAAE5G,EAAEA,EAAE5a,WAAW,OAAO4a,GAAG,OAAOhb,EAAEF,EAAEE,EAAEsH,EAAEtH,EAAEA,EAAEI,KAAKkH,OAAOxH,EAAEE,EAAEsH,EAAiH,OAA/G0T,EAAE,CAAC0vM,UAAUv2L,EAAEu2L,UAAUC,gBAAgB7qN,EAAE8qN,eAAe5qN,EAAE6qN,OAAO12L,EAAE02L,OAAOC,QAAQ32L,EAAE22L,cAASzjN,EAAEojN,YAAYzvM,GAA4B,QAAnB3T,EAAE2T,EAAE4vM,gBAAwB5vM,EAAE2vM,gBAAgBrjN,EAAED,EAAEjH,KACnfkH,EAAE0T,EAAE4vM,eAAetjN,EACnB,SAASgkN,GAAGjkN,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAEuH,EAAEojN,YAAYF,IAAG,EAAG,IAAIvqN,EAAEF,EAAE6qN,gBAAgB/oM,EAAE9hB,EAAE8qN,eAAevzM,EAAEvX,EAAE+qN,OAAOrnG,QAAQ,GAAG,OAAOnsG,EAAE,CAACvX,EAAE+qN,OAAOrnG,QAAQ,KAAK,IAAIh7G,EAAE6O,EAAE3R,EAAE8C,EAAEpI,KAAKoI,EAAEpI,KAAK,KAAK,OAAOwhB,EAAE5hB,EAAE0F,EAAEkc,EAAExhB,KAAKsF,EAAEkc,EAAEpZ,EAAE,IAAI3I,EAAEwH,EAAE8rM,UAAU,GAAG,OAAOtzM,EAAE,CAAiB,IAAIs/I,GAApBt/I,EAAEA,EAAE4qN,aAAoBG,eAAezrE,IAAIv9H,IAAI,OAAOu9H,EAAEt/I,EAAE8qN,gBAAgBjlN,EAAEy5I,EAAE/+I,KAAKsF,EAAE7F,EAAE+qN,eAAepiN,IAAI,GAAG,OAAOxI,EAAE,CAA8B,IAA7Bm/I,EAAEr/I,EAAE4qN,UAAU9oM,EAAE,EAAE/hB,EAAE6F,EAAE8C,EAAE,OAAO,CAAC6O,EAAErX,EAAEkrN,KAAK,IAAIj4M,EAAEjT,EAAEirN,UAAU,IAAI92L,EAAE9c,KAAKA,EAAE,CAAC,OAAOxX,IAAIA,EAAEA,EAAEO,KAAK,CAAC6qN,UAAUh4M,EAAEi4M,KAAK,EAAE1f,IAAIxrM,EAAEwrM,IAAI2f,QAAQnrN,EAAEmrN,QAAQ5/M,SAASvL,EAAEuL,SACrfnL,KAAK,OAAOiH,EAAE,CAAC,IAAIyN,EAAEzN,EAAEmR,EAAExY,EAAU,OAARqX,EAAE/P,EAAE2L,EAAE+H,EAASxC,EAAEgzL,KAAK,KAAK,EAAc,GAAG,oBAAf12L,EAAE0D,EAAE2yM,SAAiC,CAAChsE,EAAErqI,EAAEjX,KAAKoV,EAAEksI,EAAE9nI,GAAG,MAAMhQ,EAAE83I,EAAErqI,EAAE,MAAMzN,EAAE,KAAK,EAAEyN,EAAEqG,OAAe,KAATrG,EAAEqG,MAAY,GAAG,KAAK,EAAsD,GAAG,QAA3C9D,EAAE,oBAAdvC,EAAE0D,EAAE2yM,SAAgCr2M,EAAEjX,KAAKoV,EAAEksI,EAAE9nI,GAAGvC,SAAe,IAASuC,EAAE,MAAMhQ,EAAE83I,EAAEllI,EAAE,GAAGklI,EAAE9nI,GAAG,MAAMhQ,EAAE,KAAK,EAAEkjN,IAAG,GAAI,OAAOvqN,EAAEuL,WAAWlE,EAAE8T,OAAO,GAAe,QAAZ9D,EAAEvX,EAAEgrN,SAAiBhrN,EAAEgrN,QAAQ,CAAC9qN,GAAGqX,EAAExW,KAAKb,SAASiT,EAAE,CAACg4M,UAAUh4M,EAAEi4M,KAAK7zM,EAAEm0L,IAAIxrM,EAAEwrM,IAAI2f,QAAQnrN,EAAEmrN,QAAQ5/M,SAASvL,EAAEuL,SAASnL,KAAK,MAAM,OAAOP,GAAG6F,EAAE7F,EAAEoT,EAAEzK,EAAE22I,GAAGt/I,EAAEA,EAAEO,KAAK6S,EAAE2O,GAAGvK,EAAW,GAAG,QAAZrX,EAAEA,EAAEI,MAC1e,IAAsB,QAAnBiX,EAAEvX,EAAE+qN,OAAOrnG,SAAiB,MAAWxjH,EAAEqX,EAAEjX,KAAKiX,EAAEjX,KAAK,KAAKN,EAAE8qN,eAAevzM,EAAEvX,EAAE+qN,OAAOrnG,QAAQ,MAAc,OAAO3jH,IAAI2I,EAAE22I,GAAGr/I,EAAE4qN,UAAUliN,EAAE1I,EAAE6qN,gBAAgBjlN,EAAE5F,EAAE8qN,eAAe/qN,EAAE0rN,IAAI3pM,EAAEva,EAAE8iN,MAAMvoM,EAAEva,EAAEisM,cAAcn0D,GAAG,SAASqsE,GAAGnkN,EAAEC,EAAE0T,GAA8B,GAA3B3T,EAAEC,EAAEwjN,QAAQxjN,EAAEwjN,QAAQ,KAAQ,OAAOzjN,EAAE,IAAIC,EAAE,EAAEA,EAAED,EAAEnM,OAAOoM,IAAI,CAAC,IAAI6sB,EAAE9sB,EAAEC,GAAGxH,EAAEq0B,EAAE5oB,SAAS,GAAG,OAAOzL,EAAE,CAAqB,GAApBq0B,EAAE5oB,SAAS,KAAK4oB,EAAEnZ,EAAK,oBAAoBlb,EAAE,MAAMoI,MAAMuQ,EAAE,IAAI3Y,IAAIA,EAAEjC,KAAKs2B,KAAK,IAAIs3L,IAAI,IAAIjjB,EAAG7lM,WAAWu7H,KAC3b,SAASwtF,GAAGrkN,EAAEC,EAAE0T,EAAEmZ,GAA8BnZ,EAAE,QAAXA,EAAEA,EAAEmZ,EAAtB7sB,EAAED,EAAEisM,sBAAmC,IAASt4L,EAAE1T,EAAE2S,EAAE,GAAG3S,EAAE0T,GAAG3T,EAAEisM,cAAct4L,EAAE,IAAI3T,EAAE8iN,QAAQ9iN,EAAEojN,YAAYC,UAAU1vM,GAC3I,IAAI2wM,GAAG,CAACrmB,UAAU,SAASj+L,GAAG,SAAOA,EAAEA,EAAEukN,kBAAiB1Y,GAAG7rM,KAAKA,GAAMo+L,gBAAgB,SAASp+L,EAAEC,EAAE0T,GAAG3T,EAAEA,EAAEukN,gBAAgB,IAAIz3L,EAAE03L,KAAK/rN,EAAEgsN,GAAGzkN,GAAGrH,EAAEgrN,GAAG72L,EAAEr0B,GAAGE,EAAEmrN,QAAQ7jN,OAAE,IAAS0T,GAAG,OAAOA,IAAIhb,EAAEuL,SAASyP,GAAGowM,GAAG/jN,EAAErH,GAAG+rN,GAAG1kN,EAAEvH,EAAEq0B,IAAIqxK,oBAAoB,SAASn+L,EAAEC,EAAE0T,GAAG3T,EAAEA,EAAEukN,gBAAgB,IAAIz3L,EAAE03L,KAAK/rN,EAAEgsN,GAAGzkN,GAAGrH,EAAEgrN,GAAG72L,EAAEr0B,GAAGE,EAAEwrM,IAAI,EAAExrM,EAAEmrN,QAAQ7jN,OAAE,IAAS0T,GAAG,OAAOA,IAAIhb,EAAEuL,SAASyP,GAAGowM,GAAG/jN,EAAErH,GAAG+rN,GAAG1kN,EAAEvH,EAAEq0B,IAAIoxK,mBAAmB,SAASl+L,EAAEC,GAAGD,EAAEA,EAAEukN,gBAAgB,IAAI5wM,EAAE6wM,KAAK13L,EAAE23L,GAAGzkN,GAAGvH,EAAEkrN,GAAGhwM,EAAEmZ,GAAGr0B,EAAE0rM,IAAI,OAAE,IAASlkM,GAAG,OAAOA,IAAIxH,EAAEyL,SACjfjE,GAAG8jN,GAAG/jN,EAAEvH,GAAGisN,GAAG1kN,EAAE8sB,EAAEnZ,KAAK,SAASgxM,GAAG3kN,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,EAAE4hB,GAAiB,MAAM,oBAApBva,EAAEA,EAAEwqM,WAAsCoa,sBAAsB5kN,EAAE4kN,sBAAsB93L,EAAEn0B,EAAE4hB,IAAGta,EAAEzL,YAAWyL,EAAEzL,UAAUgqM,wBAAsBgd,GAAG7nM,EAAEmZ,KAAK0uL,GAAG/iN,EAAEE,IAC/M,SAASksN,GAAG7kN,EAAEC,EAAE0T,GAAG,IAAImZ,GAAE,EAAGr0B,EAAE4mN,GAAO1mN,EAAEsH,EAAE27L,YAA2W,MAA/V,kBAAkBjjM,GAAG,OAAOA,EAAEA,EAAEqqN,GAAGrqN,IAAIF,EAAEinN,GAAGz/M,GAAGq/M,GAAGtgB,GAAEP,QAAyB9lM,GAAGm0B,EAAE,QAAtBA,EAAE7sB,EAAE8R,oBAA4B,IAAS+a,GAAGyyL,GAAGv/M,EAAEvH,GAAG4mN,IAAIp/M,EAAE,IAAIA,EAAE0T,EAAEhb,GAAGqH,EAAEisM,cAAc,OAAOhsM,EAAEjF,YAAO,IAASiF,EAAEjF,MAAMiF,EAAEjF,MAAM,KAAKiF,EAAEo+L,QAAQimB,GAAGtkN,EAAEwqM,UAAUvqM,EAAEA,EAAEskN,gBAAgBvkN,EAAE8sB,KAAI9sB,EAAEA,EAAEwqM,WAAYgV,4CAA4C/mN,EAAEuH,EAAEy/M,0CAA0C9mN,GAAUsH,EAC3Z,SAAS6kN,GAAG9kN,EAAEC,EAAE0T,EAAEmZ,GAAG9sB,EAAEC,EAAEjF,MAAM,oBAAoBiF,EAAE+Q,2BAA2B/Q,EAAE+Q,0BAA0B2C,EAAEmZ,GAAG,oBAAoB7sB,EAAE8kN,kCAAkC9kN,EAAE8kN,iCAAiCpxM,EAAEmZ,GAAG7sB,EAAEjF,QAAQgF,GAAGskN,GAAGnmB,oBAAoBl+L,EAAEA,EAAEjF,MAAM,MAC/P,SAASgqN,GAAGhlN,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAEuH,EAAEwqM,UAAU/xM,EAAE9E,MAAMggB,EAAElb,EAAEuC,MAAMgF,EAAEisM,cAAcxzM,EAAEo+H,KAAKutF,GAAGjB,GAAGnjN,GAAG,IAAIrH,EAAEsH,EAAE27L,YAAY,kBAAkBjjM,GAAG,OAAOA,EAAEF,EAAEqB,QAAQkpN,GAAGrqN,IAAIA,EAAE+mN,GAAGz/M,GAAGq/M,GAAGtgB,GAAEP,QAAQhmM,EAAEqB,QAAQylN,GAAGv/M,EAAErH,IAAIsrN,GAAGjkN,EAAE2T,EAAElb,EAAEq0B,GAAGr0B,EAAEuC,MAAMgF,EAAEisM,cAA2C,oBAA7BtzM,EAAEsH,EAAEg8L,4BAAiDooB,GAAGrkN,EAAEC,EAAEtH,EAAEgb,GAAGlb,EAAEuC,MAAMgF,EAAEisM,eAAe,oBAAoBhsM,EAAEg8L,0BAA0B,oBAAoBxjM,EAAEwsN,yBAAyB,oBAAoBxsN,EAAEysN,2BAA2B,oBAAoBzsN,EAAE0sN,qBACvellN,EAAExH,EAAEuC,MAAM,oBAAoBvC,EAAE0sN,oBAAoB1sN,EAAE0sN,qBAAqB,oBAAoB1sN,EAAEysN,2BAA2BzsN,EAAEysN,4BAA4BjlN,IAAIxH,EAAEuC,OAAOspN,GAAGnmB,oBAAoB1lM,EAAEA,EAAEuC,MAAM,MAAMipN,GAAGjkN,EAAE2T,EAAElb,EAAEq0B,GAAGr0B,EAAEuC,MAAMgF,EAAEisM,eAAe,oBAAoBxzM,EAAEgC,oBAAoBuF,EAAE8T,OAAO,GAAG,IAAIsxM,GAAGhtN,MAAMC,QACvT,SAASgtN,GAAGrlN,EAAEC,EAAE0T,GAAW,GAAG,QAAX3T,EAAE2T,EAAE8tH,MAAiB,oBAAoBzhI,GAAG,kBAAkBA,EAAE,CAAC,GAAG2T,EAAEorL,OAAO,CAAY,GAAXprL,EAAEA,EAAEorL,OAAY,CAAC,GAAG,IAAIprL,EAAEwwL,IAAI,MAAMtjM,MAAMuQ,EAAE,MAAM,IAAI0b,EAAEnZ,EAAE62L,UAAU,IAAI19K,EAAE,MAAMjsB,MAAMuQ,EAAE,IAAIpR,IAAI,IAAIvH,EAAE,GAAGuH,EAAE,OAAG,OAAOC,GAAG,OAAOA,EAAEwhI,KAAK,oBAAoBxhI,EAAEwhI,KAAKxhI,EAAEwhI,IAAI6jF,aAAa7sN,EAASwH,EAAEwhI,MAAIxhI,EAAE,SAASD,GAAG,IAAIC,EAAE6sB,EAAE+pG,KAAK52H,IAAImkN,KAAKnkN,EAAE6sB,EAAE+pG,KAAK,IAAI,OAAO72H,SAASC,EAAExH,GAAGwH,EAAExH,GAAGuH,IAAKslN,WAAW7sN,EAASwH,GAAE,GAAG,kBAAkBD,EAAE,MAAMa,MAAMuQ,EAAE,MAAM,IAAIuC,EAAEorL,OAAO,MAAMl+L,MAAMuQ,EAAE,IAAIpR,IAAK,OAAOA,EAChe,SAASulN,GAAGvlN,EAAEC,GAAG,GAAG,aAAaD,EAAEsb,KAAK,MAAMza,MAAMuQ,EAAE,GAAG,oBAAoBld,OAAOM,UAAUsJ,SAAStH,KAAKyJ,GAAG,qBAAqB/L,OAAOgI,KAAK+D,GAAGkC,KAAK,MAAM,IAAIlC,IAClK,SAASulN,GAAGxlN,GAAG,SAASC,EAAEA,EAAE0T,GAAG,GAAG3T,EAAE,CAAC,IAAI8sB,EAAE7sB,EAAEwlN,WAAW,OAAO34L,GAAGA,EAAE44L,WAAW/xM,EAAE1T,EAAEwlN,WAAW9xM,GAAG1T,EAAE0lN,YAAY1lN,EAAEwlN,WAAW9xM,EAAEA,EAAE+xM,WAAW,KAAK/xM,EAAEG,MAAM,GAAG,SAASH,EAAEA,EAAEmZ,GAAG,IAAI9sB,EAAE,OAAO,KAAK,KAAK,OAAO8sB,GAAG7sB,EAAE0T,EAAEmZ,GAAGA,EAAEA,EAAEs/K,QAAQ,OAAO,KAAK,SAASt/K,EAAE9sB,EAAEC,GAAG,IAAID,EAAE,IAAIwc,IAAI,OAAOvc,GAAG,OAAOA,EAAE7L,IAAI4L,EAAEiQ,IAAIhQ,EAAE7L,IAAI6L,GAAGD,EAAEiQ,IAAIhQ,EAAEiB,MAAMjB,GAAGA,EAAEA,EAAEmsM,QAAQ,OAAOpsM,EAAE,SAASvH,EAAEuH,EAAEC,GAAsC,OAAnCD,EAAE4lN,GAAG5lN,EAAEC,IAAKiB,MAAM,EAAElB,EAAEosM,QAAQ,KAAYpsM,EAAE,SAASrH,EAAEsH,EAAE0T,EAAEmZ,GAAa,OAAV7sB,EAAEiB,MAAM4rB,EAAM9sB,EAA4B,QAAjB8sB,EAAE7sB,EAAE6rM,YAA6Bh/K,EAAEA,EAAE5rB,OAAQyS,GAAG1T,EAAE6T,MAAM,EACpfH,GAAGmZ,GAAE7sB,EAAE6T,MAAM,EAASH,GADoaA,EACla,SAAS4G,EAAEta,GAAsC,OAAnCD,GAAG,OAAOC,EAAE6rM,YAAY7rM,EAAE6T,MAAM,GAAU7T,EAAE,SAAS+P,EAAEhQ,EAAEC,EAAE0T,EAAEmZ,GAAG,OAAG,OAAO7sB,GAAG,IAAIA,EAAEkkM,MAAWlkM,EAAE4lN,GAAGlyM,EAAE3T,EAAEg8D,KAAKlvC,IAAKi/K,OAAO/rM,EAAEC,KAAEA,EAAExH,EAAEwH,EAAE0T,IAAKo4L,OAAO/rM,EAASC,GAAE,SAASkB,EAAEnB,EAAEC,EAAE0T,EAAEmZ,GAAG,OAAG,OAAO7sB,GAAGA,EAAE6lN,cAAcnyM,EAAE2H,OAAYwR,EAAEr0B,EAAEwH,EAAE0T,EAAEhgB,QAAS8tI,IAAI4jF,GAAGrlN,EAAEC,EAAE0T,GAAGmZ,EAAEi/K,OAAO/rM,EAAE8sB,KAAEA,EAAEi5L,GAAGpyM,EAAE2H,KAAK3H,EAAEvf,IAAIuf,EAAEhgB,MAAM,KAAKqM,EAAEg8D,KAAKlvC,IAAK20G,IAAI4jF,GAAGrlN,EAAEC,EAAE0T,GAAGmZ,EAAEi/K,OAAO/rM,EAAS8sB,GAAE,SAASzuB,EAAE2B,EAAEC,EAAE0T,EAAEmZ,GAAG,OAAG,OAAO7sB,GAAG,IAAIA,EAAEkkM,KAAKlkM,EAAEuqM,UAAUwD,gBAAgBr6L,EAAEq6L,eAAe/tM,EAAEuqM,UAAUwb,iBAAiBryM,EAAEqyM,iBAAsB/lN,EACrgBgmN,GAAGtyM,EAAE3T,EAAEg8D,KAAKlvC,IAAKi/K,OAAO/rM,EAAEC,KAAEA,EAAExH,EAAEwH,EAAE0T,EAAEvY,UAAU,KAAM2wM,OAAO/rM,EAASC,GAAE,SAASzH,EAAEwH,EAAEC,EAAE0T,EAAEmZ,EAAEn0B,GAAG,OAAG,OAAOsH,GAAG,IAAIA,EAAEkkM,MAAWlkM,EAAEimN,GAAGvyM,EAAE3T,EAAEg8D,KAAKlvC,EAAEn0B,IAAKozM,OAAO/rM,EAAEC,KAAEA,EAAExH,EAAEwH,EAAE0T,IAAKo4L,OAAO/rM,EAASC,GAAE,SAAS63I,EAAE93I,EAAEC,EAAE0T,GAAG,GAAG,kBAAkB1T,GAAG,kBAAkBA,EAAE,OAAOA,EAAE4lN,GAAG,GAAG5lN,EAAED,EAAEg8D,KAAKroD,IAAKo4L,OAAO/rM,EAAEC,EAAE,GAAG,kBAAkBA,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAE6+L,UAAU,KAAK4D,EAAG,OAAO/uL,EAAEoyM,GAAG9lN,EAAEqb,KAAKrb,EAAE7L,IAAI6L,EAAEtM,MAAM,KAAKqM,EAAEg8D,KAAKroD,IAAK8tH,IAAI4jF,GAAGrlN,EAAE,KAAKC,GAAG0T,EAAEo4L,OAAO/rM,EAAE2T,EAAE,KAAKgvL,EAAG,OAAO1iM,EAAEgmN,GAAGhmN,EAAED,EAAEg8D,KAAKroD,IAAKo4L,OAAO/rM,EAAEC,EAAE,GAAGmlN,GAAGnlN,IAAI2jM,EAAG3jM,GAAG,OAAOA,EAAEimN,GAAGjmN,EACnfD,EAAEg8D,KAAKroD,EAAE,OAAQo4L,OAAO/rM,EAAEC,EAAEslN,GAAGvlN,EAAEC,GAAG,OAAO,KAAK,SAAS2L,EAAE5L,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAE,OAAOwH,EAAEA,EAAE7L,IAAI,KAAK,GAAG,kBAAkBuf,GAAG,kBAAkBA,EAAE,OAAO,OAAOlb,EAAE,KAAKuX,EAAEhQ,EAAEC,EAAE,GAAG0T,EAAEmZ,GAAG,GAAG,kBAAkBnZ,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAEmrL,UAAU,KAAK4D,EAAG,OAAO/uL,EAAEvf,MAAMqE,EAAEkb,EAAE2H,OAAOlW,EAAG5M,EAAEwH,EAAEC,EAAE0T,EAAEhgB,MAAMyH,SAAS0xB,EAAEr0B,GAAG0I,EAAEnB,EAAEC,EAAE0T,EAAEmZ,GAAG,KAAK,KAAK61K,EAAG,OAAOhvL,EAAEvf,MAAMqE,EAAE4F,EAAE2B,EAAEC,EAAE0T,EAAEmZ,GAAG,KAAK,GAAGs4L,GAAGzxM,IAAIiwL,EAAGjwL,GAAG,OAAO,OAAOlb,EAAE,KAAKD,EAAEwH,EAAEC,EAAE0T,EAAEmZ,EAAE,MAAMy4L,GAAGvlN,EAAE2T,GAAG,OAAO,KAAK,SAASlG,EAAEzN,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,GAAG,kBAAkBq0B,GAAG,kBAAkBA,EAAE,OACle9c,EAAE/P,EADueD,EAAEA,EAAE5J,IAAIud,IACtf,KAAW,GAAGmZ,EAAEr0B,GAAG,GAAG,kBAAkBq0B,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAEgyK,UAAU,KAAK4D,EAAG,OAAO1iM,EAAEA,EAAE5J,IAAI,OAAO02B,EAAE14B,IAAIuf,EAAEmZ,EAAE14B,MAAM,KAAK04B,EAAExR,OAAOlW,EAAG5M,EAAEyH,EAAED,EAAE8sB,EAAEn5B,MAAMyH,SAAS3C,EAAEq0B,EAAE14B,KAAK+M,EAAElB,EAAED,EAAE8sB,EAAEr0B,GAAG,KAAKkqM,EAAG,OAA2CtkM,EAAE4B,EAAtCD,EAAEA,EAAE5J,IAAI,OAAO02B,EAAE14B,IAAIuf,EAAEmZ,EAAE14B,MAAM,KAAW04B,EAAEr0B,GAAG,GAAG2sN,GAAGt4L,IAAI82K,EAAG92K,GAAG,OAAwBt0B,EAAEyH,EAAnBD,EAAEA,EAAE5J,IAAIud,IAAI,KAAWmZ,EAAEr0B,EAAE,MAAM8sN,GAAGtlN,EAAE6sB,GAAG,OAAO,KAAK,SAAS3b,EAAE1Y,EAAE8hB,EAAEvK,EAAE7O,GAAG,IAAI,IAAI9C,EAAE,KAAKynB,EAAE,KAAKipB,EAAEx0B,EAAEoX,EAAEpX,EAAE,EAAE4N,EAAE,KAAK,OAAO4mB,GAAGpd,EAAE3hB,EAAEnc,OAAO89B,IAAI,CAACod,EAAE7tC,MAAMywB,GAAGxJ,EAAE4mB,EAAEA,EAAE,MAAM5mB,EAAE4mB,EAAEq9J,QAAQ,IAAI5zM,EAAEoT,EAAEnT,EAAEs2C,EAAE/+B,EAAE2hB,GAAGxwB,GAAG,GAAG,OAAO3I,EAAE,CAAC,OAAOu2C,IAAIA,EAAE5mB,GAAG,MAAMnoB,GAAG+uC,GAAG,OACjfv2C,EAAEszM,WAAW7rM,EAAExH,EAAEs2C,GAAGx0B,EAAE5hB,EAAEH,EAAE+hB,EAAEoX,GAAG,OAAO7L,EAAEznB,EAAE7F,EAAEstB,EAAEsmL,QAAQ5zM,EAAEstB,EAAEttB,EAAEu2C,EAAE5mB,EAAE,GAAGwJ,IAAI3hB,EAAEnc,OAAO,OAAO8f,EAAElb,EAAEs2C,GAAG1wC,EAAE,GAAG,OAAO0wC,EAAE,CAAC,KAAKpd,EAAE3hB,EAAEnc,OAAO89B,IAAkB,QAAdod,EAAE+oG,EAAEr/I,EAAEuX,EAAE2hB,GAAGxwB,MAAcoZ,EAAE5hB,EAAEo2C,EAAEx0B,EAAEoX,GAAG,OAAO7L,EAAEznB,EAAE0wC,EAAEjpB,EAAEsmL,QAAQr9J,EAAEjpB,EAAEipB,GAAG,OAAO1wC,EAAE,IAAI0wC,EAAEjiB,EAAEr0B,EAAEs2C,GAAGpd,EAAE3hB,EAAEnc,OAAO89B,IAAsB,QAAlBxJ,EAAE1a,EAAEshC,EAAEt2C,EAAEk5B,EAAE3hB,EAAE2hB,GAAGxwB,MAAcnB,GAAG,OAAOmoB,EAAE2jL,WAAW/8J,EAAE0Z,OAAO,OAAOtgC,EAAE/zB,IAAIu9B,EAAExJ,EAAE/zB,KAAKmmB,EAAE5hB,EAAEwvB,EAAE5N,EAAEoX,GAAG,OAAO7L,EAAEznB,EAAE8pB,EAAErC,EAAEsmL,QAAQjkL,EAAErC,EAAEqC,GAA4C,OAAzCnoB,GAAG+uC,EAAE3wC,SAAQ,SAAS4B,GAAG,OAAOC,EAAExH,EAAEuH,MAAY3B,EAAE,SAAS4qB,EAAExwB,EAAE8hB,EAAEvK,EAAE7O,GAAG,IAAI9C,EAAEulM,EAAG5zL,GAAG,GAAG,oBAAoB3R,EAAE,MAAMwC,MAAMuQ,EAAE,MAAkB,GAAG,OAAfpB,EAAE3R,EAAE7H,KAAKwZ,IAC1e,MAAMnP,MAAMuQ,EAAE,MAAM,IAAI,IAAI0U,EAAEznB,EAAE,KAAK0wC,EAAEx0B,EAAEoX,EAAEpX,EAAE,EAAE4N,EAAE,KAAK3vB,EAAEwX,EAAEjX,OAAO,OAAOg2C,IAAIv2C,EAAEpB,KAAKu6B,IAAIn5B,EAAEwX,EAAEjX,OAAO,CAACg2C,EAAE7tC,MAAMywB,GAAGxJ,EAAE4mB,EAAEA,EAAE,MAAM5mB,EAAE4mB,EAAEq9J,QAAQ,IAAInjL,EAAErd,EAAEnT,EAAEs2C,EAAEv2C,EAAE1D,MAAMqM,GAAG,GAAG,OAAO8nB,EAAE,CAAC,OAAO8lB,IAAIA,EAAE5mB,GAAG,MAAMnoB,GAAG+uC,GAAG,OAAO9lB,EAAE6iL,WAAW7rM,EAAExH,EAAEs2C,GAAGx0B,EAAE5hB,EAAEswB,EAAE1O,EAAEoX,GAAG,OAAO7L,EAAEznB,EAAE4qB,EAAEnD,EAAEsmL,QAAQnjL,EAAEnD,EAAEmD,EAAE8lB,EAAE5mB,EAAE,GAAG3vB,EAAEpB,KAAK,OAAOuc,EAAElb,EAAEs2C,GAAG1wC,EAAE,GAAG,OAAO0wC,EAAE,CAAC,MAAMv2C,EAAEpB,KAAKu6B,IAAIn5B,EAAEwX,EAAEjX,OAAwB,QAAjBP,EAAEs/I,EAAEr/I,EAAED,EAAE1D,MAAMqM,MAAcoZ,EAAE5hB,EAAEH,EAAE+hB,EAAEoX,GAAG,OAAO7L,EAAEznB,EAAE7F,EAAEstB,EAAEsmL,QAAQ5zM,EAAEstB,EAAEttB,GAAG,OAAO6F,EAAE,IAAI0wC,EAAEjiB,EAAEr0B,EAAEs2C,IAAIv2C,EAAEpB,KAAKu6B,IAAIn5B,EAAEwX,EAAEjX,OAA4B,QAArBP,EAAEiV,EAAEshC,EAAEt2C,EAAEk5B,EAAEn5B,EAAE1D,MAAMqM,MAAcnB,GAAG,OAAOxH,EAAEszM,WAChf/8J,EAAE0Z,OAAO,OAAOjwD,EAAEpE,IAAIu9B,EAAEn5B,EAAEpE,KAAKmmB,EAAE5hB,EAAEH,EAAE+hB,EAAEoX,GAAG,OAAO7L,EAAEznB,EAAE7F,EAAEstB,EAAEsmL,QAAQ5zM,EAAEstB,EAAEttB,GAA4C,OAAzCwH,GAAG+uC,EAAE3wC,SAAQ,SAAS4B,GAAG,OAAOC,EAAExH,EAAEuH,MAAY3B,EAAE,OAAO,SAAS2B,EAAE8sB,EAAEn0B,EAAEqX,GAAG,IAAI7O,EAAE,kBAAkBxI,GAAG,OAAOA,GAAGA,EAAE2iB,OAAOlW,GAAI,OAAOzM,EAAEvE,IAAI+M,IAAIxI,EAAEA,EAAEhF,MAAMyH,UAAU,IAAIiD,EAAE,kBAAkB1F,GAAG,OAAOA,EAAE,GAAG0F,EAAE,OAAO1F,EAAEmmM,UAAU,KAAK4D,EAAG1iM,EAAE,CAAS,IAAR3B,EAAE1F,EAAEvE,IAAQ+M,EAAE2rB,EAAE,OAAO3rB,GAAG,CAAC,GAAGA,EAAE/M,MAAMiK,EAAE,CAAC,OAAO8C,EAAEgjM,KAAK,KAAK,EAAE,GAAGxrM,EAAE2iB,OAAOlW,EAAG,CAACuO,EAAE3T,EAAEmB,EAAEirM,UAASt/K,EAAEr0B,EAAE0I,EAAExI,EAAEhF,MAAMyH,WAAY2wM,OAAO/rM,EAAEA,EAAE8sB,EAAE,MAAM9sB,EAAE,MAAM,QAAQ,GAAGmB,EAAE2kN,cAAcntN,EAAE2iB,KAAK,CAAC3H,EAAE3T,EAAEmB,EAAEirM,UAC5et/K,EAAEr0B,EAAE0I,EAAExI,EAAEhF,QAAS8tI,IAAI4jF,GAAGrlN,EAAEmB,EAAExI,GAAGm0B,EAAEi/K,OAAO/rM,EAAEA,EAAE8sB,EAAE,MAAM9sB,GAAG2T,EAAE3T,EAAEmB,GAAG,MAAWlB,EAAED,EAAEmB,GAAGA,EAAEA,EAAEirM,QAAQzzM,EAAE2iB,OAAOlW,IAAI0nB,EAAEo5L,GAAGvtN,EAAEhF,MAAMyH,SAAS4E,EAAEg8D,KAAKhsD,EAAErX,EAAEvE,MAAO23M,OAAO/rM,EAAEA,EAAE8sB,KAAI9c,EAAE+1M,GAAGptN,EAAE2iB,KAAK3iB,EAAEvE,IAAIuE,EAAEhF,MAAM,KAAKqM,EAAEg8D,KAAKhsD,IAAKyxH,IAAI4jF,GAAGrlN,EAAE8sB,EAAEn0B,GAAGqX,EAAE+7L,OAAO/rM,EAAEA,EAAEgQ,GAAG,OAAOuK,EAAEva,GAAG,KAAK2iM,EAAG3iM,EAAE,CAAC,IAAImB,EAAExI,EAAEvE,IAAI,OAAO04B,GAAG,CAAC,GAAGA,EAAE14B,MAAM+M,EAAX,CAAa,GAAG,IAAI2rB,EAAEq3K,KAAKr3K,EAAE09K,UAAUwD,gBAAgBr1M,EAAEq1M,eAAelhL,EAAE09K,UAAUwb,iBAAiBrtN,EAAEqtN,eAAe,CAACryM,EAAE3T,EAAE8sB,EAAEs/K,UAASt/K,EAAEr0B,EAAEq0B,EAAEn0B,EAAEyC,UAAU,KAAM2wM,OAAO/rM,EAAEA,EAAE8sB,EAAE,MAAM9sB,EAAO2T,EAAE3T,EAAE8sB,GAAG,MAAW7sB,EAAED,EAAE8sB,GAAGA,EAAEA,EAAEs/K,SAAQt/K,EACpfm5L,GAAGttN,EAAEqH,EAAEg8D,KAAKhsD,IAAK+7L,OAAO/rM,EAAEA,EAAE8sB,EAAE,OAAOvS,EAAEva,GAAG,GAAG,kBAAkBrH,GAAG,kBAAkBA,EAAE,OAAOA,EAAE,GAAGA,EAAE,OAAOm0B,GAAG,IAAIA,EAAEq3K,KAAKxwL,EAAE3T,EAAE8sB,EAAEs/K,UAASt/K,EAAEr0B,EAAEq0B,EAAEn0B,IAAKozM,OAAO/rM,EAAEA,EAAE8sB,IAAInZ,EAAE3T,EAAE8sB,IAAGA,EAAE+4L,GAAGltN,EAAEqH,EAAEg8D,KAAKhsD,IAAK+7L,OAAO/rM,EAAEA,EAAE8sB,GAAGvS,EAAEva,GAAG,GAAGolN,GAAGzsN,GAAG,OAAOwY,EAAEnR,EAAE8sB,EAAEn0B,EAAEqX,GAAG,GAAG4zL,EAAGjrM,GAAG,OAAOswB,EAAEjpB,EAAE8sB,EAAEn0B,EAAEqX,GAAc,GAAX3R,GAAGknN,GAAGvlN,EAAErH,GAAM,qBAAqBA,IAAIwI,EAAE,OAAOnB,EAAEmkM,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,MAAMtjM,MAAMuQ,EAAE,IAAIizL,EAAGrkM,EAAEsb,OAAO,cAAe,OAAO3H,EAAE3T,EAAE8sB,IAAI,IAAIq5L,GAAGX,IAAG,GAAIY,GAAGZ,IAAG,GAAIa,GAAG,GAAGC,GAAGlH,GAAGiH,IAAIE,GAAGnH,GAAGiH,IAAIG,GAAGpH,GAAGiH,IACtd,SAASI,GAAGzmN,GAAG,GAAGA,IAAIqmN,GAAG,MAAMxlN,MAAMuQ,EAAE,MAAM,OAAOpR,EAAE,SAAS0mN,GAAG1mN,EAAEC,GAAyC,OAAtCg4I,GAAEuuE,GAAGvmN,GAAGg4I,GAAEsuE,GAAGvmN,GAAGi4I,GAAEquE,GAAGD,IAAIrmN,EAAEC,EAAEkjJ,UAAmB,KAAK,EAAE,KAAK,GAAGljJ,GAAGA,EAAEA,EAAE21K,iBAAiB31K,EAAEomM,aAAa/9B,GAAG,KAAK,IAAI,MAAM,QAAkEroK,EAAEqoK,GAArCroK,GAAvBD,EAAE,IAAIA,EAAEC,EAAEs7I,WAAWt7I,GAAMomM,cAAc,KAAKrmM,EAAEA,EAAEumK,SAAkBm4B,GAAE4nB,IAAIruE,GAAEquE,GAAGrmN,GAAG,SAAS0mN,KAAKjoB,GAAE4nB,IAAI5nB,GAAE6nB,IAAI7nB,GAAE8nB,IAAI,SAASI,GAAG5mN,GAAGymN,GAAGD,GAAG/nB,SAAS,IAAIx+L,EAAEwmN,GAAGH,GAAG7nB,SAAa9qL,EAAE20J,GAAGroK,EAAED,EAAEsb,MAAMrb,IAAI0T,IAAIskI,GAAEsuE,GAAGvmN,GAAGi4I,GAAEquE,GAAG3yM,IAAI,SAASkzM,GAAG7mN,GAAGumN,GAAG9nB,UAAUz+L,IAAI0+L,GAAE4nB,IAAI5nB,GAAE6nB,KAAK,IAAIjuE,GAAE8mE,GAAG,GAC9c,SAAS0H,GAAG9mN,GAAG,IAAI,IAAIC,EAAED,EAAE,OAAOC,GAAG,CAAC,GAAG,KAAKA,EAAEkkM,IAAI,CAAC,IAAIxwL,EAAE1T,EAAEgsM,cAAc,GAAG,OAAOt4L,IAAmB,QAAfA,EAAEA,EAAEu4L,aAAqB,OAAOv4L,EAAEK,MAAM,OAAOL,EAAEK,MAAM,OAAO/T,OAAO,GAAG,KAAKA,EAAEkkM,UAAK,IAASlkM,EAAE8mN,cAAcC,aAAa,GAAG,KAAa,GAAR/mN,EAAE6T,OAAU,OAAO7T,OAAO,GAAG,OAAOA,EAAE5C,MAAM,CAAC4C,EAAE5C,MAAM0uM,OAAO9rM,EAAEA,EAAEA,EAAE5C,MAAM,SAAS,GAAG4C,IAAID,EAAE,MAAM,KAAK,OAAOC,EAAEmsM,SAAS,CAAC,GAAG,OAAOnsM,EAAE8rM,QAAQ9rM,EAAE8rM,SAAS/rM,EAAE,OAAO,KAAKC,EAAEA,EAAE8rM,OAAO9rM,EAAEmsM,QAAQL,OAAO9rM,EAAE8rM,OAAO9rM,EAAEA,EAAEmsM,QAAQ,OAAO,KAAK,IAAI6a,GAAG,KAAKC,GAAG,KAAKC,IAAG,EACpd,SAASC,GAAGpnN,EAAEC,GAAG,IAAI0T,EAAE0zM,GAAG,EAAE,KAAK,KAAK,GAAG1zM,EAAEmyM,YAAY,UAAUnyM,EAAE2H,KAAK,UAAU3H,EAAE62L,UAAUvqM,EAAE0T,EAAEo4L,OAAO/rM,EAAE2T,EAAEG,MAAM,EAAE,OAAO9T,EAAEylN,YAAYzlN,EAAEylN,WAAWC,WAAW/xM,EAAE3T,EAAEylN,WAAW9xM,GAAG3T,EAAE2lN,YAAY3lN,EAAEylN,WAAW9xM,EAAE,SAAS2zM,GAAGtnN,EAAEC,GAAG,OAAOD,EAAEmkM,KAAK,KAAK,EAAE,IAAIxwL,EAAE3T,EAAEsb,KAAyE,OAAO,QAA3Erb,EAAE,IAAIA,EAAEkjJ,UAAUxvI,EAAE/Q,gBAAgB3C,EAAE60G,SAASlyG,cAAc,KAAK3C,KAAmBD,EAAEwqM,UAAUvqM,GAAE,GAAO,KAAK,EAAE,OAAoD,QAA7CA,EAAE,KAAKD,EAAEunN,cAAc,IAAItnN,EAAEkjJ,SAAS,KAAKljJ,KAAYD,EAAEwqM,UAAUvqM,GAAE,GAAO,KAAK,GAAY,QAAQ,OAAM,GACve,SAASunN,GAAGxnN,GAAG,GAAGmnN,GAAG,CAAC,IAAIlnN,EAAEinN,GAAG,GAAGjnN,EAAE,CAAC,IAAI0T,EAAE1T,EAAE,IAAIqnN,GAAGtnN,EAAEC,GAAG,CAAqB,KAApBA,EAAEy+M,GAAG/qM,EAAEgoM,gBAAqB2L,GAAGtnN,EAAEC,GAAuC,OAAnCD,EAAE8T,OAAe,KAAT9T,EAAE8T,MAAY,EAAEqzM,IAAG,OAAGF,GAAGjnN,GAASonN,GAAGH,GAAGtzM,GAAGszM,GAAGjnN,EAAEknN,GAAGxI,GAAGz+M,EAAEqmM,iBAAiBtmM,EAAE8T,OAAe,KAAT9T,EAAE8T,MAAY,EAAEqzM,IAAG,EAAGF,GAAGjnN,GAAG,SAASynN,GAAGznN,GAAG,IAAIA,EAAEA,EAAE+rM,OAAO,OAAO/rM,GAAG,IAAIA,EAAEmkM,KAAK,IAAInkM,EAAEmkM,KAAK,KAAKnkM,EAAEmkM,KAAKnkM,EAAEA,EAAE+rM,OAAOkb,GAAGjnN,EAC5S,SAAS0nN,GAAG1nN,GAAG,GAAGA,IAAIinN,GAAG,OAAM,EAAG,IAAIE,GAAG,OAAOM,GAAGznN,GAAGmnN,IAAG,GAAG,EAAG,IAAIlnN,EAAED,EAAEsb,KAAK,GAAG,IAAItb,EAAEmkM,KAAK,SAASlkM,GAAG,SAASA,IAAIo+M,GAAGp+M,EAAED,EAAE+mN,eAAe,IAAI9mN,EAAEinN,GAAGjnN,GAAGmnN,GAAGpnN,EAAEC,GAAGA,EAAEy+M,GAAGz+M,EAAE07M,aAAmB,GAAN8L,GAAGznN,GAAM,KAAKA,EAAEmkM,IAAI,CAAgD,KAA7BnkM,EAAE,QAApBA,EAAEA,EAAEisM,eAAyBjsM,EAAEksM,WAAW,MAAW,MAAMrrM,MAAMuQ,EAAE,MAAMpR,EAAE,CAAiB,IAAhBA,EAAEA,EAAE27M,YAAgB17M,EAAE,EAAED,GAAG,CAAC,GAAG,IAAIA,EAAEmjJ,SAAS,CAAC,IAAIxvI,EAAE3T,EAAEgU,KAAK,GAAG,OAAOL,EAAE,CAAC,GAAG,IAAI1T,EAAE,CAACinN,GAAGxI,GAAG1+M,EAAE27M,aAAa,MAAM37M,EAAEC,QAAQ,MAAM0T,GAAG,OAAOA,GAAG,OAAOA,GAAG1T,IAAID,EAAEA,EAAE27M,YAAYuL,GAAG,WAAWA,GAAGD,GAAGvI,GAAG1+M,EAAEwqM,UAAUmR,aAAa,KAAK,OAAM,EACtf,SAASvlI,KAAK8wI,GAAGD,GAAG,KAAKE,IAAG,EAAG,IAAIQ,GAAG,GAAG,SAASC,KAAK,IAAI,IAAI5nN,EAAE,EAAEA,EAAE2nN,GAAG9zN,OAAOmM,IAAI2nN,GAAG3nN,GAAG6nN,8BAA8B,KAAKF,GAAG9zN,OAAO,EAAE,IAAIi0N,GAAGrlB,EAAGlD,uBAAuBwoB,GAAGtlB,EAAGjD,wBAAwBwoB,GAAG,EAAE9vE,GAAE,KAAKH,GAAE,KAAKK,GAAE,KAAK6vE,IAAG,EAAGC,IAAG,EAAG,SAASC,KAAK,MAAMtnN,MAAMuQ,EAAE,MAAO,SAASg3M,GAAGpoN,EAAEC,GAAG,GAAG,OAAOA,EAAE,OAAM,EAAG,IAAI,IAAI0T,EAAE,EAAEA,EAAE1T,EAAEpM,QAAQ8f,EAAE3T,EAAEnM,OAAO8f,IAAI,IAAI2nM,GAAGt7M,EAAE2T,GAAG1T,EAAE0T,IAAI,OAAM,EAAG,OAAM,EAC9X,SAAS00M,GAAGroN,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,GAAyH,GAAtHqvN,GAAGrvN,EAAEu/I,GAAEj4I,EAAEA,EAAEgsM,cAAc,KAAKhsM,EAAEmjN,YAAY,KAAKnjN,EAAE6iN,MAAM,EAAEgF,GAAGrpB,QAAQ,OAAOz+L,GAAG,OAAOA,EAAEisM,cAAcqc,GAAGC,GAAGvoN,EAAE2T,EAAEmZ,EAAEr0B,GAAMyvN,GAAG,CAACvvN,EAAE,EAAE,EAAE,CAAO,GAANuvN,IAAG,IAAQ,GAAGvvN,GAAG,MAAMkI,MAAMuQ,EAAE,MAAMzY,GAAG,EAAEy/I,GAAEL,GAAE,KAAK93I,EAAEmjN,YAAY,KAAK0E,GAAGrpB,QAAQ+pB,GAAGxoN,EAAE2T,EAAEmZ,EAAEr0B,SAASyvN,IAAkE,GAA9DJ,GAAGrpB,QAAQgqB,GAAGxoN,EAAE,OAAO83I,IAAG,OAAOA,GAAEh/I,KAAKivN,GAAG,EAAE5vE,GAAEL,GAAEG,GAAE,KAAK+vE,IAAG,EAAMhoN,EAAE,MAAMY,MAAMuQ,EAAE,MAAM,OAAOpR,EAAE,SAAS0oN,KAAK,IAAI1oN,EAAE,CAACisM,cAAc,KAAKoX,UAAU,KAAKsF,UAAU,KAAKC,MAAM,KAAK7vN,KAAK,MAA8C,OAAxC,OAAOq/I,GAAEF,GAAE+zD,cAAc7zD,GAAEp4I,EAAEo4I,GAAEA,GAAEr/I,KAAKiH,EAASo4I,GAC/e,SAASywE,KAAK,GAAG,OAAO9wE,GAAE,CAAC,IAAI/3I,EAAEk4I,GAAE4zD,UAAU9rM,EAAE,OAAOA,EAAEA,EAAEisM,cAAc,UAAUjsM,EAAE+3I,GAAEh/I,KAAK,IAAIkH,EAAE,OAAOm4I,GAAEF,GAAE+zD,cAAc7zD,GAAEr/I,KAAK,GAAG,OAAOkH,EAAEm4I,GAAEn4I,EAAE83I,GAAE/3I,MAAM,CAAC,GAAG,OAAOA,EAAE,MAAMa,MAAMuQ,EAAE,MAAUpR,EAAE,CAACisM,eAAPl0D,GAAE/3I,GAAqBisM,cAAcoX,UAAUtrE,GAAEsrE,UAAUsF,UAAU5wE,GAAE4wE,UAAUC,MAAM7wE,GAAE6wE,MAAM7vN,KAAK,MAAM,OAAOq/I,GAAEF,GAAE+zD,cAAc7zD,GAAEp4I,EAAEo4I,GAAEA,GAAEr/I,KAAKiH,EAAE,OAAOo4I,GAAE,SAAS0wE,GAAG9oN,EAAEC,GAAG,MAAM,oBAAoBA,EAAEA,EAAED,GAAGC,EACvY,SAAS8oN,GAAG/oN,GAAG,IAAIC,EAAE4oN,KAAKl1M,EAAE1T,EAAE2oN,MAAM,GAAG,OAAOj1M,EAAE,MAAM9S,MAAMuQ,EAAE,MAAMuC,EAAEq1M,oBAAoBhpN,EAAE,IAAI8sB,EAAEirH,GAAEt/I,EAAEq0B,EAAE67L,UAAUhwN,EAAEgb,EAAEwoG,QAAQ,GAAG,OAAOxjH,EAAE,CAAC,GAAG,OAAOF,EAAE,CAAC,IAAI8hB,EAAE9hB,EAAEM,KAAKN,EAAEM,KAAKJ,EAAEI,KAAKJ,EAAEI,KAAKwhB,EAAEuS,EAAE67L,UAAUlwN,EAAEE,EAAEgb,EAAEwoG,QAAQ,KAAK,GAAG,OAAO1jH,EAAE,CAACA,EAAEA,EAAEM,KAAK+zB,EAAEA,EAAEu2L,UAAU,IAAIrzM,EAAEuK,EAAE5hB,EAAE,KAAKwI,EAAE1I,EAAE,EAAE,CAAC,IAAI4F,EAAE8C,EAAE0iN,KAAK,IAAImE,GAAG3pN,KAAKA,EAAE,OAAO2R,IAAIA,EAAEA,EAAEjX,KAAK,CAAC8qN,KAAK,EAAE7/M,OAAO7C,EAAE6C,OAAOilN,aAAa9nN,EAAE8nN,aAAaC,WAAW/nN,EAAE+nN,WAAWnwN,KAAK,OAAO+zB,EAAE3rB,EAAE8nN,eAAejpN,EAAEmB,EAAE+nN,WAAWlpN,EAAE8sB,EAAE3rB,EAAE6C,YAAY,CAAC,IAAIxL,EAAE,CAACqrN,KAAKxlN,EAAE2F,OAAO7C,EAAE6C,OAAOilN,aAAa9nN,EAAE8nN,aAC9fC,WAAW/nN,EAAE+nN,WAAWnwN,KAAK,MAAM,OAAOiX,GAAGuK,EAAEvK,EAAExX,EAAEG,EAAEm0B,GAAG9c,EAAEA,EAAEjX,KAAKP,EAAE0/I,GAAE4qE,OAAOzkN,EAAE6lN,IAAI7lN,EAAE8C,EAAEA,EAAEpI,WAAW,OAAOoI,GAAGA,IAAI1I,GAAG,OAAOuX,EAAErX,EAAEm0B,EAAE9c,EAAEjX,KAAKwhB,EAAE+gM,GAAGxuL,EAAE7sB,EAAEgsM,iBAAiB8W,IAAG,GAAI9iN,EAAEgsM,cAAcn/K,EAAE7sB,EAAEojN,UAAU1qN,EAAEsH,EAAE0oN,UAAU34M,EAAE2D,EAAEw1M,kBAAkBr8L,EAAE,MAAM,CAAC7sB,EAAEgsM,cAAct4L,EAAEy1M,UACtQ,SAASC,GAAGrpN,GAAG,IAAIC,EAAE4oN,KAAKl1M,EAAE1T,EAAE2oN,MAAM,GAAG,OAAOj1M,EAAE,MAAM9S,MAAMuQ,EAAE,MAAMuC,EAAEq1M,oBAAoBhpN,EAAE,IAAI8sB,EAAEnZ,EAAEy1M,SAAS3wN,EAAEkb,EAAEwoG,QAAQxjH,EAAEsH,EAAEgsM,cAAc,GAAG,OAAOxzM,EAAE,CAACkb,EAAEwoG,QAAQ,KAAK,IAAI5hG,EAAE9hB,EAAEA,EAAEM,KAAK,GAAGJ,EAAEqH,EAAErH,EAAE4hB,EAAEvW,QAAQuW,EAAEA,EAAExhB,WAAWwhB,IAAI9hB,GAAG6iN,GAAG3iN,EAAEsH,EAAEgsM,iBAAiB8W,IAAG,GAAI9iN,EAAEgsM,cAActzM,EAAE,OAAOsH,EAAE0oN,YAAY1oN,EAAEojN,UAAU1qN,GAAGgb,EAAEw1M,kBAAkBxwN,EAAE,MAAM,CAACA,EAAEm0B,GACnV,SAASw8L,GAAGtpN,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE7sB,EAAEspN,YAAYz8L,EAAEA,EAAE7sB,EAAEupN,SAAS,IAAI/wN,EAAEwH,EAAE4nN,8BAAyI,GAAxG,OAAOpvN,EAAEuH,EAAEvH,IAAIq0B,GAAU9sB,EAAEA,EAAEypN,kBAAiBzpN,GAAGgoN,GAAGhoN,KAAKA,KAAEC,EAAE4nN,8BAA8B/6L,EAAE66L,GAAGnuN,KAAKyG,KAAMD,EAAE,OAAO2T,EAAE1T,EAAEupN,SAAoB,MAAX7B,GAAGnuN,KAAKyG,GAASY,MAAMuQ,EAAE,MACzP,SAASs4M,GAAG1pN,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAE0zI,GAAE,GAAG,OAAO1zI,EAAE,MAAMoI,MAAMuQ,EAAE,MAAM,IAAIzY,EAAEsH,EAAEspN,YAAYhvM,EAAE5hB,EAAEsH,EAAEupN,SAASx5M,EAAE83M,GAAGrpB,QAAQt9L,EAAE6O,EAAEkxL,UAAS,WAAW,OAAOooB,GAAG7wN,EAAEwH,EAAE0T,MAAKtV,EAAE8C,EAAE,GAAG3I,EAAE2I,EAAE,GAAGA,EAAEi3I,GAAE,IAAIN,EAAE93I,EAAEisM,cAAcrgM,EAAEksI,EAAEjhB,KAAKppH,EAAE7B,EAAE+9M,YAAYx4M,EAAE2mI,EAAEl6I,OAAOk6I,EAAEA,EAAE8xE,UAAU,IAAI3gM,EAAEivH,GACuO,OADrOl4I,EAAEisM,cAAc,CAACp1E,KAAKjrH,EAAEhO,OAAOqC,EAAE2pN,UAAU98L,GAAG9c,EAAE4wL,WAAU,WAAWh1L,EAAE+9M,YAAYh2M,EAAE/H,EAAEi+M,YAAYxrN,EAAE,IAAI2B,EAAErH,EAAEsH,EAAEupN,SAAS,IAAIlO,GAAG/gM,EAAEva,GAAG,CAACA,EAAE2T,EAAE1T,EAAEupN,SAASlO,GAAG9iN,EAAEwH,KAAK3B,EAAE2B,GAAGA,EAAEykN,GAAGx7L,GAAGxwB,EAAEgxN,kBAAkBzpN,EAAEvH,EAAEq3M,cAAc9vM,EAAEvH,EAAEgxN,iBAAiBhxN,EAAE03M,gBAAgBnwM,EAAE,IAAI,IAAI8sB,EAC5fr0B,EAAE23M,cAAcpgM,EAAEhQ,EAAE,EAAEgQ,GAAG,CAAC,IAAI7O,EAAE,GAAG+uM,GAAGlgM,GAAGqF,EAAE,GAAGlU,EAAE2rB,EAAE3rB,IAAInB,EAAEgQ,IAAIqF,MAAK,CAAC1B,EAAE1T,EAAE6sB,IAAI9c,EAAE4wL,WAAU,WAAW,OAAO9zK,EAAE7sB,EAAEupN,SAAQ,WAAW,IAAIxpN,EAAE4L,EAAE+9M,YAAYh2M,EAAE/H,EAAEi+M,YAAY,IAAIl2M,EAAE3T,EAAEC,EAAEupN,UAAU,IAAI18L,EAAE23L,GAAGx7L,GAAGxwB,EAAEgxN,kBAAkB38L,EAAEr0B,EAAEq3M,aAAa,MAAM3nL,GAAGxU,GAAE,WAAW,MAAMwU,WAAS,CAACloB,EAAE6sB,IAAIwuL,GAAG7tM,EAAEkG,IAAI2nM,GAAGnqM,EAAElR,IAAIq7M,GAAGxjE,EAAEhrH,MAAK9sB,EAAE,CAACm8G,QAAQ,KAAKitG,SAAS,KAAKJ,oBAAoBF,GAAGK,kBAAkB3wN,IAAK4wN,SAAS/qN,EAAEyrN,GAAGjsN,KAAK,KAAKq6I,GAAEl4I,GAAGmB,EAAEynN,MAAM5oN,EAAEmB,EAAEwnN,UAAU,KAAKnwN,EAAE8wN,GAAG7wN,EAAEwH,EAAE0T,GAAGxS,EAAE8qM,cAAc9qM,EAAEkiN,UAAU7qN,GAAUA,EACte,SAASuxN,GAAG/pN,EAAEC,EAAE0T,GAAc,OAAO+1M,GAAZb,KAAiB7oN,EAAEC,EAAE0T,GAAG,SAASq2M,GAAGhqN,GAAG,IAAIC,EAAEyoN,KAAmL,MAA9K,oBAAoB1oN,IAAIA,EAAEA,KAAKC,EAAEgsM,cAAchsM,EAAEojN,UAAUrjN,EAAoFA,GAAlFA,EAAEC,EAAE2oN,MAAM,CAACzsG,QAAQ,KAAKitG,SAAS,KAAKJ,oBAAoBF,GAAGK,kBAAkBnpN,IAAOopN,SAASU,GAAGjsN,KAAK,KAAKq6I,GAAEl4I,GAAS,CAACC,EAAEgsM,cAAcjsM,GAChR,SAASiqN,GAAGjqN,EAAEC,EAAE0T,EAAEmZ,GAAkO,OAA/N9sB,EAAE,CAACmkM,IAAInkM,EAAEpL,OAAOqL,EAAE2wE,QAAQj9D,EAAEu2M,KAAKp9L,EAAE/zB,KAAK,MAAsB,QAAhBkH,EAAEi4I,GAAEkrE,cAAsBnjN,EAAE,CAACwlN,WAAW,MAAMvtE,GAAEkrE,YAAYnjN,EAAEA,EAAEwlN,WAAWzlN,EAAEjH,KAAKiH,GAAmB,QAAf2T,EAAE1T,EAAEwlN,YAAoBxlN,EAAEwlN,WAAWzlN,EAAEjH,KAAKiH,GAAG8sB,EAAEnZ,EAAE5a,KAAK4a,EAAE5a,KAAKiH,EAAEA,EAAEjH,KAAK+zB,EAAE7sB,EAAEwlN,WAAWzlN,GAAWA,EAAE,SAASmqN,GAAGnqN,GAA4B,OAAdA,EAAE,CAACy+L,QAAQz+L,GAAhB0oN,KAA4Bzc,cAAcjsM,EAAE,SAASoqN,KAAK,OAAOvB,KAAK5c,cAAc,SAASoe,GAAGrqN,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAEiwN,KAAKxwE,GAAEpkI,OAAO9T,EAAEvH,EAAEwzM,cAAcge,GAAG,EAAEhqN,EAAE0T,OAAE,OAAO,IAASmZ,EAAE,KAAKA,GACjc,SAASw9L,GAAGtqN,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAEowN,KAAK/7L,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAIn0B,OAAE,EAAO,GAAG,OAAOo/I,GAAE,CAAC,IAAIx9H,EAAEw9H,GAAEk0D,cAA0B,GAAZtzM,EAAE4hB,EAAEq2D,QAAW,OAAO9jD,GAAGs7L,GAAGt7L,EAAEvS,EAAE2vM,MAAmB,YAAZD,GAAGhqN,EAAE0T,EAAEhb,EAAEm0B,GAAWorH,GAAEpkI,OAAO9T,EAAEvH,EAAEwzM,cAAcge,GAAG,EAAEhqN,EAAE0T,EAAEhb,EAAEm0B,GAAG,SAASy9L,GAAGvqN,EAAEC,GAAG,OAAOoqN,GAAG,IAAI,EAAErqN,EAAEC,GAAG,SAASuqN,GAAGxqN,EAAEC,GAAG,OAAOqqN,GAAG,IAAI,EAAEtqN,EAAEC,GAAG,SAASwqN,GAAGzqN,EAAEC,GAAG,OAAOqqN,GAAG,EAAE,EAAEtqN,EAAEC,GAAG,SAASyqN,GAAG1qN,EAAEC,GAAG,MAAG,oBAAoBA,GAASD,EAAEA,IAAIC,EAAED,GAAG,WAAWC,EAAE,QAAU,OAAOA,QAAG,IAASA,GAASD,EAAEA,IAAIC,EAAEw+L,QAAQz+L,EAAE,WAAWC,EAAEw+L,QAAQ,YAAtE,EACxY,SAASksB,GAAG3qN,EAAEC,EAAE0T,GAA6C,OAA1CA,EAAE,OAAOA,QAAG,IAASA,EAAEA,EAAE7X,OAAO,CAACkE,IAAI,KAAYsqN,GAAG,EAAE,EAAEI,GAAG7sN,KAAK,KAAKoC,EAAED,GAAG2T,GAAG,SAASy7J,MAAM,SAASw7C,GAAG5qN,EAAEC,GAAG,IAAI0T,EAAEk1M,KAAK5oN,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAI6sB,EAAEnZ,EAAEs4L,cAAc,OAAG,OAAOn/K,GAAG,OAAO7sB,GAAGmoN,GAAGnoN,EAAE6sB,EAAE,IAAWA,EAAE,IAAGnZ,EAAEs4L,cAAc,CAACjsM,EAAEC,GAAUD,GAAE,SAAS6qN,GAAG7qN,EAAEC,GAAG,IAAI0T,EAAEk1M,KAAK5oN,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAI6sB,EAAEnZ,EAAEs4L,cAAc,OAAG,OAAOn/K,GAAG,OAAO7sB,GAAGmoN,GAAGnoN,EAAE6sB,EAAE,IAAWA,EAAE,IAAG9sB,EAAEA,IAAI2T,EAAEs4L,cAAc,CAACjsM,EAAEC,GAAUD,GACzZ,SAAS8qN,GAAG9qN,EAAEC,GAAG,IAAI0T,EAAEiuM,KAAKE,GAAG,GAAGnuM,EAAE,GAAGA,GAAE,WAAW3T,GAAE,MAAM8hN,GAAG,GAAGnuM,EAAE,GAAGA,GAAE,WAAW,IAAIA,EAAEo0M,GAAGtoB,WAAWsoB,GAAGtoB,WAAW,EAAE,IAAIz/L,GAAE,GAAIC,IAAV,QAAsB8nN,GAAGtoB,WAAW9rL,MAC5J,SAASm2M,GAAG9pN,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE03L,KAAK/rN,EAAEgsN,GAAGzkN,GAAGrH,EAAE,CAACkrN,KAAKprN,EAAEuL,OAAO2P,EAAEs1M,aAAa,KAAKC,WAAW,KAAKnwN,KAAK,MAAMwhB,EAAEta,EAAEk8G,QAA6E,GAArE,OAAO5hG,EAAE5hB,EAAEI,KAAKJ,GAAGA,EAAEI,KAAKwhB,EAAExhB,KAAKwhB,EAAExhB,KAAKJ,GAAGsH,EAAEk8G,QAAQxjH,EAAE4hB,EAAEva,EAAE8rM,UAAa9rM,IAAIk4I,IAAG,OAAO39H,GAAGA,IAAI29H,GAAEgwE,GAAGD,IAAG,MAAO,CAAC,GAAG,IAAIjoN,EAAE8iN,QAAQ,OAAOvoM,GAAG,IAAIA,EAAEuoM,QAAiC,QAAxBvoM,EAAEta,EAAE+oN,qBAA8B,IAAI,IAAIh5M,EAAE/P,EAAEkpN,kBAAkBhoN,EAAEoZ,EAAEvK,EAAE2D,GAAmC,GAAhChb,EAAEswN,aAAa1uM,EAAE5hB,EAAEuwN,WAAW/nN,EAAKm6M,GAAGn6M,EAAE6O,GAAG,OAAO,MAAM3R,IAAaqmN,GAAG1kN,EAAEvH,EAAEq0B,IAC9Z,IAAI27L,GAAG,CAACsC,YAAY/H,GAAGtiB,YAAYynB,GAAG3qN,WAAW2qN,GAAGvnB,UAAUunB,GAAGtnB,oBAAoBsnB,GAAGrnB,gBAAgBqnB,GAAGpnB,QAAQonB,GAAGnnB,WAAWmnB,GAAGlnB,OAAOknB,GAAGjnB,SAASinB,GAAGxnB,cAAcwnB,GAAG6C,iBAAiB7C,GAAG8C,cAAc9C,GAAG+C,iBAAiB/C,GAAGgD,oBAAoBhD,GAAGiD,0BAAyB,GAAI9C,GAAG,CAACyC,YAAY/H,GAAGtiB,YAAY,SAAS1gM,EAAEC,GAA4C,OAAzCyoN,KAAKzc,cAAc,CAACjsM,OAAE,IAASC,EAAE,KAAKA,GAAUD,GAAGxC,WAAWwlN,GAAGpiB,UAAU2pB,GAAG1pB,oBAAoB,SAAS7gM,EAAEC,EAAE0T,GAA6C,OAA1CA,EAAE,OAAOA,QAAG,IAASA,EAAEA,EAAE7X,OAAO,CAACkE,IAAI,KAAYqqN,GAAG,EAAE,EAAEK,GAAG7sN,KAAK,KACvfoC,EAAED,GAAG2T,IAAImtL,gBAAgB,SAAS9gM,EAAEC,GAAG,OAAOoqN,GAAG,EAAE,EAAErqN,EAAEC,IAAI8gM,QAAQ,SAAS/gM,EAAEC,GAAG,IAAI0T,EAAE+0M,KAAqD,OAAhDzoN,OAAE,IAASA,EAAE,KAAKA,EAAED,EAAEA,IAAI2T,EAAEs4L,cAAc,CAACjsM,EAAEC,GAAUD,GAAGghM,WAAW,SAAShhM,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE47L,KAAuK,OAAlKzoN,OAAE,IAAS0T,EAAEA,EAAE1T,GAAGA,EAAE6sB,EAAEm/K,cAAcn/K,EAAEu2L,UAAUpjN,EAAmFD,GAAjFA,EAAE8sB,EAAE87L,MAAM,CAACzsG,QAAQ,KAAKitG,SAAS,KAAKJ,oBAAoBhpN,EAAEmpN,kBAAkBlpN,IAAOmpN,SAASU,GAAGjsN,KAAK,KAAKq6I,GAAEl4I,GAAS,CAAC8sB,EAAEm/K,cAAcjsM,IAAIihM,OAAOkpB,GAAGjpB,SAAS8oB,GAAGrpB,cAAcvxB,GAAG47C,iBAAiB,SAAShrN,GAAG,IAAIC,EAAE+pN,GAAGhqN,GAAG2T,EAAE1T,EAAE,GAAG6sB,EAAE7sB,EAAE,GAC5Z,OAD+ZsqN,IAAG,WAAW,IAAItqN,EAAE8nN,GAAGtoB,WAC9esoB,GAAGtoB,WAAW,EAAE,IAAI3yK,EAAE9sB,GAAN,QAAiB+nN,GAAGtoB,WAAWx/L,KAAI,CAACD,IAAW2T,GAAGs3M,cAAc,WAAW,IAAIjrN,EAAEgqN,IAAG,GAAI/pN,EAAED,EAAE,GAA8B,OAANmqN,GAArBnqN,EAAE8qN,GAAGjtN,KAAK,KAAKmC,EAAE,KAAgB,CAACA,EAAEC,IAAIirN,iBAAiB,SAASlrN,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE47L,KAAkF,OAA7E57L,EAAEm/K,cAAc,CAACp1E,KAAK,CAAC8yF,YAAY1pN,EAAE4pN,YAAY,MAAMjsN,OAAOoC,EAAE4pN,UAAUj2M,GAAU+1M,GAAG58L,EAAE9sB,EAAEC,EAAE0T,IAAIw3M,oBAAoB,WAAW,GAAGhE,GAAG,CAAC,IAAInnN,GAAE,EAAGC,EAzDlD,SAAYD,GAAG,MAAM,CAAC8+L,SAASwE,EAAGxlM,SAASkC,EAAEqC,QAAQrC,GAyDDqrN,EAAG,WAAiD,MAAtCrrN,IAAIA,GAAE,EAAG2T,EAAE,MAAMkrM,MAAM/gN,SAAS,MAAY+C,MAAMuQ,EAAE,SAASuC,EAAEq2M,GAAG/pN,GAAG,GAC1Z,OAD6Z,KAAY,EAAPi4I,GAAEl8E,QAAUk8E,GAAEpkI,OAAO,IAAIm2M,GAAG,GAAE,WAAWt2M,EAAE,MAAMkrM,MAAM/gN,SAAS,YAChf,EAAO,OAAcmC,EAAmC,OAAN+pN,GAA3B/pN,EAAE,MAAM4+M,MAAM/gN,SAAS,KAAiBmC,GAAGmrN,0BAAyB,GAAI7C,GAAG,CAACwC,YAAY/H,GAAGtiB,YAAYkqB,GAAGptN,WAAWwlN,GAAGpiB,UAAU4pB,GAAG3pB,oBAAoB8pB,GAAG7pB,gBAAgB2pB,GAAG1pB,QAAQ8pB,GAAG7pB,WAAW+nB,GAAG9nB,OAAOmpB,GAAGlpB,SAAS,WAAW,OAAO6nB,GAAGD,KAAKnoB,cAAcvxB,GAAG47C,iBAAiB,SAAShrN,GAAG,IAAIC,EAAE8oN,GAAGD,IAAIn1M,EAAE1T,EAAE,GAAG6sB,EAAE7sB,EAAE,GAA6F,OAA1FuqN,IAAG,WAAW,IAAIvqN,EAAE8nN,GAAGtoB,WAAWsoB,GAAGtoB,WAAW,EAAE,IAAI3yK,EAAE9sB,GAAN,QAAiB+nN,GAAGtoB,WAAWx/L,KAAI,CAACD,IAAW2T,GAAGs3M,cAAc,WAAW,IAAIjrN,EAAE+oN,GAAGD,IAAI,GAAG,MAAM,CAACsB,KAAK3rB,QAC9ez+L,IAAIkrN,iBAAiBnB,GAAGoB,oBAAoB,WAAW,OAAOpC,GAAGD,IAAI,IAAIsC,0BAAyB,GAAI5C,GAAG,CAACuC,YAAY/H,GAAGtiB,YAAYkqB,GAAGptN,WAAWwlN,GAAGpiB,UAAU4pB,GAAG3pB,oBAAoB8pB,GAAG7pB,gBAAgB2pB,GAAG1pB,QAAQ8pB,GAAG7pB,WAAWqoB,GAAGpoB,OAAOmpB,GAAGlpB,SAAS,WAAW,OAAOmoB,GAAGP,KAAKnoB,cAAcvxB,GAAG47C,iBAAiB,SAAShrN,GAAG,IAAIC,EAAEopN,GAAGP,IAAIn1M,EAAE1T,EAAE,GAAG6sB,EAAE7sB,EAAE,GAA6F,OAA1FuqN,IAAG,WAAW,IAAIvqN,EAAE8nN,GAAGtoB,WAAWsoB,GAAGtoB,WAAW,EAAE,IAAI3yK,EAAE9sB,GAAN,QAAiB+nN,GAAGtoB,WAAWx/L,KAAI,CAACD,IAAW2T,GAAGs3M,cAAc,WAAW,IAAIjrN,EAAEqpN,GAAGP,IAAI,GAAG,MAAM,CAACsB,KAAK3rB,QACrfz+L,IAAIkrN,iBAAiBnB,GAAGoB,oBAAoB,WAAW,OAAO9B,GAAGP,IAAI,IAAIsC,0BAAyB,GAAIE,GAAG7oB,EAAG/C,kBAAkBqjB,IAAG,EAAG,SAASwI,GAAGvrN,EAAEC,EAAE0T,EAAEmZ,GAAG7sB,EAAE5C,MAAM,OAAO2C,EAAEomN,GAAGnmN,EAAE,KAAK0T,EAAEmZ,GAAGq5L,GAAGlmN,EAAED,EAAE3C,MAAMsW,EAAEmZ,GAAG,SAAS0+L,GAAGxrN,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAGkb,EAAEA,EAAE9Y,OAAO,IAAIlC,EAAEsH,EAAEwhI,IAA8B,OAA1BmhF,GAAG3iN,EAAExH,GAAGq0B,EAAEu7L,GAAGroN,EAAEC,EAAE0T,EAAEmZ,EAAEn0B,EAAEF,GAAM,OAAOuH,GAAI+iN,IAA0E9iN,EAAE6T,OAAO,EAAEy3M,GAAGvrN,EAAEC,EAAE6sB,EAAEr0B,GAAUwH,EAAE5C,QAAhG4C,EAAEmjN,YAAYpjN,EAAEojN,YAAYnjN,EAAE6T,QAAQ,IAAI9T,EAAE8iN,QAAQrqN,EAAEgzN,GAAGzrN,EAAEC,EAAExH,IACxW,SAASizN,GAAG1rN,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,GAAG,GAAG,OAAOqH,EAAE,CAAC,IAAIua,EAAE5G,EAAE2H,KAAK,MAAG,oBAAoBf,GAAIoxM,GAAGpxM,SAAI,IAASA,EAAEshL,cAAc,OAAOloL,EAAE8oL,cAAS,IAAS9oL,EAAEkoL,eAAsD77L,EAAE+lN,GAAGpyM,EAAE2H,KAAK,KAAKwR,EAAE7sB,EAAEA,EAAE+7D,KAAKrjE,IAAK8oI,IAAIxhI,EAAEwhI,IAAIzhI,EAAE+rM,OAAO9rM,EAASA,EAAE5C,MAAM2C,IAAvGC,EAAEkkM,IAAI,GAAGlkM,EAAEqb,KAAKf,EAAEqxM,GAAG5rN,EAAEC,EAAEsa,EAAEuS,EAAEr0B,EAAEE,IAAoF,OAAV4hB,EAAEva,EAAE3C,MAAS,KAAK5E,EAAEE,KAAKF,EAAE8hB,EAAEwsM,eAA0BpzM,EAAE,QAAdA,EAAEA,EAAE8oL,SAAmB9oL,EAAE6nM,IAAK/iN,EAAEq0B,IAAI9sB,EAAEyhI,MAAMxhI,EAAEwhI,KAAYgqF,GAAGzrN,EAAEC,EAAEtH,IAAGsH,EAAE6T,OAAO,GAAE9T,EAAE4lN,GAAGrrM,EAAEuS,IAAK20G,IAAIxhI,EAAEwhI,IAAIzhI,EAAE+rM,OAAO9rM,EAASA,EAAE5C,MAAM2C,GAClb,SAAS4rN,GAAG5rN,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,GAAG,GAAG,OAAOqH,GAAGw7M,GAAGx7M,EAAE+mN,cAAcj6L,IAAI9sB,EAAEyhI,MAAMxhI,EAAEwhI,IAAI,IAAGshF,IAAG,EAAG,KAAKpqN,EAAEF,GAAqC,OAAOwH,EAAE6iN,MAAM9iN,EAAE8iN,MAAM2I,GAAGzrN,EAAEC,EAAEtH,GAAhE,KAAa,MAARqH,EAAE8T,SAAeivM,IAAG,GAA0C,OAAOl4C,GAAG7qK,EAAEC,EAAE0T,EAAEmZ,EAAEn0B,GACnL,SAASkzN,GAAG7rN,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE7sB,EAAEsnN,aAAa9uN,EAAEq0B,EAAE1xB,SAASzC,EAAE,OAAOqH,EAAEA,EAAEisM,cAAc,KAAK,GAAG,WAAWn/K,EAAEkvC,MAAM,kCAAkClvC,EAAEkvC,KAAK,GAAG,KAAY,EAAP/7D,EAAE+7D,MAAQ/7D,EAAEgsM,cAAc,CAAC6f,UAAU,GAAGC,GAAG9rN,EAAE0T,OAAQ,IAAG,KAAO,WAAFA,GAA8E,OAAO3T,EAAE,OAAOrH,EAAEA,EAAEmzN,UAAUn4M,EAAEA,EAAE1T,EAAE6iN,MAAM7iN,EAAE0iN,WAAW,WAAW1iN,EAAEgsM,cAAc,CAAC6f,UAAU9rN,GAAG+rN,GAAG9rN,EAAED,GAAG,KAAxKC,EAAEgsM,cAAc,CAAC6f,UAAU,GAAGC,GAAG9rN,EAAE,OAAOtH,EAAEA,EAAEmzN,UAAUn4M,QAA0H,OAAOhb,GAAGm0B,EAAEn0B,EAAEmzN,UAAUn4M,EAAE1T,EAAEgsM,cAAc,MAAMn/K,EAAEnZ,EAAEo4M,GAAG9rN,EAAE6sB,GAAe,OAAZy+L,GAAGvrN,EAAEC,EAAExH,EAAEkb,GAAU1T,EAAE5C,MAC1e,SAAS2uN,GAAGhsN,EAAEC,GAAG,IAAI0T,EAAE1T,EAAEwhI,KAAO,OAAOzhI,GAAG,OAAO2T,GAAG,OAAO3T,GAAGA,EAAEyhI,MAAM9tH,KAAE1T,EAAE6T,OAAO,KAAI,SAAS+2J,GAAG7qK,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,IAAIE,EAAE+mN,GAAG/rM,GAAG2rM,GAAGtgB,GAAEP,QAA4C,OAApC9lM,EAAE4mN,GAAGt/M,EAAEtH,GAAGiqN,GAAG3iN,EAAExH,GAAGkb,EAAE00M,GAAGroN,EAAEC,EAAE0T,EAAEmZ,EAAEn0B,EAAEF,GAAM,OAAOuH,GAAI+iN,IAA0E9iN,EAAE6T,OAAO,EAAEy3M,GAAGvrN,EAAEC,EAAE0T,EAAElb,GAAUwH,EAAE5C,QAAhG4C,EAAEmjN,YAAYpjN,EAAEojN,YAAYnjN,EAAE6T,QAAQ,IAAI9T,EAAE8iN,QAAQrqN,EAAEgzN,GAAGzrN,EAAEC,EAAExH,IAC9P,SAASwzN,GAAGjsN,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,GAAGinN,GAAG/rM,GAAG,CAAC,IAAIhb,GAAE,EAAGmnN,GAAG7/M,QAAQtH,GAAE,EAAW,GAARiqN,GAAG3iN,EAAExH,GAAM,OAAOwH,EAAEuqM,UAAU,OAAOxqM,IAAIA,EAAE8rM,UAAU,KAAK7rM,EAAE6rM,UAAU,KAAK7rM,EAAE6T,OAAO,GAAG+wM,GAAG5kN,EAAE0T,EAAEmZ,GAAGk4L,GAAG/kN,EAAE0T,EAAEmZ,EAAEr0B,GAAGq0B,GAAE,OAAQ,GAAG,OAAO9sB,EAAE,CAAC,IAAIua,EAAEta,EAAEuqM,UAAUx6L,EAAE/P,EAAE8mN,cAAcxsM,EAAE5mB,MAAMqc,EAAE,IAAI7O,EAAEoZ,EAAEzgB,QAAQuE,EAAEsV,EAAEioL,YAAY,kBAAkBv9L,GAAG,OAAOA,EAAEA,EAAE2kN,GAAG3kN,GAAyBA,EAAEkhN,GAAGt/M,EAA1B5B,EAAEqhN,GAAG/rM,GAAG2rM,GAAGtgB,GAAEP,SAAmB,IAAIjmM,EAAEmb,EAAEsoL,yBAAyBnkD,EAAE,oBAAoBt/I,GAAG,oBAAoB+hB,EAAE0qM,wBAAwBntE,GAAG,oBAAoBv9H,EAAEwqM,kCACpd,oBAAoBxqM,EAAEvJ,4BAA4BhB,IAAI8c,GAAG3rB,IAAI9C,IAAIymN,GAAG7kN,EAAEsa,EAAEuS,EAAEzuB,GAAG6kN,IAAG,EAAG,IAAIt3M,EAAE3L,EAAEgsM,cAAc1xL,EAAEvf,MAAM4Q,EAAEq4M,GAAGhkN,EAAE6sB,EAAEvS,EAAE9hB,GAAG0I,EAAElB,EAAEgsM,cAAcj8L,IAAI8c,GAAGlhB,IAAIzK,GAAG89L,GAAER,SAASykB,IAAI,oBAAoB1qN,IAAI6rN,GAAGpkN,EAAE0T,EAAEnb,EAAEs0B,GAAG3rB,EAAElB,EAAEgsM,gBAAgBj8L,EAAEkzM,IAAIyB,GAAG1kN,EAAE0T,EAAE3D,EAAE8c,EAAElhB,EAAEzK,EAAE9C,KAAKy5I,GAAG,oBAAoBv9H,EAAE2qM,2BAA2B,oBAAoB3qM,EAAE4qM,qBAAqB,oBAAoB5qM,EAAE4qM,oBAAoB5qM,EAAE4qM,qBAAqB,oBAAoB5qM,EAAE2qM,2BAA2B3qM,EAAE2qM,6BAA6B,oBACze3qM,EAAE9f,oBAAoBwF,EAAE6T,OAAO,KAAK,oBAAoByG,EAAE9f,oBAAoBwF,EAAE6T,OAAO,GAAG7T,EAAE8mN,cAAcj6L,EAAE7sB,EAAEgsM,cAAc9qM,GAAGoZ,EAAE5mB,MAAMm5B,EAAEvS,EAAEvf,MAAMmG,EAAEoZ,EAAEzgB,QAAQuE,EAAEyuB,EAAE9c,IAAI,oBAAoBuK,EAAE9f,oBAAoBwF,EAAE6T,OAAO,GAAGgZ,GAAE,OAAQ,CAACvS,EAAEta,EAAEuqM,UAAUkZ,GAAG1jN,EAAEC,GAAG+P,EAAE/P,EAAE8mN,cAAc1oN,EAAE4B,EAAEqb,OAAOrb,EAAE6lN,YAAY91M,EAAEmyM,GAAGliN,EAAEqb,KAAKtL,GAAGuK,EAAE5mB,MAAM0K,EAAEy5I,EAAE73I,EAAEsnN,aAAa37M,EAAE2O,EAAEzgB,QAAwB,kBAAhBqH,EAAEwS,EAAEioL,cAAiC,OAAOz6L,EAAEA,EAAE6hN,GAAG7hN,GAAyBA,EAAEo+M,GAAGt/M,EAA1BkB,EAAEu+M,GAAG/rM,GAAG2rM,GAAGtgB,GAAEP,SAAmB,IAAIhxL,EAAEkG,EAAEsoL,0BAA0BzjM,EAAE,oBAAoBiV,GACnf,oBAAoB8M,EAAE0qM,0BAA0B,oBAAoB1qM,EAAEwqM,kCAAkC,oBAAoBxqM,EAAEvJ,4BAA4BhB,IAAI8nI,GAAGlsI,IAAIzK,IAAI2jN,GAAG7kN,EAAEsa,EAAEuS,EAAE3rB,GAAG+hN,IAAG,EAAGt3M,EAAE3L,EAAEgsM,cAAc1xL,EAAEvf,MAAM4Q,EAAEq4M,GAAGhkN,EAAE6sB,EAAEvS,EAAE9hB,GAAG,IAAI0Y,EAAElR,EAAEgsM,cAAcj8L,IAAI8nI,GAAGlsI,IAAIuF,GAAG8tL,GAAER,SAASykB,IAAI,oBAAoBz1M,IAAI42M,GAAGpkN,EAAE0T,EAAElG,EAAEqf,GAAG3b,EAAElR,EAAEgsM,gBAAgB5tM,EAAE6kN,IAAIyB,GAAG1kN,EAAE0T,EAAEtV,EAAEyuB,EAAElhB,EAAEuF,EAAEhQ,KAAK3I,GAAG,oBAAoB+hB,EAAE2xM,4BAA4B,oBAAoB3xM,EAAE4xM,sBAAsB,oBAAoB5xM,EAAE4xM,qBAAqB5xM,EAAE4xM,oBAAoBr/L,EAC1gB3b,EAAEhQ,GAAG,oBAAoBoZ,EAAE2xM,4BAA4B3xM,EAAE2xM,2BAA2Bp/L,EAAE3b,EAAEhQ,IAAI,oBAAoBoZ,EAAE6xM,qBAAqBnsN,EAAE6T,OAAO,GAAG,oBAAoByG,EAAE0qM,0BAA0BhlN,EAAE6T,OAAO,OAAO,oBAAoByG,EAAE6xM,oBAAoBp8M,IAAIhQ,EAAE+mN,eAAen7M,IAAI5L,EAAEisM,gBAAgBhsM,EAAE6T,OAAO,GAAG,oBAAoByG,EAAE0qM,yBAAyBj1M,IAAIhQ,EAAE+mN,eAAen7M,IAAI5L,EAAEisM,gBAAgBhsM,EAAE6T,OAAO,KAAK7T,EAAE8mN,cAAcj6L,EAAE7sB,EAAEgsM,cAAc96L,GAAGoJ,EAAE5mB,MAAMm5B,EAAEvS,EAAEvf,MAAMmW,EAAEoJ,EAAEzgB,QAAQqH,EAAE2rB,EAAEzuB,IAAI,oBAAoBkc,EAAE6xM,oBAC7fp8M,IAAIhQ,EAAE+mN,eAAen7M,IAAI5L,EAAEisM,gBAAgBhsM,EAAE6T,OAAO,GAAG,oBAAoByG,EAAE0qM,yBAAyBj1M,IAAIhQ,EAAE+mN,eAAen7M,IAAI5L,EAAEisM,gBAAgBhsM,EAAE6T,OAAO,KAAKgZ,GAAE,GAAI,OAAOu/L,GAAGrsN,EAAEC,EAAE0T,EAAEmZ,EAAEn0B,EAAEF,GACzL,SAAS4zN,GAAGrsN,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,GAAGqzN,GAAGhsN,EAAEC,GAAG,IAAIsa,EAAE,KAAa,GAARta,EAAE6T,OAAU,IAAIgZ,IAAIvS,EAAE,OAAO9hB,GAAGunN,GAAG//M,EAAE0T,GAAE,GAAI83M,GAAGzrN,EAAEC,EAAEtH,GAAGm0B,EAAE7sB,EAAEuqM,UAAU8gB,GAAG7sB,QAAQx+L,EAAE,IAAI+P,EAAEuK,GAAG,oBAAoB5G,EAAEqoL,yBAAyB,KAAKlvK,EAAEjyB,SAAwI,OAA/HoF,EAAE6T,OAAO,EAAE,OAAO9T,GAAGua,GAAGta,EAAE5C,MAAM8oN,GAAGlmN,EAAED,EAAE3C,MAAM,KAAK1E,GAAGsH,EAAE5C,MAAM8oN,GAAGlmN,EAAE,KAAK+P,EAAErX,IAAI4yN,GAAGvrN,EAAEC,EAAE+P,EAAErX,GAAGsH,EAAEgsM,cAAcn/K,EAAE9xB,MAAMvC,GAAGunN,GAAG//M,EAAE0T,GAAE,GAAW1T,EAAE5C,MAAM,SAASivN,GAAGtsN,GAAG,IAAIC,EAAED,EAAEwqM,UAAUvqM,EAAEssN,eAAe3M,GAAG5/M,EAAEC,EAAEssN,eAAetsN,EAAEssN,iBAAiBtsN,EAAEnG,SAASmG,EAAEnG,SAAS8lN,GAAG5/M,EAAEC,EAAEnG,SAAQ,GAAI4sN,GAAG1mN,EAAEC,EAAE+tM,eAC7d,IAS0Vwe,GAAMC,GAAGC,GAT/VC,GAAG,CAACzgB,WAAW,KAAK0gB,UAAU,GAClC,SAASv+C,GAAGruK,EAAEC,EAAE0T,GAAG,IAAsC4G,EAAlCuS,EAAE7sB,EAAEsnN,aAAa9uN,EAAE6/I,GAAEmmD,QAAQ9lM,GAAE,EAA6M,OAAvM4hB,EAAE,KAAa,GAARta,EAAE6T,UAAayG,GAAE,OAAOva,GAAG,OAAOA,EAAEisM,gBAAiB,KAAO,EAAFxzM,IAAM8hB,GAAG5hB,GAAE,EAAGsH,EAAE6T,QAAQ,IAAI,OAAO9T,GAAG,OAAOA,EAAEisM,oBAAe,IAASn/K,EAAEs1H,WAAU,IAAKt1H,EAAE+/L,6BAA6Bp0N,GAAG,GAAGw/I,GAAEK,GAAI,EAAF7/I,GAAQ,OAAOuH,QAAG,IAAS8sB,EAAEs1H,UAAUolE,GAAGvnN,GAAGD,EAAE8sB,EAAE1xB,SAAS3C,EAAEq0B,EAAEs1H,SAAYzpJ,GAASqH,EAAE8sN,GAAG7sN,EAAED,EAAEvH,EAAEkb,GAAG1T,EAAE5C,MAAM4uM,cAAc,CAAC6f,UAAUn4M,GAAG1T,EAAEgsM,cAAc0gB,GAAG3sN,GAAK,kBAAkB8sB,EAAEigM,2BAAiC/sN,EAAE8sN,GAAG7sN,EAAED,EAAEvH,EAAEkb,GAAG1T,EAAE5C,MAAM4uM,cAAc,CAAC6f,UAAUn4M,GAC/f1T,EAAEgsM,cAAc0gB,GAAG1sN,EAAE6iN,MAAM,SAAS9iN,KAAE2T,EAAEq5M,GAAG,CAAChxJ,KAAK,UAAU5gE,SAAS4E,GAAGC,EAAE+7D,KAAKroD,EAAE,OAAQo4L,OAAO9rM,EAASA,EAAE5C,MAAMsW,KAAY3T,EAAEisM,cAAkBtzM,GAASm0B,EAAE2gJ,GAAGztK,EAAEC,EAAE6sB,EAAE1xB,SAAS0xB,EAAEs1H,SAASzuI,GAAGhb,EAAEsH,EAAE5C,MAAM5E,EAAEuH,EAAE3C,MAAM4uM,cAActzM,EAAEszM,cAAc,OAAOxzM,EAAE,CAACqzN,UAAUn4M,GAAG,CAACm4M,UAAUrzN,EAAEqzN,UAAUn4M,GAAGhb,EAAEgqN,WAAW3iN,EAAE2iN,YAAYhvM,EAAE1T,EAAEgsM,cAAc0gB,GAAG7/L,IAAEnZ,EAAEs5M,GAAGjtN,EAAEC,EAAE6sB,EAAE1xB,SAASuY,GAAG1T,EAAEgsM,cAAc,KAAYt4L,IAClQ,SAASm5M,GAAG9sN,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAEuH,EAAEg8D,KAAKrjE,EAAEqH,EAAE3C,MAAuK,OAAjK4C,EAAE,CAAC+7D,KAAK,SAAS5gE,SAAS6E,GAAG,KAAO,EAAFxH,IAAM,OAAOE,GAAGA,EAAEgqN,WAAW,EAAEhqN,EAAE4uN,aAAatnN,GAAGtH,EAAEq0N,GAAG/sN,EAAExH,EAAE,EAAE,MAAMkb,EAAEuyM,GAAGvyM,EAAElb,EAAEq0B,EAAE,MAAMn0B,EAAEozM,OAAO/rM,EAAE2T,EAAEo4L,OAAO/rM,EAAErH,EAAEyzM,QAAQz4L,EAAE3T,EAAE3C,MAAM1E,EAASgb,EACrV,SAASs5M,GAAGjtN,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAEuH,EAAE3C,MAAiL,OAA3K2C,EAAEvH,EAAE2zM,QAAQz4L,EAAEiyM,GAAGntN,EAAE,CAACujE,KAAK,UAAU5gE,SAASuY,IAAI,KAAY,EAAP1T,EAAE+7D,QAAUroD,EAAEmvM,MAAMh2L,GAAGnZ,EAAEo4L,OAAO9rM,EAAE0T,EAAEy4L,QAAQ,KAAK,OAAOpsM,IAAIA,EAAE0lN,WAAW,KAAK1lN,EAAE8T,MAAM,EAAE7T,EAAE0lN,YAAY1lN,EAAEwlN,WAAWzlN,GAAUC,EAAE5C,MAAMsW,EAC7N,SAAS85J,GAAGztK,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,IAAIE,EAAEsH,EAAE+7D,KAAKzhD,EAAEva,EAAE3C,MAAM2C,EAAEua,EAAE6xL,QAAQ,IAAIp8L,EAAE,CAACgsD,KAAK,SAAS5gE,SAASuY,GAAoS,OAAjS,KAAO,EAAFhb,IAAMsH,EAAE5C,QAAQkd,IAAG5G,EAAE1T,EAAE5C,OAAQslN,WAAW,EAAEhvM,EAAE4zM,aAAav3M,EAAiB,QAAfuK,EAAE5G,EAAE8xM,aAAqBxlN,EAAE0lN,YAAYhyM,EAAEgyM,YAAY1lN,EAAEwlN,WAAWlrM,EAAEA,EAAEmrM,WAAW,MAAMzlN,EAAE0lN,YAAY1lN,EAAEwlN,WAAW,MAAM9xM,EAAEiyM,GAAGrrM,EAAEvK,GAAG,OAAOhQ,EAAE8sB,EAAE84L,GAAG5lN,EAAE8sB,IAAIA,EAAEo5L,GAAGp5L,EAAEn0B,EAAEF,EAAE,OAAQqb,OAAO,EAAGgZ,EAAEi/K,OAAO9rM,EAAE0T,EAAEo4L,OAAO9rM,EAAE0T,EAAEy4L,QAAQt/K,EAAE7sB,EAAE5C,MAAMsW,EAASmZ,EAAE,SAASogM,GAAGltN,EAAEC,GAAGD,EAAE8iN,OAAO7iN,EAAE,IAAI0T,EAAE3T,EAAE8rM,UAAU,OAAOn4L,IAAIA,EAAEmvM,OAAO7iN,GAAGyiN,GAAG1iN,EAAE+rM,OAAO9rM,GACtd,SAASktN,GAAGntN,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,GAAG,IAAI4hB,EAAEva,EAAEisM,cAAc,OAAO1xL,EAAEva,EAAEisM,cAAc,CAACmhB,YAAYntN,EAAEotN,UAAU,KAAKC,mBAAmB,EAAEvrN,KAAK+qB,EAAEygM,KAAK55M,EAAE65M,SAAS/0N,EAAEgtN,WAAW9sN,IAAI4hB,EAAE6yM,YAAYntN,EAAEsa,EAAE8yM,UAAU,KAAK9yM,EAAE+yM,mBAAmB,EAAE/yM,EAAExY,KAAK+qB,EAAEvS,EAAEgzM,KAAK55M,EAAE4G,EAAEizM,SAAS/0N,EAAE8hB,EAAEkrM,WAAW9sN,GACvQ,SAAS80N,GAAGztN,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE7sB,EAAEsnN,aAAa9uN,EAAEq0B,EAAEk6L,YAAYruN,EAAEm0B,EAAEygM,KAAsC,GAAjChC,GAAGvrN,EAAEC,EAAE6sB,EAAE1xB,SAASuY,GAAkB,KAAO,GAAtBmZ,EAAEwrH,GAAEmmD,UAAqB3xK,EAAI,EAAFA,EAAI,EAAE7sB,EAAE6T,OAAO,OAAO,CAAC,GAAG,OAAO9T,GAAG,KAAa,GAARA,EAAE8T,OAAU9T,EAAE,IAAIA,EAAEC,EAAE5C,MAAM,OAAO2C,GAAG,CAAC,GAAG,KAAKA,EAAEmkM,IAAI,OAAOnkM,EAAEisM,eAAeihB,GAAGltN,EAAE2T,QAAQ,GAAG,KAAK3T,EAAEmkM,IAAI+oB,GAAGltN,EAAE2T,QAAQ,GAAG,OAAO3T,EAAE3C,MAAM,CAAC2C,EAAE3C,MAAM0uM,OAAO/rM,EAAEA,EAAEA,EAAE3C,MAAM,SAAS,GAAG2C,IAAIC,EAAE,MAAMD,EAAE,KAAK,OAAOA,EAAEosM,SAAS,CAAC,GAAG,OAAOpsM,EAAE+rM,QAAQ/rM,EAAE+rM,SAAS9rM,EAAE,MAAMD,EAAEA,EAAEA,EAAE+rM,OAAO/rM,EAAEosM,QAAQL,OAAO/rM,EAAE+rM,OAAO/rM,EAAEA,EAAEosM,QAAQt/K,GAAG,EAAS,GAAPmrH,GAAEK,GAAExrH,GAAM,KAAY,EAAP7sB,EAAE+7D,MAAQ/7D,EAAEgsM,cACze,UAAU,OAAOxzM,GAAG,IAAK,WAAqB,IAAVkb,EAAE1T,EAAE5C,MAAU5E,EAAE,KAAK,OAAOkb,GAAiB,QAAd3T,EAAE2T,EAAEm4L,YAAoB,OAAOgb,GAAG9mN,KAAKvH,EAAEkb,GAAGA,EAAEA,EAAEy4L,QAAY,QAAJz4L,EAAElb,IAAYA,EAAEwH,EAAE5C,MAAM4C,EAAE5C,MAAM,OAAO5E,EAAEkb,EAAEy4L,QAAQz4L,EAAEy4L,QAAQ,MAAM+gB,GAAGltN,GAAE,EAAGxH,EAAEkb,EAAEhb,EAAEsH,EAAEwlN,YAAY,MAAM,IAAK,YAA6B,IAAjB9xM,EAAE,KAAKlb,EAAEwH,EAAE5C,MAAU4C,EAAE5C,MAAM,KAAK,OAAO5E,GAAG,CAAe,GAAG,QAAjBuH,EAAEvH,EAAEqzM,YAAuB,OAAOgb,GAAG9mN,GAAG,CAACC,EAAE5C,MAAM5E,EAAE,MAAMuH,EAAEvH,EAAE2zM,QAAQ3zM,EAAE2zM,QAAQz4L,EAAEA,EAAElb,EAAEA,EAAEuH,EAAEmtN,GAAGltN,GAAE,EAAG0T,EAAE,KAAKhb,EAAEsH,EAAEwlN,YAAY,MAAM,IAAK,WAAW0H,GAAGltN,GAAE,EAAG,KAAK,UAAK,EAAOA,EAAEwlN,YAAY,MAAM,QAAQxlN,EAAEgsM,cAAc,KAAK,OAAOhsM,EAAE5C,MAC/f,SAASouN,GAAGzrN,EAAEC,EAAE0T,GAAyD,GAAtD,OAAO3T,IAAIC,EAAE+gI,aAAahhI,EAAEghI,cAAckjF,IAAIjkN,EAAE6iN,MAAS,KAAKnvM,EAAE1T,EAAE0iN,YAAY,CAAC,GAAG,OAAO3iN,GAAGC,EAAE5C,QAAQ2C,EAAE3C,MAAM,MAAMwD,MAAMuQ,EAAE,MAAM,GAAG,OAAOnR,EAAE5C,MAAM,CAA4C,IAAjCsW,EAAEiyM,GAAZ5lN,EAAEC,EAAE5C,MAAa2C,EAAEunN,cAActnN,EAAE5C,MAAMsW,EAAMA,EAAEo4L,OAAO9rM,EAAE,OAAOD,EAAEosM,SAASpsM,EAAEA,EAAEosM,SAAQz4L,EAAEA,EAAEy4L,QAAQwZ,GAAG5lN,EAAEA,EAAEunN,eAAgBxb,OAAO9rM,EAAE0T,EAAEy4L,QAAQ,KAAK,OAAOnsM,EAAE5C,MAAM,OAAO,KAK5P,SAASqwN,GAAG1tN,EAAEC,GAAG,IAAIknN,GAAG,OAAOnnN,EAAEwtN,UAAU,IAAK,SAASvtN,EAAED,EAAEutN,KAAK,IAAI,IAAI55M,EAAE,KAAK,OAAO1T,GAAG,OAAOA,EAAE6rM,YAAYn4L,EAAE1T,GAAGA,EAAEA,EAAEmsM,QAAQ,OAAOz4L,EAAE3T,EAAEutN,KAAK,KAAK55M,EAAEy4L,QAAQ,KAAK,MAAM,IAAK,YAAYz4L,EAAE3T,EAAEutN,KAAK,IAAI,IAAIzgM,EAAE,KAAK,OAAOnZ,GAAG,OAAOA,EAAEm4L,YAAYh/K,EAAEnZ,GAAGA,EAAEA,EAAEy4L,QAAQ,OAAOt/K,EAAE7sB,GAAG,OAAOD,EAAEutN,KAAKvtN,EAAEutN,KAAK,KAAKvtN,EAAEutN,KAAKnhB,QAAQ,KAAKt/K,EAAEs/K,QAAQ,MAC7Z,SAASuhB,GAAG3tN,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE7sB,EAAEsnN,aAAa,OAAOtnN,EAAEkkM,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,OAAO,KAAK,KAAK,EAAE,OAAOub,GAAGz/M,EAAEqb,OAAOqkM,KAAK,KAAK,KAAK,EAAsL,OAApLgH,KAAKjoB,GAAEO,IAAGP,GAAEM,IAAG4oB,MAAK96L,EAAE7sB,EAAEuqM,WAAY+hB,iBAAiBz/L,EAAEhzB,QAAQgzB,EAAEy/L,eAAez/L,EAAEy/L,eAAe,MAAS,OAAOvsN,GAAG,OAAOA,EAAE3C,QAAMqqN,GAAGznN,GAAGA,EAAE6T,OAAO,EAAEgZ,EAAEihL,UAAU9tM,EAAE6T,OAAO,MAAkB,KAAK,KAAK,EAAE+yM,GAAG5mN,GAAG,IAAIxH,EAAEguN,GAAGD,GAAG/nB,SAAkB,GAAT9qL,EAAE1T,EAAEqb,KAAQ,OAAOtb,GAAG,MAAMC,EAAEuqM,UAAUiiB,GAAGzsN,EAAEC,EAAE0T,EAAEmZ,GAAK9sB,EAAEyhI,MAAMxhI,EAAEwhI,MAAMxhI,EAAE6T,OAAO,SAAS,CAAC,IAAIgZ,EAAE,CAAC,GAAG,OAC7f7sB,EAAEuqM,UAAU,MAAM3pM,MAAMuQ,EAAE,MAAM,OAAO,KAAsB,GAAjBpR,EAAEymN,GAAGH,GAAG7nB,SAAYipB,GAAGznN,GAAG,CAAC6sB,EAAE7sB,EAAEuqM,UAAU72L,EAAE1T,EAAEqb,KAAK,IAAI3iB,EAAEsH,EAAE8mN,cAA8B,OAAhBj6L,EAAEiyL,IAAI9+M,EAAE6sB,EAAEkyL,IAAIrmN,EAASgb,GAAG,IAAK,SAAS4kI,GAAE,SAASzrH,GAAGyrH,GAAE,QAAQzrH,GAAG,MAAM,IAAK,SAAS,IAAK,SAAS,IAAK,QAAQyrH,GAAE,OAAOzrH,GAAG,MAAM,IAAK,QAAQ,IAAK,QAAQ,IAAI9sB,EAAE,EAAEA,EAAEm9M,GAAGtpN,OAAOmM,IAAIu4I,GAAE4kE,GAAGn9M,GAAG8sB,GAAG,MAAM,IAAK,SAASyrH,GAAE,QAAQzrH,GAAG,MAAM,IAAK,MAAM,IAAK,QAAQ,IAAK,OAAOyrH,GAAE,QAAQzrH,GAAGyrH,GAAE,OAAOzrH,GAAG,MAAM,IAAK,UAAUyrH,GAAE,SAASzrH,GAAG,MAAM,IAAK,QAAQq4K,GAAGr4K,EAAEn0B,GAAG4/I,GAAE,UAAUzrH,GAAG,MAAM,IAAK,SAASA,EAAEm4K,cAC5f,CAAC2oB,cAAcj1N,EAAEk1N,UAAUt1E,GAAE,UAAUzrH,GAAG,MAAM,IAAK,WAAWi5K,GAAGj5K,EAAEn0B,GAAG4/I,GAAE,UAAUzrH,GAAkB,IAAI,IAAIvS,KAAvB8zB,GAAG16B,EAAEhb,GAAGqH,EAAE,KAAkBrH,EAAEA,EAAEpC,eAAegkB,KAAK9hB,EAAEE,EAAE4hB,GAAG,aAAaA,EAAE,kBAAkB9hB,EAAEq0B,EAAEm4J,cAAcxsL,IAAIuH,EAAE,CAAC,WAAWvH,IAAI,kBAAkBA,GAAGq0B,EAAEm4J,cAAc,GAAGxsL,IAAIuH,EAAE,CAAC,WAAW,GAAGvH,IAAI4oM,EAAG9qM,eAAegkB,IAAI,MAAM9hB,GAAG,aAAa8hB,GAAGg+H,GAAE,SAASzrH,IAAI,OAAOnZ,GAAG,IAAK,QAAQ6wL,EAAG13K,GAAGwvB,GAAGxvB,EAAEn0B,GAAE,GAAI,MAAM,IAAK,WAAW6rM,EAAG13K,GAAGk5K,GAAGl5K,GAAG,MAAM,IAAK,SAAS,IAAK,SAAS,MAAM,QAAQ,oBAAoBn0B,EAAEmV,UAAUgf,EAAEghM,QACtf7P,IAAInxL,EAAE9sB,EAAEC,EAAEmjN,YAAYt2L,EAAE,OAAOA,IAAI7sB,EAAE6T,OAAO,OAAO,CAAiZ,OAAhZyG,EAAE,IAAI9hB,EAAE0qJ,SAAS1qJ,EAAEA,EAAE8sM,cAAcvlM,IAAIimM,KAAUjmM,EAAEkmM,GAAGvyL,IAAI3T,IAAIimM,GAAQ,WAAWtyL,IAAG3T,EAAEua,EAAE5V,cAAc,QAASqd,UAAU,qBAAuBhiB,EAAEA,EAAEw7I,YAAYx7I,EAAEsmM,aAAa,kBAAkBx5K,EAAE45I,GAAG1mK,EAAEua,EAAE5V,cAAcgP,EAAE,CAAC+yJ,GAAG55I,EAAE45I,MAAM1mK,EAAEua,EAAE5V,cAAcgP,GAAG,WAAWA,IAAI4G,EAAEva,EAAE8sB,EAAE+gM,SAAStzM,EAAEszM,UAAS,EAAG/gM,EAAEnO,OAAOpE,EAAEoE,KAAKmO,EAAEnO,QAAQ3e,EAAEua,EAAEmU,gBAAgB1uB,EAAE2T,GAAG3T,EAAE++M,IAAI9+M,EAAED,EAAEg/M,IAAIlyL,EAAE0/L,GAAGxsN,EAAEC,GAASA,EAAEuqM,UAAUxqM,EAAEua,EAAEwvL,GAAGp2L,EAAEmZ,GAAUnZ,GAAG,IAAK,SAAS4kI,GAAE,SAASv4I,GAAGu4I,GAAE,QAAQv4I,GACpfvH,EAAEq0B,EAAE,MAAM,IAAK,SAAS,IAAK,SAAS,IAAK,QAAQyrH,GAAE,OAAOv4I,GAAGvH,EAAEq0B,EAAE,MAAM,IAAK,QAAQ,IAAK,QAAQ,IAAIr0B,EAAE,EAAEA,EAAE0kN,GAAGtpN,OAAO4E,IAAI8/I,GAAE4kE,GAAG1kN,GAAGuH,GAAGvH,EAAEq0B,EAAE,MAAM,IAAK,SAASyrH,GAAE,QAAQv4I,GAAGvH,EAAEq0B,EAAE,MAAM,IAAK,MAAM,IAAK,QAAQ,IAAK,OAAOyrH,GAAE,QAAQv4I,GAAGu4I,GAAE,OAAOv4I,GAAGvH,EAAEq0B,EAAE,MAAM,IAAK,UAAUyrH,GAAE,SAASv4I,GAAGvH,EAAEq0B,EAAE,MAAM,IAAK,QAAQq4K,GAAGnlM,EAAE8sB,GAAGr0B,EAAEssM,EAAG/kM,EAAE8sB,GAAGyrH,GAAE,UAAUv4I,GAAG,MAAM,IAAK,SAASvH,EAAEqvK,GAAG9nK,EAAE8sB,GAAG,MAAM,IAAK,SAAS9sB,EAAEilM,cAAc,CAAC2oB,cAAc9gM,EAAE+gM,UAAUp1N,EAAEma,EAAE,GAAGka,EAAE,CAACh4B,WAAM,IAASyjJ,GAAE,UAAUv4I,GAAG,MAAM,IAAK,WAAW+lM,GAAG/lM,EAAE8sB,GAAGr0B,EACpfotM,GAAG7lM,EAAE8sB,GAAGyrH,GAAE,UAAUv4I,GAAG,MAAM,QAAQvH,EAAEq0B,EAAEuhB,GAAG16B,EAAElb,GAAG,IAAIuX,EAAEvX,EAAE,IAAIE,KAAKqX,EAAE,GAAGA,EAAEzZ,eAAeoC,GAAG,CAAC,IAAIwI,EAAE6O,EAAErX,GAAG,UAAUA,EAAEywM,GAAGppM,EAAEmB,GAAG,4BAA4BxI,EAAuB,OAApBwI,EAAEA,EAAEA,EAAEm9M,YAAO,IAAgBlY,GAAGpmM,EAAEmB,GAAI,aAAaxI,EAAE,kBAAkBwI,GAAG,aAAawS,GAAG,KAAKxS,IAAIslM,GAAGzmM,EAAEmB,GAAG,kBAAkBA,GAAGslM,GAAGzmM,EAAE,GAAGmB,GAAG,mCAAmCxI,GAAG,6BAA6BA,GAAG,cAAcA,IAAI0oM,EAAG9qM,eAAeoC,GAAG,MAAMwI,GAAG,aAAaxI,GAAG4/I,GAAE,SAASv4I,GAAG,MAAMmB,GAAGk1B,EAAGr2B,EAAErH,EAAEwI,EAAEoZ,IAAI,OAAO5G,GAAG,IAAK,QAAQ6wL,EAAGxkM,GAAGs8C,GAAGt8C,EAAE8sB,GAAE,GACnf,MAAM,IAAK,WAAW03K,EAAGxkM,GAAGgmM,GAAGhmM,GAAG,MAAM,IAAK,SAAS,MAAM8sB,EAAEh4B,OAAOkL,EAAEsd,aAAa,QAAQ,GAAGgnL,EAAGx3K,EAAEh4B,QAAQ,MAAM,IAAK,SAASkL,EAAE6tN,WAAW/gM,EAAE+gM,SAAmB,OAAVl1N,EAAEm0B,EAAEh4B,OAAc2wM,GAAGzlM,IAAI8sB,EAAE+gM,SAASl1N,GAAE,GAAI,MAAMm0B,EAAE1c,cAAcq1L,GAAGzlM,IAAI8sB,EAAE+gM,SAAS/gM,EAAE1c,cAAa,GAAI,MAAM,QAAQ,oBAAoB3X,EAAEqV,UAAU9N,EAAE8tN,QAAQ7P,IAAIE,GAAGxqM,EAAEmZ,KAAK7sB,EAAE6T,OAAO,GAAG,OAAO7T,EAAEwhI,MAAMxhI,EAAE6T,OAAO,KAAK,OAAO,KAAK,KAAK,EAAE,GAAG9T,GAAG,MAAMC,EAAEuqM,UAAUkiB,GAAG1sN,EAAEC,EAAED,EAAE+mN,cAAcj6L,OAAO,CAAC,GAAG,kBAAkBA,GAAG,OAAO7sB,EAAEuqM,UAAU,MAAM3pM,MAAMuQ,EAAE,MAC/euC,EAAE8yM,GAAGD,GAAG/nB,SAASgoB,GAAGH,GAAG7nB,SAASipB,GAAGznN,IAAI6sB,EAAE7sB,EAAEuqM,UAAU72L,EAAE1T,EAAE8mN,cAAcj6L,EAAEiyL,IAAI9+M,EAAE6sB,EAAE65K,YAAYhzL,IAAI1T,EAAE6T,OAAO,MAAKgZ,GAAG,IAAInZ,EAAEwvI,SAASxvI,EAAEA,EAAE4xL,eAAewoB,eAAejhM,IAAKiyL,IAAI9+M,EAAEA,EAAEuqM,UAAU19K,GAAG,OAAO,KAAK,KAAK,GAA0B,OAAvB4xK,GAAEpmD,IAAGxrH,EAAE7sB,EAAEgsM,cAAiB,KAAa,GAARhsM,EAAE6T,QAAiB7T,EAAE6iN,MAAMnvM,EAAE1T,IAAE6sB,EAAE,OAAOA,EAAEnZ,GAAE,EAAG,OAAO3T,OAAE,IAASC,EAAE8mN,cAAc3kE,UAAUslE,GAAGznN,GAAG0T,EAAE,OAAO3T,EAAEisM,cAAiBn/K,IAAInZ,GAAG,KAAY,EAAP1T,EAAE+7D,QAAW,OAAOh8D,IAAG,IAAKC,EAAE8mN,cAAc8F,4BAA4B,KAAe,EAAVv0E,GAAEmmD,SAAW,IAAIuvB,KAAIA,GAAE,IAAW,IAAIA,IAAG,IAAIA,KAAEA,GACrf,GAAE,OAAO7hF,IAAG,KAAQ,UAAH+3E,KAAe,KAAQ,UAAH+J,KAAeC,GAAG/hF,GAAEgiF,OAAMrhM,GAAGnZ,KAAE1T,EAAE6T,OAAO,GAAS,MAAK,KAAK,EAAE,OAAO6yM,KAAW,OAAO3mN,GAAG2iC,GAAG1iC,EAAEuqM,UAAUwD,eAAe,KAAK,KAAK,GAAG,OAAOyU,GAAGxiN,GAAG,KAAK,KAAK,GAAG,OAAOy/M,GAAGz/M,EAAEqb,OAAOqkM,KAAK,KAAK,KAAK,GAA0B,GAAvBjhB,GAAEpmD,IAAwB,QAArBxrH,EAAE7sB,EAAEgsM,eAA0B,OAAO,KAAsC,GAAjCtzM,EAAE,KAAa,GAARsH,EAAE6T,OAA2B,QAAjByG,EAAEuS,EAAEugM,WAAsB,GAAG10N,EAAE+0N,GAAG5gM,GAAE,OAAQ,CAAC,GAAG,IAAIkhM,IAAG,OAAOhuN,GAAG,KAAa,GAARA,EAAE8T,OAAU,IAAI9T,EAAEC,EAAE5C,MAAM,OAAO2C,GAAG,CAAS,GAAG,QAAXua,EAAEusM,GAAG9mN,IAAe,CACjW,IADkWC,EAAE6T,OAAO,GAAG45M,GAAG5gM,GAAE,GAAoB,QAAhBn0B,EAAE4hB,EAAE6oM,eAAuBnjN,EAAEmjN,YAAYzqN,EAAEsH,EAAE6T,OAAO,GACnf,OAAOgZ,EAAE24L,aAAaxlN,EAAE0lN,YAAY,MAAM1lN,EAAEwlN,WAAW34L,EAAE24L,WAAW34L,EAAEnZ,EAAMA,EAAE1T,EAAE5C,MAAM,OAAOsW,GAAO3T,EAAE8sB,GAANn0B,EAAEgb,GAAQG,OAAO,EAAEnb,EAAE+sN,WAAW,KAAK/sN,EAAEgtN,YAAY,KAAKhtN,EAAE8sN,WAAW,KAAmB,QAAdlrM,EAAE5hB,EAAEmzM,YAAoBnzM,EAAEgqN,WAAW,EAAEhqN,EAAEmqN,MAAM9iN,EAAErH,EAAE0E,MAAM,KAAK1E,EAAEouN,cAAc,KAAKpuN,EAAEszM,cAAc,KAAKtzM,EAAEyqN,YAAY,KAAKzqN,EAAEqoI,aAAa,KAAKroI,EAAE6xM,UAAU,OAAO7xM,EAAEgqN,WAAWpoM,EAAEooM,WAAWhqN,EAAEmqN,MAAMvoM,EAAEuoM,MAAMnqN,EAAE0E,MAAMkd,EAAEld,MAAM1E,EAAEouN,cAAcxsM,EAAEwsM,cAAcpuN,EAAEszM,cAAc1xL,EAAE0xL,cAActzM,EAAEyqN,YAAY7oM,EAAE6oM,YAAYzqN,EAAE2iB,KAAKf,EAAEe,KAAKtb,EAAEua,EAAEymH,aACpfroI,EAAEqoI,aAAa,OAAOhhI,EAAE,KAAK,CAAC8iN,MAAM9iN,EAAE8iN,MAAMD,aAAa7iN,EAAE6iN,eAAelvM,EAAEA,EAAEy4L,QAA2B,OAAnBn0D,GAAEK,GAAY,EAAVA,GAAEmmD,QAAU,GAAUx+L,EAAE5C,MAAM2C,EAAEA,EAAEosM,QAAQ,OAAOt/K,EAAEygM,MAAMl1E,KAAI+1E,KAAKnuN,EAAE6T,OAAO,GAAGnb,GAAE,EAAG+0N,GAAG5gM,GAAE,GAAI7sB,EAAE6iN,MAAM,cAAc,CAAC,IAAInqN,EAAE,GAAW,QAARqH,EAAE8mN,GAAGvsM,KAAa,GAAGta,EAAE6T,OAAO,GAAGnb,GAAE,EAAmB,QAAhBgb,EAAE3T,EAAEojN,eAAuBnjN,EAAEmjN,YAAYzvM,EAAE1T,EAAE6T,OAAO,GAAG45M,GAAG5gM,GAAE,GAAI,OAAOA,EAAEygM,MAAM,WAAWzgM,EAAE0gM,WAAWjzM,EAAEuxL,YAAYqb,GAAG,OAAmC,QAA5BlnN,EAAEA,EAAEwlN,WAAW34L,EAAE24L,cAAsBxlN,EAAEylN,WAAW,MAAM,UAAU,EAAErtE,KAAIvrH,EAAEwgM,mBAAmBc,IAAI,aAAaz6M,IAAI1T,EAAE6T,OACjf,GAAGnb,GAAE,EAAG+0N,GAAG5gM,GAAE,GAAI7sB,EAAE6iN,MAAM,UAAUh2L,EAAEsgM,aAAa7yM,EAAE6xL,QAAQnsM,EAAE5C,MAAM4C,EAAE5C,MAAMkd,IAAa,QAAT5G,EAAEmZ,EAAE/qB,MAAc4R,EAAEy4L,QAAQ7xL,EAAEta,EAAE5C,MAAMkd,EAAEuS,EAAE/qB,KAAKwY,GAAG,OAAO,OAAOuS,EAAEygM,MAAM55M,EAAEmZ,EAAEygM,KAAKzgM,EAAEugM,UAAU15M,EAAEmZ,EAAEygM,KAAK55M,EAAEy4L,QAAQt/K,EAAE24L,WAAWxlN,EAAEwlN,WAAW34L,EAAEwgM,mBAAmBj1E,KAAI1kI,EAAEy4L,QAAQ,KAAKnsM,EAAEq4I,GAAEmmD,QAAQxmD,GAAEK,GAAE3/I,EAAI,EAAFsH,EAAI,EAAI,EAAFA,GAAK0T,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG,OAAO06M,KAAK,OAAOruN,GAAG,OAAOA,EAAEisM,iBAAiB,OAAOhsM,EAAEgsM,gBAAgB,kCAAkCn/K,EAAEkvC,OAAO/7D,EAAE6T,OAAO,GAAG,KAAK,MAAMjT,MAAMuQ,EAAE,IAAInR,EAAEkkM,MAChd,SAASmqB,GAAGtuN,GAAG,OAAOA,EAAEmkM,KAAK,KAAK,EAAEub,GAAG1/M,EAAEsb,OAAOqkM,KAAK,IAAI1/M,EAAED,EAAE8T,MAAM,OAAS,KAAF7T,GAAQD,EAAE8T,OAAS,KAAH7T,EAAQ,GAAGD,GAAG,KAAK,KAAK,EAAgC,GAA9B2mN,KAAKjoB,GAAEO,IAAGP,GAAEM,IAAG4oB,KAAkB,KAAO,IAApB3nN,EAAED,EAAE8T,QAAoB,MAAMjT,MAAMuQ,EAAE,MAAyB,OAAnBpR,EAAE8T,OAAS,KAAH7T,EAAQ,GAAUD,EAAE,KAAK,EAAE,OAAO6mN,GAAG7mN,GAAG,KAAK,KAAK,GAAG,OAAO0+L,GAAEpmD,IAAe,MAAZr4I,EAAED,EAAE8T,QAAc9T,EAAE8T,OAAS,KAAH7T,EAAQ,GAAGD,GAAG,KAAK,KAAK,GAAG,OAAO0+L,GAAEpmD,IAAG,KAAK,KAAK,EAAE,OAAOquE,KAAK,KAAK,KAAK,GAAG,OAAOlE,GAAGziN,GAAG,KAAK,KAAK,GAAG,KAAK,GAAG,OAAOquN,KAAK,KAAK,QAAQ,OAAO,MACra,SAASE,GAAGvuN,EAAEC,GAAG,IAAI,IAAI0T,EAAE,GAAGmZ,EAAE7sB,EAAE,GAAG0T,GAAGuwL,EAAGp3K,GAAGA,EAAEA,EAAEi/K,aAAaj/K,GAAG,IAAIr0B,EAAEkb,EAAE,MAAMhb,GAAGF,EAAE,6BAA6BE,EAAEiI,QAAQ,KAAKjI,EAAEmrM,MAAM,MAAM,CAAChvM,MAAMkL,EAAEpC,OAAOqC,EAAE6jM,MAAMrrM,GAAG,SAAS+1N,GAAGxuN,EAAEC,GAAG,IAAI0a,QAAQxjB,MAAM8I,EAAEnL,OAAO,MAAM6e,GAAGi5F,YAAW,WAAW,MAAMj5F,MAlB3P64M,GAAG,SAASxsN,EAAEC,GAAG,IAAI,IAAI0T,EAAE1T,EAAE5C,MAAM,OAAOsW,GAAG,CAAC,GAAG,IAAIA,EAAEwwL,KAAK,IAAIxwL,EAAEwwL,IAAInkM,EAAEs8I,YAAY3oI,EAAE62L,gBAAgB,GAAG,IAAI72L,EAAEwwL,KAAK,OAAOxwL,EAAEtW,MAAM,CAACsW,EAAEtW,MAAM0uM,OAAOp4L,EAAEA,EAAEA,EAAEtW,MAAM,SAAS,GAAGsW,IAAI1T,EAAE,MAAM,KAAK,OAAO0T,EAAEy4L,SAAS,CAAC,GAAG,OAAOz4L,EAAEo4L,QAAQp4L,EAAEo4L,SAAS9rM,EAAE,OAAO0T,EAAEA,EAAEo4L,OAAOp4L,EAAEy4L,QAAQL,OAAOp4L,EAAEo4L,OAAOp4L,EAAEA,EAAEy4L,UAChSqgB,GAAG,SAASzsN,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAEuH,EAAE+mN,cAAc,GAAGtuN,IAAIq0B,EAAE,CAAC9sB,EAAEC,EAAEuqM,UAAUic,GAAGH,GAAG7nB,SAAS,IAAyUlkL,EAArU5hB,EAAE,KAAK,OAAOgb,GAAG,IAAK,QAAQlb,EAAEssM,EAAG/kM,EAAEvH,GAAGq0B,EAAEi4K,EAAG/kM,EAAE8sB,GAAGn0B,EAAE,GAAG,MAAM,IAAK,SAASF,EAAEqvK,GAAG9nK,EAAEvH,GAAGq0B,EAAEg7I,GAAG9nK,EAAE8sB,GAAGn0B,EAAE,GAAG,MAAM,IAAK,SAASF,EAAEma,EAAE,GAAGna,EAAE,CAAC3D,WAAM,IAASg4B,EAAEla,EAAE,GAAGka,EAAE,CAACh4B,WAAM,IAAS6D,EAAE,GAAG,MAAM,IAAK,WAAWF,EAAEotM,GAAG7lM,EAAEvH,GAAGq0B,EAAE+4K,GAAG7lM,EAAE8sB,GAAGn0B,EAAE,GAAG,MAAM,QAAQ,oBAAoBF,EAAEqV,SAAS,oBAAoBgf,EAAEhf,UAAU9N,EAAE8tN,QAAQ7P,IAAyB,IAAI5/M,KAAzBgwC,GAAG16B,EAAEmZ,GAASnZ,EAAE,KAAclb,EAAE,IAAIq0B,EAAEv2B,eAAe8H,IAAI5F,EAAElC,eAAe8H,IAAI,MAAM5F,EAAE4F,GAAG,GAAG,UAC3eA,EAAE,CAAC,IAAI2R,EAAEvX,EAAE4F,GAAG,IAAIkc,KAAKvK,EAAEA,EAAEzZ,eAAegkB,KAAK5G,IAAIA,EAAE,IAAIA,EAAE4G,GAAG,QAAQ,4BAA4Blc,GAAG,aAAaA,GAAG,mCAAmCA,GAAG,6BAA6BA,GAAG,cAAcA,IAAIgjM,EAAG9qM,eAAe8H,GAAG1F,IAAIA,EAAE,KAAKA,EAAEA,GAAG,IAAIa,KAAK6E,EAAE,OAAO,IAAIA,KAAKyuB,EAAE,CAAC,IAAI3rB,EAAE2rB,EAAEzuB,GAAyB,GAAtB2R,EAAE,MAAMvX,EAAEA,EAAE4F,QAAG,EAAUyuB,EAAEv2B,eAAe8H,IAAI8C,IAAI6O,IAAI,MAAM7O,GAAG,MAAM6O,GAAG,GAAG,UAAU3R,EAAE,GAAG2R,EAAE,CAAC,IAAIuK,KAAKvK,GAAGA,EAAEzZ,eAAegkB,IAAIpZ,GAAGA,EAAE5K,eAAegkB,KAAK5G,IAAIA,EAAE,IAAIA,EAAE4G,GAAG,IAAI,IAAIA,KAAKpZ,EAAEA,EAAE5K,eAAegkB,IAAIvK,EAAEuK,KAAKpZ,EAAEoZ,KAAK5G,IAClfA,EAAE,IAAIA,EAAE4G,GAAGpZ,EAAEoZ,SAAS5G,IAAIhb,IAAIA,EAAE,IAAIA,EAAEa,KAAK6E,EAAEsV,IAAIA,EAAExS,MAAM,4BAA4B9C,GAAG8C,EAAEA,EAAEA,EAAEm9M,YAAO,EAAOtuM,EAAEA,EAAEA,EAAEsuM,YAAO,EAAO,MAAMn9M,GAAG6O,IAAI7O,IAAIxI,EAAEA,GAAG,IAAIa,KAAK6E,EAAE8C,IAAI,aAAa9C,EAAE,kBAAkB8C,GAAG,kBAAkBA,IAAIxI,EAAEA,GAAG,IAAIa,KAAK6E,EAAE,GAAG8C,GAAG,mCAAmC9C,GAAG,6BAA6BA,IAAIgjM,EAAG9qM,eAAe8H,IAAI,MAAM8C,GAAG,aAAa9C,GAAGk6I,GAAE,SAASv4I,GAAGrH,GAAGqX,IAAI7O,IAAIxI,EAAE,KAAK,kBAAkBwI,GAAG,OAAOA,GAAGA,EAAE29L,WAAWwE,EAAGniM,EAAErD,YAAYnF,EAAEA,GAAG,IAAIa,KAAK6E,EAAE8C,IAAIwS,IAAIhb,EAAEA,GAAG,IAAIa,KAAK,QAC/ema,GAAG,IAAItV,EAAE1F,GAAKsH,EAAEmjN,YAAY/kN,KAAE4B,EAAE6T,OAAO,KAAI44M,GAAG,SAAS1sN,EAAEC,EAAE0T,EAAEmZ,GAAGnZ,IAAImZ,IAAI7sB,EAAE6T,OAAO,IAcgL,IAAI26M,GAAG,oBAAoBnmK,QAAQA,QAAQ9rC,IAAI,SAASkyM,GAAG1uN,EAAEC,EAAE0T,IAAGA,EAAEgwM,IAAI,EAAEhwM,IAAKwwL,IAAI,EAAExwL,EAAEmwM,QAAQ,CAACxmN,QAAQ,MAAM,IAAIwvB,EAAE7sB,EAAEnL,MAAsD,OAAhD6e,EAAEzP,SAAS,WAAWyqN,KAAKA,IAAG,EAAGC,GAAG9hM,GAAG0hM,GAAGxuN,EAAEC,IAAW0T,EACpb,SAASk7M,GAAG7uN,EAAEC,EAAE0T,IAAGA,EAAEgwM,IAAI,EAAEhwM,IAAKwwL,IAAI,EAAE,IAAIr3K,EAAE9sB,EAAEsb,KAAK0gL,yBAAyB,GAAG,oBAAoBlvK,EAAE,CAAC,IAAIr0B,EAAEwH,EAAEnL,MAAM6e,EAAEmwM,QAAQ,WAAmB,OAAR0K,GAAGxuN,EAAEC,GAAU6sB,EAAEr0B,IAAI,IAAIE,EAAEqH,EAAEwqM,UAA8O,OAApO,OAAO7xM,GAAG,oBAAoBA,EAAEm2N,oBAAoBn7M,EAAEzP,SAAS,WAAW,oBAAoB4oB,IAAI,OAAOiiM,GAAGA,GAAG,IAAIlgF,IAAI,CAACx5I,OAAO05N,GAAG3zL,IAAI/lC,MAAMm5N,GAAGxuN,EAAEC,IAAI,IAAI0T,EAAE1T,EAAE6jM,MAAMzuM,KAAKy5N,kBAAkB7uN,EAAEnL,MAAM,CAACk6N,eAAe,OAAOr7M,EAAEA,EAAE,OAAcA,EAAE,IAAIs7M,GAAG,oBAAoBC,QAAQA,QAAQrgF,IACxc,SAASsgF,GAAGnvN,GAAG,IAAIC,EAAED,EAAEyhI,IAAI,GAAG,OAAOxhI,EAAE,GAAG,oBAAoBA,EAAE,IAAIA,EAAE,MAAM,MAAM0T,GAAGy7M,GAAGpvN,EAAE2T,QAAQ1T,EAAEw+L,QAAQ,KAAK,SAAS4wB,GAAGrvN,EAAEC,GAAG,OAAOA,EAAEkkM,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,KAAK,EAAE,GAAW,IAARlkM,EAAE6T,OAAW,OAAO9T,EAAE,CAAC,IAAI2T,EAAE3T,EAAE+mN,cAAcj6L,EAAE9sB,EAAEisM,cAA4BhsM,GAAdD,EAAEC,EAAEuqM,WAAcya,wBAAwBhlN,EAAE6lN,cAAc7lN,EAAEqb,KAAK3H,EAAEwuM,GAAGliN,EAAEqb,KAAK3H,GAAGmZ,GAAG9sB,EAAEsvN,oCAAoCrvN,EAAE,OAAO,KAAK,EAA6C,YAAnC,IAARA,EAAE6T,OAAW2qM,GAAGx+M,EAAEuqM,UAAUwD,gBAAsB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,MAAMntM,MAAMuQ,EAAE,MAC5e,SAASm+M,GAAGvvN,EAAEC,EAAE0T,GAAG,OAAOA,EAAEwwL,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAgD,GAAG,QAAhClkM,EAAE,QAAlBA,EAAE0T,EAAEyvM,aAAuBnjN,EAAEwlN,WAAW,MAAiB,CAACzlN,EAAEC,EAAEA,EAAElH,KAAK,EAAE,CAAC,GAAG,KAAW,EAANiH,EAAEmkM,KAAO,CAAC,IAAIr3K,EAAE9sB,EAAEpL,OAAOoL,EAAE4wE,QAAQ9jD,IAAI9sB,EAAEA,EAAEjH,WAAWiH,IAAIC,GAAgD,GAAG,QAAhCA,EAAE,QAAlBA,EAAE0T,EAAEyvM,aAAuBnjN,EAAEwlN,WAAW,MAAiB,CAACzlN,EAAEC,EAAEA,EAAElH,KAAK,EAAE,CAAC,IAAIN,EAAEuH,EAAE8sB,EAAEr0B,EAAEM,KAAa,KAAO,GAAfN,EAAEA,EAAE0rM,OAAe,KAAO,EAAF1rM,KAAO+2N,GAAG77M,EAAE3T,GAAGyvN,GAAG97M,EAAE3T,IAAIA,EAAE8sB,QAAQ9sB,IAAIC,GAAG,OAAO,KAAK,EACtR,OADwRD,EAAE2T,EAAE62L,UAAkB,EAAR72L,EAAEG,QAAU,OAAO7T,EAAED,EAAEvF,qBAAqBqyB,EAAEnZ,EAAEmyM,cAAcnyM,EAAE2H,KAAKrb,EAAE8mN,cAAc5E,GAAGxuM,EAAE2H,KAAKrb,EAAE8mN,eAAe/mN,EAAEosN,mBAAmBt/L,EACxgB7sB,EAAEgsM,cAAcjsM,EAAEsvN,4CAAuD,QAAhBrvN,EAAE0T,EAAEyvM,cAAsBe,GAAGxwM,EAAE1T,EAAED,IAAU,KAAK,EAAkB,GAAG,QAAnBC,EAAE0T,EAAEyvM,aAAwB,CAAQ,GAAPpjN,EAAE,KAAQ,OAAO2T,EAAEtW,MAAM,OAAOsW,EAAEtW,MAAM8mM,KAAK,KAAK,EAAEnkM,EAAE2T,EAAEtW,MAAMmtM,UAAU,MAAM,KAAK,EAAExqM,EAAE2T,EAAEtW,MAAMmtM,UAAU2Z,GAAGxwM,EAAE1T,EAAED,GAAG,OAAO,KAAK,EAA2E,OAAzEA,EAAE2T,EAAE62L,eAAU,OAAOvqM,GAAW,EAAR0T,EAAEG,OAASqqM,GAAGxqM,EAAE2H,KAAK3H,EAAEozM,gBAAgB/mN,EAAE4iD,SAAe,KAAK,EAAS,KAAK,EAAS,KAAK,GAAG,OAAO,KAAK,GACzY,YAD4Y,OAAOjvC,EAAEs4L,gBAAgBt4L,EAAEA,EAAEm4L,UAAU,OAAOn4L,IAAIA,EAAEA,EAAEs4L,cAAc,OAAOt4L,IAAIA,EAAEA,EAAEu4L,WAAW,OAAOv4L,GAAG66L,GAAG76L,OAChf,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,MAAM9S,MAAMuQ,EAAE,MAC5E,SAASs+M,GAAG1vN,EAAEC,GAAG,IAAI,IAAI0T,EAAE3T,IAAI,CAAC,GAAG,IAAI2T,EAAEwwL,IAAI,CAAC,IAAIr3K,EAAEnZ,EAAE62L,UAAU,GAAGvqM,EAAY,oBAAV6sB,EAAEA,EAAEje,OAA4Bw6L,YAAYv8K,EAAEu8K,YAAY,UAAU,OAAO,aAAav8K,EAAEukE,QAAQ,WAAW,CAACvkE,EAAEnZ,EAAE62L,UAAU,IAAI/xM,EAAEkb,EAAEozM,cAAcl4M,MAAMpW,OAAE,IAASA,GAAG,OAAOA,GAAGA,EAAElC,eAAe,WAAWkC,EAAE44F,QAAQ,KAAKvkE,EAAEje,MAAMwiF,QAAQ83G,GAAG,UAAU1wM,SAAS,GAAG,IAAIkb,EAAEwwL,IAAIxwL,EAAE62L,UAAU7D,UAAU1mM,EAAE,GAAG0T,EAAEozM,mBAAmB,IAAI,KAAKpzM,EAAEwwL,KAAK,KAAKxwL,EAAEwwL,KAAK,OAAOxwL,EAAEs4L,eAAet4L,IAAI3T,IAAI,OAAO2T,EAAEtW,MAAM,CAACsW,EAAEtW,MAAM0uM,OAAOp4L,EAAEA,EAAEA,EAAEtW,MAAM,SAAS,GAAGsW,IACtf3T,EAAE,MAAM,KAAK,OAAO2T,EAAEy4L,SAAS,CAAC,GAAG,OAAOz4L,EAAEo4L,QAAQp4L,EAAEo4L,SAAS/rM,EAAE,OAAO2T,EAAEA,EAAEo4L,OAAOp4L,EAAEy4L,QAAQL,OAAOp4L,EAAEo4L,OAAOp4L,EAAEA,EAAEy4L,SACjH,SAASujB,GAAG3vN,EAAEC,GAAG,GAAGigN,IAAI,oBAAoBA,GAAG0P,qBAAqB,IAAI1P,GAAG0P,qBAAqB3P,GAAGhgN,GAAG,MAAMtH,IAAI,OAAOsH,EAAEkkM,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAmB,GAAG,QAAnBnkM,EAAEC,EAAEmjN,cAAyC,QAAfpjN,EAAEA,EAAEylN,YAAqB,CAAC,IAAI9xM,EAAE3T,EAAEA,EAAEjH,KAAK,EAAE,CAAC,IAAI+zB,EAAEnZ,EAAElb,EAAEq0B,EAAE8jD,QAAgB,GAAR9jD,EAAEA,EAAEq3K,SAAO,IAAS1rM,EAAE,GAAG,KAAO,EAAFq0B,GAAK0iM,GAAGvvN,EAAE0T,OAAO,CAACmZ,EAAE7sB,EAAE,IAAIxH,IAAI,MAAME,GAAGy2N,GAAGtiM,EAAEn0B,IAAIgb,EAAEA,EAAE5a,WAAW4a,IAAI3T,GAAG,MAAM,KAAK,EAAsB,GAApBmvN,GAAGlvN,GAAoB,oBAAjBD,EAAEC,EAAEuqM,WAAmC7vM,qBAAqB,IAAIqF,EAAErM,MAAMsM,EAAE8mN,cAAc/mN,EAAEhF,MAAMiF,EAAEgsM,cAAcjsM,EAAErF,uBAAuB,MAAMhC,GAAGy2N,GAAGnvN,EAC/gBtH,GAAG,MAAM,KAAK,EAAEw2N,GAAGlvN,GAAG,MAAM,KAAK,EAAE4vN,GAAG7vN,EAAEC,IAAI,SAAS6vN,GAAG9vN,GAAGA,EAAE8rM,UAAU,KAAK9rM,EAAE3C,MAAM,KAAK2C,EAAEghI,aAAa,KAAKhhI,EAAE2lN,YAAY,KAAK3lN,EAAEylN,WAAW,KAAKzlN,EAAE+mN,cAAc,KAAK/mN,EAAEisM,cAAc,KAAKjsM,EAAEunN,aAAa,KAAKvnN,EAAE+rM,OAAO,KAAK/rM,EAAEojN,YAAY,KAAK,SAAS2M,GAAG/vN,GAAG,OAAO,IAAIA,EAAEmkM,KAAK,IAAInkM,EAAEmkM,KAAK,IAAInkM,EAAEmkM,IACnS,SAAS6rB,GAAGhwN,GAAGA,EAAE,CAAC,IAAI,IAAIC,EAAED,EAAE+rM,OAAO,OAAO9rM,GAAG,CAAC,GAAG8vN,GAAG9vN,GAAG,MAAMD,EAAEC,EAAEA,EAAE8rM,OAAO,MAAMlrM,MAAMuQ,EAAE,MAAO,IAAIuC,EAAE1T,EAAgB,OAAdA,EAAE0T,EAAE62L,UAAiB72L,EAAEwwL,KAAK,KAAK,EAAE,IAAIr3K,GAAE,EAAG,MAAM,KAAK,EAA+B,KAAK,EAAE7sB,EAAEA,EAAE+tM,cAAclhL,GAAE,EAAG,MAAM,QAAQ,MAAMjsB,MAAMuQ,EAAE,MAAe,GAARuC,EAAEG,QAAW2yL,GAAGxmM,EAAE,IAAI0T,EAAEG,QAAQ,IAAI9T,EAAEC,EAAE,IAAI0T,EAAE3T,IAAI,CAAC,KAAK,OAAO2T,EAAEy4L,SAAS,CAAC,GAAG,OAAOz4L,EAAEo4L,QAAQgkB,GAAGp8M,EAAEo4L,QAAQ,CAACp4L,EAAE,KAAK,MAAM3T,EAAE2T,EAAEA,EAAEo4L,OAAiC,IAA1Bp4L,EAAEy4L,QAAQL,OAAOp4L,EAAEo4L,OAAWp4L,EAAEA,EAAEy4L,QAAQ,IAAIz4L,EAAEwwL,KAAK,IAAIxwL,EAAEwwL,KAAK,KAAKxwL,EAAEwwL,KAAK,CAAC,GAAW,EAARxwL,EAAEG,MAAQ,SAAS7T,EAAE,GAAG,OAC/e0T,EAAEtW,OAAO,IAAIsW,EAAEwwL,IAAI,SAASlkM,EAAO0T,EAAEtW,MAAM0uM,OAAOp4L,EAAEA,EAAEA,EAAEtW,MAAM,KAAa,EAARsW,EAAEG,OAAS,CAACH,EAAEA,EAAE62L,UAAU,MAAMxqM,GAAG8sB,EAAEmjM,GAAGjwN,EAAE2T,EAAE1T,GAAGiwN,GAAGlwN,EAAE2T,EAAE1T,GACzH,SAASgwN,GAAGjwN,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE9sB,EAAEmkM,IAAI1rM,EAAE,IAAIq0B,GAAG,IAAIA,EAAE,GAAGr0B,EAAEuH,EAAEvH,EAAEuH,EAAEwqM,UAAUxqM,EAAEwqM,UAAUl3M,SAAS2M,EAAE,IAAI0T,EAAEwvI,SAASxvI,EAAE4nI,WAAW40E,aAAanwN,EAAEC,GAAG0T,EAAEw8M,aAAanwN,EAAEC,IAAI,IAAI0T,EAAEwvI,UAAUljJ,EAAE0T,EAAE4nI,YAAa40E,aAAanwN,EAAE2T,IAAK1T,EAAE0T,GAAI2oI,YAAYt8I,GAA4B,QAAxB2T,EAAEA,EAAEy8M,2BAA8B,IAASz8M,GAAG,OAAO1T,EAAE6tN,UAAU7tN,EAAE6tN,QAAQ7P,UAAU,GAAG,IAAInxL,GAAc,QAAV9sB,EAAEA,EAAE3C,OAAgB,IAAI4yN,GAAGjwN,EAAEC,EAAE0T,GAAG3T,EAAEA,EAAEosM,QAAQ,OAAOpsM,GAAGiwN,GAAGjwN,EAAEC,EAAE0T,GAAG3T,EAAEA,EAAEosM,QAC9Y,SAAS8jB,GAAGlwN,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE9sB,EAAEmkM,IAAI1rM,EAAE,IAAIq0B,GAAG,IAAIA,EAAE,GAAGr0B,EAAEuH,EAAEvH,EAAEuH,EAAEwqM,UAAUxqM,EAAEwqM,UAAUl3M,SAAS2M,EAAE0T,EAAEw8M,aAAanwN,EAAEC,GAAG0T,EAAE2oI,YAAYt8I,QAAQ,GAAG,IAAI8sB,GAAc,QAAV9sB,EAAEA,EAAE3C,OAAgB,IAAI6yN,GAAGlwN,EAAEC,EAAE0T,GAAG3T,EAAEA,EAAEosM,QAAQ,OAAOpsM,GAAGkwN,GAAGlwN,EAAEC,EAAE0T,GAAG3T,EAAEA,EAAEosM,QACrN,SAASyjB,GAAG7vN,EAAEC,GAAG,IAAI,IAAaxH,EAAEE,EAAXgb,EAAE1T,EAAE6sB,GAAE,IAAS,CAAC,IAAIA,EAAE,CAACA,EAAEnZ,EAAEo4L,OAAO/rM,EAAE,OAAO,CAAC,GAAG,OAAO8sB,EAAE,MAAMjsB,MAAMuQ,EAAE,MAAoB,OAAd3Y,EAAEq0B,EAAE09K,UAAiB19K,EAAEq3K,KAAK,KAAK,EAAExrM,GAAE,EAAG,MAAMqH,EAAE,KAAK,EAAiC,KAAK,EAAEvH,EAAEA,EAAEu1M,cAAcr1M,GAAE,EAAG,MAAMqH,EAAE8sB,EAAEA,EAAEi/K,OAAOj/K,GAAE,EAAG,GAAG,IAAInZ,EAAEwwL,KAAK,IAAIxwL,EAAEwwL,IAAI,CAACnkM,EAAE,IAAI,IAAIua,EAAEva,EAAEgQ,EAAE2D,EAAExS,EAAE6O,IAAI,GAAG2/M,GAAGp1M,EAAEpZ,GAAG,OAAOA,EAAE9D,OAAO,IAAI8D,EAAEgjM,IAAIhjM,EAAE9D,MAAM0uM,OAAO5qM,EAAEA,EAAEA,EAAE9D,UAAU,CAAC,GAAG8D,IAAI6O,EAAE,MAAMhQ,EAAE,KAAK,OAAOmB,EAAEirM,SAAS,CAAC,GAAG,OAAOjrM,EAAE4qM,QAAQ5qM,EAAE4qM,SAAS/7L,EAAE,MAAMhQ,EAAEmB,EAAEA,EAAE4qM,OAAO5qM,EAAEirM,QAAQL,OAAO5qM,EAAE4qM,OAAO5qM,EAAEA,EAAEirM,QAAQzzM,GAAG4hB,EAAE9hB,EAAEuX,EAAE2D,EAAE62L,UACrf,IAAIjwL,EAAE4oI,SAAS5oI,EAAEghI,WAAWC,YAAYxrI,GAAGuK,EAAEihI,YAAYxrI,IAAIvX,EAAE+iJ,YAAY7nI,EAAE62L,gBAAgB,GAAG,IAAI72L,EAAEwwL,KAAK,GAAG,OAAOxwL,EAAEtW,MAAM,CAAC5E,EAAEkb,EAAE62L,UAAUwD,cAAcr1M,GAAE,EAAGgb,EAAEtW,MAAM0uM,OAAOp4L,EAAEA,EAAEA,EAAEtW,MAAM,eAAe,GAAGsyN,GAAG3vN,EAAE2T,GAAG,OAAOA,EAAEtW,MAAM,CAACsW,EAAEtW,MAAM0uM,OAAOp4L,EAAEA,EAAEA,EAAEtW,MAAM,SAAS,GAAGsW,IAAI1T,EAAE,MAAM,KAAK,OAAO0T,EAAEy4L,SAAS,CAAC,GAAG,OAAOz4L,EAAEo4L,QAAQp4L,EAAEo4L,SAAS9rM,EAAE,OAAkB,KAAX0T,EAAEA,EAAEo4L,QAAa5H,MAAMr3K,GAAE,GAAInZ,EAAEy4L,QAAQL,OAAOp4L,EAAEo4L,OAAOp4L,EAAEA,EAAEy4L,SAClZ,SAASikB,GAAGrwN,EAAEC,GAAG,OAAOA,EAAEkkM,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAIxwL,EAAE1T,EAAEmjN,YAAyC,GAAG,QAAhCzvM,EAAE,OAAOA,EAAEA,EAAE8xM,WAAW,MAAiB,CAAC,IAAI34L,EAAEnZ,EAAEA,EAAE5a,KAAK,GAAG,KAAW,EAAN+zB,EAAEq3K,OAASnkM,EAAE8sB,EAAE8jD,QAAQ9jD,EAAE8jD,aAAQ,OAAO,IAAS5wE,GAAGA,KAAK8sB,EAAEA,EAAE/zB,WAAW+zB,IAAInZ,GAAG,OAAO,KAAK,EAAE,OAAO,KAAK,EAAgB,GAAG,OAAjBA,EAAE1T,EAAEuqM,WAAqB,CAAC19K,EAAE7sB,EAAE8mN,cAAc,IAAItuN,EAAE,OAAOuH,EAAEA,EAAE+mN,cAAcj6L,EAAE9sB,EAAEC,EAAEqb,KAAK,IAAI3iB,EAAEsH,EAAEmjN,YAA+B,GAAnBnjN,EAAEmjN,YAAY,KAAQ,OAAOzqN,EAAE,CAAgF,IAA/Egb,EAAEqrM,IAAIlyL,EAAE,UAAU9sB,GAAG,UAAU8sB,EAAExR,MAAM,MAAMwR,EAAEjzB,MAAMwrM,GAAG1xL,EAAEmZ,GAAGi9K,GAAG/pM,EAAEvH,GAAGwH,EAAE8pM,GAAG/pM,EAAE8sB,GAAOr0B,EAAE,EAAEA,EAAEE,EAAE9E,OAAO4E,GAClf,EAAE,CAAC,IAAI8hB,EAAE5hB,EAAEF,GAAGuX,EAAErX,EAAEF,EAAE,GAAG,UAAU8hB,EAAE6uL,GAAGz1L,EAAE3D,GAAG,4BAA4BuK,EAAE6rL,GAAGzyL,EAAE3D,GAAG,aAAauK,EAAEksL,GAAG9yL,EAAE3D,GAAGqmB,EAAG1iB,EAAE4G,EAAEvK,EAAE/P,GAAG,OAAOD,GAAG,IAAK,QAAQu8C,GAAG5oC,EAAEmZ,GAAG,MAAM,IAAK,WAAWkvE,GAAGroF,EAAEmZ,GAAG,MAAM,IAAK,SAAS9sB,EAAE2T,EAAEsxL,cAAc2oB,YAAYj6M,EAAEsxL,cAAc2oB,cAAc9gM,EAAE+gM,SAAmB,OAAVl1N,EAAEm0B,EAAEh4B,OAAc2wM,GAAG9xL,IAAImZ,EAAE+gM,SAASl1N,GAAE,GAAIqH,MAAM8sB,EAAE+gM,WAAW,MAAM/gM,EAAE1c,aAAaq1L,GAAG9xL,IAAImZ,EAAE+gM,SAAS/gM,EAAE1c,cAAa,GAAIq1L,GAAG9xL,IAAImZ,EAAE+gM,SAAS/gM,EAAE+gM,SAAS,GAAG,IAAG,MAAO,OAAO,KAAK,EAAE,GAAG,OAAO5tN,EAAEuqM,UAAU,MAAM3pM,MAAMuQ,EAAE,MAC/c,YADqdnR,EAAEuqM,UAAU7D,UACjf1mM,EAAE8mN,eAAqB,KAAK,EAA8D,aAA5DpzM,EAAE1T,EAAEuqM,WAAYuD,UAAUp6L,EAAEo6L,SAAQ,EAAGS,GAAG76L,EAAEq6L,iBAAuB,KAAK,GAAG,OAAO,KAAK,GAAyD,OAAtD,OAAO/tM,EAAEgsM,gBAAgBqkB,GAAGj4E,KAAIq3E,GAAGzvN,EAAE5C,OAAM,SAAKkzN,GAAGtwN,GAAU,KAAK,GAAS,YAANswN,GAAGtwN,GAAU,KAAK,GAAG,OAAO,KAAK,GAAG,KAAK,GAAgC,YAA7ByvN,GAAGzvN,EAAE,OAAOA,EAAEgsM,eAAsB,MAAMprM,MAAMuQ,EAAE,MAAO,SAASm/M,GAAGvwN,GAAG,IAAIC,EAAED,EAAEojN,YAAY,GAAG,OAAOnjN,EAAE,CAACD,EAAEojN,YAAY,KAAK,IAAIzvM,EAAE3T,EAAEwqM,UAAU,OAAO72L,IAAIA,EAAE3T,EAAEwqM,UAAU,IAAIykB,IAAIhvN,EAAE7B,SAAQ,SAAS6B,GAAG,IAAI6sB,EAAE0jM,GAAG3yN,KAAK,KAAKmC,EAAEC,GAAG0T,EAAEkK,IAAI5d,KAAK0T,EAAEynB,IAAIn7B,GAAGA,EAAE3I,KAAKw1B,EAAEA,QACne,SAAS2jM,GAAGzwN,EAAEC,GAAG,OAAO,OAAOD,IAAsB,QAAlBA,EAAEA,EAAEisM,gBAAwB,OAAOjsM,EAAEksM,cAA+B,QAAlBjsM,EAAEA,EAAEgsM,gBAAwB,OAAOhsM,EAAEisM,YAAe,IAAIwkB,GAAGvqN,KAAK+f,KAAKyqM,GAAGluB,EAAGlD,uBAAuBqxB,GAAGnuB,EAAG/C,kBAAkBmxB,GAAE,EAAE1kF,GAAE,KAAK2kF,GAAE,KAAK3C,GAAE,EAAE4C,GAAG,EAAEC,GAAG5R,GAAG,GAAG4O,GAAE,EAAEiD,GAAG,KAAKC,GAAG,EAAEhN,GAAG,EAAE+J,GAAG,EAAEkD,GAAG,EAAEC,GAAG,KAAKd,GAAG,EAAElC,GAAG9zL,IAAS,SAAS+2L,KAAKjD,GAAG/1E,KAAI,IAAI,IA8BsFi5E,GA9BlFC,GAAE,KAAK5C,IAAG,EAAGC,GAAG,KAAKG,GAAG,KAAKyC,IAAG,EAAGC,GAAG,KAAKC,GAAG,GAAGC,GAAG,GAAGC,GAAG,GAAGC,GAAG,KAAKC,GAAG,EAAEC,GAAG,KAAKC,IAAI,EAAEC,GAAG,EAAEC,GAAG,EAAEC,GAAG,KAAKC,IAAG,EAAG,SAAS5N,KAAK,OAAO,KAAO,GAAFqM,IAAMx4E,MAAK,IAAI25E,GAAGA,GAAGA,GAAG35E,KAC3e,SAASosE,GAAGzkN,GAAY,GAAG,KAAO,GAAnBA,EAAEA,EAAEg8D,OAAkB,OAAO,EAAE,GAAG,KAAO,EAAFh8D,GAAK,OAAO,KAAK4hN,KAAK,EAAE,EAAkB,GAAhB,IAAIqQ,KAAKA,GAAGf,IAAO,IAAIhP,GAAGziB,WAAW,CAAC,IAAIyyB,KAAKA,GAAG,OAAOd,GAAGA,GAAGthB,aAAa,GAAG9vM,EAAEiyN,GAAG,IAAIhyN,EAAE,SAASiyN,GAAsD,OAA7C,KAANjyN,IAAIA,KAA8B,KAAPA,GAAbD,EAAE,SAASA,IAAOA,KAAUC,EAAE,OAAcA,EAA4D,OAA1DD,EAAE4hN,KAAK,KAAO,EAAFiP,KAAM,KAAK7wN,EAAEA,EAAEswM,GAAG,GAAG2hB,IAAajyN,EAAEswM,GAAVtwM,EAtK3Q,SAAYA,GAAG,OAAOA,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EAAE,QAAQ,OAAO,GAsKuJqyN,CAAGryN,GAAUiyN,IAAYjyN,EACnT,SAAS0kN,GAAG1kN,EAAEC,EAAE0T,GAAG,GAAG,GAAGm+M,GAAG,MAAMA,GAAG,EAAEC,GAAG,KAAKlxN,MAAMuQ,EAAE,MAAgB,GAAG,QAAbpR,EAAEsyN,GAAGtyN,EAAEC,IAAe,OAAO,KAAKwwM,GAAGzwM,EAAEC,EAAE0T,GAAG3T,IAAImsI,KAAI8hF,IAAIhuN,EAAE,IAAI+tN,IAAGE,GAAGluN,EAAEmuN,KAAI,IAAIrhM,EAAE80L,KAAK,IAAI3hN,EAAE,KAAO,EAAF4wN,KAAM,KAAO,GAAFA,IAAM0B,GAAGvyN,IAAIwyN,GAAGxyN,EAAE2T,GAAG,IAAIk9M,KAAIQ,KAAKrP,QAAQ,KAAO,EAAF6O,KAAM,KAAK/jM,GAAG,KAAKA,IAAI,OAAO+kM,GAAGA,GAAG,IAAIhjF,IAAI,CAAC7uI,IAAI6xN,GAAGz2L,IAAIp7B,IAAIwyN,GAAGxyN,EAAE2T,IAAIy9M,GAAGpxN,EAAE,SAASsyN,GAAGtyN,EAAEC,GAAGD,EAAE8iN,OAAO7iN,EAAE,IAAI0T,EAAE3T,EAAE8rM,UAAqC,IAA3B,OAAOn4L,IAAIA,EAAEmvM,OAAO7iN,GAAG0T,EAAE3T,EAAMA,EAAEA,EAAE+rM,OAAO,OAAO/rM,GAAGA,EAAE2iN,YAAY1iN,EAAgB,QAAd0T,EAAE3T,EAAE8rM,aAAqBn4L,EAAEgvM,YAAY1iN,GAAG0T,EAAE3T,EAAEA,EAAEA,EAAE+rM,OAAO,OAAO,IAAIp4L,EAAEwwL,IAAIxwL,EAAE62L,UAAU,KACze,SAASgoB,GAAGxyN,EAAEC,GAAG,IAAI,IAAI0T,EAAE3T,EAAEyyN,aAAa3lM,EAAE9sB,EAAEgwM,eAAev3M,EAAEuH,EAAEiwM,YAAYt3M,EAAEqH,EAAE0yN,gBAAgBn4M,EAAEva,EAAE8vM,aAAa,EAAEv1L,GAAG,CAAC,IAAIvK,EAAE,GAAGkgM,GAAG31L,GAAGpZ,EAAE,GAAG6O,EAAE3R,EAAE1F,EAAEqX,GAAG,IAAI,IAAI3R,GAAG,GAAG,KAAK8C,EAAE2rB,IAAI,KAAK3rB,EAAE1I,GAAG,CAAC4F,EAAE4B,EAAE2vM,GAAGzuM,GAAG,IAAI3I,EAAEF,GAAEK,EAAEqX,GAAG,IAAIxX,EAAE6F,EAAE,IAAI,GAAG7F,EAAE6F,EAAE,KAAK,QAAQA,GAAG4B,IAAID,EAAE+vM,cAAc5uM,GAAGoZ,IAAIpZ,EAAwB,GAAtB2rB,EAAE+iL,GAAG7vM,EAAEA,IAAImsI,GAAEgiF,GAAE,GAAGluN,EAAE3H,GAAK,IAAIw0B,EAAE,OAAOnZ,IAAIA,IAAI2tM,IAAIjB,GAAG1sM,GAAG3T,EAAEyyN,aAAa,KAAKzyN,EAAE2yN,iBAAiB,OAAO,CAAC,GAAG,OAAOh/M,EAAE,CAAC,GAAG3T,EAAE2yN,mBAAmB1yN,EAAE,OAAO0T,IAAI2tM,IAAIjB,GAAG1sM,GAAG,KAAK1T,GAAG0T,EAAE4+M,GAAG10N,KAAK,KAAKmC,GAAG,OAAOwhN,IAAIA,GAAG,CAAC7tM,GAAG8tM,GAAGrB,GAAGU,GAAGmB,KAAKT,GAAGhoN,KAAKma,GACrfA,EAAE2tM,IAAI,KAAKrhN,EAAE0T,EAAEouM,GAAG,GAAGwQ,GAAG10N,KAAK,KAAKmC,IAAa2T,EAAEouM,GAAVpuM,EAzK+F,SAAY3T,GAAG,OAAOA,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,QAAQ,MAAMa,MAAMuQ,EAAE,IAAIpR,KAyKxT4yN,CAAG3yN,GAAU4yN,GAAGh1N,KAAK,KAAKmC,IAAKA,EAAE2yN,iBAAiB1yN,EAAED,EAAEyyN,aAAa9+M,GAC5G,SAASk/M,GAAG7yN,GAAiB,GAAdgyN,IAAI,EAAEE,GAAGD,GAAG,EAAK,KAAO,GAAFpB,IAAM,MAAMhwN,MAAMuQ,EAAE,MAAM,IAAInR,EAAED,EAAEyyN,aAAa,GAAGK,MAAM9yN,EAAEyyN,eAAexyN,EAAE,OAAO,KAAK,IAAI0T,EAAEk8L,GAAG7vM,EAAEA,IAAImsI,GAAEgiF,GAAE,GAAG,GAAG,IAAIx6M,EAAE,OAAO,KAAK,IAAImZ,EAAEnZ,EAAMlb,EAAEo4N,GAAEA,IAAG,GAAG,IAAIl4N,EAAEo6N,KAAkC,IAA1B5mF,KAAInsI,GAAGmuN,KAAIrhM,IAAEukM,KAAK2B,GAAGhzN,EAAE8sB,MAAM,IAAImmM,KAAK,MAAM,MAAMjjN,GAAGkjN,GAAGlzN,EAAEgQ,GAAgE,GAApDwyM,KAAKmO,GAAGlyB,QAAQ9lM,EAAEk4N,GAAEp4N,EAAE,OAAOq4N,GAAEhkM,EAAE,GAAGq/G,GAAE,KAAKgiF,GAAE,EAAErhM,EAAEkhM,IAAM,KAAKkD,GAAGjD,IAAI+E,GAAGhzN,EAAE,QAAQ,GAAG,IAAI8sB,EAAE,CAAyF,GAAxF,IAAIA,IAAI+jM,IAAG,GAAG7wN,EAAE+tM,UAAU/tM,EAAE+tM,SAAQ,EAAG0Q,GAAGz+M,EAAEguM,gBAAwB,KAARr6L,EAAE08L,GAAGrwM,MAAW8sB,EAAEqmM,GAAGnzN,EAAE2T,KAAQ,IAAImZ,EAAE,MAAM7sB,EAAEgxN,GAAG+B,GAAGhzN,EAAE,GAAGkuN,GAAGluN,EAAE2T,GAAG6+M,GAAGxyN,EAAEq4I,MAAKp4I,EAC3c,OAD6cD,EAAEozN,aACrfpzN,EAAEy+L,QAAQqN,UAAU9rM,EAAEqzN,cAAc1/M,EAASmZ,GAAG,KAAK,EAAE,KAAK,EAAE,MAAMjsB,MAAMuQ,EAAE,MAAM,KAAK,EAAEkiN,GAAGtzN,GAAG,MAAM,KAAK,EAAU,GAARkuN,GAAGluN,EAAE2T,IAAS,SAAFA,KAAcA,GAAiB,IAAbmZ,EAAEwjM,GAAG,IAAIj4E,MAAU,CAAC,GAAG,IAAIw3D,GAAG7vM,EAAE,GAAG,MAAyB,KAAnBvH,EAAEuH,EAAEgwM,gBAAqBr8L,KAAKA,EAAE,CAAC6wM,KAAKxkN,EAAEiwM,aAAajwM,EAAEgwM,eAAev3M,EAAE,MAAMuH,EAAEuzN,cAAchV,GAAG+U,GAAGz1N,KAAK,KAAKmC,GAAG8sB,GAAG,MAAMwmM,GAAGtzN,GAAG,MAAM,KAAK,EAAU,GAARkuN,GAAGluN,EAAE2T,IAAS,QAAFA,KAAaA,EAAE,MAAqB,IAAfmZ,EAAE9sB,EAAE0wM,WAAej4M,GAAG,EAAE,EAAEkb,GAAG,CAAC,IAAI4G,EAAE,GAAG21L,GAAGv8L,GAAGhb,EAAE,GAAG4hB,GAAEA,EAAEuS,EAAEvS,IAAK9hB,IAAIA,EAAE8hB,GAAG5G,IAAIhb,EACjZ,GADmZgb,EAAElb,EAClZ,IAD4Zkb,GAAG,KAAXA,EAAE0kI,KAAI1kI,GAAW,IAAI,IAAIA,EAAE,IAAI,KAAKA,EAAE,KAAK,KAAKA,EAAE,KAAK,IAAIA,EAAE,IAAI,KAClfA,EAAE,KAAK,KAAK+8M,GAAG/8M,EAAE,OAAOA,GAAU,CAAC3T,EAAEuzN,cAAchV,GAAG+U,GAAGz1N,KAAK,KAAKmC,GAAG2T,GAAG,MAAM2/M,GAAGtzN,GAAG,MAAM,KAAK,EAAEszN,GAAGtzN,GAAG,MAAM,QAAQ,MAAMa,MAAMuQ,EAAE,OAAkB,OAAVohN,GAAGxyN,EAAEq4I,MAAYr4I,EAAEyyN,eAAexyN,EAAE4yN,GAAGh1N,KAAK,KAAKmC,GAAG,KAAK,SAASkuN,GAAGluN,EAAEC,GAAuD,IAApDA,IAAIkxN,GAAGlxN,IAAIguN,GAAGjuN,EAAEgwM,gBAAgB/vM,EAAED,EAAEiwM,cAAchwM,EAAMD,EAAEA,EAAE0yN,gBAAgB,EAAEzyN,GAAG,CAAC,IAAI0T,EAAE,GAAGu8L,GAAGjwM,GAAG6sB,EAAE,GAAGnZ,EAAE3T,EAAE2T,IAAI,EAAE1T,IAAI6sB,GAC1U,SAASylM,GAAGvyN,GAAG,GAAG,KAAO,GAAF6wN,IAAM,MAAMhwN,MAAMuQ,EAAE,MAAW,GAAL0hN,KAAQ9yN,IAAImsI,IAAG,KAAKnsI,EAAE+vM,aAAaoe,IAAG,CAAC,IAAIluN,EAAEkuN,GAAMx6M,EAAEw/M,GAAGnzN,EAAEC,GAAG,KAAKixN,GAAGjD,MAAgBt6M,EAAEw/M,GAAGnzN,EAAfC,EAAE4vM,GAAG7vM,EAAEC,UAA6B0T,EAAEw/M,GAAGnzN,EAAfC,EAAE4vM,GAAG7vM,EAAE,IAAgH,GAAnG,IAAIA,EAAEmkM,KAAK,IAAIxwL,IAAIk9M,IAAG,GAAG7wN,EAAE+tM,UAAU/tM,EAAE+tM,SAAQ,EAAG0Q,GAAGz+M,EAAEguM,gBAAwB,KAAR/tM,EAAEowM,GAAGrwM,MAAW2T,EAAEw/M,GAAGnzN,EAAEC,KAAQ,IAAI0T,EAAE,MAAMA,EAAEs9M,GAAG+B,GAAGhzN,EAAE,GAAGkuN,GAAGluN,EAAEC,GAAGuyN,GAAGxyN,EAAEq4I,MAAK1kI,EAAuE,OAArE3T,EAAEozN,aAAapzN,EAAEy+L,QAAQqN,UAAU9rM,EAAEqzN,cAAcpzN,EAAEqzN,GAAGtzN,GAAGwyN,GAAGxyN,EAAEq4I,MAAY,KACnR,SAASm7E,GAAGxzN,EAAEC,GAAG,IAAI0T,EAAEk9M,GAAEA,IAAG,EAAE,IAAI,OAAO7wN,EAAEC,GAAb,QAA4B,KAAJ4wN,GAAEl9M,KAAU09M,KAAKrP,OAAO,SAASyR,GAAGzzN,EAAEC,GAAG,IAAI0T,EAAEk9M,GAAEA,KAAI,EAAEA,IAAG,EAAE,IAAI,OAAO7wN,EAAEC,GAAb,QAA4B,KAAJ4wN,GAAEl9M,KAAU09M,KAAKrP,OAAO,SAAS+J,GAAG/rN,EAAEC,GAAGg4I,GAAE+4E,GAAGD,IAAIA,IAAI9wN,EAAEixN,IAAIjxN,EAAE,SAASouN,KAAK0C,GAAGC,GAAGvyB,QAAQC,GAAEsyB,IAC5V,SAASgC,GAAGhzN,EAAEC,GAAGD,EAAEozN,aAAa,KAAKpzN,EAAEqzN,cAAc,EAAE,IAAI1/M,EAAE3T,EAAEuzN,cAAiD,IAAlC,IAAI5/M,IAAI3T,EAAEuzN,eAAe,EAAE/U,GAAG7qM,IAAO,OAAOm9M,GAAE,IAAIn9M,EAAEm9M,GAAE/kB,OAAO,OAAOp4L,GAAG,CAAC,IAAImZ,EAAEnZ,EAAE,OAAOmZ,EAAEq3K,KAAK,KAAK,EAA6B,QAA3Br3K,EAAEA,EAAExR,KAAKjK,yBAA4B,IAASyb,GAAG6yL,KAAK,MAAM,KAAK,EAAEgH,KAAKjoB,GAAEO,IAAGP,GAAEM,IAAG4oB,KAAK,MAAM,KAAK,EAAEf,GAAG/5L,GAAG,MAAM,KAAK,EAAE65L,KAAK,MAAM,KAAK,GAAc,KAAK,GAAGjoB,GAAEpmD,IAAG,MAAM,KAAK,GAAGmqE,GAAG31L,GAAG,MAAM,KAAK,GAAG,KAAK,GAAGuhM,KAAK16M,EAAEA,EAAEo4L,OAAO5/D,GAAEnsI,EAAE8wN,GAAElL,GAAG5lN,EAAEy+L,QAAQ,MAAM0vB,GAAE4C,GAAGG,GAAGjxN,EAAE+tN,GAAE,EAAEiD,GAAG,KAAKE,GAAGlD,GAAG/J,GAAG,EACvc,SAASgP,GAAGlzN,EAAEC,GAAG,OAAE,CAAC,IAAI0T,EAAEm9M,GAAE,IAAuB,GAAnBtO,KAAKsF,GAAGrpB,QAAQgqB,GAAMR,GAAG,CAAC,IAAI,IAAIn7L,EAAEorH,GAAE+zD,cAAc,OAAOn/K,GAAG,CAAC,IAAIr0B,EAAEq0B,EAAE87L,MAAM,OAAOnwN,IAAIA,EAAE0jH,QAAQ,MAAMrvF,EAAEA,EAAE/zB,KAAKkvN,IAAG,EAAyC,GAAtCD,GAAG,EAAE5vE,GAAEL,GAAEG,GAAE,KAAKgwE,IAAG,EAAG0I,GAAGnyB,QAAQ,KAAQ,OAAO9qL,GAAG,OAAOA,EAAEo4L,OAAO,CAACiiB,GAAE,EAAEiD,GAAGhxN,EAAE6wN,GAAE,KAAK,MAAM9wN,EAAE,CAAC,IAAIrH,EAAEqH,EAAEua,EAAE5G,EAAEo4L,OAAO/7L,EAAE2D,EAAExS,EAAElB,EAAoD,GAAlDA,EAAEkuN,GAAEn+M,EAAE8D,OAAO,KAAK9D,EAAE21M,YAAY31M,EAAEy1M,WAAW,KAAQ,OAAOtkN,GAAG,kBAAkBA,GAAG,oBAAoBA,EAAE7J,KAAK,CAAC,IAAI+G,EAAE8C,EAAE,GAAG,KAAY,EAAP6O,EAAEgsD,MAAQ,CAAC,IAAIxjE,EAAEwX,EAAE87L,UAAUtzM,GAAGwX,EAAEozM,YAAY5qN,EAAE4qN,YAAYpzM,EAAEi8L,cAAczzM,EAAEyzM,cAAcj8L,EAAE8yM,MAAMtqN,EAAEsqN,QACpf9yM,EAAEozM,YAAY,KAAKpzM,EAAEi8L,cAAc,MAAM,IAAIn0D,EAAE,KAAe,EAAVQ,GAAEmmD,SAAW7yL,EAAE2O,EAAE,EAAE,CAAC,IAAI9M,EAAE,GAAGA,EAAE,KAAK7B,EAAEu4L,IAAI,CAAC,IAAIhzL,EAAEvF,EAAEqgM,cAAc,GAAG,OAAO96L,EAAE1D,EAAE,OAAO0D,EAAE+6L,eAAqB,CAAC,IAAIjjL,EAAErd,EAAEm7M,cAAct5M,OAAE,IAASwb,EAAEm5H,YAAY,IAAKn5H,EAAE4jM,6BAA8B/0E,IAAS,GAAGrqI,EAAE,CAAC,IAAIkkB,EAAE/lB,EAAEw3M,YAAY,GAAG,OAAOzxL,EAAE,CAAC,IAAIod,EAAE,IAAI8/F,IAAI9/F,EAAE3T,IAAI/8B,GAAGuN,EAAEw3M,YAAYr0K,OAAOpd,EAAEyJ,IAAI/8B,GAAG,GAAG,KAAY,EAAPuN,EAAEowD,MAAQ,CAA2C,GAA1CpwD,EAAEkI,OAAO,GAAG9D,EAAE8D,OAAO,MAAM9D,EAAE8D,QAAQ,KAAQ,IAAI9D,EAAEm0L,IAAI,GAAG,OAAOn0L,EAAE87L,UAAU97L,EAAEm0L,IAAI,OAAO,CAAC,IAAIr+K,EAAE69L,IAAI,EAAE,GAAG79L,EAAEq+K,IAAI,EAAE4f,GAAG/zM,EAAE8V,GAAG9V,EAAE8yM,OAAO,EAAE,MAAM9iN,EAAEmB,OAC5f,EAAO6O,EAAE/P,EAAE,IAAIkoB,EAAExvB,EAAE+6N,UAA+G,GAArG,OAAOvrM,GAAGA,EAAExvB,EAAE+6N,UAAU,IAAIjF,GAAGttN,EAAE,IAAI0tI,IAAI1mH,EAAElY,IAAI5R,EAAE8C,SAAgB,KAAXA,EAAEgnB,EAAE/xB,IAAIiI,MAAgB8C,EAAE,IAAI0tI,IAAI1mH,EAAElY,IAAI5R,EAAE8C,KAASA,EAAE0c,IAAI7N,GAAG,CAAC7O,EAAEi6B,IAAIprB,GAAG,IAAIqF,EAAEs+M,GAAG91N,KAAK,KAAKlF,EAAE0F,EAAE2R,GAAG3R,EAAE/G,KAAK+d,EAAEA,GAAGzJ,EAAEkI,OAAO,KAAKlI,EAAEk3M,MAAM7iN,EAAE,MAAMD,EAAE4L,EAAEA,EAAEmgM,aAAa,OAAOngM,GAAGzK,EAAEN,OAAOwjM,EAAGr0L,EAAEsL,OAAO,qBAAqB,yLAAyL,IAAI0yM,KAAIA,GAAE,GAAG7sN,EAAEotN,GAAGptN,EAAE6O,GAAGpE,EACpf2O,EAAE,EAAE,CAAC,OAAO3O,EAAEu4L,KAAK,KAAK,EAAExrM,EAAEwI,EAAEyK,EAAEkI,OAAO,KAAK7T,IAAIA,EAAE2L,EAAEk3M,OAAO7iN,EAAkB+jN,GAAGp4M,EAAb8iN,GAAG9iN,EAAEjT,EAAEsH,IAAW,MAAMD,EAAE,KAAK,EAAErH,EAAEwI,EAAE,IAAI+9L,EAAEtzL,EAAE0P,KAAK6jL,EAAEvzL,EAAE4+L,UAAU,GAAG,KAAa,GAAR5+L,EAAEkI,SAAY,oBAAoBorL,EAAElD,0BAA0B,OAAOmD,GAAG,oBAAoBA,EAAE2vB,oBAAoB,OAAOC,KAAKA,GAAGlxM,IAAIshL,KAAK,CAACvzL,EAAEkI,OAAO,KAAK7T,IAAIA,EAAE2L,EAAEk3M,OAAO7iN,EAAkB+jN,GAAGp4M,EAAbijN,GAAGjjN,EAAEjT,EAAEsH,IAAW,MAAMD,GAAG4L,EAAEA,EAAEmgM,aAAa,OAAOngM,GAAGgoN,GAAGjgN,GAAG,MAAM26B,GAAIruC,EAAEquC,EAAGwiL,KAAIn9M,GAAG,OAAOA,IAAIm9M,GAAEn9M,EAAEA,EAAEo4L,QAAQ,SAAS,OAC/a,SAASgnB,KAAK,IAAI/yN,EAAE2wN,GAAGlyB,QAAsB,OAAdkyB,GAAGlyB,QAAQgqB,GAAU,OAAOzoN,EAAEyoN,GAAGzoN,EAAE,SAASmzN,GAAGnzN,EAAEC,GAAG,IAAI0T,EAAEk9M,GAAEA,IAAG,GAAG,IAAI/jM,EAAEimM,KAA2B,IAAtB5mF,KAAInsI,GAAGmuN,KAAIluN,GAAG+yN,GAAGhzN,EAAEC,KAAM,IAAI4zN,KAAK,MAAM,MAAMp7N,GAAGy6N,GAAGlzN,EAAEvH,GAAkC,GAAtB+pN,KAAKqO,GAAEl9M,EAAEg9M,GAAGlyB,QAAQ3xK,EAAK,OAAOgkM,GAAE,MAAMjwN,MAAMuQ,EAAE,MAAiB,OAAX+6H,GAAE,KAAKgiF,GAAE,EAASH,GAAE,SAAS6F,KAAK,KAAK,OAAO/C,IAAGgD,GAAGhD,IAAG,SAASmC,KAAK,KAAK,OAAOnC,KAAIvQ,MAAMuT,GAAGhD,IAAG,SAASgD,GAAG9zN,GAAG,IAAIC,EAAEqxN,GAAGtxN,EAAE8rM,UAAU9rM,EAAE+wN,IAAI/wN,EAAE+mN,cAAc/mN,EAAEunN,aAAa,OAAOtnN,EAAE2zN,GAAG5zN,GAAG8wN,GAAE7wN,EAAE2wN,GAAGnyB,QAAQ,KAC5a,SAASm1B,GAAG5zN,GAAG,IAAIC,EAAED,EAAE,EAAE,CAAC,IAAI2T,EAAE1T,EAAE6rM,UAAqB,GAAX9rM,EAAEC,EAAE8rM,OAAU,KAAa,KAAR9rM,EAAE6T,OAAY,CAAc,GAAG,QAAhBH,EAAEg6M,GAAGh6M,EAAE1T,EAAE8wN,KAAqB,YAAJD,GAAEn9M,GAAa,GAAG,MAAPA,EAAE1T,GAAYkkM,KAAK,KAAKxwL,EAAEwwL,KAAK,OAAOxwL,EAAEs4L,eAAe,KAAQ,WAAH8kB,KAAgB,KAAY,EAAPp9M,EAAEqoD,MAAQ,CAAC,IAAI,IAAIlvC,EAAE,EAAEr0B,EAAEkb,EAAEtW,MAAM,OAAO5E,GAAGq0B,GAAGr0B,EAAEqqN,MAAMrqN,EAAEkqN,WAAWlqN,EAAEA,EAAE2zM,QAAQz4L,EAAEgvM,WAAW71L,EAAE,OAAO9sB,GAAG,KAAa,KAARA,EAAE8T,SAAc,OAAO9T,EAAE2lN,cAAc3lN,EAAE2lN,YAAY1lN,EAAE0lN,aAAa,OAAO1lN,EAAEwlN,aAAa,OAAOzlN,EAAEylN,aAAazlN,EAAEylN,WAAWC,WAAWzlN,EAAE0lN,aAAa3lN,EAAEylN,WAAWxlN,EAAEwlN,YAAY,EAAExlN,EAAE6T,QAAQ,OAC/e9T,EAAEylN,WAAWzlN,EAAEylN,WAAWC,WAAWzlN,EAAED,EAAE2lN,YAAY1lN,EAAED,EAAEylN,WAAWxlN,QAAQ,CAAS,GAAG,QAAX0T,EAAE26M,GAAGruN,IAAkC,OAAlB0T,EAAEG,OAAO,UAAKg9M,GAAEn9M,GAAS,OAAO3T,IAAIA,EAAE2lN,YAAY3lN,EAAEylN,WAAW,KAAKzlN,EAAE8T,OAAO,MAAkB,GAAG,QAAf7T,EAAEA,EAAEmsM,SAAyB,YAAJ0kB,GAAE7wN,GAAS6wN,GAAE7wN,EAAED,QAAQ,OAAOC,GAAG,IAAI+tN,KAAIA,GAAE,GAAG,SAASsF,GAAGtzN,GAAG,IAAIC,EAAE2hN,KAA8B,OAAzBE,GAAG,GAAGiS,GAAGl2N,KAAK,KAAKmC,EAAEC,IAAW,KACtT,SAAS8zN,GAAG/zN,EAAEC,GAAG,GAAG6yN,WAAW,OAAOrB,IAAI,GAAG,KAAO,GAAFZ,IAAM,MAAMhwN,MAAMuQ,EAAE,MAAM,IAAIuC,EAAE3T,EAAEozN,aAAa,GAAG,OAAOz/M,EAAE,OAAO,KAA2C,GAAtC3T,EAAEozN,aAAa,KAAKpzN,EAAEqzN,cAAc,EAAK1/M,IAAI3T,EAAEy+L,QAAQ,MAAM59L,MAAMuQ,EAAE,MAAMpR,EAAEyyN,aAAa,KAAK,IAAI3lM,EAAEnZ,EAAEmvM,MAAMnvM,EAAEgvM,WAAWlqN,EAAEq0B,EAAEn0B,EAAEqH,EAAE8vM,cAAcr3M,EAAEuH,EAAE8vM,aAAar3M,EAAEuH,EAAEgwM,eAAe,EAAEhwM,EAAEiwM,YAAY,EAAEjwM,EAAE+vM,cAAct3M,EAAEuH,EAAEypN,kBAAkBhxN,EAAEuH,EAAEmwM,gBAAgB13M,EAAEA,EAAEuH,EAAEowM,cAAc,IAAI,IAAI71L,EAAEva,EAAE0wM,WAAW1gM,EAAEhQ,EAAE0yN,gBAAgB,EAAE/5N,GAAG,CAAC,IAAIwI,EAAE,GAAG+uM,GAAGv3M,GAAG0F,EAAE,GAAG8C,EAAE1I,EAAE0I,GAAG,EAAEoZ,EAAEpZ,IAAI,EAAE6O,EAAE7O,IAAI,EAAExI,IAAI0F,EACnV,GADqV,OACjfwzN,IAAI,KAAO,GAAF/kM,IAAO+kM,GAAGh0M,IAAI7d,IAAI6xN,GAAGppK,OAAOzoD,GAAGA,IAAImsI,KAAI2kF,GAAE3kF,GAAE,KAAKgiF,GAAE,GAAG,EAAEx6M,EAAEG,MAAM,OAAOH,EAAE8xM,YAAY9xM,EAAE8xM,WAAWC,WAAW/xM,EAAEmZ,EAAEnZ,EAAEgyM,aAAa74L,EAAEnZ,EAAEmZ,EAAEnZ,EAAEgyM,YAAe,OAAO74L,EAAE,CAAwC,GAAvCr0B,EAAEo4N,GAAEA,IAAG,GAAGD,GAAGnyB,QAAQ,KAAKyf,GAAGnN,GAAakL,GAAV1hM,EAAEuhM,MAAc,CAAC,GAAG,mBAAmBvhM,EAAEvK,EAAE,CAAC+7B,MAAMxxB,EAAEkiM,eAAengN,IAAIie,EAAEmiM,mBAAmB18M,EAAE,GAAGgQ,GAAGA,EAAEuK,EAAEgrL,gBAAgBv1L,EAAE4sM,aAAal9M,QAAQrB,EAAE2R,EAAE6sM,cAAc7sM,EAAE6sM,iBAAiB,IAAIx+M,EAAEk5F,WAAW,CAACvnF,EAAE3R,EAAEs+M,WAAWhkN,EAAE0F,EAAEy+M,aAAa37M,EAAE9C,EAAE0+M,UAAU1+M,EAAEA,EAAE2+M,YAAY,IAAIhtM,EAAEmzI,SAAShiJ,EAAEgiJ,SAAS,MAAM70G,GAAIt+B,EAAE,KACnf,MAAMhQ,EAAE,IAAIxH,EAAE,EAAEs/I,GAAG,EAAElsI,GAAG,EAAE6B,EAAE,EAAE0D,EAAE,EAAE8X,EAAE1O,EAAEoX,EAAE,KAAK1xB,EAAE,OAAO,CAAC,IAAI,IAAI8uC,EAAK9lB,IAAIjZ,GAAG,IAAIrX,GAAG,IAAIswB,EAAEk6H,WAAWrL,EAAEt/I,EAAEG,GAAGswB,IAAI9nB,GAAG,IAAI9C,GAAG,IAAI4qB,EAAEk6H,WAAWv3I,EAAEpT,EAAE6F,GAAG,IAAI4qB,EAAEk6H,WAAW3qJ,GAAGywB,EAAE09K,UAAU9yM,QAAW,QAAQk7C,EAAE9lB,EAAEq9K,aAAkB30K,EAAE1I,EAAEA,EAAE8lB,EAAE,OAAO,CAAC,GAAG9lB,IAAI1O,EAAE,MAAMta,EAA8C,GAA5C0xB,IAAI3hB,KAAKvC,IAAI9U,IAAIm/I,EAAEt/I,GAAGm5B,IAAIxwB,KAAKgQ,IAAI9S,IAAIuN,EAAEpT,GAAM,QAAQu2C,EAAE9lB,EAAE0yL,aAAa,MAAUhqL,GAAJ1I,EAAE0I,GAAM4pH,WAAWtyH,EAAE8lB,EAAE/+B,GAAG,IAAI8nI,IAAI,IAAIlsI,EAAE,KAAK,CAACmgC,MAAM+rG,EAAEx7I,IAAIsP,QAAQoE,EAAE,KAAKA,EAAEA,GAAG,CAAC+7B,MAAM,EAAEzvC,IAAI,QAAQ0T,EAAE,KAAK46J,GAAG,CAACopD,YAAYz5M,EAAE05M,eAAejkN,GAAG+gM,IAAG,EAAGohB,GAAG,KAAKC,IAAG,EAAGb,GAAEzkM,EAAE,GAAG,IAAIonM,KAAK,MAAM5lL,GAAI,GAAG,OACvgBijL,GAAE,MAAM1wN,MAAMuQ,EAAE,MAAMg+M,GAAGmC,GAAEjjL,GAAIijL,GAAEA,GAAE7L,kBAAiB,OAAO6L,IAAGY,GAAG,KAAKZ,GAAEzkM,EAAE,GAAG,IAAI,IAAIvS,EAAEva,EAAE,OAAOuxN,IAAG,CAAC,IAAIzrM,EAAEyrM,GAAEz9M,MAA+B,GAAvB,GAAFgS,GAAM2gL,GAAG8qB,GAAE/mB,UAAU,IAAS,IAAF1kL,EAAM,CAAC,IAAIqC,EAAEopM,GAAEzlB,UAAU,GAAG,OAAO3jL,EAAE,CAAC,IAAI9S,EAAE8S,EAAEs5G,IAAI,OAAOpsH,IAAI,oBAAoBA,EAAEA,EAAE,MAAMA,EAAEopL,QAAQ,OAAO,OAAS,KAAF34K,GAAQ,KAAK,EAAEkqM,GAAGuB,IAAGA,GAAEz9M,QAAQ,EAAE,MAAM,KAAK,EAAEk8M,GAAGuB,IAAGA,GAAEz9M,QAAQ,EAAEu8M,GAAGkB,GAAEzlB,UAAUylB,IAAG,MAAM,KAAK,KAAKA,GAAEz9M,QAAQ,KAAK,MAAM,KAAK,KAAKy9M,GAAEz9M,QAAQ,KAAKu8M,GAAGkB,GAAEzlB,UAAUylB,IAAG,MAAM,KAAK,EAAElB,GAAGkB,GAAEzlB,UAAUylB,IAAG,MAAM,KAAK,EAAM1B,GAAGt1M,EAAPvK,EAAEuhN,IAAU,IAAI1yB,EAAE7uL,EAAE87L,UAAUgkB,GAAG9/M,GAAG,OACnf6uL,GAAGixB,GAAGjxB,GAAG0yB,GAAEA,GAAE7L,YAAY,MAAMp3K,GAAI,GAAG,OAAOijL,GAAE,MAAM1wN,MAAMuQ,EAAE,MAAMg+M,GAAGmC,GAAEjjL,GAAIijL,GAAEA,GAAE7L,kBAAiB,OAAO6L,IAAkD,GAA/Cl8M,EAAEu1J,GAAGziJ,EAAE2zL,KAAKh2L,EAAEzQ,EAAE2+M,YAAYz5M,EAAElF,EAAE4+M,eAAkB9rM,IAAIrC,GAAGA,GAAGA,EAAEy/K,eAAeqW,GAAG91L,EAAEy/K,cAAc3vB,gBAAgB9vJ,GAAG,CAAC,OAAOvL,GAAG0hM,GAAGn2L,KAAKqC,EAAE5N,EAAEwxB,WAAc,KAAR12B,EAAEkF,EAAEje,OAAiB+Y,EAAE8S,GAAG,mBAAmBrC,GAAGA,EAAE22L,eAAet0L,EAAErC,EAAE42L,aAAav2M,KAAKiE,IAAIiL,EAAEyQ,EAAEhxB,MAAMjB,UAAUwhB,GAAG8S,EAAErC,EAAEy/K,eAAe5lM,WAAWwoB,EAAEy0L,aAAal9M,QAASm9M,eAAexnM,EAAEA,EAAEwnM,eAAe7sM,EAAE8V,EAAEm/J,YAAYpxL,OAAOgrM,EAAE14L,KAAKiE,IAAImQ,EAAEwxB,MAAM/7B,GAAGuK,OAAE,IACpfA,EAAEje,IAAIuiM,EAAE14L,KAAKiE,IAAImQ,EAAEje,IAAI0T,IAAIqF,EAAEtV,QAAQ8+L,EAAEtkL,IAAIvK,EAAEuK,EAAEA,EAAEskL,EAAEA,EAAE7uL,GAAGA,EAAE0rM,GAAG51L,EAAE+4K,GAAGlmM,EAAE+iN,GAAG51L,EAAEvL,GAAGvK,GAAGrX,IAAI,IAAI0c,EAAEkiF,YAAYliF,EAAEsnM,aAAa3sM,EAAE4kG,MAAMv/F,EAAEynM,eAAe9sM,EAAE8C,QAAQuC,EAAE0nM,YAAYpkN,EAAEi8G,MAAMv/F,EAAE2nM,cAAcrkN,EAAEma,WAAUqV,EAAEA,EAAEgsM,eAAgBC,SAASpkN,EAAE4kG,KAAK5kG,EAAE8C,QAAQuC,EAAEg/M,kBAAkBx1B,EAAEtkL,GAAGlF,EAAEi/M,SAASnsM,GAAG9S,EAAEtV,OAAOpH,EAAEi8G,KAAKj8G,EAAEma,UAAUqV,EAAEosM,OAAO57N,EAAEi8G,KAAKj8G,EAAEma,QAAQuC,EAAEi/M,SAASnsM,OAAQA,EAAE,GAAG,IAAI9S,EAAEyQ,EAAEzQ,EAAEA,EAAEkmI,YAAY,IAAIlmI,EAAE8tI,UAAUh7H,EAAE3uB,KAAK,CAAC8D,QAAQ+X,EAAEiwB,KAAKjwB,EAAEm/M,WAAWhvL,IAAInwB,EAAEo/M,YAAmD,IAAvC,oBAAoB3uM,EAAE88B,OAAO98B,EAAE88B,QAAY98B,EACrf,EAAEA,EAAEqC,EAAEt0B,OAAOiyB,KAAIzQ,EAAE8S,EAAErC,IAAKxoB,QAAQk3N,WAAWn/M,EAAEiwB,KAAKjwB,EAAE/X,QAAQm3N,UAAUp/M,EAAEmwB,IAAIurK,KAAKmN,GAAGtzC,GAAGszC,GAAG,KAAKl+M,EAAEy+L,QAAQ9qL,EAAE49M,GAAEzkM,EAAE,GAAG,IAAI,IAAIhH,EAAE9lB,EAAE,OAAOuxN,IAAG,CAAC,IAAIryB,EAAEqyB,GAAEz9M,MAAgC,GAAxB,GAAForL,GAAMqwB,GAAGzpM,EAAEyrM,GAAEzlB,UAAUylB,IAAQ,IAAFryB,EAAM,CAAC/2K,OAAE,EAAO,IAAIg3K,EAAEoyB,GAAE9vF,IAAI,GAAG,OAAO09D,EAAE,CAAC,IAAInnD,EAAEu5E,GAAE/mB,UAAU,OAAO+mB,GAAEptB,KAAK,KAAK,EAAEh8K,EAAE6vH,EAAE,MAAM,QAAQ7vH,EAAE6vH,EAAE,oBAAoBmnD,EAAEA,EAAEh3K,GAAGg3K,EAAEV,QAAQt2K,GAAGopM,GAAEA,GAAE7L,YAAY,MAAMp3K,GAAI,GAAG,OAAOijL,GAAE,MAAM1wN,MAAMuQ,EAAE,MAAMg+M,GAAGmC,GAAEjjL,GAAIijL,GAAEA,GAAE7L,kBAAiB,OAAO6L,IAAGA,GAAE,KAAKhQ,KAAKsP,GAAEp4N,OAAOuH,EAAEy+L,QAAQ9qL,EAAE,GAAG69M,GAAGA,IAAG,EAAGC,GAAGzxN,EAAE0xN,GAAGzxN,OAAO,IAAIsxN,GAAEzkM,EAAE,OAAOykM,IAAGtxN,EACpfsxN,GAAE7L,WAAW6L,GAAE7L,WAAW,KAAa,EAAR6L,GAAEz9M,SAAUorL,EAAEqyB,IAAInlB,QAAQ,KAAKlN,EAAEsL,UAAU,MAAM+mB,GAAEtxN,EAAqF,GAAlE,KAAjB6sB,EAAE9sB,EAAE8vM,gBAAqBif,GAAG,MAAM,IAAIjiM,EAAE9sB,IAAI+xN,GAAGD,MAAMA,GAAG,EAAEC,GAAG/xN,GAAG8xN,GAAG,EAAEn+M,EAAEA,EAAE62L,UAAa0V,IAAI,oBAAoBA,GAAGwU,kBAAkB,IAAIxU,GAAGwU,kBAAkBzU,GAAGtsM,OAAE,EAAO,MAAsB,GAAhBA,EAAE8qL,QAAQ3qL,QAAW,MAAMw6B,IAAe,GAAVkkL,GAAGxyN,EAAEq4I,MAAQs2E,GAAG,MAAMA,IAAG,EAAG3uN,EAAE4uN,GAAGA,GAAG,KAAK5uN,EAAE,OAAG,KAAO,EAAF6wN,KAAiB7O,KAAL,KACjW,SAASkS,KAAK,KAAK,OAAO3C,IAAG,CAAC,IAAIvxN,EAAEuxN,GAAEzlB,UAAUsmB,IAAI,OAAOD,KAAK,KAAa,EAARZ,GAAEz9M,OAASu4L,GAAGklB,GAAEY,MAAMC,IAAG,GAAI,KAAKb,GAAEptB,KAAKssB,GAAGzwN,EAAEuxN,KAAIllB,GAAGklB,GAAEY,MAAMC,IAAG,IAAK,IAAInyN,EAAEsxN,GAAEz9M,MAAM,KAAO,IAAF7T,IAAQovN,GAAGrvN,EAAEuxN,IAAG,KAAO,IAAFtxN,IAAQuxN,KAAKA,IAAG,EAAGzP,GAAG,IAAG,WAAgB,OAAL+Q,KAAY,SAAQvB,GAAEA,GAAE7L,YAAY,SAASoN,KAAK,GAAG,KAAKpB,GAAG,CAAC,IAAI1xN,EAAE,GAAG0xN,GAAG,GAAGA,GAAS,OAANA,GAAG,GAAU5P,GAAG9hN,EAAE20N,IAAI,OAAM,EAAG,SAASlF,GAAGzvN,EAAEC,GAAG0xN,GAAGn4N,KAAKyG,EAAED,GAAGwxN,KAAKA,IAAG,EAAGzP,GAAG,IAAG,WAAgB,OAAL+Q,KAAY,SAAQ,SAAStD,GAAGxvN,EAAEC,GAAG2xN,GAAGp4N,KAAKyG,EAAED,GAAGwxN,KAAKA,IAAG,EAAGzP,GAAG,IAAG,WAAgB,OAAL+Q,KAAY,SACzd,SAAS6B,KAAK,GAAG,OAAOlD,GAAG,OAAM,EAAG,IAAIzxN,EAAEyxN,GAAW,GAARA,GAAG,KAAQ,KAAO,GAAFZ,IAAM,MAAMhwN,MAAMuQ,EAAE,MAAM,IAAInR,EAAE4wN,GAAEA,IAAG,GAAG,IAAIl9M,EAAEi+M,GAAGA,GAAG,GAAG,IAAI,IAAI9kM,EAAE,EAAEA,EAAEnZ,EAAE9f,OAAOi5B,GAAG,EAAE,CAAC,IAAIr0B,EAAEkb,EAAEmZ,GAAGn0B,EAAEgb,EAAEmZ,EAAE,GAAGvS,EAAE9hB,EAAEm4E,QAAyB,GAAjBn4E,EAAEm4E,aAAQ,EAAU,oBAAoBr2D,EAAE,IAAIA,IAAI,MAAMpZ,GAAG,GAAG,OAAOxI,EAAE,MAAMkI,MAAMuQ,EAAE,MAAMg+M,GAAGz2N,EAAEwI,IAAe,IAAXwS,EAAEg+M,GAAGA,GAAG,GAAO7kM,EAAE,EAAEA,EAAEnZ,EAAE9f,OAAOi5B,GAAG,EAAE,CAACr0B,EAAEkb,EAAEmZ,GAAGn0B,EAAEgb,EAAEmZ,EAAE,GAAG,IAAI,IAAI9c,EAAEvX,EAAE7D,OAAO6D,EAAEm4E,QAAQ5gE,IAAI,MAAM7O,GAAG,GAAG,OAAOxI,EAAE,MAAMkI,MAAMuQ,EAAE,MAAMg+M,GAAGz2N,EAAEwI,IAAI,IAAI6O,EAAEhQ,EAAEy+L,QAAQknB,YAAY,OAAO31M,GAAGhQ,EAAEgQ,EAAE01M,WAAW11M,EAAE01M,WAAW,KAAa,EAAR11M,EAAE8D,QAAU9D,EAAEo8L,QACjf,KAAKp8L,EAAEw6L,UAAU,MAAMx6L,EAAEhQ,EAAW,OAAT6wN,GAAE5wN,EAAE+hN,MAAW,EAAG,SAAS4S,GAAG50N,EAAEC,EAAE0T,GAAyBowM,GAAG/jN,EAAfC,EAAEyuN,GAAG1uN,EAAfC,EAAEsuN,GAAG56M,EAAE1T,GAAY,IAAWA,EAAEukN,KAAe,QAAVxkN,EAAEsyN,GAAGtyN,EAAE,MAAcywM,GAAGzwM,EAAE,EAAEC,GAAGuyN,GAAGxyN,EAAEC,IACzI,SAASmvN,GAAGpvN,EAAEC,GAAG,GAAG,IAAID,EAAEmkM,IAAIywB,GAAG50N,EAAEA,EAAEC,QAAQ,IAAI,IAAI0T,EAAE3T,EAAE+rM,OAAO,OAAOp4L,GAAG,CAAC,GAAG,IAAIA,EAAEwwL,IAAI,CAACywB,GAAGjhN,EAAE3T,EAAEC,GAAG,MAAW,GAAG,IAAI0T,EAAEwwL,IAAI,CAAC,IAAIr3K,EAAEnZ,EAAE62L,UAAU,GAAG,oBAAoB72L,EAAE2H,KAAK0gL,0BAA0B,oBAAoBlvK,EAAEgiM,oBAAoB,OAAOC,KAAKA,GAAGlxM,IAAIiP,IAAI,CAAW,IAAIr0B,EAAEo2N,GAAGl7M,EAAnB3T,EAAEuuN,GAAGtuN,EAAED,GAAgB,GAA4B,GAAzB+jN,GAAGpwM,EAAElb,GAAGA,EAAE+rN,KAAkB,QAAb7wM,EAAE2+M,GAAG3+M,EAAE,IAAe88L,GAAG98L,EAAE,EAAElb,GAAG+5N,GAAG7+M,EAAElb,QAAQ,GAAG,oBAAoBq0B,EAAEgiM,oBAAoB,OAAOC,KAAKA,GAAGlxM,IAAIiP,IAAI,IAAIA,EAAEgiM,kBAAkB7uN,EAAED,GAAG,MAAMrH,IAAI,OAAOgb,EAAEA,EAAEo4L,QACpd,SAAS4nB,GAAG3zN,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE9sB,EAAE0zN,UAAU,OAAO5mM,GAAGA,EAAE27B,OAAOxoD,GAAGA,EAAEukN,KAAKxkN,EAAEiwM,aAAajwM,EAAEgwM,eAAer8L,EAAEw4H,KAAInsI,IAAImuN,GAAEx6M,KAAKA,IAAI,IAAIq6M,IAAG,IAAIA,KAAM,SAAFG,MAAcA,IAAG,IAAI91E,KAAIi4E,GAAG0C,GAAGhzN,EAAE,GAAGmxN,IAAIx9M,GAAG6+M,GAAGxyN,EAAEC,GAAG,SAASuwN,GAAGxwN,EAAEC,GAAG,IAAI0T,EAAE3T,EAAEwqM,UAAU,OAAO72L,GAAGA,EAAE80C,OAAOxoD,GAAO,KAAJA,EAAE,KAAmB,KAAO,GAAhBA,EAAED,EAAEg8D,OAAe/7D,EAAE,EAAE,KAAO,EAAFA,GAAKA,EAAE,KAAK2hN,KAAK,EAAE,GAAG,IAAIqQ,KAAKA,GAAGf,IAAuB,KAAnBjxN,EAAEswM,GAAG,UAAU0hB,OAAYhyN,EAAE,WAAW0T,EAAE6wM,KAAe,QAAVxkN,EAAEsyN,GAAGtyN,EAAEC,MAAcwwM,GAAGzwM,EAAEC,EAAE0T,GAAG6+M,GAAGxyN,EAAE2T,IAUjZ,SAASkhN,GAAG70N,EAAEC,EAAE0T,EAAEmZ,GAAGz3B,KAAK8uM,IAAInkM,EAAE3K,KAAKjB,IAAIuf,EAAEte,KAAK+2M,QAAQ/2M,KAAKgI,MAAMhI,KAAK02M,OAAO12M,KAAKm1M,UAAUn1M,KAAKimB,KAAKjmB,KAAKywN,YAAY,KAAKzwN,KAAK6L,MAAM,EAAE7L,KAAKosI,IAAI,KAAKpsI,KAAKkyN,aAAatnN,EAAE5K,KAAK2rI,aAAa3rI,KAAK42M,cAAc52M,KAAK+tN,YAAY/tN,KAAK0xN,cAAc,KAAK1xN,KAAK2mE,KAAKlvC,EAAEz3B,KAAKye,MAAM,EAAEze,KAAKowN,WAAWpwN,KAAKswN,YAAYtwN,KAAKqwN,WAAW,KAAKrwN,KAAKstN,WAAWttN,KAAKytN,MAAM,EAAEztN,KAAKy2M,UAAU,KAAK,SAASub,GAAGrnN,EAAEC,EAAE0T,EAAEmZ,GAAG,OAAO,IAAI+nM,GAAG70N,EAAEC,EAAE0T,EAAEmZ,GAAG,SAAS6+L,GAAG3rN,GAAiB,UAAdA,EAAEA,EAAExL,aAAuBwL,EAAEs+L,kBAErd,SAASsnB,GAAG5lN,EAAEC,GAAG,IAAI0T,EAAE3T,EAAE8rM,UACuB,OADb,OAAOn4L,IAAGA,EAAE0zM,GAAGrnN,EAAEmkM,IAAIlkM,EAAED,EAAE5L,IAAI4L,EAAEg8D,OAAQ8pJ,YAAY9lN,EAAE8lN,YAAYnyM,EAAE2H,KAAKtb,EAAEsb,KAAK3H,EAAE62L,UAAUxqM,EAAEwqM,UAAU72L,EAAEm4L,UAAU9rM,EAAEA,EAAE8rM,UAAUn4L,IAAIA,EAAE4zM,aAAatnN,EAAE0T,EAAE2H,KAAKtb,EAAEsb,KAAK3H,EAAEG,MAAM,EAAEH,EAAE+xM,WAAW,KAAK/xM,EAAEgyM,YAAY,KAAKhyM,EAAE8xM,WAAW,MAAM9xM,EAAEgvM,WAAW3iN,EAAE2iN,WAAWhvM,EAAEmvM,MAAM9iN,EAAE8iN,MAAMnvM,EAAEtW,MAAM2C,EAAE3C,MAAMsW,EAAEozM,cAAc/mN,EAAE+mN,cAAcpzM,EAAEs4L,cAAcjsM,EAAEisM,cAAct4L,EAAEyvM,YAAYpjN,EAAEojN,YAAYnjN,EAAED,EAAEghI,aAAartH,EAAEqtH,aAAa,OAAO/gI,EAAE,KAAK,CAAC6iN,MAAM7iN,EAAE6iN,MAAMD,aAAa5iN,EAAE4iN,cAC3elvM,EAAEy4L,QAAQpsM,EAAEosM,QAAQz4L,EAAEzS,MAAMlB,EAAEkB,MAAMyS,EAAE8tH,IAAIzhI,EAAEyhI,IAAW9tH,EACvD,SAASoyM,GAAG/lN,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,EAAEE,GAAG,IAAI4hB,EAAE,EAAM,GAAJuS,EAAE9sB,EAAK,oBAAoBA,EAAE2rN,GAAG3rN,KAAKua,EAAE,QAAQ,GAAG,kBAAkBva,EAAEua,EAAE,OAAOva,EAAE,OAAOA,GAAG,KAAKoF,EAAG,OAAO8gN,GAAGvyM,EAAEvY,SAAS3C,EAAEE,EAAEsH,GAAG,KAAKsjM,EAAGhpL,EAAE,EAAE9hB,GAAG,GAAG,MAAM,KAAKmqM,EAAGroL,EAAE,EAAE9hB,GAAG,EAAE,MAAM,KAAKoqM,EAAG,OAAO7iM,EAAEqnN,GAAG,GAAG1zM,EAAE1T,EAAI,EAAFxH,IAAOqtN,YAAYjjB,EAAG7iM,EAAEsb,KAAKunL,EAAG7iM,EAAE8iN,MAAMnqN,EAAEqH,EAAE,KAAKijM,EAAG,OAAOjjM,EAAEqnN,GAAG,GAAG1zM,EAAE1T,EAAExH,IAAK6iB,KAAK2nL,EAAGjjM,EAAE8lN,YAAY7iB,EAAGjjM,EAAE8iN,MAAMnqN,EAAEqH,EAAE,KAAKkjM,EAAG,OAAOljM,EAAEqnN,GAAG,GAAG1zM,EAAE1T,EAAExH,IAAKqtN,YAAY5iB,EAAGljM,EAAE8iN,MAAMnqN,EAAEqH,EAAE,KAAKwjM,EAAG,OAAOwpB,GAAGr5M,EAAElb,EAAEE,EAAEsH,GAAG,KAAKwjM,EAAG,OAAOzjM,EAAEqnN,GAAG,GAAG1zM,EAAE1T,EAAExH,IAAKqtN,YAAYriB,EAAGzjM,EAAE8iN,MAAMnqN,EAAEqH,EAAE,QAAQ,GAAG,kBAChfA,GAAG,OAAOA,EAAE,OAAOA,EAAE8+L,UAAU,KAAKgE,EAAGvoL,EAAE,GAAG,MAAMva,EAAE,KAAK+iM,EAAGxoL,EAAE,EAAE,MAAMva,EAAE,KAAKgjM,EAAGzoL,EAAE,GAAG,MAAMva,EAAE,KAAKmjM,EAAG5oL,EAAE,GAAG,MAAMva,EAAE,KAAKojM,EAAG7oL,EAAE,GAAGuS,EAAE,KAAK,MAAM9sB,EAAE,KAAKqjM,EAAG9oL,EAAE,GAAG,MAAMva,EAAE,MAAMa,MAAMuQ,EAAE,IAAI,MAAMpR,EAAEA,SAASA,EAAE,KAAuD,OAAjDC,EAAEonN,GAAG9sM,EAAE5G,EAAE1T,EAAExH,IAAKqtN,YAAY9lN,EAAEC,EAAEqb,KAAKwR,EAAE7sB,EAAE6iN,MAAMnqN,EAASsH,EAAE,SAASimN,GAAGlmN,EAAEC,EAAE0T,EAAEmZ,GAA2B,OAAxB9sB,EAAEqnN,GAAG,EAAErnN,EAAE8sB,EAAE7sB,IAAK6iN,MAAMnvM,EAAS3T,EAAE,SAASgtN,GAAGhtN,EAAEC,EAAE0T,EAAEmZ,GAA6C,OAA1C9sB,EAAEqnN,GAAG,GAAGrnN,EAAE8sB,EAAE7sB,IAAK6lN,YAAYtiB,EAAGxjM,EAAE8iN,MAAMnvM,EAAS3T,EAAE,SAAS6lN,GAAG7lN,EAAEC,EAAE0T,GAA8B,OAA3B3T,EAAEqnN,GAAG,EAAErnN,EAAE,KAAKC,IAAK6iN,MAAMnvM,EAAS3T,EAClc,SAASimN,GAAGjmN,EAAEC,EAAE0T,GAA8J,OAA3J1T,EAAEonN,GAAG,EAAE,OAAOrnN,EAAE5E,SAAS4E,EAAE5E,SAAS,GAAG4E,EAAE5L,IAAI6L,IAAK6iN,MAAMnvM,EAAE1T,EAAEuqM,UAAU,CAACwD,cAAchuM,EAAEguM,cAAc8mB,gBAAgB,KAAK9O,eAAehmN,EAAEgmN,gBAAuB/lN,EACrL,SAAS80N,GAAG/0N,EAAEC,EAAE0T,GAAGte,KAAK8uM,IAAIlkM,EAAE5K,KAAK24M,cAAchuM,EAAE3K,KAAK+9N,aAAa/9N,KAAKq+N,UAAUr+N,KAAKopM,QAAQppM,KAAKy/N,gBAAgB,KAAKz/N,KAAKk+N,eAAe,EAAEl+N,KAAKk3N,eAAel3N,KAAKyE,QAAQ,KAAKzE,KAAK04M,QAAQp6L,EAAEte,KAAKo9N,aAAa,KAAKp9N,KAAKs9N,iBAAiB,EAAEt9N,KAAKq7M,WAAWF,GAAG,GAAGn7M,KAAKq9N,gBAAgBliB,IAAI,GAAGn7M,KAAK86M,eAAe96M,KAAKg+N,cAAch+N,KAAKo0N,iBAAiBp0N,KAAK06M,aAAa16M,KAAK46M,YAAY56M,KAAK26M,eAAe36M,KAAKy6M,aAAa,EAAEz6M,KAAK+6M,cAAcI,GAAG,GAAGn7M,KAAK2/N,gCAAgC,KAC7e,SAASC,GAAGj1N,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE,EAAEt3B,UAAU3B,aAAQ,IAAS2B,UAAU,GAAGA,UAAU,GAAG,KAAK,MAAM,CAACspM,SAAS6D,EAAGvuM,IAAI,MAAM04B,EAAE,KAAK,GAAGA,EAAE1xB,SAAS4E,EAAEguM,cAAc/tM,EAAE+lN,eAAeryM,GACxK,SAASuhN,GAAGl1N,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAIr0B,EAAEwH,EAAEw+L,QAAQ9lM,EAAE6rN,KAAKjqM,EAAEkqM,GAAGhsN,GAAGuH,EAAE,GAAG2T,EAAE,CAAqB1T,EAAE,CAAC,GAAG4rM,GAA1Bl4L,EAAEA,EAAE4wM,mBAA8B5wM,GAAG,IAAIA,EAAEwwL,IAAI,MAAMtjM,MAAMuQ,EAAE,MAAM,IAAIpB,EAAE2D,EAAE,EAAE,CAAC,OAAO3D,EAAEm0L,KAAK,KAAK,EAAEn0L,EAAEA,EAAEw6L,UAAU1wM,QAAQ,MAAMmG,EAAE,KAAK,EAAE,GAAGy/M,GAAG1vM,EAAEsL,MAAM,CAACtL,EAAEA,EAAEw6L,UAAUuV,0CAA0C,MAAM9/M,GAAG+P,EAAEA,EAAE+7L,aAAa,OAAO/7L,GAAG,MAAMnP,MAAMuQ,EAAE,MAAO,GAAG,IAAIuC,EAAEwwL,IAAI,CAAC,IAAIhjM,EAAEwS,EAAE2H,KAAK,GAAGokM,GAAGv+M,GAAG,CAACwS,EAAEksM,GAAGlsM,EAAExS,EAAE6O,GAAG,MAAMhQ,GAAG2T,EAAE3D,OAAO2D,EAAE0rM,GACrW,OADwW,OAAOp/M,EAAEnG,QAAQmG,EAAEnG,QAAQ6Z,EAAE1T,EAAEssN,eAAe54M,GAAE1T,EAAE0jN,GAAGhrN,EAAE4hB,IAAKupM,QAAQ,CAACxmN,QAAQ0C,GAAuB,QAApB8sB,OAAE,IAASA,EAAE,KAAKA,KAC1e7sB,EAAEiE,SAAS4oB,GAAGi3L,GAAGtrN,EAAEwH,GAAGykN,GAAGjsN,EAAE8hB,EAAE5hB,GAAU4hB,EAAE,SAAS46M,GAAGn1N,GAAe,KAAZA,EAAEA,EAAEy+L,SAAcphM,MAAM,OAAO,KAAK,OAAO2C,EAAE3C,MAAM8mM,KAAK,KAAK,EAA2B,QAAQ,OAAOnkM,EAAE3C,MAAMmtM,WAAW,SAAS4qB,GAAGp1N,EAAEC,GAAqB,GAAG,QAArBD,EAAEA,EAAEisM,gBAA2B,OAAOjsM,EAAEksM,WAAW,CAAC,IAAIv4L,EAAE3T,EAAE4sN,UAAU5sN,EAAE4sN,UAAU,IAAIj5M,GAAGA,EAAE1T,EAAE0T,EAAE1T,GAAG,SAAS6G,GAAG9G,EAAEC,GAAGm1N,GAAGp1N,EAAEC,IAAID,EAAEA,EAAE8rM,YAAYspB,GAAGp1N,EAAEC,GACxV,SAASo1N,GAAGr1N,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE,MAAMnZ,GAAG,MAAMA,EAAE2hN,kBAAkB3hN,EAAE2hN,iBAAiBC,gBAAgB,KAAiK,GAA5J5hN,EAAE,IAAIohN,GAAG/0N,EAAEC,EAAE,MAAM0T,IAAG,IAAKA,EAAEo6L,SAAS9tM,EAAEonN,GAAG,EAAE,KAAK,KAAK,IAAIpnN,EAAE,EAAE,IAAIA,EAAE,EAAE,GAAG0T,EAAE8qL,QAAQx+L,EAAEA,EAAEuqM,UAAU72L,EAAEwvM,GAAGljN,GAAGD,EAAE09M,IAAI/pM,EAAE8qL,QAAQ97J,GAAG,IAAI3iC,EAAEmjJ,SAASnjJ,EAAEu7I,WAAWv7I,GAAM8sB,EAAE,IAAI9sB,EAAE,EAAEA,EAAE8sB,EAAEj5B,OAAOmM,IAAI,CAAQ,IAAIvH,GAAXwH,EAAE6sB,EAAE9sB,IAAWupN,YAAY9wN,EAAEA,EAAEwH,EAAEupN,SAAS,MAAM71M,EAAEqhN,gCAAgCrhN,EAAEqhN,gCAAgC,CAAC/0N,EAAExH,GAAGkb,EAAEqhN,gCAAgCx7N,KAAKyG,EAAExH,GAAGpD,KAAKmgO,cAAc7hN,EAC/R,SAAS8hN,GAAGz1N,GAAG,SAASA,GAAG,IAAIA,EAAEmjJ,UAAU,IAAInjJ,EAAEmjJ,UAAU,KAAKnjJ,EAAEmjJ,WAAW,IAAInjJ,EAAEmjJ,UAAU,iCAAiCnjJ,EAAE2mM,YAEvT,SAAS+uB,GAAG11N,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,IAAIE,EAAEgb,EAAEy8M,oBAAoB,GAAGz3N,EAAE,CAAC,IAAI4hB,EAAE5hB,EAAE68N,cAAc,GAAG,oBAAoB/8N,EAAE,CAAC,IAAIuX,EAAEvX,EAAEA,EAAE,WAAW,IAAIuH,EAAEm1N,GAAG56M,GAAGvK,EAAExZ,KAAKwJ,IAAIk1N,GAAGj1N,EAAEsa,EAAEva,EAAEvH,OAAO,CAAmD,GAAlDE,EAAEgb,EAAEy8M,oBAD1K,SAAYpwN,EAAEC,GAA0H,GAAvHA,IAA2DA,MAAvDA,EAAED,EAAE,IAAIA,EAAEmjJ,SAASnjJ,EAAE41K,gBAAgB51K,EAAEsmM,WAAW,OAAa,IAAIrmM,EAAEkjJ,WAAWljJ,EAAEwhE,aAAa,qBAAwBxhE,EAAE,IAAI,IAAI0T,EAAEA,EAAE3T,EAAE0mM,WAAW1mM,EAAEw7I,YAAY7nI,GAAG,OAAO,IAAI0hN,GAAGr1N,EAAE,EAAEC,EAAE,CAAC8tM,SAAQ,QAAI,GAC3B4nB,CAAGhiN,EAAEmZ,GAAGvS,EAAE5hB,EAAE68N,cAAiB,oBAAoB/8N,EAAE,CAAC,IAAI0I,EAAE1I,EAAEA,EAAE,WAAW,IAAIuH,EAAEm1N,GAAG56M,GAAGpZ,EAAE3K,KAAKwJ,IAAIyzN,IAAG,WAAWyB,GAAGj1N,EAAEsa,EAAEva,EAAEvH,MAAK,OAAO08N,GAAG56M,GAGlG,SAASq7M,GAAG51N,EAAEC,GAAG,IAAI0T,EAAE,EAAEne,UAAU3B,aAAQ,IAAS2B,UAAU,GAAGA,UAAU,GAAG,KAAK,IAAIigO,GAAGx1N,GAAG,MAAMY,MAAMuQ,EAAE,MAAM,OAAO6jN,GAAGj1N,EAAEC,EAAE,KAAK0T,GA1BtW29M,GAAG,SAAStxN,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE7sB,EAAE6iN,MAAM,GAAG,OAAO9iN,EAAE,GAAGA,EAAE+mN,gBAAgB9mN,EAAEsnN,cAActoB,GAAER,QAAQskB,IAAG,MAAQ,IAAG,KAAKpvM,EAAEmZ,GAAoC,CAAO,OAANi2L,IAAG,EAAU9iN,EAAEkkM,KAAK,KAAK,EAAEmoB,GAAGrsN,GAAGm2E,KAAK,MAAM,KAAK,EAAEwwI,GAAG3mN,GAAG,MAAM,KAAK,EAAEy/M,GAAGz/M,EAAEqb,OAAOwkM,GAAG7/M,GAAG,MAAM,KAAK,EAAEymN,GAAGzmN,EAAEA,EAAEuqM,UAAUwD,eAAe,MAAM,KAAK,GAAGlhL,EAAE7sB,EAAE8mN,cAAcjyN,MAAM,IAAI2D,EAAEwH,EAAEqb,KAAKi2E,SAAS0mD,GAAEmqE,GAAG3pN,EAAEwnM,eAAexnM,EAAEwnM,cAAcnzK,EAAE,MAAM,KAAK,GAAG,GAAG,OAAO7sB,EAAEgsM,cAAe,OAAG,KAAKt4L,EAAE1T,EAAE5C,MAAMslN,YAAmBt0C,GAAGruK,EAAEC,EAAE0T,IAAGskI,GAAEK,GAAY,EAAVA,GAAEmmD,SAA8B,QAAnBx+L,EAAEwrN,GAAGzrN,EAAEC,EAAE0T,IAC/e1T,EAAEmsM,QAAQ,MAAKn0D,GAAEK,GAAY,EAAVA,GAAEmmD,SAAW,MAAM,KAAK,GAA0B,GAAvB3xK,EAAE,KAAKnZ,EAAE1T,EAAE0iN,YAAe,KAAa,GAAR3iN,EAAE8T,OAAU,CAAC,GAAGgZ,EAAE,OAAO2gM,GAAGztN,EAAEC,EAAE0T,GAAG1T,EAAE6T,OAAO,GAA+F,GAA1E,QAAlBrb,EAAEwH,EAAEgsM,iBAAyBxzM,EAAE40N,UAAU,KAAK50N,EAAE80N,KAAK,KAAK90N,EAAEgtN,WAAW,MAAMxtE,GAAEK,GAAEA,GAAEmmD,SAAY3xK,EAAE,MAAW,OAAO,KAAK,KAAK,GAAG,KAAK,GAAG,OAAO7sB,EAAE6iN,MAAM,EAAE+I,GAAG7rN,EAAEC,EAAE0T,GAAG,OAAO83M,GAAGzrN,EAAEC,EAAE0T,GAD3LovM,GAAG,KAAa,MAAR/iN,EAAE8T,YACyLivM,IAAG,EAAa,OAAV9iN,EAAE6iN,MAAM,EAAS7iN,EAAEkkM,KAAK,KAAK,EAA+I,GAA7Ir3K,EAAE7sB,EAAEqb,KAAK,OAAOtb,IAAIA,EAAE8rM,UAAU,KAAK7rM,EAAE6rM,UAAU,KAAK7rM,EAAE6T,OAAO,GAAG9T,EAAEC,EAAEsnN,aAAa9uN,EAAE8mN,GAAGt/M,EAAE++L,GAAEP,SAASmkB,GAAG3iN,EAAE0T,GAAGlb,EAAE4vN,GAAG,KAAKpoN,EAAE6sB,EAAE9sB,EAAEvH,EAAEkb,GAAG1T,EAAE6T,OAAO,EAAK,kBACrerb,GAAG,OAAOA,GAAG,oBAAoBA,EAAEoC,aAAQ,IAASpC,EAAEqmM,SAAS,CAAiD,GAAhD7+L,EAAEkkM,IAAI,EAAElkM,EAAEgsM,cAAc,KAAKhsM,EAAEmjN,YAAY,KAAQ1D,GAAG5yL,GAAG,CAAC,IAAIn0B,GAAE,EAAGmnN,GAAG7/M,QAAQtH,GAAE,EAAGsH,EAAEgsM,cAAc,OAAOxzM,EAAEuC,YAAO,IAASvC,EAAEuC,MAAMvC,EAAEuC,MAAM,KAAKmoN,GAAGljN,GAAG,IAAIsa,EAAEuS,EAAEmvK,yBAAyB,oBAAoB1hL,GAAG8pM,GAAGpkN,EAAE6sB,EAAEvS,EAAEva,GAAGvH,EAAE4lM,QAAQimB,GAAGrkN,EAAEuqM,UAAU/xM,EAAEA,EAAE8rN,gBAAgBtkN,EAAE+kN,GAAG/kN,EAAE6sB,EAAE9sB,EAAE2T,GAAG1T,EAAEosN,GAAG,KAAKpsN,EAAE6sB,GAAE,EAAGn0B,EAAEgb,QAAQ1T,EAAEkkM,IAAI,EAAEonB,GAAG,KAAKtrN,EAAExH,EAAEkb,GAAG1T,EAAEA,EAAE5C,MAAM,OAAO4C,EAAE,KAAK,GAAGxH,EAAEwH,EAAE6lN,YAAY9lN,EAAE,CAChX,OADiX,OAAOA,IAAIA,EAAE8rM,UAAU,KAAK7rM,EAAE6rM,UAAU,KAAK7rM,EAAE6T,OAAO,GACnf9T,EAAEC,EAAEsnN,aAAuB9uN,GAAVE,EAAEF,EAAEgoM,OAAUhoM,EAAE+nM,UAAUvgM,EAAEqb,KAAK7iB,EAAEE,EAAEsH,EAAEkkM,IAOxD,SAAYnkM,GAAG,GAAG,oBAAoBA,EAAE,OAAO2rN,GAAG3rN,GAAG,EAAE,EAAE,QAAG,IAASA,GAAG,OAAOA,EAAE,CAAc,IAAbA,EAAEA,EAAE8+L,YAAgBkE,EAAG,OAAO,GAAG,GAAGhjM,IAAImjM,EAAG,OAAO,GAAG,OAAO,EAPlF0yB,CAAGp9N,GAAGuH,EAAEmiN,GAAG1pN,EAAEuH,GAAUrH,GAAG,KAAK,EAAEsH,EAAE4qK,GAAG,KAAK5qK,EAAExH,EAAEuH,EAAE2T,GAAG,MAAM3T,EAAE,KAAK,EAAEC,EAAEgsN,GAAG,KAAKhsN,EAAExH,EAAEuH,EAAE2T,GAAG,MAAM3T,EAAE,KAAK,GAAGC,EAAEurN,GAAG,KAAKvrN,EAAExH,EAAEuH,EAAE2T,GAAG,MAAM3T,EAAE,KAAK,GAAGC,EAAEyrN,GAAG,KAAKzrN,EAAExH,EAAE0pN,GAAG1pN,EAAE6iB,KAAKtb,GAAG8sB,EAAEnZ,GAAG,MAAM3T,EAAE,MAAMa,MAAMuQ,EAAE,IAAI3Y,EAAE,KAAM,OAAOwH,EAAE,KAAK,EAAE,OAAO6sB,EAAE7sB,EAAEqb,KAAK7iB,EAAEwH,EAAEsnN,aAA2C18C,GAAG7qK,EAAEC,EAAE6sB,EAArCr0B,EAAEwH,EAAE6lN,cAAch5L,EAAEr0B,EAAE0pN,GAAGr1L,EAAEr0B,GAAckb,GAAG,KAAK,EAAE,OAAOmZ,EAAE7sB,EAAEqb,KAAK7iB,EAAEwH,EAAEsnN,aAA2C0E,GAAGjsN,EAAEC,EAAE6sB,EAArCr0B,EAAEwH,EAAE6lN,cAAch5L,EAAEr0B,EAAE0pN,GAAGr1L,EAAEr0B,GAAckb,GAAG,KAAK,EAAwB,GAAtB24M,GAAGrsN,GAAG6sB,EAAE7sB,EAAEmjN,YAAe,OAAOpjN,GAAG,OAAO8sB,EAAE,MAAMjsB,MAAMuQ,EAAE,MAC3Y,GAA9G0b,EAAE7sB,EAAEsnN,aAA+B9uN,EAAE,QAApBA,EAAEwH,EAAEgsM,eAAyBxzM,EAAE6E,QAAQ,KAAKomN,GAAG1jN,EAAEC,GAAGgkN,GAAGhkN,EAAE6sB,EAAE,KAAKnZ,IAAGmZ,EAAE7sB,EAAEgsM,cAAc3uM,WAAe7E,EAAE29E,KAAKn2E,EAAEwrN,GAAGzrN,EAAEC,EAAE0T,OAAO,CAAuF,IAArEhb,GAAjBF,EAAEwH,EAAEuqM,WAAiBuD,WAAQmZ,GAAGxI,GAAGz+M,EAAEuqM,UAAUwD,cAAc1H,YAAY2gB,GAAGhnN,EAAEtH,EAAEwuN,IAAG,GAAMxuN,EAAE,CAAqC,GAAG,OAAvCqH,EAAEvH,EAAEu8N,iCAA2C,IAAIv8N,EAAE,EAAEA,EAAEuH,EAAEnM,OAAO4E,GAAG,GAAEE,EAAEqH,EAAEvH,IAAKovN,8BAA8B7nN,EAAEvH,EAAE,GAAGkvN,GAAGnuN,KAAKb,GAAoB,IAAjBgb,EAAEyyM,GAAGnmN,EAAE,KAAK6sB,EAAEnZ,GAAO1T,EAAE5C,MAAMsW,EAAEA,GAAGA,EAAEG,OAAe,EAATH,EAAEG,MAAS,KAAKH,EAAEA,EAAEy4L,aAAamf,GAAGvrN,EAAEC,EAAE6sB,EAAEnZ,GAAGyiE,KAAKn2E,EAAEA,EAAE5C,MAAM,OAAO4C,EAAE,KAAK,EAAE,OAAO2mN,GAAG3mN,GAAG,OAAOD,GACnfwnN,GAAGvnN,GAAG6sB,EAAE7sB,EAAEqb,KAAK7iB,EAAEwH,EAAEsnN,aAAa5uN,EAAE,OAAOqH,EAAEA,EAAE+mN,cAAc,KAAKxsM,EAAE9hB,EAAE2C,SAASijN,GAAGvxL,EAAEr0B,GAAG8hB,EAAE,KAAK,OAAO5hB,GAAG0lN,GAAGvxL,EAAEn0B,KAAKsH,EAAE6T,OAAO,IAAIk4M,GAAGhsN,EAAEC,GAAGsrN,GAAGvrN,EAAEC,EAAEsa,EAAE5G,GAAG1T,EAAE5C,MAAM,KAAK,EAAE,OAAO,OAAO2C,GAAGwnN,GAAGvnN,GAAG,KAAK,KAAK,GAAG,OAAOouK,GAAGruK,EAAEC,EAAE0T,GAAG,KAAK,EAAE,OAAO+yM,GAAGzmN,EAAEA,EAAEuqM,UAAUwD,eAAelhL,EAAE7sB,EAAEsnN,aAAa,OAAOvnN,EAAEC,EAAE5C,MAAM8oN,GAAGlmN,EAAE,KAAK6sB,EAAEnZ,GAAG43M,GAAGvrN,EAAEC,EAAE6sB,EAAEnZ,GAAG1T,EAAE5C,MAAM,KAAK,GAAG,OAAOyvB,EAAE7sB,EAAEqb,KAAK7iB,EAAEwH,EAAEsnN,aAA2CiE,GAAGxrN,EAAEC,EAAE6sB,EAArCr0B,EAAEwH,EAAE6lN,cAAch5L,EAAEr0B,EAAE0pN,GAAGr1L,EAAEr0B,GAAckb,GAAG,KAAK,EAAE,OAAO43M,GAAGvrN,EAAEC,EAAEA,EAAEsnN,aAAa5zM,GAAG1T,EAAE5C,MAAM,KAAK,EACtc,KAAK,GAAG,OAAOkuN,GAAGvrN,EAAEC,EAAEA,EAAEsnN,aAAansN,SAASuY,GAAG1T,EAAE5C,MAAM,KAAK,GAAG2C,EAAE,CAAC8sB,EAAE7sB,EAAEqb,KAAKi2E,SAAS94F,EAAEwH,EAAEsnN,aAAahtM,EAAEta,EAAE8mN,cAAcpuN,EAAEF,EAAE3D,MAAM,IAAIkb,EAAE/P,EAAEqb,KAAKi2E,SAAiD,GAAxC0mD,GAAEmqE,GAAGpyM,EAAEiwL,eAAejwL,EAAEiwL,cAActnM,EAAK,OAAO4hB,EAAE,GAAGvK,EAAEuK,EAAEzlB,MAA0G,KAApG6D,EAAE2iN,GAAGtrM,EAAErX,GAAG,EAAwF,GAArF,oBAAoBm0B,EAAEkzK,sBAAsBlzK,EAAEkzK,sBAAsBhwL,EAAErX,GAAG,cAAqB,GAAG4hB,EAAEnf,WAAW3C,EAAE2C,WAAW6jM,GAAER,QAAQ,CAACx+L,EAAEwrN,GAAGzrN,EAAEC,EAAE0T,GAAG,MAAM3T,QAAQ,IAAc,QAAVgQ,EAAE/P,EAAE5C,SAAiB2S,EAAE+7L,OAAO9rM,GAAG,OAAO+P,GAAG,CAAC,IAAI7O,EAAE6O,EAAEgxH,aAAa,GAAG,OAAO7/H,EAAE,CAACoZ,EAAEvK,EAAE3S,MAAM,IAAI,IAAIgB,EACtf8C,EAAE0hN,aAAa,OAAOxkN,GAAG,CAAC,GAAGA,EAAEvE,UAAUgzB,GAAG,KAAKzuB,EAAEwT,aAAalZ,GAAG,CAAC,IAAIqX,EAAEm0L,OAAM9lM,EAAEslN,IAAI,EAAEhwM,GAAGA,IAAKwwL,IAAI,EAAE4f,GAAG/zM,EAAE3R,IAAI2R,EAAE8yM,OAAOnvM,EAAgB,QAAdtV,EAAE2R,EAAE87L,aAAqBztM,EAAEykN,OAAOnvM,GAAG+uM,GAAG1yM,EAAE+7L,OAAOp4L,GAAGxS,EAAE2hN,OAAOnvM,EAAE,MAAMtV,EAAEA,EAAEtF,WAAWwhB,EAAE,KAAKvK,EAAEm0L,KAAIn0L,EAAEsL,OAAOrb,EAAEqb,KAAK,KAAatL,EAAE3S,MAAM,GAAG,OAAOkd,EAAEA,EAAEwxL,OAAO/7L,OAAO,IAAIuK,EAAEvK,EAAE,OAAOuK,GAAG,CAAC,GAAGA,IAAIta,EAAE,CAACsa,EAAE,KAAK,MAAkB,GAAG,QAAfvK,EAAEuK,EAAE6xL,SAAoB,CAACp8L,EAAE+7L,OAAOxxL,EAAEwxL,OAAOxxL,EAAEvK,EAAE,MAAMuK,EAAEA,EAAEwxL,OAAO/7L,EAAEuK,EAAEgxM,GAAGvrN,EAAEC,EAAExH,EAAE2C,SAASuY,GAAG1T,EAAEA,EAAE5C,MAAM,OAAO4C,EAAE,KAAK,EAAE,OAAOxH,EAAEwH,EAAEqb,KAAsBwR,GAAjBn0B,EAAEsH,EAAEsnN,cAAiBnsN,SAASwnN,GAAG3iN,EAAE0T,GACndmZ,EAAEA,EADodr0B,EAAEuqN,GAAGvqN,EACpfE,EAAEm9N,wBAA8B71N,EAAE6T,OAAO,EAAEy3M,GAAGvrN,EAAEC,EAAE6sB,EAAEnZ,GAAG1T,EAAE5C,MAAM,KAAK,GAAG,OAAgB1E,EAAEwpN,GAAX1pN,EAAEwH,EAAEqb,KAAYrb,EAAEsnN,cAA6BmE,GAAG1rN,EAAEC,EAAExH,EAAtBE,EAAEwpN,GAAG1pN,EAAE6iB,KAAK3iB,GAAcm0B,EAAEnZ,GAAG,KAAK,GAAG,OAAOi4M,GAAG5rN,EAAEC,EAAEA,EAAEqb,KAAKrb,EAAEsnN,aAAaz6L,EAAEnZ,GAAG,KAAK,GAAG,OAAOmZ,EAAE7sB,EAAEqb,KAAK7iB,EAAEwH,EAAEsnN,aAAa9uN,EAAEwH,EAAE6lN,cAAch5L,EAAEr0B,EAAE0pN,GAAGr1L,EAAEr0B,GAAG,OAAOuH,IAAIA,EAAE8rM,UAAU,KAAK7rM,EAAE6rM,UAAU,KAAK7rM,EAAE6T,OAAO,GAAG7T,EAAEkkM,IAAI,EAAEub,GAAG5yL,IAAI9sB,GAAE,EAAG8/M,GAAG7/M,IAAID,GAAE,EAAG4iN,GAAG3iN,EAAE0T,GAAGkxM,GAAG5kN,EAAE6sB,EAAEr0B,GAAGusN,GAAG/kN,EAAE6sB,EAAEr0B,EAAEkb,GAAG04M,GAAG,KAAKpsN,EAAE6sB,GAAE,EAAG9sB,EAAE2T,GAAG,KAAK,GAAG,OAAO85M,GAAGztN,EAAEC,EAAE0T,GAAG,KAAK,GAAoB,KAAK,GAAG,OAAOk4M,GAAG7rN,EAAEC,EAAE0T,GAAG,MAAM9S,MAAMuQ,EAAE,IAAInR,EAAEkkM,OAa/ekxB,GAAG7gO,UAAUqG,OAAO,SAASmF,GAAGk1N,GAAGl1N,EAAE3K,KAAKmgO,cAAc,KAAK,OAAOH,GAAG7gO,UAAUuhO,QAAQ,WAAW,IAAI/1N,EAAE3K,KAAKmgO,cAAcv1N,EAAED,EAAEguM,cAAcknB,GAAG,KAAKl1N,EAAE,MAAK,WAAWC,EAAEy9M,IAAI,SAEwJpR,GAAG,SAAStsM,GAAM,KAAKA,EAAEmkM,MAAgBugB,GAAG1kN,EAAE,EAAVwkN,MAAe19M,GAAG9G,EAAE,KAAKusM,GAAG,SAASvsM,GAAM,KAAKA,EAAEmkM,MAAgBugB,GAAG1kN,EAAE,SAAVwkN,MAAsB19M,GAAG9G,EAAE,YACncwsM,GAAG,SAASxsM,GAAG,GAAG,KAAKA,EAAEmkM,IAAI,CAAC,IAAIlkM,EAAEukN,KAAK7wM,EAAE8wM,GAAGzkN,GAAG0kN,GAAG1kN,EAAE2T,EAAE1T,GAAG6G,GAAG9G,EAAE2T,KAAK84L,GAAG,SAASzsM,EAAEC,GAAG,OAAOA,KAC7FkqM,GAAG,SAASnqM,EAAEC,EAAE0T,GAAG,OAAO1T,GAAG,IAAK,QAAyB,GAAjBs8C,GAAGv8C,EAAE2T,GAAG1T,EAAE0T,EAAE9Z,KAAQ,UAAU8Z,EAAE2H,MAAM,MAAMrb,EAAE,CAAC,IAAI0T,EAAE3T,EAAE2T,EAAE4nI,YAAY5nI,EAAEA,EAAE4nI,WAAsF,IAA3E5nI,EAAEA,EAAEsqI,iBAAiB,cAAc3pI,KAAKC,UAAU,GAAGtU,GAAG,mBAAuBA,EAAE,EAAEA,EAAE0T,EAAE9f,OAAOoM,IAAI,CAAC,IAAI6sB,EAAEnZ,EAAE1T,GAAG,GAAG6sB,IAAI9sB,GAAG8sB,EAAEkpM,OAAOh2N,EAAEg2N,KAAK,CAAC,IAAIv9N,EAAEgyM,GAAG39K,GAAG,IAAIr0B,EAAE,MAAMoI,MAAMuQ,EAAE,KAAKwzL,EAAG93K,GAAGyvB,GAAGzvB,EAAEr0B,KAAK,MAAM,IAAK,WAAWujG,GAAGh8F,EAAE2T,GAAG,MAAM,IAAK,SAAmB,OAAV1T,EAAE0T,EAAE7e,QAAe2wM,GAAGzlM,IAAI2T,EAAEk6M,SAAS5tN,GAAE,KAAM2qM,GAAG4oB,GAC9Z3oB,GAAG,SAAS7qM,EAAEC,EAAE0T,EAAEmZ,EAAEr0B,GAAG,IAAIE,EAAEk4N,GAAEA,IAAG,EAAE,IAAI,OAAO/O,GAAG,GAAG9hN,EAAEnC,KAAK,KAAKoC,EAAE0T,EAAEmZ,EAAEr0B,IAAnC,QAAmD,KAAJo4N,GAAEl4N,KAAU04N,KAAKrP,QAAQlX,GAAG,WAAW,KAAO,GAAF+lB,MAhD/H,WAAc,GAAG,OAAOgB,GAAG,CAAC,IAAI7xN,EAAE6xN,GAAGA,GAAG,KAAK7xN,EAAE5B,SAAQ,SAAS4B,GAAGA,EAAE+vM,cAAc,GAAG/vM,EAAE8vM,aAAa0iB,GAAGxyN,EAAEq4I,SAAO2pE,KAgDsBiU,GAAKnD,OAAO/nB,GAAG,SAAS/qM,EAAEC,GAAG,IAAI0T,EAAEk9M,GAAEA,IAAG,EAAE,IAAI,OAAO7wN,EAAEC,GAAb,QAA4B,KAAJ4wN,GAAEl9M,KAAU09M,KAAKrP,QAA+I,IAAIkU,GAAG,CAACC,OAAO,CAAC5rB,GAAGgQ,GAAG9P,GAAGC,GAAGC,GAAGmoB,GAAG,CAACr0B,SAAQ,KAAM23B,GAAG,CAACC,wBAAwB1oB,GAAG2oB,WAAW,EAAEhmM,QAAQ,SAASimM,oBAAoB,aACveC,GAAG,CAACF,WAAWF,GAAGE,WAAWhmM,QAAQ8lM,GAAG9lM,QAAQimM,oBAAoBH,GAAGG,oBAAoBE,eAAeL,GAAGK,eAAeC,kBAAkB,KAAKC,4BAA4B,KAAKC,4BAA4B,KAAKC,cAAc,KAAKC,wBAAwB,KAAKC,wBAAwB,KAAKC,mBAAmB,KAAKC,eAAe,KAAKC,qBAAqBz0B,EAAGlD,uBAAuB43B,wBAAwB,SAASn3N,GAAW,OAAO,QAAfA,EAAEmsM,GAAGnsM,IAAmB,KAAKA,EAAEwqM,WAAW6rB,wBAAwBD,GAAGC,yBAR/I,WAAc,OAAO,MAS7We,4BAA4B,KAAKC,gBAAgB,KAAKC,aAAa,KAAKC,kBAAkB,KAAKC,gBAAgB,MAAM,GAAG,qBAAqB98M,+BAA+B,CAAC,IAAI+8M,GAAG/8M,+BAA+B,IAAI+8M,GAAGC,YAAYD,GAAGE,cAAc,IAAI1X,GAAGwX,GAAGG,OAAOpB,IAAItW,GAAGuX,GAAG,MAAMz3N,MAAKhK,EAAQ+pM,mDAAmDm2B,GAAGlgO,EAAQ6hO,aAAajC,GACnX5/N,EAAQ8hO,YAAY,SAAS93N,GAAG,GAAG,MAAMA,EAAE,OAAO,KAAK,GAAG,IAAIA,EAAEmjJ,SAAS,OAAOnjJ,EAAE,IAAIC,EAAED,EAAEukN,gBAAgB,QAAG,IAAStkN,EAAE,CAAC,GAAG,oBAAoBD,EAAEnF,OAAO,MAAMgG,MAAMuQ,EAAE,MAAM,MAAMvQ,MAAMuQ,EAAE,IAAIld,OAAOgI,KAAK8D,KAA0C,OAA5BA,EAAE,QAAVA,EAAEmsM,GAAGlsM,IAAc,KAAKD,EAAEwqM,WAAoBx0M,EAAQ+hO,UAAU,SAAS/3N,EAAEC,GAAG,IAAI0T,EAAEk9M,GAAE,GAAG,KAAO,GAAFl9M,GAAM,OAAO3T,EAAEC,GAAG4wN,IAAG,EAAE,IAAI,GAAG7wN,EAAE,OAAO8hN,GAAG,GAAG9hN,EAAEnC,KAAK,KAAKoC,IAAlC,QAA8C4wN,GAAEl9M,EAAEquM,OAAOhsN,EAAQ+3M,QAAQ,SAAS/tM,EAAEC,EAAE0T,GAAG,IAAI8hN,GAAGx1N,GAAG,MAAMY,MAAMuQ,EAAE,MAAM,OAAOskN,GAAG,KAAK11N,EAAEC,GAAE,EAAG0T,IACnd3d,EAAQ6E,OAAO,SAASmF,EAAEC,EAAE0T,GAAG,IAAI8hN,GAAGx1N,GAAG,MAAMY,MAAMuQ,EAAE,MAAM,OAAOskN,GAAG,KAAK11N,EAAEC,GAAE,EAAG0T,IAAI3d,EAAQgiO,uBAAuB,SAASh4N,GAAG,IAAIy1N,GAAGz1N,GAAG,MAAMa,MAAMuQ,EAAE,KAAK,QAAOpR,EAAEowN,sBAAqBqD,IAAG,WAAWiC,GAAG,KAAK,KAAK11N,GAAE,GAAG,WAAWA,EAAEowN,oBAAoB,KAAKpwN,EAAE09M,IAAI,YAAS,IAAQ1nN,EAAQiiO,wBAAwBzE,GAAGx9N,EAAQkiO,sBAAsB,SAASl4N,EAAEC,GAAG,OAAO21N,GAAG51N,EAAEC,EAAE,EAAEzK,UAAU3B,aAAQ,IAAS2B,UAAU,GAAGA,UAAU,GAAG,OAC9aQ,EAAQmiO,oCAAoC,SAASn4N,EAAEC,EAAE0T,EAAEmZ,GAAG,IAAI2oM,GAAG9hN,GAAG,MAAM9S,MAAMuQ,EAAE,MAAM,GAAG,MAAMpR,QAAG,IAASA,EAAEukN,gBAAgB,MAAM1jN,MAAMuQ,EAAE,KAAK,OAAOskN,GAAG11N,EAAEC,EAAE0T,GAAE,EAAGmZ,IAAI92B,EAAQs6B,QAAQ,U,6BCrS3Lv6B,EAAOC,QAAUC,EAAQ,K,6BCKd,IAAI0C,EAAE4hB,EAAEvK,EAAE7O,EAAE,GAAG,kBAAkBuuJ,aAAa,oBAAoBA,YAAY30C,IAAI,CAAC,IAAI18G,EAAEqxJ,YAAY15J,EAAQ25M,aAAa,WAAW,OAAOtxM,EAAE08G,WAAW,CAAC,IAAInvG,EAAEU,KAAK6b,EAAEvc,EAAEmvG,MAAM/kH,EAAQ25M,aAAa,WAAW,OAAO/jM,EAAEmvG,MAAM5yF,GAC3O,GAAG,qBAAqBzoB,QAAQ,oBAAoB04N,eAAe,CAAC,IAAItyM,EAAE,KAAKipB,EAAE,KAAK9lB,EAAE,SAAFA,IAAa,GAAG,OAAOnD,EAAE,IAAI,IAAI9lB,EAAEhK,EAAQ25M,eAAe7pL,GAAE,EAAG9lB,GAAG8lB,EAAE,KAAK,MAAM7lB,GAAG,MAAM2sG,WAAW3jF,EAAE,GAAGhpB,IAAKtH,EAAE,SAASqH,GAAG,OAAO8lB,EAAE8mF,WAAWj0G,EAAE,EAAEqH,IAAI8lB,EAAE9lB,EAAE4sG,WAAW3jF,EAAE,KAAK1O,EAAE,SAASva,EAAEC,GAAG8uC,EAAE69D,WAAW5sG,EAAEC,IAAI+P,EAAE,WAAWytI,aAAa1uG,IAAI/4C,EAAQwqN,qBAAqB,WAAW,OAAM,GAAIr/M,EAAEnL,EAAQqiO,wBAAwB,iBAAiB,CAAC,IAAIlnN,EAAEzR,OAAOktG,WAAWx7F,EAAE1R,OAAO+9I,aAAa,GAAG,qBAAqB9iI,QAAQ,CAAC,IAAIgX,EAC7fjyB,OAAOooD,qBAAqB,oBAAoBpoD,OAAOkoD,uBAAuBjtC,QAAQxjB,MAAM,sJAAsJ,oBAAoBw6B,GAAGhX,QAAQxjB,MAAM,qJAAqJ,IAAI2gJ,GAAE,EAAGD,EAAE,KAAKpqI,GAAG,EAAE4pI,EAAE,EAAEc,EAAE,EAAEniJ,EAAQwqN,qBAAqB,WAAW,OAAOxqN,EAAQ25M,gBAChgBx3D,GAAGh3I,EAAE,aAAanL,EAAQqiO,wBAAwB,SAASr4N,GAAG,EAAEA,GAAG,IAAIA,EAAE2a,QAAQxjB,MAAM,mHAAmHkgJ,EAAE,EAAEr3I,EAAEmG,KAAKmgB,MAAM,IAAItmB,GAAG,GAAG,IAAI1H,EAAE,IAAI8/N,eAAe7/E,EAAEjgJ,EAAEggO,MAAMhgO,EAAEigO,MAAM1nG,UAAU,WAAW,GAAG,OAAOgnB,EAAE,CAAC,IAAI73I,EAAEhK,EAAQ25M,eAAex3D,EAAEn4I,EAAEq3I,EAAE,IAAIQ,GAAE,EAAG73I,GAAGu4I,EAAE9oB,YAAY,OAAOqoB,GAAE,EAAGD,EAAE,MAAM,MAAM53I,GAAG,MAAMs4I,EAAE9oB,YAAY,MAAMxvH,QAAS63I,GAAE,GAAIn/I,EAAE,SAASqH,GAAG63I,EAAE73I,EAAE83I,IAAIA,GAAE,EAAGS,EAAE9oB,YAAY,QAAQl1G,EAAE,SAASva,EAAEC,GAAGwN,EACtf0D,GAAE,WAAWnR,EAAEhK,EAAQ25M,kBAAiB1vM,IAAI+P,EAAE,WAAWoB,EAAE3D,GAAGA,GAAG,GAAG,SAASixL,EAAE1+L,EAAEC,GAAG,IAAI0T,EAAE3T,EAAEnM,OAAOmM,EAAExG,KAAKyG,GAAGD,EAAE,OAAO,CAAC,IAAI8sB,EAAEnZ,EAAE,IAAI,EAAElb,EAAEuH,EAAE8sB,GAAG,UAAG,IAASr0B,GAAG,EAAEw/I,EAAEx/I,EAAEwH,IAA0B,MAAMD,EAA7BA,EAAE8sB,GAAG7sB,EAAED,EAAE2T,GAAGlb,EAAEkb,EAAEmZ,GAAgB,SAAS+xK,EAAE7+L,GAAU,YAAO,KAAdA,EAAEA,EAAE,IAAqB,KAAKA,EAChP,SAASk/L,EAAEl/L,GAAG,IAAIC,EAAED,EAAE,GAAG,QAAG,IAASC,EAAE,CAAC,IAAI0T,EAAE3T,EAAEoB,MAAM,GAAGuS,IAAI1T,EAAE,CAACD,EAAE,GAAG2T,EAAE3T,EAAE,IAAI,IAAI8sB,EAAE,EAAEr0B,EAAEuH,EAAEnM,OAAOi5B,EAAEr0B,GAAG,CAAC,IAAIma,EAAE,GAAGka,EAAE,GAAG,EAAEt0B,EAAEwH,EAAE4S,GAAGyC,EAAEzC,EAAE,EAAE6a,EAAEztB,EAAEqV,GAAG,QAAG,IAAS7c,GAAG,EAAEy/I,EAAEz/I,EAAEmb,QAAG,IAAS8Z,GAAG,EAAEwqH,EAAExqH,EAAEj1B,IAAIwH,EAAE8sB,GAAGW,EAAEztB,EAAEqV,GAAG1B,EAAEmZ,EAAEzX,IAAIrV,EAAE8sB,GAAGt0B,EAAEwH,EAAE4S,GAAGe,EAAEmZ,EAAEla,OAAQ,WAAG,IAAS6a,GAAG,EAAEwqH,EAAExqH,EAAE9Z,IAA0B,MAAM3T,EAA7BA,EAAE8sB,GAAGW,EAAEztB,EAAEqV,GAAG1B,EAAEmZ,EAAEzX,IAAgB,OAAOpV,EAAE,OAAO,KAAK,SAASg4I,EAAEj4I,EAAEC,GAAG,IAAI0T,EAAE3T,EAAEw4N,UAAUv4N,EAAEu4N,UAAU,OAAO,IAAI7kN,EAAEA,EAAE3T,EAAEqpC,GAAGppC,EAAEopC,GAAG,IAAI2uG,EAAE,GAAGgnD,EAAE,GAAGC,EAAE,EAAE5mD,EAAE,KAAKC,EAAE,EAAE6mD,GAAE,EAAGjnD,GAAE,EAAGH,GAAE,EACja,SAASK,EAAEp4I,GAAG,IAAI,IAAIC,EAAE4+L,EAAEG,GAAG,OAAO/+L,GAAG,CAAC,GAAG,OAAOA,EAAEiE,SAASg7L,EAAEF,OAAQ,MAAG/+L,EAAEqnG,WAAWtnG,GAAgD,MAA9Ck/L,EAAEF,GAAG/+L,EAAEu4N,UAAUv4N,EAAEw4N,eAAe/5B,EAAE1mD,EAAE/3I,GAAcA,EAAE4+L,EAAEG,IAAI,SAAS7yD,EAAEnsI,GAAa,GAAV+3I,GAAE,EAAGK,EAAEp4I,IAAOk4I,EAAE,GAAG,OAAO2mD,EAAE7mD,GAAGE,GAAE,EAAGv/I,EAAEq1N,OAAO,CAAC,IAAI/tN,EAAE4+L,EAAEG,GAAG,OAAO/+L,GAAGsa,EAAE4xH,EAAElsI,EAAEqnG,UAAUtnG,IACtP,SAASguN,EAAEhuN,EAAEC,GAAGi4I,GAAE,EAAGH,IAAIA,GAAE,EAAG/nI,KAAKmvL,GAAE,EAAG,IAAIxrL,EAAE2kI,EAAE,IAAS,IAALF,EAAEn4I,GAAOo4I,EAAEwmD,EAAE7mD,GAAG,OAAOK,MAAMA,EAAEogF,eAAex4N,IAAID,IAAIhK,EAAQwqN,yBAAyB,CAAC,IAAI1zL,EAAEurH,EAAEn0I,SAAS,GAAG,oBAAoB4oB,EAAE,CAACurH,EAAEn0I,SAAS,KAAKo0I,EAAED,EAAEqgF,cAAc,IAAIjgO,EAAEq0B,EAAEurH,EAAEogF,gBAAgBx4N,GAAGA,EAAEjK,EAAQ25M,eAAe,oBAAoBl3M,EAAE4/I,EAAEn0I,SAASzL,EAAE4/I,IAAIwmD,EAAE7mD,IAAIknD,EAAElnD,GAAGI,EAAEn4I,QAAQi/L,EAAElnD,GAAGK,EAAEwmD,EAAE7mD,GAAG,GAAG,OAAOK,EAAE,IAAIzlI,GAAE,MAAO,CAAC,IAAIpa,EAAEqmM,EAAEG,GAAG,OAAOxmM,GAAG+hB,EAAE4xH,EAAE3zI,EAAE8uG,UAAUrnG,GAAG2S,GAAE,EAAG,OAAOA,EAArX,QAA+XylI,EAAE,KAAKC,EAAE3kI,EAAEwrL,GAAE,GAAI,IAAIgvB,EAAEhtN,EAAEnL,EAAQqrN,sBAAsB,EACterrN,EAAQ+qN,2BAA2B,EAAE/qN,EAAQmrN,qBAAqB,EAAEnrN,EAAQu4M,wBAAwB,EAAEv4M,EAAQ2iO,mBAAmB,KAAK3iO,EAAQ66M,8BAA8B,EAAE76M,EAAQsqN,wBAAwB,SAAStgN,GAAGA,EAAEkE,SAAS,MAAMlO,EAAQ4iO,2BAA2B,WAAW1gF,GAAGinD,IAAIjnD,GAAE,EAAGv/I,EAAEq1N,KAAKh4N,EAAQ6qN,iCAAiC,WAAW,OAAOvoE,GAAGtiJ,EAAQ6iO,8BAA8B,WAAW,OAAOh6B,EAAE7mD,IACpahiJ,EAAQ8iO,cAAc,SAAS94N,GAAG,OAAOs4I,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAIr4I,EAAE,EAAE,MAAM,QAAQA,EAAEq4I,EAAE,IAAI3kI,EAAE2kI,EAAEA,EAAEr4I,EAAE,IAAI,OAAOD,IAAX,QAAuBs4I,EAAE3kI,IAAI3d,EAAQ+iO,wBAAwB,aAAa/iO,EAAQ0qN,sBAAsByN,EAAEn4N,EAAQ63M,yBAAyB,SAAS7tM,EAAEC,GAAG,OAAOD,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQA,EAAE,EAAE,IAAI2T,EAAE2kI,EAAEA,EAAEt4I,EAAE,IAAI,OAAOC,IAAX,QAAuBq4I,EAAE3kI,IACpW3d,EAAQs4M,0BAA0B,SAAStuM,EAAEC,EAAE0T,GAAG,IAAImZ,EAAE92B,EAAQ25M,eAA8F,OAA/E,kBAAkBh8L,GAAG,OAAOA,EAAaA,EAAE,kBAAZA,EAAEA,EAAEqlN,QAA6B,EAAErlN,EAAEmZ,EAAEnZ,EAAEmZ,EAAGnZ,EAAEmZ,EAAS9sB,GAAG,KAAK,EAAE,IAAIvH,GAAG,EAAE,MAAM,KAAK,EAAEA,EAAE,IAAI,MAAM,KAAK,EAAEA,EAAE,WAAW,MAAM,KAAK,EAAEA,EAAE,IAAI,MAAM,QAAQA,EAAE,IAA2M,OAAjMuH,EAAE,CAACqpC,GAAG41J,IAAI/6L,SAASjE,EAAEy4N,cAAc14N,EAAEsnG,UAAU3zF,EAAE8kN,eAAvDhgO,EAAEkb,EAAElb,EAAoE+/N,WAAW,GAAG7kN,EAAEmZ,GAAG9sB,EAAEw4N,UAAU7kN,EAAE+qL,EAAEM,EAAEh/L,GAAG,OAAO6+L,EAAE7mD,IAAIh4I,IAAI6+L,EAAEG,KAAKjnD,EAAE/nI,IAAI+nI,GAAE,EAAGx9H,EAAE4xH,EAAEx4H,EAAEmZ,MAAM9sB,EAAEw4N,UAAU//N,EAAEimM,EAAE1mD,EAAEh4I,GAAGk4I,GAAGinD,IAAIjnD,GAAE,EAAGv/I,EAAEq1N,KAAYhuN,GAC1dhK,EAAQijO,sBAAsB,SAASj5N,GAAG,IAAIC,EAAEq4I,EAAE,OAAO,WAAW,IAAI3kI,EAAE2kI,EAAEA,EAAEr4I,EAAE,IAAI,OAAOD,EAAEvK,MAAMJ,KAAKG,WAAxB,QAA2C8iJ,EAAE3kI,M,+BCjB7H,IAAIuB,EAAQjf,EAAQ,IAChB4H,EAAO5H,EAAQ,IACfijO,EAAQjjO,EAAQ,IAChBkjO,EAAcljO,EAAQ,IAS1B,SAASmjO,EAAeC,GACtB,IAAIv/N,EAAU,IAAIo/N,EAAMG,GACpB/lO,EAAWuK,EAAKq7N,EAAM1kO,UAAU8iB,QAASxd,GAQ7C,OALAob,EAAMnV,OAAOzM,EAAU4lO,EAAM1kO,UAAWsF,GAGxCob,EAAMnV,OAAOzM,EAAUwG,GAEhBxG,EAIT,IAAIgmO,EAAQF,EAtBGnjO,EAAQ,KAyBvBqjO,EAAMJ,MAAQA,EAGdI,EAAM1kO,OAAS,SAAgB2kO,GAC7B,OAAOH,EAAeD,EAAYG,EAAMzjN,SAAU0jN,KAIpDD,EAAMh/M,OAASrkB,EAAQ,IACvBqjO,EAAME,YAAcvjO,EAAQ,IAC5BqjO,EAAMG,SAAWxjO,EAAQ,IAGzBqjO,EAAMppG,IAAM,SAAawpG,GACvB,OAAOriO,QAAQ64H,IAAIwpG,IAErBJ,EAAMK,OAAS1jO,EAAQ,IAGvBqjO,EAAMM,aAAe3jO,EAAQ,IAE7BF,EAAOC,QAAUsjO,EAGjBvjO,EAAOC,QAAQspM,QAAUg6B,G,6BCrDzB,IAAIpkN,EAAQjf,EAAQ,IAChB6gB,EAAW7gB,EAAQ,IACnB4jO,EAAqB5jO,EAAQ,IAC7B6jO,EAAkB7jO,EAAQ,IAC1BkjO,EAAcljO,EAAQ,IAO1B,SAASijO,EAAMK,GACblkO,KAAKwgB,SAAW0jN,EAChBlkO,KAAK0kO,aAAe,CAClBziN,QAAS,IAAIuiN,EACbxhN,SAAU,IAAIwhN,GASlBX,EAAM1kO,UAAU8iB,QAAU,SAAiBH,GAGnB,kBAAXA,GACTA,EAAS3hB,UAAU,IAAM,IAClB6E,IAAM7E,UAAU,GAEvB2hB,EAASA,GAAU,IAGrBA,EAASgiN,EAAY9jO,KAAKwgB,SAAUsB,IAGzB/I,OACT+I,EAAO/I,OAAS+I,EAAO/I,OAAOxL,cACrBvN,KAAKwgB,SAASzH,OACvB+I,EAAO/I,OAAS/Y,KAAKwgB,SAASzH,OAAOxL,cAErCuU,EAAO/I,OAAS,MAIlB,IAAI4rN,EAAQ,CAACF,OAAiBliO,GAC1ByhB,EAAUhiB,QAAQR,QAAQsgB,GAU9B,IARA9hB,KAAK0kO,aAAaziN,QAAQlZ,SAAQ,SAAoC67N,GACpED,EAAM93N,QAAQ+3N,EAAYC,UAAWD,EAAYE,aAGnD9kO,KAAK0kO,aAAa1hN,SAASja,SAAQ,SAAkC67N,GACnED,EAAMxgO,KAAKygO,EAAYC,UAAWD,EAAYE,aAGzCH,EAAMnmO,QACXwlB,EAAUA,EAAQ/hB,KAAK0iO,EAAMplI,QAASolI,EAAMplI,SAG9C,OAAOv7E,GAGT6/M,EAAM1kO,UAAU4lO,OAAS,SAAgBjjN,GAEvC,OADAA,EAASgiN,EAAY9jO,KAAKwgB,SAAUsB,GAC7BL,EAASK,EAAO9c,IAAK8c,EAAO7c,OAAQ6c,EAAOhC,kBAAkB9U,QAAQ,MAAO,KAIrF6U,EAAM9W,QAAQ,CAAC,SAAU,MAAO,OAAQ,YAAY,SAA6BgQ,GAE/E8qN,EAAM1kO,UAAU4Z,GAAU,SAAS/T,EAAK8c,GACtC,OAAO9hB,KAAKiiB,QAAQ6hN,EAAYhiN,GAAU,GAAI,CAC5C/I,OAAQA,EACR/T,IAAKA,EACL2Z,MAAOmD,GAAU,IAAInD,YAK3BkB,EAAM9W,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BgQ,GAErE8qN,EAAM1kO,UAAU4Z,GAAU,SAAS/T,EAAK2Z,EAAMmD,GAC5C,OAAO9hB,KAAKiiB,QAAQ6hN,EAAYhiN,GAAU,GAAI,CAC5C/I,OAAQA,EACR/T,IAAKA,EACL2Z,KAAMA,SAKZje,EAAOC,QAAUkjO,G,6BC5FjB,IAAIhkN,EAAQjf,EAAQ,IAEpB,SAAS4jO,IACPxkO,KAAKua,SAAW,GAWlBiqN,EAAmBrlO,UAAU6lO,IAAM,SAAaH,EAAWC,GAKzD,OAJA9kO,KAAKua,SAASpW,KAAK,CACjB0gO,UAAWA,EACXC,SAAUA,IAEL9kO,KAAKua,SAAS/b,OAAS,GAQhCgmO,EAAmBrlO,UAAU8lO,MAAQ,SAAejxL,GAC9Ch0C,KAAKua,SAASy5B,KAChBh0C,KAAKua,SAASy5B,GAAM,OAYxBwwL,EAAmBrlO,UAAU4J,QAAU,SAAiB5G,GACtD0d,EAAM9W,QAAQ/I,KAAKua,UAAU,SAAwBI,GACzC,OAANA,GACFxY,EAAGwY,OAKTja,EAAOC,QAAU6jO,G,6BCjDjB,IAAI3kN,EAAQjf,EAAQ,IAChBskO,EAAgBtkO,EAAQ,IACxBwjO,EAAWxjO,EAAQ,IACnB4f,EAAW5f,EAAQ,IAKvB,SAASukO,EAA6BrjN,GAChCA,EAAOiC,aACTjC,EAAOiC,YAAYqhN,mBAUvB1kO,EAAOC,QAAU,SAAyBmhB,GA6BxC,OA5BAqjN,EAA6BrjN,GAG7BA,EAAOvB,QAAUuB,EAAOvB,SAAW,GAGnCuB,EAAOnD,KAAOumN,EACZpjN,EAAOnD,KACPmD,EAAOvB,QACPuB,EAAOjB,kBAITiB,EAAOvB,QAAUV,EAAMtV,MACrBuX,EAAOvB,QAAQe,QAAU,GACzBQ,EAAOvB,QAAQuB,EAAO/I,SAAW,GACjC+I,EAAOvB,SAGTV,EAAM9W,QACJ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,WAClD,SAA2BgQ,UAClB+I,EAAOvB,QAAQxH,OAIZ+I,EAAOrB,SAAWD,EAASC,SAE1BqB,GAAQ7f,MAAK,SAA6B+gB,GAUvD,OATAmiN,EAA6BrjN,GAG7BkB,EAASrE,KAAOumN,EACdliN,EAASrE,KACTqE,EAASzC,QACTuB,EAAOhB,mBAGFkC,KACN,SAA4BqiN,GAc7B,OAbKjB,EAASiB,KACZF,EAA6BrjN,GAGzBujN,GAAUA,EAAOriN,WACnBqiN,EAAOriN,SAASrE,KAAOumN,EACrBG,EAAOriN,SAASrE,KAChB0mN,EAAOriN,SAASzC,QAChBuB,EAAOhB,qBAKN9e,QAAQP,OAAO4jO,Q,6BC1E1B,IAAIxlN,EAAQjf,EAAQ,IAUpBF,EAAOC,QAAU,SAAuBge,EAAM4B,EAAS+kN,GAMrD,OAJAzlN,EAAM9W,QAAQu8N,GAAK,SAAmBnjO,GACpCwc,EAAOxc,EAAGwc,EAAM4B,MAGX5B,I,cCjBT,IAOI4mN,EACAC,EARA7kN,EAAUjgB,EAAOC,QAAU,GAU/B,SAAS8kO,IACL,MAAM,IAAIj6N,MAAM,mCAEpB,SAASk6N,IACL,MAAM,IAAIl6N,MAAM,qCAsBpB,SAASm6N,EAAWC,GAChB,GAAIL,IAAqBhuH,WAErB,OAAOA,WAAWquH,EAAK,GAG3B,IAAKL,IAAqBE,IAAqBF,IAAqBhuH,WAEhE,OADAguH,EAAmBhuH,WACZA,WAAWquH,EAAK,GAE3B,IAEI,OAAOL,EAAiBK,EAAK,GAC/B,MAAMxiO,GACJ,IAEI,OAAOmiO,EAAiBpkO,KAAK,KAAMykO,EAAK,GAC1C,MAAMxiO,GAEJ,OAAOmiO,EAAiBpkO,KAAKnB,KAAM4lO,EAAK,MAvCnD,WACG,IAEQL,EADsB,oBAAfhuH,WACYA,WAEAkuH,EAEzB,MAAOriO,GACLmiO,EAAmBE,EAEvB,IAEQD,EADwB,oBAAjBp9E,aACcA,aAEAs9E,EAE3B,MAAOtiO,GACLoiO,EAAqBE,GAjB5B,GAwED,IAEIG,EAFAtS,EAAQ,GACRuS,GAAW,EAEXC,GAAc,EAElB,SAASC,IACAF,GAAaD,IAGlBC,GAAW,EACPD,EAAarnO,OACb+0N,EAAQsS,EAAap/N,OAAO8sN,GAE5BwS,GAAc,EAEdxS,EAAM/0N,QACNynO,KAIR,SAASA,IACL,IAAIH,EAAJ,CAGA,IAAI/kN,EAAU4kN,EAAWK,GACzBF,GAAW,EAGX,IADA,IAAIrvN,EAAM88M,EAAM/0N,OACViY,GAAK,CAGP,IAFAovN,EAAetS,EACfA,EAAQ,KACCwS,EAAatvN,GACdovN,GACAA,EAAaE,GAAYG,MAGjCH,GAAc,EACdtvN,EAAM88M,EAAM/0N,OAEhBqnO,EAAe,KACfC,GAAW,EAnEf,SAAyBK,GACrB,GAAIX,IAAuBp9E,aAEvB,OAAOA,aAAa+9E,GAGxB,IAAKX,IAAuBE,IAAwBF,IAAuBp9E,aAEvE,OADAo9E,EAAqBp9E,aACdA,aAAa+9E,GAExB,IAEWX,EAAmBW,GAC5B,MAAO/iO,GACL,IAEI,OAAOoiO,EAAmBrkO,KAAK,KAAMglO,GACvC,MAAO/iO,GAGL,OAAOoiO,EAAmBrkO,KAAKnB,KAAMmmO,KAgD7CC,CAAgBrlN,IAiBpB,SAASslN,EAAKT,EAAKj2M,GACf3vB,KAAK4lO,IAAMA,EACX5lO,KAAK2vB,MAAQA,EAYjB,SAAS7nB,KA5BT6Y,EAAQ2lN,SAAW,SAAUV,GACzB,IAAIvjO,EAAO,IAAIU,MAAM5C,UAAU3B,OAAS,GACxC,GAAI2B,UAAU3B,OAAS,EACnB,IAAK,IAAID,EAAI,EAAGA,EAAI4B,UAAU3B,OAAQD,IAClC8D,EAAK9D,EAAI,GAAK4B,UAAU5B,GAGhCg1N,EAAMpvN,KAAK,IAAIkiO,EAAKT,EAAKvjO,IACJ,IAAjBkxN,EAAM/0N,QAAiBsnO,GACvBH,EAAWM,IASnBI,EAAKlnO,UAAU+mO,IAAM,WACjBlmO,KAAK4lO,IAAIxlO,MAAM,KAAMJ,KAAK2vB,QAE9BhP,EAAQ4lN,MAAQ,UAChB5lN,EAAQ6lN,SAAU,EAClB7lN,EAAQu/H,IAAM,GACdv/H,EAAQ8lN,KAAO,GACf9lN,EAAQsa,QAAU,GAClBta,EAAQ+lN,SAAW,GAInB/lN,EAAQnG,GAAK1S,EACb6Y,EAAQgmN,YAAc7+N,EACtB6Y,EAAQk5I,KAAO/xJ,EACf6Y,EAAQjG,IAAM5S,EACd6Y,EAAQimN,eAAiB9+N,EACzB6Y,EAAQkmN,mBAAqB/+N,EAC7B6Y,EAAQmmN,KAAOh/N,EACf6Y,EAAQomN,gBAAkBj/N,EAC1B6Y,EAAQqmN,oBAAsBl/N,EAE9B6Y,EAAQpS,UAAY,SAAU/J,GAAQ,MAAO,IAE7Cmc,EAAQu7F,QAAU,SAAU13G,GACxB,MAAM,IAAIgH,MAAM,qCAGpBmV,EAAQsmN,IAAM,WAAc,MAAO,KACnCtmN,EAAQumN,MAAQ,SAAUjlM,GACtB,MAAM,IAAIz2B,MAAM,mCAEpBmV,EAAQwmN,MAAQ,WAAa,OAAO,I,6BCrLpC,IAAItnN,EAAQjf,EAAQ,IAEpBF,EAAOC,QAAU,SAA6B4f,EAAS6mN,GACrDvnN,EAAM9W,QAAQwX,GAAS,SAAuB9gB,EAAO+E,GAC/CA,IAAS4iO,GAAkB5iO,EAAK+Z,gBAAkB6oN,EAAe7oN,gBACnEgC,EAAQ6mN,GAAkB3nO,SACnB8gB,EAAQ/b,S,6BCNrB,IAAIqd,EAAcjhB,EAAQ,IAS1BF,EAAOC,QAAU,SAAgBa,EAASC,EAAQuhB,GAChD,IAAI5B,EAAiB4B,EAASlB,OAAOV,eAChC4B,EAAS3B,QAAWD,IAAkBA,EAAe4B,EAAS3B,QAGjE5f,EAAOogB,EACL,mCAAqCmB,EAAS3B,OAC9C2B,EAASlB,OACT,KACAkB,EAASf,QACTe,IAPFxhB,EAAQwhB,K,6BCFZtiB,EAAOC,QAAU,SAAsBmB,EAAOggB,EAAQuC,EAAMpC,EAASe,GA4BnE,OA3BAlhB,EAAMggB,OAASA,EACXuC,IACFviB,EAAMuiB,KAAOA,GAGfviB,EAAMmgB,QAAUA,EAChBngB,EAAMkhB,SAAWA,EACjBlhB,EAAMyiO,cAAe,EAErBziO,EAAMizC,OAAS,WACb,MAAO,CAELxpC,QAASvL,KAAKuL,QACd/G,KAAMxE,KAAKwE,KAEX6iO,YAAarnO,KAAKqnO,YAClB/8E,OAAQtqJ,KAAKsqJ,OAEbg9E,SAAUtnO,KAAKsnO,SACfC,WAAYvnO,KAAKunO,WACjBC,aAAcxnO,KAAKwnO,aACnB/4B,MAAOzuM,KAAKyuM,MAEZ3sL,OAAQ9hB,KAAK8hB,OACbuC,KAAMrkB,KAAKqkB,OAGRviB,I,6BCtCT,IAAI+d,EAAQjf,EAAQ,IAEpBF,EAAOC,QACLkf,EAAM3V,uBAIK,CACLunL,MAAO,SAAejtL,EAAM/E,EAAOgoO,EAAS1iO,EAAM2iO,EAAQC,GACxD,IAAIC,EAAS,GACbA,EAAOzjO,KAAKK,EAAO,IAAMsa,mBAAmBrf,IAExCogB,EAAMnW,SAAS+9N,IACjBG,EAAOzjO,KAAK,WAAa,IAAI8S,KAAKwwN,GAASI,eAGzChoN,EAAMpW,SAAS1E,IACjB6iO,EAAOzjO,KAAK,QAAUY,GAGpB8a,EAAMpW,SAASi+N,IACjBE,EAAOzjO,KAAK,UAAYujO,IAGX,IAAXC,GACFC,EAAOzjO,KAAK,UAGdmG,SAASs9N,OAASA,EAAO96N,KAAK,OAGhC4W,KAAM,SAAclf,GAClB,IAAIoB,EAAQ0E,SAASs9N,OAAOhiO,MAAM,IAAIqX,OAAO,aAAezY,EAAO,cACnE,OAAQoB,EAAQ+xG,mBAAmB/xG,EAAM,IAAM,MAGjDmuC,OAAQ,SAAgBvvC,GACtBxE,KAAKyxL,MAAMjtL,EAAM,GAAIyS,KAAKyuG,MAAQ,SAO/B,CACL+rE,MAAO,aACP/tK,KAAM,WAAkB,OAAO,MAC/BqwB,OAAQ,e,6BC/ChB,IAAI+zL,EAAgBlnO,EAAQ,IACxBmnO,EAAcnnO,EAAQ,IAW1BF,EAAOC,QAAU,SAAuB8hB,EAASulN,GAC/C,OAAIvlN,IAAYqlN,EAAcE,GACrBD,EAAYtlN,EAASulN,GAEvBA,I,6BCVTtnO,EAAOC,QAAU,SAAuBqE,GAItC,MAAO,gCAAgCqR,KAAKrR,K,6BCH9CtE,EAAOC,QAAU,SAAqB8hB,EAASwlN,GAC7C,OAAOA,EACHxlN,EAAQzX,QAAQ,OAAQ,IAAM,IAAMi9N,EAAYj9N,QAAQ,OAAQ,IAChEyX,I,6BCVN,IAAI5C,EAAQjf,EAAQ,IAIhBsnO,EAAoB,CACtB,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,cAgB5BxnO,EAAOC,QAAU,SAAsB4f,GACrC,IACIxhB,EACA2J,EACAnK,EAHA4pO,EAAS,GAKb,OAAK5nN,GAELV,EAAM9W,QAAQwX,EAAQlU,MAAM,OAAO,SAAgBoqC,GAKjD,GAJAl4C,EAAIk4C,EAAKjpC,QAAQ,KACjBzO,EAAM8gB,EAAM/U,KAAK2rC,EAAK1pC,OAAO,EAAGxO,IAAIgP,cACpC7E,EAAMmX,EAAM/U,KAAK2rC,EAAK1pC,OAAOxO,EAAI,IAE7BQ,EAAK,CACP,GAAIopO,EAAOppO,IAAQmpO,EAAkB16N,QAAQzO,IAAQ,EACnD,OAGAopO,EAAOppO,GADG,eAARA,GACaopO,EAAOppO,GAAOopO,EAAOppO,GAAO,IAAI0H,OAAO,CAACiC,IAEzCy/N,EAAOppO,GAAOopO,EAAOppO,GAAO,KAAO2J,EAAMA,MAKtDy/N,GAnBgBA,I,6BC9BzB,IAAItoN,EAAQjf,EAAQ,IAEpBF,EAAOC,QACLkf,EAAM3V,uBAIH,WACC,IAEIk+N,EAFAC,EAAO,kBAAkBhyN,KAAKlM,UAAU6F,WACxCs4N,EAAiBh+N,SAASgF,cAAc,KAS5C,SAASknG,EAAWxxG,GAClB,IAAIyN,EAAOzN,EAWX,OATIqjO,IAEFC,EAAergN,aAAa,OAAQxV,GACpCA,EAAO61N,EAAe71N,MAGxB61N,EAAergN,aAAa,OAAQxV,GAG7B,CACLA,KAAM61N,EAAe71N,KACrB81N,SAAUD,EAAeC,SAAWD,EAAeC,SAASv9N,QAAQ,KAAM,IAAM,GAChFw9N,KAAMF,EAAeE,KACrB76N,OAAQ26N,EAAe36N,OAAS26N,EAAe36N,OAAO3C,QAAQ,MAAO,IAAM,GAC3E4C,KAAM06N,EAAe16N,KAAO06N,EAAe16N,KAAK5C,QAAQ,KAAM,IAAM,GACpEy9N,SAAUH,EAAeG,SACzBC,KAAMJ,EAAeI,KACrBvjO,SAAiD,MAAtCmjO,EAAenjO,SAASuG,OAAO,GACxC48N,EAAenjO,SACf,IAAMmjO,EAAenjO,UAY3B,OARAijO,EAAY5xH,EAAWnsG,OAAOxF,SAAS4N,MAQhC,SAAyBk2N,GAC9B,IAAIR,EAAUtoN,EAAMpW,SAASk/N,GAAenyH,EAAWmyH,GAAcA,EACrE,OAAQR,EAAOI,WAAaH,EAAUG,UAClCJ,EAAOK,OAASJ,EAAUI,MAhDjC,GAsDQ,WACL,OAAO,I,6BC9Df,IAAIvjN,EAASrkB,EAAQ,IAQrB,SAASujO,EAAYyE,GACnB,GAAwB,oBAAbA,EACT,MAAM,IAAIzqO,UAAU,gCAGtB,IAAI0qO,EACJ7oO,KAAKgkB,QAAU,IAAIhiB,SAAQ,SAAyBR,GAClDqnO,EAAiBrnO,KAGnB,IAAIud,EAAQ/e,KACZ4oO,GAAS,SAAgBr9N,GACnBwT,EAAMsmN,SAKVtmN,EAAMsmN,OAAS,IAAIpgN,EAAO1Z,GAC1Bs9N,EAAe9pN,EAAMsmN,YAOzBlB,EAAYhlO,UAAUimO,iBAAmB,WACvC,GAAIplO,KAAKqlO,OACP,MAAMrlO,KAAKqlO,QAQflB,EAAY57N,OAAS,WACnB,IAAI0b,EAIJ,MAAO,CACLlF,MAJU,IAAIolN,GAAY,SAAkB7lN,GAC5C2F,EAAS3F,KAIT2F,OAAQA,IAIZvjB,EAAOC,QAAUwjO,G,6BClCjBzjO,EAAOC,QAAU,SAAgBkO,GAC/B,OAAO,SAAchL,GACnB,OAAOgL,EAASzO,MAAM,KAAMyD,M,6BChBhCnD,EAAOC,QAAU,SAAsB8tN,GACrC,MAA2B,kBAAZA,IAAmD,IAAzBA,EAAQ8V,e,8BCTnD,YAUA,IAAIj4D,EAAS1rK,EAAQ,IACjBkoO,EAAUloO,EAAQ,IAClBoC,EAAUpC,EAAQ,IAmDtB,SAASmoO,IACP,OAAOvwF,EAAOwwF,oBACV,WACA,WAGN,SAASv1K,EAAcw1K,EAAMzqO,GAC3B,GAAIuqO,IAAevqO,EACjB,MAAM,IAAI0qO,WAAW,8BAcvB,OAZI1wF,EAAOwwF,qBAETC,EAAO,IAAIh1K,WAAWz1D,IACjBiC,UAAY+3I,EAAOr5I,WAGX,OAAT8pO,IACFA,EAAO,IAAIzwF,EAAOh6I,IAEpByqO,EAAKzqO,OAASA,GAGTyqO,EAaT,SAASzwF,EAAQ52I,EAAKunO,EAAkB3qO,GACtC,IAAKg6I,EAAOwwF,uBAAyBhpO,gBAAgBw4I,GACnD,OAAO,IAAIA,EAAO52I,EAAKunO,EAAkB3qO,GAI3C,GAAmB,kBAARoD,EAAkB,CAC3B,GAAgC,kBAArBunO,EACT,MAAM,IAAI39N,MACR,qEAGJ,OAAO49N,EAAYppO,KAAM4B,GAE3B,OAAOsK,EAAKlM,KAAM4B,EAAKunO,EAAkB3qO,GAW3C,SAAS0N,EAAM+8N,EAAMxpO,EAAO0pO,EAAkB3qO,GAC5C,GAAqB,kBAAViB,EACT,MAAM,IAAItB,UAAU,yCAGtB,MAA2B,qBAAhBmL,aAA+B7J,aAAiB6J,YA6H7D,SAA0B2/N,EAAMt5M,EAAO20G,EAAY9lI,GAGjD,GAFAmxB,EAAMkqG,WAEFyK,EAAa,GAAK30G,EAAMkqG,WAAayK,EACvC,MAAM,IAAI4kG,WAAW,6BAGvB,GAAIv5M,EAAMkqG,WAAayK,GAAc9lI,GAAU,GAC7C,MAAM,IAAI0qO,WAAW,6BAIrBv5M,OADiBptB,IAAf+hI,QAAuC/hI,IAAX/D,EACtB,IAAIy1D,WAAWtkC,QACHptB,IAAX/D,EACD,IAAIy1D,WAAWtkC,EAAO20G,GAEtB,IAAIrwE,WAAWtkC,EAAO20G,EAAY9lI,GAGxCg6I,EAAOwwF,qBAETC,EAAOt5M,GACFlvB,UAAY+3I,EAAOr5I,UAGxB8pO,EAAOI,EAAcJ,EAAMt5M,GAE7B,OAAOs5M,EAvJEK,CAAgBL,EAAMxpO,EAAO0pO,EAAkB3qO,GAGnC,kBAAViB,EAwFb,SAAqBwpO,EAAMroL,EAAQpmB,GACT,kBAAbA,GAAsC,KAAbA,IAClCA,EAAW,QAGb,IAAKg+G,EAAO+wF,WAAW/uM,GACrB,MAAM,IAAIr8B,UAAU,8CAGtB,IAAIK,EAAwC,EAA/Bq7H,EAAWj5E,EAAQpmB,GAG5BgvM,GAFJP,EAAOx1K,EAAaw1K,EAAMzqO,IAERizL,MAAM7wI,EAAQpmB,GAE5BgvM,IAAWhrO,IAIbyqO,EAAOA,EAAKx+N,MAAM,EAAG++N,IAGvB,OAAOP,EA5GEQ,CAAWR,EAAMxpO,EAAO0pO,GAsJnC,SAAqBF,EAAMxmO,GACzB,GAAI+1I,EAAOtvI,SAASzG,GAAM,CACxB,IAAIgU,EAA4B,EAAtB+4L,EAAQ/sM,EAAIjE,QAGtB,OAAoB,KAFpByqO,EAAOx1K,EAAaw1K,EAAMxyN,IAEjBjY,QAITiE,EAAI04B,KAAK8tM,EAAM,EAAG,EAAGxyN,GAHZwyN,EAOX,GAAIxmO,EAAK,CACP,GAA4B,qBAAhB6G,aACR7G,EAAI+G,kBAAkBF,aAAgB,WAAY7G,EACpD,MAA0B,kBAAfA,EAAIjE,SA+8CLkK,EA/8CkCjG,EAAIjE,UAg9CrCkK,EA/8CF+qD,EAAaw1K,EAAM,GAErBI,EAAcJ,EAAMxmO,GAG7B,GAAiB,WAAbA,EAAIwjB,MAAqBjjB,EAAQP,EAAIkc,MACvC,OAAO0qN,EAAcJ,EAAMxmO,EAAIkc,MAw8CrC,IAAgBjW,EAp8Cd,MAAM,IAAIvK,UAAU,sFA9KburO,CAAWT,EAAMxpO,GA4B1B,SAASkqO,EAAYrgN,GACnB,GAAoB,kBAATA,EACT,MAAM,IAAInrB,UAAU,oCACf,GAAImrB,EAAO,EAChB,MAAM,IAAI4/M,WAAW,wCA4BzB,SAASE,EAAaH,EAAM3/M,GAG1B,GAFAqgN,EAAWrgN,GACX2/M,EAAOx1K,EAAaw1K,EAAM3/M,EAAO,EAAI,EAAoB,EAAhBkmL,EAAQlmL,KAC5CkvH,EAAOwwF,oBACV,IAAK,IAAIzqO,EAAI,EAAGA,EAAI+qB,IAAQ/qB,EAC1B0qO,EAAK1qO,GAAK,EAGd,OAAO0qO,EAwCT,SAASI,EAAeJ,EAAMt5M,GAC5B,IAAInxB,EAASmxB,EAAMnxB,OAAS,EAAI,EAA4B,EAAxBgxM,EAAQ7/K,EAAMnxB,QAClDyqO,EAAOx1K,EAAaw1K,EAAMzqO,GAC1B,IAAK,IAAID,EAAI,EAAGA,EAAIC,EAAQD,GAAK,EAC/B0qO,EAAK1qO,GAAgB,IAAXoxB,EAAMpxB,GAElB,OAAO0qO,EA+DT,SAASz5B,EAAShxM,GAGhB,GAAIA,GAAUuqO,IACZ,MAAM,IAAIG,WAAW,0DACaH,IAAatgO,SAAS,IAAM,UAEhE,OAAgB,EAATjK,EAsFT,SAASq7H,EAAYj5E,EAAQpmB,GAC3B,GAAIg+G,EAAOtvI,SAAS03C,GAClB,OAAOA,EAAOpiD,OAEhB,GAA2B,qBAAhB8K,aAA6D,oBAAvBA,YAAYC,SACxDD,YAAYC,OAAOq3C,IAAWA,aAAkBt3C,aACnD,OAAOs3C,EAAOi5E,WAEM,kBAAXj5E,IACTA,EAAS,GAAKA,GAGhB,IAAInqC,EAAMmqC,EAAOpiD,OACjB,GAAY,IAARiY,EAAW,OAAO,EAItB,IADA,IAAImzN,GAAc,IAEhB,OAAQpvM,GACN,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAO/jB,EACT,IAAK,OACL,IAAK,QACL,UAAKlU,EACH,OAAOsnO,EAAYjpL,GAAQpiD,OAC7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAa,EAANiY,EACT,IAAK,MACH,OAAOA,IAAQ,EACjB,IAAK,SACH,OAAOqzN,EAAclpL,GAAQpiD,OAC/B,QACE,GAAIorO,EAAa,OAAOC,EAAYjpL,GAAQpiD,OAC5Cg8B,GAAY,GAAKA,GAAUjtB,cAC3Bq8N,GAAc,GAMtB,SAASG,EAAcvvM,EAAUkc,EAAOzvC,GACtC,IAAI2iO,GAAc,EAclB,SALcrnO,IAAVm0C,GAAuBA,EAAQ,KACjCA,EAAQ,GAINA,EAAQ12C,KAAKxB,OACf,MAAO,GAOT,SAJY+D,IAAR0E,GAAqBA,EAAMjH,KAAKxB,UAClCyI,EAAMjH,KAAKxB,QAGTyI,GAAO,EACT,MAAO,GAOT,IAHAA,KAAS,KACTyvC,KAAW,GAGT,MAAO,GAKT,IAFKlc,IAAUA,EAAW,UAGxB,OAAQA,GACN,IAAK,MACH,OAAOwvM,EAAShqO,KAAM02C,EAAOzvC,GAE/B,IAAK,OACL,IAAK,QACH,OAAOgjO,EAAUjqO,KAAM02C,EAAOzvC,GAEhC,IAAK,QACH,OAAOijO,EAAWlqO,KAAM02C,EAAOzvC,GAEjC,IAAK,SACL,IAAK,SACH,OAAOkjO,EAAYnqO,KAAM02C,EAAOzvC,GAElC,IAAK,SACH,OAAOmjO,EAAYpqO,KAAM02C,EAAOzvC,GAElC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOojO,EAAarqO,KAAM02C,EAAOzvC,GAEnC,QACE,GAAI2iO,EAAa,MAAM,IAAIzrO,UAAU,qBAAuBq8B,GAC5DA,GAAYA,EAAW,IAAIjtB,cAC3Bq8N,GAAc,GAStB,SAASU,EAAM1/N,EAAGzH,EAAGoa,GACnB,IAAIhf,EAAIqM,EAAEzH,GACVyH,EAAEzH,GAAKyH,EAAE2S,GACT3S,EAAE2S,GAAKhf,EAmIT,SAASgsO,EAAsB/gO,EAAQd,EAAK47H,EAAY9pG,EAAUyH,GAEhE,GAAsB,IAAlBz4B,EAAOhL,OAAc,OAAQ,EAmBjC,GAhB0B,kBAAf8lI,GACT9pG,EAAW8pG,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,GAAc,aACvBA,GAAc,YAEhBA,GAAcA,EACVp/E,MAAMo/E,KAERA,EAAariG,EAAM,EAAKz4B,EAAOhL,OAAS,GAItC8lI,EAAa,IAAGA,EAAa96H,EAAOhL,OAAS8lI,GAC7CA,GAAc96H,EAAOhL,OAAQ,CAC/B,GAAIyjC,EAAK,OAAQ,EACZqiG,EAAa96H,EAAOhL,OAAS,OAC7B,GAAI8lI,EAAa,EAAG,CACzB,IAAIriG,EACC,OAAQ,EADJqiG,EAAa,EAUxB,GALmB,kBAAR57H,IACTA,EAAM8vI,EAAOtsI,KAAKxD,EAAK8xB,IAIrBg+G,EAAOtvI,SAASR,GAElB,OAAmB,IAAfA,EAAIlK,QACE,EAEHgsO,EAAahhO,EAAQd,EAAK47H,EAAY9pG,EAAUyH,GAClD,GAAmB,kBAARv5B,EAEhB,OADAA,GAAY,IACR8vI,EAAOwwF,qBACiC,oBAAjC/0K,WAAW90D,UAAUqO,QAC1By0B,EACKgyB,WAAW90D,UAAUqO,QAAQrM,KAAKqI,EAAQd,EAAK47H,GAE/CrwE,WAAW90D,UAAUmV,YAAYnT,KAAKqI,EAAQd,EAAK47H,GAGvDkmG,EAAahhO,EAAQ,CAAEd,GAAO47H,EAAY9pG,EAAUyH,GAG7D,MAAM,IAAI9jC,UAAU,wCAGtB,SAASqsO,EAAc3mO,EAAK6E,EAAK47H,EAAY9pG,EAAUyH,GACrD,IA0BI1jC,EA1BAksO,EAAY,EACZC,EAAY7mO,EAAIrF,OAChBmsO,EAAYjiO,EAAIlK,OAEpB,QAAiB+D,IAAbi4B,IAEe,UADjBA,EAAWjjB,OAAOijB,GAAUjtB,gBACY,UAAbitB,GACV,YAAbA,GAAuC,aAAbA,GAAyB,CACrD,GAAI32B,EAAIrF,OAAS,GAAKkK,EAAIlK,OAAS,EACjC,OAAQ,EAEVisO,EAAY,EACZC,GAAa,EACbC,GAAa,EACbrmG,GAAc,EAIlB,SAAS5gH,EAAMknN,EAAKrsO,GAClB,OAAkB,IAAdksO,EACKG,EAAIrsO,GAEJqsO,EAAIC,aAAatsO,EAAIksO,GAKhC,GAAIxoM,EAAK,CACP,IAAI6oM,GAAc,EAClB,IAAKvsO,EAAI+lI,EAAY/lI,EAAImsO,EAAWnsO,IAClC,GAAImlB,EAAK7f,EAAKtF,KAAOmlB,EAAKhb,GAAqB,IAAhBoiO,EAAoB,EAAIvsO,EAAIusO,IAEzD,IADoB,IAAhBA,IAAmBA,EAAavsO,GAChCA,EAAIusO,EAAa,IAAMH,EAAW,OAAOG,EAAaL,OAEtC,IAAhBK,IAAmBvsO,GAAKA,EAAIusO,GAChCA,GAAc,OAKlB,IADIxmG,EAAaqmG,EAAYD,IAAWpmG,EAAaomG,EAAYC,GAC5DpsO,EAAI+lI,EAAY/lI,GAAK,EAAGA,IAAK,CAEhC,IADA,IAAIwsO,GAAQ,EACH5rN,EAAI,EAAGA,EAAIwrN,EAAWxrN,IAC7B,GAAIuE,EAAK7f,EAAKtF,EAAI4gB,KAAOuE,EAAKhb,EAAKyW,GAAI,CACrC4rN,GAAQ,EACR,MAGJ,GAAIA,EAAO,OAAOxsO,EAItB,OAAQ,EAeV,SAASysO,EAAUJ,EAAKhqL,EAAQnjC,EAAQjf,GACtCif,EAAS2I,OAAO3I,IAAW,EAC3B,IAAI6uI,EAAYs+E,EAAIpsO,OAASif,EACxBjf,GAGHA,EAAS4nB,OAAO5nB,IACH8tJ,IACX9tJ,EAAS8tJ,GAJX9tJ,EAAS8tJ,EASX,IAAI2+E,EAASrqL,EAAOpiD,OACpB,GAAIysO,EAAS,IAAM,EAAG,MAAM,IAAI9sO,UAAU,sBAEtCK,EAASysO,EAAS,IACpBzsO,EAASysO,EAAS,GAEpB,IAAK,IAAI1sO,EAAI,EAAGA,EAAIC,IAAUD,EAAG,CAC/B,IAAI4pO,EAASpnL,SAASH,EAAO7zC,OAAW,EAAJxO,EAAO,GAAI,IAC/C,GAAI2mD,MAAMijL,GAAS,OAAO5pO,EAC1BqsO,EAAIntN,EAASlf,GAAK4pO,EAEpB,OAAO5pO,EAGT,SAAS2sO,EAAWN,EAAKhqL,EAAQnjC,EAAQjf,GACvC,OAAO2sO,EAAWtB,EAAYjpL,EAAQgqL,EAAIpsO,OAASif,GAASmtN,EAAKntN,EAAQjf,GAG3E,SAAS4sO,EAAYR,EAAKhqL,EAAQnjC,EAAQjf,GACxC,OAAO2sO,EAq6BT,SAAuBpgO,GAErB,IADA,IAAIw5J,EAAY,GACPhmK,EAAI,EAAGA,EAAIwM,EAAIvM,SAAUD,EAEhCgmK,EAAUpgK,KAAyB,IAApB4G,EAAII,WAAW5M,IAEhC,OAAOgmK,EA36BW8mE,CAAazqL,GAASgqL,EAAKntN,EAAQjf,GAGvD,SAAS8sO,EAAaV,EAAKhqL,EAAQnjC,EAAQjf,GACzC,OAAO4sO,EAAWR,EAAKhqL,EAAQnjC,EAAQjf,GAGzC,SAAS+sO,EAAaX,EAAKhqL,EAAQnjC,EAAQjf,GACzC,OAAO2sO,EAAWrB,EAAclpL,GAASgqL,EAAKntN,EAAQjf,GAGxD,SAASgtO,EAAWZ,EAAKhqL,EAAQnjC,EAAQjf,GACvC,OAAO2sO,EAk6BT,SAAyBpgO,EAAKsnE,GAG5B,IAFA,IAAI/zD,EAAG83M,EAAIqV,EACPlnE,EAAY,GACPhmK,EAAI,EAAGA,EAAIwM,EAAIvM,WACjB6zE,GAAS,GAAK,KADa9zE,EAIhC63N,GADA93M,EAAIvT,EAAII,WAAW5M,KACT,EACVktO,EAAKntN,EAAI,IACTimJ,EAAUpgK,KAAKsnO,GACflnE,EAAUpgK,KAAKiyN,GAGjB,OAAO7xD,EA/6BWmnE,CAAe9qL,EAAQgqL,EAAIpsO,OAASif,GAASmtN,EAAKntN,EAAQjf,GAkF9E,SAAS4rO,EAAaQ,EAAKl0L,EAAOzvC,GAChC,OAAc,IAAVyvC,GAAezvC,IAAQ2jO,EAAIpsO,OACtB8tK,EAAOq/D,cAAcf,GAErBt+D,EAAOq/D,cAAcf,EAAIngO,MAAMisC,EAAOzvC,IAIjD,SAASgjO,EAAWW,EAAKl0L,EAAOzvC,GAC9BA,EAAM6J,KAAKiE,IAAI61N,EAAIpsO,OAAQyI,GAI3B,IAHA,IAAIiW,EAAM,GAEN3e,EAAIm4C,EACDn4C,EAAI0I,GAAK,CACd,IAQM2kO,EAAYC,EAAWC,EAAYC,EARrCC,EAAYpB,EAAIrsO,GAChB0tO,EAAY,KACZC,EAAoBF,EAAY,IAAQ,EACvCA,EAAY,IAAQ,EACpBA,EAAY,IAAQ,EACrB,EAEJ,GAAIztO,EAAI2tO,GAAoBjlO,EAG1B,OAAQilO,GACN,KAAK,EACCF,EAAY,MACdC,EAAYD,GAEd,MACF,KAAK,EAEyB,OAAV,KADlBJ,EAAahB,EAAIrsO,EAAI,OAEnBwtO,GAA6B,GAAZC,IAAqB,EAAoB,GAAbJ,GACzB,MAClBK,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAahB,EAAIrsO,EAAI,GACrBstO,EAAYjB,EAAIrsO,EAAI,GACQ,OAAV,IAAbqtO,IAAsD,OAAV,IAAZC,KACnCE,GAA6B,GAAZC,IAAoB,IAAoB,GAAbJ,IAAsB,EAAmB,GAAZC,GACrD,OAAUE,EAAgB,OAAUA,EAAgB,SACtEE,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAahB,EAAIrsO,EAAI,GACrBstO,EAAYjB,EAAIrsO,EAAI,GACpButO,EAAalB,EAAIrsO,EAAI,GACO,OAAV,IAAbqtO,IAAsD,OAAV,IAAZC,IAAsD,OAAV,IAAbC,KAClEC,GAA6B,GAAZC,IAAoB,IAAqB,GAAbJ,IAAsB,IAAmB,GAAZC,IAAqB,EAAoB,GAAbC,GAClF,OAAUC,EAAgB,UAC5CE,EAAYF,GAMJ,OAAdE,GAGFA,EAAY,MACZC,EAAmB,GACVD,EAAY,QAErBA,GAAa,MACb/uN,EAAI/Y,KAAK8nO,IAAc,GAAK,KAAQ,OACpCA,EAAY,MAAqB,KAAZA,GAGvB/uN,EAAI/Y,KAAK8nO,GACT1tO,GAAK2tO,EAGP,OAQF,SAAgCC,GAC9B,IAAI11N,EAAM01N,EAAW3tO,OACrB,GAAIiY,GAAO21N,EACT,OAAO70N,OAAOG,aAAatX,MAAMmX,OAAQ40N,GAI3C,IAAIjvN,EAAM,GACN3e,EAAI,EACR,KAAOA,EAAIkY,GACTyG,GAAO3F,OAAOG,aAAatX,MACzBmX,OACA40N,EAAW1hO,MAAMlM,EAAGA,GAAK6tO,IAG7B,OAAOlvN,EAvBAmvN,CAAsBnvN,GA98B/Bvc,EAAQ63I,OAASA,EACjB73I,EAAQ2rO,WAoTR,SAAqB9tO,IACdA,GAAUA,IACbA,EAAS,GAEX,OAAOg6I,EAAO+zF,OAAO/tO,IAvTvBmC,EAAQ6rO,kBAAoB,GA0B5Bh0F,EAAOwwF,yBAAqDzmO,IAA/B8X,EAAO2uN,oBAChC3uN,EAAO2uN,oBAQX,WACE,IACE,IAAInlO,EAAM,IAAIowD,WAAW,GAEzB,OADApwD,EAAIpD,UAAY,CAACA,UAAWwzD,WAAW90D,UAAWstO,IAAK,WAAc,OAAO,KACvD,KAAd5oO,EAAI4oO,OACiB,oBAAjB5oO,EAAIuwD,UACuB,IAAlCvwD,EAAIuwD,SAAS,EAAG,GAAGylE,WACvB,MAAOz2H,GACP,OAAO,GAfPspO,GAKJ/rO,EAAQooO,WAAaA,IAkErBvwF,EAAOm0F,SAAW,KAGlBn0F,EAAOo0F,SAAW,SAAU/oO,GAE1B,OADAA,EAAIpD,UAAY+3I,EAAOr5I,UAChB0E,GA2BT20I,EAAOtsI,KAAO,SAAUzM,EAAO0pO,EAAkB3qO,GAC/C,OAAO0N,EAAK,KAAMzM,EAAO0pO,EAAkB3qO,IAGzCg6I,EAAOwwF,sBACTxwF,EAAOr5I,UAAUsB,UAAYwzD,WAAW90D,UACxCq5I,EAAO/3I,UAAYwzD,WACG,qBAAXpxD,QAA0BA,OAAOgqO,SACxCr0F,EAAO31I,OAAOgqO,WAAar0F,GAE7B35I,OAAOC,eAAe05I,EAAQ31I,OAAOgqO,QAAS,CAC5CptO,MAAO,KACPd,cAAc,KAiCpB65I,EAAO+zF,MAAQ,SAAUjjN,EAAM4nG,EAAM12F,GACnC,OArBF,SAAgByuM,EAAM3/M,EAAM4nG,EAAM12F,GAEhC,OADAmvM,EAAWrgN,GACPA,GAAQ,EACHmqC,EAAaw1K,EAAM3/M,QAEf/mB,IAAT2uH,EAIyB,kBAAb12F,EACVi5B,EAAaw1K,EAAM3/M,GAAM4nG,KAAKA,EAAM12F,GACpCi5B,EAAaw1K,EAAM3/M,GAAM4nG,KAAKA,GAE7Bz9D,EAAaw1K,EAAM3/M,GAQnBijN,CAAM,KAAMjjN,EAAM4nG,EAAM12F,IAiBjCg+G,EAAO4wF,YAAc,SAAU9/M,GAC7B,OAAO8/M,EAAY,KAAM9/M,IAK3BkvH,EAAOs0F,gBAAkB,SAAUxjN,GACjC,OAAO8/M,EAAY,KAAM9/M,IAiH3BkvH,EAAOtvI,SAAW,SAAmB0B,GACnC,QAAe,MAALA,IAAaA,EAAEmiO,YAG3Bv0F,EAAO4uD,QAAU,SAAkBz8L,EAAGC,GACpC,IAAK4tI,EAAOtvI,SAASyB,KAAO6tI,EAAOtvI,SAAS0B,GAC1C,MAAM,IAAIzM,UAAU,6BAGtB,GAAIwM,IAAMC,EAAG,OAAO,EAKpB,IAHA,IAAIkR,EAAInR,EAAEnM,OACNud,EAAInR,EAAEpM,OAEDD,EAAI,EAAGkY,EAAM3F,KAAKiE,IAAI+G,EAAGC,GAAIxd,EAAIkY,IAAOlY,EAC/C,GAAIoM,EAAEpM,KAAOqM,EAAErM,GAAI,CACjBud,EAAInR,EAAEpM,GACNwd,EAAInR,EAAErM,GACN,MAIJ,OAAIud,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,GAGT08H,EAAO+wF,WAAa,SAAqB/uM,GACvC,OAAQjjB,OAAOijB,GAAUjtB,eACvB,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO,EACT,QACE,OAAO,IAIbirI,EAAO/xI,OAAS,SAAiBmF,EAAMpN,GACrC,IAAKwE,EAAQ4I,GACX,MAAM,IAAIzN,UAAU,+CAGtB,GAAoB,IAAhByN,EAAKpN,OACP,OAAOg6I,EAAO+zF,MAAM,GAGtB,IAAIhuO,EACJ,QAAegE,IAAX/D,EAEF,IADAA,EAAS,EACJD,EAAI,EAAGA,EAAIqN,EAAKpN,SAAUD,EAC7BC,GAAUoN,EAAKrN,GAAGC,OAItB,IAAIgL,EAASgvI,EAAO4wF,YAAY5qO,GAC5Bu+J,EAAM,EACV,IAAKx+J,EAAI,EAAGA,EAAIqN,EAAKpN,SAAUD,EAAG,CAChC,IAAIqsO,EAAMh/N,EAAKrN,GACf,IAAKi6I,EAAOtvI,SAAS0hO,GACnB,MAAM,IAAIzsO,UAAU,+CAEtBysO,EAAIzvM,KAAK3xB,EAAQuzJ,GACjBA,GAAO6tE,EAAIpsO,OAEb,OAAOgL,GA8CTgvI,EAAO3e,WAAaA,EA0EpB2e,EAAOr5I,UAAU4tO,WAAY,EAQ7Bv0F,EAAOr5I,UAAU6tO,OAAS,WACxB,IAAIv2N,EAAMzW,KAAKxB,OACf,GAAIiY,EAAM,IAAM,EACd,MAAM,IAAIyyN,WAAW,6CAEvB,IAAK,IAAI3qO,EAAI,EAAGA,EAAIkY,EAAKlY,GAAK,EAC5B+rO,EAAKtqO,KAAMzB,EAAGA,EAAI,GAEpB,OAAOyB,MAGTw4I,EAAOr5I,UAAU8tO,OAAS,WACxB,IAAIx2N,EAAMzW,KAAKxB,OACf,GAAIiY,EAAM,IAAM,EACd,MAAM,IAAIyyN,WAAW,6CAEvB,IAAK,IAAI3qO,EAAI,EAAGA,EAAIkY,EAAKlY,GAAK,EAC5B+rO,EAAKtqO,KAAMzB,EAAGA,EAAI,GAClB+rO,EAAKtqO,KAAMzB,EAAI,EAAGA,EAAI,GAExB,OAAOyB,MAGTw4I,EAAOr5I,UAAU+tO,OAAS,WACxB,IAAIz2N,EAAMzW,KAAKxB,OACf,GAAIiY,EAAM,IAAM,EACd,MAAM,IAAIyyN,WAAW,6CAEvB,IAAK,IAAI3qO,EAAI,EAAGA,EAAIkY,EAAKlY,GAAK,EAC5B+rO,EAAKtqO,KAAMzB,EAAGA,EAAI,GAClB+rO,EAAKtqO,KAAMzB,EAAI,EAAGA,EAAI,GACtB+rO,EAAKtqO,KAAMzB,EAAI,EAAGA,EAAI,GACtB+rO,EAAKtqO,KAAMzB,EAAI,EAAGA,EAAI,GAExB,OAAOyB,MAGTw4I,EAAOr5I,UAAUsJ,SAAW,WAC1B,IAAIjK,EAAuB,EAAdwB,KAAKxB,OAClB,OAAe,IAAXA,EAAqB,GACA,IAArB2B,UAAU3B,OAAqByrO,EAAUjqO,KAAM,EAAGxB,GAC/CurO,EAAa3pO,MAAMJ,KAAMG,YAGlCq4I,EAAOr5I,UAAU6oC,OAAS,SAAiBp9B,GACzC,IAAK4tI,EAAOtvI,SAAS0B,GAAI,MAAM,IAAIzM,UAAU,6BAC7C,OAAI6B,OAAS4K,GACsB,IAA5B4tI,EAAO4uD,QAAQpnM,KAAM4K,IAG9B4tI,EAAOr5I,UAAUguO,QAAU,WACzB,IAAIpiO,EAAM,GACNiK,EAAMrU,EAAQ6rO,kBAKlB,OAJIxsO,KAAKxB,OAAS,IAChBuM,EAAM/K,KAAKyI,SAAS,MAAO,EAAGuM,GAAKpP,MAAM,SAASkH,KAAK,KACnD9M,KAAKxB,OAASwW,IAAKjK,GAAO,UAEzB,WAAaA,EAAM,KAG5BytI,EAAOr5I,UAAUioM,QAAU,SAAkB/oM,EAAQq4C,EAAOzvC,EAAKmmO,EAAWC,GAC1E,IAAK70F,EAAOtvI,SAAS7K,GACnB,MAAM,IAAIF,UAAU,6BAgBtB,QAbcoE,IAAVm0C,IACFA,EAAQ,QAEEn0C,IAAR0E,IACFA,EAAM5I,EAASA,EAAOG,OAAS,QAEf+D,IAAd6qO,IACFA,EAAY,QAEE7qO,IAAZ8qO,IACFA,EAAUrtO,KAAKxB,QAGbk4C,EAAQ,GAAKzvC,EAAM5I,EAAOG,QAAU4uO,EAAY,GAAKC,EAAUrtO,KAAKxB,OACtE,MAAM,IAAI0qO,WAAW,sBAGvB,GAAIkE,GAAaC,GAAW32L,GAASzvC,EACnC,OAAO,EAET,GAAImmO,GAAaC,EACf,OAAQ,EAEV,GAAI32L,GAASzvC,EACX,OAAO,EAQT,GAAIjH,OAAS3B,EAAQ,OAAO,EAS5B,IAPA,IAAIyd,GAJJuxN,KAAa,IADbD,KAAe,GAMXrxN,GAPJ9U,KAAS,IADTyvC,KAAW,GASPjgC,EAAM3F,KAAKiE,IAAI+G,EAAGC,GAElBuxN,EAAWttO,KAAKyK,MAAM2iO,EAAWC,GACjCE,EAAalvO,EAAOoM,MAAMisC,EAAOzvC,GAE5B1I,EAAI,EAAGA,EAAIkY,IAAOlY,EACzB,GAAI+uO,EAAS/uO,KAAOgvO,EAAWhvO,GAAI,CACjCud,EAAIwxN,EAAS/uO,GACbwd,EAAIwxN,EAAWhvO,GACf,MAIJ,OAAIud,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,GA6HT08H,EAAOr5I,UAAUkgJ,SAAW,SAAmB32I,EAAK47H,EAAY9pG,GAC9D,OAAoD,IAA7Cx6B,KAAKwN,QAAQ9E,EAAK47H,EAAY9pG,IAGvCg+G,EAAOr5I,UAAUqO,QAAU,SAAkB9E,EAAK47H,EAAY9pG,GAC5D,OAAO+vM,EAAqBvqO,KAAM0I,EAAK47H,EAAY9pG,GAAU,IAG/Dg+G,EAAOr5I,UAAUmV,YAAc,SAAsB5L,EAAK47H,EAAY9pG,GACpE,OAAO+vM,EAAqBvqO,KAAM0I,EAAK47H,EAAY9pG,GAAU,IAkD/Dg+G,EAAOr5I,UAAUsyL,MAAQ,SAAgB7wI,EAAQnjC,EAAQjf,EAAQg8B,GAE/D,QAAej4B,IAAXkb,EACF+c,EAAW,OACXh8B,EAASwB,KAAKxB,OACdif,EAAS,OAEJ,QAAelb,IAAX/D,GAA0C,kBAAXif,EACxC+c,EAAW/c,EACXjf,EAASwB,KAAKxB,OACdif,EAAS,MAEJ,KAAI+oC,SAAS/oC,GAWlB,MAAM,IAAIjS,MACR,2EAXFiS,GAAkB,EACd+oC,SAAShoD,IACXA,GAAkB,OACD+D,IAAbi4B,IAAwBA,EAAW,UAEvCA,EAAWh8B,EACXA,OAAS+D,GASb,IAAI+pJ,EAAYtsJ,KAAKxB,OAASif,EAG9B,SAFelb,IAAX/D,GAAwBA,EAAS8tJ,KAAW9tJ,EAAS8tJ,GAEpD1rG,EAAOpiD,OAAS,IAAMA,EAAS,GAAKif,EAAS,IAAOA,EAASzd,KAAKxB,OACrE,MAAM,IAAI0qO,WAAW,0CAGlB1uM,IAAUA,EAAW,QAG1B,IADA,IAAIovM,GAAc,IAEhB,OAAQpvM,GACN,IAAK,MACH,OAAOwwM,EAAShrO,KAAM4gD,EAAQnjC,EAAQjf,GAExC,IAAK,OACL,IAAK,QACH,OAAO0sO,EAAUlrO,KAAM4gD,EAAQnjC,EAAQjf,GAEzC,IAAK,QACH,OAAO4sO,EAAWprO,KAAM4gD,EAAQnjC,EAAQjf,GAE1C,IAAK,SACL,IAAK,SACH,OAAO8sO,EAAYtrO,KAAM4gD,EAAQnjC,EAAQjf,GAE3C,IAAK,SAEH,OAAO+sO,EAAYvrO,KAAM4gD,EAAQnjC,EAAQjf,GAE3C,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOgtO,EAAUxrO,KAAM4gD,EAAQnjC,EAAQjf,GAEzC,QACE,GAAIorO,EAAa,MAAM,IAAIzrO,UAAU,qBAAuBq8B,GAC5DA,GAAY,GAAKA,GAAUjtB,cAC3Bq8N,GAAc,IAKtBpxF,EAAOr5I,UAAU41C,OAAS,WACxB,MAAO,CACL9uB,KAAM,SACNtH,KAAM5b,MAAM5D,UAAUsL,MAAMtJ,KAAKnB,KAAK8D,MAAQ9D,KAAM,KAwFxD,IAAIosO,EAAuB,KAoB3B,SAASlC,EAAYU,EAAKl0L,EAAOzvC,GAC/B,IAAIumO,EAAM,GACVvmO,EAAM6J,KAAKiE,IAAI61N,EAAIpsO,OAAQyI,GAE3B,IAAK,IAAI1I,EAAIm4C,EAAOn4C,EAAI0I,IAAO1I,EAC7BivO,GAAOj2N,OAAOG,aAAsB,IAATkzN,EAAIrsO,IAEjC,OAAOivO,EAGT,SAASrD,EAAaS,EAAKl0L,EAAOzvC,GAChC,IAAIumO,EAAM,GACVvmO,EAAM6J,KAAKiE,IAAI61N,EAAIpsO,OAAQyI,GAE3B,IAAK,IAAI1I,EAAIm4C,EAAOn4C,EAAI0I,IAAO1I,EAC7BivO,GAAOj2N,OAAOG,aAAakzN,EAAIrsO,IAEjC,OAAOivO,EAGT,SAASxD,EAAUY,EAAKl0L,EAAOzvC,GAC7B,IAAIwP,EAAMm0N,EAAIpsO,SAETk4C,GAASA,EAAQ,KAAGA,EAAQ,KAC5BzvC,GAAOA,EAAM,GAAKA,EAAMwP,KAAKxP,EAAMwP,GAGxC,IADA,IAAIy+J,EAAM,GACD32K,EAAIm4C,EAAOn4C,EAAI0I,IAAO1I,EAC7B22K,GAAOu4D,EAAM7C,EAAIrsO,IAEnB,OAAO22K,EAGT,SAASm1D,EAAcO,EAAKl0L,EAAOzvC,GAGjC,IAFA,IAAIymO,EAAQ9C,EAAIngO,MAAMisC,EAAOzvC,GACzBiW,EAAM,GACD3e,EAAI,EAAGA,EAAImvO,EAAMlvO,OAAQD,GAAK,EACrC2e,GAAO3F,OAAOG,aAAag2N,EAAMnvO,GAAoB,IAAfmvO,EAAMnvO,EAAI,IAElD,OAAO2e,EA0CT,SAASywN,EAAalwN,EAAQ8tH,EAAK/sI,GACjC,GAAKif,EAAS,IAAO,GAAKA,EAAS,EAAG,MAAM,IAAIyrN,WAAW,sBAC3D,GAAIzrN,EAAS8tH,EAAM/sI,EAAQ,MAAM,IAAI0qO,WAAW,yCA+JlD,SAAS0E,EAAUhD,EAAKnrO,EAAOge,EAAQ8tH,EAAKv2H,EAAKD,GAC/C,IAAKyjI,EAAOtvI,SAAS0hO,GAAM,MAAM,IAAIzsO,UAAU,+CAC/C,GAAIsB,EAAQuV,GAAOvV,EAAQsV,EAAK,MAAM,IAAIm0N,WAAW,qCACrD,GAAIzrN,EAAS8tH,EAAMq/F,EAAIpsO,OAAQ,MAAM,IAAI0qO,WAAW,sBAkDtD,SAAS2E,EAAmBjD,EAAKnrO,EAAOge,EAAQqwN,GAC1CruO,EAAQ,IAAGA,EAAQ,MAASA,EAAQ,GACxC,IAAK,IAAIlB,EAAI,EAAG4gB,EAAIrO,KAAKiE,IAAI61N,EAAIpsO,OAASif,EAAQ,GAAIlf,EAAI4gB,IAAK5gB,EAC7DqsO,EAAIntN,EAASlf,IAAMkB,EAAS,KAAS,GAAKquO,EAAevvO,EAAI,EAAIA,MAClC,GAA5BuvO,EAAevvO,EAAI,EAAIA,GA8B9B,SAASwvO,EAAmBnD,EAAKnrO,EAAOge,EAAQqwN,GAC1CruO,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5C,IAAK,IAAIlB,EAAI,EAAG4gB,EAAIrO,KAAKiE,IAAI61N,EAAIpsO,OAASif,EAAQ,GAAIlf,EAAI4gB,IAAK5gB,EAC7DqsO,EAAIntN,EAASlf,GAAMkB,IAAuC,GAA5BquO,EAAevvO,EAAI,EAAIA,GAAU,IAmJnE,SAASyvO,EAAcpD,EAAKnrO,EAAOge,EAAQ8tH,EAAKv2H,EAAKD,GACnD,GAAI0I,EAAS8tH,EAAMq/F,EAAIpsO,OAAQ,MAAM,IAAI0qO,WAAW,sBACpD,GAAIzrN,EAAS,EAAG,MAAM,IAAIyrN,WAAW,sBAGvC,SAAS+E,EAAYrD,EAAKnrO,EAAOge,EAAQqwN,EAAcI,GAKrD,OAJKA,GACHF,EAAapD,EAAKnrO,EAAOge,EAAQ,GAEnCqrN,EAAQr3C,MAAMm5C,EAAKnrO,EAAOge,EAAQqwN,EAAc,GAAI,GAC7CrwN,EAAS,EAWlB,SAAS0wN,EAAavD,EAAKnrO,EAAOge,EAAQqwN,EAAcI,GAKtD,OAJKA,GACHF,EAAapD,EAAKnrO,EAAOge,EAAQ,GAEnCqrN,EAAQr3C,MAAMm5C,EAAKnrO,EAAOge,EAAQqwN,EAAc,GAAI,GAC7CrwN,EAAS,EA/clB+6H,EAAOr5I,UAAUsL,MAAQ,SAAgBisC,EAAOzvC,GAC9C,IAoBImnO,EApBA33N,EAAMzW,KAAKxB,OAqBf,IApBAk4C,IAAUA,GAGE,GACVA,GAASjgC,GACG,IAAGigC,EAAQ,GACdA,EAAQjgC,IACjBigC,EAAQjgC,IANVxP,OAAc1E,IAAR0E,EAAoBwP,IAAQxP,GASxB,GACRA,GAAOwP,GACG,IAAGxP,EAAM,GACVA,EAAMwP,IACfxP,EAAMwP,GAGJxP,EAAMyvC,IAAOzvC,EAAMyvC,GAGnB8hG,EAAOwwF,qBACToF,EAASpuO,KAAKo0D,SAAS1d,EAAOzvC,IACvBxG,UAAY+3I,EAAOr5I,cACrB,CACL,IAAIkvO,EAAWpnO,EAAMyvC,EACrB03L,EAAS,IAAI51F,EAAO61F,OAAU9rO,GAC9B,IAAK,IAAIhE,EAAI,EAAGA,EAAI8vO,IAAY9vO,EAC9B6vO,EAAO7vO,GAAKyB,KAAKzB,EAAIm4C,GAIzB,OAAO03L,GAWT51F,EAAOr5I,UAAUmvO,WAAa,SAAqB7wN,EAAQo8G,EAAYq0G,GACrEzwN,GAAkB,EAClBo8G,GAA0B,EACrBq0G,GAAUP,EAAYlwN,EAAQo8G,EAAY75H,KAAKxB,QAKpD,IAHA,IAAIkK,EAAM1I,KAAKyd,GACX8wN,EAAM,EACNhwO,EAAI,IACCA,EAAIs7H,IAAe00G,GAAO,MACjC7lO,GAAO1I,KAAKyd,EAASlf,GAAKgwO,EAG5B,OAAO7lO,GAGT8vI,EAAOr5I,UAAUqvO,WAAa,SAAqB/wN,EAAQo8G,EAAYq0G,GACrEzwN,GAAkB,EAClBo8G,GAA0B,EACrBq0G,GACHP,EAAYlwN,EAAQo8G,EAAY75H,KAAKxB,QAKvC,IAFA,IAAIkK,EAAM1I,KAAKyd,IAAWo8G,GACtB00G,EAAM,EACH10G,EAAa,IAAM00G,GAAO,MAC/B7lO,GAAO1I,KAAKyd,IAAWo8G,GAAc00G,EAGvC,OAAO7lO,GAGT8vI,EAAOr5I,UAAUsvO,UAAY,SAAoBhxN,EAAQywN,GAEvD,OADKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QACpCwB,KAAKyd,IAGd+6H,EAAOr5I,UAAUuvO,aAAe,SAAuBjxN,EAAQywN,GAE7D,OADKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QACpCwB,KAAKyd,GAAWzd,KAAKyd,EAAS,IAAM,GAG7C+6H,EAAOr5I,UAAU0rO,aAAe,SAAuBptN,EAAQywN,GAE7D,OADKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QACnCwB,KAAKyd,IAAW,EAAKzd,KAAKyd,EAAS,IAG7C+6H,EAAOr5I,UAAUwvO,aAAe,SAAuBlxN,EAAQywN,GAG7D,OAFKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,SAElCwB,KAAKyd,GACTzd,KAAKyd,EAAS,IAAM,EACpBzd,KAAKyd,EAAS,IAAM,IACD,SAAnBzd,KAAKyd,EAAS,IAGrB+6H,EAAOr5I,UAAUyvO,aAAe,SAAuBnxN,EAAQywN,GAG7D,OAFKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QAEpB,SAAfwB,KAAKyd,IACTzd,KAAKyd,EAAS,IAAM,GACrBzd,KAAKyd,EAAS,IAAM,EACrBzd,KAAKyd,EAAS,KAGlB+6H,EAAOr5I,UAAU0vO,UAAY,SAAoBpxN,EAAQo8G,EAAYq0G,GACnEzwN,GAAkB,EAClBo8G,GAA0B,EACrBq0G,GAAUP,EAAYlwN,EAAQo8G,EAAY75H,KAAKxB,QAKpD,IAHA,IAAIkK,EAAM1I,KAAKyd,GACX8wN,EAAM,EACNhwO,EAAI,IACCA,EAAIs7H,IAAe00G,GAAO,MACjC7lO,GAAO1I,KAAKyd,EAASlf,GAAKgwO,EAM5B,OAFI7lO,IAFJ6lO,GAAO,OAES7lO,GAAOoI,KAAK8f,IAAI,EAAG,EAAIipG,IAEhCnxH,GAGT8vI,EAAOr5I,UAAU2vO,UAAY,SAAoBrxN,EAAQo8G,EAAYq0G,GACnEzwN,GAAkB,EAClBo8G,GAA0B,EACrBq0G,GAAUP,EAAYlwN,EAAQo8G,EAAY75H,KAAKxB,QAKpD,IAHA,IAAID,EAAIs7H,EACJ00G,EAAM,EACN7lO,EAAM1I,KAAKyd,IAAWlf,GACnBA,EAAI,IAAMgwO,GAAO,MACtB7lO,GAAO1I,KAAKyd,IAAWlf,GAAKgwO,EAM9B,OAFI7lO,IAFJ6lO,GAAO,OAES7lO,GAAOoI,KAAK8f,IAAI,EAAG,EAAIipG,IAEhCnxH,GAGT8vI,EAAOr5I,UAAU4vO,SAAW,SAAmBtxN,EAAQywN,GAErD,OADKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QACtB,IAAfwB,KAAKyd,IAC0B,GAA5B,IAAOzd,KAAKyd,GAAU,GADKzd,KAAKyd,IAI3C+6H,EAAOr5I,UAAU6vO,YAAc,SAAsBvxN,EAAQywN,GACtDA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QAC3C,IAAIkK,EAAM1I,KAAKyd,GAAWzd,KAAKyd,EAAS,IAAM,EAC9C,OAAc,MAAN/U,EAAsB,WAANA,EAAmBA,GAG7C8vI,EAAOr5I,UAAU8vO,YAAc,SAAsBxxN,EAAQywN,GACtDA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QAC3C,IAAIkK,EAAM1I,KAAKyd,EAAS,GAAMzd,KAAKyd,IAAW,EAC9C,OAAc,MAAN/U,EAAsB,WAANA,EAAmBA,GAG7C8vI,EAAOr5I,UAAU+vO,YAAc,SAAsBzxN,EAAQywN,GAG3D,OAFKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QAEnCwB,KAAKyd,GACVzd,KAAKyd,EAAS,IAAM,EACpBzd,KAAKyd,EAAS,IAAM,GACpBzd,KAAKyd,EAAS,IAAM,IAGzB+6H,EAAOr5I,UAAUgwO,YAAc,SAAsB1xN,EAAQywN,GAG3D,OAFKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QAEnCwB,KAAKyd,IAAW,GACrBzd,KAAKyd,EAAS,IAAM,GACpBzd,KAAKyd,EAAS,IAAM,EACpBzd,KAAKyd,EAAS,IAGnB+6H,EAAOr5I,UAAUiwO,YAAc,SAAsB3xN,EAAQywN,GAE3D,OADKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QACpCsqO,EAAQplN,KAAK1jB,KAAMyd,GAAQ,EAAM,GAAI,IAG9C+6H,EAAOr5I,UAAUkwO,YAAc,SAAsB5xN,EAAQywN,GAE3D,OADKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QACpCsqO,EAAQplN,KAAK1jB,KAAMyd,GAAQ,EAAO,GAAI,IAG/C+6H,EAAOr5I,UAAUmwO,aAAe,SAAuB7xN,EAAQywN,GAE7D,OADKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QACpCsqO,EAAQplN,KAAK1jB,KAAMyd,GAAQ,EAAM,GAAI,IAG9C+6H,EAAOr5I,UAAUowO,aAAe,SAAuB9xN,EAAQywN,GAE7D,OADKA,GAAUP,EAAYlwN,EAAQ,EAAGzd,KAAKxB,QACpCsqO,EAAQplN,KAAK1jB,KAAMyd,GAAQ,EAAO,GAAI,IAS/C+6H,EAAOr5I,UAAUqwO,YAAc,SAAsB/vO,EAAOge,EAAQo8G,EAAYq0G,IAC9EzuO,GAASA,EACTge,GAAkB,EAClBo8G,GAA0B,EACrBq0G,IAEHN,EAAS5tO,KAAMP,EAAOge,EAAQo8G,EADf/oH,KAAK8f,IAAI,EAAG,EAAIipG,GAAc,EACO,GAGtD,IAAI00G,EAAM,EACNhwO,EAAI,EAER,IADAyB,KAAKyd,GAAkB,IAARhe,IACNlB,EAAIs7H,IAAe00G,GAAO,MACjCvuO,KAAKyd,EAASlf,GAAMkB,EAAQ8uO,EAAO,IAGrC,OAAO9wN,EAASo8G,GAGlB2e,EAAOr5I,UAAUswO,YAAc,SAAsBhwO,EAAOge,EAAQo8G,EAAYq0G,IAC9EzuO,GAASA,EACTge,GAAkB,EAClBo8G,GAA0B,EACrBq0G,IAEHN,EAAS5tO,KAAMP,EAAOge,EAAQo8G,EADf/oH,KAAK8f,IAAI,EAAG,EAAIipG,GAAc,EACO,GAGtD,IAAIt7H,EAAIs7H,EAAa,EACjB00G,EAAM,EAEV,IADAvuO,KAAKyd,EAASlf,GAAa,IAARkB,IACVlB,GAAK,IAAMgwO,GAAO,MACzBvuO,KAAKyd,EAASlf,GAAMkB,EAAQ8uO,EAAO,IAGrC,OAAO9wN,EAASo8G,GAGlB2e,EAAOr5I,UAAUuwO,WAAa,SAAqBjwO,EAAOge,EAAQywN,GAMhE,OALAzuO,GAASA,EACTge,GAAkB,EACbywN,GAAUN,EAAS5tO,KAAMP,EAAOge,EAAQ,EAAG,IAAM,GACjD+6H,EAAOwwF,sBAAqBvpO,EAAQqR,KAAKmgB,MAAMxxB,IACpDO,KAAKyd,GAAmB,IAARhe,EACTge,EAAS,GAWlB+6H,EAAOr5I,UAAUwwO,cAAgB,SAAwBlwO,EAAOge,EAAQywN,GAUtE,OATAzuO,GAASA,EACTge,GAAkB,EACbywN,GAAUN,EAAS5tO,KAAMP,EAAOge,EAAQ,EAAG,MAAQ,GACpD+6H,EAAOwwF,qBACThpO,KAAKyd,GAAmB,IAARhe,EAChBO,KAAKyd,EAAS,GAAMhe,IAAU,GAE9BouO,EAAkB7tO,KAAMP,EAAOge,GAAQ,GAElCA,EAAS,GAGlB+6H,EAAOr5I,UAAUywO,cAAgB,SAAwBnwO,EAAOge,EAAQywN,GAUtE,OATAzuO,GAASA,EACTge,GAAkB,EACbywN,GAAUN,EAAS5tO,KAAMP,EAAOge,EAAQ,EAAG,MAAQ,GACpD+6H,EAAOwwF,qBACThpO,KAAKyd,GAAWhe,IAAU,EAC1BO,KAAKyd,EAAS,GAAc,IAARhe,GAEpBouO,EAAkB7tO,KAAMP,EAAOge,GAAQ,GAElCA,EAAS,GAUlB+6H,EAAOr5I,UAAU0wO,cAAgB,SAAwBpwO,EAAOge,EAAQywN,GAYtE,OAXAzuO,GAASA,EACTge,GAAkB,EACbywN,GAAUN,EAAS5tO,KAAMP,EAAOge,EAAQ,EAAG,WAAY,GACxD+6H,EAAOwwF,qBACThpO,KAAKyd,EAAS,GAAMhe,IAAU,GAC9BO,KAAKyd,EAAS,GAAMhe,IAAU,GAC9BO,KAAKyd,EAAS,GAAMhe,IAAU,EAC9BO,KAAKyd,GAAmB,IAARhe,GAEhBsuO,EAAkB/tO,KAAMP,EAAOge,GAAQ,GAElCA,EAAS,GAGlB+6H,EAAOr5I,UAAU2wO,cAAgB,SAAwBrwO,EAAOge,EAAQywN,GAYtE,OAXAzuO,GAASA,EACTge,GAAkB,EACbywN,GAAUN,EAAS5tO,KAAMP,EAAOge,EAAQ,EAAG,WAAY,GACxD+6H,EAAOwwF,qBACThpO,KAAKyd,GAAWhe,IAAU,GAC1BO,KAAKyd,EAAS,GAAMhe,IAAU,GAC9BO,KAAKyd,EAAS,GAAMhe,IAAU,EAC9BO,KAAKyd,EAAS,GAAc,IAARhe,GAEpBsuO,EAAkB/tO,KAAMP,EAAOge,GAAQ,GAElCA,EAAS,GAGlB+6H,EAAOr5I,UAAU4wO,WAAa,SAAqBtwO,EAAOge,EAAQo8G,EAAYq0G,GAG5E,GAFAzuO,GAASA,EACTge,GAAkB,GACbywN,EAAU,CACb,IAAI8B,EAAQl/N,KAAK8f,IAAI,EAAG,EAAIipG,EAAa,GAEzC+zG,EAAS5tO,KAAMP,EAAOge,EAAQo8G,EAAYm2G,EAAQ,GAAIA,GAGxD,IAAIzxO,EAAI,EACJgwO,EAAM,EACNlqM,EAAM,EAEV,IADArkC,KAAKyd,GAAkB,IAARhe,IACNlB,EAAIs7H,IAAe00G,GAAO,MAC7B9uO,EAAQ,GAAa,IAAR4kC,GAAsC,IAAzBrkC,KAAKyd,EAASlf,EAAI,KAC9C8lC,EAAM,GAERrkC,KAAKyd,EAASlf,IAAOkB,EAAQ8uO,GAAQ,GAAKlqM,EAAM,IAGlD,OAAO5mB,EAASo8G,GAGlB2e,EAAOr5I,UAAU8wO,WAAa,SAAqBxwO,EAAOge,EAAQo8G,EAAYq0G,GAG5E,GAFAzuO,GAASA,EACTge,GAAkB,GACbywN,EAAU,CACb,IAAI8B,EAAQl/N,KAAK8f,IAAI,EAAG,EAAIipG,EAAa,GAEzC+zG,EAAS5tO,KAAMP,EAAOge,EAAQo8G,EAAYm2G,EAAQ,GAAIA,GAGxD,IAAIzxO,EAAIs7H,EAAa,EACjB00G,EAAM,EACNlqM,EAAM,EAEV,IADArkC,KAAKyd,EAASlf,GAAa,IAARkB,IACVlB,GAAK,IAAMgwO,GAAO,MACrB9uO,EAAQ,GAAa,IAAR4kC,GAAsC,IAAzBrkC,KAAKyd,EAASlf,EAAI,KAC9C8lC,EAAM,GAERrkC,KAAKyd,EAASlf,IAAOkB,EAAQ8uO,GAAQ,GAAKlqM,EAAM,IAGlD,OAAO5mB,EAASo8G,GAGlB2e,EAAOr5I,UAAU+wO,UAAY,SAAoBzwO,EAAOge,EAAQywN,GAO9D,OANAzuO,GAASA,EACTge,GAAkB,EACbywN,GAAUN,EAAS5tO,KAAMP,EAAOge,EAAQ,EAAG,KAAO,KAClD+6H,EAAOwwF,sBAAqBvpO,EAAQqR,KAAKmgB,MAAMxxB,IAChDA,EAAQ,IAAGA,EAAQ,IAAOA,EAAQ,GACtCO,KAAKyd,GAAmB,IAARhe,EACTge,EAAS,GAGlB+6H,EAAOr5I,UAAUgxO,aAAe,SAAuB1wO,EAAOge,EAAQywN,GAUpE,OATAzuO,GAASA,EACTge,GAAkB,EACbywN,GAAUN,EAAS5tO,KAAMP,EAAOge,EAAQ,EAAG,OAAS,OACrD+6H,EAAOwwF,qBACThpO,KAAKyd,GAAmB,IAARhe,EAChBO,KAAKyd,EAAS,GAAMhe,IAAU,GAE9BouO,EAAkB7tO,KAAMP,EAAOge,GAAQ,GAElCA,EAAS,GAGlB+6H,EAAOr5I,UAAUixO,aAAe,SAAuB3wO,EAAOge,EAAQywN,GAUpE,OATAzuO,GAASA,EACTge,GAAkB,EACbywN,GAAUN,EAAS5tO,KAAMP,EAAOge,EAAQ,EAAG,OAAS,OACrD+6H,EAAOwwF,qBACThpO,KAAKyd,GAAWhe,IAAU,EAC1BO,KAAKyd,EAAS,GAAc,IAARhe,GAEpBouO,EAAkB7tO,KAAMP,EAAOge,GAAQ,GAElCA,EAAS,GAGlB+6H,EAAOr5I,UAAUkxO,aAAe,SAAuB5wO,EAAOge,EAAQywN,GAYpE,OAXAzuO,GAASA,EACTge,GAAkB,EACbywN,GAAUN,EAAS5tO,KAAMP,EAAOge,EAAQ,EAAG,YAAa,YACzD+6H,EAAOwwF,qBACThpO,KAAKyd,GAAmB,IAARhe,EAChBO,KAAKyd,EAAS,GAAMhe,IAAU,EAC9BO,KAAKyd,EAAS,GAAMhe,IAAU,GAC9BO,KAAKyd,EAAS,GAAMhe,IAAU,IAE9BsuO,EAAkB/tO,KAAMP,EAAOge,GAAQ,GAElCA,EAAS,GAGlB+6H,EAAOr5I,UAAUmxO,aAAe,SAAuB7wO,EAAOge,EAAQywN,GAapE,OAZAzuO,GAASA,EACTge,GAAkB,EACbywN,GAAUN,EAAS5tO,KAAMP,EAAOge,EAAQ,EAAG,YAAa,YACzDhe,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GACxC+4I,EAAOwwF,qBACThpO,KAAKyd,GAAWhe,IAAU,GAC1BO,KAAKyd,EAAS,GAAMhe,IAAU,GAC9BO,KAAKyd,EAAS,GAAMhe,IAAU,EAC9BO,KAAKyd,EAAS,GAAc,IAARhe,GAEpBsuO,EAAkB/tO,KAAMP,EAAOge,GAAQ,GAElCA,EAAS,GAgBlB+6H,EAAOr5I,UAAUoxO,aAAe,SAAuB9wO,EAAOge,EAAQywN,GACpE,OAAOD,EAAWjuO,KAAMP,EAAOge,GAAQ,EAAMywN,IAG/C11F,EAAOr5I,UAAUqxO,aAAe,SAAuB/wO,EAAOge,EAAQywN,GACpE,OAAOD,EAAWjuO,KAAMP,EAAOge,GAAQ,EAAOywN,IAWhD11F,EAAOr5I,UAAUsxO,cAAgB,SAAwBhxO,EAAOge,EAAQywN,GACtE,OAAOC,EAAYnuO,KAAMP,EAAOge,GAAQ,EAAMywN,IAGhD11F,EAAOr5I,UAAUuxO,cAAgB,SAAwBjxO,EAAOge,EAAQywN,GACtE,OAAOC,EAAYnuO,KAAMP,EAAOge,GAAQ,EAAOywN,IAIjD11F,EAAOr5I,UAAUg8B,KAAO,SAAe98B,EAAQsyO,EAAaj6L,EAAOzvC,GAQjE,GAPKyvC,IAAOA,EAAQ,GACfzvC,GAAe,IAARA,IAAWA,EAAMjH,KAAKxB,QAC9BmyO,GAAetyO,EAAOG,SAAQmyO,EAActyO,EAAOG,QAClDmyO,IAAaA,EAAc,GAC5B1pO,EAAM,GAAKA,EAAMyvC,IAAOzvC,EAAMyvC,GAG9BzvC,IAAQyvC,EAAO,OAAO,EAC1B,GAAsB,IAAlBr4C,EAAOG,QAAgC,IAAhBwB,KAAKxB,OAAc,OAAO,EAGrD,GAAImyO,EAAc,EAChB,MAAM,IAAIzH,WAAW,6BAEvB,GAAIxyL,EAAQ,GAAKA,GAAS12C,KAAKxB,OAAQ,MAAM,IAAI0qO,WAAW,6BAC5D,GAAIjiO,EAAM,EAAG,MAAM,IAAIiiO,WAAW,2BAG9BjiO,EAAMjH,KAAKxB,SAAQyI,EAAMjH,KAAKxB,QAC9BH,EAAOG,OAASmyO,EAAc1pO,EAAMyvC,IACtCzvC,EAAM5I,EAAOG,OAASmyO,EAAcj6L,GAGtC,IACIn4C,EADAkY,EAAMxP,EAAMyvC,EAGhB,GAAI12C,OAAS3B,GAAUq4C,EAAQi6L,GAAeA,EAAc1pO,EAE1D,IAAK1I,EAAIkY,EAAM,EAAGlY,GAAK,IAAKA,EAC1BF,EAAOE,EAAIoyO,GAAe3wO,KAAKzB,EAAIm4C,QAEhC,GAAIjgC,EAAM,MAAS+hI,EAAOwwF,oBAE/B,IAAKzqO,EAAI,EAAGA,EAAIkY,IAAOlY,EACrBF,EAAOE,EAAIoyO,GAAe3wO,KAAKzB,EAAIm4C,QAGrCud,WAAW90D,UAAUyb,IAAIzZ,KACvB9C,EACA2B,KAAKo0D,SAAS1d,EAAOA,EAAQjgC,GAC7Bk6N,GAIJ,OAAOl6N,GAOT+hI,EAAOr5I,UAAU+xH,KAAO,SAAexoH,EAAKguC,EAAOzvC,EAAKuzB,GAEtD,GAAmB,kBAAR9xB,EAAkB,CAS3B,GARqB,kBAAVguC,GACTlc,EAAWkc,EACXA,EAAQ,EACRzvC,EAAMjH,KAAKxB,QACa,kBAARyI,IAChBuzB,EAAWvzB,EACXA,EAAMjH,KAAKxB,QAEM,IAAfkK,EAAIlK,OAAc,CACpB,IAAI6lB,EAAO3b,EAAIyC,WAAW,GACtBkZ,EAAO,MACT3b,EAAM2b,GAGV,QAAiB9hB,IAAbi4B,GAA8C,kBAAbA,EACnC,MAAM,IAAIr8B,UAAU,6BAEtB,GAAwB,kBAAbq8B,IAA0Bg+G,EAAO+wF,WAAW/uM,GACrD,MAAM,IAAIr8B,UAAU,qBAAuBq8B,OAErB,kBAAR9xB,IAChBA,GAAY,KAId,GAAIguC,EAAQ,GAAK12C,KAAKxB,OAASk4C,GAAS12C,KAAKxB,OAASyI,EACpD,MAAM,IAAIiiO,WAAW,sBAGvB,GAAIjiO,GAAOyvC,EACT,OAAO12C,KAQT,IAAIzB,EACJ,GANAm4C,KAAkB,EAClBzvC,OAAc1E,IAAR0E,EAAoBjH,KAAKxB,OAASyI,IAAQ,EAE3CyB,IAAKA,EAAM,GAGG,kBAARA,EACT,IAAKnK,EAAIm4C,EAAOn4C,EAAI0I,IAAO1I,EACzByB,KAAKzB,GAAKmK,MAEP,CACL,IAAIglO,EAAQl1F,EAAOtvI,SAASR,GACxBA,EACAmhO,EAAY,IAAIrxF,EAAO9vI,EAAK8xB,GAAU/xB,YACtCgO,EAAMi3N,EAAMlvO,OAChB,IAAKD,EAAI,EAAGA,EAAI0I,EAAMyvC,IAASn4C,EAC7ByB,KAAKzB,EAAIm4C,GAASg3L,EAAMnvO,EAAIkY,GAIhC,OAAOzW,MAMT,IAAI4wO,EAAoB,qBAmBxB,SAASnD,EAAOtqO,GACd,OAAIA,EAAI,GAAW,IAAMA,EAAEsF,SAAS,IAC7BtF,EAAEsF,SAAS,IAGpB,SAASohO,EAAajpL,EAAQyxB,GAE5B,IAAI45J,EADJ55J,EAAQA,GAASptC,IAMjB,IAJA,IAAIzmC,EAASoiD,EAAOpiD,OAChBqyO,EAAgB,KAChBnD,EAAQ,GAEHnvO,EAAI,EAAGA,EAAIC,IAAUD,EAAG,CAI/B,IAHA0tO,EAAYrrL,EAAOz1C,WAAW5M,IAGd,OAAU0tO,EAAY,MAAQ,CAE5C,IAAK4E,EAAe,CAElB,GAAI5E,EAAY,MAAQ,EAEjB55J,GAAS,IAAM,GAAGq7J,EAAMvpO,KAAK,IAAM,IAAM,KAC9C,SACK,GAAI5F,EAAI,IAAMC,EAAQ,EAEtB6zE,GAAS,IAAM,GAAGq7J,EAAMvpO,KAAK,IAAM,IAAM,KAC9C,SAIF0sO,EAAgB5E,EAEhB,SAIF,GAAIA,EAAY,MAAQ,EACjB55J,GAAS,IAAM,GAAGq7J,EAAMvpO,KAAK,IAAM,IAAM,KAC9C0sO,EAAgB5E,EAChB,SAIFA,EAAkE,OAArD4E,EAAgB,OAAU,GAAK5E,EAAY,YAC/C4E,IAEJx+J,GAAS,IAAM,GAAGq7J,EAAMvpO,KAAK,IAAM,IAAM,KAMhD,GAHA0sO,EAAgB,KAGZ5E,EAAY,IAAM,CACpB,IAAK55J,GAAS,GAAK,EAAG,MACtBq7J,EAAMvpO,KAAK8nO,QACN,GAAIA,EAAY,KAAO,CAC5B,IAAK55J,GAAS,GAAK,EAAG,MACtBq7J,EAAMvpO,KACJ8nO,GAAa,EAAM,IACP,GAAZA,EAAmB,UAEhB,GAAIA,EAAY,MAAS,CAC9B,IAAK55J,GAAS,GAAK,EAAG,MACtBq7J,EAAMvpO,KACJ8nO,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,SAEhB,MAAIA,EAAY,SASrB,MAAM,IAAIzgO,MAAM,sBARhB,IAAK6mE,GAAS,GAAK,EAAG,MACtBq7J,EAAMvpO,KACJ8nO,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,MAOzB,OAAOyB,EA4BT,SAAS5D,EAAe/+N,GACtB,OAAOuhK,EAAOwkE,YAhIhB,SAAsB/lO,GAIpB,IAFAA,EAUF,SAAqBA,GACnB,OAAIA,EAAID,KAAaC,EAAID,OAClBC,EAAIC,QAAQ,aAAc,IAZ3B+lO,CAAWhmO,GAAKC,QAAQ4lO,EAAmB,KAEzCpyO,OAAS,EAAG,MAAO,GAE3B,KAAOuM,EAAIvM,OAAS,IAAM,GACxBuM,GAAY,IAEd,OAAOA,EAuHmBimO,CAAYjmO,IAGxC,SAASogO,EAAYjyM,EAAKiI,EAAK1jB,EAAQjf,GACrC,IAAK,IAAID,EAAI,EAAGA,EAAIC,KACbD,EAAIkf,GAAU0jB,EAAI3iC,QAAYD,GAAK26B,EAAI16B,UADhBD,EAE5B4iC,EAAI5iC,EAAIkf,GAAUyb,EAAI36B,GAExB,OAAOA,K,+CCrvDToC,EAAQk5H,WAuCR,SAAqBo3G,GACnB,IAAIC,EAAOC,EAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAC3B,OAAuC,GAA9BE,EAAWC,GAAuB,EAAKA,GA1ClD1wO,EAAQmwO,YAiDR,SAAsBG,GACpB,IAAIl5M,EAcAx5B,EAbA2yO,EAAOC,EAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAEvBrtO,EAAM,IAAIytO,EAVhB,SAAsBL,EAAKG,EAAUC,GACnC,OAAuC,GAA9BD,EAAWC,GAAuB,EAAKA,EAS9BE,CAAYN,EAAKG,EAAUC,IAEzCG,EAAU,EAGV/6N,EAAM46N,EAAkB,EACxBD,EAAW,EACXA,EAGJ,IAAK7yO,EAAI,EAAGA,EAAIkY,EAAKlY,GAAK,EACxBw5B,EACG05M,EAAUR,EAAI9lO,WAAW5M,KAAO,GAChCkzO,EAAUR,EAAI9lO,WAAW5M,EAAI,KAAO,GACpCkzO,EAAUR,EAAI9lO,WAAW5M,EAAI,KAAO,EACrCkzO,EAAUR,EAAI9lO,WAAW5M,EAAI,IAC/BsF,EAAI2tO,KAAcz5M,GAAO,GAAM,IAC/Bl0B,EAAI2tO,KAAcz5M,GAAO,EAAK,IAC9Bl0B,EAAI2tO,KAAmB,IAANz5M,EAGK,IAApBs5M,IACFt5M,EACG05M,EAAUR,EAAI9lO,WAAW5M,KAAO,EAChCkzO,EAAUR,EAAI9lO,WAAW5M,EAAI,KAAO,EACvCsF,EAAI2tO,KAAmB,IAANz5M,GAGK,IAApBs5M,IACFt5M,EACG05M,EAAUR,EAAI9lO,WAAW5M,KAAO,GAChCkzO,EAAUR,EAAI9lO,WAAW5M,EAAI,KAAO,EACpCkzO,EAAUR,EAAI9lO,WAAW5M,EAAI,KAAO,EACvCsF,EAAI2tO,KAAcz5M,GAAO,EAAK,IAC9Bl0B,EAAI2tO,KAAmB,IAANz5M,GAGnB,OAAOl0B,GA3FTlD,EAAQgrO,cAkHR,SAAwB+F,GAQtB,IAPA,IAAI35M,EACAthB,EAAMi7N,EAAMlzO,OACZmzO,EAAal7N,EAAM,EACnBiJ,EAAQ,GACRkyN,EAAiB,MAGZrzO,EAAI,EAAGszO,EAAOp7N,EAAMk7N,EAAYpzO,EAAIszO,EAAMtzO,GAAKqzO,EACtDlyN,EAAMvb,KAAK2tO,EAAYJ,EAAOnzO,EAAIA,EAAIqzO,EAAkBC,EAAOA,EAAQtzO,EAAIqzO,IAI1D,IAAfD,GACF55M,EAAM25M,EAAMj7N,EAAM,GAClBiJ,EAAMvb,KACJ4tO,EAAOh6M,GAAO,GACdg6M,EAAQh6M,GAAO,EAAK,IACpB,OAEsB,IAAf45M,IACT55M,GAAO25M,EAAMj7N,EAAM,IAAM,GAAKi7N,EAAMj7N,EAAM,GAC1CiJ,EAAMvb,KACJ4tO,EAAOh6M,GAAO,IACdg6M,EAAQh6M,GAAO,EAAK,IACpBg6M,EAAQh6M,GAAO,EAAK,IACpB,MAIJ,OAAOrY,EAAM5S,KAAK,KAzIpB,IALA,IAAIilO,EAAS,GACTN,EAAY,GACZH,EAA4B,qBAAfr9K,WAA6BA,WAAalxD,MAEvDshB,EAAO,mEACF9lB,EAAI,EAAGkY,EAAM4N,EAAK7lB,OAAQD,EAAIkY,IAAOlY,EAC5CwzO,EAAOxzO,GAAK8lB,EAAK9lB,GACjBkzO,EAAUptN,EAAKlZ,WAAW5M,IAAMA,EAQlC,SAAS4yO,EAASF,GAChB,IAAIx6N,EAAMw6N,EAAIzyO,OAEd,GAAIiY,EAAM,EAAI,EACZ,MAAM,IAAIjL,MAAM,kDAKlB,IAAI4lO,EAAWH,EAAIzjO,QAAQ,KAO3B,OANkB,IAAd4jO,IAAiBA,EAAW36N,GAMzB,CAAC26N,EAJcA,IAAa36N,EAC/B,EACA,EAAK26N,EAAW,GAsEtB,SAASU,EAAaJ,EAAOh7L,EAAOzvC,GAGlC,IAFA,IAAI8wB,EARoBi6M,EASpBz2M,EAAS,GACJh9B,EAAIm4C,EAAOn4C,EAAI0I,EAAK1I,GAAK,EAChCw5B,GACI25M,EAAMnzO,IAAM,GAAM,WAClBmzO,EAAMnzO,EAAI,IAAM,EAAK,QACP,IAAfmzO,EAAMnzO,EAAI,IACbg9B,EAAOp3B,KAdF4tO,GADiBC,EAeMj6M,IAdT,GAAK,IACxBg6M,EAAOC,GAAO,GAAK,IACnBD,EAAOC,GAAO,EAAI,IAClBD,EAAa,GAANC,IAaT,OAAOz2M,EAAOzuB,KAAK,IAjGrB2kO,EAAU,IAAItmO,WAAW,IAAM,GAC/BsmO,EAAU,IAAItmO,WAAW,IAAM,I,cClB/BxK,EAAQ+iB,KAAO,SAAUla,EAAQiU,EAAQw0N,EAAMC,EAAMC,GACnD,IAAI/uO,EAAGma,EACH60N,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,GAAS,EACTh0O,EAAI0zO,EAAQE,EAAS,EAAK,EAC1B16M,EAAIw6M,GAAQ,EAAI,EAChB/uO,EAAIsG,EAAOiU,EAASlf,GAOxB,IALAA,GAAKk5B,EAELr0B,EAAIF,GAAM,IAAOqvO,GAAU,EAC3BrvO,KAAQqvO,EACRA,GAASH,EACFG,EAAQ,EAAGnvO,EAAS,IAAJA,EAAWoG,EAAOiU,EAASlf,GAAIA,GAAKk5B,EAAG86M,GAAS,GAKvE,IAHAh1N,EAAIna,GAAM,IAAOmvO,GAAU,EAC3BnvO,KAAQmvO,EACRA,GAASL,EACFK,EAAQ,EAAGh1N,EAAS,IAAJA,EAAW/T,EAAOiU,EAASlf,GAAIA,GAAKk5B,EAAG86M,GAAS,GAEvE,GAAU,IAANnvO,EACFA,EAAI,EAAIkvO,MACH,IAAIlvO,IAAMivO,EACf,OAAO90N,EAAIi1N,IAAsBvtM,KAAd/hC,GAAK,EAAI,GAE5Bqa,GAAQzM,KAAK8f,IAAI,EAAGshN,GACpB9uO,GAAQkvO,EAEV,OAAQpvO,GAAK,EAAI,GAAKqa,EAAIzM,KAAK8f,IAAI,EAAGxtB,EAAI8uO,IAG5CvxO,EAAQ8wL,MAAQ,SAAUjoL,EAAQ/J,EAAOge,EAAQw0N,EAAMC,EAAMC,GAC3D,IAAI/uO,EAAGma,EAAGe,EACN8zN,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBI,EAAe,KAATP,EAAcphO,KAAK8f,IAAI,GAAI,IAAM9f,KAAK8f,IAAI,GAAI,IAAM,EAC1DryB,EAAI0zO,EAAO,EAAKE,EAAS,EACzB16M,EAAIw6M,EAAO,GAAK,EAChB/uO,EAAIzD,EAAQ,GAAgB,IAAVA,GAAe,EAAIA,EAAQ,EAAK,EAAI,EAmC1D,IAjCAA,EAAQqR,KAAKihB,IAAItyB,GAEbylD,MAAMzlD,IAAUA,IAAUwlC,KAC5B1nB,EAAI2nC,MAAMzlD,GAAS,EAAI,EACvB2D,EAAIivO,IAEJjvO,EAAI0N,KAAKmgB,MAAMngB,KAAKggB,IAAIrxB,GAASqR,KAAKigB,KAClCtxB,GAAS6e,EAAIxN,KAAK8f,IAAI,GAAIxtB,IAAM,IAClCA,IACAkb,GAAK,IAGL7e,GADE2D,EAAIkvO,GAAS,EACNG,EAAKn0N,EAELm0N,EAAK3hO,KAAK8f,IAAI,EAAG,EAAI0hN,IAEpBh0N,GAAK,IACflb,IACAkb,GAAK,GAGHlb,EAAIkvO,GAASD,GACf90N,EAAI,EACJna,EAAIivO,GACKjvO,EAAIkvO,GAAS,GACtB/0N,GAAM9d,EAAQ6e,EAAK,GAAKxN,KAAK8f,IAAI,EAAGshN,GACpC9uO,GAAQkvO,IAER/0N,EAAI9d,EAAQqR,KAAK8f,IAAI,EAAG0hN,EAAQ,GAAKxhO,KAAK8f,IAAI,EAAGshN,GACjD9uO,EAAI,IAID8uO,GAAQ,EAAG1oO,EAAOiU,EAASlf,GAAS,IAAJgf,EAAUhf,GAAKk5B,EAAGla,GAAK,IAAK20N,GAAQ,GAI3E,IAFA9uO,EAAKA,GAAK8uO,EAAQ30N,EAClB60N,GAAQF,EACDE,EAAO,EAAG5oO,EAAOiU,EAASlf,GAAS,IAAJ6E,EAAU7E,GAAKk5B,EAAGr0B,GAAK,IAAKgvO,GAAQ,GAE1E5oO,EAAOiU,EAASlf,EAAIk5B,IAAU,IAAJv0B,I,cCnF5B,IAAIuF,EAAW,GAAGA,SAElB/H,EAAOC,QAAUoC,MAAMC,SAAW,SAAUa,GAC1C,MAA6B,kBAAtB4E,EAAStH,KAAK0C,K,gBCIvB,IAAI6uO,EAAW,SAAU/xO,GACvB,aAEA,IAEI4B,EAFAowO,EAAK9zO,OAAOM,UACZyzO,EAASD,EAAGzxO,eAEZ2xO,EAA4B,oBAAXhwO,OAAwBA,OAAS,GAClDiwO,EAAiBD,EAAQ/vO,UAAY,aACrCiwO,EAAsBF,EAAQG,eAAiB,kBAC/CC,EAAoBJ,EAAQK,aAAe,gBAE/C,SAAS/2D,EAAO15K,EAAK1D,EAAKU,GAOxB,OANAZ,OAAOC,eAAe2D,EAAK1D,EAAK,CAC9BU,MAAOA,EACPf,YAAY,EACZC,cAAc,EACdC,UAAU,IAEL6D,EAAI1D,GAEb,IAEEo9K,EAAO,GAAI,IACX,MAAO75K,GACP65K,EAAS,SAAS15K,EAAK1D,EAAKU,GAC1B,OAAOgD,EAAI1D,GAAOU,GAItB,SAASi8B,EAAKy3M,EAASC,EAAShxO,EAAMixO,GAEpC,IAAIC,EAAiBF,GAAWA,EAAQj0O,qBAAqBo0O,EAAYH,EAAUG,EAC/E93M,EAAY58B,OAAOU,OAAO+zO,EAAen0O,WACzCsF,EAAU,IAAI+uO,EAAQH,GAAe,IAMzC,OAFA53M,EAAUg4M,QAsMZ,SAA0BN,EAAS/wO,EAAMqC,GACvC,IAAIkB,EAAQ+tO,EAEZ,OAAO,SAAgB36N,EAAQnX,GAC7B,GAAI+D,IAAUguO,EACZ,MAAM,IAAInoO,MAAM,gCAGlB,GAAI7F,IAAUiuO,EAAmB,CAC/B,GAAe,UAAX76N,EACF,MAAMnX,EAKR,OAAOiyO,IAMT,IAHApvO,EAAQsU,OAASA,EACjBtU,EAAQ7C,IAAMA,IAED,CACX,IAAIkyO,EAAWrvO,EAAQqvO,SACvB,GAAIA,EAAU,CACZ,IAAIC,EAAiBC,EAAoBF,EAAUrvO,GACnD,GAAIsvO,EAAgB,CAClB,GAAIA,IAAmBE,EAAkB,SACzC,OAAOF,GAIX,GAAuB,SAAnBtvO,EAAQsU,OAGVtU,EAAQyvO,KAAOzvO,EAAQ0vO,MAAQ1vO,EAAQ7C,SAElC,GAAuB,UAAnB6C,EAAQsU,OAAoB,CACrC,GAAIpT,IAAU+tO,EAEZ,MADA/tO,EAAQiuO,EACFnvO,EAAQ7C,IAGhB6C,EAAQ2vO,kBAAkB3vO,EAAQ7C,SAEN,WAAnB6C,EAAQsU,QACjBtU,EAAQ4vO,OAAO,SAAU5vO,EAAQ7C,KAGnC+D,EAAQguO,EAER,IAAIW,EAASC,EAASpB,EAAS/wO,EAAMqC,GACrC,GAAoB,WAAhB6vO,EAAOruN,KAAmB,CAO5B,GAJAtgB,EAAQlB,EAAQ1C,KACZ6xO,EACAY,EAEAF,EAAO1yO,MAAQqyO,EACjB,SAGF,MAAO,CACLx0O,MAAO60O,EAAO1yO,IACdG,KAAM0C,EAAQ1C,MAGS,UAAhBuyO,EAAOruN,OAChBtgB,EAAQiuO,EAGRnvO,EAAQsU,OAAS,QACjBtU,EAAQ7C,IAAM0yO,EAAO1yO,OA9QP6yO,CAAiBtB,EAAS/wO,EAAMqC,GAE7Cg3B,EAcT,SAAS84M,EAASpyO,EAAIM,EAAKb,GACzB,IACE,MAAO,CAAEqkB,KAAM,SAAUrkB,IAAKO,EAAGhB,KAAKsB,EAAKb,IAC3C,MAAOU,GACP,MAAO,CAAE2jB,KAAM,QAASrkB,IAAKU,IAhBjC3B,EAAQ+6B,KAAOA,EAoBf,IAAIg4M,EAAyB,iBACzBc,EAAyB,iBACzBb,EAAoB,YACpBC,EAAoB,YAIpBK,EAAmB,GAMvB,SAASV,KACT,SAASmB,KACT,SAASC,KAIT,IAAIC,EAAoB,GACxBA,EAAkB9B,GAAkB,WAClC,OAAO9yO,MAGT,IAAI60O,EAAWh2O,OAAO2B,eAClBs0O,EAA0BD,GAAYA,EAASA,EAAS3tO,EAAO,MAC/D4tO,GACAA,IAA4BnC,GAC5BC,EAAOzxO,KAAK2zO,EAAyBhC,KAGvC8B,EAAoBE,GAGtB,IAAIC,EAAKJ,EAA2Bx1O,UAClCo0O,EAAUp0O,UAAYN,OAAOU,OAAOq1O,GAWtC,SAASI,EAAsB71O,GAC7B,CAAC,OAAQ,QAAS,UAAU4J,SAAQ,SAASgQ,GAC3CojK,EAAOh9K,EAAW4Z,GAAQ,SAASnX,GACjC,OAAO5B,KAAKyzO,QAAQ16N,EAAQnX,SAkClC,SAASqzO,EAAcx5M,EAAWy5M,GAChC,SAASC,EAAOp8N,EAAQnX,EAAKJ,EAASC,GACpC,IAAI6yO,EAASC,EAAS94M,EAAU1iB,GAAS0iB,EAAW75B,GACpD,GAAoB,UAAhB0yO,EAAOruN,KAEJ,CACL,IAAIpmB,EAASy0O,EAAO1yO,IAChBnC,EAAQI,EAAOJ,MACnB,OAAIA,GACiB,kBAAVA,GACPmzO,EAAOzxO,KAAK1B,EAAO,WACdy1O,EAAY1zO,QAAQ/B,EAAM21O,SAASnzO,MAAK,SAASxC,GACtD01O,EAAO,OAAQ11O,EAAO+B,EAASC,MAC9B,SAASa,GACV6yO,EAAO,QAAS7yO,EAAKd,EAASC,MAI3ByzO,EAAY1zO,QAAQ/B,GAAOwC,MAAK,SAASozO,GAI9Cx1O,EAAOJ,MAAQ41O,EACf7zO,EAAQ3B,MACP,SAASiC,GAGV,OAAOqzO,EAAO,QAASrzO,EAAON,EAASC,MAvBzCA,EAAO6yO,EAAO1yO,KA4BlB,IAAI0zO,EAgCJt1O,KAAKyzO,QA9BL,SAAiB16N,EAAQnX,GACvB,SAAS2zO,IACP,OAAO,IAAIL,GAAY,SAAS1zO,EAASC,GACvC0zO,EAAOp8N,EAAQnX,EAAKJ,EAASC,MAIjC,OAAO6zO,EAaLA,EAAkBA,EAAgBrzO,KAChCszO,EAGAA,GACEA,KAkHV,SAASvB,EAAoBF,EAAUrvO,GACrC,IAAIsU,EAAS+6N,EAAShxO,SAAS2B,EAAQsU,QACvC,GAAIA,IAAWxW,EAAW,CAKxB,GAFAkC,EAAQqvO,SAAW,KAEI,UAAnBrvO,EAAQsU,OAAoB,CAE9B,GAAI+6N,EAAShxO,SAAT,SAGF2B,EAAQsU,OAAS,SACjBtU,EAAQ7C,IAAMW,EACdyxO,EAAoBF,EAAUrvO,GAEP,UAAnBA,EAAQsU,QAGV,OAAOk7N,EAIXxvO,EAAQsU,OAAS,QACjBtU,EAAQ7C,IAAM,IAAIzD,UAChB,kDAGJ,OAAO81O,EAGT,IAAIK,EAASC,EAASx7N,EAAQ+6N,EAAShxO,SAAU2B,EAAQ7C,KAEzD,GAAoB,UAAhB0yO,EAAOruN,KAIT,OAHAxhB,EAAQsU,OAAS,QACjBtU,EAAQ7C,IAAM0yO,EAAO1yO,IACrB6C,EAAQqvO,SAAW,KACZG,EAGT,IAAIpyO,EAAOyyO,EAAO1yO,IAElB,OAAMC,EAOFA,EAAKE,MAGP0C,EAAQqvO,EAAS0B,YAAc3zO,EAAKpC,MAGpCgF,EAAQf,KAAOowO,EAAS2B,QAQD,WAAnBhxO,EAAQsU,SACVtU,EAAQsU,OAAS,OACjBtU,EAAQ7C,IAAMW,GAUlBkC,EAAQqvO,SAAW,KACZG,GANEpyO,GA3BP4C,EAAQsU,OAAS,QACjBtU,EAAQ7C,IAAM,IAAIzD,UAAU,oCAC5BsG,EAAQqvO,SAAW,KACZG,GAoDX,SAASyB,EAAaC,GACpB,IAAIngO,EAAQ,CAAEogO,OAAQD,EAAK,IAEvB,KAAKA,IACPngO,EAAMqgO,SAAWF,EAAK,IAGpB,KAAKA,IACPngO,EAAMsgO,WAAaH,EAAK,GACxBngO,EAAMugO,SAAWJ,EAAK,IAGxB31O,KAAKg2O,WAAW7xO,KAAKqR,GAGvB,SAASygO,EAAczgO,GACrB,IAAI8+N,EAAS9+N,EAAM0gO,YAAc,GACjC5B,EAAOruN,KAAO,gBACPquN,EAAO1yO,IACd4T,EAAM0gO,WAAa5B,EAGrB,SAASd,EAAQH,GAIfrzO,KAAKg2O,WAAa,CAAC,CAAEJ,OAAQ,SAC7BvC,EAAYtqO,QAAQ2sO,EAAc11O,MAClCA,KAAK0kE,OAAM,GA8Bb,SAASx9D,EAAOivO,GACd,GAAIA,EAAU,CACZ,IAAIC,EAAiBD,EAASrD,GAC9B,GAAIsD,EACF,OAAOA,EAAej1O,KAAKg1O,GAG7B,GAA6B,oBAAlBA,EAASzyO,KAClB,OAAOyyO,EAGT,IAAKjxL,MAAMixL,EAAS33O,QAAS,CAC3B,IAAID,GAAK,EAAGmF,EAAO,SAASA,IAC1B,OAASnF,EAAI43O,EAAS33O,QACpB,GAAIo0O,EAAOzxO,KAAKg1O,EAAU53O,GAGxB,OAFAmF,EAAKjE,MAAQ02O,EAAS53O,GACtBmF,EAAK3B,MAAO,EACL2B,EAOX,OAHAA,EAAKjE,MAAQ8C,EACbmB,EAAK3B,MAAO,EAEL2B,GAGT,OAAOA,EAAKA,KAAOA,GAKvB,MAAO,CAAEA,KAAMmwO,GAIjB,SAASA,IACP,MAAO,CAAEp0O,MAAO8C,EAAWR,MAAM,GA+MnC,OA5mBA2yO,EAAkBv1O,UAAY41O,EAAGv1O,YAAcm1O,EAC/CA,EAA2Bn1O,YAAck1O,EACzCA,EAAkBjuC,YAActqB,EAC9Bw4D,EACA1B,EACA,qBAaFtyO,EAAQ01O,oBAAsB,SAASC,GACrC,IAAI3uN,EAAyB,oBAAX2uN,GAAyBA,EAAO92O,YAClD,QAAOmoB,IACHA,IAAS+sN,GAG2B,uBAAnC/sN,EAAK8+K,aAAe9+K,EAAKnjB,QAIhC7D,EAAQ41O,KAAO,SAASD,GAQtB,OAPIz3O,OAAO0B,eACT1B,OAAO0B,eAAe+1O,EAAQ3B,IAE9B2B,EAAO71O,UAAYk0O,EACnBx4D,EAAOm6D,EAAQrD,EAAmB,sBAEpCqD,EAAOn3O,UAAYN,OAAOU,OAAOw1O,GAC1BuB,GAOT31O,EAAQ61O,MAAQ,SAAS50O,GACvB,MAAO,CAAEwzO,QAASxzO,IAsEpBozO,EAAsBC,EAAc91O,WACpC81O,EAAc91O,UAAU4zO,GAAuB,WAC7C,OAAO/yO,MAETW,EAAQs0O,cAAgBA,EAKxBt0O,EAAQ81O,MAAQ,SAAStD,EAASC,EAAShxO,EAAMixO,EAAa6B,QACxC,IAAhBA,IAAwBA,EAAclzO,SAE1C,IAAI6U,EAAO,IAAIo+N,EACbv5M,EAAKy3M,EAASC,EAAShxO,EAAMixO,GAC7B6B,GAGF,OAAOv0O,EAAQ01O,oBAAoBjD,GAC/Bv8N,EACAA,EAAKnT,OAAOzB,MAAK,SAASpC,GACxB,OAAOA,EAAOkC,KAAOlC,EAAOJ,MAAQoX,EAAKnT,WAuKjDsxO,EAAsBD,GAEtB54D,EAAO44D,EAAI9B,EAAmB,aAO9B8B,EAAGjC,GAAkB,WACnB,OAAO9yO,MAGT+0O,EAAGtsO,SAAW,WACZ,MAAO,sBAkCT9H,EAAQkG,KAAO,SAAS5F,GACtB,IAAI4F,EAAO,GACX,IAAK,IAAI9H,KAAOkC,EACd4F,EAAK1C,KAAKpF,GAMZ,OAJA8H,EAAK6vO,UAIE,SAAShzO,IACd,KAAOmD,EAAKrI,QAAQ,CAClB,IAAIO,EAAM8H,EAAKkF,MACf,GAAIhN,KAAOkC,EAGT,OAFAyC,EAAKjE,MAAQV,EACb2E,EAAK3B,MAAO,EACL2B,EAQX,OADAA,EAAK3B,MAAO,EACL2B,IAsCX/C,EAAQuG,OAASA,EAMjBssO,EAAQr0O,UAAY,CAClBK,YAAag0O,EAEb9uK,MAAO,SAASiyK,GAcd,GAbA32O,KAAK+3K,KAAO,EACZ/3K,KAAK0D,KAAO,EAGZ1D,KAAKk0O,KAAOl0O,KAAKm0O,MAAQ5xO,EACzBvC,KAAK+B,MAAO,EACZ/B,KAAK8zO,SAAW,KAEhB9zO,KAAK+Y,OAAS,OACd/Y,KAAK4B,IAAMW,EAEXvC,KAAKg2O,WAAWjtO,QAAQktO,IAEnBU,EACH,IAAK,IAAInyO,KAAQxE,KAEQ,MAAnBwE,EAAKkH,OAAO,IACZknO,EAAOzxO,KAAKnB,KAAMwE,KACjB0gD,OAAO1gD,EAAKiG,MAAM,MACrBzK,KAAKwE,GAAQjC,IAMrBiwD,KAAM,WACJxyD,KAAK+B,MAAO,EAEZ,IACI60O,EADY52O,KAAKg2O,WAAW,GACLE,WAC3B,GAAwB,UAApBU,EAAW3wN,KACb,MAAM2wN,EAAWh1O,IAGnB,OAAO5B,KAAK62O,MAGdzC,kBAAmB,SAAS0C,GAC1B,GAAI92O,KAAK+B,KACP,MAAM+0O,EAGR,IAAIryO,EAAUzE,KACd,SAAS+2O,EAAOC,EAAKC,GAYnB,OAXA3C,EAAOruN,KAAO,QACdquN,EAAO1yO,IAAMk1O,EACbryO,EAAQf,KAAOszO,EAEXC,IAGFxyO,EAAQsU,OAAS,OACjBtU,EAAQ7C,IAAMW,KAGN00O,EAGZ,IAAK,IAAI14O,EAAIyB,KAAKg2O,WAAWx3O,OAAS,EAAGD,GAAK,IAAKA,EAAG,CACpD,IAAIiX,EAAQxV,KAAKg2O,WAAWz3O,GACxB+1O,EAAS9+N,EAAM0gO,WAEnB,GAAqB,SAAjB1gO,EAAMogO,OAIR,OAAOmB,EAAO,OAGhB,GAAIvhO,EAAMogO,QAAU51O,KAAK+3K,KAAM,CAC7B,IAAIm/D,EAAWtE,EAAOzxO,KAAKqU,EAAO,YAC9B2hO,EAAavE,EAAOzxO,KAAKqU,EAAO,cAEpC,GAAI0hO,GAAYC,EAAY,CAC1B,GAAIn3O,KAAK+3K,KAAOviK,EAAMqgO,SACpB,OAAOkB,EAAOvhO,EAAMqgO,UAAU,GACzB,GAAI71O,KAAK+3K,KAAOviK,EAAMsgO,WAC3B,OAAOiB,EAAOvhO,EAAMsgO,iBAGjB,GAAIoB,GACT,GAAIl3O,KAAK+3K,KAAOviK,EAAMqgO,SACpB,OAAOkB,EAAOvhO,EAAMqgO,UAAU,OAG3B,KAAIsB,EAMT,MAAM,IAAI3rO,MAAM,0CALhB,GAAIxL,KAAK+3K,KAAOviK,EAAMsgO,WACpB,OAAOiB,EAAOvhO,EAAMsgO,gBAU9BzB,OAAQ,SAASpuN,EAAMrkB,GACrB,IAAK,IAAIrD,EAAIyB,KAAKg2O,WAAWx3O,OAAS,EAAGD,GAAK,IAAKA,EAAG,CACpD,IAAIiX,EAAQxV,KAAKg2O,WAAWz3O,GAC5B,GAAIiX,EAAMogO,QAAU51O,KAAK+3K,MACrB66D,EAAOzxO,KAAKqU,EAAO,eACnBxV,KAAK+3K,KAAOviK,EAAMsgO,WAAY,CAChC,IAAIsB,EAAe5hO,EACnB,OAIA4hO,IACU,UAATnxN,GACS,aAATA,IACDmxN,EAAaxB,QAAUh0O,GACvBA,GAAOw1O,EAAatB,aAGtBsB,EAAe,MAGjB,IAAI9C,EAAS8C,EAAeA,EAAalB,WAAa,GAItD,OAHA5B,EAAOruN,KAAOA,EACdquN,EAAO1yO,IAAMA,EAETw1O,GACFp3O,KAAK+Y,OAAS,OACd/Y,KAAK0D,KAAO0zO,EAAatB,WAClB7B,GAGFj0O,KAAKivF,SAASqlJ,IAGvBrlJ,SAAU,SAASqlJ,EAAQyB,GACzB,GAAoB,UAAhBzB,EAAOruN,KACT,MAAMquN,EAAO1yO,IAcf,MAXoB,UAAhB0yO,EAAOruN,MACS,aAAhBquN,EAAOruN,KACTjmB,KAAK0D,KAAO4wO,EAAO1yO,IACM,WAAhB0yO,EAAOruN,MAChBjmB,KAAK62O,KAAO72O,KAAK4B,IAAM0yO,EAAO1yO,IAC9B5B,KAAK+Y,OAAS,SACd/Y,KAAK0D,KAAO,OACa,WAAhB4wO,EAAOruN,MAAqB8vN,IACrC/1O,KAAK0D,KAAOqyO,GAGP9B,GAGTv1J,OAAQ,SAASo3J,GACf,IAAK,IAAIv3O,EAAIyB,KAAKg2O,WAAWx3O,OAAS,EAAGD,GAAK,IAAKA,EAAG,CACpD,IAAIiX,EAAQxV,KAAKg2O,WAAWz3O,GAC5B,GAAIiX,EAAMsgO,aAAeA,EAGvB,OAFA91O,KAAKivF,SAASz5E,EAAM0gO,WAAY1gO,EAAMugO,UACtCE,EAAczgO,GACPy+N,IAKb,MAAS,SAAS2B,GAChB,IAAK,IAAIr3O,EAAIyB,KAAKg2O,WAAWx3O,OAAS,EAAGD,GAAK,IAAKA,EAAG,CACpD,IAAIiX,EAAQxV,KAAKg2O,WAAWz3O,GAC5B,GAAIiX,EAAMogO,SAAWA,EAAQ,CAC3B,IAAItB,EAAS9+N,EAAM0gO,WACnB,GAAoB,UAAhB5B,EAAOruN,KAAkB,CAC3B,IAAIoxN,EAAS/C,EAAO1yO,IACpBq0O,EAAczgO,GAEhB,OAAO6hO,GAMX,MAAM,IAAI7rO,MAAM,0BAGlB8rO,cAAe,SAASnB,EAAUX,EAAYC,GAa5C,OAZAz1O,KAAK8zO,SAAW,CACdhxO,SAAUoE,EAAOivO,GACjBX,WAAYA,EACZC,QAASA,GAGS,SAAhBz1O,KAAK+Y,SAGP/Y,KAAK4B,IAAMW,GAGN0xO,IAQJtzO,EA7sBM,CAotBgBD,EAAOC,SAGtC,IACE42O,mBAAqB7E,EACrB,MAAO8E,GAUPryN,SAAS,IAAK,yBAAdA,CAAwCutN,K,6BCluB7B9xO,EAAQ,IAAiB,IAAI0C,EAAE1C,EAAQ,GAASskB,EAAE,MAA6B,GAAvBvkB,EAAQ4nM,SAAS,MAAS,oBAAoB1lM,QAAQA,OAAO8lM,IAAI,CAAC,IAAIhuL,EAAE9X,OAAO8lM,IAAIzjL,EAAEvK,EAAE,iBAAiBha,EAAQ4nM,SAAS5tL,EAAE,kBAAkB,IAAI4C,EAAEja,EAAEonM,mDAAmDL,kBAAkBlnM,EAAEtE,OAAOM,UAAU+B,eAAeqV,EAAE,CAACxX,KAAI,EAAGqtI,KAAI,EAAGk9D,QAAO,EAAGC,UAAS,GACrW,SAASz2K,EAAExU,EAAE3T,EAAEmB,GAAG,IAAIlB,EAAE6sB,EAAE,GAAGr0B,EAAE,KAAK4F,EAAE,KAAiF,IAAI4B,UAAhF,IAASkB,IAAI1I,EAAE,GAAG0I,QAAG,IAASnB,EAAE5L,MAAMqE,EAAE,GAAGuH,EAAE5L,UAAK,IAAS4L,EAAEyhI,MAAMpjI,EAAE2B,EAAEyhI,KAAczhI,EAAExH,EAAEhC,KAAKwJ,EAAEC,KAAK2L,EAAErV,eAAe0J,KAAK6sB,EAAE7sB,GAAGD,EAAEC,IAAI,GAAG0T,GAAGA,EAAEkoL,aAAa,IAAI57L,KAAKD,EAAE2T,EAAEkoL,kBAAe,IAAS/uK,EAAE7sB,KAAK6sB,EAAE7sB,GAAGD,EAAEC,IAAI,MAAM,CAAC6+L,SAASvkL,EAAEe,KAAK3H,EAAEvf,IAAIqE,EAAEgpI,IAAIpjI,EAAE1K,MAAMm5B,EAAEiyK,OAAOnsL,EAAE6rL,SAASzoM,EAAQ82O,IAAI3kN,EAAEnyB,EAAQ+2O,KAAK5kN,G,6BCAvV,IAAI6kN,EAAuB/2O,EAAQ,IAEnC,SAASg3O,KACT,SAASC,KACTA,EAAuBC,kBAAoBF,EAE3Cl3O,EAAOC,QAAU,WACf,SAASo3O,EAAKz5O,EAAO4pB,EAAU8vN,EAAenzO,EAAUozO,EAAcC,GACpE,GAAIA,IAAWP,EAAf,CAIA,IAAIr1O,EAAM,IAAIkJ,MACZ,mLAKF,MADAlJ,EAAIkC,KAAO,sBACLlC,GAGR,SAAS61O,IACP,OAAOJ,EAFTA,EAAK77N,WAAa67N,EAMlB,IAAIK,EAAiB,CACnBzoN,MAAOooN,EACPM,KAAMN,EACN1rG,KAAM0rG,EACNztF,OAAQytF,EACR92O,OAAQ82O,EACRn3L,OAAQm3L,EACRO,OAAQP,EAERQ,IAAKR,EACLS,QAASL,EACTlwO,QAAS8vO,EACTtnB,YAAasnB,EACbU,WAAYN,EACZ54H,KAAMw4H,EACNW,SAAUP,EACVQ,MAAOR,EACPS,UAAWT,EACX3iM,MAAO2iM,EACP7xO,MAAO6xO,EAEPU,eAAgBhB,EAChBC,kBAAmBF,GAKrB,OAFAQ,EAAen8N,UAAYm8N,EAEpBA,I,6BCnDT13O,EAAOC,QAFoB,gD,cCT3BD,EAAOC,QAAUoC,MAAMC,SAAW,SAAUa,GAC1C,MAA8C,kBAAvChF,OAAOM,UAAUsJ,SAAStH,KAAK0C,K,6BCEtCnD,EAAOC,QAAUC,EAAQ,K,6BCMd,IAAIgK,EAAE,oBAAoB/H,QAAQA,OAAO8lM,IAAIrqL,EAAE1T,EAAE/H,OAAO8lM,IAAI,iBAAiB,MAAMlxK,EAAE7sB,EAAE/H,OAAO8lM,IAAI,gBAAgB,MAAMvlM,EAAEwH,EAAE/H,OAAO8lM,IAAI,kBAAkB,MAAMrlM,EAAEsH,EAAE/H,OAAO8lM,IAAI,qBAAqB,MAAMzjL,EAAEta,EAAE/H,OAAO8lM,IAAI,kBAAkB,MAAMhuL,EAAE/P,EAAE/H,OAAO8lM,IAAI,kBAAkB,MAAM78L,EAAElB,EAAE/H,OAAO8lM,IAAI,iBAAiB,MAAM3/L,EAAE4B,EAAE/H,OAAO8lM,IAAI,oBAAoB,MAAMprL,EAAE3S,EAAE/H,OAAO8lM,IAAI,yBAAyB,MAAMxlM,EAAEyH,EAAE/H,OAAO8lM,IAAI,qBAAqB,MAAMpyL,EAAE3L,EAAE/H,OAAO8lM,IAAI,kBAAkB,MAAM71K,EAAEloB,EACpf/H,OAAO8lM,IAAI,uBAAuB,MAAMvwK,EAAExtB,EAAE/H,OAAO8lM,IAAI,cAAc,MAAMl4K,EAAE7lB,EAAE/H,OAAO8lM,IAAI,cAAc,MAAM3oL,EAAEpV,EAAE/H,OAAO8lM,IAAI,eAAe,MAAM/0K,EAAEhpB,EAAE/H,OAAO8lM,IAAI,qBAAqB,MAAM7sL,EAAElR,EAAE/H,OAAO8lM,IAAI,mBAAmB,MAAM5sL,EAAEnR,EAAE/H,OAAO8lM,IAAI,eAAe,MAClQ,SAASrsK,EAAE3xB,GAAG,GAAG,kBAAkBA,GAAG,OAAOA,EAAE,CAAC,IAAI+uC,EAAE/uC,EAAE8+L,SAAS,OAAO/vJ,GAAG,KAAKp7B,EAAE,OAAO3T,EAAEA,EAAEsb,MAAQ,KAAKjd,EAAE,KAAKuU,EAAE,KAAKna,EAAE,KAAK8hB,EAAE,KAAK5hB,EAAE,KAAKiT,EAAE,OAAO5L,EAAE,QAAQ,OAAOA,EAAEA,GAAGA,EAAE8+L,UAAY,KAAK39L,EAAE,KAAK3I,EAAE,KAAKstB,EAAE,KAAK2H,EAAE,KAAKzd,EAAE,OAAOhQ,EAAE,QAAQ,OAAO+uC,GAAG,KAAKjiB,EAAE,OAAOiiB,IAAI,SAAS+oG,EAAE93I,GAAG,OAAO2xB,EAAE3xB,KAAK4S,EAAE5c,EAAQm4O,UAAU9vO,EAAErI,EAAQo4O,eAAex7N,EAAE5c,EAAQq4O,gBAAgBltO,EAAEnL,EAAQs4O,gBAAgBt+N,EAAEha,EAAQslJ,QAAQ3nI,EAAE3d,EAAQ6mM,WAAWrkM,EAAExC,EAAQ4nM,SAASnlM,EAAEzC,EAAQu4O,KAAKzoN,EAAE9vB,EAAQ8mM,KAAKrvK,EAAEz3B,EAAQw4O,OAAO1hN,EAChf92B,EAAQ8nM,SAASvjL,EAAEvkB,EAAQ6nM,WAAWllM,EAAE3C,EAAQ+nM,SAASnyL,EAAE5V,EAAQy4O,YAAY,SAASzuO,GAAG,OAAO83I,EAAE93I,IAAI2xB,EAAE3xB,KAAK3B,GAAGrI,EAAQ04O,iBAAiB52F,EAAE9hJ,EAAQ24O,kBAAkB,SAAS3uO,GAAG,OAAO2xB,EAAE3xB,KAAKmB,GAAGnL,EAAQ44O,kBAAkB,SAAS5uO,GAAG,OAAO2xB,EAAE3xB,KAAKgQ,GAAGha,EAAQ64O,UAAU,SAAS7uO,GAAG,MAAM,kBAAkBA,GAAG,OAAOA,GAAGA,EAAE8+L,WAAWnrL,GAAG3d,EAAQ84O,aAAa,SAAS9uO,GAAG,OAAO2xB,EAAE3xB,KAAKxH,GAAGxC,EAAQ+4O,WAAW,SAAS/uO,GAAG,OAAO2xB,EAAE3xB,KAAKvH,GAAGzC,EAAQg5O,OAAO,SAAShvO,GAAG,OAAO2xB,EAAE3xB,KAAK8lB,GACzd9vB,EAAQ4mM,OAAO,SAAS58L,GAAG,OAAO2xB,EAAE3xB,KAAKytB,GAAGz3B,EAAQi5O,SAAS,SAASjvO,GAAG,OAAO2xB,EAAE3xB,KAAK8sB,GAAG92B,EAAQk5O,WAAW,SAASlvO,GAAG,OAAO2xB,EAAE3xB,KAAKua,GAAGvkB,EAAQm5O,aAAa,SAASnvO,GAAG,OAAO2xB,EAAE3xB,KAAKrH,GAAG3C,EAAQo5O,WAAW,SAASpvO,GAAG,OAAO2xB,EAAE3xB,KAAK4L,GACzO5V,EAAQq5O,mBAAmB,SAASrvO,GAAG,MAAM,kBAAkBA,GAAG,oBAAoBA,GAAGA,IAAIvH,GAAGuH,IAAI4S,GAAG5S,IAAIua,GAAGva,IAAIrH,GAAGqH,IAAI4L,GAAG5L,IAAImoB,GAAG,kBAAkBnoB,GAAG,OAAOA,IAAIA,EAAE8+L,WAAWh5K,GAAG9lB,EAAE8+L,WAAWrxK,GAAGztB,EAAE8+L,WAAW9uL,GAAGhQ,EAAE8+L,WAAW39L,GAAGnB,EAAE8+L,WAAWtmM,GAAGwH,EAAE8+L,WAAW71K,GAAGjpB,EAAE8+L,WAAW3tL,GAAGnR,EAAE8+L,WAAW1tL,GAAGpR,EAAE8+L,WAAWzpL,IAAIrf,EAAQs5O,OAAO39M,G,6BCXjU57B,EAAOC,QAAUC,EAAQ,K,6BCMd,IAAIgK,EAAE,oBAAoB/H,QAAQA,OAAO8lM,IAAIrqL,EAAE1T,EAAE/H,OAAO8lM,IAAI,iBAAiB,MAAMlxK,EAAE7sB,EAAE/H,OAAO8lM,IAAI,gBAAgB,MAAMvlM,EAAEwH,EAAE/H,OAAO8lM,IAAI,kBAAkB,MAAMrlM,EAAEsH,EAAE/H,OAAO8lM,IAAI,qBAAqB,MAAMzjL,EAAEta,EAAE/H,OAAO8lM,IAAI,kBAAkB,MAAMhuL,EAAE/P,EAAE/H,OAAO8lM,IAAI,kBAAkB,MAAM78L,EAAElB,EAAE/H,OAAO8lM,IAAI,iBAAiB,MAAM3/L,EAAE4B,EAAE/H,OAAO8lM,IAAI,oBAAoB,MAAMprL,EAAE3S,EAAE/H,OAAO8lM,IAAI,yBAAyB,MAAMxlM,EAAEyH,EAAE/H,OAAO8lM,IAAI,qBAAqB,MAAMpyL,EAAE3L,EAAE/H,OAAO8lM,IAAI,kBAAkB,MAAM71K,EAAEloB,EACpf/H,OAAO8lM,IAAI,uBAAuB,MAAMvwK,EAAExtB,EAAE/H,OAAO8lM,IAAI,cAAc,MAAMl4K,EAAE7lB,EAAE/H,OAAO8lM,IAAI,cAAc,MAAM3oL,EAAEpV,EAAE/H,OAAO8lM,IAAI,eAAe,MAAM/0K,EAAEhpB,EAAE/H,OAAO8lM,IAAI,qBAAqB,MAAM7sL,EAAElR,EAAE/H,OAAO8lM,IAAI,mBAAmB,MAAM5sL,EAAEnR,EAAE/H,OAAO8lM,IAAI,eAAe,MAClQ,SAASrsK,EAAE3xB,GAAG,GAAG,kBAAkBA,GAAG,OAAOA,EAAE,CAAC,IAAI+uC,EAAE/uC,EAAE8+L,SAAS,OAAO/vJ,GAAG,KAAKp7B,EAAE,OAAO3T,EAAEA,EAAEsb,MAAQ,KAAKjd,EAAE,KAAKuU,EAAE,KAAKna,EAAE,KAAK8hB,EAAE,KAAK5hB,EAAE,KAAKiT,EAAE,OAAO5L,EAAE,QAAQ,OAAOA,EAAEA,GAAGA,EAAE8+L,UAAY,KAAK39L,EAAE,KAAK3I,EAAE,KAAKstB,EAAE,KAAK2H,EAAE,KAAKzd,EAAE,OAAOhQ,EAAE,QAAQ,OAAO+uC,GAAG,KAAKjiB,EAAE,OAAOiiB,IAAI,SAAS+oG,EAAE93I,GAAG,OAAO2xB,EAAE3xB,KAAK4S,EAAE5c,EAAQm4O,UAAU9vO,EAAErI,EAAQo4O,eAAex7N,EAAE5c,EAAQq4O,gBAAgBltO,EAAEnL,EAAQs4O,gBAAgBt+N,EAAEha,EAAQslJ,QAAQ3nI,EAAE3d,EAAQ6mM,WAAWrkM,EAAExC,EAAQ4nM,SAASnlM,EAAEzC,EAAQu4O,KAAKzoN,EAAE9vB,EAAQ8mM,KAAKrvK,EAAEz3B,EAAQw4O,OAAO1hN,EAChf92B,EAAQ8nM,SAASvjL,EAAEvkB,EAAQ6nM,WAAWllM,EAAE3C,EAAQ+nM,SAASnyL,EAAE5V,EAAQy4O,YAAY,SAASzuO,GAAG,OAAO83I,EAAE93I,IAAI2xB,EAAE3xB,KAAK3B,GAAGrI,EAAQ04O,iBAAiB52F,EAAE9hJ,EAAQ24O,kBAAkB,SAAS3uO,GAAG,OAAO2xB,EAAE3xB,KAAKmB,GAAGnL,EAAQ44O,kBAAkB,SAAS5uO,GAAG,OAAO2xB,EAAE3xB,KAAKgQ,GAAGha,EAAQ64O,UAAU,SAAS7uO,GAAG,MAAM,kBAAkBA,GAAG,OAAOA,GAAGA,EAAE8+L,WAAWnrL,GAAG3d,EAAQ84O,aAAa,SAAS9uO,GAAG,OAAO2xB,EAAE3xB,KAAKxH,GAAGxC,EAAQ+4O,WAAW,SAAS/uO,GAAG,OAAO2xB,EAAE3xB,KAAKvH,GAAGzC,EAAQg5O,OAAO,SAAShvO,GAAG,OAAO2xB,EAAE3xB,KAAK8lB,GACzd9vB,EAAQ4mM,OAAO,SAAS58L,GAAG,OAAO2xB,EAAE3xB,KAAKytB,GAAGz3B,EAAQi5O,SAAS,SAASjvO,GAAG,OAAO2xB,EAAE3xB,KAAK8sB,GAAG92B,EAAQk5O,WAAW,SAASlvO,GAAG,OAAO2xB,EAAE3xB,KAAKua,GAAGvkB,EAAQm5O,aAAa,SAASnvO,GAAG,OAAO2xB,EAAE3xB,KAAKrH,GAAG3C,EAAQo5O,WAAW,SAASpvO,GAAG,OAAO2xB,EAAE3xB,KAAK4L,GACzO5V,EAAQq5O,mBAAmB,SAASrvO,GAAG,MAAM,kBAAkBA,GAAG,oBAAoBA,GAAGA,IAAIvH,GAAGuH,IAAI4S,GAAG5S,IAAIua,GAAGva,IAAIrH,GAAGqH,IAAI4L,GAAG5L,IAAImoB,GAAG,kBAAkBnoB,GAAG,OAAOA,IAAIA,EAAE8+L,WAAWh5K,GAAG9lB,EAAE8+L,WAAWrxK,GAAGztB,EAAE8+L,WAAW9uL,GAAGhQ,EAAE8+L,WAAW39L,GAAGnB,EAAE8+L,WAAWtmM,GAAGwH,EAAE8+L,WAAW71K,GAAGjpB,EAAE8+L,WAAW3tL,GAAGnR,EAAE8+L,WAAW1tL,GAAGpR,EAAE8+L,WAAWzpL,IAAIrf,EAAQs5O,OAAO39M","file":"static/js/2.1d91780b.chunk.js","sourcesContent":["export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","import setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport isNativeReflectConstruct from \"@babel/runtime/helpers/esm/isNativeReflectConstruct\";\nimport possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","module.exports = require(\"regenerator-runtime\");\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","import superPropBase from \"@babel/runtime/helpers/esm/superPropBase\";\nexport default function _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}","import getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import arrayWithHoles from \"@babel/runtime/helpers/esm/arrayWithHoles\";\nimport iterableToArrayLimit from \"@babel/runtime/helpers/esm/iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nimport nonIterableRest from \"@babel/runtime/helpers/esm/nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import createNamedContext from \"./createNameContext\";\n\nconst historyContext = /*#__PURE__*/ createNamedContext(\"Router-History\");\nexport default historyContext;\n","// TODO: Replace with React.createContext once we can assume React 16+\nimport createContext from \"mini-create-react-context\";\n\nconst createNamedContext = name => {\n const context = createContext();\n context.displayName = name;\n\n return context;\n};\n\nexport default createNamedContext;\n","// TODO: Replace with React.createContext once we can assume React 16+\nimport createContext from \"mini-create-react-context\";\n\nconst createNamedContext = name => {\n const context = createContext();\n context.displayName = name;\n\n return context;\n};\n\nconst context = /*#__PURE__*/ createNamedContext(\"Router\");\nexport default context;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\nimport HistoryContext from \"./HistoryContext.js\";\nimport RouterContext from \"./RouterContext.js\";\n\n/**\n * The public API for putting history on context.\n */\nclass Router extends React.Component {\n static computeRootMatch(pathname) {\n return { path: \"/\", url: \"/\", params: {}, isExact: pathname === \"/\" };\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n location: props.history.location\n };\n\n // This is a bit of a hack. We have to start listening for location\n // changes here in the constructor in case there are any s\n // on the initial render. If there are, they will replace/push when\n // they mount and since cDM fires in children before parents, we may\n // get a new location before the is mounted.\n this._isMounted = false;\n this._pendingLocation = null;\n\n if (!props.staticContext) {\n this.unlisten = props.history.listen(location => {\n if (this._isMounted) {\n this.setState({ location });\n } else {\n this._pendingLocation = location;\n }\n });\n }\n }\n\n componentDidMount() {\n this._isMounted = true;\n\n if (this._pendingLocation) {\n this.setState({ location: this._pendingLocation });\n }\n }\n\n componentWillUnmount() {\n if (this.unlisten) this.unlisten();\n }\n\n render() {\n return (\n \n \n \n );\n }\n}\n\nif (__DEV__) {\n Router.propTypes = {\n children: PropTypes.node,\n history: PropTypes.object.isRequired,\n staticContext: PropTypes.object\n };\n\n Router.prototype.componentDidUpdate = function(prevProps) {\n warning(\n prevProps.history === this.props.history,\n \"You cannot change \"\n );\n };\n}\n\nexport default Router;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createMemoryHistory as createHistory } from \"history\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router.js\";\n\n/**\n * The public API for a that stores location in memory.\n */\nclass MemoryRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return ;\n }\n}\n\nif (__DEV__) {\n MemoryRouter.propTypes = {\n initialEntries: PropTypes.array,\n initialIndex: PropTypes.number,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number,\n children: PropTypes.node\n };\n\n MemoryRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\"\n );\n };\n}\n\nexport default MemoryRouter;\n","import React from \"react\";\n\nclass Lifecycle extends React.Component {\n componentDidMount() {\n if (this.props.onMount) this.props.onMount.call(this, this);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n }\n\n componentWillUnmount() {\n if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n }\n\n render() {\n return null;\n }\n}\n\nexport default Lifecycle;\n","import pathToRegexp from \"path-to-regexp\";\n\nconst cache = {};\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path, options) {\n const cacheKey = `${options.end}${options.strict}${options.sensitive}`;\n const pathCache = cache[cacheKey] || (cache[cacheKey] = {});\n\n if (pathCache[path]) return pathCache[path];\n\n const keys = [];\n const regexp = pathToRegexp(path, keys, options);\n const result = { regexp, keys };\n\n if (cacheCount < cacheLimit) {\n pathCache[path] = result;\n cacheCount++;\n }\n\n return result;\n}\n\n/**\n * Public API for matching a URL pathname to a path.\n */\nfunction matchPath(pathname, options = {}) {\n if (typeof options === \"string\" || Array.isArray(options)) {\n options = { path: options };\n }\n\n const { path, exact = false, strict = false, sensitive = false } = options;\n\n const paths = [].concat(path);\n\n return paths.reduce((matched, path) => {\n if (!path && path !== \"\") return null;\n if (matched) return matched;\n\n const { regexp, keys } = compilePath(path, {\n end: exact,\n strict,\n sensitive\n });\n const match = regexp.exec(pathname);\n\n if (!match) return null;\n\n const [url, ...values] = match;\n const isExact = pathname === url;\n\n if (exact && !isExact) return null;\n\n return {\n path, // the path used to match\n url: path === \"/\" && url === \"\" ? \"/\" : url, // the matched portion of the URL\n isExact, // whether or not we matched exactly\n params: keys.reduce((memo, key, index) => {\n memo[key.name] = values[index];\n return memo;\n }, {})\n };\n }, null);\n}\n\nexport default matchPath;\n","import React from \"react\";\nimport { isValidElementType } from \"react-is\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport matchPath from \"./matchPath.js\";\n\nfunction isEmptyChildren(children) {\n return React.Children.count(children) === 0;\n}\n\nfunction evalChildrenDev(children, props, path) {\n const value = children(props);\n\n warning(\n value !== undefined,\n \"You returned `undefined` from the `children` function of \" +\n `, but you ` +\n \"should have returned a React element or `null`\"\n );\n\n return value || null;\n}\n\n/**\n * The public API for matching a single path and rendering.\n */\nclass Route extends React.Component {\n render() {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const location = this.props.location || context.location;\n const match = this.props.computedMatch\n ? this.props.computedMatch // already computed the match for us\n : this.props.path\n ? matchPath(location.pathname, this.props)\n : context.match;\n\n const props = { ...context, location, match };\n\n let { children, component, render } = this.props;\n\n // Preact uses an empty array as children by\n // default, so use null if that's the case.\n if (Array.isArray(children) && children.length === 0) {\n children = null;\n }\n\n return (\n \n {props.match\n ? children\n ? typeof children === \"function\"\n ? __DEV__\n ? evalChildrenDev(children, props, this.props.path)\n : children(props)\n : children\n : component\n ? React.createElement(component, props)\n : render\n ? render(props)\n : null\n : typeof children === \"function\"\n ? __DEV__\n ? evalChildrenDev(children, props, this.props.path)\n : children(props)\n : null}\n \n );\n }}\n \n );\n }\n}\n\nif (__DEV__) {\n Route.propTypes = {\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n component: (props, propName) => {\n if (props[propName] && !isValidElementType(props[propName])) {\n return new Error(\n `Invalid prop 'component' supplied to 'Route': the prop is not a valid React component`\n );\n }\n },\n exact: PropTypes.bool,\n location: PropTypes.object,\n path: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string)\n ]),\n render: PropTypes.func,\n sensitive: PropTypes.bool,\n strict: PropTypes.bool\n };\n\n Route.prototype.componentDidMount = function() {\n warning(\n !(\n this.props.children &&\n !isEmptyChildren(this.props.children) &&\n this.props.component\n ),\n \"You should not use and in the same route; will be ignored\"\n );\n\n warning(\n !(\n this.props.children &&\n !isEmptyChildren(this.props.children) &&\n this.props.render\n ),\n \"You should not use and in the same route; will be ignored\"\n );\n\n warning(\n !(this.props.component && this.props.render),\n \"You should not use and in the same route; will be ignored\"\n );\n };\n\n Route.prototype.componentDidUpdate = function(prevProps) {\n warning(\n !(this.props.location && !prevProps.location),\n ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n );\n\n warning(\n !(!this.props.location && prevProps.location),\n ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n );\n };\n}\n\nexport default Route;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createLocation, createPath } from \"history\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router.js\";\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n if (!basename) return location;\n\n return {\n ...location,\n pathname: addLeadingSlash(basename) + location.pathname\n };\n}\n\nfunction stripBasename(basename, location) {\n if (!basename) return location;\n\n const base = addLeadingSlash(basename);\n\n if (location.pathname.indexOf(base) !== 0) return location;\n\n return {\n ...location,\n pathname: location.pathname.substr(base.length)\n };\n}\n\nfunction createURL(location) {\n return typeof location === \"string\" ? location : createPath(location);\n}\n\nfunction staticHandler(methodName) {\n return () => {\n invariant(false, \"You cannot %s with \", methodName);\n };\n}\n\nfunction noop() {}\n\n/**\n * The public top-level API for a \"static\" , so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\nclass StaticRouter extends React.Component {\n navigateTo(location, action) {\n const { basename = \"\", context = {} } = this.props;\n context.action = action;\n context.location = addBasename(basename, createLocation(location));\n context.url = createURL(context.location);\n }\n\n handlePush = location => this.navigateTo(location, \"PUSH\");\n handleReplace = location => this.navigateTo(location, \"REPLACE\");\n handleListen = () => noop;\n handleBlock = () => noop;\n\n render() {\n const { basename = \"\", context = {}, location = \"/\", ...rest } = this.props;\n\n const history = {\n createHref: path => addLeadingSlash(basename + createURL(path)),\n action: \"POP\",\n location: stripBasename(basename, createLocation(location)),\n push: this.handlePush,\n replace: this.handleReplace,\n go: staticHandler(\"go\"),\n goBack: staticHandler(\"goBack\"),\n goForward: staticHandler(\"goForward\"),\n listen: this.handleListen,\n block: this.handleBlock\n };\n\n return ;\n }\n}\n\nif (__DEV__) {\n StaticRouter.propTypes = {\n basename: PropTypes.string,\n context: PropTypes.object,\n location: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n };\n\n StaticRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { StaticRouter as Router }`.\"\n );\n };\n}\n\nexport default StaticRouter;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport matchPath from \"./matchPath.js\";\n\n/**\n * The public API for rendering the first that matches.\n */\nclass Switch extends React.Component {\n render() {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const location = this.props.location || context.location;\n\n let element, match;\n\n // We use React.Children.forEach instead of React.Children.toArray().find()\n // here because toArray adds keys to all child elements and we do not want\n // to trigger an unmount/remount for two s that render the same\n // component at different URLs.\n React.Children.forEach(this.props.children, child => {\n if (match == null && React.isValidElement(child)) {\n element = child;\n\n const path = child.props.path || child.props.from;\n\n match = path\n ? matchPath(location.pathname, { ...child.props, path })\n : context.match;\n }\n });\n\n return match\n ? React.cloneElement(element, { location, computedMatch: match })\n : null;\n }}\n \n );\n }\n}\n\nif (__DEV__) {\n Switch.propTypes = {\n children: PropTypes.node,\n location: PropTypes.object\n };\n\n Switch.prototype.componentDidUpdate = function(prevProps) {\n warning(\n !(this.props.location && !prevProps.location),\n ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n );\n\n warning(\n !(!this.props.location && prevProps.location),\n ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n );\n };\n}\n\nexport default Switch;\n","import React from \"react\";\nimport invariant from \"tiny-invariant\";\n\nimport Context from \"./RouterContext.js\";\nimport HistoryContext from \"./HistoryContext.js\";\nimport matchPath from \"./matchPath.js\";\n\nconst useContext = React.useContext;\n\nexport function useHistory() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useHistory()\"\n );\n }\n\n return useContext(HistoryContext);\n}\n\nexport function useLocation() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useLocation()\"\n );\n }\n\n return useContext(Context).location;\n}\n\nexport function useParams() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useParams()\"\n );\n }\n\n const match = useContext(Context).match;\n return match ? match.params : {};\n}\n\nexport function useRouteMatch(path) {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useRouteMatch()\"\n );\n }\n\n const location = useLocation();\n const match = useContext(Context).match;\n\n return path ? matchPath(location.pathname, path) : match;\n}\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n throw new Error(prefix + \": \" + (message || ''));\n}\n\nexport default invariant;\n","function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n","function valueOf(obj) {\n return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);\n}\n\nfunction valueEqual(a, b) {\n // Test for strict equality first.\n if (a === b) return true;\n\n // Otherwise, if either of them == null they are not equal.\n if (a == null || b == null) return false;\n\n if (Array.isArray(a)) {\n return (\n Array.isArray(b) &&\n a.length === b.length &&\n a.every(function(item, index) {\n return valueEqual(item, b[index]);\n })\n );\n }\n\n if (typeof a === 'object' || typeof b === 'object') {\n var aValue = valueOf(a);\n var bValue = valueOf(b);\n\n if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n return Object.keys(Object.assign({}, a, b)).every(function(key) {\n return valueEqual(a[key], b[key]);\n });\n }\n\n return false;\n}\n\nexport default valueEqual;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import arrayLikeToArray from \"@babel/runtime/helpers/esm/arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","module.exports = require('./lib/axios');","import arrayWithoutHoles from \"@babel/runtime/helpers/esm/arrayWithoutHoles\";\nimport iterableToArray from \"@babel/runtime/helpers/esm/iterableToArray\";\nimport unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nimport nonIterableSpread from \"@babel/runtime/helpers/esm/nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"@babel/runtime/helpers/esm/arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","import React from \"react\";\nimport { Router } from \"react-router\";\nimport { createBrowserHistory as createHistory } from \"history\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\n/**\n * The public API for a that uses HTML5 history.\n */\nclass BrowserRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return ;\n }\n}\n\nif (__DEV__) {\n BrowserRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n forceRefresh: PropTypes.bool,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number\n };\n\n BrowserRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\"\n );\n };\n}\n\nexport default BrowserRouter;\n","import React from \"react\";\nimport { Router } from \"react-router\";\nimport { createHashHistory as createHistory } from \"history\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\n/**\n * The public API for a that uses window.location.hash.\n */\nclass HashRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return ;\n }\n}\n\nif (__DEV__) {\n HashRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n getUserConfirmation: PropTypes.func,\n hashType: PropTypes.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n };\n\n HashRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { HashRouter as Router }`.\"\n );\n };\n}\n\nexport default HashRouter;\n","import { createLocation } from \"history\";\n\nexport const resolveToLocation = (to, currentLocation) =>\n typeof to === \"function\" ? to(currentLocation) : to;\n\nexport const normalizeToLocation = (to, currentLocation) => {\n return typeof to === \"string\"\n ? createLocation(to, null, null, currentLocation)\n : to;\n};\n","import React from \"react\";\nimport { __RouterContext as RouterContext } from \"react-router\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport {\n resolveToLocation,\n normalizeToLocation\n} from \"./utils/locationUtils.js\";\n\n// React 15 compat\nconst forwardRefShim = C => C;\nlet { forwardRef } = React;\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nconst LinkAnchor = forwardRef(\n (\n {\n innerRef, // TODO: deprecate\n navigate,\n onClick,\n ...rest\n },\n forwardedRef\n ) => {\n const { target } = rest;\n\n let props = {\n ...rest,\n onClick: event => {\n try {\n if (onClick) onClick(event);\n } catch (ex) {\n event.preventDefault();\n throw ex;\n }\n\n if (\n !event.defaultPrevented && // onClick prevented default\n event.button === 0 && // ignore everything but left clicks\n (!target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // ignore clicks with modifier keys\n ) {\n event.preventDefault();\n navigate();\n }\n }\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.ref = innerRef;\n }\n\n /* eslint-disable-next-line jsx-a11y/anchor-has-content */\n return ;\n }\n);\n\nif (__DEV__) {\n LinkAnchor.displayName = \"LinkAnchor\";\n}\n\n/**\n * The public API for rendering a history-aware .\n */\nconst Link = forwardRef(\n (\n {\n component = LinkAnchor,\n replace,\n to,\n innerRef, // TODO: deprecate\n ...rest\n },\n forwardedRef\n ) => {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const { history } = context;\n\n const location = normalizeToLocation(\n resolveToLocation(to, context.location),\n context.location\n );\n\n const href = location ? history.createHref(location) : \"\";\n const props = {\n ...rest,\n href,\n navigate() {\n const location = resolveToLocation(to, context.location);\n const method = replace ? history.replace : history.push;\n\n method(location);\n }\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return React.createElement(component, props);\n }}\n \n );\n }\n);\n\nif (__DEV__) {\n const toType = PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.object,\n PropTypes.func\n ]);\n const refType = PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.func,\n PropTypes.shape({ current: PropTypes.any })\n ]);\n\n Link.displayName = \"Link\";\n\n Link.propTypes = {\n innerRef: refType,\n onClick: PropTypes.func,\n replace: PropTypes.bool,\n target: PropTypes.string,\n to: toType.isRequired\n };\n}\n\nexport default Link;\n","import React from \"react\";\nimport { __RouterContext as RouterContext, matchPath } from \"react-router\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport Link from \"./Link.js\";\nimport {\n resolveToLocation,\n normalizeToLocation\n} from \"./utils/locationUtils.js\";\n\n// React 15 compat\nconst forwardRefShim = C => C;\nlet { forwardRef } = React;\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction joinClassnames(...classnames) {\n return classnames.filter(i => i).join(\" \");\n}\n\n/**\n * A wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = forwardRef(\n (\n {\n \"aria-current\": ariaCurrent = \"page\",\n activeClassName = \"active\",\n activeStyle,\n className: classNameProp,\n exact,\n isActive: isActiveProp,\n location: locationProp,\n sensitive,\n strict,\n style: styleProp,\n to,\n innerRef, // TODO: deprecate\n ...rest\n },\n forwardedRef\n ) => {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const currentLocation = locationProp || context.location;\n const toLocation = normalizeToLocation(\n resolveToLocation(to, currentLocation),\n currentLocation\n );\n const { pathname: path } = toLocation;\n // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n const escapedPath =\n path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n\n const match = escapedPath\n ? matchPath(currentLocation.pathname, {\n path: escapedPath,\n exact,\n sensitive,\n strict\n })\n : null;\n const isActive = !!(isActiveProp\n ? isActiveProp(match, currentLocation)\n : match);\n\n const className = isActive\n ? joinClassnames(classNameProp, activeClassName)\n : classNameProp;\n const style = isActive ? { ...styleProp, ...activeStyle } : styleProp;\n\n const props = {\n \"aria-current\": (isActive && ariaCurrent) || null,\n className,\n style,\n to: toLocation,\n ...rest\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return ;\n }}\n \n );\n }\n);\n\nif (__DEV__) {\n NavLink.displayName = \"NavLink\";\n\n const ariaCurrentType = PropTypes.oneOf([\n \"page\",\n \"step\",\n \"location\",\n \"date\",\n \"time\",\n \"true\"\n ]);\n\n NavLink.propTypes = {\n ...Link.propTypes,\n \"aria-current\": ariaCurrentType,\n activeClassName: PropTypes.string,\n activeStyle: PropTypes.object,\n className: PropTypes.string,\n exact: PropTypes.bool,\n isActive: PropTypes.func,\n location: PropTypes.object,\n sensitive: PropTypes.bool,\n strict: PropTypes.bool,\n style: PropTypes.object\n };\n}\n\nexport default NavLink;\n","import defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}","import React, { Component } from 'react';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nfunction getUniqueId() {\n var key = '__global_unique_id__';\n return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;\n}\n\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + getUniqueId() + '__';\n\n var Provider = /*#__PURE__*/function (_Component) {\n _inheritsLoose(Provider, _Component);\n\n function Provider() {\n var _this;\n\n _this = _Component.apply(this, arguments) || this;\n _this.emitter = createEventEmitter(_this.props.value);\n return _this;\n }\n\n var _proto = Provider.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0;\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n if (process.env.NODE_ENV !== 'production') {\n warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n _proto.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = PropTypes.object.isRequired, _Provider$childContex);\n\n var Consumer = /*#__PURE__*/function (_Component2) {\n _inheritsLoose(Consumer, _Component2);\n\n function Consumer() {\n var _this2;\n\n _this2 = _Component2.apply(this, arguments) || this;\n _this2.state = {\n value: _this2.getValue()\n };\n\n _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({\n value: _this2.getValue()\n });\n }\n };\n\n return _this2;\n }\n\n var _proto2 = Consumer.prototype;\n\n _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n\n var observedBits = this.props.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n _proto2.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n _proto2.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = PropTypes.object, _Consumer$contextType);\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nvar index = React.createContext || createReactContext;\n\nexport default index;\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\n`{{lit-${String(Math.random()).slice(2)}}}`;\n\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nwindow.trustedTypes &&\n trustedTypes.createPolicy('lit-html', { createHTML: (s) => s });\n\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the third\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\n// Wrap into an IIFE because MS Edge <= v41 does not support having try/catch\n// blocks right into the body of a module\n(() => {\n try {\n const options = {\n get capture() {\n eventOptionsSupported = true;\n return false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.addEventListener('test', options, options);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.removeEventListener('test', options, options);\n }\n catch (_e) {\n // event options not supported\n }\n})();\n\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\nif (typeof window !== 'undefined') {\n (window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.3.0');\n}\n\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nif (typeof window.ShadyCSS === 'undefined') ;\nelse if (typeof window.ShadyCSS.prepareTemplateDom === 'undefined') {\n console.warn(`Incompatible ShadyCSS version detected. ` +\n `Please update to at least @webcomponents/webcomponentsjs@2.0.2 and ` +\n `@webcomponents/shadycss@1.3.1.`);\n}\n\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nvar _a$d;\n/**\n * Use this module if you want to create your own base class extending\n * [[UpdatingElement]].\n * @packageDocumentation\n */\n/*\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\nwindow.JSCompiler_renameProperty =\n (prop, _obj) => prop;\nconst defaultConverter = {\n toAttribute(value, type) {\n switch (type) {\n case Boolean:\n return value ? '' : null;\n case Object:\n case Array:\n // if the value is `null` or `undefined` pass this through\n // to allow removing/no change behavior.\n return value == null ? value : JSON.stringify(value);\n }\n return value;\n },\n fromAttribute(value, type) {\n switch (type) {\n case Boolean:\n return value !== null;\n case Number:\n return value === null ? null : Number(value);\n case Object:\n case Array:\n return JSON.parse(value);\n }\n return value;\n }\n};\n/**\n * Change function that returns true if `value` is different from `oldValue`.\n * This method is used as the default for a property's `hasChanged` function.\n */\nconst notEqual = (value, old) => {\n // This ensures (old==NaN, value==NaN) always returns false\n return old !== value && (old === old || value === value);\n};\nconst defaultPropertyDeclaration = {\n attribute: true,\n type: String,\n converter: defaultConverter,\n reflect: false,\n hasChanged: notEqual\n};\nconst STATE_HAS_UPDATED = 1;\nconst STATE_UPDATE_REQUESTED = 1 << 2;\nconst STATE_IS_REFLECTING_TO_ATTRIBUTE = 1 << 3;\nconst STATE_IS_REFLECTING_TO_PROPERTY = 1 << 4;\n/**\n * The Closure JS Compiler doesn't currently have good support for static\n * property semantics where \"this\" is dynamic (e.g.\n * https://github.com/google/closure-compiler/issues/3177 and others) so we use\n * this hack to bypass any rewriting by the compiler.\n */\nconst finalized = 'finalized';\n/**\n * Base element class which manages element properties and attributes. When\n * properties change, the `update` method is asynchronously called. This method\n * should be supplied by subclassers to render updates as desired.\n * @noInheritDoc\n */\nclass UpdatingElement extends HTMLElement {\n constructor() {\n super();\n this.initialize();\n }\n /**\n * Returns a list of attributes corresponding to the registered properties.\n * @nocollapse\n */\n static get observedAttributes() {\n // note: piggy backing on this to ensure we're finalized.\n this.finalize();\n const attributes = [];\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n this._classProperties.forEach((v, p) => {\n const attr = this._attributeNameForProperty(p, v);\n if (attr !== undefined) {\n this._attributeToPropertyMap.set(attr, p);\n attributes.push(attr);\n }\n });\n return attributes;\n }\n /**\n * Ensures the private `_classProperties` property metadata is created.\n * In addition to `finalize` this is also called in `createProperty` to\n * ensure the `@property` decorator can add property metadata.\n */\n /** @nocollapse */\n static _ensureClassProperties() {\n // ensure private storage for property declarations.\n if (!this.hasOwnProperty(JSCompiler_renameProperty('_classProperties', this))) {\n this._classProperties = new Map();\n // NOTE: Workaround IE11 not supporting Map constructor argument.\n const superProperties = Object.getPrototypeOf(this)._classProperties;\n if (superProperties !== undefined) {\n superProperties.forEach((v, k) => this._classProperties.set(k, v));\n }\n }\n }\n /**\n * Creates a property accessor on the element prototype if one does not exist\n * and stores a PropertyDeclaration for the property with the given options.\n * The property setter calls the property's `hasChanged` property option\n * or uses a strict identity check to determine whether or not to request\n * an update.\n *\n * This method may be overridden to customize properties; however,\n * when doing so, it's important to call `super.createProperty` to ensure\n * the property is setup correctly. This method calls\n * `getPropertyDescriptor` internally to get a descriptor to install.\n * To customize what properties do when they are get or set, override\n * `getPropertyDescriptor`. To customize the options for a property,\n * implement `createProperty` like this:\n *\n * static createProperty(name, options) {\n * options = Object.assign(options, {myOption: true});\n * super.createProperty(name, options);\n * }\n *\n * @nocollapse\n */\n static createProperty(name, options = defaultPropertyDeclaration) {\n // Note, since this can be called by the `@property` decorator which\n // is called before `finalize`, we ensure storage exists for property\n // metadata.\n this._ensureClassProperties();\n this._classProperties.set(name, options);\n // Do not generate an accessor if the prototype already has one, since\n // it would be lost otherwise and that would never be the user's intention;\n // Instead, we expect users to call `requestUpdate` themselves from\n // user-defined accessors. Note that if the super has an accessor we will\n // still overwrite it\n if (options.noAccessor || this.prototype.hasOwnProperty(name)) {\n return;\n }\n const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n const descriptor = this.getPropertyDescriptor(name, key, options);\n if (descriptor !== undefined) {\n Object.defineProperty(this.prototype, name, descriptor);\n }\n }\n /**\n * Returns a property descriptor to be defined on the given named property.\n * If no descriptor is returned, the property will not become an accessor.\n * For example,\n *\n * class MyElement extends LitElement {\n * static getPropertyDescriptor(name, key, options) {\n * const defaultDescriptor =\n * super.getPropertyDescriptor(name, key, options);\n * const setter = defaultDescriptor.set;\n * return {\n * get: defaultDescriptor.get,\n * set(value) {\n * setter.call(this, value);\n * // custom action.\n * },\n * configurable: true,\n * enumerable: true\n * }\n * }\n * }\n *\n * @nocollapse\n */\n static getPropertyDescriptor(name, key, options) {\n return {\n // tslint:disable-next-line:no-any no symbol in index\n get() {\n return this[key];\n },\n set(value) {\n const oldValue = this[name];\n this[key] = value;\n this\n .requestUpdateInternal(name, oldValue, options);\n },\n configurable: true,\n enumerable: true\n };\n }\n /**\n * Returns the property options associated with the given property.\n * These options are defined with a PropertyDeclaration via the `properties`\n * object or the `@property` decorator and are registered in\n * `createProperty(...)`.\n *\n * Note, this method should be considered \"final\" and not overridden. To\n * customize the options for a given property, override `createProperty`.\n *\n * @nocollapse\n * @final\n */\n static getPropertyOptions(name) {\n return this._classProperties && this._classProperties.get(name) ||\n defaultPropertyDeclaration;\n }\n /**\n * Creates property accessors for registered properties and ensures\n * any superclasses are also finalized.\n * @nocollapse\n */\n static finalize() {\n // finalize any superclasses\n const superCtor = Object.getPrototypeOf(this);\n if (!superCtor.hasOwnProperty(finalized)) {\n superCtor.finalize();\n }\n this[finalized] = true;\n this._ensureClassProperties();\n // initialize Map populated in observedAttributes\n this._attributeToPropertyMap = new Map();\n // make any properties\n // Note, only process \"own\" properties since this element will inherit\n // any properties defined on the superClass, and finalization ensures\n // the entire prototype chain is finalized.\n if (this.hasOwnProperty(JSCompiler_renameProperty('properties', this))) {\n const props = this.properties;\n // support symbols in properties (IE11 does not support this)\n const propKeys = [\n ...Object.getOwnPropertyNames(props),\n ...(typeof Object.getOwnPropertySymbols === 'function') ?\n Object.getOwnPropertySymbols(props) :\n []\n ];\n // This for/of is ok because propKeys is an array\n for (const p of propKeys) {\n // note, use of `any` is due to TypeSript lack of support for symbol in\n // index types\n // tslint:disable-next-line:no-any no symbol in index\n this.createProperty(p, props[p]);\n }\n }\n }\n /**\n * Returns the property name for the given attribute `name`.\n * @nocollapse\n */\n static _attributeNameForProperty(name, options) {\n const attribute = options.attribute;\n return attribute === false ?\n undefined :\n (typeof attribute === 'string' ?\n attribute :\n (typeof name === 'string' ? name.toLowerCase() : undefined));\n }\n /**\n * Returns true if a property should request an update.\n * Called when a property value is set and uses the `hasChanged`\n * option for the property if present or a strict identity check.\n * @nocollapse\n */\n static _valueHasChanged(value, old, hasChanged = notEqual) {\n return hasChanged(value, old);\n }\n /**\n * Returns the property value for the given attribute value.\n * Called via the `attributeChangedCallback` and uses the property's\n * `converter` or `converter.fromAttribute` property option.\n * @nocollapse\n */\n static _propertyValueFromAttribute(value, options) {\n const type = options.type;\n const converter = options.converter || defaultConverter;\n const fromAttribute = (typeof converter === 'function' ? converter : converter.fromAttribute);\n return fromAttribute ? fromAttribute(value, type) : value;\n }\n /**\n * Returns the attribute value for the given property value. If this\n * returns undefined, the property will *not* be reflected to an attribute.\n * If this returns null, the attribute will be removed, otherwise the\n * attribute will be set to the value.\n * This uses the property's `reflect` and `type.toAttribute` property options.\n * @nocollapse\n */\n static _propertyValueToAttribute(value, options) {\n if (options.reflect === undefined) {\n return;\n }\n const type = options.type;\n const converter = options.converter;\n const toAttribute = converter && converter.toAttribute ||\n defaultConverter.toAttribute;\n return toAttribute(value, type);\n }\n /**\n * Performs element initialization. By default captures any pre-set values for\n * registered properties.\n */\n initialize() {\n this._updateState = 0;\n this._updatePromise =\n new Promise((res) => this._enableUpdatingResolver = res);\n this._changedProperties = new Map();\n this._saveInstanceProperties();\n // ensures first update will be caught by an early access of\n // `updateComplete`\n this.requestUpdateInternal();\n }\n /**\n * Fixes any properties set on the instance before upgrade time.\n * Otherwise these would shadow the accessor and break these properties.\n * The properties are stored in a Map which is played back after the\n * constructor runs. Note, on very old versions of Safari (<=9) or Chrome\n * (<=41), properties created for native platform properties like (`id` or\n * `name`) may not have default values set in the element constructor. On\n * these browsers native properties appear on instances and therefore their\n * default value will overwrite any element default (e.g. if the element sets\n * this.id = 'id' in the constructor, the 'id' will become '' since this is\n * the native platform default).\n */\n _saveInstanceProperties() {\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n this.constructor\n ._classProperties.forEach((_v, p) => {\n if (this.hasOwnProperty(p)) {\n const value = this[p];\n delete this[p];\n if (!this._instanceProperties) {\n this._instanceProperties = new Map();\n }\n this._instanceProperties.set(p, value);\n }\n });\n }\n /**\n * Applies previously saved instance properties.\n */\n _applyInstanceProperties() {\n // Use forEach so this works even if for/of loops are compiled to for loops\n // expecting arrays\n // tslint:disable-next-line:no-any\n this._instanceProperties.forEach((v, p) => this[p] = v);\n this._instanceProperties = undefined;\n }\n connectedCallback() {\n // Ensure first connection completes an update. Updates cannot complete\n // before connection.\n this.enableUpdating();\n }\n enableUpdating() {\n if (this._enableUpdatingResolver !== undefined) {\n this._enableUpdatingResolver();\n this._enableUpdatingResolver = undefined;\n }\n }\n /**\n * Allows for `super.disconnectedCallback()` in extensions while\n * reserving the possibility of making non-breaking feature additions\n * when disconnecting at some point in the future.\n */\n disconnectedCallback() {\n }\n /**\n * Synchronizes property values when attributes change.\n */\n attributeChangedCallback(name, old, value) {\n if (old !== value) {\n this._attributeToProperty(name, value);\n }\n }\n _propertyToAttribute(name, value, options = defaultPropertyDeclaration) {\n const ctor = this.constructor;\n const attr = ctor._attributeNameForProperty(name, options);\n if (attr !== undefined) {\n const attrValue = ctor._propertyValueToAttribute(value, options);\n // an undefined value does not change the attribute.\n if (attrValue === undefined) {\n return;\n }\n // Track if the property is being reflected to avoid\n // setting the property again via `attributeChangedCallback`. Note:\n // 1. this takes advantage of the fact that the callback is synchronous.\n // 2. will behave incorrectly if multiple attributes are in the reaction\n // stack at time of calling. However, since we process attributes\n // in `update` this should not be possible (or an extreme corner case\n // that we'd like to discover).\n // mark state reflecting\n this._updateState = this._updateState | STATE_IS_REFLECTING_TO_ATTRIBUTE;\n if (attrValue == null) {\n this.removeAttribute(attr);\n }\n else {\n this.setAttribute(attr, attrValue);\n }\n // mark state not reflecting\n this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_ATTRIBUTE;\n }\n }\n _attributeToProperty(name, value) {\n // Use tracking info to avoid deserializing attribute value if it was\n // just set from a property setter.\n if (this._updateState & STATE_IS_REFLECTING_TO_ATTRIBUTE) {\n return;\n }\n const ctor = this.constructor;\n // Note, hint this as an `AttributeMap` so closure clearly understands\n // the type; it has issues with tracking types through statics\n // tslint:disable-next-line:no-unnecessary-type-assertion\n const propName = ctor._attributeToPropertyMap.get(name);\n if (propName !== undefined) {\n const options = ctor.getPropertyOptions(propName);\n // mark state reflecting\n this._updateState = this._updateState | STATE_IS_REFLECTING_TO_PROPERTY;\n this[propName] =\n // tslint:disable-next-line:no-any\n ctor._propertyValueFromAttribute(value, options);\n // mark state not reflecting\n this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_PROPERTY;\n }\n }\n /**\n * This protected version of `requestUpdate` does not access or return the\n * `updateComplete` promise. This promise can be overridden and is therefore\n * not free to access.\n */\n requestUpdateInternal(name, oldValue, options) {\n let shouldRequestUpdate = true;\n // If we have a property key, perform property update steps.\n if (name !== undefined) {\n const ctor = this.constructor;\n options = options || ctor.getPropertyOptions(name);\n if (ctor._valueHasChanged(this[name], oldValue, options.hasChanged)) {\n if (!this._changedProperties.has(name)) {\n this._changedProperties.set(name, oldValue);\n }\n // Add to reflecting properties set.\n // Note, it's important that every change has a chance to add the\n // property to `_reflectingProperties`. This ensures setting\n // attribute + property reflects correctly.\n if (options.reflect === true &&\n !(this._updateState & STATE_IS_REFLECTING_TO_PROPERTY)) {\n if (this._reflectingProperties === undefined) {\n this._reflectingProperties = new Map();\n }\n this._reflectingProperties.set(name, options);\n }\n }\n else {\n // Abort the request if the property should not be considered changed.\n shouldRequestUpdate = false;\n }\n }\n if (!this._hasRequestedUpdate && shouldRequestUpdate) {\n this._updatePromise = this._enqueueUpdate();\n }\n }\n /**\n * Requests an update which is processed asynchronously. This should\n * be called when an element should update based on some state not triggered\n * by setting a property. In this case, pass no arguments. It should also be\n * called when manually implementing a property setter. In this case, pass the\n * property `name` and `oldValue` to ensure that any configured property\n * options are honored. Returns the `updateComplete` Promise which is resolved\n * when the update completes.\n *\n * @param name {PropertyKey} (optional) name of requesting property\n * @param oldValue {any} (optional) old value of requesting property\n * @returns {Promise} A Promise that is resolved when the update completes.\n */\n requestUpdate(name, oldValue) {\n this.requestUpdateInternal(name, oldValue);\n return this.updateComplete;\n }\n /**\n * Sets up the element to asynchronously update.\n */\n async _enqueueUpdate() {\n this._updateState = this._updateState | STATE_UPDATE_REQUESTED;\n try {\n // Ensure any previous update has resolved before updating.\n // This `await` also ensures that property changes are batched.\n await this._updatePromise;\n }\n catch (e) {\n // Ignore any previous errors. We only care that the previous cycle is\n // done. Any error should have been handled in the previous update.\n }\n const result = this.performUpdate();\n // If `performUpdate` returns a Promise, we await it. This is done to\n // enable coordinating updates with a scheduler. Note, the result is\n // checked to avoid delaying an additional microtask unless we need to.\n if (result != null) {\n await result;\n }\n return !this._hasRequestedUpdate;\n }\n get _hasRequestedUpdate() {\n return (this._updateState & STATE_UPDATE_REQUESTED);\n }\n get hasUpdated() {\n return (this._updateState & STATE_HAS_UPDATED);\n }\n /**\n * Performs an element update. Note, if an exception is thrown during the\n * update, `firstUpdated` and `updated` will not be called.\n *\n * You can override this method to change the timing of updates. If this\n * method is overridden, `super.performUpdate()` must be called.\n *\n * For instance, to schedule updates to occur just before the next frame:\n *\n * ```\n * protected async performUpdate(): Promise {\n * await new Promise((resolve) => requestAnimationFrame(() => resolve()));\n * super.performUpdate();\n * }\n * ```\n */\n performUpdate() {\n // Abort any update if one is not pending when this is called.\n // This can happen if `performUpdate` is called early to \"flush\"\n // the update.\n if (!this._hasRequestedUpdate) {\n return;\n }\n // Mixin instance properties once, if they exist.\n if (this._instanceProperties) {\n this._applyInstanceProperties();\n }\n let shouldUpdate = false;\n const changedProperties = this._changedProperties;\n try {\n shouldUpdate = this.shouldUpdate(changedProperties);\n if (shouldUpdate) {\n this.update(changedProperties);\n }\n else {\n this._markUpdated();\n }\n }\n catch (e) {\n // Prevent `firstUpdated` and `updated` from running when there's an\n // update exception.\n shouldUpdate = false;\n // Ensure element can accept additional updates after an exception.\n this._markUpdated();\n throw e;\n }\n if (shouldUpdate) {\n if (!(this._updateState & STATE_HAS_UPDATED)) {\n this._updateState = this._updateState | STATE_HAS_UPDATED;\n this.firstUpdated(changedProperties);\n }\n this.updated(changedProperties);\n }\n }\n _markUpdated() {\n this._changedProperties = new Map();\n this._updateState = this._updateState & ~STATE_UPDATE_REQUESTED;\n }\n /**\n * Returns a Promise that resolves when the element has completed updating.\n * The Promise value is a boolean that is `true` if the element completed the\n * update without triggering another update. The Promise result is `false` if\n * a property was set inside `updated()`. If the Promise is rejected, an\n * exception was thrown during the update.\n *\n * To await additional asynchronous work, override the `_getUpdateComplete`\n * method. For example, it is sometimes useful to await a rendered element\n * before fulfilling this Promise. To do this, first await\n * `super._getUpdateComplete()`, then any subsequent state.\n *\n * @returns {Promise} The Promise returns a boolean that indicates if the\n * update resolved without triggering another update.\n */\n get updateComplete() {\n return this._getUpdateComplete();\n }\n /**\n * Override point for the `updateComplete` promise.\n *\n * It is not safe to override the `updateComplete` getter directly due to a\n * limitation in TypeScript which means it is not possible to call a\n * superclass getter (e.g. `super.updateComplete.then(...)`) when the target\n * language is ES5 (https://github.com/microsoft/TypeScript/issues/338).\n * This method should be overridden instead. For example:\n *\n * class MyElement extends LitElement {\n * async _getUpdateComplete() {\n * await super._getUpdateComplete();\n * await this._myChild.updateComplete;\n * }\n * }\n */\n _getUpdateComplete() {\n return this._updatePromise;\n }\n /**\n * Controls whether or not `update` should be called when the element requests\n * an update. By default, this method always returns `true`, but this can be\n * customized to control when to update.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n shouldUpdate(_changedProperties) {\n return true;\n }\n /**\n * Updates the element. This method reflects property values to attributes.\n * It can be overridden to render and keep updated element DOM.\n * Setting properties inside this method will *not* trigger\n * another update.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n update(_changedProperties) {\n if (this._reflectingProperties !== undefined &&\n this._reflectingProperties.size > 0) {\n // Use forEach so this works even if for/of loops are compiled to for\n // loops expecting arrays\n this._reflectingProperties.forEach((v, k) => this._propertyToAttribute(k, this[k], v));\n this._reflectingProperties = undefined;\n }\n this._markUpdated();\n }\n /**\n * Invoked whenever the element is updated. Implement to perform\n * post-updating tasks via DOM APIs, for example, focusing an element.\n *\n * Setting properties inside this method will trigger the element to update\n * again after this update cycle completes.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n updated(_changedProperties) {\n }\n /**\n * Invoked when the element is first updated. Implement to perform one time\n * work on the element after update.\n *\n * Setting properties inside this method will trigger the element to update\n * again after this update cycle completes.\n *\n * @param _changedProperties Map of changed properties with old values\n */\n firstUpdated(_changedProperties) {\n }\n}\n_a$d = finalized;\n/**\n * Marks class as having finished creating properties.\n */\nUpdatingElement[_a$d] = true;\n\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst standardProperty = (options, element) => {\n // When decorating an accessor, pass it through and add property metadata.\n // Note, the `hasOwnProperty` check in `createProperty` ensures we don't\n // stomp over the user's accessor.\n if (element.kind === 'method' && element.descriptor &&\n !('value' in element.descriptor)) {\n return Object.assign(Object.assign({}, element), { finisher(clazz) {\n clazz.createProperty(element.key, options);\n } });\n }\n else {\n // createProperty() takes care of defining the property, but we still\n // must return some kind of descriptor, so return a descriptor for an\n // unused prototype field. The finisher calls createProperty().\n return {\n kind: 'field',\n key: Symbol(),\n placement: 'own',\n descriptor: {},\n // When @babel/plugin-proposal-decorators implements initializers,\n // do this instead of the initializer below. See:\n // https://github.com/babel/babel/issues/9260 extras: [\n // {\n // kind: 'initializer',\n // placement: 'own',\n // initializer: descriptor.initializer,\n // }\n // ],\n initializer() {\n if (typeof element.initializer === 'function') {\n this[element.key] = element.initializer.call(this);\n }\n },\n finisher(clazz) {\n clazz.createProperty(element.key, options);\n }\n };\n }\n};\nconst legacyProperty = (options, proto, name) => {\n proto.constructor\n .createProperty(name, options);\n};\n/**\n * A property decorator which creates a LitElement property which reflects a\n * corresponding attribute value. A [[`PropertyDeclaration`]] may optionally be\n * supplied to configure property features.\n *\n * This decorator should only be used for public fields. Private or protected\n * fields should use the [[`internalProperty`]] decorator.\n *\n * @example\n * ```ts\n * class MyElement {\n * @property({ type: Boolean })\n * clicked = false;\n * }\n * ```\n * @category Decorator\n * @ExportDecoratedItems\n */\nfunction property(options) {\n // tslint:disable-next-line:no-any decorator\n return (protoOrDescriptor, name) => (name !== undefined) ?\n legacyProperty(options, protoOrDescriptor, name) :\n standardProperty(options, protoOrDescriptor);\n}\n\n/**\n@license\nCopyright (c) 2019 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/**\n * Whether the current browser supports `adoptedStyleSheets`.\n */\n(window.ShadowRoot) &&\n (window.ShadyCSS === undefined || window.ShadyCSS.nativeShadow) &&\n ('adoptedStyleSheets' in Document.prototype) &&\n ('replace' in CSSStyleSheet.prototype);\n\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for LitElement usage.\n// TODO(justinfagnani): inject version number at build time\n(window['litElementVersions'] || (window['litElementVersions'] = []))\n .push('2.4.0');\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// NOTE(cdata): The HAS_WEBXR_* constants can be enabled in Chrome by turning on\n// the appropriate flags. However, just because we have the API does not\n// guarantee that AR will work.\nconst HAS_WEBXR_DEVICE_API = navigator.xr != null &&\n self.XRSession != null && navigator.xr.isSessionSupported != null;\nconst HAS_WEBXR_HIT_TEST_API = HAS_WEBXR_DEVICE_API && self.XRSession.prototype.requestHitTestSource;\nconst HAS_RESIZE_OBSERVER = self.ResizeObserver != null;\nconst HAS_INTERSECTION_OBSERVER = self.IntersectionObserver != null;\nconst IS_WEBXR_AR_CANDIDATE = HAS_WEBXR_HIT_TEST_API;\n(() => {\n const userAgent = navigator.userAgent || navigator.vendor || self.opera;\n let check = false;\n // eslint-disable-next-line\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i\n .test(userAgent) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i\n .test(userAgent.substr(0, 4))) {\n check = true;\n }\n return check;\n})();\n/\\bCrOS\\b/.test(navigator.userAgent);\n// Disabling offscreen canvas for now because it is slower and has bugs relating\n// to janky updates and out of sync frames.\nconst USE_OFFSCREEN_CANVAS = false;\n// Boolean((self as any).OffscreenCanvas) &&\n// Boolean((self as any).OffscreenCanvas.prototype.transferToImageBitmap) &&\n// !IS_CHROMEOS; // TODO(elalish): file a bug on inverted renders\nconst IS_ANDROID = /android/i.test(navigator.userAgent);\n// Prior to iOS 13, detecting iOS Safari was relatively straight-forward.\n// As of iOS 13, Safari on iPad (in its default configuration) reports the same\n// user-agent string as Safari on desktop MacOS. Strictly speaking, we only care\n// about iOS for the purposes if selecting for cases where Quick Look is known\n// to be supported. However, for API correctness purposes, we must rely on\n// known, detectable signals to distinguish iOS Safari from MacOS Safari. At the\n// time of this writing, there are no non-iOS/iPadOS Apple devices with\n// multi-touch displays.\n// @see https://stackoverflow.com/questions/57765958/how-to-detect-ipad-and-ipad-os-version-in-ios-13-and-up\n// @see https://forums.developer.apple.com/thread/119186\n// @see https://github.com/google/model-viewer/issues/758\nconst IS_IOS = (/iPad|iPhone|iPod/.test(navigator.userAgent) && !self.MSStream) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\nconst IS_AR_QUICKLOOK_CANDIDATE = (() => {\n const tempAnchor = document.createElement('a');\n return Boolean(tempAnchor.relList && tempAnchor.relList.supports &&\n tempAnchor.relList.supports('ar'));\n})();\n// @see https://developer.chrome.com/multidevice/user-agent\n/Safari\\//.test(navigator.userAgent);\nconst IS_FIREFOX = /firefox/i.test(navigator.userAgent);\nconst IS_OCULUS = /OculusBrowser/.test(navigator.userAgent);\nIS_IOS && /CriOS\\//.test(navigator.userAgent);\nconst IS_SCENEVIEWER_CANDIDATE = IS_ANDROID && !IS_FIREFOX && !IS_OCULUS;\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar CloseIcon = `\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n`;\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar ControlsPrompt = `\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n`;\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar ARGlyph = `\n\n\n\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\n\n`;\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n\n
\n
\n
\n \n \n \n
\n
\n\n \n
\n \n \n \n
\n\n
\n\n
\n
\n \n ${ControlsPrompt}\n \n
\n
\n\n
\n \n\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n \n ${CloseIcon}\n \n \n
\n
\n
`;\nconst makeTemplate = (tagName) => {\n const clone = document.createElement('template');\n clone.innerHTML = template.innerHTML;\n if (window.ShadyCSS) {\n window.ShadyCSS.prepareTemplate(clone, tagName);\n }\n return clone;\n};\n\n/**\n * @license\n * Copyright 2010-2021 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '128';\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst FlatShading = 1;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst CubeUVRefractionMapping = 307;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedShort565Type = 1019;\nconst UnsignedInt248Type = 1020;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst RGBEFormat = RGBAFormat;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst SRGB8_ALPHA8_ASTC_4x4_Format = 37840;\nconst SRGB8_ALPHA8_ASTC_5x4_Format = 37841;\nconst SRGB8_ALPHA8_ASTC_5x5_Format = 37842;\nconst SRGB8_ALPHA8_ASTC_6x5_Format = 37843;\nconst SRGB8_ALPHA8_ASTC_6x6_Format = 37844;\nconst SRGB8_ALPHA8_ASTC_8x5_Format = 37845;\nconst SRGB8_ALPHA8_ASTC_8x6_Format = 37846;\nconst SRGB8_ALPHA8_ASTC_8x8_Format = 37847;\nconst SRGB8_ALPHA8_ASTC_10x5_Format = 37848;\nconst SRGB8_ALPHA8_ASTC_10x6_Format = 37849;\nconst SRGB8_ALPHA8_ASTC_10x8_Format = 37850;\nconst SRGB8_ALPHA8_ASTC_10x10_Format = 37851;\nconst SRGB8_ALPHA8_ASTC_12x10_Format = 37852;\nconst SRGB8_ALPHA8_ASTC_12x12_Format = 37853;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst LinearEncoding = 3000;\nconst sRGBEncoding = 3001;\nconst GammaEncoding = 3007;\nconst RGBEEncoding = 3002;\nconst LogLuvEncoding = 3003;\nconst RGBM7Encoding = 3004;\nconst RGBM16Encoding = 3005;\nconst RGBDEncoding = 3006;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\nconst KeepStencilOp = 7680;\nconst AlwaysStencilFunc = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst GLSL3 = '300 es';\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst 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( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst 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( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let 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\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _lut = [];\n\nfor ( let i = 0; i < 256; i ++ ) {\n\n\t_lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n}\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toUpperCase();\n\n}\n\nfunction clamp$1( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidian modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t\t } else {\n\n\t\treturn 0;\n\n\t\t }\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s % 2147483647;\n\n\t// Park-Miller algorithm\n\n\t_seed = _seed * 16807 % 2147483647;\n\n\treturn ( _seed - 1 ) / 2147483646;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nvar MathUtils = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp$1,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler\n});\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( 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( 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() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( 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( 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( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( 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( 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( 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( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( 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( 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( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( 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( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst 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( 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( 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( 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( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst 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() {\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() {\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() {\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() {\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() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( 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( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, 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( array = [], 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( 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( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst 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\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nVector2.prototype.isVector2 = true;\n\nclass Matrix3 {\n\n\tconstructor() {\n\n\t\tthis.elements = [\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\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst 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() {\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\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst 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\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst 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\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst 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( s ) {\n\n\t\tconst 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() {\n\n\t\tconst te = this.elements;\n\n\t\tconst 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\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 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 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst 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() {\n\n\t\tlet tmp;\n\t\tconst 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( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst 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( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst 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\treturn this;\n\n\t}\n\n\tscale( sx, sy ) {\n\n\t\tconst 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( theta ) {\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tconst te = this.elements;\n\n\t\tconst a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tconst 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( tx, ty ) {\n\n\t\tconst 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( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let 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( array, offset = 0 ) {\n\n\t\tfor ( let 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( array = [], offset = 0 ) {\n\n\t\tconst 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\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nMatrix3.prototype.isMatrix3 = true;\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n}\n\nlet textureId = 0;\n\nclass Texture$1 extends EventDispatcher {\n\n\tconstructor( image = Texture$1.DEFAULT_IMAGE, mapping = Texture$1.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.image = image;\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\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\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\t\tthis.encoding = encoding;\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t}\n\n\tupdateMatrix() {\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() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( 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.internalFormat = source.internalFormat;\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( meta ) {\n\n\t\tconst 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\tconst 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\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\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\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\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\tconst image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tlet url;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t// process array of images e.g. CubeTexture\n\n\t\t\t\t\turl = [];\n\n\t\t\t\t\tfor ( let i = 0, l = image.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t// check cube texture with data textures\n\n\t\t\t\t\t\tif ( image[ i ].isDataTexture ) {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ].image ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ] ) );\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\t// process single image\n\n\t\t\t\t\turl = serializeImage( image );\n\n\t\t\t\t}\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: url\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() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\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\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\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\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nTexture$1.DEFAULT_IMAGE = undefined;\nTexture$1.DEFAULT_MAPPING = UVMapping;\n\nTexture$1.prototype.isTexture = true;\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.prototype.slice.call( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( 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( 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( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( 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( 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() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( 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( 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( 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( 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( 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( 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( 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( 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\tmultiply( 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;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( 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( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst 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( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( 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\tconst 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( 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\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 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\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst 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\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\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( 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( 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( 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( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst 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() {\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() {\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() {\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() {\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() {\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( 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() {\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() {\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() {\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() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( 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( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( 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( array, 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( array = [], 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( 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\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nVector4.prototype.isVector4 = true;\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*/\nclass WebGLRenderTarget extends EventDispatcher {\n\n\tconstructor( width, height, options ) {\n\n\t\tsuper();\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\toptions = options || {};\n\n\t\tthis.texture = new Texture$1( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\tthis.texture.image = {};\n\t\tthis.texture.image.width = width;\n\t\tthis.texture.image.height = height;\n\t\tthis.texture.image.depth = 1;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n\t}\n\n\tsetTexture( texture ) {\n\n\t\ttexture.image = {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tdepth: this.depth\n\t\t};\n\n\t\tthis.texture = texture;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tthis.texture.image.width = width;\n\t\t\tthis.texture.image.height = height;\n\t\t\tthis.texture.image.depth = depth;\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() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\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() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nWebGLRenderTarget.prototype.isWebGLRenderTarget = true;\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerp( qa, qb, qm, t ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.' );\n\t\treturn qm.slerpQuaternions( qa, qb, t );\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet 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\tconst x1 = 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 ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\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\tconst 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\tconst 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\tconst 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\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( 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() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( 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( 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\tconst 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\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( 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\tconst 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( 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\tconst 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\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 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\tconst s = 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\tconst s = 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\tconst s = 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( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp$1( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\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( 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() {\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() {\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() {\n\n\t\tlet 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( 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( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst 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( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst 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\tlet 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\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst 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\tslerpQuaternions( qa, qb, t ) {\n\n\t\tthis.copy( qa ).slerp( qb, t );\n\n\t}\n\n\tequals( 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( array, 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( array = [], 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( attribute, index ) {\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\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nQuaternion.prototype.isQuaternion = true;\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\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( 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( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( 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( 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() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( 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( 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( 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( 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( 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( 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( 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( 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( 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( 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( 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( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst 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\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst 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( q ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst 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( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst 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( 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( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( 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( 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( 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( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst 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() {\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() {\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() {\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() {\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() {\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( 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() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( 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( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( 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( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst 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( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\treflect( normal ) {\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\treturn this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp$1( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst 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( 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( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst 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( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst 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( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, 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( array = [], 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( 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\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nVector3.prototype.isVector3 = true;\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( 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( array ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst x = array[ i ];\n\t\t\tconst y = array[ i + 1 ];\n\t\t\tconst 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( attribute ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tconst x = attribute.getX( i );\n\t\t\tconst y = attribute.getY( i );\n\t\t\tconst 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( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let 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( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( 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() {\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() {\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( 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( 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( 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( 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( 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( object ) {\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\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\t_box$3.copy( geometry.boundingBox );\n\t\t\t_box$3.applyMatrix4( object.matrixWorld );\n\n\t\t\tthis.union( _box$3 );\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( 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( 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( 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( 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( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( 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\tlet 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( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$2.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$3.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$2 );\n\t\t_f1.subVectors( _v2$3, _v1$7 );\n\t\t_f2.subVectors( _v0$2, _v2$3 );\n\n\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// 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// 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\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents );\n\n\t}\n\n\tclampPoint( 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( point ) {\n\n\t\tconst clampedPoint = _vector$b.copy( point ).clamp( this.min, this.max );\n\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t//target = new Sphere(); // removed to avoid cyclic dependency\n\n\t\t}\n\n\t\tthis.getCenter( target.center );\n\n\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\treturn target;\n\n\t}\n\n\tintersect( 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( 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( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( 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( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nBox3.prototype.isBox3 = true;\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$3 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the seperating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is seperating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _toFarthestPoint = /*@__PURE__*/ new Vector3();\nconst _toPoint = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( 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( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$2.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( 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\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst 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( 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\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\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( 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( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L649-L671\n\n\t\t_toPoint.subVectors( point, this.center );\n\n\t\tconst lengthSq = _toPoint.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\t\t\tconst missingRadiusHalf = ( length - this.radius ) * 0.5;\n\n\t\t\t// Nudge this sphere towards the target point. Add half the missing distance to radius,\n\t\t\t// and the other half to position. This gives a tighter enclosure, instead of if\n\t\t\t// the whole missing distance were just added to radius.\n\n\t\t\tthis.center.add( _toPoint.multiplyScalar( missingRadiusHalf / length ) );\n\t\t\tthis.radius += missingRadiusHalf;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L759-L769\n\n\t\t// To enclose another sphere into this sphere, we only need to enclose two points:\n\t\t// 1) Enclose the farthest point on the other sphere into this sphere.\n\t\t// 2) Enclose the opposite point of the farthest point into this sphere.\n\n\t\t_toFarthestPoint.subVectors( sphere.center, this.center ).normalize().multiplyScalar( sphere.radius );\n\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _toFarthestPoint ) );\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _toFarthestPoint ) );\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( 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\tcopy( 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( 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( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( 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\tconst 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( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$a.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\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} else {\n\n\t\t\t\t\t\t// region 1\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\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst 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\tconst 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( plane, target ) {\n\n\t\tconst 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( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst 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( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst 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( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( 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( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor() {\n\n\t\tthis.elements = [\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\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst 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() {\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() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst 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( m ) {\n\n\t\tconst 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\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( 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( 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( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\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\tmakeRotationFromEuler( 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\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst 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\tconst 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\tconst 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\tconst 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\tconst 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\tconst 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// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\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( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( 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( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst 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( s ) {\n\n\t\tconst 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\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst 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() {\n\n\t\tconst te = this.elements;\n\t\tlet 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( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 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\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst 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( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst 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() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst 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( 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( theta ) {\n\n\t\tconst 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( theta ) {\n\n\t\tconst 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( theta ) {\n\n\t\tconst 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( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst 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\treturn this;\n\n\t}\n\n\tmakeScale( 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( 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( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$2.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$2.elements[ 0 ] *= invSX;\n\t\t_m1$2.elements[ 1 ] *= invSX;\n\t\t_m1$2.elements[ 2 ] *= invSX;\n\n\t\t_m1$2.elements[ 4 ] *= invSY;\n\t\t_m1$2.elements[ 5 ] *= invSY;\n\t\t_m1$2.elements[ 6 ] *= invSY;\n\n\t\t_m1$2.elements[ 8 ] *= invSZ;\n\t\t_m1$2.elements[ 9 ] *= invSZ;\n\t\t_m1$2.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$2 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( 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\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\tconst c = - ( far + near ) / ( far - near );\n\t\tconst 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( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\t\tconst 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( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let 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( array, offset = 0 ) {\n\n\t\tfor ( let 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( array = [], offset = 0 ) {\n\n\t\tconst 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\nMatrix4.prototype.isMatrix4 = true;\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( 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() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( 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( m, order, update ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp$1( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp$1( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp$1( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp$1( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp$1( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp$1( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown 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( q, order, update ) {\n\n\t\t_matrix$1.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$1, order, update );\n\n\t}\n\n\tsetFromVector3( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( 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( 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( array = [], 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( 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\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nEuler.prototype.isEuler = true;\n\nEuler.DefaultOrder = 'XYZ';\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = new /*@__PURE__*/ Vector3();\nconst _q1 = new /*@__PURE__*/ Quaternion();\nconst _m1$1 = new /*@__PURE__*/ Matrix4();\nconst _target = new /*@__PURE__*/ Vector3();\n\nconst _position$3 = new /*@__PURE__*/ Vector3();\nconst _scale$2 = new /*@__PURE__*/ Vector3();\nconst _quaternion$2 = new /*@__PURE__*/ Quaternion();\n\nconst _xAxis = new /*@__PURE__*/ Vector3( 1, 0, 0 );\nconst _yAxis = new /*@__PURE__*/ Vector3( 0, 1, 0 );\nconst _zAxis = new /*@__PURE__*/ Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DefaultUp.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeRender() {}\n\tonAfterRender() {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( 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( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\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\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\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\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let 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\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\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( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let 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\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tthis.add( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst 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( 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.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\ttarget = new Quaternion();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast() {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let 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( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let 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( callback ) {\n\n\t\tconst 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() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( 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\tconst children = this.children;\n\n\t\tfor ( let 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\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst 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\tskeletons: {},\n\t\t\t\tanimations: {}\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\tconst 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.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\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.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst 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.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\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\tconst uuids = [];\n\n\t\t\t\tfor ( let 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 ( let 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\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\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\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\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\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst 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}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, 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.rotation.order = source.rotation.order;\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 ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst 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\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype.isObject3D = true;\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( 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( 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( 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( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2$1.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( 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() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst 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() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( 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( line, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t}\n\n\tintersectsLine( 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\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( 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( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nPlane.prototype.isPlane = true;\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$1 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$1.subVectors( a, b );\n\t\ttarget.cross( _v0$1 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\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\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$1.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\tconst dot02 = _v0$1.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3$1 );\n\n\t\treturn ( _v3$1.x >= 0 ) && ( _v3$1.y >= 0 ) && ( ( _v3$1.x + _v3$1.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3$1 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3$1.x );\n\t\ttarget.addScaledVector( uv2, _v3$1.y );\n\t\ttarget.addScaledVector( uv3, _v3$1.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$1.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( 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( 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() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( 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() {\n\n\t\t_v0$1.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( 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( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( 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 Plane();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( 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\nlet materialId = 0;\n\nfunction Material$1() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Material';\n\n\tthis.fog = true;\n\n\tthis.blending = NormalBlending;\n\tthis.side = FrontSide;\n\tthis.vertexColors = false;\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.stencilWriteMask = 0xff;\n\tthis.stencilFunc = AlwaysStencilFunc;\n\tthis.stencilRef = 0;\n\tthis.stencilFuncMask = 0xff;\n\tthis.stencilFail = KeepStencilOp;\n\tthis.stencilZFail = KeepStencilOp;\n\tthis.stencilZPass = KeepStencilOp;\n\tthis.stencilWrite = false;\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.alphaToCoverage = false;\n\tthis.premultipliedAlpha = false;\n\n\tthis.visible = true;\n\n\tthis.toneMapped = true;\n\n\tthis.userData = {};\n\n\tthis.version = 0;\n\n}\n\nMaterial$1.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Material$1,\n\n\tisMaterial: true,\n\n\tonBuild: function ( /* shaderobject, renderer */ ) {},\n\n\tonBeforeCompile: function ( /* shaderobject, renderer */ ) {},\n\n\tcustomProgramCacheKey: function () {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t},\n\n\tsetValues: function ( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst 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\tconst 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 {\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\tconst 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\tconst 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.sheen && this.sheen.isColor ) data.sheen = this.sheen.getHex();\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && 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.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\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\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\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\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\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\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.shadowSide !== null ) data.shadowSide = this.shadowSide;\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.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\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\t\tdata.colorWrite = this.colorWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth && 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.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;\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.morphNormals === true ) data.morphNormals = true;\n\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\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\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst 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\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst 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\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\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.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\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.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\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\nObject.defineProperty( Material$1.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nconst _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\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( 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( 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( 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( 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( h, s, l ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp$1( s, 0, 1 );\n\t\tl = clamp$1( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( 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\tlet m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst 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 = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\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[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\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[ 4 ] );\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 = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\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\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tconst l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\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-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst 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\treturn this.setColorName( style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( 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( color, 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( color, gammaFactor = 2.0 ) {\n\n\t\tconst 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( gammaFactor ) {\n\n\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToGamma( gammaFactor ) {\n\n\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex() {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t}\n\n\tgetHexString() {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( 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\tconst r = this.r, g = this.g, b = this.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst 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\tconst 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() {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( 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( 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( 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( 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( 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( 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( 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\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, 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( array = [], 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\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\tif ( attribute.normalized === true ) {\n\n\t\t\t// assuming Uint8Array\n\n\t\t\tthis.r /= 255;\n\t\t\tthis.g /= 255;\n\t\t\tthis.b /= 255;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n}\n\nColor.NAMES = _colorKeywords;\n\nColor.prototype.isColor = true;\nColor.prototype.r = 1;\nColor.prototype.g = 1;\nColor.prototype.b = 1;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * depthTest: ,\n * depthWrite: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: \n * }\n */\n\nclass MeshBasicMaterial extends Material$1 {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nconst _vector$9 = new /*@__PURE__*/ Vector3();\nconst _vector2 = new /*@__PURE__*/ Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\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.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized === true;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t\tthis.onUploadCallback = function () {};\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( 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.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let 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( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tcopyColorsArray( colors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tlet 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( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet 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( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet 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( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet 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\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2.fromBufferAttribute( this, i );\n\t\t\t\t_vector2.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2.x, _vector2.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( 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( 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( 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( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.prototype.slice.call( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\t\tif ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange;\n\n\t\treturn data;\n\n\t}\n\n}\n\nBufferAttribute.prototype.isBufferAttribute = true;\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tlet max = array[ 0 ];\n\n\tfor ( let 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\nlet _id = 0;\n\nconst _m1 = new /*@__PURE__*/ Matrix4();\nconst _obj = new /*@__PURE__*/ Object3D();\nconst _offset = new /*@__PURE__*/ Vector3();\nconst _box$1 = new /*@__PURE__*/ Box3();\nconst _boxMorphTargets = new /*@__PURE__*/ Box3();\nconst _vector$8 = new /*@__PURE__*/ Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( 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\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.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( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$1.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$1.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.max );\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\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() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$1.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$1.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$8.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\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}\n\n\t\t}\n\n\t}\n\n\tcomputeFaceNormals() {\n\n\t\t// backwards compatibility\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst indices = index.array;\n\t\tconst positions = attributes.position.array;\n\t\tconst normals = attributes.normal.array;\n\t\tconst uvs = attributes.uv.array;\n\n\t\tconst nVertices = positions.length / 3;\n\n\t\tif ( attributes.tangent === undefined ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );\n\n\t\t}\n\n\t\tconst tangents = attributes.tangent.array;\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < nVertices; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromArray( positions, a * 3 );\n\t\t\tvB.fromArray( positions, b * 3 );\n\t\t\tvC.fromArray( positions, c * 3 );\n\n\t\t\tuvA.fromArray( uvs, a * 2 );\n\t\t\tuvB.fromArray( uvs, b * 2 );\n\t\t\tuvC.fromArray( uvs, c * 2 );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: indices.length\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindices[ j + 0 ],\n\t\t\t\t\tindices[ j + 1 ],\n\t\t\t\t\tindices[ j + 2 ]\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromArray( normals, v * 3 );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangents[ v * 4 ] = tmp.x;\n\t\t\ttangents[ v * 4 + 1 ] = tmp.y;\n\t\t\ttangents[ v * 4 + 2 ] = tmp.z;\n\t\t\ttangents[ v * 4 + 3 ] = w;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( indices[ j + 0 ] );\n\t\t\t\thandleVertex( indices[ j + 1 ] );\n\t\t\t\thandleVertex( indices[ j + 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\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\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\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 ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\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\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tmerge( 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\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tconst attribute1 = attributes[ key ];\n\t\t\tconst attributeArray1 = attribute1.array;\n\n\t\t\tconst attribute2 = geometry.attributes[ key ];\n\t\t\tconst attributeArray2 = attribute2.array;\n\n\t\t\tconst attributeOffset = attribute2.itemSize * offset;\n\t\t\tconst length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset );\n\n\t\t\tfor ( let i = 0, j = attributeOffset; i < 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() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( let 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\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst 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() {\n\n\t\tconst 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\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const 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\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst 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\tconst 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() {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const 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( source ) {\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// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst 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\tconst 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\tconst 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\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nBufferGeometry.prototype.isBufferGeometry = true;\n\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\nconst _tempC = /*@__PURE__*/ new Vector3();\n\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _morphC = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\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\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst 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 ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = 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\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$3.copy( geometry.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\tconst uv = geometry.attributes.uv;\n\t\t\tconst uv2 = geometry.attributes.uv2;\n\t\t\tconst groups = geometry.groups;\n\t\t\tconst drawRange = geometry.drawRange;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t// indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\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} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, 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 indexed 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}\n\n\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\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} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = i;\n\t\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, 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 non-indexed 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}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n}\n\nMesh.prototype.isMesh = true;\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t_vA$1.fromBufferAttribute( position, a );\n\t_vB$1.fromBufferAttribute( position, b );\n\t_vC$1.fromBufferAttribute( position, c );\n\n\tconst morphInfluences = object.morphTargetInfluences;\n\n\tif ( material.morphTargets && morphPosition && morphInfluences ) {\n\n\t\t_morphA.set( 0, 0, 0 );\n\t\t_morphB.set( 0, 0, 0 );\n\t\t_morphC.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\tconst influence = morphInfluences[ i ];\n\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t} else {\n\n\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA$1 ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB$1 ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC$1 ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA$1.add( _morphA );\n\t\t_vB$1.add( _morphB );\n\t\t_vC$1.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh && material.skinning ) {\n\n\t\tobject.boneTransform( a, _vA$1 );\n\t\tobject.boneTransform( b, _vB$1 );\n\t\tobject.boneTransform( c, _vC$1 );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv2, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv2, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\n/**\n * parameters = {\n * defines: { \"label\" : \"value\" },\n * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n * fragmentShader: ,\n * vertexShader: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * lights: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nclass ShaderMaterial extends Material$1 {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.skinning = false; // set to use skinning attribute streams\n\t\tthis.morphTargets = false; // set to use morph targets\n\t\tthis.morphNormals = false; // set to use morph normals\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false, // set to use derivatives\n\t\t\tfragDepth: false, // set to use fragment depth values\n\t\t\tdrawBuffers: false, // set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv2': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.skinning = source.skinning;\n\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nCamera.prototype.isCamera = true;\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( 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( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = 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() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\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() {\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 * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( 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( 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() {\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() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst 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\tconst 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\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( 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\nPerspectiveCamera.prototype.isPerspectiveCamera = true;\n\nconst fov = 90, aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget !== true ) {\n\n\t\t\tconsole.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tcameraPY.up.set( 0, 0, 1 );\n\t\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst renderTarget = this.renderTarget;\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t}\n\n}\n\nclass CubeTexture extends Texture$1 {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\t\tformat = format !== undefined ? format : RGBFormat;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\t// Why CubeTexture._needsFlipEnvMap is necessary:\n\t\t//\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false)\n\t\t// when using WebGLCubeRenderTarget.texture as a cube texture.\n\n\t\tthis._needsFlipEnvMap = true;\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nCubeTexture.prototype.isCubeTexture = true;\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size, options, dummy ) {\n\n\t\tif ( Number.isInteger( options ) ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' );\n\n\t\t\toptions = dummy;\n\n\t\t}\n\n\t\tsuper( size, size, options );\n\n\t\toptions = options || {};\n\n\t\tthis.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.texture._needsFlipEnvMap = false;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.format = RGBAFormat; // see #18859\n\t\tthis.texture.encoding = texture.encoding;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\n\nclass DataTexture extends Texture$1 {\n\n\tconstructor( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { data: data || null, width: width || 1, height: height || 1 };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture.prototype.isDataTexture = true;\n\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst 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\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let 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\tsetFromProjectionMatrix( m ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst 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( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$2.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$2.center.set( 0, 0, 0 );\n\t\t_sphere$2.radius = 0.7071067811865476;\n\t\t_sphere$2.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst 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( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 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\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let 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\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\n\t\tconst 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\tlet type = 5126;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = 5126;\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\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\ttype = 5131;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = 5123;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = 5122;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = 5125;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = 5124;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = 5120;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = 5121;\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\tconst array = attribute.array;\n\t\tconst updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( 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 {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t}\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\tconst 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.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst 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\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\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\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\";\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( STANDARD )\\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\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\\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\\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n#else\\n\\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\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}\\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\\n\\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\\n\\treturn Fr * fresnel + F0;\\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 vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( 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 vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\treturn specularColor * brdf.x + brdf.y;\\n}\\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\tvec3 FssEss = F * brdf.x + brdf.y;\\n\\tfloat Ess = brdf.x + brdf.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\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#if defined( USE_SHEEN )\\nfloat D_Charlie(float roughness, float NoH) {\\n\\tfloat invAlpha = 1.0 / roughness;\\n\\tfloat cos2h = NoH * NoH;\\n\\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\\n}\\nfloat V_Neubelt(float NoV, float NoL) {\\n\\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\\n}\\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 H = normalize( V + L );\\n\\tfloat dotNH = saturate( dot( N, H ) );\\n\\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\\n}\\n#endif\";\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, float faceDirection ) {\\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 ) * faceDirection;\\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\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement(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}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\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#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\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}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\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\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\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.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\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.a );\\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.a );\\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.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, 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.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.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 = cLogLuvM * value.rgb;\\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 = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, 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_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifndef ENVMAP_TYPE_CUBE_UV\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#endif\\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\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\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\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tfogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\\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\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\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n#endif\";\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 = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\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\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\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\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\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\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\\n\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\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};\\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};\\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};\\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\nvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\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\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 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 roughness, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, 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\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial 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\\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\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\\n#ifdef REFLECTIVITY\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#endif\\n#ifdef CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheen;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularRoughness;\\n\\tvec3 specularColor;\\n#ifdef CLEARCOAT\\n\\tfloat clearcoat;\\n\\tfloat clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tvec3 sheenColor;\\n#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#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = ccDotNL * directLight.color;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tccIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t\\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\\n\\t\\t\\tmaterial.specularRoughness,\\n\\t\\t\\tdirectLight.direction,\\n\\t\\t\\tgeometry,\\n\\t\\t\\tmaterial.sheenColor\\n\\t\\t);\\n\\t#else\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\\n\\t#endif\\n\\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\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 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t\\tfloat ccDotNL = ccDotNV;\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\tfloat clearcoatInv = 1.0 - clearcoatDHR;\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\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\\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\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\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\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\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\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * 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( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\\n\\t#ifdef CLEARCOAT\\n\\t\\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\\n\\t#endif\\n#endif\";\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, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\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\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#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 * faceDirection;\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\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\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\n\\t#endif\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\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}\\nvec4 pack2HalfToRGBA( vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\\n}\\nvec2 unpackRGBATo2Half( vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\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\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef 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\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\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_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\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\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\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( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), 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( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), 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 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\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 ) || defined( SHADOWMAP_TYPE_VSM )\\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\nvar shadowmap_pars_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\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 highp 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\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\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\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\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\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\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}\\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}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmissionmap_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\\n#endif\";\n\nvar transmissionmap_pars_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\tuniform sampler2D transmissionMap;\\n#endif\";\n\nvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\nvar uv_vertex = \"#ifdef USE_UV\\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\\tuniform mat3 uv2Transform;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nvar background_frag = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nvar background_vert = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nvar cube_frag = \"#include \\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nvar cube_vert = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#endif\\n}\";\n\nvar depth_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\nvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\nvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nvar equirect_vert = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshbasic_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_ENVMAP\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include \\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 \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshmatcap_frag = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshmatcap_vert = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nvar meshtoon_frag = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshtoon_vert = \"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphysical_frag = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define REFLECTIVITY\\n\\t#define CLEARCOAT\\n\\t#define TRANSMISSION\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef TRANSMISSION\\n\\tuniform float transmission;\\n#endif\\n#ifdef REFLECTIVITY\\n\\tuniform float reflectivity;\\n#endif\\n#ifdef CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheen;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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#ifdef TRANSMISSION\\n\\t\\tfloat totalTransmission = transmission;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#ifdef TRANSMISSION\\n\\t\\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\\n\\t#endif\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphysical_vert = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\";\n\nvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar shadow_vert = \"#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar sprite_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar sprite_vert = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst 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_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\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_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\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\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_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\ttransmissionmap_fragment: transmissionmap_fragment,\n\ttransmissionmap_pars_fragment: transmissionmap_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\tbackground_frag: background_frag,\n\tbackground_vert: background_vert,\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\tmeshmatcap_frag: meshmatcap_frag,\n\tmeshmatcap_vert: meshmatcap_vert,\n\tmeshtoon_frag: meshtoon_frag,\n\tmeshtoon_vert: meshtoon_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\tsprite_frag: sprite_frag,\n\tsprite_vert: sprite_vert\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst 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\t\tuv2Transform: { 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\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\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\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\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\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\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\tltc_1: { value: null },\n\t\tltc_2: { value: null }\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\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: mergeUniforms( [\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: mergeUniforms( [\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: mergeUniforms( [\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.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: mergeUniforms( [\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: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\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\ttoon: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\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}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: mergeUniforms( [\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: mergeUniforms( [\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: mergeUniforms( [\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: mergeUniforms( [\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\tsprite: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.envmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\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: mergeUniforms( [\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: mergeUniforms( [\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: mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tsheen: { value: new Color( 0x000000 ) },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nfunction WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = 0;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tbackground = cubemaps.get( background );\n\n\t\t}\n\n\t\t// Ignore background in AR\n\t\t// TODO: Reconsider this.\n\n\t\tconst xr = renderer.xr;\n\t\tconst session = xr.getSession && xr.getSession();\n\n\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\tbackground = null;\n\n\t\t}\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 || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( 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: false,\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.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( '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\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\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\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, 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 = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\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\nfunction WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\tconst maxVertexAttributes = gl.getParameter( 34921 );\n\n\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tif ( vaoAvailable ) {\n\n\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\tif ( currentState !== state ) {\n\n\t\t\t\tcurrentState = state;\n\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t}\n\n\t\t\tupdateBuffers = needsUpdate( geometry, index );\n\n\t\t\tif ( updateBuffers ) saveCache( geometry, index );\n\n\t\t} else {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\tcurrentState.program = program.id;\n\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh === true ) {\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, 34963 );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( 34963, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\treturn extension.createVertexArrayOES();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\treturn extension.bindVertexArrayOES( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( geometry, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in geometryAttributes ) {\n\n\t\t\tconst cachedAttribute = cachedAttributes[ key ];\n\t\t\tconst geometryAttribute = geometryAttributes[ key ];\n\n\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\tif ( cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( geometry, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst data = {};\n\t\t\tdata.attribute = attribute;\n\n\t\t\tif ( attribute.data ) {\n\n\t\t\t\tdata.data = attribute.data;\n\n\t\t\t}\n\n\t\t\tcache[ key ] = data;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\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\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; 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 vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\tif ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t}\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tconst geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst 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\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = 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\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( 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\tenableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = 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\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( name === 'instanceMatrix' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceMatrix );\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\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 0, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 1, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 2, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 3, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 );\n\n\t\t\t\t} else if ( name === 'instanceColor' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceColor );\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\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 );\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst 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\tgl.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\tgl.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\tgl.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\tgl.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\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatilibity\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet 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, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: 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\textension[ methodName ]( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\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( 35633, 36338 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36338 ).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( 35633, 36337 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36337 ).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\t/* eslint-disable no-undef */\n\tconst isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||\n\t\t( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );\n\t/* eslint-enable no-undef */\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst 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\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( 34930 );\n\tconst maxVertexTextures = gl.getParameter( 35660 );\n\tconst maxTextureSize = gl.getParameter( 3379 );\n\tconst maxCubemapSize = gl.getParameter( 34076 );\n\n\tconst maxAttributes = gl.getParameter( 34921 );\n\tconst maxVertexUniforms = gl.getParameter( 36347 );\n\tconst maxVaryings = gl.getParameter( 36348 );\n\tconst maxFragmentUniforms = gl.getParameter( 36349 );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\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\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = 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\tconst 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 ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\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\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.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\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = 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\tconst 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 ( let 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\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn 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\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\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\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\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\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\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\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function ( capabilities ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\n\t\t\t} else {\n\n\t\t\t\tgetExtension( 'WEBGL_depth_texture' );\n\t\t\t\tgetExtension( 'OES_texture_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float_linear' );\n\t\t\t\tgetExtension( 'OES_standard_derivatives' );\n\t\t\t\tgetExtension( 'OES_element_index_uint' );\n\t\t\t\tgetExtension( 'OES_vertex_array_object' );\n\t\t\t\tgetExtension( 'ANGLE_instanced_arrays' );\n\n\t\t\t}\n\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\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\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\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\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst 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\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst 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\tconst attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\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\nfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet 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, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: 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\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\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\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst 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\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 4:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 3:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase 0:\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\nfunction numericalSort( a, b ) {\n\n\treturn a[ 0 ] - b[ 0 ];\n\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\tconst influencesList = {};\n\tconst morphInfluences = new Float32Array( 8 );\n\n\tconst workInfluences = [];\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t}\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\tlet 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 ( let 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\t// Collect influences\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst 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\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tworkInfluences.sort( numericalSort );\n\n\t\tconst morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tconst morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tconst influence = workInfluences[ i ];\n\t\t\tconst index = influence[ 0 ];\n\t\t\tconst value = influence[ 1 ];\n\n\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t} else {\n\n\t\t\t\tif ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\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\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\tattributes.update( object.instanceColor, 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass DataTexture2DArray extends Texture$1 {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture2DArray.prototype.isDataTexture2DArray = true;\n\nclass DataTexture3D extends Texture$1 {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture3D.prototype.isDataTexture3D = true;\n\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 )'.\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, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\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 (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nconst emptyTexture = new Texture$1();\nconst emptyTexture2dArray = new DataTexture2DArray();\nconst emptyTexture3d = new DataTexture3D();\nconst emptyCubeTexture = new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst 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\tconst n = nBlocks * blockSize;\n\tlet r = 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 ( let 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\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet 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 ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\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 setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || emptyTexture3d, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyTexture2dArray, unit );\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 setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTextureCube( 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 setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\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.cache = [];\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.cache = [];\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\tconst cache = this.cache;\n\n\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\tthis.cache = new Float32Array( data.length );\n\n\t}\n\n\tcopyArray( cache, data );\n\n};\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value, textures ) {\n\n\tconst seq = this.seq;\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/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\tconst 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\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = 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\tconst map = container.map;\n\t\t\tlet 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 ) {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n\tconst n = gl.getProgramParameter( program, 35718 );\n\n\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\tconst 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, textures ) {\n\n\tconst u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tconst 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, textures ) {\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst 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, textures );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tconst r = [];\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\nlet programIdCount = 0;\n\nfunction addLineNumbers( string ) {\n\n\tconst lines = string.split( '\\n' );\n\n\tfor ( let 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 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\tcase LogLuvEncoding:\n\t\t\treturn [ 'LogLuv', '( value )' ];\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\treturn [ 'Linear', '( value )' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, 35713 );\n\tconst log = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && log === '' ) return '';\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\tconst source = gl.getShaderSource( shader );\n\n\treturn 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\\n' + log + addLineNumbers( source );\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet 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 CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( parameters ) {\n\n\tconst chunks = [\n\t\t( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ? '#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\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst 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\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, 35721 );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst 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\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\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\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nfunction includeReplacer( match, include ) {\n\n\tconst string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst deprecatedUnrollLoopPattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string\n\t\t.replace( unrollLoopPattern, loopReplacer )\n\t\t.replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer );\n\n}\n\nfunction deprecatedLoopReplacer( match, start, end, snippet ) {\n\n\tconsole.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' );\n\treturn loopReplacer( match, start, end, snippet );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = 'precision ' + parameters.precision + ' float;\\nprecision ' + parameters.precision + ' int;';\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet 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} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\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}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.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\treturn envMapBlendingDefine;\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\n\n\tconst gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.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\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\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.fogExp2 ) ? '#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\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_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.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\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\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#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\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\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_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( 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\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer\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.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\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\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_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\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\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\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\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\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',\n\t\t\tparameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, 35633, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, 35632, 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 ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.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\t// check for link errors\n\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tlet runnable = true;\n\t\tlet haveDiagnostics = true;\n\n\t\tif ( gl.getProgramParameter( program, 35714 ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors );\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\t// Clean up\n\n\t// Crashes in iOS9 and iOS10. #18402\n\t// gl.detachShader( program, glVertexShader );\n\t// gl.detachShader( program, glFragmentShader );\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet 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\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst programs = [];\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst floatVertexTextures = capabilities.floatVertexTextures;\n\tconst maxVertexUniforms = capabilities.maxVertexUniforms;\n\tconst vertexTextures = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst 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: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tconst parameterNames = [\n\t\t'precision', 'isWebGL2', 'supportsVertexTextures', 'outputEncoding', 'instancing', 'instancingColor',\n\t\t'map', 'mapEncoding', 'matcap', 'matcapEncoding', 'envMap', 'envMapMode', 'envMapEncoding', 'envMapCubeUV',\n\t\t'lightMap', 'lightMapEncoding', 'aoMap', 'emissiveMap', 'emissiveMapEncoding', 'bumpMap', 'normalMap', 'objectSpaceNormalMap', 'tangentSpaceNormalMap', 'clearcoatMap', 'clearcoatRoughnessMap', 'clearcoatNormalMap', 'displacementMap', 'specularMap',\n\t\t'roughnessMap', 'metalnessMap', 'gradientMap',\n\t\t'alphaMap', 'combine', 'vertexColors', 'vertexAlphas', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2',\n\t\t'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning',\n\t\t'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals', 'premultipliedAlpha',\n\t\t'numDirLights', 'numPointLights', 'numSpotLights', 'numHemiLights', 'numRectAreaLights',\n\t\t'numDirLightShadows', 'numPointLightShadows', 'numSpotLightShadows',\n\t\t'shadowMapEnabled', 'shadowMapType', 'toneMapping', 'physicallyCorrectLights',\n\t\t'alphaTest', 'doubleSided', 'flipSided', 'numClippingPlanes', 'numClipIntersection', 'depthPacking', 'dithering',\n\t\t'sheen', 'transmissionMap'\n\t];\n\n\tfunction getMaxBones( object ) {\n\n\t\tconst skeleton = object.skeleton;\n\t\tconst bones = skeleton.bones;\n\n\t\tif ( 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\tconst nVertexUniforms = maxVertexUniforms;\n\t\t\tconst nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tconst 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 ) {\n\n\t\tlet encoding;\n\n\t\tif ( map && map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map && 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} else {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\n\t\tconst 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\tconst maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0;\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\tlet vertexShader, fragmentShader;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst parameters = {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderName: material.type,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\n\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\toutputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding,\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map ),\n\t\t\tmatcap: !! material.matcap,\n\t\t\tmatcapEncoding: getTextureEncodingFromMap( material.matcap ),\n\t\t\tenvMap: !! envMap,\n\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( envMap ),\n\t\t\tenvMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\tlightMapEncoding: getTextureEncodingFromMap( material.lightMap ),\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\t\t\tclearcoatMap: !! material.clearcoatMap,\n\t\t\tclearcoatRoughnessMap: !! material.clearcoatRoughnessMap,\n\t\t\tclearcoatNormalMap: !! material.clearcoatNormalMap,\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\tsheen: !! material.sheen,\n\n\t\t\ttransmissionMap: !! material.transmissionMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexTangents: ( material.normalMap && material.vertexTangents ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && object.geometry && object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4,\n\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap,\n\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmissionMap ) && !! material.displacementMap,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: !! material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: floatVertexTextures,\n\n\t\t\tmorphTargets: material.morphTargets,\n\t\t\tmorphNormals: material.morphNormals,\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\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\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\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ),\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst 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( parameters.fragmentShader );\n\t\t\tarray.push( parameters.vertexShader );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tfor ( let i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t\t}\n\n\t\t\tarray.push( renderer.outputEncoding );\n\t\t\tarray.push( renderer.gammaFactor );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\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, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst 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\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet 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\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( 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.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else 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\n\nfunction WebGLRenderList( properties ) {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transparent = [];\n\n\tconst defaultProgram = { id: - 1 };\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 getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\t\tconst materialProperties = properties.get( material );\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: materialProperties.program || defaultProgram,\n\t\t\t\tgroupOrder: groupOrder,\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 = materialProperties.program || defaultProgram;\n\t\t\trenderItem.groupOrder = groupOrder;\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\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t( material.transparent === true ? transparent : opaque ).unshift( renderItem );\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.program = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists( properties ) {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tlet list;\n\n\t\tif ( lists.has( scene ) === false ) {\n\n\t\t\tlist = new WebGLRenderList( properties );\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= lists.get( scene ).length ) {\n\n\t\t\t\tlist = new WebGLRenderList( properties );\n\t\t\t\tlists.get( scene ).push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = lists.get( scene )[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst 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\tlet 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\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\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\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};\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\nfunction ShadowUniformsCache() {\n\n\tconst 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\tlet 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\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 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\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 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\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 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\t// TODO (abelnation): set RectAreaLight shadow uniforms\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\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions, capabilities ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\n\t\tlights.sort( shadowCastingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst 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.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\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\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\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.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\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\tconst 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.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\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\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.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\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\tconst uniforms = cache.get( light );\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\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\t// WebGL 1\n\n\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t}\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\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotShadowMatrix.length = numSpotShadows;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\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\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\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\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\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\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\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\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions, capabilities ) {\n\n\tconst lights = new WebGLLights( extensions, capabilities );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.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 setupLights() {\n\n\t\tlights.setup( lightsArray );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions, capabilities ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tlet renderState;\n\n\t\tif ( renderStates.has( scene ) === false ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStates.get( scene ).length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStates.get( scene ).push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStates.get( scene )[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * parameters = {\n *\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n * }\n */\n\nclass MeshDepthMaterial extends Material$1 {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\n/**\n * parameters = {\n *\n * referencePosition: ,\n * nearDistance: ,\n * farDistance: ,\n *\n * skinning: ,\n * morphTargets: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: \n *\n * }\n */\n\nclass MeshDistanceMaterial extends Material$1 {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.referencePosition = new Vector3();\n\t\tthis.nearDistance = 1;\n\t\tthis.farDistance = 1000;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.referencePosition.copy( source.referencePosition );\n\t\tthis.nearDistance = source.nearDistance;\n\t\tthis.farDistance = source.farDistance;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nvar vsm_frag = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean * HALF_SAMPLE_RATE;\\n\\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nvar vsm_vert = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nfunction WebGLShadowMap( _renderer, _objects, _capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterials = [],\n\t\t_distanceMaterials = [],\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = _capabilities.maxTextureSize;\n\n\tconst shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\n\t\tdefines: {\n\t\t\tSAMPLE_RATE: 2.0 / 8.0,\n\t\t\tHALF_SAMPLE_RATE: 1.0 / 8.0\n\t\t},\n\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vsm_vert,\n\n\t\tfragmentShader: vsm_frag\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst 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\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\tconst _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\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\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\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\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tconst pars = { minFilter: LinearFilter, magFilter: LinearFilter, 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\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tconst 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\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.map );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\tlet material = _depthMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDepthMaterial( {\n\n\t\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_depthMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDistanceMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\tlet material = _distanceMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDistanceMaterial( {\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_distanceMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\tlet result = null;\n\n\t\tlet getMaterialVariant = getDepthMaterialVariant;\n\t\tlet customMaterial = object.customDepthMaterial;\n\n\t\tif ( light.isPointLight === true ) {\n\n\t\t\tgetMaterialVariant = getDistanceMaterialVariant;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( customMaterial === undefined ) {\n\n\t\t\tlet useMorphing = false;\n\n\t\t\tif ( material.morphTargets === true ) {\n\n\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t}\n\n\t\t\tlet useSkinning = false;\n\n\t\t\tif ( object.isSkinnedMesh === true ) {\n\n\t\t\t\tif ( material.skinning === true ) {\n\n\t\t\t\t\tuseSkinning = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst useInstancing = object.isInstancedMesh === true;\n\n\t\t\tresult = getMaterialVariant( useMorphing, useSkinning, useInstancing );\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\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tlet 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\tlet 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\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\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 ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\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, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst 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.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\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\tconst depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type );\n\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\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst 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\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet 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( 2929 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2929 );\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( 512 );\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( 519 );\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( 513 );\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( 515 );\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( 514 );\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( 518 );\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( 516 );\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( 517 );\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( 515 );\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( 515 );\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\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( 2960 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( 2960 );\n\n\t\t\t\t\t}\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 !== stencilRef ||\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 !== stencilFail ||\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\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tlet enabledCapabilities = {};\n\n\tlet xrFramebuffer = null;\n\tlet currentBoundFramebuffers = {};\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( 35661 );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( 7938 );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.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 (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst currentScissor = new Vector4( 0, 0, gl.canvas.width, gl.canvas.height );\n\tconst currentViewport = new Vector4( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, 10241, 9728 );\n\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( 2929 );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( 2884 );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindXRFramebuffer( framebuffer ) {\n\n\t\tif ( framebuffer !== xrFramebuffer ) {\n\n\t\t\tgl.bindFramebuffer( 36160, framebuffer );\n\n\t\t\txrFramebuffer = framebuffer;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( framebuffer === null && xrFramebuffer !== null ) framebuffer = xrFramebuffer; // use active XR framebuffer if available\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t// 36009 is equivalent to 36160\n\n\t\t\t\tif ( target === 36009 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36160 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t\tif ( target === 36160 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36009 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\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\tconst equationToGL = {\n\t\t[ AddEquation ]: 32774,\n\t\t[ SubtractEquation ]: 32778,\n\t\t[ ReverseSubtractEquation ]: 32779\n\t};\n\n\tif ( isWebGL2 ) {\n\n\t\tequationToGL[ MinEquation ] = 32775;\n\t\tequationToGL[ MaxEquation ] = 32776;\n\n\t} else {\n\n\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: 0,\n\t\t[ OneFactor ]: 1,\n\t\t[ SrcColorFactor ]: 768,\n\t\t[ SrcAlphaFactor ]: 770,\n\t\t[ SrcAlphaSaturateFactor ]: 776,\n\t\t[ DstColorFactor ]: 774,\n\t\t[ DstAlphaFactor ]: 772,\n\t\t[ OneMinusSrcColorFactor ]: 769,\n\t\t[ OneMinusSrcAlphaFactor ]: 771,\n\t\t[ OneMinusDstColorFactor ]: 775,\n\t\t[ OneMinusDstAlphaFactor ]: 773\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( 3042 );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( 3042 );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( 32774 );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 1, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 0, 769, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 768, 0, 770 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 770, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 770, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 769 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 768 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = null;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( 2884 )\n\t\t\t: enable( 2884 );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\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\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( 32926 )\n\t\t\t: disable( 32926 );\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( 2304 );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( 2305 );\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( 2884 );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 2884 );\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( 32823 );\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( 32823 );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( 3089 );\n\n\t\t} else {\n\n\t\t\tdisable( 3089 );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = 33984 + 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\tlet 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 unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\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\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.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\t// reset state\n\n\t\tgl.disable( 3042 );\n\t\tgl.disable( 2884 );\n\t\tgl.disable( 2929 );\n\t\tgl.disable( 32823 );\n\t\tgl.disable( 3089 );\n\t\tgl.disable( 2960 );\n\t\tgl.disable( 32926 );\n\n\t\tgl.blendEquation( 32774 );\n\t\tgl.blendFunc( 1, 0 );\n\t\tgl.blendFuncSeparate( 1, 0, 1, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( 513 );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( 519, 0, 0xffffffff );\n\t\tgl.stencilOp( 7680, 7680, 7680 );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( 1029 );\n\t\tgl.frontFace( 2305 );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( 33984 );\n\n\t\tgl.bindFramebuffer( 36160, null );\n\n\t\tif ( isWebGL2 === true ) {\n\n\t\t\tgl.bindFramebuffer( 36009, null );\n\t\t\tgl.bindFramebuffer( 36008, null );\n\n\t\t}\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\txrFramebuffer = null;\n\t\tcurrentBoundFramebuffers = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\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\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tbindXRFramebuffer: bindXRFramebuffer,\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\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst maxTextures = capabilities.maxTextures;\n\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\tconst maxTextureSize = capabilities.maxTextureSize;\n\tconst maxSamples = capabilities.maxSamples;\n\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\tnew OffscreenCanvas( width, height ) :\n\t\t\tdocument.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tconst floor = needsPowerOfTwo ? floorPowerOfTwo : Math.floor;\n\n\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo$1( image ) {\n\n\t\treturn isPowerOfTwo( image.width ) && isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( isWebGL2 ) return false;\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, supportsMips ) {\n\n\t\treturn texture.generateMipmaps && supportsMips &&\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\tconst textureProperties = properties.get( texture );\n\n\t\ttextureProperties.__maxMipLevel = Math.log2( Math.max( width, height ) );\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType ) {\n\n\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === 6403 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33326;\n\t\t\tif ( glType === 5131 ) internalFormat = 33325;\n\t\t\tif ( glType === 5121 ) internalFormat = 33321;\n\n\t\t}\n\n\t\tif ( glFormat === 6407 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34837;\n\t\t\tif ( glType === 5131 ) internalFormat = 34843;\n\t\t\tif ( glType === 5121 ) internalFormat = 32849;\n\n\t\t}\n\n\t\tif ( glFormat === 6408 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34836;\n\t\t\tif ( glType === 5131 ) internalFormat = 34842;\n\t\t\tif ( glType === 5121 ) internalFormat = 32856;\n\n\t\t}\n\n\t\tif ( internalFormat === 33325 || internalFormat === 33326 ||\n\t\t\tinternalFormat === 34842 || internalFormat === 34836 ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\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 9728;\n\n\t\t}\n\n\t\treturn 9729;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst 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\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst 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\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( 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.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let 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\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst 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\tconst 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' );\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' );\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( 33984 + slot );\n\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 35866, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 32879, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: 10497,\n\t\t[ ClampToEdgeWrapping ]: 33071,\n\t\t[ MirroredRepeatWrapping ]: 33648\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: 9728,\n\t\t[ NearestMipmapNearestFilter ]: 9984,\n\t\t[ NearestMipmapLinearFilter ]: 9986,\n\n\t\t[ LinearFilter ]: 9729,\n\t\t[ LinearMipmapNearestFilter ]: 9985,\n\t\t[ LinearMipmapLinearFilter ]: 9987\n\t};\n\n\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\tif ( supportsMips ) {\n\n\t\t\t_gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] );\n\t\t\t_gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] );\n\t\t\t_gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, 33071 );\n\n\t\t\t}\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.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, 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.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2\n\t\t\tif ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only\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 initTexture( textureProperties, texture ) {\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}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = 3553;\n\n\t\tif ( texture.isDataTexture2DArray ) textureType = 35866;\n\t\tif ( texture.isDataTexture3D ) textureType = 32879;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo$1( texture.image ) === false;\n\t\tconst image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\n\t\tconst supportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format );\n\n\t\tlet glType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\tlet mipmap;\n\t\tconst mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tglInternalFormat = 6402;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t} else if ( texture.type === UnsignedInt248Type ) {\n\n\t\t\t\t\tglInternalFormat = 35056;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// validation checks for WebGL 1\n\n\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\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\tif ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tglInternalFormat = 34041;\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\t//\n\n\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, 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 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, 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( 3553, 0, glInternalFormat, 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 ( let 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 ( glFormat !== null ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( 3553, i, glInternalFormat, 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( 3553, i, glInternalFormat, 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 if ( texture.isDataTexture2DArray ) {\n\n\t\t\tstate.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else if ( texture.isDataTexture3D ) {\n\n\t\t\tstate.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\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 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, 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( 3553, 0, glInternalFormat, 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, supportsMips ) ) {\n\n\t\t\tgenerateMipmap( textureType, 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\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\tconst isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) );\n\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\tconst cubeImage = [];\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t} else {\n\n\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst image = cubeImage[ 0 ],\n\t\t\tsupportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\tlet mipmaps;\n\n\t\tif ( isCompressed ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\tstate.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\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}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\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\tmipmaps = texture.mipmaps;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length;\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t// We assume images for cube map have the same size.\n\t\t\tgenerateMipmap( 34067, 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\tconst texture = renderTarget.texture;\n\n\t\tconst glFormat = utils.convert( texture.format );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tif ( textureTarget === 32879 || textureTarget === 35866 ) {\n\n\t\t\tstate.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t} else {\n\n\t\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( 36161, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = 33189;\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst texture = renderTarget.texture;\n\n\t\t\tconst glFormat = utils.convert( texture.format );\n\t\t\tconst glType = utils.convert( texture.type );\n\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( 36161, 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\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( 36160, 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\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, 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\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === 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 ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\t\ttextureProperties.__version = texture.version;\n\n\t\tinfo.memory.textures ++;\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );\n\t\tconst isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\t// Handles WebGL2 RGBFormat fallback - #18858\n\n\t\tif ( isWebGL2 && texture.format === RGBFormat && ( texture.type === FloatType || texture.type === HalfFloatType ) ) {\n\n\t\t\ttexture.format = RGBAFormat;\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' );\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let 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\tif ( isMultisample ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer );\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, null );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, 36064, 34069 + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 34067, texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 34067, null );\n\n\t\t} else {\n\n\t\t\tlet glTextureType = 3553;\n\n\t\t\tif ( isRenderTarget3D ) {\n\n\t\t\t\t// Render targets containing layers, i.e: Texture 3D and 2d arrays\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tconst isTexture3D = texture.isDataTexture3D;\n\t\t\t\t\tglTextureType = isTexture3D ? 32879 : 35866;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, glTextureType );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 3553, texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 3553, 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\tconst texture = renderTarget.texture;\n\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\t\t\tconst 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 updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = 16384;\n\n\t\t\t\tif ( renderTarget.depthBuffer ) mask |= 256;\n\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= 1024;\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\tstate.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\tstate.bindFramebuffer( 36008, null );\n\t\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ?\n\t\t\tMath.min( maxSamples, renderTarget.samples ) : 0;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\t// backwards compatibility\n\n\tlet warnedTexture2D = false;\n\tlet warnedTextureCube = false;\n\n\tfunction safeSetTexture2D( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\tif ( warnedTexture2D === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTexture2D: don\\'t use render targets as textures. Use their .texture property instead.' );\n\t\t\t\twarnedTexture2D = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\t\tsetTexture2D( texture, slot );\n\n\t}\n\n\tfunction safeSetTextureCube( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLCubeRenderTarget ) {\n\n\t\t\tif ( warnedTextureCube === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTextureCube: don\\'t use cube render targets as textures. Use their .texture property instead.' );\n\t\t\t\twarnedTextureCube = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\n\t\tsetTextureCube( texture, slot );\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\n\tthis.safeSetTexture2D = safeSetTexture2D;\n\tthis.safeSetTextureCube = safeSetTextureCube;\n\n}\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction convert( p ) {\n\n\t\tlet extension;\n\n\t\tif ( p === UnsignedByteType ) return 5121;\n\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\t\tif ( p === UnsignedShort565Type ) return 33635;\n\n\t\tif ( p === ByteType ) return 5120;\n\t\tif ( p === ShortType ) return 5122;\n\t\tif ( p === UnsignedShortType ) return 5123;\n\t\tif ( p === IntType ) return 5124;\n\t\tif ( p === UnsignedIntType ) return 5125;\n\t\tif ( p === FloatType ) return 5126;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( isWebGL2 ) return 5131;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return 6406;\n\t\tif ( p === RGBFormat ) return 6407;\n\t\tif ( p === RGBAFormat ) return 6408;\n\t\tif ( p === LuminanceFormat ) return 6409;\n\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\tif ( p === DepthFormat ) return 6402;\n\t\tif ( p === DepthStencilFormat ) return 34041;\n\t\tif ( p === RedFormat ) return 6403;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedIntegerFormat ) return 36244;\n\t\tif ( p === RGFormat ) return 33319;\n\t\tif ( p === RGIntegerFormat ) return 33320;\n\t\tif ( p === RGBIntegerFormat ) return 36248;\n\t\tif ( p === RGBAIntegerFormat ) return 36249;\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} else {\n\n\t\t\t\treturn null;\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} else {\n\n\t\t\t\treturn null;\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 ) {\n\n\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t}\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\t\t\tp === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_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\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( isWebGL2 ) return 34042;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nArrayCamera.prototype.isArrayCamera = true;\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nGroup.prototype.isGroup = true;\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\t\tconst joint = new Group();\n\t\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\t\t\t\t\t\t// ??\n\t\t\t\t\t\thand.add( joint );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst joint = hand.joints[ inputjoint.jointName ];\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\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\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\t\tconst state = renderer.state;\n\n\t\tlet session = null;\n\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\n\t\tlet pose = null;\n\n\t\tconst controllers = [];\n\t\tconst inputSourcesMap = new Map();\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraVR = new ArrayCamera();\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controller = inputSourcesMap.get( event.inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tinputSourcesMap.forEach( function ( controller, inputSource ) {\n\n\t\t\t\tcontroller.disconnect( inputSource );\n\n\t\t\t} );\n\n\t\t\tinputSourcesMap.clear();\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\tstate.bindXRFramebuffer( null );\n\t\t\trenderer.setRenderTarget( renderer.getRenderTarget() );\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn referenceSpace;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tconst attributes = gl.getContextAttributes();\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tconst layerInit = {\n\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t};\n\n\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\tconst baseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\tsession.updateRenderState( { baseLayer: baseLayer } );\n\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\t// Assign inputSources to available controllers\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tinputSourcesMap.set( inputSources[ i ], controllers[ i ] );\n\n\t\t\t}\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\t\t\t\t\tinputSourcesMap.delete( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.getCamera = function ( camera ) {\n\n\t\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\t\tdepthFar: cameraVR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraVR.cameras;\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update camera and its children\n\n\t\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\t\t\tcamera.matrix.copy( cameraVR.matrix );\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\n\t\t\tconst children = camera.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t\treturn cameraVR;\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( referenceSpace );\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\t\t\t\tconst baseLayer = session.renderState.baseLayer;\n\n\t\t\t\tstate.bindXRFramebuffer( baseLayer.framebuffer );\n\n\t\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\t\t\t\t\tconst viewport = baseLayer.getViewport( view );\n\n\t\t\t\t\tconst camera = cameras[ i ];\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst controller = controllers[ i ];\n\t\t\t\tconst inputSource = inputSources[ i ];\n\n\t\t\t\tcontroller.update( inputSource, frame, referenceSpace );\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nfunction WebGLMaterials( properties ) {\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value.copy( 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 refreshMaterialUniforms( uniforms, material, pixelRatio, height ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsLambert( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material );\n\n\t\t\t} else {\n\n\t\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDepth( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsNormal( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\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.copy( 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\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tconst maxMipLevel = properties.get( envMap ).__maxMipLevel;\n\n\t\t\tif ( maxMipLevel !== undefined ) {\n\n\t\t\t\tuniforms.maxMipLevel.value = maxMipLevel;\n\n\t\t\t}\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. displacementMap map\n\t\t// 4. normal map\n\t\t// 5. bump map\n\t\t// 6. roughnessMap map\n\t\t// 7. metalnessMap map\n\t\t// 8. alphaMap map\n\t\t// 9. emissiveMap map\n\t\t// 10. clearcoat map\n\t\t// 11. clearcoat normal map\n\t\t// 12. clearcoat roughnessMap map\n\n\t\tlet 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} else if ( material.clearcoatMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\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\t// uv repeat and offset setting priorities for uv2\n\t\t// 1. ao map\n\t\t// 2. light map\n\n\t\tlet uv2ScaleMap;\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t} else if ( material.lightMap ) {\n\n\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t}\n\n\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( 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, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( 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\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\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\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 refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\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\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\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 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.copy( 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\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\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\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\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\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\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\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\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\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\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 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\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\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\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\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\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( 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\trefreshUniformsStandard( uniforms, material );\n\n\t\tuniforms.reflectivity.value = material.reflectivity; // also part of uniforms common\n\n\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\t\tif ( material.sheen ) uniforms.sheen.value.copy( material.sheen );\n\n\t\tif ( material.clearcoatMap ) {\n\n\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.transmission.value = material.transmission;\n\n\t\tif ( material.transmissionMap ) {\n\n\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\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\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\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\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\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 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\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\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\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\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\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nfunction WebGLRenderer( parameters ) {\n\n\tparameters = parameters || {};\n\n\tconst _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\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\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\tlet currentRenderList = null;\n\tlet currentRenderState = null;\n\n\t// render() can be called from within a callback triggered by another render.\n\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\tconst renderListStack = [];\n\tconst renderStateStack = [];\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\n\t// Debug configuration container\n\tthis.debug = {\n\n\t\t/**\n\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t * @type {boolean}\n\t\t */\n\t\tcheckShaderErrors: true\n\t};\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.outputEncoding = LinearEncoding;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = NoToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\n\t// internal properties\n\n\tconst _this = this;\n\n\tlet _isContextLost = false;\n\n\t// internal state cache\n\n\tlet _currentActiveCubeFace = 0;\n\tlet _currentActiveMipmapLevel = 0;\n\tlet _currentRenderTarget = null;\n\tlet _currentMaterialId = - 1;\n\n\tlet _currentCamera = null;\n\n\tconst _currentViewport = new Vector4();\n\tconst _currentScissor = new Vector4();\n\tlet _currentScissorTest = null;\n\n\t//\n\n\tlet _width = _canvas.width;\n\tlet _height = _canvas.height;\n\n\tlet _pixelRatio = 1;\n\tlet _opaqueSort = null;\n\tlet _transparentSort = null;\n\n\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\tlet _scissorTest = false;\n\n\t// frustum\n\n\tconst _frustum = new Frustum();\n\n\t// clipping\n\n\tlet _clippingEnabled = false;\n\tlet _localClippingEnabled = false;\n\n\t// camera matrices cache\n\n\tconst _projScreenMatrix = new Matrix4();\n\n\tconst _vector3 = new Vector3();\n\n\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tlet _gl = _context;\n\n\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\tconst contextName = contextNames[ i ];\n\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\tif ( context !== null ) return context;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\ttry {\n\n\t\tconst 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\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\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\tif ( _gl === null ) {\n\n\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n\t\t\t\tcontextNames.shift();\n\n\t\t\t}\n\n\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t}\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\t\tthrow error;\n\n\t}\n\n\tlet extensions, capabilities, state, info;\n\tlet properties, textures, cubemaps, attributes, geometries, objects;\n\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tlet utils, bindingStates;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\textensions.init( capabilities );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\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\tcubemaps = new WebGLCubeMaps( _this );\n\t\tattributes = new WebGLAttributes( _gl, capabilities );\n\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\tclipping = new WebGLClipping( properties );\n\t\tprogramCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping );\n\t\tmaterials = new WebGLMaterials( properties );\n\t\trenderLists = new WebGLRenderLists( properties );\n\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\tbackground = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha );\n\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\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.shadowMap = shadowMap;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// xr\n\n\tconst xr = new WebXRManager( _this, _gl );\n\n\tthis.xr = xr;\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\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tconst 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 ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width, _height );\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( xr.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 = Math.floor( width * _pixelRatio );\n\t\t_canvas.height = Math.floor( 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 ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\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 = Math.floor( width * pixelRatio );\n\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' );\n\n\t\t\ttarget = new Vector4();\n\n\t\t}\n\n\t\treturn target.copy( _currentViewport );\n\n\t};\n\n\tthis.getViewport = function ( target ) {\n\n\t\treturn target.copy( _viewport );\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_viewport.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissor = function ( target ) {\n\n\t\treturn target.copy( _scissor );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_scissor.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissorTest = function () {\n\n\t\treturn _scissorTest;\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\tthis.setOpaqueSort = function ( method ) {\n\n\t\t_opaqueSort = method;\n\n\t};\n\n\tthis.setTransparentSort = function ( method ) {\n\n\t\t_transparentSort = method;\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getClearColor() now requires a Color as an argument' );\n\n\t\t\ttarget = new Color();\n\n\t\t}\n\n\t\treturn target.copy( 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\tlet bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= 16384;\n\t\tif ( depth === undefined || depth ) bits |= 256;\n\t\tif ( stencil === undefined || stencil ) bits |= 1024;\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\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\tcubemaps.dispose();\n\t\tobjects.dispose();\n\t\tbindingStates.dispose();\n\n\t\txr.dispose();\n\n\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\tanimation.stop();\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\tconst infoAutoReset = info.autoReset;\n\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\tconst shadowMapType = shadowMap.type;\n\n\t\tinitGLContext();\n\n\t\tinfo.autoReset = infoAutoReset;\n\t\tshadowMap.enabled = shadowMapEnabled;\n\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\tshadowMap.type = shadowMapType;\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst 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\treleaseMaterialProgramReferences( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\tconst programs = properties.get( material ).programs;\n\n\t\tif ( programs !== undefined ) {\n\n\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tfunction renderObjectImmediate( object, program ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program ) {\n\n\t\tbindingStates.initAttributes();\n\n\t\tconst 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\tconst programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.position );\n\t\t\t_gl.bufferData( 34962, object.positionArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.normal );\n\t\t\t_gl.bufferData( 34962, object.normalArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.normal );\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.uv );\n\t\t\t_gl.bufferData( 34962, object.uvArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.uv );\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.color );\n\t\t\t_gl.bufferData( 34962, object.colorArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.color );\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tbindingStates.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( 4, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t//\n\n\t\tlet index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\n\t\t//\n\n\t\tif ( index === null ) {\n\n\t\t\tif ( position === undefined || position.count === 0 ) return;\n\n\t\t} else if ( index.count === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\tlet 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\tif ( material.morphTargets || material.morphNormals ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t}\n\n\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\tlet attribute;\n\t\tlet 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\t//\n\n\t\tconst dataCount = ( index !== null ) ? index.count : position.count;\n\n\t\tconst rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tconst rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tconst groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tconst groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tconst drawStart = Math.max( rangeStart, groupStart );\n\t\tconst drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tconst 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( 1 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t}\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tlet 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( 1 );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( 0 );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( 4 );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\tconst instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\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();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst material = object.material;\n\n\t\t\tif ( material ) {\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\tgetProgram( material2, scene, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgetProgram( material, scene, 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\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tfunction onXRSessionStart() {\n\n\t\tanimation.stop();\n\n\t}\n\n\tfunction onXRSessionEnd() {\n\n\t\tanimation.start();\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\txr.setAnimationLoop( callback );\n\n\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t};\n\n\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tlet renderTarget, forceClear;\n\n\t\tif ( arguments[ 2 ] !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' );\n\t\t\trenderTarget = arguments[ 2 ];\n\n\t\t}\n\n\t\tif ( arguments[ 3 ] !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' );\n\t\t\tforceClear = arguments[ 3 ];\n\n\t\t}\n\n\t\tif ( camera !== undefined && camera.isCamera !== true ) {\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 === true ) return;\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 ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tcamera = xr.getCamera( camera );\n\n\t\t}\n\n\t\t//\n\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget );\n\n\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromProjectionMatrix( _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, renderListStack.length );\n\t\tcurrentRenderList.init();\n\n\t\trenderListStack.push( currentRenderList );\n\n\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\tcurrentRenderList.finish();\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tcurrentRenderState.setupLights();\n\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\tif ( renderTarget !== undefined ) {\n\n\t\t\tthis.setRenderTarget( renderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t// render scene\n\n\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t//\n\n\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\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\t// _gl.finish();\n\n\t\tbindingStates.resetDefaultState();\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\trenderStateStack.pop();\n\n\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderState = null;\n\n\t\t}\n\n\t\trenderListStack.pop();\n\n\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderList = null;\n\n\t\t}\n\n\t};\n\n\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( 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\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\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\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, groupOrder, _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\t// update skeleton only once in a frame\n\n\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\n\t\t\t\t\t}\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\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst 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, groupOrder, _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, groupOrder, _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\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\tconst object = renderItem.object;\n\t\t\tconst geometry = renderItem.geometry;\n\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\tconst group = renderItem.group;\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\tfor ( let j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst camera2 = cameras[ j ];\n\n\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\tstate.viewport( _currentViewport.copy( camera2.viewport ) );\n\n\t\t\t\t\t\tcurrentRenderState.setupLightsView( camera2 );\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\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\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\tconst program = setProgram( camera, scene, material, object );\n\n\t\t\tstate.setMaterial( material );\n\n\t\t\tbindingStates.reset();\n\n\t\t\trenderObjectImmediate( object, program );\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t}\n\n\tfunction getProgram( material, scene, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst lights = currentRenderState.state.lights;\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tconst lightsStateVersion = lights.state.version;\n\n\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\tlet programs = materialProperties.programs;\n\n\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tmaterialProperties.fog = scene.fog;\n\t\tmaterialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment );\n\n\t\tif ( programs === undefined ) {\n\n\t\t\t// new material\n\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tprograms = new Map();\n\t\t\tmaterialProperties.programs = programs;\n\n\t\t}\n\n\t\tlet program = programs.get( programCacheKey );\n\n\t\tif ( program !== undefined ) {\n\n\t\t\t// early out if program and light state is identical\n\n\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\treturn program;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\tmaterial.onBuild( parameters, _this );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t}\n\n\t\tconst uniforms = materialProperties.uniforms;\n\n\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t}\n\n\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\tif ( materialProperties.needsLights ) {\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.lightProbe.value = lights.state.probe;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\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\tconst progUniforms = program.getUniforms();\n\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.currentProgram = program;\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t\treturn program;\n\n\t}\n\n\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\t\tmaterialProperties.instancing = parameters.instancing;\n\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\n\t}\n\n\tfunction setProgram( camera, scene, material, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\ttextures.resetTextureUnits();\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding;\n\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\t\tconst vertexAlphas = material.vertexColors === true && object.geometry && object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4;\n\n\t\tconst materialProperties = properties.get( material );\n\t\tconst lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled === true ) {\n\n\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\tconst 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\tclipping.setState( material, camera, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet needsProgramChange = false;\n\n\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tneedsProgramChange = 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\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tneedsProgramChange = true;\n\t\t\tmaterialProperties.__version = material.version;\n\n\t\t}\n\n\t\t//\n\n\t\tlet program = materialProperties.currentProgram;\n\n\t\tif ( needsProgramChange === true ) {\n\n\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t}\n\n\t\tlet refreshProgram = false;\n\t\tlet refreshMaterial = false;\n\t\tlet refreshLights = false;\n\n\t\tconst p_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.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 || _currentCamera !== camera ) {\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\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t_currentCamera = 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.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tconst 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.isMeshToonMaterial ||\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\n\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\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.isShadowMaterial ||\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// otherwise textures used for skinning can take over texture units reserved for other material textures\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\tconst skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tconst bones = skeleton.bones;\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) {\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\tlet size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\tsize = ceilPowerOfTwo( size );\n\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\tconst 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\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\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, textures );\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 || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\tif ( materialProperties.needsLights ) {\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\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height );\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\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// 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\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\tfunction materialNeedsLights( material ) {\n\n\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t}\n\n\tthis.getActiveCubeFace = function () {\n\n\t\treturn _currentActiveCubeFace;\n\n\t};\n\n\tthis.getActiveMipmapLevel = function () {\n\n\t\treturn _currentActiveMipmapLevel;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tlet framebuffer = null;\n\t\tlet isCube = false;\n\t\tlet isRenderTarget3D = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst texture = renderTarget.texture;\n\n\t\t\tif ( texture.isDataTexture3D || texture.isDataTexture2DArray ) {\n\n\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t}\n\n\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\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 ).floor();\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\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\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t_gl.framebufferTextureLayer( 36160, 36064, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\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\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t}\n\n\t\tif ( framebuffer ) {\n\n\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\ttry {\n\n\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) {\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\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! halfFloatSupportedByExt ) {\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( 36160 ) === 36053 ) {\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\t// restore framebuffer of current render target if necessary\n\n\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level = 0 ) {\n\n\t\tconst levelScale = Math.pow( 2, - level );\n\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\tconst height = Math.floor( texture.image.height * levelScale );\n\t\tconst glFormat = utils.convert( texture.format );\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tconst width = srcTexture.image.width;\n\t\tconst height = srcTexture.image.height;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t// As another texture upload may have changed pixelStorei\n\t\t// parameters, make sure they are correct for the dstTexture\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t_gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tif ( _this.isWebGL1Renderer ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst { width, height, data } = srcTexture.image;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\t\tlet glTarget;\n\n\t\tif ( dstTexture.isDataTexture3D ) {\n\n\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\tglTarget = 32879;\n\n\t\t} else if ( dstTexture.isDataTexture2DArray ) {\n\n\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\tglTarget = 35866;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tconst unpackRowLen = _gl.getParameter( 3314 );\n\t\tconst unpackImageHeight = _gl.getParameter( 32878 );\n\t\tconst unpackSkipPixels = _gl.getParameter( 3316 );\n\t\tconst unpackSkipRows = _gl.getParameter( 3315 );\n\t\tconst unpackSkipImages = _gl.getParameter( 32877 );\n\n\t\t_gl.pixelStorei( 3314, width );\n\t\t_gl.pixelStorei( 32878, height );\n\t\t_gl.pixelStorei( 3316, sourceBox.min.x );\n\t\t_gl.pixelStorei( 3315, sourceBox.min.y );\n\t\t_gl.pixelStorei( 32877, sourceBox.min.z );\n\n\t\t_gl.texSubImage3D(\n\t\t\tglTarget,\n\t\t\tlevel,\n\t\t\tposition.x,\n\t\t\tposition.y,\n\t\t\tposition.z,\n\t\t\tsourceBox.max.x - sourceBox.min.x + 1,\n\t\t\tsourceBox.max.y - sourceBox.min.y + 1,\n\t\t\tsourceBox.max.z - sourceBox.min.z + 1,\n\t\t\tglFormat,\n\t\t\tglType,\n\t\t\tdata\n\t\t);\n\n\t\t_gl.pixelStorei( 3314, unpackRowLen );\n\t\t_gl.pixelStorei( 32878, unpackImageHeight );\n\t\t_gl.pixelStorei( 3316, unpackSkipPixels );\n\t\t_gl.pixelStorei( 3315, unpackSkipRows );\n\t\t_gl.pixelStorei( 32877, unpackSkipImages );\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.initTexture = function ( texture ) {\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.resetState = function () {\n\n\t\t_currentActiveCubeFace = 0;\n\t\t_currentActiveMipmapLevel = 0;\n\t\t_currentRenderTarget = null;\n\n\t\tstate.reset();\n\t\tbindingStates.reset();\n\n\t};\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t}\n\n}\n\nclass WebGL1Renderer extends WebGLRenderer {}\n\nWebGL1Renderer.prototype.isWebGL1Renderer = true;\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.overrideMaterial = null;\n\n\t\tthis.autoUpdate = true; // checked by the renderer\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\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( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\tif ( this.environment !== null ) data.object.environment = this.environment.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\nScene.prototype.isScene = true;\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.onUploadCallback = function () {};\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( 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.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let 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( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new InterleavedBuffer( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nInterleavedBuffer.prototype.isInterleavedBuffer = true;\n\nconst _vector$6 = new /*@__PURE__*/ Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized ) {\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized === true;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetX( 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( 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( 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( 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( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t}\n\n\tgetY( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t}\n\n\tgetZ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t}\n\n\tgetW( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t}\n\n\tsetXY( 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( 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( 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\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// deinterleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interlaved attribtue\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nInterleavedBufferAttribute.prototype.isInterleavedBufferAttribute = true;\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = 'attached';\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\treturn this;\n\n\t}\n\n\tbind( 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.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.x = skinWeight.getX( i );\n\t\t\tvector.y = skinWeight.getY( i );\n\t\t\tvector.z = skinWeight.getZ( i );\n\t\t\tvector.w = skinWeight.getW( i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\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\tboneTransform( index, target ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix );\n\n\t\ttarget.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\ttarget.addScaledVector( _vector$5.copy( _basePosition ).applyMatrix4( _matrix ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nSkinnedMesh.prototype.isSkinnedMesh = true;\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nBone.prototype.isBone = true;\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\t\tthis.boneTextureSize = 0;\n\n\t\tthis.frame = - 1;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\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 ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = 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.copy( bone.parent.matrixWorld ).invert();\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() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst 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\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n * linecap: \"round\",\n * linejoin: \"round\"\n * }\n */\n\nclass LineBasicMaterial extends Material$1 {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nconst _start$1 = /*@__PURE__*/ new Vector3();\nconst _end$1 = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start$1.distanceTo( _end$1 );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) 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\tconst 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} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) 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\tconst 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} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst 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 ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = 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\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nLine.prototype.isLine = true;\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, 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\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nLineLoop.prototype.isLineLoop = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n *\n * size: ,\n * sizeAttenuation: \n *\n * morphTargets: \n * }\n */\n\nclass PointsMaterial extends Material$1 {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t}\n\n}\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst 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 ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = 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\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass CompressedTexture extends Texture$1 {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\nclass CanvasTexture extends Texture$1 {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nCanvasTexture.prototype.isCanvasTexture = true;\n\n/**\n * parameters = {\n * color: \n * }\n */\n\nclass ShadowMaterial extends Material$1 {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\treturn this;\n\n\t}\n\n}\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * roughness: ,\n * metalness: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * roughnessMap: new THREE.Texture( ),\n *\n * metalnessMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * envMapIntensity: \n *\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: ,\n *\n * flatShading: \n * }\n */\n\nclass MeshStandardMaterial extends Material$1 {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.vertexTangents = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.vertexTangents = source.vertexTangents;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\n/**\n * parameters = {\n * clearcoat: ,\n * clearcoatMap: new THREE.Texture( ),\n * clearcoatRoughness: ,\n * clearcoatRoughnessMap: new THREE.Texture( ),\n * clearcoatNormalScale: ,\n * clearcoatNormalMap: new THREE.Texture( ),\n *\n * reflectivity: ,\n * ior: ,\n *\n * sheen: ,\n *\n * transmission: ,\n * transmissionMap: new THREE.Texture( )\n * }\n */\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.clearcoat = 0.0;\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\t\tObject.defineProperty( this, 'ior', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity );\n\n\t\t\t},\n\t\t\tset: function ( ior ) {\n\n\t\t\t\tthis.reflectivity = clamp$1( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.sheen = null; // null will disable sheen bsdf\n\n\t\tthis.transmission = 0.0;\n\t\tthis.transmissionMap = null;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.reflectivity = source.reflectivity;\n\n\t\tif ( source.sheen ) {\n\n\t\t\tthis.sheen = ( this.sheen || new Color() ).copy( source.sheen );\n\n\t\t} else {\n\n\t\t\tthis.sheen = null;\n\n\t\t}\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\nconst 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! 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! ( 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\tconst n = times.length;\n\t\tconst result = new Array( n );\n\t\tfor ( let 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\tconst nValues = values.length;\n\t\tconst result = new values.constructor( nValues );\n\n\t\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tconst srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( let 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\tlet 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\tlet 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\tsubclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\t\tconst clip = sourceClip.clone();\n\n\t\tclip.name = name;\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tconst track = clip.tracks[ i ];\n\t\t\tconst valueSize = track.getValueSize();\n\n\t\t\tconst times = [];\n\t\t\tconst values = [];\n\n\t\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( times.length === 0 ) continue;\n\n\t\t\ttrack.times = AnimationUtils.convertArray( times, track.times.constructor );\n\t\t\ttrack.values = AnimationUtils.convertArray( values, track.values.constructor );\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\t// find minimum .times value across all tracks in the trimmed clip\n\n\t\tlet minStartTime = Infinity;\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// shift all tracks such that clip begins at t=0\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t\t}\n\n\t\tclip.resetDuration();\n\n\t\treturn clip;\n\n\t},\n\n\tmakeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\t\tif ( fps <= 0 ) fps = 30;\n\n\t\tconst numTracks = referenceClip.tracks.length;\n\t\tconst referenceTime = referenceFrame / fps;\n\n\t\t// Make each track's values relative to the values at the reference frame\n\t\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t\t// Skip this track if it's non-numeric\n\t\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t\t} );\n\n\t\t\tif ( targetTrack === undefined ) continue;\n\n\t\t\tlet referenceOffset = 0;\n\t\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t\t}\n\n\t\t\tlet targetOffset = 0;\n\t\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t\t}\n\n\t\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\t\tlet referenceValue;\n\n\t\t\t// Find the value to subtract out of the track\n\t\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else {\n\n\t\t\t\t// Interpolate to the reference value\n\t\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex );\n\n\t\t\t}\n\n\t\t\t// Conjugate the quaternion\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t\t}\n\n\t\t\t// Subtract the reference value from all of the track values\n\n\t\t\tconst numTimes = targetTrack.times.length;\n\t\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart,\n\t\t\t\t\t\treferenceValue,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\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\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\t\treturn targetClip;\n\n\t}\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 */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\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\tlet 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 ( let 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\tconst 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 ( let 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\tconst 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\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst 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 ( let 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_( /* 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_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n// ALIAS DEFINITIONS\n\nInterpolant.prototype.beforeStart_ = Interpolant.prototype.copySampleValue_;\nInterpolant.prototype.afterEnd_ = Interpolant.prototype.copySampleValue_;\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\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = 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\tconst 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_( i1, t0, t, t1 ) {\n\n\t\tconst 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\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let 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\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst 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 ( let 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\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\t\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\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\tconst 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\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet 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\tconst 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 this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\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() {\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( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let 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( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let 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( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 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 ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst 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() {\n\n\t\tlet valid = true;\n\n\t\tconst 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\tconst 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\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst 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 ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst 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() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = AnimationUtils.arraySlice( this.times ),\n\t\t\tvalues = AnimationUtils.arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst 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 !== times[ 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\tconst 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 ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst 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\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let 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 ( let 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} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = AnimationUtils.arraySlice( this.times, 0 );\n\t\tconst values = AnimationUtils.arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let 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 * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\nQuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let 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\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet 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\tconst 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 this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let 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\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst 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\tconst 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 ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\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\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.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\tstatic parseAnimation( 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\tconst 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\tconst times = [];\n\t\t\t\tconst 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\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst 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\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let 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 ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst 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\tconst 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\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst 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\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let 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\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let 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\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst 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\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nconst loading = {};\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( 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\tconst scope = this;\n\n\t\tconst 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\tconst dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tconst dataUriRegexResult = url.match( dataUriRegex );\n\t\tlet request;\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tconst mimeType = dataUriRegexResult[ 1 ];\n\t\t\tconst isBase64 = !! dataUriRegexResult[ 2 ];\n\n\t\t\tlet data = dataUriRegexResult[ 3 ];\n\t\t\tdata = decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tlet response;\n\t\t\t\tconst 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\tconst view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( let 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\tconst 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\tsetTimeout( 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\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( 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\trequest = 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\tconst response = this.response;\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 || 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\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\t\tCache.add( url, response );\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst 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 ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst 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.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( 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\tconst callbacks = loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst 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\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst 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.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'abort', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst 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.itemError( url );\n\t\t\t\tscope.manager.itemEnd( 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 ( const 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\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass CompressedTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( 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 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\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\tfor ( let 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\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let 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\ttexture.image = images;\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}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst 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\tconst image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\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}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, 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}\n\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet 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 ( let 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}\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass DataTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\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 = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.encoding !== undefined ) {\n\n\t\t\t\ttexture.encoding = texData.encoding;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\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\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture$1();\n\n\t\tconst 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\tconst isJPEG = url.search( /\\.jpe?g($|\\?)/i ) > 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}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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( meta ) {\n\n\t\tconst data = super.toJSON( 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\nLight.prototype.isLight = true;\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( 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() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\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\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst 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\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpotLightShadow.prototype.isSpotLightShadow = true;\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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\nSpotLight.prototype.isSpotLight = true;\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nPointLightShadow.prototype.isPointLightShadow = true;\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( 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\nPointLight.prototype.isPointLight = true;\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( 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( 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() {\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() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( 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\nOrthographicCamera.prototype.isOrthographicCamera = true;\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t}\n\n}\n\nDirectionalLightShadow.prototype.isDirectionalLightShadow = true;\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nDirectionalLight.prototype.isDirectionalLight = true;\n\nclass LoaderUtils {\n\n\tstatic decodeText( 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\tlet s = '';\n\n\t\tfor ( let 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\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst 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\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( 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\tconst scope = this;\n\n\t\tconst 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\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\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.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\nImageBitmapLoader.prototype.isImageBitmapLoader = true;\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( 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\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let 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\tconst 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// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let 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() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let 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( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst 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\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst 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( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, 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() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( 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\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( ! matches ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === '' || 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\tconst 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\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst 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\tconst 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\tconst 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\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_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() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = 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\tlet 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 ( let 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\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst 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\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet 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\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this );\n\t\t\t\t\treturn;\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() {\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\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( 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( 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() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst 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( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst 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( 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() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( 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( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\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\tconst 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() {\n\n\t\tconst 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() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( 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\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst 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\tconst 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\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst 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( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst 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( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\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 {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\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.time = time;\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\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\tconst 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\tconst 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.time = time;\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\tconst 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.time = time;\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} else {\n\n\t\t\t\tthis.time = time;\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\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = 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( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = 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\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst 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\n\t\tlet bindingsByName = 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 ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = 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\tconst 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( 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\tconst 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\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst 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( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst 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() {\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// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - 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\tconst 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( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = 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\tconst 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( action ) {\n\n\t\tconst 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\tconst 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\tconst 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( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst 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( 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\tconst 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( 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\tconst 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( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\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( binding ) {\n\n\t\tconst 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\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst 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( binding ) {\n\n\t\tconst 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() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = 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( interpolant ) {\n\n\t\tconst 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// 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( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\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\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\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( clip, optionalRoot ) {\n\n\t\tconst 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() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\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( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst 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 ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst 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\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let 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// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst 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\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst 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( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst 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\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst 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( clip, optionalRoot ) {\n\n\t\tconst 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\nAnimationMixer.prototype._controlInterpolantsResultBuffer = new Float32Array( 1 );\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( 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( 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\t\t\tthis.camera = camera;\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\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tintersectObject( object, recursive = false, intersects = [] ) {\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( objects, recursive = false, intersects = [] ) {\n\n\t\tfor ( let 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\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t}\n\n\tif ( recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let 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\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n * The azimuthal angle (theta) is measured from the positive z-axis.\n */\n\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( 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\tcopy( 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() {\n\n\t\tconst 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( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\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( x, z );\n\t\t\tthis.phi = Math.acos( clamp$1( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkeletonHelper';\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.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\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let 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\nconst _floatView = new Float32Array( 1 );\nconst _int32View = new Int32Array( _floatView.buffer );\n\nclass DataUtils {\n\n\t// Converts float32 to float16 (stored as uint16 value).\n\n\tstatic toHalfFloat( val ) {\n\n\t\t// Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410\n\n\t\t/* This method is faster than the OpenEXR implementation (very often\n\t\t* used, eg. in Ogre), with the additional benefit of rounding, inspired\n\t\t* by James Tursa?s half-precision code. */\n\n\t\t_floatView[ 0 ] = val;\n\t\tconst x = _int32View[ 0 ];\n\n\t\tlet bits = ( x >> 16 ) & 0x8000; /* Get the sign */\n\t\tlet m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */\n\t\tconst e = ( x >> 23 ) & 0xff; /* Using int is faster here */\n\n\t\t/* If zero, or denormal, or exponent underflows too much for a denormal\n\t\t\t* half, return signed zero. */\n\t\tif ( e < 103 ) return bits;\n\n\t\t/* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n\t\tif ( e > 142 ) {\n\n\t\t\tbits |= 0x7c00;\n\t\t\t/* If exponent was 0xff and one mantissa bit was set, it means NaN,\n\t\t\t\t\t\t* not Inf, so make sure we set one mantissa bit too. */\n\t\t\tbits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\t/* If exponent underflows but not too much, return a denormal */\n\t\tif ( e < 113 ) {\n\n\t\t\tm |= 0x0800;\n\t\t\t/* Extra rounding may overflow and set mantissa to 0 and exponent\n\t\t\t\t* to 1, which is OK. */\n\t\t\tbits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\tbits |= ( ( e - 112 ) << 10 ) | ( m >> 1 );\n\t\t/* Extra rounding. An overflow will set mantissa to 0 and increment\n\t\t\t* the exponent, which is OK. */\n\t\tbits += m & 1;\n\t\treturn bits;\n\n\t}\n\n}\n\nconst LOD_MIN = 4;\nconst LOD_MAX = 8;\nconst SIZE_MAX = Math.pow( 2, LOD_MAX );\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\nconst TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst ENCODINGS = {\n\t[ LinearEncoding ]: 0,\n\t[ sRGBEncoding ]: 1,\n\t[ RGBEEncoding ]: 2,\n\t[ RGBM7Encoding ]: 3,\n\t[ RGBM16Encoding ]: 4,\n\t[ RGBDEncoding ]: 5,\n\t[ GammaEncoding ]: 6\n};\n\nconst backgroundMaterial = new MeshBasicMaterial( {\n\tside: BackSide,\n\tdepthWrite: false,\n\tdepthTest: false,\n} );\nconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\nconst _flatCamera$1 = /*@__PURE__*/ new OrthographicCamera();\nconst { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nfunction convertLinearToRGBE( color ) {\n\n\tconst maxComponent = Math.max( color.r, color.g, color.b );\n\tconst fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 );\n\tcolor.multiplyScalar( Math.pow( 2.0, - fExp ) );\n\n\tconst alpha = ( fExp + 128.0 ) / 255.0;\n\treturn alpha;\n\n}\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._blurMaterial = _getBlurShader( MAX_SAMPLES );\n\t\tthis._equirectShader = null;\n\t\tthis._cubemapShader = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular( equirectangular ) {\n\n\t\treturn this._fromTexture( equirectangular );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap( cubemap ) {\n\n\t\treturn this._fromTexture( cubemap );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapShader === null ) {\n\n\t\t\tthis._cubemapShader = _getCubemapShader();\n\t\t\tthis._compileMaterial( this._cubemapShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectShader === null ) {\n\n\t\t\tthis._equirectShader = _getEquirectShader();\n\t\t\tthis._compileMaterial( this._equirectShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._blurMaterial.dispose();\n\n\t\tif ( this._cubemapShader !== null ) this._cubemapShader.dispose();\n\t\tif ( this._equirectShader !== null ) this._equirectShader.dispose();\n\n\t\tfor ( let i = 0; i < _lodPlanes.length; i ++ ) {\n\n\t\t\t_lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t// private interface\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._pingPongRenderTarget.dispose();\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets( texture );\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets( texture ) { // warning: null texture is valid\n\n\t\tconst params = {\n\t\t\tmagFilter: NearestFilter,\n\t\t\tminFilter: NearestFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: UnsignedByteType,\n\t\t\tformat: RGBEFormat,\n\t\t\tencoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( params );\n\t\tcubeUVRenderTarget.depthBuffer = texture ? false : true;\n\t\tthis._pingPongRenderTarget = _createRenderTarget( params );\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( _lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera$1 );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst outputEncoding = renderer.outputEncoding;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.outputEncoding = LinearEncoding;\n\t\trenderer.autoClear = false;\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background ).convertSRGBToLinear();\n\t\t\t\tscene.background = null;\n\n\t\t\t\tconst alpha = convertLinearToRGBE( backgroundMaterial.color );\n\t\t\t\tbackgroundMaterial.opacity = alpha;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor ).convertSRGBToLinear();\n\n\t\t\tconst alpha = convertLinearToRGBE( backgroundMaterial.color );\n\t\t\tbackgroundMaterial.opacity = alpha;\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\t\t\tif ( col == 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col == 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\t_setViewport( cubeUVRenderTarget,\n\t\t\t\tcol * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX );\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.outputEncoding = outputEncoding;\n\t\trenderer.autoClear = originalAutoClear;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\tif ( this._cubemapShader == null ) {\n\n\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this._equirectShader == null ) {\n\n\t\t\t\tthis._equirectShader = _getEquirectShader();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader;\n\t\tconst mesh = new Mesh( _lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tif ( ! texture.isCubeTexture ) {\n\n\t\t\tuniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height );\n\n\t\t}\n\n\t\tuniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ];\n\t\tuniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ];\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera$1 );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < TOTAL_LODS; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = _sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i == 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn;\n\t\tblurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\t\tblurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\n\t\tconst outputSize = _sizeLods[ lodOut ];\n\t\tconst x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize );\n\t\tconst y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera$1 );\n\n\t}\n\n}\n\nfunction _isLDR( texture ) {\n\n\tif ( texture === undefined || texture.type !== UnsignedByteType ) return false;\n\n\treturn texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding;\n\n}\n\nfunction _createPlanes() {\n\n\tconst _lodPlanes = [];\n\tconst _sizeLods = [];\n\tconst _sigmas = [];\n\n\tlet lod = LOD_MAX;\n\n\tfor ( let i = 0; i < TOTAL_LODS; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\t_sizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > LOD_MAX - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ];\n\n\t\t} else if ( i == 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\t_sigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 1 );\n\t\tconst min = - texelSize / 2;\n\t\tconst max = 1 + texelSize / 2;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\t_lodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { _lodPlanes, _sizeLods, _sigmas };\n\n}\n\nfunction _createRenderTarget( params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( maxSamples ) {\n\n\tconst weights = new Float32Array( maxSamples );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: { 'n': maxSamples },\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectShader() {\n\n\tconst texelSize = new Vector2( 1, 1 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'texelSize': { value: texelSize },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCubemapShader() {\n\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction _getEncodings() {\n\n\treturn /* glsl */`\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t`;\n\n}\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\n//\n\nLoader.prototype.extractUrlBase = function ( url ) {\n\n\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\treturn LoaderUtils.extractUrlBase( url );\n\n};\n\nLoader.Handlers = {\n\n\tadd: function ( /* regex, loader */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' );\n\n\t},\n\n\tget: function ( /* file */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' );\n\n\t}\n\n};\n\n//\n\nBox3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nBox3.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\nBox3.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nBox3.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\nBox3.prototype.size = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\treturn this.getSize( optionalTarget );\n\n};\n\n//\n\nSphere.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\n//\n\nFrustum.prototype.setFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' );\n\treturn this.setFromProjectionMatrix( m );\n\n};\n\n//\n\nMatrix3.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\nMatrix3.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\treturn vector.applyMatrix3( this );\n\n};\n\nMatrix3.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n};\n\nMatrix3.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' );\n\treturn attribute.applyMatrix3( this );\n\n};\n\nMatrix3.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n};\n\nMatrix3.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\n\n//\n\nMatrix4.prototype.extractPosition = function ( m ) {\n\n\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\treturn this.copyPosition( m );\n\n};\n\nMatrix4.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\nMatrix4.prototype.getPosition = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\treturn new Vector3().setFromMatrixColumn( this, 3 );\n\n};\n\nMatrix4.prototype.setRotationFromQuaternion = function ( q ) {\n\n\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\treturn this.makeRotationFromQuaternion( q );\n\n};\n\nMatrix4.prototype.multiplyToArray = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n};\n\nMatrix4.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.multiplyVector4 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateAxis = function ( v ) {\n\n\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\tv.transformDirection( this );\n\n};\n\nMatrix4.prototype.crossVector = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.translate = function () {\n\n\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateX = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateY = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateZ = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateByAxis = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n};\n\nMatrix4.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' );\n\treturn attribute.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n};\n\nMatrix4.prototype.makeFrustum = function ( left, right, bottom, top, near, far ) {\n\n\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n};\n\nMatrix4.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\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\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\nQuaternion.prototype.inverse = function ( ) {\n\n\tconsole.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' );\n\treturn this.invert();\n\n};\n\n//\n\nRay.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nRay.prototype.isIntersectionPlane = function ( plane ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\treturn this.intersectsPlane( plane );\n\n};\n\nRay.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\n//\n\nTriangle.prototype.area = function () {\n\n\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\treturn this.getArea();\n\n};\n\nTriangle.prototype.barycoordFromPoint = function ( point, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn this.getBarycoord( point, target );\n\n};\n\nTriangle.prototype.midpoint = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\treturn this.getMidpoint( target );\n\n};\n\nTriangle.prototypenormal = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn this.getNormal( target );\n\n};\n\nTriangle.prototype.plane = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\treturn this.getPlane( target );\n\n};\n\nTriangle.barycoordFromPoint = function ( point, a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n};\n\nTriangle.normal = function ( a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn Triangle.getNormal( a, b, c, target );\n\n};\n\n//\n\nVector2.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector2.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\nVector2.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nVector3.prototype.setEulerFromRotationMatrix = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n};\n\nVector3.prototype.setEulerFromQuaternion = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n};\n\nVector3.prototype.getPositionFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\treturn this.setFromMatrixPosition( m );\n\n};\n\nVector3.prototype.getScaleFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\treturn this.setFromMatrixScale( m );\n\n};\n\nVector3.prototype.getColumnFromMatrix = function ( index, matrix ) {\n\n\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\treturn this.setFromMatrixColumn( matrix, index );\n\n};\n\nVector3.prototype.applyProjection = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\treturn this.applyMatrix4( m );\n\n};\n\nVector3.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector3.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\nVector3.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nVector4.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector4.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nObject3D.prototype.getChildByName = function ( name ) {\n\n\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\treturn this.getObjectByName( name );\n\n};\n\nObject3D.prototype.renderDepth = function () {\n\n\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n};\n\nObject3D.prototype.translate = function ( distance, axis ) {\n\n\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\treturn this.translateOnAxis( axis, distance );\n\n};\n\nObject3D.prototype.getWorldRotation = function () {\n\n\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n};\n\nObject3D.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\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\nMesh.prototype.setDrawMode = function () {\n\n\tconsole.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n};\n\nObject.defineProperties( Mesh.prototype, {\n\n\tdrawMode: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' );\n\t\t\treturn TrianglesDrawMode;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t\t}\n\t}\n\n} );\n\nSkinnedMesh.prototype.initBones = function () {\n\n\tconsole.error( 'THREE.SkinnedMesh: initBones() has been removed.' );\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\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( DynamicDrawUsage );\n\n\t\t}\n\t}\n\n} );\n\nBufferAttribute.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\treturn this;\n\n};\n\nBufferAttribute.prototype.copyIndicesArray = function ( /* indices */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n},\n\nBufferAttribute.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\nBufferGeometry.prototype.addIndex = function ( index ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\tthis.setIndex( index );\n\n};\n\nBufferGeometry.prototype.addAttribute = function ( name, attribute ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' );\n\n\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\treturn this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t}\n\n\tif ( name === 'index' ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\tthis.setIndex( attribute );\n\n\t\treturn this;\n\n\t}\n\n\treturn this.setAttribute( name, attribute );\n\n};\n\nBufferGeometry.prototype.addDrawCall = function ( start, count, indexOffset ) {\n\n\tif ( indexOffset !== undefined ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t}\n\n\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\tthis.addGroup( start, count );\n\n};\n\nBufferGeometry.prototype.clearDrawCalls = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\tthis.clearGroups();\n\n};\n\nBufferGeometry.prototype.computeOffsets = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n};\n\nBufferGeometry.prototype.removeAttribute = function ( name ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' );\n\n\treturn this.deleteAttribute( name );\n\n};\n\nBufferGeometry.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\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\nInterleavedBuffer.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\treturn this;\n\n};\n\nInterleavedBuffer.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\nScene.prototype.dispose = function () {\n\n\tconsole.error( 'THREE.Scene: .dispose() has been removed.' );\n\n};\n\n//\n\nObject.defineProperties( Material$1.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\n\toverdraw: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t}\n\t},\n\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\tstencilMask: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\treturn this.stencilFuncMask;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\tthis.stencilFuncMask = value;\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\nWebGLRenderer.prototype.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\tthis.setRenderTarget( renderTarget );\n\tthis.clear( color, depth, stencil );\n\n};\n\nWebGLRenderer.prototype.animate = function ( callback ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\tthis.setAnimationLoop( callback );\n\n};\n\nWebGLRenderer.prototype.getCurrentRenderTarget = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\treturn this.getRenderTarget();\n\n};\n\nWebGLRenderer.prototype.getMaxAnisotropy = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\treturn this.capabilities.getMaxAnisotropy();\n\n};\n\nWebGLRenderer.prototype.getPrecision = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\treturn this.capabilities.precision;\n\n};\n\nWebGLRenderer.prototype.resetGLState = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\treturn this.state.reset();\n\n};\n\nWebGLRenderer.prototype.supportsFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_float' );\n\n};\n\nWebGLRenderer.prototype.supportsHalfFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_half_float' );\n\n};\n\nWebGLRenderer.prototype.supportsStandardDerivatives = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n};\n\nWebGLRenderer.prototype.supportsCompressedTextureS3TC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n};\n\nWebGLRenderer.prototype.supportsCompressedTexturePVRTC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n};\n\nWebGLRenderer.prototype.supportsBlendMinMax = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n};\n\nWebGLRenderer.prototype.supportsVertexTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\treturn this.capabilities.vertexTextures;\n\n};\n\nWebGLRenderer.prototype.supportsInstancedArrays = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n};\n\nWebGLRenderer.prototype.enableScissorTest = function ( boolean ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\tthis.setScissorTest( boolean );\n\n};\n\nWebGLRenderer.prototype.initMaterial = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.addPrePlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.addPostPlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.updateShadowMap = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setFaceCulling = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.allocTextureUnit = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTexture = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTexture2D = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTextureCube = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.getActiveMipMapLevel = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' );\n\treturn this.getActiveMipmapLevel();\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\tcontext: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );\n\t\t\treturn this.getContext();\n\n\t\t}\n\t},\n\tvr: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' );\n\t\t\treturn this.xr;\n\n\t\t}\n\t},\n\tgammaInput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\n\t\t}\n\t},\n\tgammaOutput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\tthis.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding;\n\n\t\t}\n\t},\n\ttoneMappingWhitePoint: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\t\t\treturn 1.0;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\n\t\t}\n\t},\n\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\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\nCubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' );\n\treturn this.renderTarget.clear( renderer, color, depth, stencil );\n\n};\n\nImageUtils.crossOrigin = undefined;\n\nImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\tconst loader = new TextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( url, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\tconst loader = new CubeTextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( urls, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadCompressedTexture = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\nImageUtils.loadCompressedTextureCube = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t/* eslint-disable no-undef */\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\t/* eslint-enable no-undef */\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nconst _taskCache$1 = new WeakMap();\n\nclass DRACOLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.decoderPath = '';\n\t\tthis.decoderConfig = {};\n\t\tthis.decoderBinary = null;\n\t\tthis.decoderPending = null;\n\n\t\tthis.workerLimit = 4;\n\t\tthis.workerPool = [];\n\t\tthis.workerNextTaskID = 1;\n\t\tthis.workerSourceURL = '';\n\n\t\tthis.defaultAttributeIDs = {\n\t\t\tposition: 'POSITION',\n\t\t\tnormal: 'NORMAL',\n\t\t\tcolor: 'COLOR',\n\t\t\tuv: 'TEX_COORD'\n\t\t};\n\t\tthis.defaultAttributeTypes = {\n\t\t\tposition: 'Float32Array',\n\t\t\tnormal: 'Float32Array',\n\t\t\tcolor: 'Float32Array',\n\t\t\tuv: 'Float32Array'\n\t\t};\n\n\t}\n\n\tsetDecoderPath( path ) {\n\n\t\tthis.decoderPath = path;\n\n\t\treturn this;\n\n\t}\n\n\tsetDecoderConfig( config ) {\n\n\t\tthis.decoderConfig = config;\n\n\t\treturn this;\n\n\t}\n\n\tsetWorkerLimit( workerLimit ) {\n\n\t\tthis.workerLimit = workerLimit;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\tconst taskConfig = {\n\t\t\t\tattributeIDs: this.defaultAttributeIDs,\n\t\t\t\tattributeTypes: this.defaultAttributeTypes,\n\t\t\t\tuseUniqueIDs: false\n\t\t\t};\n\n\t\t\tthis.decodeGeometry( buffer, taskConfig )\n\t\t\t\t.then( onLoad )\n\t\t\t\t.catch( onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/** @deprecated Kept for backward-compatibility with previous DRACOLoader versions. */\n\tdecodeDracoFile( buffer, callback, attributeIDs, attributeTypes ) {\n\n\t\tconst taskConfig = {\n\t\t\tattributeIDs: attributeIDs || this.defaultAttributeIDs,\n\t\t\tattributeTypes: attributeTypes || this.defaultAttributeTypes,\n\t\t\tuseUniqueIDs: !! attributeIDs\n\t\t};\n\n\t\tthis.decodeGeometry( buffer, taskConfig ).then( callback );\n\n\t}\n\n\tdecodeGeometry( buffer, taskConfig ) {\n\n\t\t// TODO: For backward-compatibility, support 'attributeTypes' objects containing\n\t\t// references (rather than names) to typed array constructors. These must be\n\t\t// serialized before sending them to the worker.\n\t\tfor ( const attribute in taskConfig.attributeTypes ) {\n\n\t\t\tconst type = taskConfig.attributeTypes[ attribute ];\n\n\t\t\tif ( type.BYTES_PER_ELEMENT !== undefined ) {\n\n\t\t\t\ttaskConfig.attributeTypes[ attribute ] = type.name;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst taskKey = JSON.stringify( taskConfig );\n\n\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t// again from this thread.\n\t\tif ( _taskCache$1.has( buffer ) ) {\n\n\t\t\tconst cachedTask = _taskCache$1.get( buffer );\n\n\t\t\tif ( cachedTask.key === taskKey ) {\n\n\t\t\t\treturn cachedTask.promise;\n\n\t\t\t} else if ( buffer.byteLength === 0 ) {\n\n\t\t\t\t// Technically, it would be possible to wait for the previous task to complete,\n\t\t\t\t// transfer the buffer back, and decode again with the second configuration. That\n\t\t\t\t// is complex, and I don't know of any reason to decode a Draco buffer twice in\n\t\t\t\t// different ways, so this is left unimplemented.\n\t\t\t\tthrow new Error(\n\n\t\t\t\t\t'THREE.DRACOLoader: Unable to re-decode a buffer with different ' +\n\t\t\t\t\t'settings. Buffer has already been transferred.'\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet worker;\n\t\tconst taskID = this.workerNextTaskID ++;\n\t\tconst taskCost = buffer.byteLength;\n\n\t\t// Obtain a worker and assign a task, and construct a geometry instance\n\t\t// when the task completes.\n\t\tconst geometryPending = this._getWorker( taskID, taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'decode', id: taskID, taskConfig, buffer }, [ buffer ] );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => this._createGeometry( message.geometry ) );\n\n\t\t// Remove task from the task list.\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\tgeometryPending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tthis._releaseTask( worker, taskID );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\t_taskCache$1.set( buffer, {\n\n\t\t\tkey: taskKey,\n\t\t\tpromise: geometryPending\n\n\t\t} );\n\n\t\treturn geometryPending;\n\n\t}\n\n\t_createGeometry( geometryData ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( geometryData.index ) {\n\n\t\t\tgeometry.setIndex( new BufferAttribute( geometryData.index.array, 1 ) );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < geometryData.attributes.length; i ++ ) {\n\n\t\t\tconst attribute = geometryData.attributes[ i ];\n\t\t\tconst name = attribute.name;\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tgeometry.setAttribute( name, new BufferAttribute( array, itemSize ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n\t_loadLibrary( url, responseType ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.decoderPath );\n\t\tloader.setResponseType( responseType );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tloader.load( url, resolve, undefined, reject );\n\n\t\t} );\n\n\t}\n\n\tpreload() {\n\n\t\tthis._initDecoder();\n\n\t\treturn this;\n\n\t}\n\n\t_initDecoder() {\n\n\t\tif ( this.decoderPending ) return this.decoderPending;\n\n\t\tconst useJS = typeof WebAssembly !== 'object' || this.decoderConfig.type === 'js';\n\t\tconst librariesPending = [];\n\n\t\tif ( useJS ) {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.js', 'text' ) );\n\n\t\t} else {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_wasm_wrapper.js', 'text' ) );\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.wasm', 'arraybuffer' ) );\n\n\t\t}\n\n\t\tthis.decoderPending = Promise.all( librariesPending )\n\t\t\t.then( ( libraries ) => {\n\n\t\t\t\tconst jsContent = libraries[ 0 ];\n\n\t\t\t\tif ( ! useJS ) {\n\n\t\t\t\t\tthis.decoderConfig.wasmBinary = libraries[ 1 ];\n\n\t\t\t\t}\n\n\t\t\t\tconst fn = DRACOWorker.toString();\n\n\t\t\t\tconst body = [\n\t\t\t\t\t'/* draco decoder */',\n\t\t\t\t\tjsContent,\n\t\t\t\t\t'',\n\t\t\t\t\t'/* worker */',\n\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\n\t\t\t} );\n\n\t\treturn this.decoderPending;\n\n\t}\n\n\t_getWorker( taskID, taskCost ) {\n\n\t\treturn this._initDecoder().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tconst worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskCosts = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( { type: 'init', decoderConfig: this.decoderConfig } );\n\n\t\t\t\tworker.onmessage = function ( e ) {\n\n\t\t\t\t\tconst message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'decode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.DRACOLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst worker = this.workerPool[ this.workerPool.length - 1 ];\n\t\t\tworker._taskCosts[ taskID ] = taskCost;\n\t\t\tworker._taskLoad += taskCost;\n\t\t\treturn worker;\n\n\t\t} );\n\n\t}\n\n\t_releaseTask( worker, taskID ) {\n\n\t\tworker._taskLoad -= worker._taskCosts[ taskID ];\n\t\tdelete worker._callbacks[ taskID ];\n\t\tdelete worker._taskCosts[ taskID ];\n\n\t}\n\n\tdebug() {\n\n\t\tconsole.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) );\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.workerPool.length; ++ i ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/* WEB WORKER */\n\nfunction DRACOWorker() {\n\n\tlet decoderConfig;\n\tlet decoderPending;\n\n\tonmessage = function ( e ) {\n\n\t\tconst message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\t\t\t\tdecoderConfig = message.decoderConfig;\n\t\t\t\tdecoderPending = new Promise( function ( resolve/*, reject*/ ) {\n\n\t\t\t\t\tdecoderConfig.onModuleLoaded = function ( draco ) {\n\n\t\t\t\t\t\t// Module is Promise-like. Wrap before resolving to avoid loop.\n\t\t\t\t\t\tresolve( { draco: draco } );\n\n\t\t\t\t\t};\n\n\t\t\t\t\tDracoDecoderModule( decoderConfig ); // eslint-disable-line no-undef\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t\tcase 'decode':\n\t\t\t\tconst buffer = message.buffer;\n\t\t\t\tconst taskConfig = message.taskConfig;\n\t\t\t\tdecoderPending.then( ( module ) => {\n\n\t\t\t\t\tconst draco = module.draco;\n\t\t\t\t\tconst decoder = new draco.Decoder();\n\t\t\t\t\tconst decoderBuffer = new draco.DecoderBuffer();\n\t\t\t\t\tdecoderBuffer.Init( new Int8Array( buffer ), buffer.byteLength );\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tconst geometry = decodeGeometry( draco, decoder, decoderBuffer, taskConfig );\n\n\t\t\t\t\t\tconst buffers = geometry.attributes.map( ( attr ) => attr.array.buffer );\n\n\t\t\t\t\t\tif ( geometry.index ) buffers.push( geometry.index.array.buffer );\n\n\t\t\t\t\t\tself.postMessage( { type: 'decode', id: message.id, geometry }, buffers );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error: error.message } );\n\n\t\t\t\t\t} finally {\n\n\t\t\t\t\t\tdraco.destroy( decoderBuffer );\n\t\t\t\t\t\tdraco.destroy( decoder );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction decodeGeometry( draco, decoder, decoderBuffer, taskConfig ) {\n\n\t\tconst attributeIDs = taskConfig.attributeIDs;\n\t\tconst attributeTypes = taskConfig.attributeTypes;\n\n\t\tlet dracoGeometry;\n\t\tlet decodingStatus;\n\n\t\tconst geometryType = decoder.GetEncodedGeometryType( decoderBuffer );\n\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tdracoGeometry = new draco.Mesh();\n\t\t\tdecodingStatus = decoder.DecodeBufferToMesh( decoderBuffer, dracoGeometry );\n\n\t\t} else if ( geometryType === draco.POINT_CLOUD ) {\n\n\t\t\tdracoGeometry = new draco.PointCloud();\n\t\t\tdecodingStatus = decoder.DecodeBufferToPointCloud( decoderBuffer, dracoGeometry );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Unexpected geometry type.' );\n\n\t\t}\n\n\t\tif ( ! decodingStatus.ok() || dracoGeometry.ptr === 0 ) {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Decoding failed: ' + decodingStatus.error_msg() );\n\n\t\t}\n\n\t\tconst geometry = { index: null, attributes: [] };\n\n\t\t// Gather all vertex attributes.\n\t\tfor ( const attributeName in attributeIDs ) {\n\n\t\t\tconst attributeType = self[ attributeTypes[ attributeName ] ];\n\n\t\t\tlet attribute;\n\t\t\tlet attributeID;\n\n\t\t\t// A Draco file may be created with default vertex attributes, whose attribute IDs\n\t\t\t// are mapped 1:1 from their semantic name (POSITION, NORMAL, ...). Alternatively,\n\t\t\t// a Draco file may contain a custom set of attributes, identified by known unique\n\t\t\t// IDs. glTF files always do the latter, and `.drc` files typically do the former.\n\t\t\tif ( taskConfig.useUniqueIDs ) {\n\n\t\t\t\tattributeID = attributeIDs[ attributeName ];\n\t\t\t\tattribute = decoder.GetAttributeByUniqueId( dracoGeometry, attributeID );\n\n\t\t\t} else {\n\n\t\t\t\tattributeID = decoder.GetAttributeId( dracoGeometry, draco[ attributeIDs[ attributeName ] ] );\n\n\t\t\t\tif ( attributeID === - 1 ) continue;\n\n\t\t\t\tattribute = decoder.GetAttribute( dracoGeometry, attributeID );\n\n\t\t\t}\n\n\t\t\tgeometry.attributes.push( decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute ) );\n\n\t\t}\n\n\t\t// Add index.\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tgeometry.index = decodeIndex( draco, decoder, dracoGeometry );\n\n\t\t}\n\n\t\tdraco.destroy( dracoGeometry );\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction decodeIndex( draco, decoder, dracoGeometry ) {\n\n\t\tconst numFaces = dracoGeometry.num_faces();\n\t\tconst numIndices = numFaces * 3;\n\t\tconst byteLength = numIndices * 4;\n\n\t\tconst ptr = draco._malloc( byteLength );\n\t\tdecoder.GetTrianglesUInt32Array( dracoGeometry, byteLength, ptr );\n\t\tconst index = new Uint32Array( draco.HEAPF32.buffer, ptr, numIndices ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn { array: index, itemSize: 1 };\n\n\t}\n\n\tfunction decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute ) {\n\n\t\tconst numComponents = attribute.num_components();\n\t\tconst numPoints = dracoGeometry.num_points();\n\t\tconst numValues = numPoints * numComponents;\n\t\tconst byteLength = numValues * attributeType.BYTES_PER_ELEMENT;\n\t\tconst dataType = getDracoDataType( draco, attributeType );\n\n\t\tconst ptr = draco._malloc( byteLength );\n\t\tdecoder.GetAttributeDataArrayForAllPoints( dracoGeometry, attribute, dataType, byteLength, ptr );\n\t\tconst array = new attributeType( draco.HEAPF32.buffer, ptr, numValues ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn {\n\t\t\tname: attributeName,\n\t\t\tarray: array,\n\t\t\titemSize: numComponents\n\t\t};\n\n\t}\n\n\tfunction getDracoDataType( draco, attributeType ) {\n\n\t\tswitch ( attributeType ) {\n\n\t\t\tcase Float32Array: return draco.DT_FLOAT32;\n\t\t\tcase Int8Array: return draco.DT_INT8;\n\t\t\tcase Int16Array: return draco.DT_INT16;\n\t\t\tcase Int32Array: return draco.DT_INT32;\n\t\t\tcase Uint8Array: return draco.DT_UINT8;\n\t\t\tcase Uint16Array: return draco.DT_UINT16;\n\t\t\tcase Uint32Array: return draco.DT_UINT32;\n\n\t\t}\n\n\t}\n\n}\n\nclass GLTFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\tresourcePath = this.path;\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\tsetDDSLoader() {\n\n\t\tthrow new Error(\n\n\t\t\t'THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".'\n\n\t\t);\n\n\t}\n\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet content;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tcontent = data;\n\n\t\t} else {\n\n\t\t\tconst magic = LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tcontent = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content;\n\n\t\t\t} else {\n\n\t\t\t\tcontent = LoaderUtils.decodeText( new Uint8Array( data ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst json = JSON.parse( content );\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension$1();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression'\n};\n\n/**\n\t * Punctual Lights Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n\t */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.fromArray( lightDef.color );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n\t * Unlit Materials Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n\t */\nclass GLTFMaterialsUnlitExtension$1 {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n\t * Clearcoat Materials Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n\t */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, - scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n\t * Transmission Materials Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n\t * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n\t */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n\t * BasisU Texture Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n\t */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst source = json.images[ extension.source ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, source, loader );\n\n\t}\n\n}\n\n/**\n\t * WebP Texture Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n\t */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n\t* meshopt BufferView Compression Extension\n\t*\n\t* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n\t*/\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn Promise.all( [ buffer, decoder.ready ] ).then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\tconst source = new Uint8Array( res[ 0 ], byteOffset, byteLength );\n\n\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\treturn result;\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\n\t\tthis.header = {\n\t\t\tmagic: LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = LoaderUtils.decodeText( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n\t * DRACO Mesh Compression Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n\t */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n\t * Texture Transform Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n\t */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV sets in \"' + this.name + '\" extension not yet supported.' );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n\t * Specular-Glossiness Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n\t */\n\n/**\n\t * A sub class of StandardMaterial with some of the functionality\n\t * changed via the `onBeforeCompile` callback\n\t * @pailhead\n\t */\n\nclass GLTFMeshStandardSGMaterial extends MeshStandardMaterial {\n\n\tconstructor( params ) {\n\n\t\tsuper();\n\n\t\tthis.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t//various chunks that need replacing\n\t\tconst specularMapParsFragmentChunk = [\n\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t'\tuniform sampler2D specularMap;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst glossinessMapParsFragmentChunk = [\n\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t'\tuniform sampler2D glossinessMap;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst specularMapFragmentChunk = [\n\t\t\t'vec3 specularFactor = specular;',\n\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t'\tvec4 texelSpecular = texture2D( specularMap, vUv );',\n\t\t\t'\ttexelSpecular = sRGBToLinear( texelSpecular );',\n\t\t\t'\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t'\tspecularFactor *= texelSpecular.rgb;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst glossinessMapFragmentChunk = [\n\t\t\t'float glossinessFactor = glossiness;',\n\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t'\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );',\n\t\t\t'\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t'\tglossinessFactor *= texelGlossiness.a;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tconst lightPhysicalFragmentChunk = [\n\t\t\t'PhysicalMaterial material;',\n\t\t\t'material.diffuseColor = diffuseColor.rgb * ( 1. - max( specularFactor.r, max( specularFactor.g, specularFactor.b ) ) );',\n\t\t\t'vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );',\n\t\t\t'float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );',\n\t\t\t'material.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.',\n\t\t\t'material.specularRoughness += geometryRoughness;',\n\t\t\t'material.specularRoughness = min( material.specularRoughness, 1.0 );',\n\t\t\t'material.specularColor = specularFactor;',\n\t\t].join( '\\n' );\n\n\t\tconst uniforms = {\n\t\t\tspecular: { value: new Color().setHex( 0xffffff ) },\n\t\t\tglossiness: { value: 1 },\n\t\t\tspecularMap: { value: null },\n\t\t\tglossinessMap: { value: null }\n\t\t};\n\n\t\tthis._extraUniforms = uniforms;\n\n\t\tthis.onBeforeCompile = function ( shader ) {\n\n\t\t\tfor ( const uniformName in uniforms ) {\n\n\t\t\t\tshader.uniforms[ uniformName ] = uniforms[ uniformName ];\n\n\t\t\t}\n\n\t\t\tshader.fragmentShader = shader.fragmentShader\n\t\t\t\t.replace( 'uniform float roughness;', 'uniform vec3 specular;' )\n\t\t\t\t.replace( 'uniform float metalness;', 'uniform float glossiness;' )\n\t\t\t\t.replace( '#include ', specularMapParsFragmentChunk )\n\t\t\t\t.replace( '#include ', glossinessMapParsFragmentChunk )\n\t\t\t\t.replace( '#include ', specularMapFragmentChunk )\n\t\t\t\t.replace( '#include ', glossinessMapFragmentChunk )\n\t\t\t\t.replace( '#include ', lightPhysicalFragmentChunk );\n\n\t\t};\n\n\t\tObject.defineProperties( this, {\n\n\t\t\tspecular: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.specular.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.specular.value = v;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tspecularMap: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.specularMap.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.specularMap.value = v;\n\n\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\tthis.defines.USE_SPECULARMAP = ''; // USE_UV is set by the renderer for specular maps\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.USE_SPECULARMAP;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tglossiness: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.glossiness.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.glossiness.value = v;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tglossinessMap: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.glossinessMap.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.glossinessMap.value = v;\n\n\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\tthis.defines.USE_GLOSSINESSMAP = '';\n\t\t\t\t\t\tthis.defines.USE_UV = '';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.USE_GLOSSINESSMAP;\n\t\t\t\t\t\tdelete this.defines.USE_UV;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\t\tdelete this.metalness;\n\t\tdelete this.roughness;\n\t\tdelete this.metalnessMap;\n\t\tdelete this.roughnessMap;\n\n\t\tthis.setValues( params );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.specularMap = source.specularMap;\n\t\tthis.specular.copy( source.specular );\n\t\tthis.glossinessMap = source.glossinessMap;\n\t\tthis.glossiness = source.glossiness;\n\t\tdelete this.metalness;\n\t\tdelete this.roughness;\n\t\tdelete this.metalnessMap;\n\t\tdelete this.roughnessMap;\n\t\treturn this;\n\n\t}\n\n}\n\n\nclass GLTFMaterialsPbrSpecularGlossinessExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n\n\t\tthis.specularGlossinessParams = [\n\t\t\t'color',\n\t\t\t'map',\n\t\t\t'lightMap',\n\t\t\t'lightMapIntensity',\n\t\t\t'aoMap',\n\t\t\t'aoMapIntensity',\n\t\t\t'emissive',\n\t\t\t'emissiveIntensity',\n\t\t\t'emissiveMap',\n\t\t\t'bumpMap',\n\t\t\t'bumpScale',\n\t\t\t'normalMap',\n\t\t\t'normalMapType',\n\t\t\t'displacementMap',\n\t\t\t'displacementScale',\n\t\t\t'displacementBias',\n\t\t\t'specularMap',\n\t\t\t'specular',\n\t\t\t'glossinessMap',\n\t\t\t'glossiness',\n\t\t\t'alphaMap',\n\t\t\t'envMap',\n\t\t\t'envMapIntensity',\n\t\t\t'refractionRatio',\n\t\t];\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn GLTFMeshStandardSGMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pbrSpecularGlossiness = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst pending = [];\n\n\t\tif ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {\n\n\t\t\tconst array = pbrSpecularGlossiness.diffuseFactor;\n\n\t\t\tmaterialParams.color.fromArray( array );\n\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t}\n\n\t\tif ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'map', pbrSpecularGlossiness.diffuseTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.emissive = new Color( 0.0, 0.0, 0.0 );\n\t\tmaterialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;\n\t\tmaterialParams.specular = new Color( 1.0, 1.0, 1.0 );\n\n\t\tif ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {\n\n\t\t\tmaterialParams.specular.fromArray( pbrSpecularGlossiness.specularFactor );\n\n\t\t}\n\n\t\tif ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {\n\n\t\t\tconst specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture;\n\t\t\tpending.push( parser.assignTexture( materialParams, 'glossinessMap', specGlossMapDef ) );\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularMap', specGlossMapDef ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\tcreateMaterial( materialParams ) {\n\n\t\tconst material = new GLTFMeshStandardSGMaterial( materialParams );\n\t\tmaterial.fog = true;\n\n\t\tmaterial.color = materialParams.color;\n\n\t\tmaterial.map = materialParams.map === undefined ? null : materialParams.map;\n\n\t\tmaterial.lightMap = null;\n\t\tmaterial.lightMapIntensity = 1.0;\n\n\t\tmaterial.aoMap = materialParams.aoMap === undefined ? null : materialParams.aoMap;\n\t\tmaterial.aoMapIntensity = 1.0;\n\n\t\tmaterial.emissive = materialParams.emissive;\n\t\tmaterial.emissiveIntensity = 1.0;\n\t\tmaterial.emissiveMap = materialParams.emissiveMap === undefined ? null : materialParams.emissiveMap;\n\n\t\tmaterial.bumpMap = materialParams.bumpMap === undefined ? null : materialParams.bumpMap;\n\t\tmaterial.bumpScale = 1;\n\n\t\tmaterial.normalMap = materialParams.normalMap === undefined ? null : materialParams.normalMap;\n\t\tmaterial.normalMapType = TangentSpaceNormalMap;\n\n\t\tif ( materialParams.normalScale ) material.normalScale = materialParams.normalScale;\n\n\t\tmaterial.displacementMap = null;\n\t\tmaterial.displacementScale = 1;\n\t\tmaterial.displacementBias = 0;\n\n\t\tmaterial.specularMap = materialParams.specularMap === undefined ? null : materialParams.specularMap;\n\t\tmaterial.specular = materialParams.specular;\n\n\t\tmaterial.glossinessMap = materialParams.glossinessMap === undefined ? null : materialParams.glossinessMap;\n\t\tmaterial.glossiness = materialParams.glossiness;\n\n\t\tmaterial.alphaMap = null;\n\n\t\tmaterial.envMap = materialParams.envMap === undefined ? null : materialParams.envMap;\n\t\tmaterial.envMapIntensity = 1.0;\n\n\t\tmaterial.refractionRatio = 0.98;\n\n\t\treturn material;\n\n\t}\n\n}\n\n/**\n\t * Mesh Quantization Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n\t */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nGLTFCubicSplineInterpolant.prototype.beforeStart_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;\n\nGLTFCubicSplineInterpolant.prototype.afterEnd_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;\n\nGLTFCubicSplineInterpolant.prototype.interpolate_ = function ( i1, t0, t, t1 ) {\n\n\tconst result = this.resultBuffer;\n\tconst values = this.sampleValues;\n\tconst stride = this.valueSize;\n\n\tconst stride2 = stride * 2;\n\tconst stride3 = stride * 3;\n\n\tconst td = t1 - t0;\n\n\tconst p = ( t - t0 ) / td;\n\tconst pp = p * p;\n\tconst ppp = pp * p;\n\n\tconst offset1 = i1 * stride3;\n\tconst offset0 = offset1 - stride3;\n\n\tconst s2 = - 2 * ppp + 3 * pp;\n\tconst s3 = ppp - pp;\n\tconst s0 = 1 - s2;\n\tconst s1 = s3 - pp + p;\n\n\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t}\n\n\treturn result;\n\n};\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS$1 = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv2',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES$1 = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/* UTILITY FUNCTIONS */\n\nfunction resolveURL( url, path ) {\n\n\t// Invalid URL\n\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t// Host Relative URL\n\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t}\n\n\t// Absolute URL http://,https://,//\n\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t// Data URI\n\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t// Blob URL\n\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t// Relative URL\n\treturn path + url;\n\n}\n\n/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n\t */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n\t * @param {Object3D|Material|BufferGeometry} object\n\t * @param {GLTF.definition} gltfDef\n\t */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n\t *\n\t * @param {BufferGeometry} geometry\n\t * @param {Array} targets\n\t * @param {GLTFParser} parser\n\t * @return {Promise}\n\t */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n\t * @param {Mesh} mesh\n\t * @param {GLTF.Mesh} meshDef\n\t */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\tlet geometryKey;\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\t\tif ( typeof createImageBitmap !== 'undefined' && /Firefox/.test( navigator.userAgent ) === false ) {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\tPromise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this.loadNode( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this.loadAnimation( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\t// Ignore empty accessors, which may be used to declare runtime\n\t\t\t// information about attributes coming from another source (e.g. Draco\n\t\t\t// compression extension).\n\t\t\treturn Promise.resolve( null );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst source = json.images[ textureDef.source ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, source, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, source, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = source.uri;\n\t\tlet isObjectURL = false;\n\t\tlet hasAlpha = true;\n\n\t\tif ( source.mimeType === 'image/jpeg' ) hasAlpha = false;\n\n\t\tif ( source.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', source.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tif ( source.mimeType === 'image/png' ) {\n\n\t\t\t\t\t// Inspect the PNG 'IHDR' chunk to determine whether the image could have an\n\t\t\t\t\t// alpha channel. This check is conservative — the image could have an alpha\n\t\t\t\t\t// channel with all values == 1, and the indexed type (colorType == 3) only\n\t\t\t\t\t// sometimes contains alpha.\n\t\t\t\t\t//\n\t\t\t\t\t// https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header\n\t\t\t\t\tconst colorType = new DataView( bufferView, 25, 1 ).getUint8( 0, false );\n\t\t\t\t\thasAlpha = colorType === 6 || colorType === 4 || colorType === 3;\n\n\t\t\t\t}\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: source.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( source.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + textureIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\treturn Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tresolve( new CanvasTexture( imageBitmap ) );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\ttexture.flipY = false;\n\n\t\t\tif ( textureDef.name ) texture.name = textureDef.name;\n\n\t\t\t// When there is definitely no alpha channel in the texture, set RGBFormat to save space.\n\t\t\tif ( ! hasAlpha ) texture.format = RGBFormat;\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\tparser.associations.set( texture, {\n\t\t\t\ttype: 'textures',\n\t\t\t\tindex: textureIndex\n\t\t\t} );\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise}\n\t */\n\tassignTexture( materialParams, mapName, mapDef ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\t// Materials sample aoMap from UV set 1 and other maps from UV set 0 - this can't be configured\n\t\t\t// However, we will copy UV set 0 to UV set 1 on demand for aoMap\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV set ' + mapDef.texCoord + ' for texture ' + mapName + ' not yet supported.' );\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useVertexTangents = geometry.attributes.tangent !== undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\t\tconst useSkinning = mesh.isSkinnedMesh === true;\n\t\tconst useMorphTargets = Object.keys( geometry.morphAttributes ).length > 0;\n\t\tconst useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial$1.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial$1.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useVertexTangents || useVertexColors || useFlatShading || useSkinning || useMorphTargets ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:';\n\t\t\tif ( useSkinning ) cacheKey += 'skinning:';\n\t\t\tif ( useVertexTangents ) cacheKey += 'vertex-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\t\t\tif ( useMorphTargets ) cacheKey += 'morph-targets:';\n\t\t\tif ( useMorphNormals ) cacheKey += 'morph-normals:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useSkinning ) cachedMaterial.skinning = true;\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\t\t\t\tif ( useMorphTargets ) cachedMaterial.morphTargets = true;\n\t\t\t\tif ( useMorphNormals ) cachedMaterial.morphNormals = true;\n\n\t\t\t\tif ( useVertexTangents ) {\n\n\t\t\t\t\tcachedMaterial.vertexTangents = true;\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\t// workarounds for mesh and geometry\n\n\t\tif ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {\n\n\t\t\tgeometry.setAttribute( 'uv2', geometry.attributes.uv );\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {\n\n\t\t\tconst sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];\n\t\t\tmaterialType = sgExtension.getMaterialType();\n\t\t\tpending.push( sgExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\tmaterialParams.normalScale = new Vector2( 1, - 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tmaterialParams.normalScale.set( materialDef.normalTexture.scale, - materialDef.normalTexture.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tmaterialParams.emissive = new Color().fromArray( materialDef.emissiveFactor );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tlet material;\n\n\t\t\tif ( materialType === GLTFMeshStandardSGMaterial ) {\n\n\t\t\t\tmaterial = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );\n\n\t\t\t} else {\n\n\t\t\t\tmaterial = new materialType( materialParams );\n\n\t\t\t}\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\t// baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding.\n\t\t\tif ( material.map ) material.map.encoding = sRGBEncoding;\n\t\t\tif ( material.emissiveMap ) material.emissiveMap.encoding = sRGBEncoding;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { type: 'materials', index: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tlet name = sanitizedName;\n\n\t\tfor ( let i = 1; this.nodeNamesUsed[ name ]; ++ i ) {\n\n\t\t\tname = sanitizedName + '_' + i;\n\n\t\t}\n\n\t\tthis.nodeNamesUsed[ name ] = true;\n\n\t\treturn name;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array} primitives\n\t * @return {Promise>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS$1.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS$1.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS$1.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) {\n\n\t\t\t\t\t\t// we normalize floating point skin weight array to fix malformed assets (see #15319)\n\t\t\t\t\t\t// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS$1.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS$1.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS$1.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS$1.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS$1.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS$1.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst skinEntry = { joints: skinDef.joints };\n\n\t\tif ( skinDef.inverseBindMatrices === undefined ) {\n\n\t\t\treturn Promise.resolve( skinEntry );\n\n\t\t}\n\n\t\treturn this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) {\n\n\t\t\tskinEntry.inverseBindMatrices = accessor;\n\n\t\t\treturn skinEntry;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated.\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tnode.updateMatrix();\n\t\t\t\tnode.matrixAutoUpdate = true;\n\n\t\t\t\tlet TypedKeyframeTrack;\n\n\t\t\t\tswitch ( PATH_PROPERTIES$1[ target.path ] ) {\n\n\t\t\t\t\tcase PATH_PROPERTIES$1.weights:\n\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase PATH_PROPERTIES$1.rotation:\n\n\t\t\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase PATH_PROPERTIES$1.position:\n\t\t\t\t\tcase PATH_PROPERTIES$1.scale:\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tconst targetName = node.name ? node.name : node.uuid;\n\n\t\t\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\t\t\t\tconst targetNames = [];\n\n\t\t\t\tif ( PATH_PROPERTIES$1[ target.path ] === PATH_PROPERTIES$1.weights ) {\n\n\t\t\t\t\t// Node may be a Group (glTF mesh with several primitives) or a Mesh.\n\t\t\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\t\t\tif ( object.isMesh === true && object.morphTargetInfluences ) {\n\n\t\t\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\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\ttargetNames.push( targetName );\n\n\t\t\t\t}\n\n\t\t\t\tlet outputArray = outputAccessor.array;\n\n\t\t\t\tif ( outputAccessor.normalized ) {\n\n\t\t\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t\t\t}\n\n\t\t\t\t\toutputArray = scaled;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES$1[ target.path ],\n\t\t\t\t\t\tinputAccessor.array,\n\t\t\t\t\t\toutputArray,\n\t\t\t\t\t\tinterpolation\n\t\t\t\t\t);\n\n\t\t\t\t\t// Override interpolation with custom factory method.\n\t\t\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\t\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t\t\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t\t\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t\t\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\t\t\t\t\treturn new GLTFCubicSplineInterpolant( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\t\t\t\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( track );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst name = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\t\treturn new AnimationClip( name, undefined, tracks );\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\treturn ( function () {\n\n\t\t\tconst pending = [];\n\n\t\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t\t} );\n\n\t\t\tif ( meshPromise ) {\n\n\t\t\t\tpending.push( meshPromise );\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t\t} ) );\n\n\t\t\t}\n\n\t\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t\t} ).forEach( function ( promise ) {\n\n\t\t\t\tpending.push( promise );\n\n\t\t\t} );\n\n\t\t\treturn Promise.all( pending );\n\n\t\t}() ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tparser.associations.set( node, { type: 'nodes', index: nodeIndex } );\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( buildNodeHierachy( nodeIds[ i ], scene, json, parser ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n}\n\nfunction buildNodeHierachy( nodeId, parentObject, json, parser ) {\n\n\tconst nodeDef = json.nodes[ nodeId ];\n\n\treturn parser.getDependency( 'node', nodeId ).then( function ( node ) {\n\n\t\tif ( nodeDef.skin === undefined ) return node;\n\n\t\t// build skeleton here as well\n\n\t\tlet skinEntry;\n\n\t\treturn parser.getDependency( 'skin', nodeDef.skin ).then( function ( skin ) {\n\n\t\t\tskinEntry = skin;\n\n\t\t\tconst pendingJoints = [];\n\n\t\t\tfor ( let i = 0, il = skinEntry.joints.length; i < il; i ++ ) {\n\n\t\t\t\tpendingJoints.push( parser.getDependency( 'node', skinEntry.joints[ i ] ) );\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pendingJoints );\n\n\t\t} ).then( function ( jointNodes ) {\n\n\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\tif ( ! mesh.isMesh ) return;\n\n\t\t\t\tconst bones = [];\n\t\t\t\tconst boneInverses = [];\n\n\t\t\t\tfor ( let j = 0, jl = jointNodes.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst jointNode = jointNodes[ j ];\n\n\t\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\t\tif ( skinEntry.inverseBindMatrices !== undefined ) {\n\n\t\t\t\t\t\t\tmat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinEntry.joints[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.bind( new Skeleton( bones, boneInverses ), mesh.matrixWorld );\n\n\t\t\t} );\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t} ).then( function ( node ) {\n\n\t\t// build node hierachy\n\n\t\tparentObject.add( node );\n\n\t\tconst pending = [];\n\n\t\tif ( nodeDef.children ) {\n\n\t\t\tconst children = nodeDef.children;\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\t\t\t\tpending.push( buildNodeHierachy( child, node, json, parser ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t} );\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {Number} drawMode\n * @return {BufferGeometry}\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tlet index = geometry.getIndex();\n\n\t// generate index if not present\n\n\tif ( index === null ) {\n\n\t\tconst indices = [];\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\tindices.push( i );\n\n\t\t\t}\n\n\t\t\tgeometry.setIndex( indices );\n\t\t\tindex = geometry.getIndex();\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\treturn geometry;\n\n\t\t}\n\n\t}\n\n\t//\n\n\tconst numberOfTriangles = index.count - 2;\n\tconst newIndices = [];\n\n\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t// gl.TRIANGLE_FAN\n\n\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t}\n\n\t} else {\n\n\t\t// gl.TRIANGLE_STRIP\n\n\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\n\t\t\t} else {\n\n\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t}\n\n\t// build final geometry\n\n\tconst newGeometry = geometry.clone();\n\tnewGeometry.setIndex( newIndices );\n\n\treturn newGeometry;\n\n}\n\nconst e=[171,75,84,88,32,50,48,187,13,10,26,10];var n,i$1,s,a,r,o,l,f;!function(t){t[t.NONE=0]=\"NONE\",t[t.BASISLZ=1]=\"BASISLZ\",t[t.ZSTD=2]=\"ZSTD\",t[t.ZLIB=3]=\"ZLIB\";}(n||(n={})),function(t){t[t.BASICFORMAT=0]=\"BASICFORMAT\";}(i$1||(i$1={})),function(t){t[t.UNSPECIFIED=0]=\"UNSPECIFIED\",t[t.ETC1S=163]=\"ETC1S\",t[t.UASTC=166]=\"UASTC\";}(s||(s={})),function(t){t[t.UNSPECIFIED=0]=\"UNSPECIFIED\",t[t.SRGB=1]=\"SRGB\";}(a||(a={})),function(t){t[t.UNSPECIFIED=0]=\"UNSPECIFIED\",t[t.LINEAR=1]=\"LINEAR\",t[t.SRGB=2]=\"SRGB\",t[t.ITU=3]=\"ITU\",t[t.NTSC=4]=\"NTSC\",t[t.SLOG=5]=\"SLOG\",t[t.SLOG2=6]=\"SLOG2\";}(r||(r={})),function(t){t[t.ALPHA_STRAIGHT=0]=\"ALPHA_STRAIGHT\",t[t.ALPHA_PREMULTIPLIED=1]=\"ALPHA_PREMULTIPLIED\";}(o||(o={})),function(t){t[t.RGB=0]=\"RGB\",t[t.RRR=3]=\"RRR\",t[t.GGG=4]=\"GGG\",t[t.AAA=15]=\"AAA\";}(l||(l={})),function(t){t[t.RGB=0]=\"RGB\",t[t.RGBA=3]=\"RGBA\",t[t.RRR=4]=\"RRR\",t[t.RRRG=5]=\"RRRG\";}(f||(f={}));class U{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=n.NONE,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:i$1.BASICFORMAT,versionNumber:2,descriptorBlockSize:40,colorModel:s.UNSPECIFIED,colorPrimaries:a.SRGB,transferFunction:a.SRGB,flags:o.ALPHA_STRAIGHT,texelBlockDimension:{x:4,y:4,z:1,w:1},bytesPlane:[],samples:[]}],this.keyValue={},this.globalData=null;}}class c{constructor(t,e,n,i){this._dataView=new DataView(t.buffer,t.byteOffset+e,n),this._littleEndian=i,this._offset=0;}_nextUint8(){const t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){const t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){const t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){const t=this._dataView.getUint32(this._offset,this._littleEndian)+2**32*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,t}_skip(t){return this._offset+=t,this}_scan(t,e=0){const n=this._offset;let i=0;for(;this._dataView.getUint8(this._offset)!==e&&i {\n\n\t\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t\t// again from this thread.\n\t\t\tif ( _taskCache.has( buffer ) ) {\n\n\t\t\t\tconst cachedTask = _taskCache.get( buffer );\n\n\t\t\t\treturn cachedTask.promise.then( onLoad ).catch( onError );\n\n\t\t\t}\n\n\t\t\tthis._createTexture( [ buffer ] )\n\t\t\t\t.then( function ( _texture ) {\n\n\t\t\t\t\ttexture.copy( _texture );\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\t\t\t\t.catch( onError );\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n\t/** Low-level transcoding API, exposed for use by KTX2Loader. */\n\tparseInternalAsync( options ) {\n\n\t\tconst { levels } = options;\n\n\t\tconst buffers = new Set();\n\n\t\tfor ( let i = 0; i < levels.length; i ++ ) {\n\n\t\t\tbuffers.add( levels[ i ].data.buffer );\n\n\t\t}\n\n\t\treturn this._createTexture( Array.from( buffers ), { ...options, lowLevel: true } );\n\n\t}\n\n\t/**\n\t * @param {ArrayBuffer[]} buffers\n\t * @param {object?} config\n\t * @return {Promise}\n\t */\n\t_createTexture( buffers, config = {} ) {\n\n\t\tlet worker;\n\t\tlet taskID;\n\n\t\tconst taskConfig = config;\n\t\tlet taskCost = 0;\n\n\t\tfor ( let i = 0; i < buffers.length; i ++ ) {\n\n\t\t\ttaskCost += buffers[ i ].byteLength;\n\n\t\t}\n\n\t\tconst texturePending = this._allocateWorker( taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\t\t\t\ttaskID = this.workerNextTaskID ++;\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'transcode', id: taskID, buffers: buffers, taskConfig: taskConfig }, buffers );\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => {\n\n\t\t\t\tconst { mipmaps, width, height, format } = message;\n\n\t\t\t\tconst texture = new CompressedTexture( mipmaps, width, height, format, UnsignedByteType );\n\t\t\t\ttexture.minFilter = mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;\n\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\treturn texture;\n\n\t\t\t} );\n\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\ttexturePending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tworker._taskLoad -= taskCost;\n\t\t\t\t\tdelete worker._callbacks[ taskID ];\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\t_taskCache.set( buffers[ 0 ], { promise: texturePending } );\n\n\t\treturn texturePending;\n\n\t}\n\n\t_initTranscoder() {\n\n\t\tif ( ! this.transcoderPending ) {\n\n\t\t\t// Load transcoder wrapper.\n\t\t\tconst jsLoader = new FileLoader( this.manager );\n\t\t\tjsLoader.setPath( this.transcoderPath );\n\t\t\tjsLoader.setWithCredentials( this.withCredentials );\n\t\t\tconst jsContent = new Promise( ( resolve, reject ) => {\n\n\t\t\t\tjsLoader.load( 'basis_transcoder.js', resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t\t// Load transcoder WASM binary.\n\t\t\tconst binaryLoader = new FileLoader( this.manager );\n\t\t\tbinaryLoader.setPath( this.transcoderPath );\n\t\t\tbinaryLoader.setResponseType( 'arraybuffer' );\n\t\t\tbinaryLoader.setWithCredentials( this.withCredentials );\n\t\t\tconst binaryContent = new Promise( ( resolve, reject ) => {\n\n\t\t\t\tbinaryLoader.load( 'basis_transcoder.wasm', resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t\tthis.transcoderPending = Promise.all( [ jsContent, binaryContent ] )\n\t\t\t\t.then( ( [ jsContent, binaryContent ] ) => {\n\n\t\t\t\t\tconst fn = BasisTextureLoader.BasisWorker.toString();\n\n\t\t\t\t\tconst body = [\n\t\t\t\t\t\t'/* constants */',\n\t\t\t\t\t\t'let _EngineFormat = ' + JSON.stringify( BasisTextureLoader.EngineFormat ),\n\t\t\t\t\t\t'let _TranscoderFormat = ' + JSON.stringify( BasisTextureLoader.TranscoderFormat ),\n\t\t\t\t\t\t'let _BasisFormat = ' + JSON.stringify( BasisTextureLoader.BasisFormat ),\n\t\t\t\t\t\t'/* basis_transcoder.js */',\n\t\t\t\t\t\tjsContent,\n\t\t\t\t\t\t'/* worker */',\n\t\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t\t].join( '\\n' );\n\n\t\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\t\t\t\t\tthis.transcoderBinary = binaryContent;\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\treturn this.transcoderPending;\n\n\t}\n\n\t_allocateWorker( taskCost ) {\n\n\t\treturn this._initTranscoder().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tconst worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( {\n\t\t\t\t\ttype: 'init',\n\t\t\t\t\tconfig: this.workerConfig,\n\t\t\t\t\ttranscoderBinary: this.transcoderBinary,\n\t\t\t\t} );\n\n\t\t\t\tworker.onmessage = function ( e ) {\n\n\t\t\t\t\tconst message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'transcode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.BasisTextureLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst worker = this.workerPool[ this.workerPool.length - 1 ];\n\n\t\t\tworker._taskLoad += taskCost;\n\n\t\t\treturn worker;\n\n\t\t} );\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.workerPool.length; i ++ ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/* CONSTANTS */\n\nBasisTextureLoader.BasisFormat = {\n\tETC1S: 0,\n\tUASTC_4x4: 1,\n};\n\nBasisTextureLoader.TranscoderFormat = {\n\tETC1: 0,\n\tETC2: 1,\n\tBC1: 2,\n\tBC3: 3,\n\tBC4: 4,\n\tBC5: 5,\n\tBC7_M6_OPAQUE_ONLY: 6,\n\tBC7_M5: 7,\n\tPVRTC1_4_RGB: 8,\n\tPVRTC1_4_RGBA: 9,\n\tASTC_4x4: 10,\n\tATC_RGB: 11,\n\tATC_RGBA_INTERPOLATED_ALPHA: 12,\n\tRGBA32: 13,\n\tRGB565: 14,\n\tBGR565: 15,\n\tRGBA4444: 16,\n};\n\nBasisTextureLoader.EngineFormat = {\n\tRGBAFormat: RGBAFormat,\n\tRGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,\n\tRGBA_BPTC_Format: RGBA_BPTC_Format,\n\tRGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,\n\tRGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,\n\tRGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,\n\tRGB_ETC1_Format: RGB_ETC1_Format,\n\tRGB_ETC2_Format: RGB_ETC2_Format,\n\tRGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,\n\tRGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format,\n};\n\n\n/* WEB WORKER */\n\nBasisTextureLoader.BasisWorker = function () {\n\n\tlet config;\n\tlet transcoderPending;\n\tlet BasisModule;\n\n\tconst EngineFormat = _EngineFormat; // eslint-disable-line no-undef\n\tconst TranscoderFormat = _TranscoderFormat; // eslint-disable-line no-undef\n\tconst BasisFormat = _BasisFormat; // eslint-disable-line no-undef\n\n\tonmessage = function ( e ) {\n\n\t\tconst message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\t\t\t\tconfig = message.config;\n\t\t\t\tinit( message.transcoderBinary );\n\t\t\t\tbreak;\n\n\t\t\tcase 'transcode':\n\t\t\t\ttranscoderPending.then( () => {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tconst { width, height, hasAlpha, mipmaps, format } = message.taskConfig.lowLevel\n\t\t\t\t\t\t\t? transcodeLowLevel( message.taskConfig )\n\t\t\t\t\t\t\t: transcode( message.buffers[ 0 ] );\n\n\t\t\t\t\t\tconst buffers = [];\n\n\t\t\t\t\t\tfor ( let i = 0; i < mipmaps.length; ++ i ) {\n\n\t\t\t\t\t\t\tbuffers.push( mipmaps[ i ].data.buffer );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tself.postMessage( { type: 'transcode', id: message.id, width, height, hasAlpha, mipmaps, format }, buffers );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error: error.message } );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction init( wasmBinary ) {\n\n\t\ttranscoderPending = new Promise( ( resolve ) => {\n\n\t\t\tBasisModule = { wasmBinary, onRuntimeInitialized: resolve };\n\t\t\tBASIS( BasisModule ); // eslint-disable-line no-undef\n\n\t\t} ).then( () => {\n\n\t\t\tBasisModule.initializeBasis();\n\n\t\t} );\n\n\t}\n\n\tfunction transcodeLowLevel( taskConfig ) {\n\n\t\tconst { basisFormat, width, height, hasAlpha } = taskConfig;\n\n\t\tconst { transcoderFormat, engineFormat } = getTranscoderFormat( basisFormat, width, height, hasAlpha );\n\n\t\tconst blockByteLength = BasisModule.getBytesPerBlockOrPixel( transcoderFormat );\n\n\t\tassert( BasisModule.isFormatSupported( transcoderFormat ), 'THREE.BasisTextureLoader: Unsupported format.' );\n\n\t\tconst mipmaps = [];\n\n\t\tif ( basisFormat === BasisFormat.ETC1S ) {\n\n\t\t\tconst transcoder = new BasisModule.LowLevelETC1SImageTranscoder();\n\n\t\t\tconst { endpointCount, endpointsData, selectorCount, selectorsData, tablesData } = taskConfig.globalData;\n\n\t\t\ttry {\n\n\t\t\t\tlet ok;\n\n\t\t\t\tok = transcoder.decodePalettes( endpointCount, endpointsData, selectorCount, selectorsData );\n\n\t\t\t\tassert( ok, 'THREE.BasisTextureLoader: decodePalettes() failed.' );\n\n\t\t\t\tok = transcoder.decodeTables( tablesData );\n\n\t\t\t\tassert( ok, 'THREE.BasisTextureLoader: decodeTables() failed.' );\n\n\t\t\t\tfor ( let i = 0; i < taskConfig.levels.length; i ++ ) {\n\n\t\t\t\t\tconst level = taskConfig.levels[ i ];\n\t\t\t\t\tconst imageDesc = taskConfig.globalData.imageDescs[ i ];\n\n\t\t\t\t\tconst dstByteLength = getTranscodedImageByteLength( transcoderFormat, level.width, level.height );\n\t\t\t\t\tconst dst = new Uint8Array( dstByteLength );\n\n\t\t\t\t\tok = transcoder.transcodeImage(\n\t\t\t\t\t\ttranscoderFormat,\n\t\t\t\t\t\tdst, dstByteLength / blockByteLength,\n\t\t\t\t\t\tlevel.data,\n\t\t\t\t\t\tgetWidthInBlocks( transcoderFormat, level.width ),\n\t\t\t\t\t\tgetHeightInBlocks( transcoderFormat, level.height ),\n\t\t\t\t\t\tlevel.width, level.height, level.index,\n\t\t\t\t\t\timageDesc.rgbSliceByteOffset, imageDesc.rgbSliceByteLength,\n\t\t\t\t\t\timageDesc.alphaSliceByteOffset, imageDesc.alphaSliceByteLength,\n\t\t\t\t\t\timageDesc.imageFlags,\n\t\t\t\t\t\thasAlpha,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t0, 0\n\t\t\t\t\t);\n\n\t\t\t\t\tassert( ok, 'THREE.BasisTextureLoader: transcodeImage() failed for level ' + level.index + '.' );\n\n\t\t\t\t\tmipmaps.push( { data: dst, width: level.width, height: level.height } );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\ttranscoder.delete();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < taskConfig.levels.length; i ++ ) {\n\n\t\t\t\tconst level = taskConfig.levels[ i ];\n\n\t\t\t\tconst dstByteLength = getTranscodedImageByteLength( transcoderFormat, level.width, level.height );\n\t\t\t\tconst dst = new Uint8Array( dstByteLength );\n\n\t\t\t\tconst ok = BasisModule.transcodeUASTCImage(\n\t\t\t\t\ttranscoderFormat,\n\t\t\t\t\tdst, dstByteLength / blockByteLength,\n\t\t\t\t\tlevel.data,\n\t\t\t\t\tgetWidthInBlocks( transcoderFormat, level.width ),\n\t\t\t\t\tgetHeightInBlocks( transcoderFormat, level.height ),\n\t\t\t\t\tlevel.width, level.height, level.index,\n\t\t\t\t\t0,\n\t\t\t\t\tlevel.data.byteLength,\n\t\t\t\t\t0,\n\t\t\t\t\thasAlpha,\n\t\t\t\t\tfalse,\n\t\t\t\t\t0, 0,\n\t\t\t\t\t- 1, - 1\n\t\t\t\t);\n\n\t\t\t\tassert( ok, 'THREE.BasisTextureLoader: transcodeUASTCImage() failed for level ' + level.index + '.' );\n\n\t\t\t\tmipmaps.push( { data: dst, width: level.width, height: level.height } );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn { width, height, hasAlpha, mipmaps, format: engineFormat };\n\n\t}\n\n\tfunction transcode( buffer ) {\n\n\t\tconst basisFile = new BasisModule.BasisFile( new Uint8Array( buffer ) );\n\n\t\tconst basisFormat = basisFile.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S;\n\t\tconst width = basisFile.getImageWidth( 0, 0 );\n\t\tconst height = basisFile.getImageHeight( 0, 0 );\n\t\tconst levels = basisFile.getNumLevels( 0 );\n\t\tconst hasAlpha = basisFile.getHasAlpha();\n\n\t\tfunction cleanup() {\n\n\t\t\tbasisFile.close();\n\t\t\tbasisFile.delete();\n\n\t\t}\n\n\t\tconst { transcoderFormat, engineFormat } = getTranscoderFormat( basisFormat, width, height, hasAlpha );\n\n\t\tif ( ! width || ! height || ! levels ) {\n\n\t\t\tcleanup();\n\t\t\tthrow new Error( 'THREE.BasisTextureLoader:\tInvalid texture' );\n\n\t\t}\n\n\t\tif ( ! basisFile.startTranscoding() ) {\n\n\t\t\tcleanup();\n\t\t\tthrow new Error( 'THREE.BasisTextureLoader: .startTranscoding failed' );\n\n\t\t}\n\n\t\tconst mipmaps = [];\n\n\t\tfor ( let mip = 0; mip < levels; mip ++ ) {\n\n\t\t\tconst mipWidth = basisFile.getImageWidth( 0, mip );\n\t\t\tconst mipHeight = basisFile.getImageHeight( 0, mip );\n\t\t\tconst dst = new Uint8Array( basisFile.getImageTranscodedSizeInBytes( 0, mip, transcoderFormat ) );\n\n\t\t\tconst status = basisFile.transcodeImage(\n\t\t\t\tdst,\n\t\t\t\t0,\n\t\t\t\tmip,\n\t\t\t\ttranscoderFormat,\n\t\t\t\t0,\n\t\t\t\thasAlpha\n\t\t\t);\n\n\t\t\tif ( ! status ) {\n\n\t\t\t\tcleanup();\n\t\t\t\tthrow new Error( 'THREE.BasisTextureLoader: .transcodeImage failed.' );\n\n\t\t\t}\n\n\t\t\tmipmaps.push( { data: dst, width: mipWidth, height: mipHeight } );\n\n\t\t}\n\n\t\tcleanup();\n\n\t\treturn { width, height, hasAlpha, mipmaps, format: engineFormat };\n\n\t}\n\n\t//\n\n\t// Optimal choice of a transcoder target format depends on the Basis format (ETC1S or UASTC),\n\t// device capabilities, and texture dimensions. The list below ranks the formats separately\n\t// for ETC1S and UASTC.\n\t//\n\t// In some cases, transcoding UASTC to RGBA32 might be preferred for higher quality (at\n\t// significant memory cost) compared to ETC1/2, BC1/3, and PVRTC. The transcoder currently\n\t// chooses RGBA32 only as a last resort and does not expose that option to the caller.\n\tconst FORMAT_OPTIONS = [\n\t\t{\n\t\t\tif: 'astcSupported',\n\t\t\tbasisFormat: [ BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4 ],\n\t\t\tengineFormat: [ EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format ],\n\t\t\tpriorityETC1S: Infinity,\n\t\t\tpriorityUASTC: 1,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'bptcSupported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5 ],\n\t\t\tengineFormat: [ EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format ],\n\t\t\tpriorityETC1S: 3,\n\t\t\tpriorityUASTC: 2,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'dxtSupported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.BC1, TranscoderFormat.BC3 ],\n\t\t\tengineFormat: [ EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format ],\n\t\t\tpriorityETC1S: 4,\n\t\t\tpriorityUASTC: 5,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'etc2Supported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.ETC1, TranscoderFormat.ETC2 ],\n\t\t\tengineFormat: [ EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format ],\n\t\t\tpriorityETC1S: 1,\n\t\t\tpriorityUASTC: 3,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'etc1Supported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.ETC1, TranscoderFormat.ETC1 ],\n\t\t\tengineFormat: [ EngineFormat.RGB_ETC1_Format, EngineFormat.RGB_ETC1_Format ],\n\t\t\tpriorityETC1S: 2,\n\t\t\tpriorityUASTC: 4,\n\t\t\tneedsPowerOfTwo: false,\n\t\t},\n\t\t{\n\t\t\tif: 'pvrtcSupported',\n\t\t\tbasisFormat: [ BasisFormat.ETC1S, BasisFormat.UASTC_4x4 ],\n\t\t\ttranscoderFormat: [ TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA ],\n\t\t\tengineFormat: [ EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format ],\n\t\t\tpriorityETC1S: 5,\n\t\t\tpriorityUASTC: 6,\n\t\t\tneedsPowerOfTwo: true,\n\t\t},\n\t];\n\n\tconst ETC1S_OPTIONS = FORMAT_OPTIONS.sort( function ( a, b ) {\n\n\t\treturn a.priorityETC1S - b.priorityETC1S;\n\n\t} );\n\tconst UASTC_OPTIONS = FORMAT_OPTIONS.sort( function ( a, b ) {\n\n\t\treturn a.priorityUASTC - b.priorityUASTC;\n\n\t} );\n\n\tfunction getTranscoderFormat( basisFormat, width, height, hasAlpha ) {\n\n\t\tlet transcoderFormat;\n\t\tlet engineFormat;\n\n\t\tconst options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS;\n\n\t\tfor ( let i = 0; i < options.length; i ++ ) {\n\n\t\t\tconst opt = options[ i ];\n\n\t\t\tif ( ! config[ opt.if ] ) continue;\n\t\t\tif ( ! opt.basisFormat.includes( basisFormat ) ) continue;\n\t\t\tif ( opt.needsPowerOfTwo && ! ( isPowerOfTwo( width ) && isPowerOfTwo( height ) ) ) continue;\n\n\t\t\ttranscoderFormat = opt.transcoderFormat[ hasAlpha ? 1 : 0 ];\n\t\t\tengineFormat = opt.engineFormat[ hasAlpha ? 1 : 0 ];\n\n\t\t\treturn { transcoderFormat, engineFormat };\n\n\t\t}\n\n\t\tconsole.warn( 'THREE.BasisTextureLoader: No suitable compressed texture format found. Decoding to RGBA32.' );\n\n\t\ttranscoderFormat = TranscoderFormat.RGBA32;\n\t\tengineFormat = EngineFormat.RGBAFormat;\n\n\t\treturn { transcoderFormat, engineFormat };\n\n\t}\n\n\tfunction assert( ok, message ) {\n\n\t\tif ( ! ok ) throw new Error( message );\n\n\t}\n\n\tfunction getWidthInBlocks( transcoderFormat, width ) {\n\n\t\treturn Math.ceil( width / BasisModule.getFormatBlockWidth( transcoderFormat ) );\n\n\t}\n\n\tfunction getHeightInBlocks( transcoderFormat, height ) {\n\n\t\treturn Math.ceil( height / BasisModule.getFormatBlockHeight( transcoderFormat ) );\n\n\t}\n\n\tfunction getTranscodedImageByteLength( transcoderFormat, width, height ) {\n\n\t\tconst blockByteLength = BasisModule.getBytesPerBlockOrPixel( transcoderFormat );\n\n\t\tif ( BasisModule.formatIsUncompressed( transcoderFormat ) ) {\n\n\t\t\treturn width * height * blockByteLength;\n\n\t\t}\n\n\t\tif ( transcoderFormat === TranscoderFormat.PVRTC1_4_RGB\n\t\t\t\t|| transcoderFormat === TranscoderFormat.PVRTC1_4_RGBA ) {\n\n\t\t\t// GL requires extra padding for very small textures:\n\t\t\t// https://www.khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc.txt\n\t\t\tconst paddedWidth = ( width + 3 ) & ~ 3;\n\t\t\tconst paddedHeight = ( height + 3 ) & ~ 3;\n\n\t\t\treturn ( Math.max( 8, paddedWidth ) * Math.max( 8, paddedHeight ) * 4 + 7 ) / 8;\n\n\t\t}\n\n\t\treturn ( getWidthInBlocks( transcoderFormat, width )\n\t\t\t* getHeightInBlocks( transcoderFormat, height )\n\t\t\t* blockByteLength );\n\n\t}\n\n\tfunction isPowerOfTwo( value ) {\n\n\t\tif ( value <= 2 ) return true;\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t}\n\n};\n\n/**\n * @author Don McCurdy / https://www.donmccurdy.com\n */\n\nlet init, instance, heap;\n\nconst importObject = {\n\n\tenv: {\n\n\t\temscripten_notify_memory_growth: function ( index ) {\n\n\t\t\theap = new Uint8Array( instance.exports.memory.buffer );\n\n\t\t}\n\n\t}\n\n};\n\n/**\n * ZSTD (Zstandard) decoder.\n *\n * Compiled from https://github.com/facebook/zstd/tree/dev/contrib/single_file_libs, with the\n * following steps:\n *\n * ```\n * ./combine.sh -r ../../lib -o zstddeclib.c zstddeclib-in.c\n * emcc zstddeclib.c -Oz -s EXPORTED_FUNCTIONS=\"['_ZSTD_decompress', '_ZSTD_findDecompressedSize', '_ZSTD_isError', '_malloc', '_free']\" -s ALLOW_MEMORY_GROWTH=1 -s MALLOC=emmalloc -o zstddec.wasm\n * base64 zstddec.wasm > zstddec.txt\n * ```\n *\n * The base64 string written to `zstddec.txt` is embedded as the `wasm` variable at the bottom\n * of this file. The rest of this file is written by hand, in order to avoid an additional JS\n * wrapper generated by Emscripten.\n */\nclass ZSTDDecoder {\n\n\tinit () {\n\n\t\tif ( ! init ) {\n\n\t\t\tinit = fetch( 'data:application/wasm;base64,' + wasm )\n\t\t\t\t.then( ( response ) => response.arrayBuffer() )\n\t\t\t\t.then( ( arrayBuffer ) => WebAssembly.instantiate( arrayBuffer, importObject ) )\n\t\t\t\t.then( ( result ) => {\n\n\t\t\t\t\tinstance = result.instance;\n\n\t\t\t\t\timportObject.env.emscripten_notify_memory_growth( 0 ); // initialize heap.\n\n\t\t\t\t});\n\n\t\t}\n\n\t\treturn init;\n\n\t}\n\n\tdecode ( array, uncompressedSize = 0 ) {\n\n\t\t// Write compressed data into WASM memory.\n\t\tconst compressedSize = array.byteLength;\n\t\tconst compressedPtr = instance.exports.malloc( compressedSize );\n\t\theap.set( array, compressedPtr );\n\n\t\t// Decompress into WASM memory.\n\t\tuncompressedSize = uncompressedSize || Number( instance.exports.ZSTD_findDecompressedSize( compressedPtr, compressedSize ) );\n\t\tconst uncompressedPtr = instance.exports.malloc( uncompressedSize );\n\t\tconst actualSize = instance.exports.ZSTD_decompress( uncompressedPtr, uncompressedSize, compressedPtr, compressedSize );\n\n\t\t// Read decompressed data and free WASM memory.\n\t\tconst dec = heap.slice( uncompressedPtr, uncompressedPtr + actualSize );\n\t\tinstance.exports.free( compressedPtr );\n\t\tinstance.exports.free( uncompressedPtr );\n\n\t\treturn dec;\n\n\t}\n\n}\n\n/**\n * BSD License\n *\n * For Zstandard software\n *\n * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name Facebook nor the names of its contributors may be used to\n * endorse or promote products derived from this software without specific\n * prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nconst wasm = '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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY0AAQMyIFEAMiBg0AIANBHzYCfCADIANB/ABqIANB+ABqIAQgBCAFaiAGGyIEIAEgAmoiAiAEaxAVIgUQAw0AIAMoAnwiBkEfSw0AIAMoAngiB0EJTw0AIABBiCBqIAMgBkGAC0GADCAHEBggA0E0NgJ8IAMgA0H8AGogA0H4AGogBCAFaiIEIAIgBGsQFSIFEAMNACADKAJ8IgZBNEsNACADKAJ4IgdBCk8NACAAQZAwaiADIAZBgA1B4A4gBxAYIANBIzYCfCADIANB/ABqIANB+ABqIAQgBWoiBCACIARrEBUiBRADDQAgAygCfCIGQSNLDQAgAygCeCIHQQpPDQAgACADIAZBwBBB0BEgBxAYIAQgBWoiBEEMaiIFIAJLDQAgAiAFayEFQQAhAgNAIAJBA0cEQCAEKAAAIgZBf2ogBU8NAiAAIAJBAnRqQZzQAWogBjYCACACQQFqIQIgBEEEaiEEDAELCyAEIAFrIQgLIANBgAFqJAAgCAtGAQN/IABBCGohAyAAKAIEIQJBACEAA0AgACACdkUEQCABIAMgAEEDdGotAAJBFktqIQEgAEEBaiEADAELCyABQQggAmt0C4YDAQV/Qbh/IQcCQCADRQ0AIAItAAAiBEUEQCABQQA2AgBBAUG4fyADQQFGGw8LAn8gAkEBaiIFIARBGHRBGHUiBkF/Sg0AGiAGQX9GBEAgA0EDSA0CIAUvAABBgP4BaiEEIAJBA2oMAQsgA0ECSA0BIAItAAEgBEEIdHJBgIB+aiEEIAJBAmoLIQUgASAENgIAIAVBAWoiASACIANqIgNLDQBBbCEHIABBEGogACAFLQAAIgVBBnZBI0EJIAEgAyABa0HAEEHQEUHwEiAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBmCBqIABBCGogBUEEdkEDcUEfQQggASABIAZqIAgbIgEgAyABa0GAC0GADEGAFyAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBoDBqIABBBGogBUECdkEDcUE0QQkgASABIAZqIAgbIgEgAyABa0GADUHgDkGQGSAAKAKM4QEgACgCnOIBIAQQHyIAEAMNACAAIAFqIAJrIQcLIAcLrQMBCn8jAEGABGsiCCQAAn9BUiACQf8BSw0AGkFUIANBDEsNABogAkEBaiELIABBBGohCUGAgAQgA0F/anRBEHUhCkEAIQJBASEEQQEgA3QiB0F/aiIMIQUDQCACIAtGRQRAAkAgASACQQF0Ig1qLwEAIgZB//8DRgRAIAkgBUECdGogAjoAAiAFQX9qIQVBASEGDAELIARBACAKIAZBEHRBEHVKGyEECyAIIA1qIAY7AQAgAkEBaiECDAELCyAAIAQ7AQIgACADOwEAIAdBA3YgB0EBdmpBA2ohBkEAIQRBACECA0AgBCALRkUEQCABIARBAXRqLgEAIQpBACEAA0AgACAKTkUEQCAJIAJBAnRqIAQ6AAIDQCACIAZqIAxxIgIgBUsNAAsgAEEBaiEADAELCyAEQQFqIQQMAQsLQX8gAg0AGkEAIQIDfyACIAdGBH9BAAUgCCAJIAJBAnRqIgAtAAJBAXRqIgEgAS8BACIBQQFqOwEAIAAgAyABEBRrIgU6AAMgACABIAVB/wFxdCAHazsBACACQQFqIQIMAQsLCyEFIAhBgARqJAAgBQvjBgEIf0FsIQcCQCACQQNJDQACQAJAAkACQCABLQAAIgNBA3EiCUEBaw4DAwEAAgsgACgCiOEBDQBBYg8LIAJBBUkNAkEDIQYgASgAACEFAn8CQAJAIANBAnZBA3EiCEF+aiIEQQFNBEAgBEEBaw0BDAILIAVBDnZB/wdxIQQgBUEEdkH/B3EhAyAIRQwCCyAFQRJ2IQRBBCEGIAVBBHZB//8AcSEDQQAMAQsgBUEEdkH//w9xIgNBgIAISw0DIAEtAARBCnQgBUEWdnIhBEEFIQZBAAshBSAEIAZqIgogAksNAgJAIANBgQZJDQAgACgCnOIBRQ0AQQAhAgNAIAJBg4ABSw0BIAJBQGshAgwAAAsACwJ/IAlBA0YEQCABIAZqIQEgAEHw4gFqIQIgACgCDCEGIAUEQCACIAMgASAEIAYQXwwCCyACIAMgASAEIAYQXQwBCyAAQbjQAWohAiABIAZqIQEgAEHw4gFqIQYgAEGo0ABqIQggBQRAIAggBiADIAEgBCACEF4MAQsgCCAGIAMgASAEIAIQXAsQAw0CIAAgAzYCgOIBIABBATYCiOEBIAAgAEHw4gFqNgLw4QEgCUECRgRAIAAgAEGo0ABqNgIMCyAAIANqIgBBiOMBakIANwAAIABBgOMBakIANwAAIABB+OIBakIANwAAIABB8OIBakIANwAAIAoPCwJ/AkACQAJAIANBAnZBA3FBf2oiBEECSw0AIARBAWsOAgACAQtBASEEIANBA3YMAgtBAiEEIAEvAABBBHYMAQtBAyEEIAEQIUEEdgsiAyAEaiIFQSBqIAJLBEAgBSACSw0CIABB8OIBaiABIARqIAMQCyEBIAAgAzYCgOIBIAAgATYC8OEBIAEgA2oiAEIANwAYIABCADcAECAAQgA3AAggAEIANwAAIAUPCyAAIAM2AoDiASAAIAEgBGo2AvDhASAFDwsCfwJAAkACQCADQQJ2QQNxQX9qIgRBAksNACAEQQFrDgIAAgELQQEhByADQQN2DAILQQIhByABLwAAQQR2DAELIAJBBEkgARAhIgJBj4CAAUtyDQFBAyEHIAJBBHYLIQIgAEHw4gFqIAEgB2otAAAgAkEgahAQIQEgACACNgKA4gEgACABNgLw4QEgB0EBaiEHCyAHC0sAIABC+erQ0OfJoeThADcDICAAQgA3AxggAELP1tO+0ser2UI3AxAgAELW64Lu6v2J9eAANwMIIABCADcDACAAQShqQQBBKBAQGgviAgICfwV+IABBKGoiASAAKAJIaiECAn4gACkDACIDQiBaBEAgACkDECIEQgeJIAApAwgiBUIBiXwgACkDGCIGQgyJfCAAKQMgIgdCEol8IAUQGSAEEBkgBhAZIAcQGQwBCyAAKQMYQsXP2bLx5brqJ3wLIAN8IQMDQCABQQhqIgAgAk0EQEIAIAEpAAAQCSADhUIbiUKHla+vmLbem55/fkLj3MqV/M7y9YV/fCEDIAAhAQwBCwsCQCABQQRqIgAgAksEQCABIQAMAQsgASgAAK1Ch5Wvr5i23puef34gA4VCF4lCz9bTvtLHq9lCfkL5893xmfaZqxZ8IQMLA0AgACACSQRAIAAxAABCxc/ZsvHluuonfiADhUILiUKHla+vmLbem55/fiEDIABBAWohAAwBCwsgA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC+8CAgJ/BH4gACAAKQMAIAKtfDcDAAJAAkAgACgCSCIDIAJqIgRBH00EQCABRQ0BIAAgA2pBKGogASACECAgACgCSCACaiEEDAELIAEgAmohAgJ/IAMEQCAAQShqIgQgA2ogAUEgIANrECAgACAAKQMIIAQpAAAQCTcDCCAAIAApAxAgACkAMBAJNwMQIAAgACkDGCAAKQA4EAk3AxggACAAKQMgIABBQGspAAAQCTcDICAAKAJIIQMgAEEANgJIIAEgA2tBIGohAQsgAUEgaiACTQsEQCACQWBqIQMgACkDICEFIAApAxghBiAAKQMQIQcgACkDCCEIA0AgCCABKQAAEAkhCCAHIAEpAAgQCSEHIAYgASkAEBAJIQYgBSABKQAYEAkhBSABQSBqIgEgA00NAAsgACAFNwMgIAAgBjcDGCAAIAc3AxAgACAINwMICyABIAJPDQEgAEEoaiABIAIgAWsiBBAgCyAAIAQ2AkgLCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQEBogAwVBun8LCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQCxogAwVBun8LC6gCAQZ/IwBBEGsiByQAIABB2OABaikDAEKAgIAQViEIQbh/IQUCQCAEQf//B0sNACAAIAMgBBBCIgUQAyIGDQAgACgCnOIBIQkgACAHQQxqIAMgAyAFaiAGGyIKIARBACAFIAYbayIGEEAiAxADBEAgAyEFDAELIAcoAgwhBCABRQRAQbp/IQUgBEEASg0BCyAGIANrIQUgAyAKaiEDAkAgCQRAIABBADYCnOIBDAELAkACQAJAIARBBUgNACAAQdjgAWopAwBCgICACFgNAAwBCyAAQQA2ApziAQwBCyAAKAIIED8hBiAAQQA2ApziASAGQRRPDQELIAAgASACIAMgBSAEIAgQOSEFDAELIAAgASACIAMgBSAEIAgQOiEFCyAHQRBqJAAgBQtnACAAQdDgAWogASACIAAoAuzhARAuIgEQAwRAIAEPC0G4fyECAkAgAQ0AIABB7OABaigCACIBBEBBYCECIAAoApjiASABRw0BC0EAIQIgAEHw4AFqKAIARQ0AIABBkOEBahBDCyACCycBAX8QVyIERQRAQUAPCyAEIAAgASACIAMgBBBLEE8hACAEEFYgAAs/AQF/AkACQAJAIAAoAqDiAUEBaiIBQQJLDQAgAUEBaw4CAAECCyAAEDBBAA8LIABBADYCoOIBCyAAKAKU4gELvAMCB38BfiMAQRBrIgkkAEG4fyEGAkAgBCgCACIIQQVBCSAAKALs4QEiBRtJDQAgAygCACIHQQFBBSAFGyAFEC8iBRADBEAgBSEGDAELIAggBUEDakkNACAAIAcgBRBJIgYQAw0AIAEgAmohCiAAQZDhAWohCyAIIAVrIQIgBSAHaiEHIAEhBQNAIAcgAiAJECwiBhADDQEgAkF9aiICIAZJBEBBuH8hBgwCCyAJKAIAIghBAksEQEFsIQYMAgsgB0EDaiEHAn8CQAJAAkAgCEEBaw4CAgABCyAAIAUgCiAFayAHIAYQSAwCCyAFIAogBWsgByAGEEcMAQsgBSAKIAVrIActAAAgCSgCCBBGCyIIEAMEQCAIIQYMAgsgACgC8OABBEAgCyAFIAgQRQsgAiAGayECIAYgB2ohByAFIAhqIQUgCSgCBEUNAAsgACkD0OABIgxCf1IEQEFsIQYgDCAFIAFrrFINAQsgACgC8OABBEBBaiEGIAJBBEkNASALEEQhDCAHKAAAIAynRw0BIAdBBGohByACQXxqIQILIAMgBzYCACAEIAI2AgAgBSABayEGCyAJQRBqJAAgBgsuACAAECsCf0EAQQAQAw0AGiABRSACRXJFBEBBYiAAIAEgAhA9EAMNARoLQQALCzcAIAEEQCAAIAAoAsTgASABKAIEIAEoAghqRzYCnOIBCyAAECtBABADIAFFckUEQCAAIAEQWwsL0QIBB38jAEEQayIGJAAgBiAENgIIIAYgAzYCDCAFBEAgBSgCBCEKIAUoAgghCQsgASEIAkACQANAIAAoAuzhARAWIQsCQANAIAQgC0kNASADKAAAQXBxQdDUtMIBRgRAIAMgBBAiIgcQAw0EIAQgB2shBCADIAdqIQMMAQsLIAYgAzYCDCAGIAQ2AggCQCAFBEAgACAFEE5BACEHQQAQA0UNAQwFCyAAIAogCRBNIgcQAw0ECyAAIAgQUCAMQQFHQQAgACAIIAIgBkEMaiAGQQhqEEwiByIDa0EAIAMQAxtBCkdyRQRAQbh/IQcMBAsgBxADDQMgAiAHayECIAcgCGohCEEBIQwgBigCDCEDIAYoAgghBAwBCwsgBiADNgIMIAYgBDYCCEG4fyEHIAQNASAIIAFrIQcMAQsgBiADNgIMIAYgBDYCCAsgBkEQaiQAIAcLRgECfyABIAAoArjgASICRwRAIAAgAjYCxOABIAAgATYCuOABIAAoArzgASEDIAAgATYCvOABIAAgASADIAJrajYCwOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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';\n\n/**\n * Loader for KTX 2.0 GPU Texture containers.\n *\n * KTX 2.0 is a container format for various GPU texture formats. The loader\n * supports Basis Universal GPU textures, which can be quickly transcoded to\n * a wide variety of GPU texture compression formats. While KTX 2.0 also allows\n * other hardware-specific formats, this loader does not yet parse them.\n *\n * This loader parses the KTX 2.0 container and then relies on\n * THREE.BasisTextureLoader to complete the transcoding process.\n *\n * References:\n * - KTX: http://github.khronos.org/KTX-Specification/\n * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor\n */\n\nclass KTX2Loader extends CompressedTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.basisLoader = new BasisTextureLoader( manager );\n\t\tthis.zstd = new ZSTDDecoder();\n\n\t\tthis.zstd.init();\n\n\t\tif ( typeof MSC_TRANSCODER !== 'undefined' ) {\n\n\t\t\tconsole.warn(\n\n\t\t\t\t'THREE.KTX2Loader: Please update to latest \"basis_transcoder\".'\n\t\t\t\t+ ' \"msc_basis_transcoder\" is no longer supported in three.js r125+.'\n\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\tsetTranscoderPath( path ) {\n\n\t\tthis.basisLoader.setTranscoderPath( path );\n\n\t\treturn this;\n\n\t}\n\n\tsetWorkerLimit( path ) {\n\n\t\tthis.basisLoader.setWorkerLimit( path );\n\n\t\treturn this;\n\n\t}\n\n\tdetectSupport( renderer ) {\n\n\t\tthis.basisLoader.detectSupport( renderer );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.basisLoader.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texture = new CompressedTexture();\n\n\t\tvar bufferPending = new Promise( function ( resolve, reject ) {\n\n\t\t\tnew FileLoader( scope.manager )\n\t\t\t\t.setPath( scope.path )\n\t\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t\t.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t\tbufferPending\n\t\t\t.then( function ( buffer ) {\n\n\t\t\t\tscope.parse( buffer, function ( _texture ) {\n\n\t\t\t\t\ttexture.copy( _texture );\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}, onError );\n\n\t\t\t} )\n\t\t\t.catch( onError );\n\n\t\treturn texture;\n\n\t}\n\n\tparse( buffer, onLoad, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar ktx = p( new Uint8Array( buffer ) );\n\n\t\tif ( ktx.pixelDepth > 0 ) {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Only 2D textures are currently supported.' );\n\n\t\t}\n\n\t\tif ( ktx.layerCount > 1 ) {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Array textures are not currently supported.' );\n\n\t\t}\n\n\t\tif ( ktx.faceCount > 1 ) {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Cube textures are not currently supported.' );\n\n\t\t}\n\n\t\tvar dfd = KTX2Utils.getBasicDFD( ktx );\n\n\t\tKTX2Utils.createLevels( ktx, this.zstd ).then( function ( levels ) {\n\n\t\t\tvar basisFormat = dfd.colorModel === s.UASTC\n\t\t\t\t? BasisTextureLoader.BasisFormat.UASTC_4x4\n\t\t\t\t: BasisTextureLoader.BasisFormat.ETC1S;\n\n\t\t\tvar parseConfig = {\n\n\t\t\t\tlevels: levels,\n\t\t\t\twidth: ktx.pixelWidth,\n\t\t\t\theight: ktx.pixelHeight,\n\t\t\t\tbasisFormat: basisFormat,\n\t\t\t\thasAlpha: KTX2Utils.getAlpha( ktx ),\n\n\t\t\t};\n\n\t\t\tif ( basisFormat === BasisTextureLoader.BasisFormat.ETC1S ) {\n\n\t\t\t\tparseConfig.globalData = ktx.globalData;\n\n\t\t\t}\n\n\t\t\treturn scope.basisLoader.parseInternalAsync( parseConfig );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\ttexture.encoding = dfd.transferFunction === r.SRGB\n\t\t\t\t? sRGBEncoding\n\t\t\t\t: LinearEncoding;\n\t\t\ttexture.premultiplyAlpha = KTX2Utils.getPremultiplyAlpha( ktx );\n\n\t\t\tonLoad( texture );\n\n\t\t} ).catch( onError );\n\n\t\treturn this;\n\n\t}\n\n}\n\nvar KTX2Utils = {\n\n\tcreateLevels: async function ( ktx, zstd ) {\n\n\t\tif ( ktx.supercompressionScheme === n.ZSTD ) {\n\n\t\t\tawait zstd.init();\n\n\t\t}\n\n\t\tvar levels = [];\n\t\tvar width = ktx.pixelWidth;\n\t\tvar height = ktx.pixelHeight;\n\n\t\tfor ( var levelIndex = 0; levelIndex < ktx.levels.length; levelIndex ++ ) {\n\n\t\t\tvar levelWidth = Math.max( 1, Math.floor( width / Math.pow( 2, levelIndex ) ) );\n\t\t\tvar levelHeight = Math.max( 1, Math.floor( height / Math.pow( 2, levelIndex ) ) );\n\t\t\tvar levelData = ktx.levels[ levelIndex ].levelData;\n\n\t\t\tif ( ktx.supercompressionScheme === n.ZSTD ) {\n\n\t\t\t\tlevelData = zstd.decode( levelData, ktx.levels[ levelIndex ].uncompressedByteLength );\n\n\t\t\t}\n\n\t\t\tlevels.push( {\n\n\t\t\t\tindex: levelIndex,\n\t\t\t\twidth: levelWidth,\n\t\t\t\theight: levelHeight,\n\t\t\t\tdata: levelData,\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn levels;\n\n\t},\n\n\tgetBasicDFD: function ( ktx ) {\n\n\t\t// Basic Data Format Descriptor Block is always the first DFD.\n\t\treturn ktx.dataFormatDescriptor[ 0 ];\n\n\t},\n\n\tgetAlpha: function ( ktx ) {\n\n\t\tvar dfd = this.getBasicDFD( ktx );\n\n\t\t// UASTC\n\n\t\tif ( dfd.colorModel === s.UASTC ) {\n\n\t\t\tif ( ( dfd.samples[ 0 ].channelID & 0xF ) === f.RGBA ) {\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\t// ETC1S\n\n\t\tif ( dfd.samples.length === 2\n\t\t\t&& ( dfd.samples[ 1 ].channelID & 0xF ) === l.AAA ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tgetPremultiplyAlpha: function ( ktx ) {\n\n\t\tvar dfd = this.getBasicDFD( ktx );\n\n\t\treturn !! ( dfd.flags & o.ALPHA_PREMULTIPLIED );\n\n\t},\n\n};\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar _a$c, _b$b;\nconst $retainerCount = Symbol('retainerCount');\nconst $recentlyUsed = Symbol('recentlyUsed');\nconst $evict = Symbol('evict');\nconst $evictionThreshold = Symbol('evictionThreshold');\nconst $cache = Symbol('cache');\n/**\n * The CacheEvictionPolicy manages the lifecycle for items in a cache,\n * evicting any items outside some threshold bounds in \"recently used\" order,\n * if they are evictable.\n *\n * Items are considered cached as they are retained. When all retainers\n * of an item release it, that item is considered evictable.\n */\nclass CacheEvictionPolicy {\n constructor(cache, evictionThreshold = 5) {\n this[_a$c] = new Map();\n this[_b$b] = [];\n this[$cache] = cache;\n this[$evictionThreshold] = evictionThreshold;\n }\n /**\n * The eviction threshold is the maximum number of items to hold\n * in cache indefinitely. Items within the threshold (in recently\n * used order) will continue to be cached even if they have zero\n * retainers.\n */\n set evictionThreshold(value) {\n this[$evictionThreshold] = value;\n this[$evict]();\n }\n get evictionThreshold() {\n return this[$evictionThreshold];\n }\n /**\n * A reference to the cache that operates under this policy\n */\n get cache() {\n return this[$cache];\n }\n /**\n * Given an item key, returns the number of retainers of that item\n */\n retainerCount(key) {\n return this[$retainerCount].get(key) || 0;\n }\n /**\n * Resets the internal tracking of cache item retainers. Use only in cases\n * where it is certain that all retained cache items have been accounted for!\n */\n reset() {\n this[$retainerCount].clear();\n this[$recentlyUsed] = [];\n }\n /**\n * Mark a given cache item as retained, where the item is represented\n * by its key. An item can have any number of retainers.\n */\n retain(key) {\n if (!this[$retainerCount].has(key)) {\n this[$retainerCount].set(key, 0);\n }\n this[$retainerCount].set(key, this[$retainerCount].get(key) + 1);\n const recentlyUsedIndex = this[$recentlyUsed].indexOf(key);\n if (recentlyUsedIndex !== -1) {\n this[$recentlyUsed].splice(recentlyUsedIndex, 1);\n }\n this[$recentlyUsed].unshift(key);\n // Evict, in case retaining a new item pushed an evictable item beyond the\n // eviction threshold\n this[$evict]();\n }\n /**\n * Mark a given cache item as released by one of its retainers, where the item\n * is represented by its key. When all retainers of an item have released it,\n * the item is considered evictable.\n */\n release(key) {\n if (this[$retainerCount].has(key)) {\n this[$retainerCount].set(key, Math.max(this[$retainerCount].get(key) - 1, 0));\n }\n this[$evict]();\n }\n [(_a$c = $retainerCount, _b$b = $recentlyUsed, $evict)]() {\n if (this[$recentlyUsed].length < this[$evictionThreshold]) {\n return;\n }\n for (let i = this[$recentlyUsed].length - 1; i >= this[$evictionThreshold]; --i) {\n const key = this[$recentlyUsed][i];\n const retainerCount = this[$retainerCount].get(key);\n if (retainerCount === 0) {\n this[$cache].delete(key);\n this[$recentlyUsed].splice(i, 1);\n }\n }\n }\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar _a$b, _b$a;\n/**\n * A helper to Promise-ify a Three.js GLTFLoader\n */\nconst loadWithLoader = (url, loader, progressCallback = () => { }) => {\n const onProgress = (event) => {\n const fraction = event.loaded / event.total;\n progressCallback(Math.max(0, Math.min(1, isFinite(fraction) ? fraction : 1)));\n };\n return new Promise((resolve, reject) => {\n loader.load(url, resolve, onProgress, reject);\n });\n};\nconst cache = new Map();\nconst preloaded = new Map();\nlet dracoDecoderLocation;\nconst dracoLoader = new DRACOLoader();\nlet ktx2TranscoderLocation;\nconst ktx2Loader = new KTX2Loader();\nconst $loader = Symbol('loader');\nconst $evictionPolicy = Symbol('evictionPolicy');\nconst $GLTFInstance = Symbol('GLTFInstance');\nclass CachingGLTFLoader extends EventDispatcher {\n constructor(GLTFInstance) {\n super();\n this[_b$a] = new GLTFLoader();\n this[$GLTFInstance] = GLTFInstance;\n this[$loader].setDRACOLoader(dracoLoader);\n this[$loader].setKTX2Loader(ktx2Loader);\n }\n static setDRACODecoderLocation(url) {\n dracoDecoderLocation = url;\n dracoLoader.setDecoderPath(url);\n }\n static getDRACODecoderLocation() {\n return dracoDecoderLocation;\n }\n static setKTX2TranscoderLocation(url) {\n ktx2TranscoderLocation = url;\n ktx2Loader.setTranscoderPath(url);\n }\n static getKTX2TranscoderLocation() {\n return ktx2TranscoderLocation;\n }\n static initializeKTX2Loader(renderer) {\n ktx2Loader.detectSupport(renderer);\n }\n static get cache() {\n return cache;\n }\n /** @nocollapse */\n static clearCache() {\n cache.forEach((_value, url) => {\n this.delete(url);\n });\n this[$evictionPolicy].reset();\n }\n static has(url) {\n return cache.has(url);\n }\n /** @nocollapse */\n static async delete(url) {\n if (!this.has(url)) {\n return;\n }\n const gltfLoads = cache.get(url);\n preloaded.delete(url);\n cache.delete(url);\n const gltf = await gltfLoads;\n // Dispose of the cached glTF's materials and geometries:\n gltf.dispose();\n }\n /**\n * Returns true if the model that corresponds to the specified url is\n * available in our local cache.\n */\n static hasFinishedLoading(url) {\n return !!preloaded.get(url);\n }\n get [(_a$b = $evictionPolicy, _b$a = $loader, $evictionPolicy)]() {\n return this.constructor[$evictionPolicy];\n }\n /**\n * Preloads a glTF, populating the cache. Returns a promise that resolves\n * when the cache is populated.\n */\n async preload(url, element, progressCallback = () => { }) {\n this.dispatchEvent({ type: 'preload', element: element, src: url });\n if (!cache.has(url)) {\n const rawGLTFLoads = loadWithLoader(url, this[$loader], (progress) => {\n progressCallback(progress * 0.8);\n });\n const GLTFInstance = this[$GLTFInstance];\n const gltfInstanceLoads = rawGLTFLoads\n .then((rawGLTF) => {\n return GLTFInstance.prepare(rawGLTF);\n })\n .then((preparedGLTF) => {\n progressCallback(0.9);\n return new GLTFInstance(preparedGLTF);\n });\n cache.set(url, gltfInstanceLoads);\n }\n await cache.get(url);\n preloaded.set(url, true);\n if (progressCallback) {\n progressCallback(1.0);\n }\n }\n /**\n * Loads a glTF from the specified url and resolves a unique clone of the\n * glTF. If the glTF has already been loaded, makes a clone of the cached\n * copy.\n */\n async load(url, element, progressCallback = () => { }) {\n await this.preload(url, element, progressCallback);\n const gltf = await cache.get(url);\n const clone = await gltf.clone();\n this[$evictionPolicy].retain(url);\n // Patch dispose so that we can properly account for instance use\n // in the caching layer:\n clone.dispose = (() => {\n const originalDispose = clone.dispose;\n let disposed = false;\n return () => {\n if (disposed) {\n return;\n }\n disposed = true;\n originalDispose.apply(clone);\n this[$evictionPolicy].release(url);\n };\n })();\n return clone;\n }\n}\nCachingGLTFLoader[_a$b] = new CacheEvictionPolicy(CachingGLTFLoader);\n\nclass CSS2DObject extends Object3D {\n\n \tconstructor( element ) {\n\n\t\tsuper();\n\n\t\tthis.element = element || document.createElement( 'div' );\n\n\t\tthis.element.style.position = 'absolute';\n\n\t\tthis.addEventListener( 'removed', function () {\n\n\t\t\tthis.traverse( function ( object ) {\n\n\t\t\t\tif ( object.element instanceof Element && object.element.parentNode !== null ) {\n\n\t\t\t\t\tobject.element.parentNode.removeChild( object.element );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.element = source.element.cloneNode( true );\n\n\t\treturn this;\n\n\t}\n\n}\n\nCSS2DObject.prototype.isCSS2DObject = true;\n\n//\n\nconst _vector = new Vector3();\nconst _viewMatrix = new Matrix4();\nconst _viewProjectionMatrix = new Matrix4();\nconst _a$a = new Vector3();\nconst _b$9 = new Vector3();\n\nclass CSS2DRenderer {\n\n\tconstructor() {\n\n\t\tconst _this = this;\n\n\t\tlet _width, _height;\n\t\tlet _widthHalf, _heightHalf;\n\n\t\tconst cache = {\n\t\t\tobjects: new WeakMap()\n\t\t};\n\n\t\tconst domElement = document.createElement( 'div' );\n\t\tdomElement.style.overflow = 'hidden';\n\n\t\tthis.domElement = domElement;\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width,\n\t\t\t\theight: _height\n\t\t\t};\n\n\t\t};\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\t\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t\t_viewMatrix.copy( camera.matrixWorldInverse );\n\t\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\n\n\t\t\trenderObject( scene, scene, camera );\n\t\t\tzOrder( scene );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_widthHalf = _width / 2;\n\t\t\t_heightHalf = _height / 2;\n\n\t\t\tdomElement.style.width = width + 'px';\n\t\t\tdomElement.style.height = height + 'px';\n\n\t\t};\n\n\t\tfunction renderObject( object, scene, camera ) {\n\n\t\t\tif ( object.isCSS2DObject ) {\n\n\t\t\t\tobject.onBeforeRender( _this, scene, camera );\n\n\t\t\t\t_vector.setFromMatrixPosition( object.matrixWorld );\n\t\t\t\t_vector.applyMatrix4( _viewProjectionMatrix );\n\n\t\t\t\tconst element = object.element;\n\n\t\t\t\tif ( /apple/i.test( navigator.vendor ) ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/21415\n\t\t\t\t\telement.style.transform = 'translate(-50%,-50%) translate(' + Math.round( _vector.x * _widthHalf + _widthHalf ) + 'px,' + Math.round( - _vector.y * _heightHalf + _heightHalf ) + 'px)';\n\n\t\t\t\t} else {\n\n\t\t\t\t\telement.style.transform = 'translate(-50%,-50%) translate(' + ( _vector.x * _widthHalf + _widthHalf ) + 'px,' + ( - _vector.y * _heightHalf + _heightHalf ) + 'px)';\n\n\t\t\t\t}\n\n\t\t\t\telement.style.display = ( object.visible && _vector.z >= - 1 && _vector.z <= 1 ) ? '' : 'none';\n\n\t\t\t\tconst objectData = {\n\t\t\t\t\tdistanceToCameraSquared: getDistanceToSquared( camera, object )\n\t\t\t\t};\n\n\t\t\t\tcache.objects.set( object, objectData );\n\n\t\t\t\tif ( element.parentNode !== domElement ) {\n\n\t\t\t\t\tdomElement.appendChild( element );\n\n\t\t\t\t}\n\n\t\t\t\tobject.onAfterRender( _this, scene, camera );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\trenderObject( object.children[ i ], scene, camera );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getDistanceToSquared( object1, object2 ) {\n\n\t\t\t_a$a.setFromMatrixPosition( object1.matrixWorld );\n\t\t\t_b$9.setFromMatrixPosition( object2.matrixWorld );\n\n\t\t\treturn _a$a.distanceToSquared( _b$9 );\n\n\t\t}\n\n\t\tfunction filterAndFlatten( scene ) {\n\n\t\t\tconst result = [];\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tif ( object.isCSS2DObject ) result.push( object );\n\n\t\t\t} );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction zOrder( scene ) {\n\n\t\t\tconst sorted = filterAndFlatten( scene ).sort( function ( a, b ) {\n\n\t\t\t\tconst distanceA = cache.objects.get( a ).distanceToCameraSquared;\n\t\t\t\tconst distanceB = cache.objects.get( b ).distanceToCameraSquared;\n\n\t\t\t\treturn distanceA - distanceB;\n\n\t\t\t} );\n\n\t\t\tconst zMax = sorted.length;\n\n\t\t\tfor ( let i = 0, l = sorted.length; i < l; i ++ ) {\n\n\t\t\t\tsorted[ i ].element.style.zIndex = zMax - i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst deserializeUrl = (url) => (!!url && url !== 'null') ? toFullUrl(url) : null;\nconst assertIsArCandidate = () => {\n if (IS_WEBXR_AR_CANDIDATE) {\n return;\n }\n const missingApis = [];\n if (!HAS_WEBXR_DEVICE_API) {\n missingApis.push('WebXR Device API');\n }\n if (!HAS_WEBXR_HIT_TEST_API) {\n missingApis.push('WebXR Hit Test API');\n }\n throw new Error(`The following APIs are required for AR, but are missing in this browser: ${missingApis.join(', ')}`);\n};\n/**\n * Converts a partial URL string to a fully qualified URL string.\n *\n * @param {String} url\n * @return {String}\n */\nconst toFullUrl = (partialUrl) => {\n const url = new URL(partialUrl, window.location.toString());\n return url.toString();\n};\n/**\n * Returns a throttled version of a given function that is only invoked at most\n * once within a given threshold of time in milliseconds.\n *\n * The throttled version of the function has a \"flush\" property that resets the\n * threshold for cases when immediate invokation is desired.\n */\nconst throttle = (fn, ms) => {\n let timer = null;\n const throttled = (...args) => {\n if (timer != null) {\n return;\n }\n fn(...args);\n timer = self.setTimeout(() => timer = null, ms);\n };\n throttled.flush = () => {\n if (timer != null) {\n self.clearTimeout(timer);\n timer = null;\n }\n };\n return throttled;\n};\nconst debounce = (fn, ms) => {\n let timer = null;\n return (...args) => {\n if (timer != null) {\n self.clearTimeout(timer);\n }\n timer = self.setTimeout(() => {\n timer = null;\n fn(...args);\n }, ms);\n };\n};\n/**\n * @param {Number} value\n * @param {Number} lowerLimit\n * @param {Number} upperLimit\n * @return {Number} value clamped within lowerLimit..upperLimit\n */\nconst clamp = (value, lowerLimit, upperLimit) => Math.max(lowerLimit, Math.min(upperLimit, value));\n// The DPR we use for a \"capped\" scenario (see resolveDpr below):\nconst CAPPED_DEVICE_PIXEL_RATIO = 1;\n/**\n * This helper analyzes the layout of the current page to decide if we should\n * use the natural device pixel ratio, or a capped value.\n *\n * We cap DPR if there is no meta viewport (suggesting that user is not\n * consciously specifying how to scale the viewport relative to the device\n * screen size).\n *\n * The rationale is that this condition typically leads to a pathological\n * outcome on mobile devices. When the window dimensions are scaled up on a\n * device with a high DPR, we create a canvas that is much larger than\n * appropriate to accomodate for the pixel density if we naively use the\n * reported DPR.\n *\n * This value needs to be measured in real time, as device pixel ratio can\n * change over time (e.g., when a user zooms the page). Also, in some cases\n * (such as Firefox on Android), the window's innerWidth is initially reported\n * as the same as the screen's availWidth but changes later.\n *\n * A user who specifies a meta viewport, thereby consciously creating scaling\n * conditions where is slow, will be encouraged to live their\n * best life.\n */\nconst resolveDpr = (() => {\n // If true, implies that the user is conscious of the viewport scaling\n // relative to the device screen size.\n const HAS_META_VIEWPORT_TAG = (() => {\n const metas = document.head != null ?\n Array.from(document.head.querySelectorAll('meta')) :\n [];\n for (const meta of metas) {\n if (meta.name === 'viewport') {\n return true;\n }\n }\n return false;\n })();\n if (!HAS_META_VIEWPORT_TAG) {\n console.warn('No detected; will cap pixel density at 1.');\n }\n return () => HAS_META_VIEWPORT_TAG ? window.devicePixelRatio :\n CAPPED_DEVICE_PIXEL_RATIO;\n})();\n/**\n * Debug mode is enabled when one of the two following conditions is true:\n *\n * 1. A 'model-viewer-debug-mode' query parameter is present in the current\n * search string\n * 2. There is a global object ModelViewerElement with a debugMode property set\n * to true\n */\nconst isDebugMode = (() => {\n const debugQueryParameterName = 'model-viewer-debug-mode';\n const debugQueryParameter = new RegExp(`[\\?&]${debugQueryParameterName}(&|$)`);\n return () => (self.ModelViewerElement &&\n self.ModelViewerElement.debugMode) ||\n (self.location && self.location.search &&\n self.location.search.match(debugQueryParameter));\n})();\n/**\n * Returns the first key in a Map in iteration order.\n *\n * NOTE(cdata): This is necessary because IE11 does not implement iterator\n * methods of Map, and polymer-build does not polyfill these methods for\n * compatibility and performance reasons. This helper proposes that it is\n * a reasonable compromise to sacrifice a very small amount of runtime\n * performance in IE11 for the sake of code clarity.\n */\nconst getFirstMapKey = (map) => {\n if (map.keys != null) {\n return map.keys().next().value || null;\n }\n let firstKey = null;\n try {\n map.forEach((_value, key, _map) => {\n firstKey = key;\n // Stop iterating the Map with forEach:\n throw new Error();\n });\n }\n catch (_error) {\n }\n return firstKey;\n};\nconst timePasses = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms));\n/**\n * @param {EventTarget|EventDispatcher} target\n * @param {string} eventName\n * @param {?Function} predicate\n */\nconst waitForEvent = (target, eventName, predicate = null) => new Promise(resolve => {\n function handler(event) {\n if (!predicate || predicate(event)) {\n resolve(event);\n target.removeEventListener(eventName, handler);\n }\n }\n target.addEventListener(eventName, handler);\n});\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst SETTLING_TIME = 10000; // plenty long enough\nconst MIN_DECAY_MILLISECONDS = 0.001;\nconst DECAY_MILLISECONDS = 50;\n/**\n * The Damper class is a generic second-order critically damped system that does\n * one linear step of the desired length of time. The only parameter is\n * DECAY_MILLISECONDS. This common parameter makes all states converge at the\n * same rate regardless of scale. xNormalization is a number to provide the\n * rough scale of x, such that NIL_SPEED clamping also happens at roughly the\n * same convergence for all states.\n */\nclass Damper {\n constructor(decayMilliseconds = DECAY_MILLISECONDS) {\n this.velocity = 0;\n this.naturalFrequency = 0;\n this.setDecayTime(decayMilliseconds);\n }\n setDecayTime(decayMilliseconds) {\n this.naturalFrequency =\n 1 / Math.max(MIN_DECAY_MILLISECONDS, decayMilliseconds);\n }\n update(x, xGoal, timeStepMilliseconds, xNormalization) {\n const nilSpeed = 0.0002 * this.naturalFrequency;\n if (x == null || xNormalization === 0) {\n return xGoal;\n }\n if (x === xGoal && this.velocity === 0) {\n return xGoal;\n }\n if (timeStepMilliseconds < 0) {\n return x;\n }\n // Exact solution to a critically damped second-order system, where:\n // acceleration = this.naturalFrequency * this.naturalFrequency * (xGoal\n // - x) - 2 * this.naturalFrequency * this.velocity;\n const deltaX = (x - xGoal);\n const intermediateVelocity = this.velocity + this.naturalFrequency * deltaX;\n const intermediateX = deltaX + timeStepMilliseconds * intermediateVelocity;\n const decay = Math.exp(-this.naturalFrequency * timeStepMilliseconds);\n const newVelocity = (intermediateVelocity - this.naturalFrequency * intermediateX) * decay;\n const acceleration = -this.naturalFrequency * (newVelocity + intermediateVelocity * decay);\n if (Math.abs(newVelocity) < nilSpeed * Math.abs(xNormalization) &&\n acceleration * deltaX >= 0) {\n // This ensures the controls settle and stop calling this function instead\n // of asymptotically approaching their goal.\n this.velocity = 0;\n return xGoal;\n }\n else {\n this.velocity = newVelocity;\n return xGoal + intermediateX * decay;\n }\n }\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst numberNode = (value, unit) => ({ type: 'number', number: value, unit });\n/**\n * Given a string representing a comma-separated set of CSS-like expressions,\n * parses and returns an array of ASTs that correspond to those expressions.\n *\n * Currently supported syntax includes:\n *\n * - functions (top-level and nested)\n * - calc() arithmetic operators\n * - numbers with units\n * - hexidecimal-encoded colors in 3, 6 or 8 digit form\n * - idents\n *\n * All syntax is intended to match the parsing rules and semantics of the actual\n * CSS spec as closely as possible.\n *\n * @see https://www.w3.org/TR/CSS2/\n * @see https://www.w3.org/TR/css-values-3/\n */\nconst parseExpressions = (() => {\n const cache = {};\n const MAX_PARSE_ITERATIONS = 1000; // Arbitrarily large\n return (inputString) => {\n const cacheKey = inputString;\n if (cacheKey in cache) {\n return cache[cacheKey];\n }\n const expressions = [];\n let parseIterations = 0;\n while (inputString) {\n if (++parseIterations > MAX_PARSE_ITERATIONS) {\n // Avoid a potentially infinite loop due to typos:\n inputString = '';\n break;\n }\n const expressionParseResult = parseExpression(inputString);\n const expression = expressionParseResult.nodes[0];\n if (expression == null || expression.terms.length === 0) {\n break;\n }\n expressions.push(expression);\n inputString = expressionParseResult.remainingInput;\n }\n return cache[cacheKey] = expressions;\n };\n})();\n/**\n * Parse a single expression. For the purposes of our supported syntax, an\n * expression is the set of semantically meaningful terms that appear before the\n * next comma, or between the parens of a function invokation.\n */\nconst parseExpression = (() => {\n const IS_IDENT_RE = /^(\\-\\-|[a-z\\u0240-\\uffff])/i;\n const IS_OPERATOR_RE = /^([\\*\\+\\/]|[\\-]\\s)/i;\n const IS_EXPRESSION_END_RE = /^[\\),]/;\n const FUNCTION_ARGUMENTS_FIRST_TOKEN = '(';\n const HEX_FIRST_TOKEN = '#';\n return (inputString) => {\n const terms = [];\n while (inputString.length) {\n inputString = inputString.trim();\n if (IS_EXPRESSION_END_RE.test(inputString)) {\n break;\n }\n else if (inputString[0] === FUNCTION_ARGUMENTS_FIRST_TOKEN) {\n const { nodes, remainingInput } = parseFunctionArguments(inputString);\n inputString = remainingInput;\n terms.push({\n type: 'function',\n name: { type: 'ident', value: 'calc' },\n arguments: nodes\n });\n }\n else if (IS_IDENT_RE.test(inputString)) {\n const identParseResult = parseIdent(inputString);\n const identNode = identParseResult.nodes[0];\n inputString = identParseResult.remainingInput;\n if (inputString[0] === FUNCTION_ARGUMENTS_FIRST_TOKEN) {\n const { nodes, remainingInput } = parseFunctionArguments(inputString);\n terms.push({ type: 'function', name: identNode, arguments: nodes });\n inputString = remainingInput;\n }\n else {\n terms.push(identNode);\n }\n }\n else if (IS_OPERATOR_RE.test(inputString)) {\n // Operators are always a single character, so just pluck them out:\n terms.push({ type: 'operator', value: inputString[0] });\n inputString = inputString.slice(1);\n }\n else {\n const { nodes, remainingInput } = inputString[0] === HEX_FIRST_TOKEN ?\n parseHex(inputString) :\n parseNumber(inputString);\n // The remaining string may not have had any meaningful content. Exit\n // early if this is the case:\n if (nodes.length === 0) {\n break;\n }\n terms.push(nodes[0]);\n inputString = remainingInput;\n }\n }\n return { nodes: [{ type: 'expression', terms }], remainingInput: inputString };\n };\n})();\n/**\n * An ident is something like a function name or the keyword \"auto\".\n */\nconst parseIdent = (() => {\n const NOT_IDENT_RE = /[^a-z^0-9^_^\\-^\\u0240-\\uffff]/i;\n return (inputString) => {\n const match = inputString.match(NOT_IDENT_RE);\n const ident = match == null ? inputString : inputString.substr(0, match.index);\n const remainingInput = match == null ? '' : inputString.substr(match.index);\n return { nodes: [{ type: 'ident', value: ident }], remainingInput };\n };\n})();\n/**\n * Parses a number. A number value can be expressed with an integer or\n * non-integer syntax, and usually includes a unit (but does not strictly\n * require one for our purposes).\n */\nconst parseNumber = (() => {\n // @see https://www.w3.org/TR/css-syntax/#number-token-diagram\n const VALUE_RE = /[\\+\\-]?(\\d+[\\.]\\d+|\\d+|[\\.]\\d+)([eE][\\+\\-]?\\d+)?/;\n const UNIT_RE = /^[a-z%]+/i;\n const ALLOWED_UNITS = /^(m|mm|cm|rad|deg|[%])$/;\n return (inputString) => {\n const valueMatch = inputString.match(VALUE_RE);\n const value = valueMatch == null ? '0' : valueMatch[0];\n inputString = value == null ? inputString : inputString.slice(value.length);\n const unitMatch = inputString.match(UNIT_RE);\n let unit = unitMatch != null && unitMatch[0] !== '' ? unitMatch[0] : null;\n const remainingInput = unitMatch == null ? inputString : inputString.slice(unit.length);\n if (unit != null && !ALLOWED_UNITS.test(unit)) {\n unit = null;\n }\n return {\n nodes: [{\n type: 'number',\n number: parseFloat(value) || 0,\n unit: unit\n }],\n remainingInput\n };\n };\n})();\n/**\n * Parses a hexidecimal-encoded color in 3, 6 or 8 digit form.\n */\nconst parseHex = (() => {\n // TODO(cdata): right now we don't actually enforce the number of digits\n const HEX_RE = /^[a-f0-9]*/i;\n return (inputString) => {\n inputString = inputString.slice(1).trim();\n const hexMatch = inputString.match(HEX_RE);\n const nodes = hexMatch == null ? [] : [{ type: 'hex', value: hexMatch[0] }];\n return {\n nodes,\n remainingInput: hexMatch == null ? inputString :\n inputString.slice(hexMatch[0].length)\n };\n };\n})();\n/**\n * Parses arguments passed to a function invokation (e.g., the expressions\n * within a matched set of parens).\n */\nconst parseFunctionArguments = (inputString) => {\n const expressionNodes = [];\n // Consume the opening paren\n inputString = inputString.slice(1).trim();\n while (inputString.length) {\n const expressionParseResult = parseExpression(inputString);\n expressionNodes.push(expressionParseResult.nodes[0]);\n inputString = expressionParseResult.remainingInput.trim();\n if (inputString[0] === ',') {\n inputString = inputString.slice(1).trim();\n }\n else if (inputString[0] === ')') {\n // Consume the closing paren and stop parsing\n inputString = inputString.slice(1);\n break;\n }\n }\n return { nodes: expressionNodes, remainingInput: inputString };\n};\nconst $visitedTypes = Symbol('visitedTypes');\n/**\n * An ASTWalker walks an array of ASTs such as the type produced by\n * parseExpressions and invokes a callback for a configured set of nodes that\n * the user wishes to \"visit\" during the walk.\n */\nclass ASTWalker {\n constructor(visitedTypes) {\n this[$visitedTypes] = visitedTypes;\n }\n /**\n * Walk the given set of ASTs, and invoke the provided callback for nodes that\n * match the filtered set that the ASTWalker was constructed with.\n */\n walk(ast, callback) {\n const remaining = ast.slice();\n while (remaining.length) {\n const next = remaining.shift();\n if (this[$visitedTypes].indexOf(next.type) > -1) {\n callback(next);\n }\n switch (next.type) {\n case 'expression':\n remaining.unshift(...next.terms);\n break;\n case 'function':\n remaining.unshift(next.name, ...next.arguments);\n break;\n }\n }\n }\n}\nconst ZERO = Object.freeze({ type: 'number', number: 0, unit: null });\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Ensures that a given number is expressed in radians. If the number is already\n * in radians, does nothing. If the value is in degrees, converts it to radians.\n * If the value has no specified unit, the unit is assumed to be radians. If the\n * value is not in radians or degrees, the value is resolved as 0 radians.\n *\n * Also accepts a second argument that is a default value to use if the input\n * numberNode number is NaN or Infinity.\n */\nconst degreesToRadians = (numberNode, fallbackRadianValue = 0) => {\n let { number, unit } = numberNode;\n if (!isFinite(number)) {\n number = fallbackRadianValue;\n unit = 'rad';\n }\n else if (numberNode.unit === 'rad' || numberNode.unit == null) {\n return numberNode;\n }\n const valueIsDegrees = unit === 'deg' && number != null;\n const value = valueIsDegrees ? number : 0;\n const radians = value * Math.PI / 180;\n return { type: 'number', number: radians, unit: 'rad' };\n};\n/**\n * Converts a given length to meters. Currently supported input units are\n * meters, centimeters and millimeters.\n *\n * Also accepts a second argument that is a default value to use if the input\n * numberNode number is NaN or Infinity.\n */\nconst lengthToBaseMeters = (numberNode, fallbackMeterValue = 0) => {\n let { number, unit } = numberNode;\n if (!isFinite(number)) {\n number = fallbackMeterValue;\n unit = 'm';\n }\n else if (numberNode.unit === 'm') {\n return numberNode;\n }\n let scale;\n switch (unit) {\n default:\n scale = 1;\n break;\n case 'cm':\n scale = 1 / 100;\n break;\n case 'mm':\n scale = 1 / 1000;\n break;\n }\n const value = scale * number;\n return { type: 'number', number: value, unit: 'm' };\n};\n/**\n * Normalizes the unit of a given input number so that it is expressed in a\n * preferred unit. For length nodes, the return value will be expressed in\n * meters. For angle nodes, the return value will be expressed in radians.\n *\n * Also takes a fallback number that is used when the number value is not a\n * valid number or when the unit of the given number cannot be normalized.\n */\nconst normalizeUnit = (() => {\n const identity = (node) => node;\n const unitNormalizers = {\n 'rad': identity,\n 'deg': degreesToRadians,\n 'm': identity,\n 'mm': lengthToBaseMeters,\n 'cm': lengthToBaseMeters\n };\n return (node, fallback = ZERO) => {\n let { number, unit } = node;\n if (!isFinite(number)) {\n number = fallback.number;\n unit = fallback.unit;\n }\n if (unit == null) {\n return node;\n }\n const normalize = unitNormalizers[unit];\n if (normalize == null) {\n return fallback;\n }\n return normalize(node);\n };\n})();\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The Hotspot object is a reference-counted slot. If decrement() returns true,\n * it should be removed from the tree so it can be garbage-collected.\n */\nclass Hotspot extends CSS2DObject {\n constructor(config) {\n super(document.createElement('div'));\n this.normal = new Vector3(0, 1, 0);\n this.initialized = false;\n this.referenceCount = 1;\n this.pivot = document.createElement('div');\n this.slot = document.createElement('slot');\n this.element.classList.add('annotation-wrapper');\n this.slot.name = config.name;\n this.element.appendChild(this.pivot);\n this.pivot.appendChild(this.slot);\n this.updatePosition(config.position);\n this.updateNormal(config.normal);\n }\n get facingCamera() {\n return !this.element.classList.contains('hide');\n }\n /**\n * Sets the hotspot to be in the highly visible foreground state.\n */\n show() {\n if (!this.facingCamera || !this.initialized) {\n this.updateVisibility(true);\n }\n }\n /**\n * Sets the hotspot to be in the diminished background state.\n */\n hide() {\n if (this.facingCamera || !this.initialized) {\n this.updateVisibility(false);\n }\n }\n /**\n * Call this when adding elements to the same slot to keep track.\n */\n increment() {\n this.referenceCount++;\n }\n /**\n * Call this when removing elements from the slot; returns true when the slot\n * is unused.\n */\n decrement() {\n if (this.referenceCount > 0) {\n --this.referenceCount;\n }\n return this.referenceCount === 0;\n }\n /**\n * Change the position of the hotspot to the input string, in the same format\n * as the data-position attribute.\n */\n updatePosition(position) {\n if (position == null)\n return;\n const positionNodes = parseExpressions(position)[0].terms;\n for (let i = 0; i < 3; ++i) {\n this.position.setComponent(i, normalizeUnit(positionNodes[i]).number);\n }\n this.updateMatrixWorld();\n }\n /**\n * Change the hotspot's normal to the input string, in the same format as the\n * data-normal attribute.\n */\n updateNormal(normal) {\n if (normal == null)\n return;\n const normalNodes = parseExpressions(normal)[0].terms;\n for (let i = 0; i < 3; ++i) {\n this.normal.setComponent(i, normalizeUnit(normalNodes[i]).number);\n }\n }\n orient(radians) {\n this.pivot.style.transform = `rotate(${radians}rad)`;\n }\n updateVisibility(show) {\n // NOTE: IE11 doesn't support a second arg for classList.toggle\n if (show) {\n this.element.classList.remove('hide');\n }\n else {\n this.element.classList.add('hide');\n }\n // NOTE: ShadyDOM doesn't support slot.assignedElements, otherwise we could\n // use that here.\n this.slot.assignedNodes().forEach((node) => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const element = node;\n // Visibility attribute can be configured per-node in the hotspot:\n const visibilityAttribute = element.dataset.visibilityAttribute;\n if (visibilityAttribute != null) {\n const attributeName = `data-${visibilityAttribute}`;\n // NOTE: IE11 doesn't support toggleAttribute\n if (show) {\n element.setAttribute(attributeName, '');\n }\n else {\n element.removeAttribute(attributeName);\n }\n }\n element.dispatchEvent(new CustomEvent('hotspot-visibility', {\n detail: {\n visible: show,\n },\n }));\n });\n this.initialized = true;\n }\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Performs a reduction across all the vertices of the input model and all its\n * children. The supplied function takes the reduced value and a vertex and\n * returns the newly reduced value. The value is initialized as zero.\n *\n * Adapted from Three.js, @see https://github.com/mrdoob/three.js/blob/7e0a78beb9317e580d7fa4da9b5b12be051c6feb/src/math/Box3.js#L241\n */\nconst reduceVertices = (model, func, initialValue) => {\n let value = initialValue;\n const vertex = new Vector3();\n model.traverse((object) => {\n let i, l;\n object.updateWorldMatrix(false, false);\n const geometry = object.geometry;\n if (geometry !== undefined) {\n if (geometry.isGeometry) {\n const vertices = geometry.vertices;\n for (i = 0, l = vertices.length; i < l; i++) {\n vertex.copy(vertices[i]);\n vertex.applyMatrix4(object.matrixWorld);\n value = func(value, vertex);\n }\n }\n else if (geometry.isBufferGeometry) {\n const { position } = geometry.attributes;\n if (position !== undefined) {\n for (i = 0, l = position.count; i < l; i++) {\n vertex.fromBufferAttribute(position, i)\n .applyMatrix4(object.matrixWorld);\n value = func(value, vertex);\n }\n }\n }\n }\n });\n return value;\n};\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Nothing within Offset of the bottom of the scene casts a shadow\n// (this is to avoid having a baked-in shadow plane cast its own shadow).\nconst OFFSET = 0.002;\n// The softness [0, 1] of the shadow is mapped to a resolution between\n// 2^LOG_MAX_RESOLUTION and 2^LOG_MIN_RESOLUTION.\nconst LOG_MAX_RESOLUTION = 9;\nconst LOG_MIN_RESOLUTION = 6;\n// Animated models are not in general contained in their bounding box, as this\n// is calculated only for their resting pose. We create a cubic shadow volume\n// for animated models sized to their largest bounding box dimesion multiplied\n// by this scale factor.\nconst ANIMATION_SCALING = 2;\n/**\n * The Shadow class creates a shadow that fits a given scene and follows a\n * target. This shadow will follow the scene without any updates needed so long\n * as the shadow and scene are both parented to the same object (call it the\n * scene) and this scene is passed as the target parameter to the shadow's\n * constructor. We also must constrain the scene to motion within the horizontal\n * plane and call the setRotation() method whenever the scene's Y-axis rotation\n * changes. For motion outside of the horizontal plane, this.needsUpdate must be\n * set to true.\n *\n * The softness of the shadow is controlled by changing its resolution, making\n * softer shadows faster, but less precise.\n */\nclass Shadow extends DirectionalLight {\n constructor(scene, softness, side) {\n super();\n this.shadowMaterial = new ShadowMaterial;\n this.boundingBox = new Box3;\n this.size = new Vector3;\n this.shadowScale = 1;\n this.isAnimated = false;\n this.side = 'bottom';\n this.needsUpdate = false;\n // We use the light only to cast a shadow, not to light the scene.\n this.intensity = 0;\n this.castShadow = true;\n this.frustumCulled = false;\n this.floor = new Mesh(new PlaneGeometry, this.shadowMaterial);\n this.floor.rotateX(-Math.PI / 2);\n this.floor.receiveShadow = true;\n this.floor.castShadow = false;\n this.floor.frustumCulled = false;\n this.add(this.floor);\n scene.target.add(this);\n this.target = scene.target;\n this.setScene(scene, softness, side);\n }\n /**\n * Update the shadow's size and position for a new scene. Softness is also\n * needed, as this controls the shadow's resolution.\n */\n setScene(scene, softness, side) {\n this.side = side;\n this.isAnimated = scene.animationNames.length > 0;\n this.boundingBox.copy(scene.boundingBox);\n this.size.copy(scene.size);\n if (this.side === 'back') {\n const { min, max } = this.boundingBox;\n [min.y, min.z] = [min.z, min.y];\n [max.y, max.z] = [max.z, max.y];\n [this.size.y, this.size.z] = [this.size.z, this.size.y];\n this.rotation.x = Math.PI / 2;\n this.rotation.y = Math.PI;\n }\n const { boundingBox, size } = this;\n if (this.isAnimated) {\n const maxDimension = Math.max(size.x, size.y, size.z) * ANIMATION_SCALING;\n size.y = maxDimension;\n boundingBox.expandByVector(size.subScalar(maxDimension).multiplyScalar(-0.5));\n boundingBox.max.y = boundingBox.min.y + maxDimension;\n size.set(maxDimension, maxDimension, maxDimension);\n }\n boundingBox.getCenter(this.floor.position);\n const shadowOffset = boundingBox.max.y + size.y * OFFSET;\n if (side === 'bottom') {\n this.position.y = shadowOffset;\n this.shadow.camera.up.set(0, 0, 1);\n }\n else {\n this.position.y = 0;\n this.position.z = shadowOffset;\n this.shadow.camera.up.set(0, 1, 0);\n }\n this.setSoftness(softness);\n }\n /**\n * Update the shadow's resolution based on softness (between 0 and 1). Should\n * not be called frequently, as this results in reallocation.\n */\n setSoftness(softness) {\n const resolution = Math.pow(2, LOG_MAX_RESOLUTION -\n softness * (LOG_MAX_RESOLUTION - LOG_MIN_RESOLUTION));\n this.setMapSize(resolution);\n }\n /**\n * Lower-level version of the above function.\n */\n setMapSize(maxMapSize) {\n const { camera, mapSize, map } = this.shadow;\n const { size, boundingBox } = this;\n if (map != null) {\n map.dispose();\n this.shadow.map = null;\n }\n if (this.isAnimated) {\n maxMapSize *= ANIMATION_SCALING;\n }\n const width = Math.floor(size.x > size.z ? maxMapSize : maxMapSize * size.x / size.z);\n const height = Math.floor(size.x > size.z ? maxMapSize * size.z / size.x : maxMapSize);\n mapSize.set(width, height);\n // These pads account for the softening radius around the shadow.\n const widthPad = 2.5 * size.x / width;\n const heightPad = 2.5 * size.z / height;\n camera.left = -boundingBox.max.x - widthPad;\n camera.right = -boundingBox.min.x + widthPad;\n camera.bottom = boundingBox.min.z - heightPad;\n camera.top = boundingBox.max.z + heightPad;\n this.setScaleAndOffset(this.shadowScale, 0);\n this.floor.scale.set(size.x + 2 * widthPad, size.z + 2 * heightPad, 1);\n this.needsUpdate = true;\n }\n /**\n * Set the shadow's intensity (0 to 1), which is just its opacity. Turns off\n * shadow rendering if zero.\n */\n setIntensity(intensity) {\n this.shadowMaterial.opacity = intensity;\n if (intensity > 0) {\n this.visible = true;\n this.floor.visible = true;\n }\n else {\n this.visible = false;\n this.floor.visible = false;\n }\n }\n getIntensity() {\n return this.shadowMaterial.opacity;\n }\n /**\n * The shadow does not rotate with its parent transforms, so the rotation must\n * be manually updated here if it rotates in world space. The input is its\n * absolute orientation about the Y-axis (other rotations are not supported).\n */\n setRotation(radiansY) {\n if (this.side !== 'bottom') {\n // We don't support rotation about a horizontal axis yet.\n this.shadow.updateMatrices(this);\n return;\n }\n this.shadow.camera.up.set(Math.sin(radiansY), 0, Math.cos(radiansY));\n this.shadow.updateMatrices(this);\n }\n /**\n * The scale is also not inherited from parents, so it must be set here in\n * accordance with any transforms. An offset can also be specified to move the\n * shadow vertically relative to the bottom of the scene. Positive is up, so\n * values are generally negative.\n */\n setScaleAndOffset(scale, offset) {\n const sizeY = this.size.y;\n const { camera } = this.shadow;\n this.shadowScale = scale;\n camera.near = 0;\n camera.far = sizeY - offset / scale;\n camera.updateProjectionMatrix();\n camera.scale.setScalar(scale);\n // Floor plane is up slightly from the bottom of the bounding box to avoid\n // Z-fighting with baked-in shadows and to stay inside the shadow camera.\n const shadowOffset = sizeY * OFFSET;\n this.floor.position.y = 2 * shadowOffset - camera.far;\n }\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_FOV_DEG = 45;\nconst DEFAULT_HALF_FOV = (DEFAULT_FOV_DEG / 2) * Math.PI / 180;\nconst SAFE_RADIUS_RATIO = Math.sin(DEFAULT_HALF_FOV);\nconst DEFAULT_TAN_FOV = Math.tan(DEFAULT_HALF_FOV);\nconst view = new Vector3();\nconst target = new Vector3();\nconst normalWorld = new Vector3();\nconst raycaster = new Raycaster();\nconst vector3$1 = new Vector3();\n/**\n * A THREE.Scene object that takes a Model and CanvasHTMLElement and\n * constructs a framed scene based off of the canvas dimensions.\n * Provides lights and cameras to be used in a renderer.\n */\nclass ModelScene extends Scene {\n constructor({ canvas, element, width, height }) {\n super();\n this.context = null;\n this.annotationRenderer = new CSS2DRenderer();\n this.width = 1;\n this.height = 1;\n this.aspect = 1;\n this.isDirty = false;\n this.renderCount = 0;\n this.externalRenderer = null;\n // These default camera values are never used, as they are reset once the\n // model is loaded and framing is computed.\n this.camera = new PerspectiveCamera(45, 1, 0.1, 100);\n this.url = null;\n this.target = new Object3D();\n this.modelContainer = new Object3D();\n this.animationNames = [];\n this.boundingBox = new Box3();\n this.size = new Vector3();\n this.idealCameraDistance = 0;\n this.fieldOfViewAspect = 0;\n this.framedFieldOfView = DEFAULT_FOV_DEG;\n this.shadow = null;\n this.shadowIntensity = 0;\n this.shadowSoftness = 1;\n this.exposure = 1;\n this.canScale = true;\n this.tightBounds = false;\n this.goalTarget = new Vector3();\n this.targetDamperX = new Damper();\n this.targetDamperY = new Damper();\n this.targetDamperZ = new Damper();\n this._currentGLTF = null;\n this.cancelPendingSourceChange = null;\n this.animationsByName = new Map();\n this.currentAnimationAction = null;\n this.name = 'ModelScene';\n this.element = element;\n this.canvas = canvas;\n // These default camera values are never used, as they are reset once the\n // model is loaded and framing is computed.\n this.camera = new PerspectiveCamera(45, 1, 0.1, 100);\n this.camera.name = 'MainCamera';\n this.add(this.target);\n this.setSize(width, height);\n this.target.name = 'Target';\n this.modelContainer.name = 'ModelContainer';\n this.target.add(this.modelContainer);\n this.mixer = new AnimationMixer(this.modelContainer);\n const { domElement } = this.annotationRenderer;\n const { style } = domElement;\n style.display = 'none';\n style.pointerEvents = 'none';\n style.position = 'absolute';\n style.top = '0';\n this.element.shadowRoot.querySelector('.default').appendChild(domElement);\n }\n /**\n * Function to create the context lazily, as when there is only one\n * element, the renderer's 3D context can be displayed\n * directly. This extra context is necessary to copy the renderings into when\n * there are more than one.\n */\n createContext() {\n {\n this.context = this.canvas.getContext('2d');\n }\n }\n /**\n * Pass in a THREE.Object3D to be controlled\n * by this model.\n */\n async setObject(model) {\n this.reset();\n this.modelContainer.add(model);\n await this.setupScene();\n }\n /**\n * Sets the model via URL.\n */\n async setSource(url, progressCallback = () => { }) {\n if (!url || url === this.url) {\n progressCallback(1);\n return;\n }\n this.reset();\n this.url = url;\n if (this.externalRenderer != null) {\n const framingInfo = await this.externalRenderer.load(progressCallback);\n this.idealCameraDistance = framingInfo.framedRadius / SAFE_RADIUS_RATIO;\n this.fieldOfViewAspect = framingInfo.fieldOfViewAspect;\n this.frameModel();\n this.dispatchEvent({ type: 'model-load', url: this.url });\n return;\n }\n // If we have pending work due to a previous source change in progress,\n // cancel it so that we do not incur a race condition:\n if (this.cancelPendingSourceChange != null) {\n this.cancelPendingSourceChange();\n this.cancelPendingSourceChange = null;\n }\n let gltf;\n try {\n gltf = await new Promise(async (resolve, reject) => {\n this.cancelPendingSourceChange = () => reject();\n try {\n const result = await this.element[$renderer].loader.load(url, this.element, progressCallback);\n resolve(result);\n }\n catch (error) {\n reject(error);\n }\n });\n }\n catch (error) {\n if (error == null) {\n // Loading was cancelled, so silently return\n return;\n }\n throw error;\n }\n this.reset();\n this.url = url;\n this._currentGLTF = gltf;\n if (gltf != null) {\n this.modelContainer.add(gltf.scene);\n }\n const { animations } = gltf;\n const animationsByName = new Map();\n const animationNames = [];\n for (const animation of animations) {\n animationsByName.set(animation.name, animation);\n animationNames.push(animation.name);\n }\n this.animations = animations;\n this.animationsByName = animationsByName;\n this.animationNames = animationNames;\n await this.setupScene();\n }\n async setupScene() {\n this.updateBoundingBox();\n let target = null;\n if (this.tightBounds === true) {\n await this.element.requestUpdate('cameraTarget');\n target = this.getTarget();\n }\n this.updateFraming(target);\n this.frameModel();\n this.setShadowIntensity(this.shadowIntensity);\n this.dispatchEvent({ type: 'model-load', url: this.url });\n }\n reset() {\n this.url = null;\n this.isDirty = true;\n if (this.shadow != null) {\n this.shadow.setIntensity(0);\n }\n const gltf = this._currentGLTF;\n // Remove all current children\n if (gltf != null) {\n for (const child of this.modelContainer.children) {\n this.modelContainer.remove(child);\n }\n gltf.dispose();\n this._currentGLTF = null;\n }\n if (this.currentAnimationAction != null) {\n this.currentAnimationAction.stop();\n this.currentAnimationAction = null;\n }\n this.mixer.stopAllAction();\n this.mixer.uncacheRoot(this);\n }\n get currentGLTF() {\n return this._currentGLTF;\n }\n /**\n * Updates the ModelScene for a new container size in CSS pixels.\n */\n setSize(width, height) {\n if (this.width === width && this.height === height) {\n return;\n }\n this.width = Math.max(width, 1);\n this.height = Math.max(height, 1);\n this.annotationRenderer.setSize(width, height);\n this.aspect = this.width / this.height;\n this.frameModel();\n if (this.externalRenderer != null) {\n const dpr = resolveDpr();\n this.externalRenderer.resize(width * dpr, height * dpr);\n }\n this.isDirty = true;\n }\n updateBoundingBox() {\n this.target.remove(this.modelContainer);\n if (this.tightBounds === true) {\n const bound = (box, vertex) => {\n return box.expandByPoint(vertex);\n };\n this.boundingBox = reduceVertices(this.modelContainer, bound, new Box3());\n }\n else {\n this.boundingBox.setFromObject(this.modelContainer);\n }\n this.boundingBox.getSize(this.size);\n this.target.add(this.modelContainer);\n }\n /**\n * Calculates the idealCameraDistance and fieldOfViewAspect that allows the 3D\n * object to be framed tightly in a 2D window of any aspect ratio without\n * clipping at any camera orbit. The camera's center target point can be\n * optionally specified. If no center is specified, it defaults to the center\n * of the bounding box, which means asymmetric models will tend to be tight on\n * one side instead of both. Proper choice of center can correct this.\n */\n updateFraming(center = null) {\n this.target.remove(this.modelContainer);\n if (center == null) {\n center = this.boundingBox.getCenter(new Vector3());\n }\n const radiusSquared = (value, vertex) => {\n return Math.max(value, center.distanceToSquared(vertex));\n };\n const framedRadius = Math.sqrt(reduceVertices(this.modelContainer, radiusSquared, 0));\n this.idealCameraDistance = framedRadius / SAFE_RADIUS_RATIO;\n const horizontalFov = (value, vertex) => {\n vertex.sub(center);\n const radiusXZ = Math.sqrt(vertex.x * vertex.x + vertex.z * vertex.z);\n return Math.max(value, radiusXZ / (this.idealCameraDistance - Math.abs(vertex.y)));\n };\n this.fieldOfViewAspect =\n reduceVertices(this.modelContainer, horizontalFov, 0) / DEFAULT_TAN_FOV;\n this.target.add(this.modelContainer);\n }\n /**\n * Set's the framedFieldOfView based on the aspect ratio of the window in\n * order to keep the model fully visible at any camera orientation.\n */\n frameModel() {\n const vertical = DEFAULT_TAN_FOV * Math.max(1, this.fieldOfViewAspect / this.aspect);\n this.framedFieldOfView = 2 * Math.atan(vertical) * 180 / Math.PI;\n }\n /**\n * Returns the size of the corresponding canvas element.\n */\n getSize() {\n return { width: this.width, height: this.height };\n }\n /**\n * Sets the point in model coordinates the model should orbit/pivot around.\n */\n setTarget(modelX, modelY, modelZ) {\n this.goalTarget.set(-modelX, -modelY, -modelZ);\n }\n /**\n * Set the decay time of, affects the speed of target transitions.\n */\n setTargetDamperDecayTime(decayMilliseconds) {\n this.targetDamperX.setDecayTime(decayMilliseconds);\n this.targetDamperY.setDecayTime(decayMilliseconds);\n this.targetDamperZ.setDecayTime(decayMilliseconds);\n }\n /**\n * Gets the point in model coordinates the model should orbit/pivot around.\n */\n getTarget() {\n return vector3$1.copy(this.goalTarget).multiplyScalar(-1);\n }\n /**\n * Shifts the model to the target point immediately instead of easing in.\n */\n jumpToGoal() {\n this.updateTarget(SETTLING_TIME);\n }\n /**\n * This should be called every frame with the frame delta to cause the target\n * to transition to its set point.\n */\n updateTarget(delta) {\n const goal = this.goalTarget;\n const target = this.target.position;\n if (!goal.equals(target)) {\n const radius = this.idealCameraDistance;\n let { x, y, z } = target;\n x = this.targetDamperX.update(x, goal.x, delta, radius);\n y = this.targetDamperY.update(y, goal.y, delta, radius);\n z = this.targetDamperZ.update(z, goal.z, delta, radius);\n this.target.position.set(x, y, z);\n this.target.updateMatrixWorld();\n this.setShadowRotation(this.yaw);\n this.isDirty = true;\n }\n }\n /**\n * Yaw the +z (front) of the model toward the indicated world coordinates.\n */\n pointTowards(worldX, worldZ) {\n const { x, z } = this.position;\n this.yaw = Math.atan2(worldX - x, worldZ - z);\n }\n /**\n * Yaw is the scene's orientation about the y-axis, around the rotation\n * center.\n */\n set yaw(radiansY) {\n this.rotation.y = radiansY;\n this.updateMatrixWorld(true);\n this.setShadowRotation(radiansY);\n this.isDirty = true;\n }\n get yaw() {\n return this.rotation.y;\n }\n set animationTime(value) {\n this.mixer.setTime(value);\n }\n get animationTime() {\n if (this.currentAnimationAction != null) {\n return this.currentAnimationAction.time;\n }\n return 0;\n }\n get duration() {\n if (this.currentAnimationAction != null &&\n this.currentAnimationAction.getClip()) {\n return this.currentAnimationAction.getClip().duration;\n }\n return 0;\n }\n get hasActiveAnimation() {\n return this.currentAnimationAction != null;\n }\n /**\n * Plays an animation if there are any associated with the current model.\n * Accepts an optional string name of an animation to play. If no name is\n * provided, or if no animation is found by the given name, always falls back\n * to playing the first animation.\n */\n playAnimation(name = null, crossfadeTime = 0) {\n if (this._currentGLTF == null) {\n return;\n }\n const { animations } = this;\n if (animations == null || animations.length === 0) {\n console.warn(`Cannot play animation (model does not have any animations)`);\n return;\n }\n let animationClip = null;\n if (name != null) {\n animationClip = this.animationsByName.get(name);\n }\n if (animationClip == null) {\n animationClip = animations[0];\n }\n try {\n const { currentAnimationAction: lastAnimationAction } = this;\n this.currentAnimationAction =\n this.mixer.clipAction(animationClip, this).play();\n this.currentAnimationAction.enabled = true;\n if (lastAnimationAction != null &&\n this.currentAnimationAction !== lastAnimationAction) {\n this.currentAnimationAction.crossFadeFrom(lastAnimationAction, crossfadeTime, false);\n }\n }\n catch (error) {\n console.error(error);\n }\n }\n stopAnimation() {\n if (this.currentAnimationAction != null) {\n this.currentAnimationAction.stop();\n this.currentAnimationAction.reset();\n this.currentAnimationAction = null;\n }\n this.mixer.stopAllAction();\n }\n updateAnimation(step) {\n this.mixer.update(step);\n }\n /**\n * Call if the object has been changed in such a way that the shadow's shape\n * has changed (not a rotation about the Y axis).\n */\n updateShadow() {\n const shadow = this.shadow;\n if (shadow != null) {\n const side = this.element.arPlacement === 'wall' ? 'back' : 'bottom';\n shadow.setScene(this, this.shadowSoftness, side);\n }\n }\n /**\n * Sets the shadow's intensity, lazily creating the shadow as necessary.\n */\n setShadowIntensity(shadowIntensity) {\n this.shadowIntensity = shadowIntensity;\n if (this._currentGLTF == null) {\n return;\n }\n let shadow = this.shadow;\n const side = this.element.arPlacement === 'wall' ? 'back' : 'bottom';\n if (shadow != null) {\n shadow.setIntensity(shadowIntensity);\n shadow.setScene(this, this.shadowSoftness, side);\n }\n else if (shadowIntensity > 0) {\n shadow = new Shadow(this, this.shadowSoftness, side);\n shadow.setIntensity(shadowIntensity);\n this.shadow = shadow;\n }\n }\n /**\n * Sets the shadow's softness by mapping a [0, 1] softness parameter to the\n * shadow's resolution. This involves reallocation, so it should not be\n * changed frequently. Softer shadows are cheaper to render.\n */\n setShadowSoftness(softness) {\n this.shadowSoftness = softness;\n const shadow = this.shadow;\n if (shadow != null) {\n shadow.setSoftness(softness);\n }\n }\n /**\n * The shadow must be rotated manually to match any global rotation applied to\n * this model. The input is the global orientation about the Y axis.\n */\n setShadowRotation(radiansY) {\n const shadow = this.shadow;\n if (shadow != null) {\n shadow.setRotation(radiansY);\n }\n }\n /**\n * Call to check if the shadow needs an updated render; returns true if an\n * update is needed and resets the state.\n */\n isShadowDirty() {\n const shadow = this.shadow;\n if (shadow == null) {\n return false;\n }\n else {\n const { needsUpdate } = shadow;\n shadow.needsUpdate = false;\n return needsUpdate;\n }\n }\n /**\n * Shift the floor vertically from the bottom of the model's bounding box by\n * offset (should generally be negative).\n */\n setShadowScaleAndOffset(scale, offset) {\n const shadow = this.shadow;\n if (shadow != null) {\n shadow.setScaleAndOffset(scale, offset);\n }\n }\n /**\n * This method returns the world position and model-space normal of the point\n * on the mesh corresponding to the input pixel coordinates given relative to\n * the model-viewer element. If the mesh is not hit, the result is null.\n */\n positionAndNormalFromPoint(pixelPosition, object = this) {\n raycaster.setFromCamera(pixelPosition, this.camera);\n const hits = raycaster.intersectObject(object, true);\n if (hits.length === 0) {\n return null;\n }\n const hit = hits[0];\n if (hit.face == null) {\n return null;\n }\n hit.face.normal.applyNormalMatrix(new Matrix3().getNormalMatrix(hit.object.matrixWorld));\n return { position: hit.point, normal: hit.face.normal };\n }\n /**\n * The following methods are for operating on the set of Hotspot objects\n * attached to the scene. These come from DOM elements, provided to slots by\n * the Annotation Mixin.\n */\n addHotspot(hotspot) {\n this.target.add(hotspot);\n // This happens automatically in render(), but we do it early so that\n // the slots appear in the shadow DOM and the elements get attached,\n // allowing us to dispatch events on them.\n this.annotationRenderer.domElement.appendChild(hotspot.element);\n }\n removeHotspot(hotspot) {\n this.target.remove(hotspot);\n }\n /**\n * Helper method to apply a function to all hotspots.\n */\n forHotspots(func) {\n const { children } = this.target;\n for (let i = 0, l = children.length; i < l; i++) {\n const hotspot = children[i];\n if (hotspot instanceof Hotspot) {\n func(hotspot);\n }\n }\n }\n /**\n * Update the CSS visibility of the hotspots based on whether their normals\n * point toward the camera.\n */\n updateHotspots(viewerPosition) {\n this.forHotspots((hotspot) => {\n view.copy(viewerPosition);\n target.setFromMatrixPosition(hotspot.matrixWorld);\n view.sub(target);\n normalWorld.copy(hotspot.normal)\n .transformDirection(this.target.matrixWorld);\n if (view.dot(normalWorld) < 0) {\n hotspot.hide();\n }\n else {\n hotspot.show();\n }\n });\n }\n /**\n * Rotate all hotspots to an absolute orientation given by the input number of\n * radians. Zero returns them to upright.\n */\n orientHotspots(radians) {\n this.forHotspots((hotspot) => {\n hotspot.orient(radians);\n });\n }\n /**\n * Set the rendering visibility of all hotspots. This is used to hide them\n * during transitions and such.\n */\n setHotspotsVisibility(visible) {\n this.forHotspots((hotspot) => {\n hotspot.visible = visible;\n });\n }\n postRender() {\n const { camera } = this;\n if (this.isDirty) {\n this.updateHotspots(camera.position);\n this.annotationRenderer.domElement.style.display = '';\n this.annotationRenderer.render(this, camera);\n }\n }\n}\n\n/**\n * This class generates custom mipmaps for a roughness map by encoding the lost variation in the\n * normal map mip levels as increased roughness in the corresponding roughness mip levels. This\n * helps with rendering accuracy for MeshStandardMaterial, and also helps with anti-aliasing when\n * using PMREM. If the normal map is larger than the roughness map, the roughness map will be\n * enlarged to match the dimensions of the normal map.\n */\n\nconst _mipmapMaterial = _getMipmapMaterial();\n\nconst _mesh = new Mesh( new PlaneGeometry( 2, 2 ), _mipmapMaterial );\n\nconst _flatCamera = new OrthographicCamera( 0, 1, 0, 1, 0, 1 );\n\nlet _tempTarget = null;\n\nlet _renderer = null;\n\nclass RoughnessMipmapper {\n\n\tconstructor( renderer ) {\n\n\t\t_renderer = renderer;\n\n\t\t_renderer.compile( _mesh, _flatCamera );\n\n\t}\n\n\tgenerateMipmaps( material ) {\n\n\t\tif ( 'roughnessMap' in material === false ) return;\n\n\t\tconst { roughnessMap, normalMap } = material;\n\n\t\tif ( roughnessMap === null || normalMap === null || ! roughnessMap.generateMipmaps || material.userData.roughnessUpdated ) return;\n\n\t\tmaterial.userData.roughnessUpdated = true;\n\n\t\tlet width = Math.max( roughnessMap.image.width, normalMap.image.width );\n\t\tlet height = Math.max( roughnessMap.image.height, normalMap.image.height );\n\n\t\tif ( ! MathUtils.isPowerOfTwo( width ) || ! MathUtils.isPowerOfTwo( height ) ) return;\n\n\t\tconst oldTarget = _renderer.getRenderTarget();\n\n\t\tconst autoClear = _renderer.autoClear;\n\n\t\t_renderer.autoClear = false;\n\n\t\tif ( _tempTarget === null || _tempTarget.width !== width || _tempTarget.height !== height ) {\n\n\t\t\tif ( _tempTarget !== null ) _tempTarget.dispose();\n\n\t\t\t_tempTarget = new WebGLRenderTarget( width, height, { depthBuffer: false } );\n\n\t\t\t_tempTarget.scissorTest = true;\n\n\t\t}\n\n\t\tif ( width !== roughnessMap.image.width || height !== roughnessMap.image.height ) {\n\n\t\t\tconst params = {\n\t\t\t\twrapS: roughnessMap.wrapS,\n\t\t\t\twrapT: roughnessMap.wrapT,\n\t\t\t\tmagFilter: roughnessMap.magFilter,\n\t\t\t\tminFilter: roughnessMap.minFilter,\n\t\t\t\tdepthBuffer: false\n\t\t\t};\n\n\t\t\tconst newRoughnessTarget = new WebGLRenderTarget( width, height, params );\n\n\t\t\tnewRoughnessTarget.texture.generateMipmaps = true;\n\n\t\t\t// Setting the render target causes the memory to be allocated.\n\n\t\t\t_renderer.setRenderTarget( newRoughnessTarget );\n\n\t\t\tmaterial.roughnessMap = newRoughnessTarget.texture;\n\n\t\t\tif ( material.metalnessMap == roughnessMap ) material.metalnessMap = material.roughnessMap;\n\n\t\t\tif ( material.aoMap == roughnessMap ) material.aoMap = material.roughnessMap;\n\n\t\t\t// Copy UV transform parameters\n\n\t\t\tmaterial.roughnessMap.offset.copy( roughnessMap.offset );\n\t\t\tmaterial.roughnessMap.repeat.copy( roughnessMap.repeat );\n\t\t\tmaterial.roughnessMap.center.copy( roughnessMap.center );\n\t\t\tmaterial.roughnessMap.rotation = roughnessMap.rotation;\n\n\t\t\tmaterial.roughnessMap.matrixAutoUpdate = roughnessMap.matrixAutoUpdate;\n\t\t\tmaterial.roughnessMap.matrix.copy( roughnessMap.matrix );\n\n\t\t}\n\n\t\t_mipmapMaterial.uniforms.roughnessMap.value = roughnessMap;\n\n\t\t_mipmapMaterial.uniforms.normalMap.value = normalMap;\n\n\t\tconst position = new Vector2( 0, 0 );\n\n\t\tconst texelSize = _mipmapMaterial.uniforms.texelSize.value;\n\n\t\tfor ( let mip = 0; width >= 1 && height >= 1; ++ mip, width /= 2, height /= 2 ) {\n\n\t\t\t// Rendering to a mip level is not allowed in webGL1. Instead we must set\n\t\t\t// up a secondary texture to write the result to, then copy it back to the\n\t\t\t// proper mipmap level.\n\n\t\t\ttexelSize.set( 1.0 / width, 1.0 / height );\n\n\t\t\tif ( mip == 0 ) texelSize.set( 0.0, 0.0 );\n\n\t\t\t_tempTarget.viewport.set( position.x, position.y, width, height );\n\n\t\t\t_tempTarget.scissor.set( position.x, position.y, width, height );\n\n\t\t\t_renderer.setRenderTarget( _tempTarget );\n\n\t\t\t_renderer.render( _mesh, _flatCamera );\n\n\t\t\t_renderer.copyFramebufferToTexture( position, material.roughnessMap, mip );\n\n\t\t\t_mipmapMaterial.uniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( roughnessMap !== material.roughnessMap ) roughnessMap.dispose();\n\n\t\t_renderer.setRenderTarget( oldTarget );\n\n\t\t_renderer.autoClear = autoClear;\n\n\t}\n\n\tdispose() {\n\n\t\t_mipmapMaterial.dispose();\n\n\t\t_mesh.geometry.dispose();\n\n\t\tif ( _tempTarget != null ) _tempTarget.dispose();\n\n\t}\n\n}\n\nfunction _getMipmapMaterial() {\n\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tuniforms: {\n\t\t\troughnessMap: { value: null },\n\t\t\tnormalMap: { value: null },\n\t\t\ttexelSize: { value: new Vector2( 1, 1 ) }\n\t\t},\n\n\t\tvertexShader: /* glsl */`\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tattribute vec3 position;\n\t\t\tattribute vec2 uv;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tvoid main() {\n\n\t\t\t\tvUv = uv;\n\n\t\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n\t\tfragmentShader: /* glsl */`\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tuniform sampler2D roughnessMap;\n\t\t\tuniform sampler2D normalMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\n\t\t\tvec4 envMapTexelToLinear( vec4 a ) { return a; }\n\n\t\t\t#include \n\n\t\t\tfloat roughnessToVariance( float roughness ) {\n\n\t\t\t\tfloat variance = 0.0;\n\n\t\t\t\tif ( roughness >= r1 ) {\n\n\t\t\t\t\tvariance = ( r0 - roughness ) * ( v1 - v0 ) / ( r0 - r1 ) + v0;\n\n\t\t\t\t} else if ( roughness >= r4 ) {\n\n\t\t\t\t\tvariance = ( r1 - roughness ) * ( v4 - v1 ) / ( r1 - r4 ) + v1;\n\n\t\t\t\t} else if ( roughness >= r5 ) {\n\n\t\t\t\t\tvariance = ( r4 - roughness ) * ( v5 - v4 ) / ( r4 - r5 ) + v4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfloat roughness2 = roughness * roughness;\n\n\t\t\t\t\tvariance = 1.79 * roughness2 * roughness2;\n\n\t\t\t\t}\n\n\t\t\t\treturn variance;\n\n\t\t\t}\n\n\t\t\tfloat varianceToRoughness( float variance ) {\n\n\t\t\t\tfloat roughness = 0.0;\n\n\t\t\t\tif ( variance >= v1 ) {\n\n\t\t\t\t\troughness = ( v0 - variance ) * ( r1 - r0 ) / ( v0 - v1 ) + r0;\n\n\t\t\t\t} else if ( variance >= v4 ) {\n\n\t\t\t\t\troughness = ( v1 - variance ) * ( r4 - r1 ) / ( v1 - v4 ) + r1;\n\n\t\t\t\t} else if ( variance >= v5 ) {\n\n\t\t\t\t\troughness = ( v4 - variance ) * ( r5 - r4 ) / ( v4 - v5 ) + r4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\troughness = pow( 0.559 * variance, 0.25 ); // 0.559 = 1.0 / 1.79\n\n\t\t\t\t}\n\n\t\t\t\treturn roughness;\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = texture2D( roughnessMap, vUv, - 1.0 );\n\n\t\t\t\tif ( texelSize.x == 0.0 ) return;\n\n\t\t\t\tfloat roughness = gl_FragColor.g;\n\n\t\t\t\tfloat variance = roughnessToVariance( roughness );\n\n\t\t\t\tvec3 avgNormal;\n\n\t\t\t\tfor ( float x = - 1.0; x < 2.0; x += 2.0 ) {\n\n\t\t\t\t\tfor ( float y = - 1.0; y < 2.0; y += 2.0 ) {\n\n\t\t\t\t\t\tvec2 uv = vUv + vec2( x, y ) * 0.25 * texelSize;\n\n\t\t\t\t\t\tavgNormal += normalize( texture2D( normalMap, uv, - 1.0 ).xyz - 0.5 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvariance += 1.0 - 0.25 * length( avgNormal );\n\n\t\t\t\tgl_FragColor.g = varianceToRoughness( variance );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\tshaderMaterial.type = 'RoughnessMipmapper';\n\n\treturn shaderMaterial;\n\n}\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst RADIUS = 0.2;\nconst LINE_WIDTH = 0.03;\nconst MAX_OPACITY = 0.75;\nconst SEGMENTS = 12;\nconst DELTA_PHI = Math.PI / (2 * SEGMENTS);\nconst vector2 = new Vector2();\n/**\n * Adds a quarter-annulus of vertices to the array, centered on cornerX,\n * cornerY.\n */\nconst addCorner = (vertices, cornerX, cornerY) => {\n let phi = cornerX > 0 ? (cornerY > 0 ? 0 : -Math.PI / 2) :\n (cornerY > 0 ? Math.PI / 2 : Math.PI);\n for (let i = 0; i <= SEGMENTS; ++i) {\n vertices.push(cornerX + (RADIUS - LINE_WIDTH) * Math.cos(phi), cornerY + (RADIUS - LINE_WIDTH) * Math.sin(phi), 0, cornerX + RADIUS * Math.cos(phi), cornerY + RADIUS * Math.sin(phi), 0);\n phi += DELTA_PHI;\n }\n};\n/**\n * This class is a set of two coincident planes. The first is just a cute box\n * outline with rounded corners and damped opacity to indicate the floor extents\n * of a scene. It is purposely larger than the scene's bounding box by RADIUS on\n * all sides so that small scenes are still visible / selectable. Its center is\n * actually carved out by vertices to ensure its fragment shader doesn't add\n * much time.\n *\n * The child plane is a simple plane with the same extents for use in hit\n * testing (translation is triggered when the touch hits the plane, rotation\n * otherwise).\n */\nclass PlacementBox extends Mesh {\n constructor(scene, side) {\n const geometry = new BufferGeometry();\n const triangles = [];\n const vertices = [];\n const { size, boundingBox } = scene;\n const x = size.x / 2;\n const y = (side === 'back' ? size.y : size.z) / 2;\n addCorner(vertices, x, y);\n addCorner(vertices, -x, y);\n addCorner(vertices, -x, -y);\n addCorner(vertices, x, -y);\n const numVertices = vertices.length / 3;\n for (let i = 0; i < numVertices - 2; i += 2) {\n triangles.push(i, i + 1, i + 3, i, i + 3, i + 2);\n }\n const i = numVertices - 2;\n triangles.push(i, i + 1, 1, i, 1, 0);\n geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n geometry.setIndex(triangles);\n super(geometry);\n this.side = side;\n const material = this.material;\n material.side = DoubleSide;\n material.transparent = true;\n material.opacity = 0;\n this.goalOpacity = 0;\n this.opacityDamper = new Damper();\n this.hitPlane =\n new Mesh(new PlaneGeometry(2 * (x + RADIUS), 2 * (y + RADIUS)));\n this.hitPlane.visible = false;\n this.add(this.hitPlane);\n boundingBox.getCenter(this.position);\n switch (side) {\n case 'bottom':\n this.rotateX(-Math.PI / 2);\n this.shadowHeight = boundingBox.min.y;\n this.position.y = this.shadowHeight;\n break;\n case 'back':\n this.shadowHeight = boundingBox.min.z;\n this.position.z = this.shadowHeight;\n }\n scene.target.add(this);\n }\n /**\n * Get the world hit position if the touch coordinates hit the box, and null\n * otherwise. Pass the scene in to get access to its raycaster.\n */\n getHit(scene, screenX, screenY) {\n vector2.set(screenX, -screenY);\n this.hitPlane.visible = true;\n const hitResult = scene.positionAndNormalFromPoint(vector2, this.hitPlane);\n this.hitPlane.visible = false;\n return hitResult == null ? null : hitResult.position;\n }\n /**\n * Offset the height of the box relative to the bottom of the scene. Positive\n * is up, so generally only negative values are used.\n */\n set offsetHeight(offset) {\n if (this.side === 'back') {\n this.position.z = this.shadowHeight + offset;\n }\n else {\n this.position.y = this.shadowHeight + offset;\n }\n }\n get offsetHeight() {\n if (this.side === 'back') {\n return this.position.z - this.shadowHeight;\n }\n else {\n return this.position.y - this.shadowHeight;\n }\n }\n /**\n * Set the box's visibility; it will fade in and out.\n */\n set show(visible) {\n this.goalOpacity = visible ? MAX_OPACITY : 0;\n }\n /**\n * Call on each frame with the frame delta to fade the box.\n */\n updateOpacity(delta) {\n const material = this.material;\n material.opacity =\n this.opacityDamper.update(material.opacity, this.goalOpacity, delta, 1);\n this.visible = material.opacity > 0;\n }\n /**\n * Call this to clean up Three's cache when you remove the box.\n */\n dispose() {\n var _a;\n const { geometry, material } = this.hitPlane;\n geometry.dispose();\n material.dispose();\n this.geometry.dispose();\n this.material.dispose();\n (_a = this.parent) === null || _a === void 0 ? void 0 : _a.remove(this);\n }\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// number of initial null pose XRFrames allowed before we post not-tracking\nconst INIT_FRAMES = 30;\n// AR shadow is not user-configurable. This is to pave the way for AR lighting\n// estimation, which will be used once available in WebXR.\nconst AR_SHADOW_INTENSITY = 0.3;\nconst ROTATION_RATE = 1.5;\n// Angle down (towards bottom of screen) from camera center ray to use for hit\n// testing against the floor. This makes placement faster and more intuitive\n// assuming the phone is in portrait mode. This seems to be a reasonable\n// assumption for the start of the session and UI will lack landscape mode to\n// encourage upright use.\nconst HIT_ANGLE_DEG = 20;\n// Slow down the dampers for initial placement.\nconst INTRO_DECAY = 120;\nconst SCALE_SNAP_HIGH = 1.2;\nconst SCALE_SNAP_LOW = 1 / SCALE_SNAP_HIGH;\n// For automatic dynamic viewport scaling, don't let the scale drop below this\n// limit.\nconst MIN_VIEWPORT_SCALE = 0.25;\nconst ARStatus = {\n NOT_PRESENTING: 'not-presenting',\n SESSION_STARTED: 'session-started',\n OBJECT_PLACED: 'object-placed',\n FAILED: 'failed'\n};\nconst ARTracking = {\n TRACKING: 'tracking',\n NOT_TRACKING: 'not-tracking'\n};\nconst vector3 = new Vector3();\nconst matrix4 = new Matrix4();\nconst hitPosition = new Vector3();\nclass ARRenderer extends EventDispatcher {\n constructor(renderer) {\n super();\n this.renderer = renderer;\n this.currentSession = null;\n this.placeOnWall = false;\n this.cameraPosition = new Vector3();\n this.placementBox = null;\n this.lastTick = null;\n this.turntableRotation = null;\n this.oldShadowIntensity = null;\n this.oldBackground = null;\n this.frame = null;\n this.initialHitSource = null;\n this.transientHitTestSource = null;\n this.inputSource = null;\n this._presentedScene = null;\n this.resolveCleanup = null;\n this.exitWebXRButtonContainer = null;\n this.overlay = null;\n this.tracking = true;\n this.frames = 0;\n this.initialized = false;\n this.projectionMatrix = new Matrix4();\n this.projectionMatrixInverse = new Matrix4();\n this.oldTarget = new Vector3();\n this.placementComplete = false;\n this.isTranslating = false;\n this.isRotating = false;\n this.isTwoFingering = false;\n this.lastDragPosition = new Vector3();\n this.firstRatio = 0;\n this.lastAngle = 0;\n this.goalPosition = new Vector3();\n this.goalYaw = 0;\n this.goalScale = 1;\n this.xDamper = new Damper();\n this.yDamper = new Damper();\n this.zDamper = new Damper();\n this.yawDamper = new Damper();\n this.scaleDamper = new Damper();\n this.onExitWebXRButtonContainerClick = () => this.stopPresenting();\n this.onUpdateScene = () => {\n if (this.placementBox != null && this.isPresenting) {\n this.placementBox.dispose();\n this.placementBox = new PlacementBox(this.presentedScene, this.placeOnWall ? 'back' : 'bottom');\n }\n };\n this.onSelectStart = (event) => {\n const hitSource = this.transientHitTestSource;\n if (hitSource == null) {\n return;\n }\n const fingers = this.frame.getHitTestResultsForTransientInput(hitSource);\n const scene = this.presentedScene;\n const box = this.placementBox;\n if (fingers.length === 1) {\n this.inputSource = event.inputSource;\n const { axes } = this.inputSource.gamepad;\n const hitPosition = box.getHit(this.presentedScene, axes[0], axes[1]);\n box.show = true;\n if (hitPosition != null) {\n this.isTranslating = true;\n this.lastDragPosition.copy(hitPosition);\n }\n else if (this.placeOnWall === false) {\n this.isRotating = true;\n this.lastAngle = axes[0] * ROTATION_RATE;\n }\n }\n else if (fingers.length === 2) {\n box.show = true;\n this.isTwoFingering = true;\n const { separation } = this.fingerPolar(fingers);\n this.firstRatio = separation / scene.scale.x;\n }\n };\n this.onSelectEnd = () => {\n this.isTranslating = false;\n this.isRotating = false;\n this.isTwoFingering = false;\n this.inputSource = null;\n this.goalPosition.y +=\n this.placementBox.offsetHeight * this.presentedScene.scale.x;\n this.placementBox.show = false;\n };\n this.threeRenderer = renderer.threeRenderer;\n this.threeRenderer.xr.enabled = true;\n }\n async resolveARSession() {\n assertIsArCandidate();\n const session = await navigator.xr.requestSession('immersive-ar', {\n requiredFeatures: ['hit-test'],\n optionalFeatures: ['dom-overlay'],\n domOverlay: { root: this.overlay }\n });\n this.threeRenderer.xr.setReferenceSpaceType('local');\n await this.threeRenderer.xr.setSession(session);\n return session;\n }\n /**\n * The currently presented scene, if any\n */\n get presentedScene() {\n return this._presentedScene;\n }\n /**\n * Resolves to true if the renderer has detected all the necessary qualities\n * to support presentation in AR.\n */\n async supportsPresentation() {\n try {\n assertIsArCandidate();\n return await navigator.xr.isSessionSupported('immersive-ar');\n }\n catch (error) {\n console.warn('Request to present in WebXR denied:');\n console.warn(error);\n console.warn('Falling back to next ar-mode');\n return false;\n }\n }\n /**\n * Present a scene in AR\n */\n async present(scene) {\n if (this.isPresenting) {\n console.warn('Cannot present while a model is already presenting');\n }\n let waitForAnimationFrame = new Promise((resolve, _reject) => {\n requestAnimationFrame(() => resolve());\n });\n scene.setHotspotsVisibility(false);\n scene.isDirty = true;\n // Render a frame to turn off the hotspots\n await waitForAnimationFrame;\n // This sets isPresenting to true\n this._presentedScene = scene;\n this.overlay = scene.element.shadowRoot.querySelector('div.default');\n const currentSession = await this.resolveARSession();\n currentSession.addEventListener('end', () => {\n this.postSessionCleanup();\n }, { once: true });\n const exitButton = scene.element.shadowRoot.querySelector('.slot.exit-webxr-ar-button');\n exitButton.classList.add('enabled');\n exitButton.addEventListener('click', this.onExitWebXRButtonContainerClick);\n this.exitWebXRButtonContainer = exitButton;\n const viewerRefSpace = await currentSession.requestReferenceSpace('viewer');\n this.tracking = true;\n this.frames = 0;\n this.initialized = false;\n this.turntableRotation = scene.yaw;\n this.goalYaw = scene.yaw;\n this.goalScale = 1;\n this.oldBackground = scene.background;\n scene.background = null;\n this.oldShadowIntensity = scene.shadowIntensity;\n scene.setShadowIntensity(0);\n this.oldTarget.copy(scene.getTarget());\n scene.addEventListener('model-load', this.onUpdateScene);\n const radians = HIT_ANGLE_DEG * Math.PI / 180;\n const ray = this.placeOnWall === true ?\n undefined :\n new XRRay(new DOMPoint(0, 0, 0), { x: 0, y: -Math.sin(radians), z: -Math.cos(radians) });\n currentSession.requestHitTestSource({ space: viewerRefSpace, offsetRay: ray })\n .then(hitTestSource => {\n this.initialHitSource = hitTestSource;\n });\n this.currentSession = currentSession;\n this.placementBox =\n new PlacementBox(scene, this.placeOnWall ? 'back' : 'bottom');\n this.placementComplete = false;\n this.xDamper.setDecayTime(INTRO_DECAY);\n this.yDamper.setDecayTime(INTRO_DECAY);\n this.zDamper.setDecayTime(INTRO_DECAY);\n this.lastTick = performance.now();\n this.dispatchEvent({ type: 'status', status: ARStatus.SESSION_STARTED });\n }\n /**\n * If currently presenting a scene in AR, stops presentation and exits AR.\n */\n async stopPresenting() {\n if (!this.isPresenting) {\n return;\n }\n const cleanupPromise = new Promise((resolve) => {\n this.resolveCleanup = resolve;\n });\n try {\n await this.currentSession.end();\n await cleanupPromise;\n }\n catch (error) {\n console.warn('Error while trying to end WebXR AR session');\n console.warn(error);\n this.postSessionCleanup();\n }\n }\n /**\n * True if a scene is currently in the process of being presented in AR\n */\n get isPresenting() {\n return this.presentedScene != null;\n }\n get target() {\n return this.oldTarget;\n }\n updateTarget() {\n const scene = this.presentedScene;\n if (scene != null) {\n const target = scene.getTarget();\n this.oldTarget.copy(target);\n if (this.placeOnWall) {\n // Move the scene's target to the center of the back of the model's\n // bounding box.\n scene.setTarget(target.x, target.y, scene.boundingBox.min.z);\n }\n else {\n // Move the scene's target to the model's floor height.\n scene.setTarget(target.x, scene.boundingBox.min.y, target.z);\n }\n }\n }\n postSessionCleanup() {\n const session = this.currentSession;\n if (session != null) {\n session.removeEventListener('selectstart', this.onSelectStart);\n session.removeEventListener('selectend', this.onSelectEnd);\n this.currentSession = null;\n }\n const scene = this.presentedScene;\n if (scene != null) {\n const { element } = scene;\n scene.position.set(0, 0, 0);\n scene.scale.set(1, 1, 1);\n scene.setShadowScaleAndOffset(1, 0);\n const yaw = this.turntableRotation;\n if (yaw != null) {\n scene.yaw = yaw;\n }\n const intensity = this.oldShadowIntensity;\n if (intensity != null) {\n scene.setShadowIntensity(intensity);\n }\n const background = this.oldBackground;\n if (background != null) {\n scene.background = background;\n }\n const point = this.oldTarget;\n scene.setTarget(point.x, point.y, point.z);\n scene.removeEventListener('model-load', this.onUpdateScene);\n scene.orientHotspots(0);\n element.requestUpdate('cameraTarget');\n element.requestUpdate('maxCameraOrbit');\n element[$onResize](element.getBoundingClientRect());\n }\n // Force the Renderer to update its size\n this.renderer.height = 0;\n const exitButton = this.exitWebXRButtonContainer;\n if (exitButton != null) {\n exitButton.classList.remove('enabled');\n exitButton.removeEventListener('click', this.onExitWebXRButtonContainerClick);\n this.exitWebXRButtonContainer = null;\n }\n const hitSource = this.transientHitTestSource;\n if (hitSource != null) {\n hitSource.cancel();\n this.transientHitTestSource = null;\n }\n const hitSourceInitial = this.initialHitSource;\n if (hitSourceInitial != null) {\n hitSourceInitial.cancel();\n this.initialHitSource = null;\n }\n if (this.placementBox != null) {\n this.placementBox.dispose();\n this.placementBox = null;\n }\n this.lastTick = null;\n this.turntableRotation = null;\n this.oldShadowIntensity = null;\n this.oldBackground = null;\n this._presentedScene = null;\n this.frame = null;\n this.inputSource = null;\n this.overlay = null;\n if (this.resolveCleanup != null) {\n this.resolveCleanup();\n }\n this.dispatchEvent({ type: 'status', status: ARStatus.NOT_PRESENTING });\n }\n updateView(view) {\n const viewMatrix = view.transform.matrix;\n const scene = this.presentedScene;\n const { camera } = scene;\n camera.near = 0.1;\n camera.far = 100;\n this.presentedScene.orientHotspots(Math.atan2(viewMatrix[1], viewMatrix[5]));\n this.cameraPosition.set(viewMatrix[12], viewMatrix[13], viewMatrix[14]);\n if (!this.initialized) {\n const { position, element } = scene;\n const { width, height } = this.overlay.getBoundingClientRect();\n scene.setSize(width, height);\n if (this.threeRenderer.xr.getSession() != null) {\n this.projectionMatrix.copy(this.threeRenderer.xr.getCamera(camera).projectionMatrix);\n this.projectionMatrixInverse.copy(this.projectionMatrix).invert();\n }\n const { theta, radius } = element\n .getCameraOrbit();\n // Orient model to match the 3D camera view\n const cameraDirection = vector3.set(viewMatrix[8], viewMatrix[9], viewMatrix[10]);\n scene.yaw = Math.atan2(cameraDirection.x, cameraDirection.z) - theta;\n this.goalYaw = scene.yaw;\n position.copy(this.cameraPosition)\n .add(cameraDirection.multiplyScalar(-1 * radius));\n this.goalPosition.copy(position);\n scene.setHotspotsVisibility(true);\n this.initialized = true;\n }\n // Ensure the camera uses the AR projection matrix without inverting on\n // every frame.\n camera.projectionMatrix.copy(this.projectionMatrix);\n camera.projectionMatrixInverse.copy(this.projectionMatrixInverse);\n // Use automatic dynamic viewport scaling if supported.\n if (view.requestViewportScale && view.recommendedViewportScale) {\n const scale = view.recommendedViewportScale;\n view.requestViewportScale(Math.max(scale, MIN_VIEWPORT_SCALE));\n }\n const layer = this.currentSession.renderState.baseLayer;\n const viewport = layer.getViewport(view);\n this.threeRenderer.setViewport(viewport.x, viewport.y, viewport.width, viewport.height);\n }\n placeInitially(frame) {\n const hitSource = this.initialHitSource;\n if (hitSource == null) {\n return;\n }\n const hitTestResults = frame.getHitTestResults(hitSource);\n if (hitTestResults.length == 0) {\n return;\n }\n const hit = hitTestResults[0];\n const hitPoint = this.getHitPoint(hit);\n if (hitPoint == null) {\n return;\n }\n this.placeModel(hitPoint);\n hitSource.cancel();\n this.initialHitSource = null;\n const { session } = frame;\n session.addEventListener('selectstart', this.onSelectStart);\n session.addEventListener('selectend', this.onSelectEnd);\n session\n .requestHitTestSourceForTransientInput({ profile: 'generic-touchscreen' })\n .then(hitTestSource => {\n this.transientHitTestSource = hitTestSource;\n });\n }\n getHitPoint(hitResult) {\n const refSpace = this.threeRenderer.xr.getReferenceSpace();\n const pose = hitResult.getPose(refSpace);\n if (pose == null) {\n return null;\n }\n const hitMatrix = matrix4.fromArray(pose.transform.matrix);\n if (this.placeOnWall === true) {\n // Orient the model to the wall's normal vector.\n this.goalYaw = Math.atan2(hitMatrix.elements[4], hitMatrix.elements[6]);\n }\n // Check that the y-coordinate of the normal is large enough that the normal\n // is pointing up for floor placement; opposite for wall placement.\n return hitMatrix.elements[5] > 0.75 !== this.placeOnWall ?\n hitPosition.setFromMatrixPosition(hitMatrix) :\n null;\n }\n placeModel(hit) {\n this.placementBox.show = true;\n if (this.placeOnWall) {\n this.goalPosition.copy(hit);\n }\n else {\n this.goalPosition.y = hit.y;\n }\n this.updateTarget();\n this.dispatchEvent({ type: 'status', status: ARStatus.OBJECT_PLACED });\n }\n fingerPolar(fingers) {\n const fingerOne = fingers[0].inputSource.gamepad.axes;\n const fingerTwo = fingers[1].inputSource.gamepad.axes;\n const deltaX = fingerTwo[0] - fingerOne[0];\n const deltaY = fingerTwo[1] - fingerOne[1];\n const angle = Math.atan2(deltaY, deltaX);\n let deltaYaw = this.lastAngle - angle;\n if (deltaYaw > Math.PI) {\n deltaYaw -= 2 * Math.PI;\n }\n else if (deltaYaw < -Math.PI) {\n deltaYaw += 2 * Math.PI;\n }\n this.lastAngle = angle;\n return {\n separation: Math.sqrt(deltaX * deltaX + deltaY * deltaY),\n deltaYaw: deltaYaw\n };\n }\n processInput(frame) {\n const hitSource = this.transientHitTestSource;\n if (hitSource == null) {\n return;\n }\n if (!this.isTranslating && !this.isTwoFingering && !this.isRotating) {\n return;\n }\n const fingers = frame.getHitTestResultsForTransientInput(hitSource);\n const scene = this.presentedScene;\n const scale = scene.scale.x;\n // Rotating, translating and scaling are mutually exclusive operations; only\n // one can happen at a time, but we can switch during a gesture.\n if (this.isTwoFingering) {\n if (fingers.length < 2) {\n // If we lose the second finger, stop scaling (in fact, stop processing\n // input altogether until a new gesture starts).\n this.isTwoFingering = false;\n }\n else {\n const { separation, deltaYaw } = this.fingerPolar(fingers);\n if (this.placeOnWall === false) {\n this.goalYaw += deltaYaw;\n }\n if (scene.canScale) {\n const scale = separation / this.firstRatio;\n this.goalScale =\n (scale < SCALE_SNAP_HIGH && scale > SCALE_SNAP_LOW) ? 1 : scale;\n }\n }\n return;\n }\n else if (fingers.length === 2) {\n // If we were rotating or translating and we get a second finger, switch\n // to scaling instead.\n this.isTranslating = false;\n this.isRotating = false;\n this.isTwoFingering = true;\n const { separation } = this.fingerPolar(fingers);\n this.firstRatio = separation / scale;\n return;\n }\n if (this.isRotating) {\n const angle = this.inputSource.gamepad.axes[0] * ROTATION_RATE;\n this.goalYaw += angle - this.lastAngle;\n this.lastAngle = angle;\n }\n else if (this.isTranslating) {\n fingers.forEach(finger => {\n if (finger.inputSource !== this.inputSource ||\n finger.results.length < 1) {\n return;\n }\n const hit = this.getHitPoint(finger.results[0]);\n if (hit == null) {\n return;\n }\n this.goalPosition.sub(this.lastDragPosition);\n if (this.placeOnWall === false) {\n const offset = hit.y - this.lastDragPosition.y;\n // When a lower floor is found, keep the model at the same height, but\n // drop the placement box to the floor. The model falls on select end.\n if (offset < 0) {\n this.placementBox.offsetHeight = offset / scale;\n this.presentedScene.setShadowScaleAndOffset(scale, offset);\n // Interpolate hit ray up to drag plane\n const cameraPosition = vector3.copy(this.cameraPosition);\n const alpha = -offset / (cameraPosition.y - hit.y);\n cameraPosition.multiplyScalar(alpha);\n hit.multiplyScalar(1 - alpha).add(cameraPosition);\n }\n }\n this.goalPosition.add(hit);\n this.lastDragPosition.copy(hit);\n });\n }\n }\n moveScene(delta) {\n const scene = this.presentedScene;\n const { position, yaw, idealCameraDistance: radius } = scene;\n const goal = this.goalPosition;\n const oldScale = scene.scale.x;\n const box = this.placementBox;\n if (this.initialHitSource == null &&\n (!goal.equals(position) || this.goalScale !== oldScale)) {\n let { x, y, z } = position;\n x = this.xDamper.update(x, goal.x, delta, radius);\n y = this.yDamper.update(y, goal.y, delta, radius);\n z = this.zDamper.update(z, goal.z, delta, radius);\n position.set(x, y, z);\n const newScale = this.scaleDamper.update(oldScale, this.goalScale, delta, 1);\n scene.scale.set(newScale, newScale, newScale);\n if (!this.isTranslating) {\n const offset = goal.y - y;\n if (this.placementComplete && this.placeOnWall === false) {\n box.offsetHeight = offset / newScale;\n scene.setShadowScaleAndOffset(newScale, offset);\n }\n else if (offset === 0) {\n this.placementComplete = true;\n box.show = false;\n scene.setShadowIntensity(AR_SHADOW_INTENSITY);\n this.xDamper.setDecayTime(DECAY_MILLISECONDS);\n this.yDamper.setDecayTime(DECAY_MILLISECONDS);\n this.zDamper.setDecayTime(DECAY_MILLISECONDS);\n }\n }\n }\n box.updateOpacity(delta);\n scene.updateTarget(delta);\n // yaw must be updated last, since this also updates the shadow position.\n scene.yaw = this.yawDamper.update(yaw, this.goalYaw, delta, Math.PI);\n }\n /**\n * Only public to make it testable.\n */\n onWebXRFrame(time, frame) {\n this.frame = frame;\n ++this.frames;\n const refSpace = this.threeRenderer.xr.getReferenceSpace();\n const pose = frame.getViewerPose(refSpace);\n if (pose == null && this.tracking === true && this.frames > INIT_FRAMES) {\n this.tracking = false;\n this.dispatchEvent({ type: 'tracking', status: ARTracking.NOT_TRACKING });\n }\n const scene = this.presentedScene;\n if (pose == null || scene == null || !scene.element[$sceneIsReady]()) {\n this.threeRenderer.clear();\n return;\n }\n if (this.tracking === false) {\n this.tracking = true;\n this.dispatchEvent({ type: 'tracking', status: ARTracking.TRACKING });\n }\n // WebXR may return multiple views, i.e. for headset AR. This\n // isn't really supported at this point, but make a best-effort\n // attempt to render other views also, using the first view\n // as the main viewpoint.\n let isFirstView = true;\n for (const view of pose.views) {\n this.updateView(view);\n if (isFirstView) {\n this.placeInitially(frame);\n this.processInput(frame);\n const delta = time - this.lastTick;\n this.moveScene(delta);\n this.renderer.preRender(scene, time, delta);\n this.lastTick = time;\n }\n // TODO: This is a workaround for a Chrome bug, which should be fixed\n // soon: https://bugs.chromium.org/p/chromium/issues/detail?id=1184085\n const gl = this.threeRenderer.getContext();\n gl.depthMask(false);\n gl.clear(gl.DEPTH_BUFFER_BIT);\n gl.depthMask(true);\n this.threeRenderer.render(scene, scene.camera);\n isFirstView = false;\n }\n }\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * This Debugger exposes internal details of the rendering\n * substructure so that external tools can more easily inspect and operate on\n * them.\n *\n * It also activates shader debugging on the associated GL context. Shader\n * debugging trades performance for useful error information, so it is not\n * recommended to activate this unless needed.\n */\nclass Debugger {\n constructor(renderer) {\n // Force WebGL shader debugging on:\n renderer.threeRenderer.debug = { checkShaderErrors: true };\n // Announce debug details at microtask timing to give the `Renderer`\n // constructor time to complete its initialization, just to be on the safe\n // side:\n Promise.resolve().then(() => {\n self.dispatchEvent(new CustomEvent('model-viewer-renderer-debug', {\n detail: {\n renderer,\n THREE: {\n ShaderMaterial,\n Texture: Texture$1,\n Mesh,\n Scene,\n PlaneBufferGeometry: PlaneGeometry,\n OrthographicCamera,\n WebGLRenderTarget\n }\n }\n }));\n });\n }\n addScene(scene) {\n self.dispatchEvent(new CustomEvent('model-viewer-scene-added-debug', { detail: { scene } }));\n }\n removeScene(scene) {\n self.dispatchEvent(new CustomEvent('model-viewer-scene-removed-debug', { detail: { scene } }));\n }\n}\n\nclass SkeletonUtils {\n\n\tstatic retarget( target, source, options = {} ) {\n\n\t\tconst pos = new Vector3(),\n\t\t\tquat = new Quaternion(),\n\t\t\tscale = new Vector3(),\n\t\t\tbindBoneMatrix = new Matrix4(),\n\t\t\trelativeMatrix = new Matrix4(),\n\t\t\tglobalMatrix = new Matrix4();\n\n\t\toptions.preserveMatrix = options.preserveMatrix !== undefined ? options.preserveMatrix : true;\n\t\toptions.preservePosition = options.preservePosition !== undefined ? options.preservePosition : true;\n\t\toptions.preserveHipPosition = options.preserveHipPosition !== undefined ? options.preserveHipPosition : false;\n\t\toptions.useTargetMatrix = options.useTargetMatrix !== undefined ? options.useTargetMatrix : false;\n\t\toptions.hip = options.hip !== undefined ? options.hip : 'hip';\n\t\toptions.names = options.names || {};\n\n\t\tconst sourceBones = source.isObject3D ? source.skeleton.bones : this.getBones( source ),\n\t\t\tbones = target.isObject3D ? target.skeleton.bones : this.getBones( target );\n\n\t\tlet bindBones,\n\t\t\tbone, name, boneTo,\n\t\t\tbonesPosition;\n\n\t\t// reset bones\n\n\t\tif ( target.isObject3D ) {\n\n\t\t\ttarget.skeleton.pose();\n\n\t\t} else {\n\n\t\t\toptions.useTargetMatrix = true;\n\t\t\toptions.preserveMatrix = false;\n\n\t\t}\n\n\t\tif ( options.preservePosition ) {\n\n\t\t\tbonesPosition = [];\n\n\t\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\t\tbonesPosition.push( bones[ i ].position.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( options.preserveMatrix ) {\n\n\t\t\t// reset matrix\n\n\t\t\ttarget.updateMatrixWorld();\n\n\t\t\ttarget.matrixWorld.identity();\n\n\t\t\t// reset children matrix\n\n\t\t\tfor ( let i = 0; i < target.children.length; ++ i ) {\n\n\t\t\t\ttarget.children[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( options.offsets ) {\n\n\t\t\tbindBones = [];\n\n\t\t\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\t\t\tbone = bones[ i ];\n\t\t\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\t\t\tif ( options.offsets && options.offsets[ name ] ) {\n\n\t\t\t\t\tbone.matrix.multiply( options.offsets[ name ] );\n\n\t\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t\t\tbone.updateMatrixWorld();\n\n\t\t\t\t}\n\n\t\t\t\tbindBones.push( bone.matrixWorld.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\t\tbone = bones[ i ];\n\t\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\t\tboneTo = this.getBoneByName( name, sourceBones );\n\n\t\t\tglobalMatrix.copy( bone.matrixWorld );\n\n\t\t\tif ( boneTo ) {\n\n\t\t\t\tboneTo.updateMatrixWorld();\n\n\t\t\t\tif ( options.useTargetMatrix ) {\n\n\t\t\t\t\trelativeMatrix.copy( boneTo.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trelativeMatrix.copy( target.matrixWorld ).invert();\n\t\t\t\t\trelativeMatrix.multiply( boneTo.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\t// ignore scale to extract rotation\n\n\t\t\t\tscale.setFromMatrixScale( relativeMatrix );\n\t\t\t\trelativeMatrix.scale( scale.set( 1 / scale.x, 1 / scale.y, 1 / scale.z ) );\n\n\t\t\t\t// apply to global matrix\n\n\t\t\t\tglobalMatrix.makeRotationFromQuaternion( quat.setFromRotationMatrix( relativeMatrix ) );\n\n\t\t\t\tif ( target.isObject3D ) {\n\n\t\t\t\t\tconst boneIndex = bones.indexOf( bone ),\n\t\t\t\t\t\twBindMatrix = bindBones ? bindBones[ boneIndex ] : bindBoneMatrix.copy( target.skeleton.boneInverses[ boneIndex ] ).invert();\n\n\t\t\t\t\tglobalMatrix.multiply( wBindMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tglobalMatrix.copyPosition( relativeMatrix );\n\n\t\t\t}\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\tbone.matrix.multiply( globalMatrix );\n\n\t\t\t} else {\n\n\t\t\t\tbone.matrix.copy( globalMatrix );\n\n\t\t\t}\n\n\t\t\tif ( options.preserveHipPosition && name === options.hip ) {\n\n\t\t\t\tbone.matrix.setPosition( pos.set( 0, bone.position.y, 0 ) );\n\n\t\t\t}\n\n\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\tbone.updateMatrixWorld();\n\n\t\t}\n\n\t\tif ( options.preservePosition ) {\n\n\t\t\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\t\t\tbone = bones[ i ];\n\t\t\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\t\t\tif ( name !== options.hip ) {\n\n\t\t\t\t\tbone.position.copy( bonesPosition[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( options.preserveMatrix ) {\n\n\t\t\t// restore matrix\n\n\t\t\ttarget.updateMatrixWorld( true );\n\n\t\t}\n\n\t}\n\n\tstatic retargetClip( target, source, clip, options = {} ) {\n\n\t\toptions.useFirstFramePosition = options.useFirstFramePosition !== undefined ? options.useFirstFramePosition : false;\n\t\toptions.fps = options.fps !== undefined ? options.fps : 30;\n\t\toptions.names = options.names || [];\n\n\t\tif ( ! source.isObject3D ) {\n\n\t\t\tsource = this.getHelperFromSkeleton( source );\n\n\t\t}\n\n\t\tconst numFrames = Math.round( clip.duration * ( options.fps / 1000 ) * 1000 ),\n\t\t\tdelta = 1 / options.fps,\n\t\t\tconvertedTracks = [],\n\t\t\tmixer = new AnimationMixer( source ),\n\t\t\tbones = this.getBones( target.skeleton ),\n\t\t\tboneDatas = [];\n\t\tlet positionOffset,\n\t\t\tbone, boneTo, boneData,\n\t\t\tname;\n\n\t\tmixer.clipAction( clip ).play();\n\t\tmixer.update( 0 );\n\n\t\tsource.updateMatrixWorld();\n\n\t\tfor ( let i = 0; i < numFrames; ++ i ) {\n\n\t\t\tconst time = i * delta;\n\n\t\t\tthis.retarget( target, source, options );\n\n\t\t\tfor ( let j = 0; j < bones.length; ++ j ) {\n\n\t\t\t\tname = options.names[ bones[ j ].name ] || bones[ j ].name;\n\n\t\t\t\tboneTo = this.getBoneByName( name, source.skeleton );\n\n\t\t\t\tif ( boneTo ) {\n\n\t\t\t\t\tbone = bones[ j ];\n\t\t\t\t\tboneData = boneDatas[ j ] = boneDatas[ j ] || { bone: bone };\n\n\t\t\t\t\tif ( options.hip === name ) {\n\n\t\t\t\t\t\tif ( ! boneData.pos ) {\n\n\t\t\t\t\t\t\tboneData.pos = {\n\t\t\t\t\t\t\t\ttimes: new Float32Array( numFrames ),\n\t\t\t\t\t\t\t\tvalues: new Float32Array( numFrames * 3 )\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( options.useFirstFramePosition ) {\n\n\t\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\t\tpositionOffset = bone.position.clone();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbone.position.sub( positionOffset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tboneData.pos.times[ i ] = time;\n\n\t\t\t\t\t\tbone.position.toArray( boneData.pos.values, i * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! boneData.quat ) {\n\n\t\t\t\t\t\tboneData.quat = {\n\t\t\t\t\t\t\ttimes: new Float32Array( numFrames ),\n\t\t\t\t\t\t\tvalues: new Float32Array( numFrames * 4 )\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneData.quat.times[ i ] = time;\n\n\t\t\t\t\tbone.quaternion.toArray( boneData.quat.values, i * 4 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmixer.update( delta );\n\n\t\t\tsource.updateMatrixWorld();\n\n\t\t}\n\n\t\tfor ( let i = 0; i < boneDatas.length; ++ i ) {\n\n\t\t\tboneData = boneDatas[ i ];\n\n\t\t\tif ( boneData ) {\n\n\t\t\t\tif ( boneData.pos ) {\n\n\t\t\t\t\tconvertedTracks.push( new VectorKeyframeTrack(\n\t\t\t\t\t\t'.bones[' + boneData.bone.name + '].position',\n\t\t\t\t\t\tboneData.pos.times,\n\t\t\t\t\t\tboneData.pos.values\n\t\t\t\t\t) );\n\n\t\t\t\t}\n\n\t\t\t\tconvertedTracks.push( new QuaternionKeyframeTrack(\n\t\t\t\t\t'.bones[' + boneData.bone.name + '].quaternion',\n\t\t\t\t\tboneData.quat.times,\n\t\t\t\t\tboneData.quat.values\n\t\t\t\t) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tmixer.uncacheAction( clip );\n\n\t\treturn new AnimationClip( clip.name, - 1, convertedTracks );\n\n\t}\n\n\tstatic getHelperFromSkeleton( skeleton ) {\n\n\t\tconst source = new SkeletonHelper( skeleton.bones[ 0 ] );\n\t\tsource.skeleton = skeleton;\n\n\t\treturn source;\n\n\t}\n\n\tstatic getSkeletonOffsets( target, source, options = {} ) {\n\n\t\tconst targetParentPos = new Vector3(),\n\t\t\ttargetPos = new Vector3(),\n\t\t\tsourceParentPos = new Vector3(),\n\t\t\tsourcePos = new Vector3(),\n\t\t\ttargetDir = new Vector2(),\n\t\t\tsourceDir = new Vector2();\n\n\t\toptions.hip = options.hip !== undefined ? options.hip : 'hip';\n\t\toptions.names = options.names || {};\n\n\t\tif ( ! source.isObject3D ) {\n\n\t\t\tsource = this.getHelperFromSkeleton( source );\n\n\t\t}\n\n\t\tconst nameKeys = Object.keys( options.names ),\n\t\t\tnameValues = Object.values( options.names ),\n\t\t\tsourceBones = source.isObject3D ? source.skeleton.bones : this.getBones( source ),\n\t\t\tbones = target.isObject3D ? target.skeleton.bones : this.getBones( target ),\n\t\t\toffsets = [];\n\n\t\tlet bone, boneTo,\n\t\t\tname, i;\n\n\t\ttarget.skeleton.pose();\n\n\t\tfor ( i = 0; i < bones.length; ++ i ) {\n\n\t\t\tbone = bones[ i ];\n\t\t\tname = options.names[ bone.name ] || bone.name;\n\n\t\t\tboneTo = this.getBoneByName( name, sourceBones );\n\n\t\t\tif ( boneTo && name !== options.hip ) {\n\n\t\t\t\tconst boneParent = this.getNearestBone( bone.parent, nameKeys ),\n\t\t\t\t\tboneToParent = this.getNearestBone( boneTo.parent, nameValues );\n\n\t\t\t\tboneParent.updateMatrixWorld();\n\t\t\t\tboneToParent.updateMatrixWorld();\n\n\t\t\t\ttargetParentPos.setFromMatrixPosition( boneParent.matrixWorld );\n\t\t\t\ttargetPos.setFromMatrixPosition( bone.matrixWorld );\n\n\t\t\t\tsourceParentPos.setFromMatrixPosition( boneToParent.matrixWorld );\n\t\t\t\tsourcePos.setFromMatrixPosition( boneTo.matrixWorld );\n\n\t\t\t\ttargetDir.subVectors(\n\t\t\t\t\tnew Vector2( targetPos.x, targetPos.y ),\n\t\t\t\t\tnew Vector2( targetParentPos.x, targetParentPos.y )\n\t\t\t\t).normalize();\n\n\t\t\t\tsourceDir.subVectors(\n\t\t\t\t\tnew Vector2( sourcePos.x, sourcePos.y ),\n\t\t\t\t\tnew Vector2( sourceParentPos.x, sourceParentPos.y )\n\t\t\t\t).normalize();\n\n\t\t\t\tconst laterialAngle = targetDir.angle() - sourceDir.angle();\n\n\t\t\t\tconst offset = new Matrix4().makeRotationFromEuler(\n\t\t\t\t\tnew Euler(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tlaterialAngle\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\tbone.matrix.multiply( offset );\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t\tbone.updateMatrixWorld();\n\n\t\t\t\toffsets[ name ] = offset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn offsets;\n\n\t}\n\n\tstatic renameBones( skeleton, names ) {\n\n\t\tconst bones = this.getBones( skeleton );\n\n\t\tfor ( let i = 0; i < bones.length; ++ i ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( names[ bone.name ] ) {\n\n\t\t\t\tbone.name = names[ bone.name ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstatic getBones( skeleton ) {\n\n\t\treturn Array.isArray( skeleton ) ? skeleton : skeleton.bones;\n\n\t}\n\n\tstatic getBoneByName( name, skeleton ) {\n\n\t\tfor ( let i = 0, bones = this.getBones( skeleton ); i < bones.length; i ++ ) {\n\n\t\t\tif ( name === bones[ i ].name )\n\n\t\t\t\treturn bones[ i ];\n\n\t\t}\n\n\t}\n\n\tstatic getNearestBone( bone, names ) {\n\n\t\twhile ( bone.isBone ) {\n\n\t\t\tif ( names.indexOf( bone.name ) !== - 1 ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t\tbone = bone.parent;\n\n\t\t}\n\n\t}\n\n\tstatic findBoneTrackData( name, tracks ) {\n\n\t\tconst regexp = /\\[(.*)\\]\\.(.*)/,\n\t\t\tresult = { name: name };\n\n\t\tfor ( let i = 0; i < tracks.length; ++ i ) {\n\n\t\t\t// 1 is track name\n\t\t\t// 2 is track type\n\t\t\tconst trackData = regexp.exec( tracks[ i ].name );\n\n\t\t\tif ( trackData && name === trackData[ 1 ] ) {\n\n\t\t\t\tresult[ trackData[ 2 ] ] = i;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tstatic getEqualsBonesNames( skeleton, targetSkeleton ) {\n\n\t\tconst sourceBones = this.getBones( skeleton ),\n\t\t\ttargetBones = this.getBones( targetSkeleton ),\n\t\t\tbones = [];\n\n\t\tsearch : for ( let i = 0; i < sourceBones.length; i ++ ) {\n\n\t\t\tconst boneName = sourceBones[ i ].name;\n\n\t\t\tfor ( let j = 0; j < targetBones.length; j ++ ) {\n\n\t\t\t\tif ( boneName === targetBones[ j ].name ) {\n\n\t\t\t\t\tbones.push( boneName );\n\n\t\t\t\t\tcontinue search;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bones;\n\n\t}\n\n\tstatic clone( source ) {\n\n\t\tconst sourceLookup = new Map();\n\t\tconst cloneLookup = new Map();\n\n\t\tconst clone = source.clone();\n\n\t\tparallelTraverse( source, clone, function ( sourceNode, clonedNode ) {\n\n\t\t\tsourceLookup.set( clonedNode, sourceNode );\n\t\t\tcloneLookup.set( sourceNode, clonedNode );\n\n\t\t} );\n\n\t\tclone.traverse( function ( node ) {\n\n\t\t\tif ( ! node.isSkinnedMesh ) return;\n\n\t\t\tconst clonedMesh = node;\n\t\t\tconst sourceMesh = sourceLookup.get( node );\n\t\t\tconst sourceBones = sourceMesh.skeleton.bones;\n\n\t\t\tclonedMesh.skeleton = sourceMesh.skeleton.clone();\n\t\t\tclonedMesh.bindMatrix.copy( sourceMesh.bindMatrix );\n\n\t\t\tclonedMesh.skeleton.bones = sourceBones.map( function ( bone ) {\n\n\t\t\t\treturn cloneLookup.get( bone );\n\n\t\t\t} );\n\n\t\t\tclonedMesh.bind( clonedMesh.skeleton, clonedMesh.bindMatrix );\n\n\t\t} );\n\n\t\treturn clone;\n\n\t}\n\n}\n\n\nfunction parallelTraverse( a, b, callback ) {\n\n\tcallback( a, b );\n\n\tfor ( let i = 0; i < a.children.length; i ++ ) {\n\n\t\tparallelTraverse( a.children[ i ], b.children[ i ], callback );\n\n\t}\n\n}\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst $prepared = Symbol('prepared');\nconst $prepare = Symbol('prepare');\nconst $preparedGLTF = Symbol('preparedGLTF');\nconst $clone = Symbol('clone');\n/**\n * Represents the preparation and enhancement of the output of a Three.js\n * GLTFLoader (a Three.js-flavor \"GLTF\"), to make it suitable for optimal,\n * correct viewing in a given presentation context and also make the cloning\n * process more explicit and legible.\n *\n * A GLTFInstance is API-compatible with a Three.js-flavor \"GLTF\", so it should\n * be considered to be interchangeable with the loaded result of a GLTFLoader.\n *\n * This basic implementation only implements trivial preparation and enhancement\n * of a GLTF. These operations are intended to be enhanced by inheriting\n * classes.\n */\nclass GLTFInstance {\n constructor(preparedGLTF) {\n this[$preparedGLTF] = preparedGLTF;\n }\n /**\n * Prepares a given GLTF for presentation and future cloning. A GLTF that is\n * prepared can safely have this method invoked on it multiple times; it will\n * only be prepared once, including after being cloned.\n */\n static prepare(source) {\n if (source.scene == null) {\n throw new Error('Model does not have a scene');\n }\n if (source[$prepared]) {\n return source;\n }\n const prepared = this[$prepare](source);\n // NOTE: ES5 Symbol polyfill is not compatible with spread operator\n // so {...prepared, [$prepared]: true} does not work\n prepared[$prepared] = true;\n return prepared;\n }\n /**\n * Override in an inheriting class to apply specialty one-time preparations\n * for a given input GLTF.\n */\n static [$prepare](source) {\n // TODO(#195,#1003): We don't currently support multiple scenes, so we don't\n // bother preparing extra scenes for now:\n const { scene } = source;\n const scenes = [scene];\n return Object.assign(Object.assign({}, source), { scene, scenes });\n }\n get parser() {\n return this[$preparedGLTF].parser;\n }\n get animations() {\n return this[$preparedGLTF].animations;\n }\n get scene() {\n return this[$preparedGLTF].scene;\n }\n get scenes() {\n return this[$preparedGLTF].scenes;\n }\n get cameras() {\n return this[$preparedGLTF].cameras;\n }\n get asset() {\n return this[$preparedGLTF].asset;\n }\n get userData() {\n return this[$preparedGLTF].userData;\n }\n /**\n * Creates and returns a copy of this instance.\n */\n clone() {\n const GLTFInstanceConstructor = this.constructor;\n const clonedGLTF = this[$clone]();\n return new GLTFInstanceConstructor(clonedGLTF);\n }\n /**\n * Cleans up any retained memory that might not otherwise be released when\n * this instance is done being used.\n */\n dispose() {\n this.scenes.forEach((scene) => {\n scene.traverse((object) => {\n if (!object.isMesh) {\n return;\n }\n const mesh = object;\n const materials = Array.isArray(mesh.material) ? mesh.material : [mesh.material];\n materials.forEach(material => {\n material.dispose();\n });\n mesh.geometry.dispose();\n });\n });\n }\n /**\n * Override in an inheriting class to implement specialized cloning strategies\n */\n [$clone]() {\n const source = this[$preparedGLTF];\n // TODO(#195,#1003): We don't currently support multiple scenes, so we don't\n // bother cloning extra scenes for now:\n const scene = SkeletonUtils.clone(this.scene);\n const scenes = [scene];\n const userData = source.userData ? Object.assign({}, source.userData) : {};\n return Object.assign(Object.assign({}, source), { scene, scenes, userData });\n }\n}\n\n/**\n * @license MIT\n * @see https://github.com/mrdoob/three.js/blob/dev/LICENSE\n */\nconst alphaChunk = /* glsl */ `\n#ifdef ALPHATEST\n\n if ( diffuseColor.a < ALPHATEST ) discard;\n diffuseColor.a = 1.0;\n\n#endif\n`;\n\nconst $threeGLTF = Symbol('threeGLTF');\nconst $gltf = Symbol('gltf');\nconst $gltfElementMap = Symbol('gltfElementMap');\nconst $threeObjectMap = Symbol('threeObjectMap');\nconst $parallelTraverseThreeScene = Symbol('parallelTraverseThreeScene');\nconst $correlateOriginalThreeGLTF = Symbol('correlateOriginalThreeGLTF');\nconst $correlateCloneThreeGLTF = Symbol('correlateCloneThreeGLTF');\n/**\n * The Three.js GLTFLoader provides us with an in-memory representation\n * of a glTF in terms of Three.js constructs. It also provides us with a copy\n * of the deserialized glTF without any Three.js decoration, and a mapping of\n * glTF elements to their corresponding Three.js constructs.\n *\n * A CorrelatedSceneGraph exposes a synchronously available mapping of glTF\n * element references to their corresponding Three.js constructs.\n */\nclass CorrelatedSceneGraph {\n constructor(threeGLTF, gltf, threeObjectMap, gltfElementMap) {\n this[$threeGLTF] = threeGLTF;\n this[$gltf] = gltf;\n this[$gltfElementMap] = gltfElementMap;\n this[$threeObjectMap] = threeObjectMap;\n }\n /**\n * Produce a CorrelatedSceneGraph from a naturally generated Three.js GLTF.\n * Such GLTFs are produced by Three.js' GLTFLoader, and contain cached\n * details that expedite the correlation step.\n *\n * If a CorrelatedSceneGraph is provided as the second argument, re-correlates\n * a cloned Three.js GLTF with a clone of the glTF hierarchy used to produce\n * the upstream Three.js GLTF that the clone was created from. The result\n * CorrelatedSceneGraph is representative of the cloned hierarchy.\n */\n static from(threeGLTF, upstreamCorrelatedSceneGraph) {\n if (upstreamCorrelatedSceneGraph != null) {\n return this[$correlateCloneThreeGLTF](threeGLTF, upstreamCorrelatedSceneGraph);\n }\n else {\n return this[$correlateOriginalThreeGLTF](threeGLTF);\n }\n }\n static [$correlateOriginalThreeGLTF](threeGLTF) {\n const gltf = threeGLTF.parser.json;\n const { associations } = threeGLTF.parser;\n const gltfElementMap = new Map();\n const defaultMaterial = { name: 'Default' };\n const defaultReference = { type: 'materials', index: -1 };\n // NOTE: IE11 does not have Map iterator methods\n associations.forEach((gltfElementReference, threeObject) => {\n // Note: GLTFLoader creates a \"default\" material that has no corresponding\n // glTF element in the case that no materials are specified in the source\n // glTF. In this case we append a default material to allow this to be\n // operated upon.\n if (gltfElementReference == null) {\n if (defaultReference.index < 0) {\n if (gltf.materials == null) {\n gltf.materials = [];\n }\n defaultReference.index = gltf.materials.length;\n gltf.materials.push(defaultMaterial);\n }\n gltfElementReference = defaultReference;\n }\n const { type, index } = gltfElementReference;\n const elementArray = gltf[type] || [];\n const gltfElement = elementArray[index];\n if (gltfElement == null) {\n // TODO: Maybe throw here...\n return;\n }\n let threeObjects = gltfElementMap.get(gltfElement);\n if (threeObjects == null) {\n threeObjects = new Set();\n gltfElementMap.set(gltfElement, threeObjects);\n }\n threeObjects.add(threeObject);\n });\n return new CorrelatedSceneGraph(threeGLTF, gltf, associations, gltfElementMap);\n }\n /**\n * Transfers the association between a raw glTF and a Three.js scene graph\n * to a clone of the Three.js scene graph, resolved as a new\n * CorrelatedsceneGraph instance.\n */\n static [$correlateCloneThreeGLTF](cloneThreeGLTF, upstreamCorrelatedSceneGraph) {\n const originalThreeGLTF = upstreamCorrelatedSceneGraph.threeGLTF;\n const originalGLTF = upstreamCorrelatedSceneGraph.gltf;\n const cloneGLTF = JSON.parse(JSON.stringify(originalGLTF));\n const cloneThreeObjectMap = new Map();\n const cloneGLTFELementMap = new Map();\n const defaultMaterial = { name: 'Default' };\n const defaultReference = { type: 'materials', index: -1 };\n for (let i = 0; i < originalThreeGLTF.scenes.length; i++) {\n this[$parallelTraverseThreeScene](originalThreeGLTF.scenes[i], cloneThreeGLTF.scenes[i], (object, cloneObject) => {\n let elementReference = upstreamCorrelatedSceneGraph.threeObjectMap.get(object);\n if (elementReference == null) {\n if (defaultReference.index < 0) {\n if (cloneGLTF.materials == null) {\n cloneGLTF.materials = [];\n }\n defaultReference.index = cloneGLTF.materials.length;\n cloneGLTF.materials.push(defaultMaterial);\n }\n elementReference = defaultReference;\n }\n const { type, index } = elementReference;\n const cloneElement = cloneGLTF[type][index];\n cloneThreeObjectMap.set(cloneObject, { type, index });\n const cloneObjects = cloneGLTFELementMap.get(cloneElement) || new Set();\n cloneObjects.add(cloneObject);\n cloneGLTFELementMap.set(cloneElement, cloneObjects);\n });\n }\n return new CorrelatedSceneGraph(cloneThreeGLTF, cloneGLTF, cloneThreeObjectMap, cloneGLTFELementMap);\n }\n /**\n * Traverses two presumably identical Three.js scenes, and invokes a callback\n * for each Object3D or Material encountered, including the initial scene.\n * Adapted from\n * https://github.com/mrdoob/three.js/blob/7c1424c5819ab622a346dd630ee4e6431388021e/examples/jsm/utils/SkeletonUtils.js#L586-L596\n */\n static [$parallelTraverseThreeScene](sceneOne, sceneTwo, callback) {\n const isMesh = (object) => {\n return object.isMesh;\n };\n const traverse = (a, b) => {\n callback(a, b);\n if (a.isObject3D) {\n if (isMesh(a)) {\n if (Array.isArray(a.material)) {\n for (let i = 0; i < a.material.length; ++i) {\n traverse(a.material[i], b.material[i]);\n }\n }\n else {\n traverse(a.material, b.material);\n }\n }\n for (let i = 0; i < a.children.length; ++i) {\n traverse(a.children[i], b.children[i]);\n }\n }\n };\n traverse(sceneOne, sceneTwo);\n }\n /**\n * The source Three.js GLTF result given to us by a Three.js GLTFLoader.\n */\n get threeGLTF() {\n return this[$threeGLTF];\n }\n /**\n * The in-memory deserialized source glTF.\n */\n get gltf() {\n return this[$gltf];\n }\n /**\n * A Map of glTF element references to arrays of corresponding Three.js\n * object references. Three.js objects are kept in arrays to account for\n * cases where more than one Three.js object corresponds to a single glTF\n * element.\n */\n get gltfElementMap() {\n return this[$gltfElementMap];\n }\n /**\n * A map of individual Three.js objects to corresponding elements in the\n * source glTF.\n */\n get threeObjectMap() {\n return this[$threeObjectMap];\n }\n loadVariant(variantIndex, onUpdate = () => { }) {\n const updatedMaterials = new Set();\n this.threeGLTF.scene.traverse(async (object) => {\n const { gltfExtensions } = object.userData;\n if (!object.isMesh || gltfExtensions == null) {\n return;\n }\n const meshVariantData = gltfExtensions['KHR_materials_variants'];\n if (meshVariantData == null) {\n return;\n }\n let materialIndex = -1;\n for (const mapping of meshVariantData.mappings) {\n if (mapping.variants.indexOf(variantIndex) >= 0) {\n materialIndex = mapping.material;\n break;\n }\n }\n if (materialIndex < 0) {\n return;\n }\n const material = await this.threeGLTF.parser.getDependency('material', materialIndex);\n updatedMaterials.add(materialIndex);\n object.material = material;\n this.threeGLTF.parser.assignFinalMaterial(object);\n onUpdate();\n const gltfElement = this.gltf.materials[materialIndex];\n let threeObjects = this.gltfElementMap.get(gltfElement);\n if (threeObjects == null) {\n threeObjects = new Set();\n this.gltfElementMap.set(gltfElement, threeObjects);\n }\n threeObjects.add(object.material);\n });\n return updatedMaterials;\n }\n}\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst $cloneAndPatchMaterial = Symbol('cloneAndPatchMaterial');\nconst $correlatedSceneGraph = Symbol('correlatedSceneGraph');\n/**\n * This specialization of GLTFInstance collects all of the processing needed\n * to prepare a model and to clone it making special considerations for\n * use cases.\n */\nclass ModelViewerGLTFInstance extends GLTFInstance {\n /**\n * @override\n */\n static [$prepare](source) {\n const prepared = super[$prepare](source);\n if (prepared[$correlatedSceneGraph] == null) {\n prepared[$correlatedSceneGraph] = CorrelatedSceneGraph.from(prepared);\n }\n const { scene } = prepared;\n const meshesToDuplicate = [];\n scene.traverse((node) => {\n // Set a high renderOrder while we're here to ensure the model\n // always renders on top of the skysphere\n node.renderOrder = 1000;\n // Three.js seems to cull some animated models incorrectly. Since we\n // expect to view our whole scene anyway, we turn off the frustum\n // culling optimization here.\n node.frustumCulled = false;\n // Animations for objects without names target their UUID instead. When\n // objects are cloned, they get new UUIDs which the animation can't\n // find. To fix this, we assign their UUID as their name.\n if (!node.name) {\n node.name = node.uuid;\n }\n if (!node.isMesh) {\n return;\n }\n node.castShadow = true;\n const mesh = node;\n let transparent = false;\n const materials = Array.isArray(mesh.material) ? mesh.material : [mesh.material];\n materials.forEach(material => {\n if (material.isMeshStandardMaterial) {\n if (material.transparent && material.side === DoubleSide) {\n transparent = true;\n material.side = FrontSide;\n }\n }\n });\n if (transparent) {\n meshesToDuplicate.push(mesh);\n }\n });\n // We duplicate transparent, double-sided meshes and render the back face\n // before the front face. This creates perfect triangle sorting for all\n // convex meshes. Sorting artifacts can still appear when you can see\n // through more than two layers of a given mesh, but this can usually be\n // mitigated by the author splitting the mesh into mostly convex regions.\n // The performance cost is not too great as the same shader is reused and\n // the same number of fragments are processed; only the vertex shader is run\n // twice. @see https://threejs.org/examples/webgl_materials_physical_transparency.html\n for (const mesh of meshesToDuplicate) {\n const materials = Array.isArray(mesh.material) ? mesh.material : [mesh.material];\n const duplicateMaterials = materials.map((material) => {\n const backMaterial = material.clone();\n backMaterial.side = BackSide;\n return backMaterial;\n });\n const duplicateMaterial = Array.isArray(mesh.material) ?\n duplicateMaterials :\n duplicateMaterials[0];\n const meshBack = mesh.clone();\n meshBack.material = duplicateMaterial;\n meshBack.renderOrder = -1;\n mesh.parent.add(meshBack);\n }\n return prepared;\n }\n get correlatedSceneGraph() {\n return this[$preparedGLTF][$correlatedSceneGraph];\n }\n /**\n * @override\n */\n [$clone]() {\n const clone = super[$clone]();\n const sourceUUIDToClonedMaterial = new Map();\n clone.scene.traverse((node) => {\n // Materials aren't cloned when cloning meshes; geometry\n // and materials are copied by reference. This is necessary\n // for the same model to be used twice with different\n // environment maps.\n if (node.isMesh) {\n const mesh = node;\n if (Array.isArray(mesh.material)) {\n mesh.material = mesh.material.map((material) => this[$cloneAndPatchMaterial](material, sourceUUIDToClonedMaterial));\n }\n else if (mesh.material != null) {\n mesh.material = this[$cloneAndPatchMaterial](mesh.material, sourceUUIDToClonedMaterial);\n }\n }\n });\n // Cross-correlate the scene graph by relying on information in the\n // current scene graph; without this step, relationships between the\n // Three.js object graph and the glTF scene graph will be lost.\n clone[$correlatedSceneGraph] =\n CorrelatedSceneGraph.from(clone, this.correlatedSceneGraph);\n return clone;\n }\n /**\n * Creates a clone of the given material, and applies a patch to the\n * shader program.\n */\n [$cloneAndPatchMaterial](material, sourceUUIDToClonedMaterial) {\n // If we already cloned this material (determined by tracking the UUID of\n // source materials that have been cloned), then return that previously\n // cloned instance:\n if (sourceUUIDToClonedMaterial.has(material.uuid)) {\n return sourceUUIDToClonedMaterial.get(material.uuid);\n }\n const clone = material.clone();\n if (material.map != null) {\n clone.map = material.map.clone();\n clone.map.needsUpdate = true;\n }\n if (material.normalMap != null) {\n clone.normalMap = material.normalMap.clone();\n clone.normalMap.needsUpdate = true;\n }\n if (material.emissiveMap != null) {\n clone.emissiveMap = material.emissiveMap.clone();\n clone.emissiveMap.needsUpdate = true;\n }\n // Clones the roughnessMap if it exists.\n let roughnessMap = null;\n if (material.roughnessMap != null) {\n roughnessMap = material.roughnessMap.clone();\n }\n // Assigns the roughnessMap to the cloned material and generates mipmaps.\n if (roughnessMap != null) {\n roughnessMap.needsUpdate = true;\n clone.roughnessMap = roughnessMap;\n // Generates mipmaps from the clone of the roughnessMap.\n const { threeRenderer, roughnessMipmapper } = Renderer.singleton;\n // XR must be disabled while doing offscreen rendering or it will\n // clobber the camera.\n const { enabled } = threeRenderer.xr;\n threeRenderer.xr.enabled = false;\n roughnessMipmapper.generateMipmaps(clone);\n threeRenderer.xr.enabled = enabled;\n }\n // Checks if roughnessMap and metalnessMap share the same texture and\n // either clones or assigns.\n if (material.roughnessMap === material.metalnessMap) {\n clone.metalnessMap = roughnessMap;\n }\n else if (material.metalnessMap != null) {\n clone.metalnessMap = material.metalnessMap.clone();\n clone.metalnessMap.needsUpdate = true;\n }\n // Checks if roughnessMap and aoMap share the same texture and\n // either clones or assigns.\n if (material.roughnessMap === material.aoMap) {\n clone.aoMap = roughnessMap;\n }\n else if (material.aoMap != null) {\n clone.aoMap = material.aoMap.clone();\n clone.aoMap.needsUpdate = true;\n }\n // This allows us to patch three's materials, on top of patches already\n // made, for instance GLTFLoader patches SpecularGlossiness materials.\n // Unfortunately, three's program cache differentiates SpecGloss materials\n // via onBeforeCompile.toString(), so these two functions do the same\n // thing but look different in order to force a proper recompile.\n const oldOnBeforeCompile = material.onBeforeCompile;\n clone.onBeforeCompile = material.isGLTFSpecularGlossinessMaterial ?\n (shader) => {\n oldOnBeforeCompile(shader, undefined);\n shader.fragmentShader = shader.fragmentShader.replace('#include ', alphaChunk);\n } :\n (shader) => {\n shader.fragmentShader = shader.fragmentShader.replace('#include ', alphaChunk);\n oldOnBeforeCompile(shader, undefined);\n };\n // This makes shadows better for non-manifold meshes\n clone.shadowSide = FrontSide;\n // This improves transparent rendering and can be removed whenever\n // https://github.com/mrdoob/three.js/pull/18235 finally lands.\n if (clone.transparent) {\n clone.depthWrite = false;\n }\n // This little hack ignores alpha for opaque materials, in order to comply\n // with the glTF spec.\n if (!clone.alphaTest && !clone.transparent) {\n clone.alphaTest = -0.5;\n }\n sourceUUIDToClonedMaterial.set(material.uuid, clone);\n return clone;\n }\n}\n\n// https://github.com/mrdoob/three.js/issues/5552\n// http://en.wikipedia.org/wiki/RGBE_image_format\n\nclass RGBELoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.type = UnsignedByteType;\n\n\t}\n\n\t// adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n\tparse( buffer ) {\n\n\t\tconst\n\t\t\t/* return codes for rgbe routines */\n\t\t\t//RGBE_RETURN_SUCCESS = 0,\n\t\t\tRGBE_RETURN_FAILURE = - 1,\n\n\t\t\t/* default error routine. change this to change error handling */\n\t\t\trgbe_read_error = 1,\n\t\t\trgbe_write_error = 2,\n\t\t\trgbe_format_error = 3,\n\t\t\trgbe_memory_error = 4,\n\t\t\trgbe_error = function ( rgbe_error_code, msg ) {\n\n\t\t\t\tswitch ( rgbe_error_code ) {\n\n\t\t\t\t\tcase rgbe_read_error: console.error( 'THREE.RGBELoader Read Error: ' + ( msg || '' ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase rgbe_write_error: console.error( 'THREE.RGBELoader Write Error: ' + ( msg || '' ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase rgbe_format_error: console.error( 'THREE.RGBELoader Bad File Format: ' + ( msg || '' ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\tcase rgbe_memory_error: console.error( 'THREE.RGBELoader: Error: ' + ( msg || '' ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn RGBE_RETURN_FAILURE;\n\n\t\t\t},\n\n\t\t\t/* offsets to red, green, and blue components in a data (float) pixel */\n\t\t\t//RGBE_DATA_RED = 0,\n\t\t\t//RGBE_DATA_GREEN = 1,\n\t\t\t//RGBE_DATA_BLUE = 2,\n\n\t\t\t/* number of floats per pixel, use 4 since stored in rgba image format */\n\t\t\t//RGBE_DATA_SIZE = 4,\n\n\t\t\t/* flags indicating which fields in an rgbe_header_info are valid */\n\t\t\tRGBE_VALID_PROGRAMTYPE = 1,\n\t\t\tRGBE_VALID_FORMAT = 2,\n\t\t\tRGBE_VALID_DIMENSIONS = 4,\n\n\t\t\tNEWLINE = '\\n',\n\n\t\t\tfgets = function ( buffer, lineLimit, consume ) {\n\n\t\t\t\tconst chunkSize = 128;\n\n\t\t\t\tlineLimit = ! lineLimit ? 1024 : lineLimit;\n\t\t\t\tlet p = buffer.pos,\n\t\t\t\t\ti = - 1, len = 0, s = '',\n\t\t\t\t\tchunk = String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\twhile ( ( 0 > ( i = chunk.indexOf( NEWLINE ) ) ) && ( len < lineLimit ) && ( p < buffer.byteLength ) ) {\n\n\t\t\t\t\ts += chunk; len += chunk.length;\n\t\t\t\t\tp += chunkSize;\n\t\t\t\t\tchunk += String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( - 1 < i ) {\n\n\t\t\t\t\t/*for (i=l-1; i>=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n\t\t\t\t\tif ( false !== consume ) buffer.pos += len + i + 1;\n\t\t\t\t\treturn s + chunk.slice( 0, i );\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/* minimal header reading. modify if you want to parse more information */\n\t\t\tRGBE_ReadHeader = function ( buffer ) {\n\n\n\t\t\t\t// regexes to parse header info fields\n\t\t\t\tconst magic_token_re = /^#\\?(\\S+)/,\n\t\t\t\t\tgamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\texposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\tformat_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n\t\t\t\t\tdimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n\n\t\t\t\t\t// RGBE format header struct\n\t\t\t\t\theader = {\n\n\t\t\t\t\t\tvalid: 0, /* indicate which fields are valid */\n\n\t\t\t\t\t\tstring: '', /* the actual header string */\n\n\t\t\t\t\t\tcomments: '', /* comments found in header */\n\n\t\t\t\t\t\tprogramtype: 'RGBE', /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */\n\n\t\t\t\t\t\tformat: '', /* RGBE format, default 32-bit_rle_rgbe */\n\n\t\t\t\t\t\tgamma: 1.0, /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */\n\n\t\t\t\t\t\texposure: 1.0, /* a value of 1.0 in an image corresponds to watts/steradian/m^2. defaults to 1.0 */\n\n\t\t\t\t\t\twidth: 0, height: 0 /* image dimensions, width/height */\n\n\t\t\t\t\t};\n\n\t\t\t\tlet line, match;\n\n\t\t\t\tif ( buffer.pos >= buffer.byteLength || ! ( line = fgets( buffer ) ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_read_error, 'no header found' );\n\n\t\t\t\t}\n\n\t\t\t\t/* if you want to require the magic token then uncomment the next line */\n\t\t\t\tif ( ! ( match = line.match( magic_token_re ) ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'bad initial token' );\n\n\t\t\t\t}\n\n\t\t\t\theader.valid |= RGBE_VALID_PROGRAMTYPE;\n\t\t\t\theader.programtype = match[ 1 ];\n\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tline = fgets( buffer );\n\t\t\t\t\tif ( false === line ) break;\n\t\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\t\tif ( '#' === line.charAt( 0 ) ) {\n\n\t\t\t\t\t\theader.comments += line + '\\n';\n\t\t\t\t\t\tcontinue; // comment line\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( gamma_re ) ) {\n\n\t\t\t\t\t\theader.gamma = parseFloat( match[ 1 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( exposure_re ) ) {\n\n\t\t\t\t\t\theader.exposure = parseFloat( match[ 1 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( format_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_FORMAT;\n\t\t\t\t\t\theader.format = match[ 1 ];//'32-bit_rle_rgbe';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( dimensions_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_DIMENSIONS;\n\t\t\t\t\t\theader.height = parseInt( match[ 1 ], 10 );\n\t\t\t\t\t\theader.width = parseInt( match[ 2 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( header.valid & RGBE_VALID_FORMAT ) && ( header.valid & RGBE_VALID_DIMENSIONS ) ) break;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_FORMAT ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'missing format specifier' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_DIMENSIONS ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'missing image size specifier' );\n\n\t\t\t\t}\n\n\t\t\t\treturn header;\n\n\t\t\t},\n\n\t\t\tRGBE_ReadPixels_RLE = function ( buffer, w, h ) {\n\n\t\t\t\tconst scanline_width = w;\n\n\t\t\t\tif (\n\t\t\t\t\t// run length encoding is not allowed so read flat\n\t\t\t\t\t( ( scanline_width < 8 ) || ( scanline_width > 0x7fff ) ) ||\n\t\t\t\t\t// this file is not run length encoded\n\t\t\t\t\t( ( 2 !== buffer[ 0 ] ) || ( 2 !== buffer[ 1 ] ) || ( buffer[ 2 ] & 0x80 ) )\n\t\t\t\t) {\n\n\t\t\t\t\t// return the flat buffer\n\t\t\t\t\treturn new Uint8Array( buffer );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scanline_width !== ( ( buffer[ 2 ] << 8 ) | buffer[ 3 ] ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'wrong scanline width' );\n\n\t\t\t\t}\n\n\t\t\t\tconst data_rgba = new Uint8Array( 4 * w * h );\n\n\t\t\t\tif ( ! data_rgba.length ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_memory_error, 'unable to allocate buffer space' );\n\n\t\t\t\t}\n\n\t\t\t\tlet offset = 0, pos = 0;\n\n\t\t\t\tconst ptr_end = 4 * scanline_width;\n\t\t\t\tconst rgbeStart = new Uint8Array( 4 );\n\t\t\t\tconst scanline_buffer = new Uint8Array( ptr_end );\n\t\t\t\tlet num_scanlines = h;\n\n\t\t\t\t// read in each successive scanline\n\t\t\t\twhile ( ( num_scanlines > 0 ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\tif ( pos + 4 > buffer.byteLength ) {\n\n\t\t\t\t\t\treturn rgbe_error( rgbe_read_error );\n\n\t\t\t\t\t}\n\n\t\t\t\t\trgbeStart[ 0 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 1 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 2 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 3 ] = buffer[ pos ++ ];\n\n\t\t\t\t\tif ( ( 2 != rgbeStart[ 0 ] ) || ( 2 != rgbeStart[ 1 ] ) || ( ( ( rgbeStart[ 2 ] << 8 ) | rgbeStart[ 3 ] ) != scanline_width ) ) {\n\n\t\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'bad rgbe scanline format' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// read each of the four channels for the scanline into the buffer\n\t\t\t\t\t// first red, then green, then blue, then exponent\n\t\t\t\t\tlet ptr = 0, count;\n\n\t\t\t\t\twhile ( ( ptr < ptr_end ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\t\tcount = buffer[ pos ++ ];\n\t\t\t\t\t\tconst isEncodedRun = count > 128;\n\t\t\t\t\t\tif ( isEncodedRun ) count -= 128;\n\n\t\t\t\t\t\tif ( ( 0 === count ) || ( ptr + count > ptr_end ) ) {\n\n\t\t\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'bad scanline data' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( isEncodedRun ) {\n\n\t\t\t\t\t\t\t// a (encoded) run of the same value\n\t\t\t\t\t\t\tconst byteValue = buffer[ pos ++ ];\n\t\t\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\t\tscanline_buffer[ ptr ++ ] = byteValue;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//ptr += count;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// a literal-run\n\t\t\t\t\t\t\tscanline_buffer.set( buffer.subarray( pos, pos + count ), ptr );\n\t\t\t\t\t\t\tptr += count; pos += count;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// now convert data from buffer into rgba\n\t\t\t\t\t// first red, then green, then blue, then exponent (alpha)\n\t\t\t\t\tconst l = scanline_width; //scanline_buffer.byteLength;\n\t\t\t\t\tfor ( let i = 0; i < l; i ++ ) {\n\n\t\t\t\t\t\tlet off = 0;\n\t\t\t\t\t\tdata_rgba[ offset ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 1 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 2 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 3 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toffset += 4;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnum_scanlines --;\n\n\t\t\t\t}\n\n\t\t\t\treturn data_rgba;\n\n\t\t\t};\n\n\t\tconst RGBEByteToRGBFloat = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\tdestArray[ destOffset + 0 ] = sourceArray[ sourceOffset + 0 ] * scale;\n\t\t\tdestArray[ destOffset + 1 ] = sourceArray[ sourceOffset + 1 ] * scale;\n\t\t\tdestArray[ destOffset + 2 ] = sourceArray[ sourceOffset + 2 ] * scale;\n\n\t\t};\n\n\t\tconst RGBEByteToRGBHalf = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\tdestArray[ destOffset + 0 ] = DataUtils.toHalfFloat( sourceArray[ sourceOffset + 0 ] * scale );\n\t\t\tdestArray[ destOffset + 1 ] = DataUtils.toHalfFloat( sourceArray[ sourceOffset + 1 ] * scale );\n\t\t\tdestArray[ destOffset + 2 ] = DataUtils.toHalfFloat( sourceArray[ sourceOffset + 2 ] * scale );\n\n\t\t};\n\n\t\tconst byteArray = new Uint8Array( buffer );\n\t\tbyteArray.pos = 0;\n\t\tconst rgbe_header_info = RGBE_ReadHeader( byteArray );\n\n\t\tif ( RGBE_RETURN_FAILURE !== rgbe_header_info ) {\n\n\t\t\tconst w = rgbe_header_info.width,\n\t\t\t\th = rgbe_header_info.height,\n\t\t\t\timage_rgba_data = RGBE_ReadPixels_RLE( byteArray.subarray( byteArray.pos ), w, h );\n\n\t\t\tif ( RGBE_RETURN_FAILURE !== image_rgba_data ) {\n\n\t\t\t\tlet data, format, type;\n\t\t\t\tlet numElements;\n\n\t\t\t\tswitch ( this.type ) {\n\n\t\t\t\t\tcase UnsignedByteType:\n\n\t\t\t\t\t\tdata = image_rgba_data;\n\t\t\t\t\t\tformat = RGBEFormat; // handled as THREE.RGBAFormat in shaders\n\t\t\t\t\t\ttype = UnsignedByteType;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase FloatType:\n\n\t\t\t\t\t\tnumElements = ( image_rgba_data.length / 4 ) * 3;\n\t\t\t\t\t\tconst floatArray = new Float32Array( numElements );\n\n\t\t\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\t\t\tRGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata = floatArray;\n\t\t\t\t\t\tformat = RGBFormat;\n\t\t\t\t\t\ttype = FloatType;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\t\tnumElements = ( image_rgba_data.length / 4 ) * 3;\n\t\t\t\t\t\tconst halfArray = new Uint16Array( numElements );\n\n\t\t\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\t\t\tRGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata = halfArray;\n\t\t\t\t\t\tformat = RGBFormat;\n\t\t\t\t\t\ttype = HalfFloatType;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.error( 'THREE.RGBELoader: unsupported type: ', this.type );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\twidth: w, height: h,\n\t\t\t\t\tdata: data,\n\t\t\t\t\theader: rgbe_header_info.string,\n\t\t\t\t\tgamma: rgbe_header_info.gamma,\n\t\t\t\t\texposure: rgbe_header_info.exposure,\n\t\t\t\t\tformat: format,\n\t\t\t\t\ttype: type\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tfunction onLoadCallback( texture, texData ) {\n\n\t\t\tswitch ( texture.type ) {\n\n\t\t\t\tcase UnsignedByteType:\n\n\t\t\t\t\ttexture.encoding = RGBEEncoding;\n\t\t\t\t\ttexture.minFilter = NearestFilter;\n\t\t\t\t\ttexture.magFilter = NearestFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FloatType:\n\n\t\t\t\t\ttexture.encoding = LinearEncoding;\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\ttexture.encoding = LinearEncoding;\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}\n\n\t\treturn super.load( url, onLoadCallback, onProgress, onError );\n\n\t}\n\n}\n\n/* @license\n * Copyright 2021 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass EnvironmentScene extends Scene {\n constructor() {\n super();\n this.position.y = -3.5;\n const geometry = new BoxGeometry();\n geometry.deleteAttribute('uv');\n const roomMaterial = new MeshStandardMaterial({ metalness: 0, side: BackSide });\n const boxMaterial = new MeshStandardMaterial({ metalness: 0 });\n const mainLight = new PointLight(0xffffff, 500.0, 28, 2);\n mainLight.position.set(0.418, 16.199, 0.300);\n this.add(mainLight);\n const room = new Mesh(geometry, roomMaterial);\n room.position.set(-0.757, 13.219, 0.717);\n room.scale.set(31.713, 28.305, 28.591);\n this.add(room);\n const box1 = new Mesh(geometry, boxMaterial);\n box1.position.set(-10.906, 2.009, 1.846);\n box1.rotation.set(0, -0.195, 0);\n box1.scale.set(2.328, 7.905, 4.651);\n this.add(box1);\n const box2 = new Mesh(geometry, boxMaterial);\n box2.position.set(-5.607, -0.754, -0.758);\n box2.rotation.set(0, 0.994, 0);\n box2.scale.set(1.970, 1.534, 3.955);\n this.add(box2);\n const box3 = new Mesh(geometry, boxMaterial);\n box3.position.set(6.167, 0.857, 7.803);\n box3.rotation.set(0, 0.561, 0);\n box3.scale.set(3.927, 6.285, 3.687);\n this.add(box3);\n const box4 = new Mesh(geometry, boxMaterial);\n box4.position.set(-2.017, 0.018, 6.124);\n box4.rotation.set(0, 0.333, 0);\n box4.scale.set(2.002, 4.566, 2.064);\n this.add(box4);\n const box5 = new Mesh(geometry, boxMaterial);\n box5.position.set(2.291, -0.756, -2.621);\n box5.rotation.set(0, -0.286, 0);\n box5.scale.set(1.546, 1.552, 1.496);\n this.add(box5);\n const box6 = new Mesh(geometry, boxMaterial);\n box6.position.set(-2.193, -0.369, -5.547);\n box6.rotation.set(0, 0.516, 0);\n box6.scale.set(3.875, 3.487, 2.986);\n this.add(box6);\n // -x right\n const light1 = new Mesh(geometry, this.createAreaLightMaterial(50));\n light1.position.set(-16.116, 14.37, 8.208);\n light1.scale.set(0.1, 2.428, 2.739);\n this.add(light1);\n // -x left\n const light2 = new Mesh(geometry, this.createAreaLightMaterial(50));\n light2.position.set(-16.109, 18.021, -8.207);\n light2.scale.set(0.1, 2.425, 2.751);\n this.add(light2);\n // +x\n const light3 = new Mesh(geometry, this.createAreaLightMaterial(17));\n light3.position.set(14.904, 12.198, -1.832);\n light3.scale.set(0.15, 4.265, 6.331);\n this.add(light3);\n // +z\n const light4 = new Mesh(geometry, this.createAreaLightMaterial(43));\n light4.position.set(-0.462, 8.89, 14.520);\n light4.scale.set(4.38, 5.441, 0.088);\n this.add(light4);\n // -z\n const light5 = new Mesh(geometry, this.createAreaLightMaterial(20));\n light5.position.set(3.235, 11.486, -12.541);\n light5.scale.set(2.5, 2.0, 0.1);\n this.add(light5);\n // +y\n const light6 = new Mesh(geometry, this.createAreaLightMaterial(100));\n light6.position.set(0.0, 20.0, 0.0);\n light6.scale.set(1.0, 0.1, 1.0);\n this.add(light6);\n }\n createAreaLightMaterial(intensity) {\n const material = new MeshBasicMaterial();\n material.color.setScalar(intensity);\n return material;\n }\n}\n\n/* @license\n * Copyright 2021 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass EnvironmentSceneAlt extends Scene {\n constructor() {\n super();\n this.position.y = -3.5;\n const geometry = new BoxGeometry();\n geometry.deleteAttribute('uv');\n const roomMaterial = new MeshStandardMaterial({ metalness: 0, side: BackSide });\n const boxMaterial = new MeshStandardMaterial({ metalness: 0 });\n const mainLight = new PointLight(0xffffff, 400.0, 28, 2);\n mainLight.position.set(0.5, 14.0, 0.5);\n this.add(mainLight);\n const room = new Mesh(geometry, roomMaterial);\n room.position.set(0.0, 13.2, 0.0);\n room.scale.set(31.5, 28.5, 31.5);\n this.add(room);\n const box1 = new Mesh(geometry, boxMaterial);\n box1.position.set(-10.906, -1.0, 1.846);\n box1.rotation.set(0, -0.195, 0);\n box1.scale.set(2.328, 7.905, 4.651);\n this.add(box1);\n const box2 = new Mesh(geometry, boxMaterial);\n box2.position.set(-5.607, -0.754, -0.758);\n box2.rotation.set(0, 0.994, 0);\n box2.scale.set(1.970, 1.534, 3.955);\n this.add(box2);\n const box3 = new Mesh(geometry, boxMaterial);\n box3.position.set(6.167, -0.16, 7.803);\n box3.rotation.set(0, 0.561, 0);\n box3.scale.set(3.927, 6.285, 3.687);\n this.add(box3);\n const box4 = new Mesh(geometry, boxMaterial);\n box4.position.set(-2.017, 0.018, 6.124);\n box4.rotation.set(0, 0.333, 0);\n box4.scale.set(2.002, 4.566, 2.064);\n this.add(box4);\n const box5 = new Mesh(geometry, boxMaterial);\n box5.position.set(2.291, -0.756, -2.621);\n box5.rotation.set(0, -0.286, 0);\n box5.scale.set(1.546, 1.552, 1.496);\n this.add(box5);\n const box6 = new Mesh(geometry, boxMaterial);\n box6.position.set(-2.193, -0.369, -5.547);\n box6.rotation.set(0, 0.516, 0);\n box6.scale.set(3.875, 3.487, 2.986);\n this.add(box6);\n // -x_left\n const light1 = new Mesh(geometry, this.createAreaLightMaterial(80));\n light1.position.set(-14.0, 10.0, 8.0);\n light1.scale.set(0.1, 2.5, 2.5);\n this.add(light1);\n // -x_right\n const light2 = new Mesh(geometry, this.createAreaLightMaterial(80));\n light2.position.set(-14.0, 14.0, -4.0);\n light2.scale.set(0.1, 2.5, 2.5);\n this.add(light2);\n // +x only on light\n const light3 = new Mesh(geometry, this.createAreaLightMaterial(23));\n light3.position.set(14.0, 12.0, 0.0);\n light3.scale.set(0.1, 5.0, 5.0);\n this.add(light3);\n // +z\n const light4 = new Mesh(geometry, this.createAreaLightMaterial(16));\n light4.position.set(0.0, 9.0, 14.0);\n light4.scale.set(5.0, 5.0, 0.1);\n this.add(light4);\n // -z right\n const light5 = new Mesh(geometry, this.createAreaLightMaterial(80));\n light5.position.set(7.0, 8.0, -14.0);\n light5.scale.set(2.5, 2.5, 0.1);\n this.add(light5);\n // -z left\n const light6 = new Mesh(geometry, this.createAreaLightMaterial(80));\n light6.position.set(-7.0, 16.0, -14.0);\n light6.scale.set(2.5, 2.5, 0.1);\n this.add(light6);\n // +y\n const light7 = new Mesh(geometry, this.createAreaLightMaterial(1));\n light7.position.set(0.0, 20.0, 0.0);\n light7.scale.set(0.1, 0.1, 0.1);\n this.add(light7);\n }\n createAreaLightMaterial(intensity) {\n const material = new MeshBasicMaterial();\n material.color.setScalar(intensity);\n return material;\n }\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst GENERATED_SIGMA = 0.04;\nconst HDR_FILE_RE = /\\.hdr(\\.js)?$/;\nconst ldrLoader = new TextureLoader();\nconst hdrLoader = new RGBELoader();\n// Attach a `userData` object for arbitrary data on textures that\n// originate from TextureUtils, similar to Object3D's userData,\n// for help debugging, providing metadata for tests, and semantically\n// describe the type of texture within the context of this application.\nconst userData = {\n url: null,\n};\nclass TextureUtils extends EventDispatcher {\n constructor(threeRenderer) {\n super();\n this.generatedEnvironmentMap = null;\n this.generatedEnvironmentMapAlt = null;\n this.skyboxCache = new Map();\n this.environmentMapCache = new Map();\n this.PMREMGenerator = new PMREMGenerator(threeRenderer);\n }\n async load(url, progressCallback = () => { }) {\n try {\n const isHDR = HDR_FILE_RE.test(url);\n const loader = isHDR ? hdrLoader : ldrLoader;\n const texture = await new Promise((resolve, reject) => loader.load(url, resolve, (event) => {\n progressCallback(event.loaded / event.total * 0.9);\n }, reject));\n progressCallback(1.0);\n this.addMetadata(texture, url);\n texture.mapping = EquirectangularReflectionMapping;\n if (isHDR) {\n texture.encoding = RGBEEncoding;\n texture.minFilter = NearestFilter;\n texture.magFilter = NearestFilter;\n texture.flipY = true;\n }\n else {\n texture.encoding = GammaEncoding;\n }\n return texture;\n }\n finally {\n if (progressCallback) {\n progressCallback(1);\n }\n }\n }\n /**\n * Returns a { skybox, environmentMap } object with the targets/textures\n * accordingly. `skybox` is a WebGLRenderCubeTarget, and `environmentMap`\n * is a Texture from a WebGLRenderCubeTarget.\n */\n async generateEnvironmentMapAndSkybox(skyboxUrl = null, environmentMap = null, options = {}) {\n const { progressTracker } = options;\n const updateGenerationProgress = progressTracker != null ? progressTracker.beginActivity() : () => { };\n const useAltEnvironment = environmentMap === 'neutral';\n if (useAltEnvironment === true) {\n environmentMap = null;\n }\n const environmentMapUrl = deserializeUrl(environmentMap);\n try {\n let skyboxLoads = Promise.resolve(null);\n let environmentMapLoads;\n // If we have a skybox URL, attempt to load it as a cubemap\n if (!!skyboxUrl) {\n skyboxLoads = this.loadSkyboxFromUrl(skyboxUrl, progressTracker);\n }\n if (!!environmentMapUrl) {\n // We have an available environment map URL\n environmentMapLoads =\n this.loadEnvironmentMapFromUrl(environmentMapUrl, progressTracker);\n }\n else if (!!skyboxUrl) {\n // Fallback to deriving the environment map from an available skybox\n environmentMapLoads =\n this.loadEnvironmentMapFromUrl(skyboxUrl, progressTracker);\n }\n else {\n // Fallback to generating the environment map\n environmentMapLoads = useAltEnvironment === true ?\n this.loadGeneratedEnvironmentMapAlt() :\n this.loadGeneratedEnvironmentMap();\n }\n let [environmentMap, skybox] = await Promise.all([environmentMapLoads, skyboxLoads]);\n if (environmentMap == null) {\n throw new Error('Failed to load environment map.');\n }\n return { environmentMap, skybox };\n }\n finally {\n updateGenerationProgress(1.0);\n }\n }\n addMetadata(texture, url) {\n if (texture == null) {\n return;\n }\n texture.userData = Object.assign(Object.assign({}, userData), ({\n url: url,\n }));\n }\n /**\n * Loads an equirect Texture from a given URL, for use as a skybox.\n */\n loadSkyboxFromUrl(url, progressTracker) {\n if (!this.skyboxCache.has(url)) {\n const progressCallback = progressTracker ? progressTracker.beginActivity() : () => { };\n const skyboxMapLoads = this.load(url, progressCallback);\n this.skyboxCache.set(url, skyboxMapLoads);\n }\n return this.skyboxCache.get(url);\n }\n /**\n * Loads a WebGLRenderTarget from a given URL. The render target in this\n * case will be assumed to be used as an environment map.\n */\n loadEnvironmentMapFromUrl(url, progressTracker) {\n if (!this.environmentMapCache.has(url)) {\n const environmentMapLoads = this.loadSkyboxFromUrl(url, progressTracker).then((equirect) => {\n const cubeUV = this.PMREMGenerator.fromEquirectangular(equirect);\n this.addMetadata(cubeUV.texture, url);\n return cubeUV;\n });\n this.PMREMGenerator.compileEquirectangularShader();\n this.environmentMapCache.set(url, environmentMapLoads);\n }\n return this.environmentMapCache.get(url);\n }\n /**\n * Loads a dynamically generated environment map.\n */\n loadGeneratedEnvironmentMap() {\n if (this.generatedEnvironmentMap == null) {\n const defaultScene = new EnvironmentScene;\n this.generatedEnvironmentMap =\n this.PMREMGenerator.fromScene(defaultScene, GENERATED_SIGMA);\n this.addMetadata(this.generatedEnvironmentMap.texture, null);\n }\n return Promise.resolve(this.generatedEnvironmentMap);\n }\n /**\n * Loads a dynamically generated environment map, designed to be neutral and\n * color-preserving. Shows less contrast around the different sides of the\n * object.\n */\n loadGeneratedEnvironmentMapAlt() {\n if (this.generatedEnvironmentMapAlt == null) {\n const defaultScene = new EnvironmentSceneAlt;\n this.generatedEnvironmentMapAlt =\n this.PMREMGenerator.fromScene(defaultScene, GENERATED_SIGMA);\n this.addMetadata(this.generatedEnvironmentMapAlt.texture, null);\n }\n return Promise.resolve(this.generatedEnvironmentMapAlt);\n }\n async dispose() {\n const allTargetsLoad = [];\n // NOTE(cdata): We would use for-of iteration on the maps here, but\n // IE11 doesn't have the necessary iterator-returning methods. So,\n // disposal of these render targets is kind of convoluted as a result.\n this.environmentMapCache.forEach((targetLoads) => {\n allTargetsLoad.push(targetLoads);\n });\n this.environmentMapCache.clear();\n for (const targetLoads of allTargetsLoad) {\n try {\n const target = await targetLoads;\n target.dispose();\n }\n catch (e) {\n // Suppress errors, so that all render targets will be disposed\n }\n }\n if (this.generatedEnvironmentMap != null) {\n this.generatedEnvironmentMap.dispose();\n this.generatedEnvironmentMap = null;\n }\n if (this.generatedEnvironmentMapAlt != null) {\n this.generatedEnvironmentMapAlt.dispose();\n this.generatedEnvironmentMapAlt = null;\n }\n }\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Between 0 and 1: larger means the average responds faster and is less smooth.\nconst DURATION_DECAY = 0.2;\nconst LOW_FRAME_DURATION_MS = 18;\nconst HIGH_FRAME_DURATION_MS = 26;\nconst MAX_AVG_CHANGE_MS = 2;\nconst SCALE_STEPS = [1, 0.79, 0.62, 0.5, 0.4, 0.31, 0.25];\nconst DEFAULT_LAST_STEP = 3;\n/**\n * Registers canvases with Canvas2DRenderingContexts and renders them\n * all in the same WebGLRenderingContext, spitting out textures to apply\n * to the canvases. Creates a fullscreen WebGL canvas that is not added\n * to the DOM, and on each frame, renders each registered canvas on a portion\n * of the WebGL canvas, and applies the texture on the registered canvas.\n *\n * In the future, can use ImageBitmapRenderingContext instead of\n * Canvas2DRenderingContext if supported for cheaper transfering of\n * the texture.\n */\nclass Renderer extends EventDispatcher {\n constructor(options) {\n super();\n this.loader = new CachingGLTFLoader(ModelViewerGLTFInstance);\n this.width = 0;\n this.height = 0;\n this.dpr = 1;\n this.debugger = null;\n this.scenes = new Set();\n this.multipleScenesVisible = false;\n this.scaleStep = 0;\n this.lastStep = DEFAULT_LAST_STEP;\n this.avgFrameDuration = (HIGH_FRAME_DURATION_MS + LOW_FRAME_DURATION_MS) / 2;\n this.onWebGLContextLost = (event) => {\n this.dispatchEvent({ type: 'contextlost', sourceEvent: event });\n };\n this.dpr = resolveDpr();\n this.canvasElement = document.createElement('canvas');\n this.canvasElement.id = 'webgl-canvas';\n this.canvas3D = this.canvasElement;\n this.canvas3D.addEventListener('webglcontextlost', this.onWebGLContextLost);\n try {\n this.threeRenderer = new WebGL1Renderer({\n canvas: this.canvas3D,\n alpha: true,\n antialias: true,\n powerPreference: 'high-performance',\n preserveDrawingBuffer: true\n });\n this.threeRenderer.autoClear = true;\n this.threeRenderer.outputEncoding = GammaEncoding;\n this.threeRenderer.physicallyCorrectLights = true;\n this.threeRenderer.setPixelRatio(1); // handle pixel ratio externally\n this.threeRenderer.shadowMap.enabled = true;\n this.threeRenderer.shadowMap.type = PCFSoftShadowMap;\n this.threeRenderer.shadowMap.autoUpdate = false;\n this.debugger =\n options != null && !!options.debug ? new Debugger(this) : null;\n this.threeRenderer.debug = { checkShaderErrors: !!this.debugger };\n // ACESFilmicToneMapping appears to be the most \"saturated\",\n // and similar to Filament's gltf-viewer.\n this.threeRenderer.toneMapping = ACESFilmicToneMapping;\n }\n catch (error) {\n console.warn(error);\n }\n this.arRenderer = new ARRenderer(this);\n this.textureUtils =\n this.canRender ? new TextureUtils(this.threeRenderer) : null;\n this.roughnessMipmapper = new RoughnessMipmapper(this.threeRenderer);\n CachingGLTFLoader.initializeKTX2Loader(this.threeRenderer);\n this.updateRendererSize();\n this.lastTick = performance.now();\n this.avgFrameDuration = 0;\n }\n static get singleton() {\n return this._singleton;\n }\n static resetSingleton() {\n this._singleton.dispose();\n this._singleton = new Renderer({ debug: isDebugMode() });\n }\n get canRender() {\n return this.threeRenderer != null;\n }\n get scaleFactor() {\n return SCALE_STEPS[this.scaleStep];\n }\n set minScale(scale) {\n let i = 1;\n while (i < SCALE_STEPS.length) {\n if (SCALE_STEPS[i] < scale) {\n break;\n }\n ++i;\n }\n this.lastStep = i - 1;\n }\n /**\n * Updates the renderer's size based on the largest scene and any changes to\n * device pixel ratio.\n */\n updateRendererSize() {\n const dpr = resolveDpr();\n if (dpr !== this.dpr) {\n // If the device pixel ratio has changed due to page zoom, elements\n // specified by % width do not fire a resize event even though their CSS\n // pixel dimensions change, so we force them to update their size here.\n for (const scene of this.scenes) {\n const { element } = scene;\n element[$updateSize](element.getBoundingClientRect());\n }\n }\n // Make the renderer the size of the largest scene\n let width = 0;\n let height = 0;\n for (const scene of this.scenes) {\n width = Math.max(width, scene.width);\n height = Math.max(height, scene.height);\n }\n if (width === this.width && height === this.height && dpr === this.dpr) {\n return;\n }\n this.width = width;\n this.height = height;\n this.dpr = dpr;\n if (this.canRender) {\n this.threeRenderer.setSize(width * dpr, height * dpr, false);\n }\n // Expand the canvas size to make up for shrinking the viewport.\n const scale = this.scaleFactor;\n const widthCSS = width / scale;\n const heightCSS = height / scale;\n // The canvas element must by styled outside of three due to the offscreen\n // canvas not being directly stylable.\n this.canvasElement.style.width = `${widthCSS}px`;\n this.canvasElement.style.height = `${heightCSS}px`;\n // Each scene's canvas must match the renderer size. In general they can be\n // larger than the element that contains them, but the overflow is hidden\n // and only the portion that is shown is copied over.\n for (const scene of this.scenes) {\n const { canvas } = scene;\n canvas.width = Math.round(width * dpr);\n canvas.height = Math.round(height * dpr);\n canvas.style.width = `${widthCSS}px`;\n canvas.style.height = `${heightCSS}px`;\n scene.isDirty = true;\n }\n }\n updateRendererScale() {\n const scaleStep = this.scaleStep;\n if (this.avgFrameDuration > HIGH_FRAME_DURATION_MS &&\n this.scaleStep < this.lastStep) {\n ++this.scaleStep;\n }\n else if (this.avgFrameDuration < LOW_FRAME_DURATION_MS && this.scaleStep > 0) {\n --this.scaleStep;\n }\n if (scaleStep == this.scaleStep) {\n return;\n }\n const scale = this.scaleFactor;\n this.avgFrameDuration =\n (HIGH_FRAME_DURATION_MS + LOW_FRAME_DURATION_MS) / 2;\n const width = this.width / scale;\n const height = this.height / scale;\n this.canvasElement.style.width = `${width}px`;\n this.canvasElement.style.height = `${height}px`;\n for (const scene of this.scenes) {\n const { style } = scene.canvas;\n style.width = `${width}px`;\n style.height = `${height}px`;\n scene.isDirty = true;\n }\n }\n registerScene(scene) {\n this.scenes.add(scene);\n const { canvas } = scene;\n const scale = this.scaleFactor;\n canvas.width = Math.round(this.width * this.dpr);\n canvas.height = Math.round(this.height * this.dpr);\n canvas.style.width = `${this.width / scale}px`;\n canvas.style.height = `${this.height / scale}px`;\n if (this.multipleScenesVisible) {\n canvas.classList.add('show');\n }\n scene.isDirty = true;\n if (this.canRender && this.scenes.size > 0) {\n this.threeRenderer.setAnimationLoop((time, frame) => this.render(time, frame));\n }\n if (this.debugger != null) {\n this.debugger.addScene(scene);\n }\n }\n unregisterScene(scene) {\n this.scenes.delete(scene);\n if (this.canRender && this.scenes.size === 0) {\n this.threeRenderer.setAnimationLoop(null);\n }\n if (this.debugger != null) {\n this.debugger.removeScene(scene);\n }\n }\n displayCanvas(scene) {\n return this.multipleScenesVisible ? scene.element[$canvas] :\n this.canvasElement;\n }\n /**\n * The function enables an optimization, where when there is only a single\n * element, we can use the renderer's 3D canvas directly for\n * display. Otherwise we need to use the element's 2D canvas and copy the\n * renderer's result into it.\n */\n selectCanvas() {\n let visibleScenes = 0;\n let visibleCanvas = null;\n for (const scene of this.scenes) {\n const { element } = scene;\n if (element.modelIsVisible && scene.externalRenderer == null) {\n ++visibleScenes;\n visibleCanvas = scene.canvas;\n }\n }\n if (visibleCanvas == null) {\n return;\n }\n const multipleScenesVisible = visibleScenes > 1 || USE_OFFSCREEN_CANVAS;\n const { canvasElement } = this;\n if (multipleScenesVisible === this.multipleScenesVisible &&\n (multipleScenesVisible ||\n canvasElement.parentElement === visibleCanvas.parentElement)) {\n return;\n }\n this.multipleScenesVisible = multipleScenesVisible;\n if (multipleScenesVisible) {\n canvasElement.classList.remove('show');\n }\n for (const scene of this.scenes) {\n if (scene.externalRenderer != null) {\n continue;\n }\n const canvas = scene.element[$canvas];\n if (multipleScenesVisible) {\n canvas.classList.add('show');\n scene.isDirty = true;\n }\n else if (scene.canvas === visibleCanvas) {\n scene.canvas.parentElement.appendChild(canvasElement);\n canvasElement.classList.add('show');\n canvas.classList.remove('show');\n scene.isDirty = true;\n }\n }\n }\n /**\n * Returns an array version of this.scenes where the non-visible ones are\n * first. This allows eager scenes to be rendered before they are visible,\n * without needing the multi-canvas render path.\n */\n orderedScenes() {\n const scenes = [];\n for (const visible of [false, true]) {\n for (const scene of this.scenes) {\n if (scene.element.modelIsVisible === visible) {\n scenes.push(scene);\n }\n }\n }\n return scenes;\n }\n get isPresenting() {\n return this.arRenderer.isPresenting;\n }\n /**\n * This method takes care of updating the element and renderer state based on\n * the time that has passed since the last rendered frame.\n */\n preRender(scene, t, delta) {\n const { element, exposure } = scene;\n element[$tick](t, delta);\n const exposureIsNumber = typeof exposure === 'number' && !self.isNaN(exposure);\n this.threeRenderer.toneMappingExposure = exposureIsNumber ? exposure : 1.0;\n if (scene.isShadowDirty()) {\n this.threeRenderer.shadowMap.needsUpdate = true;\n }\n }\n render(t, frame) {\n if (frame != null) {\n this.arRenderer.onWebXRFrame(t, frame);\n this.arRenderer.presentedScene.postRender();\n return;\n }\n const delta = t - this.lastTick;\n this.lastTick = t;\n if (!this.canRender || this.isPresenting) {\n return;\n }\n this.avgFrameDuration += clamp(DURATION_DECAY * (delta - this.avgFrameDuration), -MAX_AVG_CHANGE_MS, MAX_AVG_CHANGE_MS);\n this.selectCanvas();\n this.updateRendererSize();\n this.updateRendererScale();\n const { dpr, scaleFactor } = this;\n for (const scene of this.orderedScenes()) {\n const { element } = scene;\n if (!element.modelIsVisible && scene.renderCount > 0) {\n continue;\n }\n this.preRender(scene, t, delta);\n if (!scene.isDirty) {\n continue;\n }\n if (scene.externalRenderer != null) {\n scene.camera.updateMatrix();\n const { matrix, projectionMatrix } = scene.camera;\n const viewMatrix = matrix.elements.slice();\n const target = scene.getTarget();\n viewMatrix[12] += target.x;\n viewMatrix[13] += target.y;\n viewMatrix[14] += target.z;\n scene.externalRenderer.render({\n viewMatrix: viewMatrix,\n projectionMatrix: projectionMatrix.elements\n });\n continue;\n }\n if (!element.modelIsVisible && !this.multipleScenesVisible) {\n // Here we are pre-rendering on the visible canvas, so we must mark the\n // visible scene dirty to ensure it overwrites us.\n for (const visibleScene of this.scenes) {\n if (visibleScene.element.modelIsVisible) {\n visibleScene.isDirty = true;\n }\n }\n }\n // We avoid using the Three.js PixelRatio and handle it ourselves here so\n // that we can do proper rounding and avoid white boundary pixels.\n const width = Math.min(Math.ceil(scene.width * scaleFactor * dpr), this.canvas3D.width);\n const height = Math.min(Math.ceil(scene.height * scaleFactor * dpr), this.canvas3D.height);\n // Need to set the render target in order to prevent\n // clearing the depth from a different buffer\n this.threeRenderer.setRenderTarget(null);\n this.threeRenderer.setViewport(0, Math.floor(this.height * dpr) - height, width, height);\n this.threeRenderer.render(scene, scene.camera);\n scene.postRender();\n if (this.multipleScenesVisible) {\n if (scene.context == null) {\n scene.createContext();\n }\n {\n const context2D = scene.context;\n context2D.clearRect(0, 0, width, height);\n context2D.drawImage(this.canvas3D, 0, 0, width, height, 0, 0, width, height);\n }\n }\n scene.isDirty = false;\n if (element.loaded) {\n ++scene.renderCount;\n }\n }\n }\n dispose() {\n if (this.textureUtils != null) {\n this.textureUtils.dispose();\n }\n if (this.threeRenderer != null) {\n this.threeRenderer.dispose();\n }\n this.textureUtils = null;\n this.threeRenderer = null;\n this.scenes.clear();\n this.canvas3D.removeEventListener('webglcontextlost', this.onWebGLContextLost);\n }\n}\nRenderer._singleton = new Renderer({ debug: isDebugMode() });\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Converts a base64 string which represents a data url\n * into a Blob of the same contents.\n */\nconst dataUrlToBlob = async (base64DataUrl) => {\n return new Promise((resolve, reject) => {\n const sliceSize = 512;\n const typeMatch = base64DataUrl.match(/data:(.*);/);\n if (!typeMatch) {\n return reject(new Error(`${base64DataUrl} is not a valid data Url`));\n }\n const type = typeMatch[1];\n const base64 = base64DataUrl.replace(/data:image\\/\\w+;base64,/, '');\n const byteCharacters = atob(base64);\n const byteArrays = [];\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n const slice = byteCharacters.slice(offset, offset + sliceSize);\n const byteNumbers = new Array(slice.length);\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n resolve(new Blob(byteArrays, { type }));\n });\n};\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar _a$9, _b$8;\nconst $ongoingActivities = Symbol('ongoingActivities');\nconst $announceTotalProgress = Symbol('announceTotalProgress');\nconst $eventDelegate = Symbol('eventDelegate');\nconst ACTIVITY_PROGRESS_WEIGHT = 0.5;\n/**\n * ProgressTracker is an event emitter that helps to track the ongoing progress\n * of many simultaneous actions.\n *\n * ProgressTracker reports progress activity in the form of a progress event.\n * The event.detail.totalProgress value indicates the elapsed progress of all\n * activities being tracked by the ProgressTracker.\n *\n * The value of totalProgress is a number that progresses from 0 to 1. The\n * ProgressTracker allows for the lazy accumulation of tracked actions, so the\n * total progress represents a abstract, non-absolute progress towards the\n * completion of all currently tracked events.\n *\n * When all currently tracked activities are finished, the ProgressTracker\n * emits one final progress event and then resets the list of its currently\n * tracked activities. This means that from an observer's perspective,\n * ongoing activities will accumulate and collectively contribute to the notion\n * of total progress until all currently tracked ongoing activities have\n * completed.\n */\nclass ProgressTracker {\n constructor() {\n // NOTE(cdata): This eventDelegate hack is a quick trick to let us get the\n // EventTarget interface without implementing or requiring a full polyfill. We\n // should remove this once EventTarget is inheritable everywhere.\n this[_a$9] = document.createDocumentFragment();\n // NOTE(cdata): We declare each of these methods independently here so that we\n // can inherit the correct types from EventTarget's interface. Maybe there is\n // a better way to do this dynamically so that we don't repeat ourselves?\n this.addEventListener = (...args) => this[$eventDelegate].addEventListener(...args);\n this.removeEventListener = (...args) => this[$eventDelegate].removeEventListener(...args);\n this.dispatchEvent = (...args) => this[$eventDelegate].dispatchEvent(...args);\n this[_b$8] = new Set();\n }\n /**\n * The total number of activities currently being tracked.\n */\n get ongoingActivityCount() {\n return this[$ongoingActivities].size;\n }\n /**\n * Registers a new activity to be tracked by the progress tracker. The method\n * returns a special callback that should be invoked whenever new progress is\n * ready to be reported. The progress should be reported as a value between 0\n * and 1, where 0 would represent the beginning of the action and 1 would\n * represent its completion.\n *\n * There is no built-in notion of a time-out for ongoing activities, so once\n * an ongoing activity is begun, it is up to the consumer of this API to\n * update the progress until that activity is no longer ongoing.\n *\n * Progress is only allowed to move forward for any given activity. If a lower\n * progress is reported than the previously reported progress, it will be\n * ignored.\n */\n beginActivity() {\n const activity = { progress: 0 };\n this[$ongoingActivities].add(activity);\n if (this.ongoingActivityCount === 1) {\n // Announce the first progress event (which should always be 0 / 1\n // total progress):\n this[$announceTotalProgress]();\n }\n return (progress) => {\n let nextProgress;\n nextProgress = Math.max(clamp(progress, 0, 1), activity.progress);\n if (nextProgress !== activity.progress) {\n activity.progress = nextProgress;\n this[$announceTotalProgress]();\n }\n return activity.progress;\n };\n }\n [(_a$9 = $eventDelegate, _b$8 = $ongoingActivities, $announceTotalProgress)]() {\n let totalProgress = 0;\n let statusCount = 0;\n let completedActivities = 0;\n for (const activity of this[$ongoingActivities]) {\n const { progress } = activity;\n const compoundWeight = ACTIVITY_PROGRESS_WEIGHT / Math.pow(2, statusCount++);\n totalProgress += progress * compoundWeight;\n if (progress === 1.0) {\n completedActivities++;\n }\n }\n if (completedActivities === this.ongoingActivityCount) {\n totalProgress = 1.0;\n this[$ongoingActivities].clear();\n }\n this.dispatchEvent(new CustomEvent('progress', { detail: { totalProgress } }));\n }\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __decorate$7 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof undefined === \"function\") r = undefined(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar _a$8, _b$7, _c$3, _d$1, _e, _f, _g, _h, _j, _k;\nconst CLEAR_MODEL_TIMEOUT_MS = 1000;\nconst FALLBACK_SIZE_UPDATE_THRESHOLD_MS = 50;\nconst ANNOUNCE_MODEL_VISIBILITY_DEBOUNCE_THRESHOLD = 0;\nconst UNSIZED_MEDIA_WIDTH = 300;\nconst UNSIZED_MEDIA_HEIGHT = 150;\nconst blobCanvas = document.createElement('canvas');\nlet blobContext = null;\nconst $template = Symbol('template');\nconst $fallbackResizeHandler = Symbol('fallbackResizeHandler');\nconst $defaultAriaLabel = Symbol('defaultAriaLabel');\nconst $resizeObserver = Symbol('resizeObserver');\nconst $clearModelTimeout = Symbol('clearModelTimeout');\nconst $onContextLost = Symbol('onContextLost');\nconst $loaded = Symbol('loaded');\nconst $updateSize = Symbol('updateSize');\nconst $intersectionObserver = Symbol('intersectionObserver');\nconst $isElementInViewport = Symbol('isElementInViewport');\nconst $announceModelVisibility = Symbol('announceModelVisibility');\nconst $ariaLabel = Symbol('ariaLabel');\nconst $loadedTime = Symbol('loadedTime');\nconst $updateSource = Symbol('updateSource');\nconst $markLoaded = Symbol('markLoaded');\nconst $container = Symbol('container');\nconst $userInputElement = Symbol('input');\nconst $canvas = Symbol('canvas');\nconst $scene = Symbol('scene');\nconst $needsRender = Symbol('needsRender');\nconst $tick = Symbol('tick');\nconst $onModelLoad = Symbol('onModelLoad');\nconst $onResize = Symbol('onResize');\nconst $renderer = Symbol('renderer');\nconst $progressTracker = Symbol('progressTracker');\nconst $getLoaded = Symbol('getLoaded');\nconst $getModelIsVisible = Symbol('getModelIsVisible');\nconst $shouldAttemptPreload = Symbol('shouldAttemptPreload');\nconst $sceneIsReady = Symbol('sceneIsReady');\nconst $hasTransitioned = Symbol('hasTransitioned');\nconst toVector3D = (v) => {\n return {\n x: v.x,\n y: v.y,\n z: v.z,\n toString() {\n return `${this.x}m ${this.y}m ${this.z}m`;\n }\n };\n};\n/**\n * Definition for a basic element.\n */\nclass ModelViewerElementBase extends UpdatingElement {\n /**\n * Creates a new ModelViewerElement.\n */\n constructor() {\n super();\n this.alt = null;\n this.src = null;\n this[_a$8] = false;\n this[_b$7] = false;\n this[_c$3] = 0;\n this[_d$1] = null;\n this[_e] = debounce(() => {\n const boundingRect = this.getBoundingClientRect();\n this[$updateSize](boundingRect);\n }, FALLBACK_SIZE_UPDATE_THRESHOLD_MS);\n this[_f] = debounce((oldVisibility) => {\n const newVisibility = this.modelIsVisible;\n if (newVisibility !== oldVisibility) {\n this.dispatchEvent(new CustomEvent('model-visibility', { detail: { visible: newVisibility } }));\n }\n }, ANNOUNCE_MODEL_VISIBILITY_DEBOUNCE_THRESHOLD);\n this[_g] = null;\n this[_h] = null;\n this[_j] = new ProgressTracker();\n this[_k] = (event) => {\n this.dispatchEvent(new CustomEvent('error', { detail: { type: 'webglcontextlost', sourceError: event.sourceEvent } }));\n };\n // NOTE(cdata): It is *very important* to access this template first so that\n // the ShadyCSS template preparation steps happen before element styling in\n // IE11:\n const template = this.constructor.template;\n if (window.ShadyCSS) {\n window.ShadyCSS.styleElement(this, {});\n }\n // NOTE(cdata): The canonical ShadyCSS examples suggest that the Shadow Root\n // should be created after the invocation of ShadyCSS.styleElement\n this.attachShadow({ mode: 'open' });\n const shadowRoot = this.shadowRoot;\n shadowRoot.appendChild(template.content.cloneNode(true));\n this[$container] = shadowRoot.querySelector('.container');\n this[$userInputElement] =\n shadowRoot.querySelector('.userInput');\n this[$canvas] = shadowRoot.querySelector('canvas');\n this[$defaultAriaLabel] =\n this[$userInputElement].getAttribute('aria-label');\n // Because of potential race conditions related to invoking the constructor\n // we only use the bounding rect to set the initial size if the element is\n // already connected to the document:\n let width, height;\n if (this.isConnected) {\n const rect = this.getBoundingClientRect();\n width = rect.width;\n height = rect.height;\n }\n else {\n width = UNSIZED_MEDIA_WIDTH;\n height = UNSIZED_MEDIA_HEIGHT;\n }\n // Create the underlying ModelScene.\n this[$scene] =\n new ModelScene({ canvas: this[$canvas], element: this, width, height });\n this[$scene].addEventListener('model-load', async (event) => {\n this[$markLoaded]();\n this[$onModelLoad]();\n // Give loading async tasks a chance to complete.\n await timePasses();\n this.dispatchEvent(new CustomEvent('load', { detail: { url: event.url } }));\n });\n // Update initial size on microtask timing so that subclasses have a\n // chance to initialize\n Promise.resolve().then(() => {\n this[$updateSize](this.getBoundingClientRect());\n });\n if (HAS_RESIZE_OBSERVER) {\n // Set up a resize observer so we can scale our canvas\n // if our changes\n this[$resizeObserver] =\n new ResizeObserver((entries) => {\n // Don't resize anything if in AR mode; otherwise the canvas\n // scaling to fullscreen on entering AR will clobber the flat/2d\n // dimensions of the element.\n if (this[$renderer].isPresenting) {\n return;\n }\n for (let entry of entries) {\n if (entry.target === this) {\n this[$updateSize](entry.contentRect);\n }\n }\n });\n }\n if (HAS_INTERSECTION_OBSERVER) {\n this[$intersectionObserver] = new IntersectionObserver(entries => {\n for (let entry of entries) {\n if (entry.target === this) {\n const oldVisibility = this.modelIsVisible;\n this[$isElementInViewport] = entry.isIntersecting;\n this[$announceModelVisibility](oldVisibility);\n if (this[$isElementInViewport] && !this[$sceneIsReady]()) {\n this[$updateSource]();\n }\n }\n }\n }, {\n root: null,\n // We used to have margin here, but it was causing animated models below\n // the fold to steal the frame budget. Weirder still, it would also\n // cause input events to be swallowed, sometimes for seconds on the\n // model above the fold, but only when the animated model was completely\n // below. Setting this margin to zero fixed it.\n rootMargin: '0px',\n threshold: 0,\n });\n }\n else {\n // If there is no intersection obsever, then all models should be visible\n // at all times:\n this[$isElementInViewport] = true;\n }\n }\n static get is() {\n return 'model-viewer';\n }\n /** @nocollapse */\n static get template() {\n if (!this.hasOwnProperty($template)) {\n this[$template] = makeTemplate(this.is);\n }\n return this[$template];\n }\n /** @export */\n static set modelCacheSize(value) {\n CachingGLTFLoader[$evictionPolicy].evictionThreshold = value;\n }\n /** @export */\n static get modelCacheSize() {\n return CachingGLTFLoader[$evictionPolicy].evictionThreshold;\n }\n /** @export */\n static set minimumRenderScale(value) {\n if (value > 1) {\n console.warn(' minimumRenderScale has been clamped to a maximum value of 1.');\n }\n if (value <= 0) {\n console.warn(' minimumRenderScale has been clamped to a minimum value of 0.25.');\n }\n Renderer.singleton.minScale = value;\n }\n /** @export */\n static get minimumRenderScale() {\n return Renderer.singleton.minScale;\n }\n /** @export */\n get loaded() {\n return this[$getLoaded]();\n }\n get [(_a$8 = $isElementInViewport, _b$7 = $loaded, _c$3 = $loadedTime, _d$1 = $clearModelTimeout, _e = $fallbackResizeHandler, _f = $announceModelVisibility, _g = $resizeObserver, _h = $intersectionObserver, _j = $progressTracker, $renderer)]() {\n return Renderer.singleton;\n }\n /** @export */\n get modelIsVisible() {\n return this[$getModelIsVisible]();\n }\n connectedCallback() {\n super.connectedCallback && super.connectedCallback();\n if (HAS_RESIZE_OBSERVER) {\n this[$resizeObserver].observe(this);\n }\n else {\n self.addEventListener('resize', this[$fallbackResizeHandler]);\n }\n if (HAS_INTERSECTION_OBSERVER) {\n this[$intersectionObserver].observe(this);\n }\n const renderer = this[$renderer];\n renderer.addEventListener('contextlost', this[$onContextLost]);\n renderer.registerScene(this[$scene]);\n if (this[$clearModelTimeout] != null) {\n self.clearTimeout(this[$clearModelTimeout]);\n this[$clearModelTimeout] = null;\n // Force an update in case the model has been evicted from our GLTF cache\n // @see https://lit-element.polymer-project.org/guide/lifecycle#requestupdate\n this.requestUpdate('src', null);\n }\n }\n disconnectedCallback() {\n super.disconnectedCallback && super.disconnectedCallback();\n if (HAS_RESIZE_OBSERVER) {\n this[$resizeObserver].unobserve(this);\n }\n else {\n self.removeEventListener('resize', this[$fallbackResizeHandler]);\n }\n if (HAS_INTERSECTION_OBSERVER) {\n this[$intersectionObserver].unobserve(this);\n }\n const renderer = this[$renderer];\n renderer.removeEventListener('contextlost', this[$onContextLost]);\n renderer.unregisterScene(this[$scene]);\n this[$clearModelTimeout] = self.setTimeout(() => {\n this[$scene].reset();\n }, CLEAR_MODEL_TIMEOUT_MS);\n }\n updated(changedProperties) {\n super.updated(changedProperties);\n // NOTE(cdata): If a property changes from values A -> B -> A in the space\n // of a microtask, LitElement/UpdatingElement will notify of a change even\n // though the value has effectively not changed, so we need to check to make\n // sure that the value has actually changed before changing the loaded flag.\n if (changedProperties.has('src')) {\n if (this.src == null) {\n this[$loaded] = false;\n this[$loadedTime] = 0;\n this[$scene].reset();\n }\n else if (this.src !== this[$scene].url) {\n this[$loaded] = false;\n this[$loadedTime] = 0;\n this[$updateSource]();\n }\n }\n if (changedProperties.has('alt')) {\n const ariaLabel = this.alt == null ? this[$defaultAriaLabel] : this.alt;\n this[$userInputElement].setAttribute('aria-label', ariaLabel);\n }\n }\n /** @export */\n toDataURL(type, encoderOptions) {\n return this[$renderer]\n .displayCanvas(this[$scene])\n .toDataURL(type, encoderOptions);\n }\n /** @export */\n async toBlob(options) {\n const mimeType = options ? options.mimeType : undefined;\n const qualityArgument = options ? options.qualityArgument : undefined;\n const idealAspect = options ? options.idealAspect : undefined;\n const { width, height, fieldOfViewAspect, aspect } = this[$scene];\n const { dpr, scaleFactor } = this[$renderer];\n let outputWidth = width * scaleFactor * dpr;\n let outputHeight = height * scaleFactor * dpr;\n let offsetX = 0;\n let offsetY = 0;\n if (idealAspect === true) {\n if (fieldOfViewAspect > aspect) {\n const oldHeight = outputHeight;\n outputHeight = Math.round(outputWidth / fieldOfViewAspect);\n offsetY = (oldHeight - outputHeight) / 2;\n }\n else {\n const oldWidth = outputWidth;\n outputWidth = Math.round(outputHeight * fieldOfViewAspect);\n offsetX = (oldWidth - outputWidth) / 2;\n }\n }\n blobCanvas.width = outputWidth;\n blobCanvas.height = outputHeight;\n try {\n return new Promise(async (resolve, reject) => {\n if (blobContext == null) {\n blobContext = blobCanvas.getContext('2d');\n }\n blobContext.drawImage(this[$renderer].displayCanvas(this[$scene]), offsetX, offsetY, outputWidth, outputHeight, 0, 0, outputWidth, outputHeight);\n if (blobCanvas.msToBlob) {\n // NOTE: msToBlob only returns image/png\n // so ensure mimeType is not specified (defaults to image/png)\n // or is image/png, otherwise fallback to using toDataURL on IE.\n if (!mimeType || mimeType === 'image/png') {\n return resolve(blobCanvas.msToBlob());\n }\n }\n if (!blobCanvas.toBlob) {\n return resolve(await dataUrlToBlob(blobCanvas.toDataURL(mimeType, qualityArgument)));\n }\n blobCanvas.toBlob((blob) => {\n if (!blob) {\n return reject(new Error('Unable to retrieve canvas blob'));\n }\n resolve(blob);\n }, mimeType, qualityArgument);\n });\n }\n finally {\n this[$updateSize]({ width, height });\n }\n }\n registerRenderer(renderer) {\n this[$scene].externalRenderer = renderer;\n }\n unregisterRenderer() {\n this[$scene].externalRenderer = null;\n }\n get [$ariaLabel]() {\n return (this.alt == null || this.alt === 'null') ? this[$defaultAriaLabel] :\n this.alt;\n }\n // NOTE(cdata): Although this may seem extremely redundant, it is required in\n // order to support overloading when TypeScript is compiled to ES5\n // @see https://github.com/Polymer/lit-element/pull/745\n // @see https://github.com/microsoft/TypeScript/issues/338\n [$getLoaded]() {\n return this[$loaded];\n }\n // @see [$getLoaded]\n [$getModelIsVisible]() {\n return this.loaded && this[$isElementInViewport];\n }\n [$hasTransitioned]() {\n return this.modelIsVisible;\n }\n [$shouldAttemptPreload]() {\n return !!this.src && this[$isElementInViewport];\n }\n [$sceneIsReady]() {\n return this[$loaded];\n }\n /**\n * Called on initialization and when the resize observer fires.\n */\n [$updateSize]({ width, height }) {\n this[$container].style.width = `${width}px`;\n this[$container].style.height = `${height}px`;\n this[$onResize]({ width: parseFloat(width), height: parseFloat(height) });\n }\n [$tick](_time, _delta) {\n }\n [$markLoaded]() {\n if (this[$loaded]) {\n return;\n }\n this[$loaded] = true;\n this[$loadedTime] = performance.now();\n }\n [$needsRender]() {\n this[$scene].isDirty = true;\n }\n [$onModelLoad]() {\n }\n [$onResize](e) {\n this[$scene].setSize(e.width, e.height);\n }\n /**\n * Parses the element for an appropriate source URL and\n * sets the views to use the new model based off of the `preload`\n * attribute.\n */\n async [(_k = $onContextLost, $updateSource)]() {\n if (this.loaded || !this[$shouldAttemptPreload]()) {\n return;\n }\n const updateSourceProgress = this[$progressTracker].beginActivity();\n const source = this.src;\n try {\n await this[$scene].setSource(source, (progress) => updateSourceProgress(progress * 0.8));\n const detail = { url: source };\n this.dispatchEvent(new CustomEvent('preload', { detail }));\n }\n catch (error) {\n this.dispatchEvent(new CustomEvent('error', { detail: error }));\n }\n finally {\n updateSourceProgress(0.9);\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n updateSourceProgress(1.0);\n });\n });\n }\n }\n}\n__decorate$7([\n property({ type: String })\n], ModelViewerElementBase.prototype, \"alt\", void 0);\n__decorate$7([\n property({ type: String })\n], ModelViewerElementBase.prototype, \"src\", void 0);\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __decorate$6 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof undefined === \"function\") r = undefined(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst MILLISECONDS_PER_SECOND = 1000.0;\nconst $changeAnimation = Symbol('changeAnimation');\nconst $paused = Symbol('paused');\nconst AnimationMixin = (ModelViewerElement) => {\n var _a;\n class AnimationModelViewerElement extends ModelViewerElement {\n constructor() {\n super(...arguments);\n this.autoplay = false;\n this.animationName = undefined;\n this.animationCrossfadeDuration = 300;\n this[_a] = true;\n }\n /**\n * Returns an array\n */\n get availableAnimations() {\n if (this.loaded) {\n return this[$scene].animationNames;\n }\n return [];\n }\n get duration() {\n return this[$scene].duration;\n }\n get paused() {\n return this[$paused];\n }\n get currentTime() {\n return this[$scene].animationTime;\n }\n set currentTime(value) {\n this[$scene].animationTime = value;\n this[$renderer].threeRenderer.shadowMap.needsUpdate = true;\n this[$needsRender]();\n }\n pause() {\n if (this[$paused]) {\n return;\n }\n this[$paused] = true;\n this[$renderer].threeRenderer.shadowMap.autoUpdate = false;\n this.dispatchEvent(new CustomEvent('pause'));\n }\n play() {\n if (this[$paused] && this.availableAnimations.length > 0) {\n this[$paused] = false;\n this[$renderer].threeRenderer.shadowMap.autoUpdate = true;\n if (!this[$scene].hasActiveAnimation) {\n this[$changeAnimation]();\n }\n this.dispatchEvent(new CustomEvent('play'));\n }\n }\n [(_a = $paused, $onModelLoad)]() {\n super[$onModelLoad]();\n this[$paused] = true;\n if (this.autoplay) {\n this[$changeAnimation]();\n this.play();\n }\n }\n [$tick](_time, delta) {\n super[$tick](_time, delta);\n if (this[$paused] ||\n (!this[$hasTransitioned]() && !this[$renderer].isPresenting)) {\n return;\n }\n this[$scene].updateAnimation(delta / MILLISECONDS_PER_SECOND);\n this[$needsRender]();\n }\n updated(changedProperties) {\n super.updated(changedProperties);\n if (changedProperties.has('autoplay') && this.autoplay) {\n this.play();\n }\n if (changedProperties.has('animationName')) {\n this[$changeAnimation]();\n }\n }\n async [$updateSource]() {\n // If we are loading a new model, we need to stop the animation of\n // the current one (if any is playing). Otherwise, we might lose\n // the reference to the scene root and running actions start to\n // throw exceptions and/or behave in unexpected ways:\n this[$scene].stopAnimation();\n return super[$updateSource]();\n }\n [$changeAnimation]() {\n this[$scene].playAnimation(this.animationName, this.animationCrossfadeDuration / MILLISECONDS_PER_SECOND);\n // If we are currently paused, we need to force a render so that\n // the scene updates to the first frame of the new animation\n if (this[$paused]) {\n this[$scene].updateAnimation(0);\n this[$needsRender]();\n }\n }\n }\n __decorate$6([\n property({ type: Boolean })\n ], AnimationModelViewerElement.prototype, \"autoplay\", void 0);\n __decorate$6([\n property({ type: String, attribute: 'animation-name' })\n ], AnimationModelViewerElement.prototype, \"animationName\", void 0);\n __decorate$6([\n property({ type: Number, attribute: 'animation-crossfade-duration' })\n ], AnimationModelViewerElement.prototype, \"animationCrossfadeDuration\", void 0);\n return AnimationModelViewerElement;\n};\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst $hotspotMap = Symbol('hotspotMap');\nconst $mutationCallback = Symbol('mutationCallback');\nconst $observer = Symbol('observer');\nconst $addHotspot = Symbol('addHotspot');\nconst $removeHotspot = Symbol('removeHotspot');\n// Used internally by positionAndNormalFromPoint()\nconst pixelPosition = new Vector2();\nconst worldToModel = new Matrix4();\nconst worldToModelNormal = new Matrix3();\n/**\n * AnnotationMixin implements a declarative API to add hotspots and annotations.\n * Child elements of the element that have a slot name that\n * begins with \"hotspot\" and data-position and data-normal attributes in\n * the format of the camera-target attribute will be added to the scene and\n * track the specified model coordinates.\n */\nconst AnnotationMixin = (ModelViewerElement) => {\n var _a, _b, _c;\n class AnnotationModelViewerElement extends ModelViewerElement {\n constructor() {\n super(...arguments);\n this[_a] = new Map();\n this[_b] = (mutations) => {\n mutations.forEach((mutation) => {\n // NOTE: Be wary that in ShadyDOM cases, the MutationRecord\n // only has addedNodes and removedNodes (and no other details).\n if (!(mutation instanceof MutationRecord) ||\n mutation.type === 'childList') {\n mutation.addedNodes.forEach((node) => {\n this[$addHotspot](node);\n });\n mutation.removedNodes.forEach((node) => {\n this[$removeHotspot](node);\n });\n this[$needsRender]();\n }\n });\n };\n this[_c] = new MutationObserver(this[$mutationCallback]);\n }\n connectedCallback() {\n super.connectedCallback();\n for (let i = 0; i < this.children.length; ++i) {\n this[$addHotspot](this.children[i]);\n }\n const { ShadyDOM } = self;\n if (ShadyDOM == null) {\n this[$observer].observe(this, { childList: true });\n }\n else {\n this[$observer] =\n ShadyDOM.observeChildren(this, this[$mutationCallback]);\n }\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n const { ShadyDOM } = self;\n if (ShadyDOM == null) {\n this[$observer].disconnect();\n }\n else {\n ShadyDOM.unobserveChildren(this[$observer]);\n }\n }\n /**\n * Since the data-position and data-normal attributes are not observed, use\n * this method to move a hotspot. Keep in mind that all hotspots with the\n * same slot name use a single location and the first definition takes\n * precedence, until updated with this method.\n */\n updateHotspot(config) {\n const hotspot = this[$hotspotMap].get(config.name);\n if (hotspot == null) {\n return;\n }\n hotspot.updatePosition(config.position);\n hotspot.updateNormal(config.normal);\n this[$needsRender]();\n }\n /**\n * This method returns the model position and normal of the point on the\n * mesh corresponding to the input pixel coordinates given relative to the\n * model-viewer element. The position and normal are returned as strings in\n * the format suitable for putting in a hotspot's data-position and\n * data-normal attributes. If the mesh is not hit, the result is null.\n */\n positionAndNormalFromPoint(pixelX, pixelY) {\n const scene = this[$scene];\n const { width, height, target } = scene;\n pixelPosition.set(pixelX / width, pixelY / height)\n .multiplyScalar(2)\n .subScalar(1);\n pixelPosition.y *= -1;\n const hit = scene.positionAndNormalFromPoint(pixelPosition);\n if (hit == null) {\n return null;\n }\n worldToModel.copy(target.matrixWorld).invert();\n const position = toVector3D(hit.position.applyMatrix4(worldToModel));\n worldToModelNormal.getNormalMatrix(worldToModel);\n const normal = toVector3D(hit.normal.applyNormalMatrix(worldToModelNormal));\n return { position: position, normal: normal };\n }\n [(_a = $hotspotMap, _b = $mutationCallback, _c = $observer, $addHotspot)](node) {\n if (!(node instanceof HTMLElement &&\n node.slot.indexOf('hotspot') === 0)) {\n return;\n }\n let hotspot = this[$hotspotMap].get(node.slot);\n if (hotspot != null) {\n hotspot.increment();\n }\n else {\n hotspot = new Hotspot({\n name: node.slot,\n position: node.dataset.position,\n normal: node.dataset.normal,\n });\n this[$hotspotMap].set(node.slot, hotspot);\n this[$scene].addHotspot(hotspot);\n }\n this[$scene].isDirty = true;\n }\n [$removeHotspot](node) {\n if (!(node instanceof HTMLElement)) {\n return;\n }\n const hotspot = this[$hotspotMap].get(node.slot);\n if (!hotspot) {\n return;\n }\n if (hotspot.decrement()) {\n this[$scene].removeHotspot(hotspot);\n this[$hotspotMap].delete(node.slot);\n }\n this[$scene].isDirty = true;\n }\n }\n return AnnotationModelViewerElement;\n};\n\n/*!\nfflate - fast JavaScript compression/decompression\n\nLicensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE\nversion 0.6.9\n*/\nvar durl = function (c) { return URL.createObjectURL(new Blob([c], { type: 'text/javascript' })); };\ntry {\n URL.revokeObjectURL(durl(''));\n}\ncatch (e) {\n // We're in Deno or a very old browser\n durl = function (c) { return 'data:application/javascript;charset=UTF-8,' + encodeURI(c); };\n}\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return [b, r];\n};\nvar _a$7 = freb(fleb, 2), fl = _a$7[0], revfl = _a$7[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b$6 = freb(fdeb, 0), revfd = _b$6[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0);\n// get end of byte\nvar shft = function (p) { return ((p / 8) | 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = (syms[i] >>> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n // end\n var e = i + 65535;\n if (e < s) {\n // write full block\n pos = wfblk(w, pos, dat.subarray(i, e));\n }\n else {\n // write final block\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n }\n else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new u32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx bitpos\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n // hash value\n // deopt when i > s - 3 - at end, deopt acceptable\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = (i - dif + j + 32768) & 32767;\n var pti = prev[ti];\n var cd = (ti - pti + 32768) & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += (imod - pimod + 32768) & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one Uint32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n // this is the easiest way to avoid needing to maintain state\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new u32(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && 0xEDB88320) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nfunction deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k;\n if (val instanceof u8)\n t[n] = [val, o];\n else if (Array.isArray(val))\n t[n] = [val[0], mrg(o, val[1])];\n else\n fltn(val, n + '/', t, o);\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nfunction strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n throw 'extra field too long';\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c == null && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n throw 'date not in range 1980-2099';\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1)), b += 4;\n if (c != null) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nfunction zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n throw 'filename too long';\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n\nclass USDZExporter {\n\n\tasync parse( scene ) {\n\n\t\tlet output = buildHeader();\n\n\t\tconst materials = {};\n\t\tconst textures = {};\n\n\t\tscene.traverse( ( object ) => {\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tmaterials[ material.uuid ] = material;\n\n\t\t\t\tif ( material.map !== null ) textures[ material.map.uuid ] = material.map;\n\t\t\t\tif ( material.normalMap !== null ) textures[ material.normalMap.uuid ] = material.normalMap;\n\t\t\t\tif ( material.aoMap !== null ) textures[ material.aoMap.uuid ] = material.aoMap;\n\t\t\t\tif ( material.roughnessMap !== null ) textures[ material.roughnessMap.uuid ] = material.roughnessMap;\n\t\t\t\tif ( material.metalnessMap !== null ) textures[ material.metalnessMap.uuid ] = material.metalnessMap;\n\t\t\t\tif ( material.emissiveMap !== null ) textures[ material.emissiveMap.uuid ] = material.emissiveMap;\n\n\t\t\t\toutput += buildXform( object, buildMesh( geometry, material ) );\n\n\t\t\t}\n\n\t\t} );\n\n\t\toutput += buildMaterials( materials );\n\t\toutput += buildTextures( textures );\n\n\t\tconst files = { 'model.usda': strToU8( output ) };\n\n\t\tfor ( const uuid in textures ) {\n\n\t\t\tconst texture = textures[ uuid ];\n\t\t\tfiles[ 'textures/Texture_' + texture.id + '.jpg' ] = await imgToU8( texture.image );\n\n\t\t}\n\n\t\t// 64 byte alignment\n\t\t// https://github.com/101arrowz/fflate/issues/39#issuecomment-777263109\n\n\t\tlet offset = 0;\n\n\t\tfor ( const filename in files ) {\n\n\t\t\tconst file = files[ filename ];\n\t\t\tconst headerSize = 34 + filename.length;\n\n\t\t\toffset += headerSize;\n\n\t\t\tconst offsetMod64 = offset & 63;\n\n\t\t\tif ( offsetMod64 !== 4 ) {\n\n\t\t\t\tconst padLength = 64 - offsetMod64;\n\t\t\t\tconst padding = new Uint8Array( padLength );\n\n\t\t\t\tfiles[ filename ] = [ file, { extra: { 12345: padding } } ];\n\n\t\t\t}\n\n\t\t\toffset = file.length;\n\n\t\t}\n\n\t\treturn zipSync( files, { level: 0 } );\n\n\t}\n\n}\n\nasync function imgToU8( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\tconst scale = 1024 / Math.max( image.width, image.height );\n\n\t\tconst canvas = document.createElement( 'canvas' );\n\t\tcanvas.width = image.width * Math.min( 1, scale );\n\t\tcanvas.height = image.height * Math.min( 1, scale );\n\n\t\tconst context = canvas.getContext( '2d' );\n\t\tcontext.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\tconst blob = await new Promise( resolve => canvas.toBlob( resolve, 'image/jpeg', 1 ) );\n\t\treturn new Uint8Array( await blob.arrayBuffer() );\n\n\t}\n\n}\n\n//\n\nconst PRECISION = 7;\n\nfunction buildHeader() {\n\n\treturn `#usda 1.0\n(\n customLayerData = {\n string creator = \"Three.js USDZExporter\"\n }\n metersPerUnit = 1\n upAxis = \"Y\"\n)\n\n`;\n\n}\n\n// Xform\n\nfunction buildXform( object, define ) {\n\n\tconst name = 'Object_' + object.id;\n\tconst transform = buildMatrix( object.matrixWorld );\n\n\treturn `def Xform \"${ name }\"\n{\n matrix4d xformOp:transform = ${ transform }\n uniform token[] xformOpOrder = [\"xformOp:transform\"]\n\n ${ define }\n}\n\n`;\n\n}\n\nfunction buildMatrix( matrix ) {\n\n\tconst array = matrix.elements;\n\n\treturn `( ${ buildMatrixRow( array, 0 ) }, ${ buildMatrixRow( array, 4 ) }, ${ buildMatrixRow( array, 8 ) }, ${ buildMatrixRow( array, 12 ) } )`;\n\n}\n\nfunction buildMatrixRow( array, offset ) {\n\n\treturn `(${ array[ offset + 0 ] }, ${ array[ offset + 1 ] }, ${ array[ offset + 2 ] }, ${ array[ offset + 3 ] })`;\n\n}\n\n// Mesh\n\nfunction buildMesh( geometry, material ) {\n\n\tconst name = 'Geometry_' + geometry.id;\n\tconst attributes = geometry.attributes;\n\tconst count = attributes.position.count;\n\n\tif ( 'uv2' in attributes ) {\n\n\t\tconsole.warn( 'THREE.USDZExporter: uv2 not supported yet.' );\n\n\t}\n\n\treturn `def Mesh \"${ name }\"\n {\n int[] faceVertexCounts = [${ buildMeshVertexCount( geometry ) }]\n int[] faceVertexIndices = [${ buildMeshVertexIndices( geometry ) }]\n rel material:binding = \n normal3f[] normals = [${ buildVector3Array( attributes.normal, count )}] (\n interpolation = \"vertex\"\n )\n point3f[] points = [${ buildVector3Array( attributes.position, count )}]\n float2[] primvars:st = [${ buildVector2Array( attributes.uv, count )}] (\n interpolation = \"vertex\"\n )\n uniform token subdivisionScheme = \"none\"\n }\n`;\n\n}\n\nfunction buildMeshVertexCount( geometry ) {\n\n\tconst count = geometry.index !== null ? geometry.index.array.length : geometry.attributes.position.count;\n\n\treturn Array( count / 3 ).fill( 3 ).join( ', ' );\n\n}\n\nfunction buildMeshVertexIndices( geometry ) {\n\n\tif ( geometry.index !== null ) {\n\n\t\treturn geometry.index.array.join( ', ' );\n\n\t}\n\n\tconst array = [];\n\tconst length = geometry.attributes.position.count;\n\n\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\tarray.push( i );\n\n\t}\n\n\treturn array.join( ', ' );\n\n}\n\nfunction buildVector3Array( attribute, count ) {\n\n\tif ( attribute === undefined ) {\n\n\t\tconsole.warn( 'USDZExporter: Normals missing.' );\n\t\treturn Array( count ).fill( '(0, 0, 0)' ).join( ', ' );\n\n\t}\n\n\tconst array = [];\n\tconst data = attribute.array;\n\n\tfor ( let i = 0; i < data.length; i += 3 ) {\n\n\t\tarray.push( `(${ data[ i + 0 ].toPrecision( PRECISION ) }, ${ data[ i + 1 ].toPrecision( PRECISION ) }, ${ data[ i + 2 ].toPrecision( PRECISION ) })` );\n\n\t}\n\n\treturn array.join( ', ' );\n\n}\n\nfunction buildVector2Array( attribute, count ) {\n\n\tif ( attribute === undefined ) {\n\n\t\tconsole.warn( 'USDZExporter: UVs missing.' );\n\t\treturn Array( count ).fill( '(0, 0)' ).join( ', ' );\n\n\t}\n\n\tconst array = [];\n\tconst data = attribute.array;\n\n\tfor ( let i = 0; i < data.length; i += 2 ) {\n\n\t\tarray.push( `(${ data[ i + 0 ].toPrecision( PRECISION ) }, ${ 1 - data[ i + 1 ].toPrecision( PRECISION ) })` );\n\n\t}\n\n\treturn array.join( ', ' );\n\n}\n\n// Materials\n\nfunction buildMaterials( materials ) {\n\n\tconst array = [];\n\n\tfor ( const uuid in materials ) {\n\n\t\tconst material = materials[ uuid ];\n\n\t\tarray.push( buildMaterial( material ) );\n\n\t}\n\n\treturn `def \"Materials\"\n{\n${ array.join( '' ) }\n}\n\n`;\n\n}\n\nfunction buildMaterial( material ) {\n\n\t// https://graphics.pixar.com/usd/docs/UsdPreviewSurface-Proposal.html\n\n\tconst pad = ' ';\n\tconst parameters = [];\n\n\tif ( material.map !== null ) {\n\n\t\tparameters.push( `${ pad }color3f inputs:diffuseColor.connect = ` );\n\n\t} else {\n\n\t\tparameters.push( `${ pad }color3f inputs:diffuseColor = ${ buildColor( material.color ) }` );\n\n\t}\n\n\tif ( material.emissiveMap !== null ) {\n\n\t\tparameters.push( `${ pad }color3f inputs:emissiveColor.connect = ` );\n\n\t} else if ( material.emissive.getHex() > 0 ) {\n\n\t\tparameters.push( `${ pad }color3f inputs:emissiveColor = ${ buildColor( material.emissive ) }` );\n\n\t}\n\n\tif ( material.normalMap !== null ) {\n\n\t\tparameters.push( `${ pad }normal3f inputs:normal.connect = ` );\n\n\t}\n\n\tif ( material.aoMap !== null ) {\n\n\t\tparameters.push( `${ pad }float inputs:occlusion.connect = ` );\n\n\t}\n\n\tif ( material.roughnessMap !== null ) {\n\n\t\tparameters.push( `${ pad }float inputs:roughness.connect = ` );\n\n\t} else {\n\n\t\tparameters.push( `${ pad }float inputs:roughness = ${ material.roughness }` );\n\n\t}\n\n\tif ( material.metalnessMap !== null ) {\n\n\t\tparameters.push( `${ pad }float inputs:metallic.connect = ` );\n\n\t} else {\n\n\t\tparameters.push( `${ pad }float inputs:metallic = ${ material.metalness }` );\n\n\t}\n\n\treturn `\n def Material \"Material_${ material.id }\"\n {\n token outputs:surface.connect = \n\n def Shader \"PreviewSurface\"\n {\n uniform token info:id = \"UsdPreviewSurface\"\n${ parameters.join( '\\n' ) }\n int inputs:useSpecularWorkflow = 0\n token outputs:surface\n }\n }\n`;\n\n}\n\nfunction buildTextures( textures ) {\n\n\tconst array = [];\n\n\tfor ( const uuid in textures ) {\n\n\t\tconst texture = textures[ uuid ];\n\n\t\tarray.push( buildTexture( texture ) );\n\n\t}\n\n\treturn `def \"Textures\"\n{\n${ array.join( '' ) }\n}\n\n`;\n\n}\n\nfunction buildTexture( texture ) {\n\n\treturn `\n def Shader \"Texture_${ texture.id }\"\n {\n uniform token info:id = \"UsdUVTexture\"\n asset inputs:file = @textures/Texture_${ texture.id }.jpg@\n token inputs:wrapS = \"repeat\"\n token inputs:wrapT = \"repeat\"\n float outputs:r\n float outputs:g\n float outputs:b\n float3 outputs:rgb\n }\n`;\n\n}\n\nfunction buildColor( color ) {\n\n\treturn `(${ color.r }, ${ color.g }, ${ color.b })`;\n\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * For our purposes, an enumeration is a fixed set of CSS-expression-compatible\n * names. When serialized, a selected subset of the members may be specified as\n * whitespace-separated strings. An enumeration deserializer is a function that\n * parses a serialized subset of an enumeration and returns any members that are\n * found as a Set.\n *\n * The following example will produce a deserializer for the days of the\n * week:\n *\n * const deserializeDaysOfTheWeek = enumerationDeserializer([\n * 'Monday',\n * 'Tuesday',\n * 'Wednesday',\n * 'Thursday',\n * 'Friday',\n * 'Saturday',\n * 'Sunday'\n * ]);\n */\nconst enumerationDeserializer = (allowedNames) => (valueString) => {\n try {\n const expressions = parseExpressions(valueString);\n const names = (expressions.length ? expressions[0].terms : [])\n .filter((valueNode) => valueNode && valueNode.type === 'ident')\n .map(valueNode => valueNode.value)\n .filter(name => allowedNames.indexOf(name) > -1);\n // NOTE(cdata): IE11 does not support constructing a Set directly from\n // an iterable, so we need to manually add all the items:\n const result = new Set();\n for (const name of names) {\n result.add(name);\n }\n return result;\n }\n catch (_error) {\n }\n return new Set();\n};\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __decorate$5 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof undefined === \"function\") r = undefined(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet isWebXRBlocked = false;\nlet isSceneViewerBlocked = false;\nconst noArViewerSigil = '#model-viewer-no-ar-fallback';\nconst deserializeARModes = enumerationDeserializer(['quick-look', 'scene-viewer', 'webxr', 'none']);\nconst DEFAULT_AR_MODES = 'webxr scene-viewer';\nconst ARMode = {\n QUICK_LOOK: 'quick-look',\n SCENE_VIEWER: 'scene-viewer',\n WEBXR: 'webxr',\n NONE: 'none'\n};\nconst $arButtonContainer = Symbol('arButtonContainer');\nconst $enterARWithWebXR = Symbol('enterARWithWebXR');\nconst $openSceneViewer = Symbol('openSceneViewer');\nconst $openIOSARQuickLook = Symbol('openIOSARQuickLook');\nconst $canActivateAR = Symbol('canActivateAR');\nconst $arMode = Symbol('arMode');\nconst $arModes = Symbol('arModes');\nconst $arAnchor = Symbol('arAnchor');\nconst $preload = Symbol('preload');\nconst $onARButtonContainerClick = Symbol('onARButtonContainerClick');\nconst $onARStatus = Symbol('onARStatus');\nconst $onARTracking = Symbol('onARTracking');\nconst $onARTap = Symbol('onARTap');\nconst $selectARMode = Symbol('selectARMode');\nconst $triggerLoad = Symbol('triggerLoad');\nconst ARMixin = (ModelViewerElement) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n class ARModelViewerElement extends ModelViewerElement {\n constructor() {\n super(...arguments);\n this.ar = false;\n this.arScale = 'auto';\n this.arPlacement = 'floor';\n this.arModes = DEFAULT_AR_MODES;\n this.iosSrc = null;\n this[_a] = false;\n // TODO: Add this to the shadow root as part of this mixin's\n // implementation:\n this[_b] = this.shadowRoot.querySelector('.ar-button');\n this[_c] = document.createElement('a');\n this[_d] = new Set();\n this[_e] = ARMode.NONE;\n this[_f] = false;\n this[_g] = (event) => {\n event.preventDefault();\n this.activateAR();\n };\n this[_h] = ({ status }) => {\n if (status === ARStatus.NOT_PRESENTING ||\n this[$renderer].arRenderer.presentedScene === this[$scene]) {\n this.setAttribute('ar-status', status);\n this.dispatchEvent(new CustomEvent('ar-status', { detail: { status } }));\n if (status === ARStatus.NOT_PRESENTING) {\n this.removeAttribute('ar-tracking');\n }\n else if (status === ARStatus.SESSION_STARTED) {\n this.setAttribute('ar-tracking', ARTracking.TRACKING);\n }\n }\n };\n this[_j] = ({ status }) => {\n this.setAttribute('ar-tracking', status);\n this.dispatchEvent(new CustomEvent('ar-tracking', { detail: { status } }));\n };\n this[_k] = (event) => {\n if (event.data == '_apple_ar_quicklook_button_tapped') {\n this.dispatchEvent(new CustomEvent('quick-look-button-tapped'));\n }\n };\n }\n get canActivateAR() {\n return this[$arMode] !== ARMode.NONE;\n }\n connectedCallback() {\n super.connectedCallback();\n this[$renderer].arRenderer.addEventListener('status', this[$onARStatus]);\n this.setAttribute('ar-status', ARStatus.NOT_PRESENTING);\n this[$renderer].arRenderer.addEventListener('tracking', this[$onARTracking]);\n this[$arAnchor].addEventListener('message', this[$onARTap]);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this[$renderer].arRenderer.removeEventListener('status', this[$onARStatus]);\n this[$renderer].arRenderer.removeEventListener('tracking', this[$onARTracking]);\n this[$arAnchor].removeEventListener('message', this[$onARTap]);\n }\n async update(changedProperties) {\n super.update(changedProperties);\n if (changedProperties.has('arScale')) {\n this[$scene].canScale = this.arScale !== 'fixed';\n }\n if (changedProperties.has('arPlacement')) {\n this[$scene].setShadowIntensity(this[$scene].shadowIntensity);\n this[$needsRender]();\n }\n if (!changedProperties.has('ar') && !changedProperties.has('arModes') &&\n !changedProperties.has('iosSrc')) {\n return;\n }\n if (changedProperties.has('arModes')) {\n this[$arModes] = deserializeARModes(this.arModes);\n }\n this[$selectARMode]();\n }\n /**\n * Activates AR. Note that for any mode that is not WebXR-based, this\n * method most likely has to be called synchronous from a user\n * interaction handler. Otherwise, attempts to activate modes that\n * require user interaction will most likely be ignored.\n */\n async activateAR() {\n switch (this[$arMode]) {\n case ARMode.QUICK_LOOK:\n this[$openIOSARQuickLook]();\n break;\n case ARMode.WEBXR:\n await this[$enterARWithWebXR]();\n break;\n case ARMode.SCENE_VIEWER:\n this[$openSceneViewer]();\n break;\n default:\n console.warn('No AR Mode can be activated. This is probably due to missing \\\nconfiguration or device capabilities');\n break;\n }\n }\n async [(_a = $canActivateAR, _b = $arButtonContainer, _c = $arAnchor, _d = $arModes, _e = $arMode, _f = $preload, _g = $onARButtonContainerClick, _h = $onARStatus, _j = $onARTracking, _k = $onARTap, $selectARMode)]() {\n this[$arMode] = ARMode.NONE;\n if (this.ar) {\n const arModes = [];\n this[$arModes].forEach((value) => {\n arModes.push(value);\n });\n for (const value of arModes) {\n if (value === 'webxr' && IS_WEBXR_AR_CANDIDATE && !isWebXRBlocked &&\n await this[$renderer].arRenderer.supportsPresentation()) {\n this[$arMode] = ARMode.WEBXR;\n break;\n }\n else if (value === 'scene-viewer' && IS_SCENEVIEWER_CANDIDATE &&\n !isSceneViewerBlocked) {\n this[$arMode] = ARMode.SCENE_VIEWER;\n break;\n }\n else if (value === 'quick-look' && IS_AR_QUICKLOOK_CANDIDATE) {\n this[$arMode] = ARMode.QUICK_LOOK;\n break;\n }\n }\n // The presence of ios-src overrides the absence of quick-look ar-mode.\n if (!this.canActivateAR && this.iosSrc != null &&\n IS_AR_QUICKLOOK_CANDIDATE) {\n this[$arMode] = ARMode.QUICK_LOOK;\n }\n }\n if (this.canActivateAR) {\n this[$arButtonContainer].classList.add('enabled');\n this[$arButtonContainer].addEventListener('click', this[$onARButtonContainerClick]);\n }\n else if (this[$arButtonContainer].classList.contains('enabled')) {\n this[$arButtonContainer].removeEventListener('click', this[$onARButtonContainerClick]);\n this[$arButtonContainer].classList.remove('enabled');\n // If AR went from working to not, notify the element.\n const status = ARStatus.FAILED;\n this.setAttribute('ar-status', status);\n this.dispatchEvent(new CustomEvent('ar-status', { detail: { status } }));\n }\n }\n async [$enterARWithWebXR]() {\n console.log('Attempting to present in AR with WebXR...');\n await this[$triggerLoad]();\n try {\n this[$arButtonContainer].removeEventListener('click', this[$onARButtonContainerClick]);\n const { arRenderer } = this[$renderer];\n arRenderer.placeOnWall = this.arPlacement === 'wall';\n await arRenderer.present(this[$scene]);\n }\n catch (error) {\n console.warn('Error while trying to present in AR with WebXR');\n console.error(error);\n await this[$renderer].arRenderer.stopPresenting();\n isWebXRBlocked = true;\n console.warn('Falling back to next ar-mode');\n await this[$selectARMode]();\n this.activateAR();\n }\n finally {\n this[$selectARMode]();\n }\n }\n async [$triggerLoad]() {\n if (!this.loaded) {\n this[$preload] = true;\n this[$updateSource]();\n await waitForEvent(this, 'load');\n this[$preload] = false;\n }\n }\n [$shouldAttemptPreload]() {\n return super[$shouldAttemptPreload]() || this[$preload];\n }\n /**\n * Takes a URL and a title string, and attempts to launch Scene Viewer on\n * the current device.\n */\n [$openSceneViewer]() {\n const location = self.location.toString();\n const locationUrl = new URL(location);\n const modelUrl = new URL(this.src, location);\n const params = new URLSearchParams(modelUrl.search);\n locationUrl.hash = noArViewerSigil;\n // modelUrl can contain title/link/sound etc.\n params.set('mode', 'ar_preferred');\n if (!params.has('disable_occlusion')) {\n params.set('disable_occlusion', 'true');\n }\n if (this.arScale === 'fixed') {\n params.set('resizable', 'false');\n }\n if (this.arPlacement === 'wall') {\n params.set('enable_vertical_placement', 'true');\n }\n if (params.has('sound')) {\n const soundUrl = new URL(params.get('sound'), location);\n params.set('sound', soundUrl.toString());\n }\n if (params.has('link')) {\n const linkUrl = new URL(params.get('link'), location);\n params.set('link', linkUrl.toString());\n }\n const intent = `intent://arvr.google.com/scene-viewer/1.0?${params.toString() + '&file=' +\n encodeURIComponent(modelUrl\n .toString())}#Intent;scheme=https;package=com.google.ar.core;action=android.intent.action.VIEW;S.browser_fallback_url=${encodeURIComponent(locationUrl.toString())};end;`;\n const undoHashChange = () => {\n if (self.location.hash === noArViewerSigil) {\n isSceneViewerBlocked = true;\n // The new history will be the current URL with a new hash.\n // Go back one step so that we reset to the expected URL.\n // NOTE(cdata): this should not invoke any browser-level navigation\n // because hash-only changes modify the URL in-place without\n // navigating:\n self.history.back();\n console.warn('Error while trying to present in AR with Scene Viewer');\n console.warn('Falling back to next ar-mode');\n this[$selectARMode]();\n // Would be nice to activateAR() here, but webXR fails due to not\n // seeing a user activation.\n }\n };\n self.addEventListener('hashchange', undoHashChange, { once: true });\n this[$arAnchor].setAttribute('href', intent);\n console.log('Attempting to present in AR with Scene Viewer...');\n this[$arAnchor].click();\n }\n /**\n * Takes a URL to a USDZ file and sets the appropriate fields so that Safari\n * iOS can intent to their AR Quick Look.\n */\n async [$openIOSARQuickLook]() {\n const generateUsdz = !this.iosSrc;\n this[$arButtonContainer].classList.remove('enabled');\n const objectURL = generateUsdz ? await this.prepareUSDZ() : this.iosSrc;\n const modelUrl = new URL(objectURL, self.location.toString());\n if (this.arScale === 'fixed') {\n if (modelUrl.hash) {\n modelUrl.hash += '&';\n }\n modelUrl.hash += 'allowsContentScaling=0';\n }\n const anchor = this[$arAnchor];\n anchor.setAttribute('rel', 'ar');\n const img = document.createElement('img');\n anchor.appendChild(img);\n anchor.setAttribute('href', modelUrl.toString());\n if (generateUsdz) {\n anchor.setAttribute('download', 'model.usdz');\n }\n console.log('Attempting to present in AR with Quick Look...');\n anchor.click();\n anchor.removeChild(img);\n if (generateUsdz) {\n URL.revokeObjectURL(objectURL);\n }\n this[$arButtonContainer].classList.add('enabled');\n }\n async prepareUSDZ() {\n const updateSourceProgress = this[$progressTracker].beginActivity();\n await this[$triggerLoad]();\n const scene = this[$scene];\n const shadow = scene.shadow;\n let visible = false;\n // Remove shadow from export\n if (shadow != null) {\n visible = shadow.visible;\n shadow.visible = false;\n }\n updateSourceProgress(0.2);\n const exporter = new USDZExporter();\n const arraybuffer = await exporter.parse(scene.modelContainer);\n const blob = new Blob([arraybuffer], {\n type: 'model/vnd.usdz+zip',\n });\n const url = URL.createObjectURL(blob);\n updateSourceProgress(1);\n if (shadow != null) {\n shadow.visible = visible;\n }\n return url;\n }\n }\n __decorate$5([\n property({ type: Boolean, attribute: 'ar' })\n ], ARModelViewerElement.prototype, \"ar\", void 0);\n __decorate$5([\n property({ type: String, attribute: 'ar-scale' })\n ], ARModelViewerElement.prototype, \"arScale\", void 0);\n __decorate$5([\n property({ type: String, attribute: 'ar-placement' })\n ], ARModelViewerElement.prototype, \"arPlacement\", void 0);\n __decorate$5([\n property({ type: String, attribute: 'ar-modes' })\n ], ARModelViewerElement.prototype, \"arModes\", void 0);\n __decorate$5([\n property({ type: String, attribute: 'ios-src' })\n ], ARModelViewerElement.prototype, \"iosSrc\", void 0);\n return ARModelViewerElement;\n};\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar _a$6, _b$5, _c$2;\nconst $evaluate = Symbol('evaluate');\nconst $lastValue = Symbol('lastValue');\n/**\n * An Evaluator is used to derive a computed style from part (or all) of a CSS\n * expression AST. This construct is particularly useful for complex ASTs\n * containing function calls such as calc, var and env. Such styles could be\n * costly to re-evaluate on every frame (and in some cases we may try to do\n * that). The Evaluator construct allows us to mark sub-trees of the AST as\n * constant, so that only the dynamic parts are re-evaluated. It also separates\n * one-time AST preparation work from work that necessarily has to happen upon\n * each evaluation.\n */\nclass Evaluator {\n constructor() {\n this[_a$6] = null;\n }\n /**\n * An Evaluatable is a NumberNode or an Evaluator that evaluates a NumberNode\n * as the result of invoking its evaluate method. This is mainly used to\n * ensure that CSS function nodes are cast to the corresponding Evaluators\n * that will resolve the result of the function, but is also used to ensure\n * that a percentage nested at arbitrary depth in the expression will always\n * be evaluated against the correct basis.\n */\n static evaluatableFor(node, basis = ZERO) {\n if (node instanceof Evaluator) {\n return node;\n }\n if (node.type === 'number') {\n if (node.unit === '%') {\n return new PercentageEvaluator(node, basis);\n }\n return node;\n }\n switch (node.name.value) {\n case 'calc':\n return new CalcEvaluator(node, basis);\n case 'env':\n return new EnvEvaluator(node);\n }\n return ZERO;\n }\n /**\n * If the input is an Evaluator, returns the result of evaluating it.\n * Otherwise, returns the input.\n *\n * This is a helper to aide in resolving a NumberNode without conditionally\n * checking if the Evaluatable is an Evaluator everywhere.\n */\n static evaluate(evaluatable) {\n if (evaluatable instanceof Evaluator) {\n return evaluatable.evaluate();\n }\n return evaluatable;\n }\n /**\n * If the input is an Evaluator, returns the value of its isConstant property.\n * Returns true for all other input values.\n */\n static isConstant(evaluatable) {\n if (evaluatable instanceof Evaluator) {\n return evaluatable.isConstant;\n }\n return true;\n }\n /**\n * This method applies a set of structured intrinsic metadata to an evaluated\n * result from a parsed CSS-like string of expressions. Intrinsics provide\n * sufficient metadata (e.g., basis values, analogs for keywords) such that\n * omitted values in the input string can be backfilled, and keywords can be\n * converted to concrete numbers.\n *\n * The result of applying intrinsics is a tuple of NumberNode values whose\n * units match the units used by the basis of the intrinsics.\n *\n * The following is a high-level description of how intrinsics are applied:\n *\n * 1. Determine the value of 'auto' for the current term\n * 2. If there is no corresponding input value for this term, substitute the\n * 'auto' value.\n * 3. If the term is an IdentNode, treat it as a keyword and perform the\n * appropriate substitution.\n * 4. If the term is still null, fallback to the 'auto' value\n * 5. If the term is a percentage, apply it to the basis and return that\n * value\n * 6. Normalize the unit of the term\n * 7. If the term's unit does not match the basis unit, return the basis\n * value\n * 8. Return the term as is\n */\n static applyIntrinsics(evaluated, intrinsics) {\n const { basis, keywords } = intrinsics;\n const { auto } = keywords;\n return basis.map((basisNode, index) => {\n // Use an auto value if we have it, otherwise the auto value is the basis:\n const autoSubstituteNode = auto[index] == null ? basisNode : auto[index];\n // If the evaluated nodes do not have a node at the current\n // index, fallback to the \"auto\" substitute right away:\n let evaluatedNode = evaluated[index] ? evaluated[index] : autoSubstituteNode;\n // Any ident node is considered a keyword:\n if (evaluatedNode.type === 'ident') {\n const keyword = evaluatedNode.value;\n // Substitute any keywords for concrete values first:\n if (keyword in keywords) {\n evaluatedNode = keywords[keyword][index];\n }\n }\n // If we don't have a NumberNode at this point, fall back to whatever\n // is specified for auto:\n if (evaluatedNode == null || evaluatedNode.type === 'ident') {\n evaluatedNode = autoSubstituteNode;\n }\n // For percentages, we always apply the percentage to the basis value:\n if (evaluatedNode.unit === '%') {\n return numberNode(evaluatedNode.number / 100 * basisNode.number, basisNode.unit);\n }\n // Otherwise, normalize whatever we have:\n evaluatedNode = normalizeUnit(evaluatedNode, basisNode);\n // If the normalized units do not match, return the basis as a fallback:\n if (evaluatedNode.unit !== basisNode.unit) {\n return basisNode;\n }\n // Finally, return the evaluated node with intrinsics applied:\n return evaluatedNode;\n });\n }\n /**\n * If true, the Evaluator will only evaluate its AST one time. If false, the\n * Evaluator will re-evaluate the AST each time that the public evaluate\n * method is invoked.\n */\n get isConstant() {\n return false;\n }\n /**\n * Evaluate the Evaluator and return the result. If the Evaluator is constant,\n * the corresponding AST will only be evaluated once, and the result of\n * evaluating it the first time will be returned on all subsequent\n * evaluations.\n */\n evaluate() {\n if (!this.isConstant || this[$lastValue] == null) {\n this[$lastValue] = this[$evaluate]();\n }\n return this[$lastValue];\n }\n}\n_a$6 = $lastValue;\nconst $percentage = Symbol('percentage');\nconst $basis = Symbol('basis');\n/**\n * A PercentageEvaluator scales a given basis value by a given percentage value.\n * The evaluated result is always considered to be constant.\n */\nclass PercentageEvaluator extends Evaluator {\n constructor(percentage, basis) {\n super();\n this[$percentage] = percentage;\n this[$basis] = basis;\n }\n get isConstant() {\n return true;\n }\n [$evaluate]() {\n return numberNode(this[$percentage].number / 100 * this[$basis].number, this[$basis].unit);\n }\n}\nconst $identNode = Symbol('identNode');\n/**\n * Evaluator for CSS-like env() functions. Currently, only one environment\n * variable is accepted as an argument for such functions: window-scroll-y.\n *\n * The env() Evaluator is explicitly dynamic because it always refers to\n * external state that changes as the user scrolls, so it should always be\n * re-evaluated to ensure we get the most recent value.\n *\n * Some important notes about this feature include:\n *\n * - There is no such thing as a \"window-scroll-y\" CSS environment variable in\n * any stable browser at the time that this comment is being written.\n * - The actual CSS env() function accepts a second argument as a fallback for\n * the case that the specified first argument isn't set; our syntax does not\n * support this second argument.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/env\n */\nclass EnvEvaluator extends Evaluator {\n constructor(envFunction) {\n super();\n this[_b$5] = null;\n const identNode = envFunction.arguments.length ? envFunction.arguments[0].terms[0] : null;\n if (identNode != null && identNode.type === 'ident') {\n this[$identNode] = identNode;\n }\n }\n get isConstant() {\n return false;\n }\n ;\n [(_b$5 = $identNode, $evaluate)]() {\n if (this[$identNode] != null) {\n switch (this[$identNode].value) {\n case 'window-scroll-y':\n const verticalScrollPosition = window.pageYOffset;\n const verticalScrollMax = Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);\n const scrollY = verticalScrollPosition /\n (verticalScrollMax - window.innerHeight) ||\n 0;\n return { type: 'number', number: scrollY, unit: null };\n }\n }\n return ZERO;\n }\n}\nconst IS_MULTIPLICATION_RE = /[\\*\\/]/;\nconst $evaluator = Symbol('evalutor');\n/**\n * Evaluator for CSS-like calc() functions. Our implementation of calc()\n * evaluation currently support nested function calls, an unlimited number of\n * terms, and all four algebraic operators (+, -, * and /).\n *\n * The Evaluator is marked as constant unless the calc expression contains an\n * internal env expression at any depth, in which case it will be marked as\n * dynamic.\n *\n * @see https://www.w3.org/TR/css-values-3/#calc-syntax\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/calc\n */\nclass CalcEvaluator extends Evaluator {\n constructor(calcFunction, basis = ZERO) {\n super();\n this[_c$2] = null;\n if (calcFunction.arguments.length !== 1) {\n return;\n }\n const terms = calcFunction.arguments[0].terms.slice();\n const secondOrderTerms = [];\n while (terms.length) {\n const term = terms.shift();\n if (secondOrderTerms.length > 0) {\n const previousTerm = secondOrderTerms[secondOrderTerms.length - 1];\n if (previousTerm.type === 'operator' &&\n IS_MULTIPLICATION_RE.test(previousTerm.value)) {\n const operator = secondOrderTerms.pop();\n const leftValue = secondOrderTerms.pop();\n if (leftValue == null) {\n return;\n }\n secondOrderTerms.push(new OperatorEvaluator(operator, Evaluator.evaluatableFor(leftValue, basis), Evaluator.evaluatableFor(term, basis)));\n continue;\n }\n }\n secondOrderTerms.push(term.type === 'operator' ? term :\n Evaluator.evaluatableFor(term, basis));\n }\n while (secondOrderTerms.length > 2) {\n const [left, operator, right] = secondOrderTerms.splice(0, 3);\n if (operator.type !== 'operator') {\n return;\n }\n secondOrderTerms.unshift(new OperatorEvaluator(operator, Evaluator.evaluatableFor(left, basis), Evaluator.evaluatableFor(right, basis)));\n }\n // There should only be one combined evaluator at this point:\n if (secondOrderTerms.length === 1) {\n this[$evaluator] = secondOrderTerms[0];\n }\n }\n get isConstant() {\n return this[$evaluator] == null || Evaluator.isConstant(this[$evaluator]);\n }\n [(_c$2 = $evaluator, $evaluate)]() {\n return this[$evaluator] != null ? Evaluator.evaluate(this[$evaluator]) :\n ZERO;\n }\n}\nconst $operator = Symbol('operator');\nconst $left = Symbol('left');\nconst $right = Symbol('right');\n/**\n * An Evaluator for the operators found inside CSS calc() functions.\n * The evaluator accepts an operator and left/right operands. The operands can\n * be any valid expression term typically allowed inside a CSS calc function.\n *\n * As detail of this implementation, the only supported unit types are angles\n * expressed as radians or degrees, and lengths expressed as meters, centimeters\n * or millimeters.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/calc\n */\nclass OperatorEvaluator extends Evaluator {\n constructor(operator, left, right) {\n super();\n this[$operator] = operator;\n this[$left] = left;\n this[$right] = right;\n }\n get isConstant() {\n return Evaluator.isConstant(this[$left]) &&\n Evaluator.isConstant(this[$right]);\n }\n [$evaluate]() {\n const leftNode = normalizeUnit(Evaluator.evaluate(this[$left]));\n const rightNode = normalizeUnit(Evaluator.evaluate(this[$right]));\n const { number: leftValue, unit: leftUnit } = leftNode;\n const { number: rightValue, unit: rightUnit } = rightNode;\n // Disallow operations for mismatched normalized units e.g., m and rad:\n if (rightUnit != null && leftUnit != null && rightUnit != leftUnit) {\n return ZERO;\n }\n // NOTE(cdata): rules for calc type checking are defined here\n // https://drafts.csswg.org/css-values-3/#calc-type-checking\n // This is a simplification and may not hold up once we begin to support\n // additional unit types:\n const unit = leftUnit || rightUnit;\n let value;\n switch (this[$operator].value) {\n case '+':\n value = leftValue + rightValue;\n break;\n case '-':\n value = leftValue - rightValue;\n break;\n case '/':\n value = leftValue / rightValue;\n break;\n case '*':\n value = leftValue * rightValue;\n break;\n default:\n return ZERO;\n }\n return { type: 'number', number: value, unit };\n }\n}\nconst $evaluatables = Symbol('evaluatables');\nconst $intrinsics = Symbol('intrinsics');\n/**\n * A VectorEvaluator evaluates a series of numeric terms that usually represent\n * a data structure such as a multi-dimensional vector or a spherical\n *\n * The form of the evaluator's result is determined by the Intrinsics that are\n * given to it when it is constructed. For example, spherical intrinsics would\n * establish two angle terms and a length term, so the result of evaluating the\n * evaluator that is configured with spherical intrinsics is a three element\n * array where the first two elements represent angles in radians and the third\n * element representing a length in meters.\n */\nclass StyleEvaluator extends Evaluator {\n constructor(expressions, intrinsics) {\n super();\n this[$intrinsics] = intrinsics;\n const firstExpression = expressions[0];\n const terms = firstExpression != null ? firstExpression.terms : [];\n this[$evaluatables] =\n intrinsics.basis.map((basisNode, index) => {\n const term = terms[index];\n if (term == null) {\n return { type: 'ident', value: 'auto' };\n }\n if (term.type === 'ident') {\n return term;\n }\n return Evaluator.evaluatableFor(term, basisNode);\n });\n }\n get isConstant() {\n for (const evaluatable of this[$evaluatables]) {\n if (!Evaluator.isConstant(evaluatable)) {\n return false;\n }\n }\n return true;\n }\n [$evaluate]() {\n const evaluated = this[$evaluatables].map(evaluatable => Evaluator.evaluate(evaluatable));\n return Evaluator.applyIntrinsics(evaluated, this[$intrinsics])\n .map(numberNode => numberNode.number);\n }\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar _a$5, _b$4, _c$1, _d;\nconst $instances = Symbol('instances');\nconst $activateListener = Symbol('activateListener');\nconst $deactivateListener = Symbol('deactivateListener');\nconst $notifyInstances = Symbol('notifyInstances');\nconst $notify = Symbol('notify');\nconst $scrollCallback = Symbol('callback');\n/**\n * This internal helper is intended to work as a reference-counting manager of\n * scroll event listeners. Only one scroll listener is ever registered for all\n * instances of the class, and when the last ScrollObserver \"disconnects\", that\n * event listener is removed. This spares us from thrashing\n * the {add,remove}EventListener API (the binding cost of these methods has been\n * known to show up in performance anlyses) as well as potential memory leaks.\n */\nclass ScrollObserver {\n constructor(callback) {\n this[$scrollCallback] = callback;\n }\n static [$notifyInstances]() {\n for (const instance of ScrollObserver[$instances]) {\n instance[$notify]();\n }\n }\n static [(_a$5 = $instances, $activateListener)]() {\n window.addEventListener('scroll', this[$notifyInstances], { passive: true });\n }\n static [$deactivateListener]() {\n window.removeEventListener('scroll', this[$notifyInstances]);\n }\n /**\n * Listen for scroll events. The configured callback (passed to the\n * constructor) will be invoked for subsequent global scroll events.\n */\n observe() {\n if (ScrollObserver[$instances].size === 0) {\n ScrollObserver[$activateListener]();\n }\n ScrollObserver[$instances].add(this);\n }\n /**\n * Stop listening for scroll events.\n */\n disconnect() {\n ScrollObserver[$instances].delete(this);\n if (ScrollObserver[$instances].size === 0) {\n ScrollObserver[$deactivateListener]();\n }\n }\n [$notify]() {\n this[$scrollCallback]();\n }\n ;\n}\nScrollObserver[_a$5] = new Set();\nconst $computeStyleCallback = Symbol('computeStyleCallback');\nconst $astWalker = Symbol('astWalker');\nconst $dependencies = Symbol('dependencies');\nconst $onScroll = Symbol('onScroll');\n/**\n * The StyleEffector is configured with a callback that will be invoked at the\n * optimal time that some array of CSS expression ASTs ought to be evaluated.\n *\n * For example, our CSS-like expression syntax supports usage of the env()\n * function to incorporate the current top-level scroll position into a CSS\n * expression: env(window-scroll-y).\n *\n * This \"environment variable\" will change dynamically as the user scrolls the\n * page. If an AST contains such a usage of env(), we would have to evaluate the\n * AST on every frame in order to be sure that the computed style stays up to\n * date.\n *\n * The StyleEffector spares us from evaluating the expressions on every frame by\n * correlating specific parts of an AST with observers of the external effects\n * that they refer to (if any). So, if the AST contains env(window-scroll-y),\n * the StyleEffector manages the lifetime of a global scroll event listener and\n * notifies the user at the optimal time to evaluate the computed style.\n */\nclass StyleEffector {\n constructor(callback) {\n this[_b$4] = {};\n this[_c$1] = new ASTWalker(['function']);\n this[_d] = () => {\n this[$computeStyleCallback]({ relatedState: 'window-scroll' });\n };\n this[$computeStyleCallback] = callback;\n }\n /**\n * Sets the expressions that govern when the StyleEffector callback will be\n * invoked.\n */\n observeEffectsFor(ast) {\n const newDependencies = {};\n const oldDependencies = this[$dependencies];\n this[$astWalker].walk(ast, functionNode => {\n const { name } = functionNode;\n const firstArgument = functionNode.arguments[0];\n const firstTerm = firstArgument.terms[0];\n if (name.value !== 'env' || firstTerm == null ||\n firstTerm.type !== 'ident') {\n return;\n }\n switch (firstTerm.value) {\n case 'window-scroll-y':\n if (newDependencies['window-scroll'] == null) {\n const observer = 'window-scroll' in oldDependencies ?\n oldDependencies['window-scroll'] :\n new ScrollObserver(this[$onScroll]);\n observer.observe();\n delete oldDependencies['window-scroll'];\n newDependencies['window-scroll'] = observer;\n }\n break;\n }\n });\n for (const environmentState in oldDependencies) {\n const observer = oldDependencies[environmentState];\n observer.disconnect();\n }\n this[$dependencies] = newDependencies;\n }\n /**\n * Disposes of the StyleEffector by disconnecting all observers of external\n * effects.\n */\n dispose() {\n for (const environmentState in this[$dependencies]) {\n const observer = this[$dependencies][environmentState];\n observer.disconnect();\n }\n }\n}\n_b$4 = $dependencies, _c$1 = $astWalker, _d = $onScroll;\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The @style decorator is responsible for coordinating the conversion of a\n * CSS-like string property value into numbers that can be applied to\n * lower-level constructs. It also can optionally manage the lifecycle of a\n * StyleEffector which allows automatic updates for styles that use env() or\n * var() functions.\n *\n * The decorator is configured with Intrinsics and the property key for a\n * method that handles updates. The named update handler is invoked with the\n * result of parsing and evaluating the raw property string value. The format of\n * the evaluated result is derived from the basis of the configured Intrinsics,\n * and is always an array of numbers of fixed length.\n *\n * NOTE: This decorator depends on the property updating mechanism defined by\n * UpdatingElement as exported by the lit-element module. That means it *must*\n * be used in conjunction with the @property decorator, or equivalent\n * JavaScript.\n *\n * Supported configurations are:\n *\n * - `intrinsics`: An Intrinsics struct that describes how to interpret a\n * serialized style attribute. For more detail on intrinsics see\n * ./styles/evaluators.ts\n * - `updateHandler`: A string or Symbol that is the key of a method to be\n * invoked with the result of parsing and evaluating a serialized style string.\n * - `observeEffects`: Optional, if set to true then styles that use env() will\n * cause their update handlers to be invoked every time the corresponding\n * environment variable changes (even if the style attribute itself remains\n * static).\n */\nconst style = (config) => {\n const observeEffects = config.observeEffects || false;\n const getIntrinsics = config.intrinsics instanceof Function ?\n config.intrinsics :\n (() => config.intrinsics);\n return (proto, propertyName) => {\n const originalUpdated = proto.updated;\n const originalConnectedCallback = proto.connectedCallback;\n const originalDisconnectedCallback = proto.disconnectedCallback;\n const $styleEffector = Symbol(`${propertyName}StyleEffector`);\n const $styleEvaluator = Symbol(`${propertyName}StyleEvaluator`);\n const $updateEvaluator = Symbol(`${propertyName}UpdateEvaluator`);\n const $evaluateAndSync = Symbol(`${propertyName}EvaluateAndSync`);\n Object.defineProperties(proto, {\n [$styleEffector]: { value: null, writable: true },\n [$styleEvaluator]: { value: null, writable: true },\n [$updateEvaluator]: {\n value: function () {\n const ast = parseExpressions(this[propertyName]);\n this[$styleEvaluator] =\n new StyleEvaluator(ast, getIntrinsics(this));\n if (this[$styleEffector] == null && observeEffects) {\n this[$styleEffector] =\n new StyleEffector(() => this[$evaluateAndSync]());\n }\n if (this[$styleEffector] != null) {\n this[$styleEffector].observeEffectsFor(ast);\n }\n }\n },\n [$evaluateAndSync]: {\n value: function () {\n if (this[$styleEvaluator] == null) {\n return;\n }\n const result = this[$styleEvaluator].evaluate();\n // @see https://github.com/microsoft/TypeScript/pull/30769\n // @see https://github.com/Microsoft/TypeScript/issues/1863\n this[config.updateHandler](result);\n }\n },\n updated: {\n value: function (changedProperties) {\n // Always invoke updates to styles first. This gives a class that\n // uses this decorator the opportunity to override the effect, or\n // respond to it, in its own implementation of `updated`.\n if (changedProperties.has(propertyName)) {\n this[$updateEvaluator]();\n this[$evaluateAndSync]();\n }\n originalUpdated.call(this, changedProperties);\n }\n },\n connectedCallback: {\n value: function () {\n originalConnectedCallback.call(this);\n this.requestUpdate(propertyName, this[propertyName]);\n }\n },\n disconnectedCallback: {\n value: function () {\n originalDisconnectedCallback.call(this);\n if (this[$styleEffector] != null) {\n this[$styleEffector].dispose();\n this[$styleEffector] = null;\n }\n }\n }\n });\n };\n};\n\n/* @license\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_OPTIONS = Object.freeze({\n minimumRadius: 0,\n maximumRadius: Infinity,\n minimumPolarAngle: Math.PI / 8,\n maximumPolarAngle: Math.PI - Math.PI / 8,\n minimumAzimuthalAngle: -Infinity,\n maximumAzimuthalAngle: Infinity,\n minimumFieldOfView: 10,\n maximumFieldOfView: 45,\n interactionPolicy: 'always-allow',\n touchAction: 'pan-y'\n});\n// Constants\nconst TOUCH_EVENT_RE = /^touch(start|end|move)$/;\nconst KEYBOARD_ORBIT_INCREMENT = Math.PI / 8;\nconst ZOOM_SENSITIVITY = 0.04;\nconst KeyCode = {\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40\n};\nconst ChangeSource = {\n USER_INTERACTION: 'user-interaction',\n NONE: 'none'\n};\n/**\n * SmoothControls is a Three.js helper for adding delightful pointer and\n * keyboard-based input to a staged Three.js scene. Its API is very similar to\n * OrbitControls, but it offers more opinionated (subjectively more delightful)\n * defaults, easy extensibility and subjectively better out-of-the-box keyboard\n * support.\n *\n * One important change compared to OrbitControls is that the `update` method\n * of SmoothControls must be invoked on every frame, otherwise the controls\n * will not have an effect.\n *\n * Another notable difference compared to OrbitControls is that SmoothControls\n * does not currently support panning (but probably will in a future revision).\n *\n * Like OrbitControls, SmoothControls assumes that the orientation of the camera\n * has been set in terms of position, rotation and scale, so it is important to\n * ensure that the camera's matrixWorld is in sync before using SmoothControls.\n */\nclass SmoothControls extends EventDispatcher {\n constructor(camera, element) {\n super();\n this.camera = camera;\n this.element = element;\n this.sensitivity = 1;\n this._interactionEnabled = false;\n this._disableZoom = false;\n this.isUserChange = false;\n this.isUserPointing = false;\n // Internal orbital position state\n this.spherical = new Spherical();\n this.goalSpherical = new Spherical();\n this.thetaDamper = new Damper();\n this.phiDamper = new Damper();\n this.radiusDamper = new Damper();\n this.logFov = Math.log(DEFAULT_OPTIONS.maximumFieldOfView);\n this.goalLogFov = this.logFov;\n this.fovDamper = new Damper();\n // Pointer state\n this.pointerIsDown = false;\n this.lastPointerPosition = {\n clientX: 0,\n clientY: 0,\n };\n this.touchMode = 'rotate';\n this.touchDecided = false;\n this.onPointerMove = (event) => {\n if (!this.pointerIsDown || !this.canInteract) {\n return;\n }\n // NOTE(cdata): We test event.type as some browsers do not have a global\n // TouchEvent contructor.\n if (TOUCH_EVENT_RE.test(event.type)) {\n const { touches } = event;\n switch (this.touchMode) {\n case 'zoom':\n if (this.lastTouches.length > 1 && touches.length > 1) {\n const lastTouchDistance = this.twoTouchDistance(this.lastTouches[0], this.lastTouches[1]);\n const touchDistance = this.twoTouchDistance(touches[0], touches[1]);\n const deltaZoom = ZOOM_SENSITIVITY * (lastTouchDistance - touchDistance) / 10.0;\n this.userAdjustOrbit(0, 0, deltaZoom);\n }\n break;\n case 'rotate':\n const { touchAction } = this._options;\n if (!this.touchDecided && touchAction !== 'none') {\n this.touchDecided = true;\n const { clientX, clientY } = touches[0];\n const dx = Math.abs(clientX - this.lastPointerPosition.clientX);\n const dy = Math.abs(clientY - this.lastPointerPosition.clientY);\n // If motion is mostly vertical, assume scrolling is the intent.\n if ((touchAction === 'pan-y' && dy > dx) ||\n (touchAction === 'pan-x' && dx > dy)) {\n this.touchMode = 'scroll';\n return;\n }\n }\n this.handleSinglePointerMove(touches[0]);\n break;\n case 'scroll':\n return;\n }\n this.lastTouches = touches;\n }\n else {\n this.handleSinglePointerMove(event);\n }\n if (event.cancelable) {\n event.preventDefault();\n }\n };\n this.onPointerDown = (event) => {\n this.pointerIsDown = true;\n this.isUserPointing = false;\n if (TOUCH_EVENT_RE.test(event.type)) {\n const { touches } = event;\n this.touchDecided = false;\n switch (touches.length) {\n default:\n case 1:\n this.touchMode = 'rotate';\n this.handleSinglePointerDown(touches[0]);\n break;\n case 2:\n this.touchMode = this._disableZoom ? 'scroll' : 'zoom';\n break;\n }\n this.lastTouches = touches;\n }\n else {\n this.handleSinglePointerDown(event);\n }\n };\n this.onPointerUp = (_event) => {\n this.element.style.cursor = 'grab';\n this.pointerIsDown = false;\n if (this.isUserPointing) {\n this.dispatchEvent({ type: 'pointer-change-end', pointer: Object.assign({}, this.lastPointerPosition) });\n }\n };\n this.onWheel = (event) => {\n if (!this.canInteract) {\n return;\n }\n const deltaZoom = event.deltaY *\n (event.deltaMode == 1 ? 18 : 1) * ZOOM_SENSITIVITY / 30;\n this.userAdjustOrbit(0, 0, deltaZoom);\n if (event.cancelable) {\n event.preventDefault();\n }\n };\n this.onKeyDown = (event) => {\n // We track if the key is actually one we respond to, so as not to\n // accidentally clober unrelated key inputs when the has\n // focus.\n let relevantKey = false;\n switch (event.keyCode) {\n case KeyCode.PAGE_UP:\n relevantKey = true;\n this.userAdjustOrbit(0, 0, ZOOM_SENSITIVITY);\n break;\n case KeyCode.PAGE_DOWN:\n relevantKey = true;\n this.userAdjustOrbit(0, 0, -1 * ZOOM_SENSITIVITY);\n break;\n case KeyCode.UP:\n relevantKey = true;\n this.userAdjustOrbit(0, -KEYBOARD_ORBIT_INCREMENT, 0);\n break;\n case KeyCode.DOWN:\n relevantKey = true;\n this.userAdjustOrbit(0, KEYBOARD_ORBIT_INCREMENT, 0);\n break;\n case KeyCode.LEFT:\n relevantKey = true;\n this.userAdjustOrbit(-KEYBOARD_ORBIT_INCREMENT, 0, 0);\n break;\n case KeyCode.RIGHT:\n relevantKey = true;\n this.userAdjustOrbit(KEYBOARD_ORBIT_INCREMENT, 0, 0);\n break;\n }\n if (relevantKey && event.cancelable) {\n event.preventDefault();\n }\n };\n this._options = Object.assign({}, DEFAULT_OPTIONS);\n this.setOrbit(0, Math.PI / 2, 1);\n this.setFieldOfView(100);\n this.jumpToGoal();\n }\n get interactionEnabled() {\n return this._interactionEnabled;\n }\n enableInteraction() {\n if (this._interactionEnabled === false) {\n const { element } = this;\n element.addEventListener('mousemove', this.onPointerMove);\n element.addEventListener('mousedown', this.onPointerDown);\n if (!this._disableZoom) {\n element.addEventListener('wheel', this.onWheel);\n }\n element.addEventListener('keydown', this.onKeyDown);\n element.addEventListener('touchstart', this.onPointerDown, { passive: true });\n element.addEventListener('touchmove', this.onPointerMove);\n self.addEventListener('mouseup', this.onPointerUp);\n self.addEventListener('touchend', this.onPointerUp);\n this.element.style.cursor = 'grab';\n this._interactionEnabled = true;\n }\n }\n disableInteraction() {\n if (this._interactionEnabled === true) {\n const { element } = this;\n element.removeEventListener('mousemove', this.onPointerMove);\n element.removeEventListener('mousedown', this.onPointerDown);\n if (!this._disableZoom) {\n element.removeEventListener('wheel', this.onWheel);\n }\n element.removeEventListener('keydown', this.onKeyDown);\n element.removeEventListener('touchstart', this.onPointerDown);\n element.removeEventListener('touchmove', this.onPointerMove);\n self.removeEventListener('mouseup', this.onPointerUp);\n self.removeEventListener('touchend', this.onPointerUp);\n element.style.cursor = '';\n this._interactionEnabled = false;\n }\n }\n /**\n * The options that are currently configured for the controls instance.\n */\n get options() {\n return this._options;\n }\n set disableZoom(disable) {\n if (this._disableZoom != disable) {\n this._disableZoom = disable;\n if (disable === true) {\n this.element.removeEventListener('wheel', this.onWheel);\n }\n else {\n this.element.addEventListener('wheel', this.onWheel);\n }\n }\n }\n /**\n * Copy the spherical values that represent the current camera orbital\n * position relative to the configured target into a provided Spherical\n * instance. If no Spherical is provided, a new Spherical will be allocated\n * to copy the values into. The Spherical that values are copied into is\n * returned.\n */\n getCameraSpherical(target = new Spherical()) {\n return target.copy(this.spherical);\n }\n /**\n * Returns the camera's current vertical field of view in degrees.\n */\n getFieldOfView() {\n return this.camera.fov;\n }\n /**\n * Configure the _options of the controls. Configured _options will be\n * merged with whatever _options have already been configured for this\n * controls instance.\n */\n applyOptions(_options) {\n Object.assign(this._options, _options);\n // Re-evaluates clamping based on potentially new values for min/max\n // polar, azimuth and radius:\n this.setOrbit();\n this.setFieldOfView(Math.exp(this.goalLogFov));\n }\n /**\n * Sets the near and far planes of the camera.\n */\n updateNearFar(nearPlane, farPlane) {\n this.camera.near = Math.max(nearPlane, farPlane / 1000);\n this.camera.far = farPlane;\n this.camera.updateProjectionMatrix();\n }\n /**\n * Sets the aspect ratio of the camera\n */\n updateAspect(aspect) {\n this.camera.aspect = aspect;\n this.camera.updateProjectionMatrix();\n }\n /**\n * Set the absolute orbital goal of the camera. The change will be\n * applied over a number of frames depending on configured acceleration and\n * dampening _options.\n *\n * Returns true if invoking the method will result in the camera changing\n * position and/or rotation, otherwise false.\n */\n setOrbit(goalTheta = this.goalSpherical.theta, goalPhi = this.goalSpherical.phi, goalRadius = this.goalSpherical.radius) {\n const { minimumAzimuthalAngle, maximumAzimuthalAngle, minimumPolarAngle, maximumPolarAngle, minimumRadius, maximumRadius } = this._options;\n const { theta, phi, radius } = this.goalSpherical;\n const nextTheta = clamp(goalTheta, minimumAzimuthalAngle, maximumAzimuthalAngle);\n if (!isFinite(minimumAzimuthalAngle) &&\n !isFinite(maximumAzimuthalAngle)) {\n this.spherical.theta =\n this.wrapAngle(this.spherical.theta - nextTheta) + nextTheta;\n }\n const nextPhi = clamp(goalPhi, minimumPolarAngle, maximumPolarAngle);\n const nextRadius = clamp(goalRadius, minimumRadius, maximumRadius);\n if (nextTheta === theta && nextPhi === phi && nextRadius === radius) {\n return false;\n }\n this.goalSpherical.theta = nextTheta;\n this.goalSpherical.phi = nextPhi;\n this.goalSpherical.radius = nextRadius;\n this.goalSpherical.makeSafe();\n this.isUserChange = false;\n return true;\n }\n /**\n * Subset of setOrbit() above, which only sets the camera's radius.\n */\n setRadius(radius) {\n this.goalSpherical.radius = radius;\n this.setOrbit();\n }\n /**\n * Sets the goal field of view for the camera\n */\n setFieldOfView(fov) {\n const { minimumFieldOfView, maximumFieldOfView } = this._options;\n fov = clamp(fov, minimumFieldOfView, maximumFieldOfView);\n this.goalLogFov = Math.log(fov);\n }\n /**\n * Sets the smoothing decay time.\n */\n setDamperDecayTime(decayMilliseconds) {\n this.thetaDamper.setDecayTime(decayMilliseconds);\n this.phiDamper.setDecayTime(decayMilliseconds);\n this.radiusDamper.setDecayTime(decayMilliseconds);\n this.fovDamper.setDecayTime(decayMilliseconds);\n }\n /**\n * Adjust the orbital position of the camera relative to its current orbital\n * position. Does not let the theta goal get more than pi ahead of the current\n * theta, which ensures interpolation continues in the direction of the delta.\n * The deltaZoom parameter adjusts both the field of view and the orbit radius\n * such that they progress across their allowed ranges in sync.\n */\n adjustOrbit(deltaTheta, deltaPhi, deltaZoom) {\n const { theta, phi, radius } = this.goalSpherical;\n const { minimumRadius, maximumRadius, minimumFieldOfView, maximumFieldOfView } = this._options;\n const dTheta = this.spherical.theta - theta;\n const dThetaLimit = Math.PI - 0.001;\n const goalTheta = theta - clamp(deltaTheta, -dThetaLimit - dTheta, dThetaLimit - dTheta);\n const goalPhi = phi - deltaPhi;\n const deltaRatio = deltaZoom === 0 ?\n 0 :\n deltaZoom > 0 ? (maximumRadius - radius) /\n (Math.log(maximumFieldOfView) - this.goalLogFov) :\n (radius - minimumRadius) /\n (this.goalLogFov - Math.log(minimumFieldOfView));\n const goalRadius = radius +\n deltaZoom *\n Math.min(isFinite(deltaRatio) ? deltaRatio : Infinity, maximumRadius - minimumRadius);\n this.setOrbit(goalTheta, goalPhi, goalRadius);\n if (deltaZoom !== 0) {\n const goalLogFov = this.goalLogFov + deltaZoom;\n this.setFieldOfView(Math.exp(goalLogFov));\n }\n }\n /**\n * Move the camera instantly instead of accelerating toward the goal\n * parameters.\n */\n jumpToGoal() {\n this.update(0, SETTLING_TIME);\n }\n /**\n * Update controls. In most cases, this will result in the camera\n * interpolating its position and rotation until it lines up with the\n * designated goal orbital position.\n *\n * Time and delta are measured in milliseconds.\n */\n update(_time, delta) {\n if (this.isStationary()) {\n return;\n }\n const { maximumPolarAngle, maximumRadius } = this._options;\n const dTheta = this.spherical.theta - this.goalSpherical.theta;\n if (Math.abs(dTheta) > Math.PI &&\n !isFinite(this._options.minimumAzimuthalAngle) &&\n !isFinite(this._options.maximumAzimuthalAngle)) {\n this.spherical.theta -= Math.sign(dTheta) * 2 * Math.PI;\n }\n this.spherical.theta = this.thetaDamper.update(this.spherical.theta, this.goalSpherical.theta, delta, Math.PI);\n this.spherical.phi = this.phiDamper.update(this.spherical.phi, this.goalSpherical.phi, delta, maximumPolarAngle);\n this.spherical.radius = this.radiusDamper.update(this.spherical.radius, this.goalSpherical.radius, delta, maximumRadius);\n this.logFov = this.fovDamper.update(this.logFov, this.goalLogFov, delta, 1);\n this.moveCamera();\n }\n isStationary() {\n return this.goalSpherical.theta === this.spherical.theta &&\n this.goalSpherical.phi === this.spherical.phi &&\n this.goalSpherical.radius === this.spherical.radius &&\n this.goalLogFov === this.logFov;\n }\n moveCamera() {\n // Derive the new camera position from the updated spherical:\n this.spherical.makeSafe();\n this.camera.position.setFromSpherical(this.spherical);\n this.camera.setRotationFromEuler(new Euler(this.spherical.phi - Math.PI / 2, this.spherical.theta, 0, 'YXZ'));\n if (this.camera.fov !== Math.exp(this.logFov)) {\n this.camera.fov = Math.exp(this.logFov);\n this.camera.updateProjectionMatrix();\n }\n const source = this.isUserChange ? ChangeSource.USER_INTERACTION : ChangeSource.NONE;\n this.dispatchEvent({ type: 'change', source });\n }\n get canInteract() {\n if (this._options.interactionPolicy == 'allow-when-focused') {\n const rootNode = this.element.getRootNode();\n return rootNode.activeElement === this.element;\n }\n return this._options.interactionPolicy === 'always-allow';\n }\n userAdjustOrbit(deltaTheta, deltaPhi, deltaZoom) {\n this.adjustOrbit(deltaTheta * this.sensitivity, deltaPhi * this.sensitivity, deltaZoom);\n this.isUserChange = true;\n // Always make sure that an initial event is triggered in case there is\n // contention between user interaction and imperative changes. This initial\n // event will give external observers that chance to observe that\n // interaction occurred at all:\n this.dispatchEvent({ type: 'change', source: ChangeSource.USER_INTERACTION });\n }\n // Wraps to bewteen -pi and pi\n wrapAngle(radians) {\n const normalized = (radians + Math.PI) / (2 * Math.PI);\n const wrapped = normalized - Math.floor(normalized);\n return wrapped * 2 * Math.PI - Math.PI;\n }\n pixelLengthToSphericalAngle(pixelLength) {\n return 2 * Math.PI * pixelLength / this.element.clientHeight;\n }\n twoTouchDistance(touchOne, touchTwo) {\n const { clientX: xOne, clientY: yOne } = touchOne;\n const { clientX: xTwo, clientY: yTwo } = touchTwo;\n const xDelta = xTwo - xOne;\n const yDelta = yTwo - yOne;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta);\n }\n handleSinglePointerMove(pointer) {\n const { clientX, clientY } = pointer;\n const deltaTheta = this.pixelLengthToSphericalAngle(clientX - this.lastPointerPosition.clientX);\n const deltaPhi = this.pixelLengthToSphericalAngle(clientY - this.lastPointerPosition.clientY);\n this.lastPointerPosition.clientX = clientX;\n this.lastPointerPosition.clientY = clientY;\n if (this.isUserPointing === false) {\n this.isUserPointing = true;\n this.dispatchEvent({ type: 'pointer-change-start', pointer: Object.assign({}, pointer) });\n }\n this.userAdjustOrbit(deltaTheta, deltaPhi, 0);\n }\n handleSinglePointerDown(pointer) {\n this.lastPointerPosition.clientX = pointer.clientX;\n this.lastPointerPosition.clientY = pointer.clientY;\n this.element.style.cursor = 'grabbing';\n }\n}\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Adapted from https://gist.github.com/gre/1650294\nconst easeInOutQuad = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n/**\n * Creates a TimingFunction that uses a given ease to interpolate between\n * two configured number values.\n */\nconst interpolate = (start, end, ease = easeInOutQuad) => (time) => start + (end - start) * ease(time);\n/**\n * Creates a TimingFunction that interpolates through a weighted list\n * of other TimingFunctions (\"tracks\"). Tracks are interpolated in order, and\n * allocated a percentage of the total time based on their relative weight.\n */\nconst sequence = (tracks, weights) => {\n const totalWeight = weights.reduce((total, weight) => total + weight, 0);\n const ratios = weights.map(weight => weight / totalWeight);\n return (time) => {\n let start = 0;\n let ratio = Infinity;\n let track = () => 0;\n for (let i = 0; i < ratios.length; ++i) {\n ratio = ratios[i];\n track = tracks[i];\n if (time <= (start + ratio)) {\n break;\n }\n start += ratio;\n }\n return track((time - start) / ratio);\n };\n};\n/**\n * Creates a \"timeline\" TimingFunction out of an initial value and a series of\n * Keyframes. The timeline function accepts value from 0-1 and returns the\n * current value based on keyframe interpolation across the total number of\n * frames. Frames are only used to indicate the relative length of each keyframe\n * transition, so interpolated values will be computed for fractional frames.\n */\nconst timeline = (initialValue, keyframes) => {\n const tracks = [];\n const weights = [];\n let lastValue = initialValue;\n for (let i = 0; i < keyframes.length; ++i) {\n const keyframe = keyframes[i];\n const { value, frames } = keyframe;\n const ease = keyframe.ease || easeInOutQuad;\n const track = interpolate(lastValue, value, ease);\n tracks.push(track);\n weights.push(frames);\n lastValue = value;\n }\n return sequence(tracks, weights);\n};\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __decorate$4 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof undefined === \"function\") r = undefined(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// NOTE(cdata): The following \"animation\" timing functions are deliberately\n// being used in favor of CSS animations. In Safari 12.1 and 13, CSS animations\n// would cause the interaction prompt to glitch unexpectedly\n// @see https://github.com/google/model-viewer/issues/839\nconst PROMPT_ANIMATION_TIME = 5000;\n// For timing purposes, a \"frame\" is a timing agnostic relative unit of time\n// and a \"value\" is a target value for the keyframe.\nconst wiggle = timeline(0, [\n { frames: 5, value: -1 },\n { frames: 1, value: -1 },\n { frames: 8, value: 1 },\n { frames: 1, value: 1 },\n { frames: 5, value: 0 },\n { frames: 18, value: 0 }\n]);\nconst fade = timeline(0, [\n { frames: 1, value: 1 },\n { frames: 5, value: 1 },\n { frames: 1, value: 0 },\n { frames: 6, value: 0 }\n]);\nconst DEFAULT_CAMERA_ORBIT = '0deg 75deg 105%';\nconst DEFAULT_CAMERA_TARGET = 'auto auto auto';\nconst DEFAULT_FIELD_OF_VIEW = 'auto';\nconst MINIMUM_RADIUS_RATIO = 1.1 * SAFE_RADIUS_RATIO;\nconst AZIMUTHAL_QUADRANT_LABELS = ['front', 'right', 'back', 'left'];\nconst POLAR_TRIENT_LABELS = ['upper-', '', 'lower-'];\nconst DEFAULT_INTERACTION_PROMPT_THRESHOLD = 3000;\nconst INTERACTION_PROMPT = 'Use mouse, touch or arrow keys to control the camera!';\nconst InteractionPromptStrategy = {\n AUTO: 'auto',\n WHEN_FOCUSED: 'when-focused',\n NONE: 'none'\n};\nconst InteractionPromptStyle = {\n BASIC: 'basic',\n WIGGLE: 'wiggle'\n};\nconst InteractionPolicy = {\n ALWAYS_ALLOW: 'always-allow',\n WHEN_FOCUSED: 'allow-when-focused'\n};\nconst TouchAction = {\n PAN_Y: 'pan-y',\n PAN_X: 'pan-x',\n NONE: 'none'\n};\nconst fieldOfViewIntrinsics = (element) => {\n return {\n basis: [numberNode(element[$zoomAdjustedFieldOfView] * Math.PI / 180, 'rad')],\n keywords: { auto: [null] }\n };\n};\nconst minFieldOfViewIntrinsics = {\n basis: [degreesToRadians(numberNode(25, 'deg'))],\n keywords: { auto: [null] }\n};\nconst maxFieldOfViewIntrinsics = (element) => {\n const scene = element[$scene];\n return {\n basis: [degreesToRadians(numberNode(45, 'deg'))],\n keywords: { auto: [numberNode(scene.framedFieldOfView, 'deg')] }\n };\n};\nconst cameraOrbitIntrinsics = (() => {\n const defaultTerms = parseExpressions(DEFAULT_CAMERA_ORBIT)[0]\n .terms;\n const theta = normalizeUnit(defaultTerms[0]);\n const phi = normalizeUnit(defaultTerms[1]);\n return (element) => {\n const radius = element[$scene].idealCameraDistance;\n return {\n basis: [theta, phi, numberNode(radius, 'm')],\n keywords: { auto: [null, null, numberNode(105, '%')] }\n };\n };\n})();\nconst minCameraOrbitIntrinsics = (element) => {\n const radius = MINIMUM_RADIUS_RATIO * element[$scene].idealCameraDistance;\n return {\n basis: [\n numberNode(-Infinity, 'rad'),\n numberNode(Math.PI / 8, 'rad'),\n numberNode(radius, 'm')\n ],\n keywords: { auto: [null, null, null] }\n };\n};\nconst maxCameraOrbitIntrinsics = (element) => {\n const orbitIntrinsics = cameraOrbitIntrinsics(element);\n const evaluator = new StyleEvaluator([], orbitIntrinsics);\n const defaultRadius = evaluator.evaluate()[2];\n return {\n basis: [\n numberNode(Infinity, 'rad'),\n numberNode(Math.PI - Math.PI / 8, 'rad'),\n numberNode(defaultRadius, 'm')\n ],\n keywords: { auto: [null, null, null] }\n };\n};\nconst cameraTargetIntrinsics = (element) => {\n const center = element[$scene].boundingBox.getCenter(new Vector3());\n return {\n basis: [\n numberNode(center.x, 'm'),\n numberNode(center.y, 'm'),\n numberNode(center.z, 'm')\n ],\n keywords: { auto: [null, null, null] }\n };\n};\nconst HALF_PI = Math.PI / 2.0;\nconst THIRD_PI = Math.PI / 3.0;\nconst QUARTER_PI = HALF_PI / 2.0;\nconst TAU = 2.0 * Math.PI;\nconst $controls = Symbol('controls');\nconst $promptElement = Symbol('promptElement');\nconst $promptAnimatedContainer = Symbol('promptAnimatedContainer');\nconst $deferInteractionPrompt = Symbol('deferInteractionPrompt');\nconst $updateAria = Symbol('updateAria');\nconst $updateCameraForRadius = Symbol('updateCameraForRadius');\nconst $onBlur = Symbol('onBlur');\nconst $onFocus = Symbol('onFocus');\nconst $onChange = Symbol('onChange');\nconst $onPointerChange = Symbol('onPointerChange');\nconst $waitingToPromptUser = Symbol('waitingToPromptUser');\nconst $userHasInteracted = Symbol('userHasInteracted');\nconst $promptElementVisibleTime = Symbol('promptElementVisibleTime');\nconst $lastPromptOffset = Symbol('lastPromptOffset');\nconst $focusedTime = Symbol('focusedTime');\nconst $zoomAdjustedFieldOfView = Symbol('zoomAdjustedFieldOfView');\nconst $lastSpherical = Symbol('lastSpherical');\nconst $jumpCamera = Symbol('jumpCamera');\nconst $initialized = Symbol('initialized');\nconst $maintainThetaPhi = Symbol('maintainThetaPhi');\nconst $syncCameraOrbit = Symbol('syncCameraOrbit');\nconst $syncFieldOfView = Symbol('syncFieldOfView');\nconst $syncCameraTarget = Symbol('syncCameraTarget');\nconst $syncMinCameraOrbit = Symbol('syncMinCameraOrbit');\nconst $syncMaxCameraOrbit = Symbol('syncMaxCameraOrbit');\nconst $syncMinFieldOfView = Symbol('syncMinFieldOfView');\nconst $syncMaxFieldOfView = Symbol('syncMaxFieldOfView');\nconst ControlsMixin = (ModelViewerElement) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;\n class ControlsModelViewerElement extends ModelViewerElement {\n constructor() {\n super(...arguments);\n this.cameraControls = false;\n this.cameraOrbit = DEFAULT_CAMERA_ORBIT;\n this.cameraTarget = DEFAULT_CAMERA_TARGET;\n this.fieldOfView = DEFAULT_FIELD_OF_VIEW;\n this.minCameraOrbit = 'auto';\n this.maxCameraOrbit = 'auto';\n this.minFieldOfView = 'auto';\n this.maxFieldOfView = 'auto';\n this.interactionPromptThreshold = DEFAULT_INTERACTION_PROMPT_THRESHOLD;\n this.interactionPromptStyle = InteractionPromptStyle.WIGGLE;\n this.interactionPrompt = InteractionPromptStrategy.AUTO;\n this.interactionPolicy = InteractionPolicy.ALWAYS_ALLOW;\n this.orbitSensitivity = 1;\n this.touchAction = TouchAction.PAN_Y;\n this.disableZoom = false;\n this.interpolationDecay = DECAY_MILLISECONDS;\n this.bounds = 'legacy';\n this[_a] = this.shadowRoot.querySelector('.interaction-prompt');\n this[_b] = this.shadowRoot.querySelector('.interaction-prompt > .animated-container');\n this[_c] = Infinity;\n this[_d] = 0;\n this[_e] = Infinity;\n this[_f] = false;\n this[_g] = false;\n this[_h] = new SmoothControls(this[$scene].camera, this[$userInputElement]);\n this[_j] = 0;\n this[_k] = new Spherical();\n this[_l] = false;\n this[_m] = false;\n this[_o] = false;\n this[_p] = () => {\n const input = this[$userInputElement];\n if (!isFinite(this[$focusedTime])) {\n this[$focusedTime] = performance.now();\n }\n // NOTE(cdata): On every re-focus, we switch the aria-label back to\n // the original, non-prompt label if appropriate. If the user has\n // already interacted, they no longer need to hear the prompt.\n // Otherwise, they will hear it again after the idle prompt threshold\n // has been crossed.\n const ariaLabel = this[$ariaLabel];\n if (input.getAttribute('aria-label') !== ariaLabel) {\n input.setAttribute('aria-label', ariaLabel);\n }\n if (this.interactionPrompt === InteractionPromptStrategy.WHEN_FOCUSED &&\n !this[$userHasInteracted]) {\n this[$waitingToPromptUser] = true;\n }\n };\n this[_q] = () => {\n if (this.interactionPrompt !== InteractionPromptStrategy.WHEN_FOCUSED) {\n return;\n }\n this[$waitingToPromptUser] = false;\n this[$promptElement].classList.remove('visible');\n this[$promptElementVisibleTime] = Infinity;\n this[$focusedTime] = Infinity;\n };\n this[_r] = ({ source }) => {\n this[$updateAria]();\n this[$needsRender]();\n if (source === ChangeSource.USER_INTERACTION) {\n this[$userHasInteracted] = true;\n this[$deferInteractionPrompt]();\n }\n this.dispatchEvent(new CustomEvent('camera-change', { detail: { source } }));\n };\n this[_s] = (event) => {\n if (event.type === 'pointer-change-start') {\n this[$container].classList.add('pointer-tumbling');\n }\n else {\n this[$container].classList.remove('pointer-tumbling');\n }\n };\n }\n getCameraOrbit() {\n const { theta, phi, radius } = this[$lastSpherical];\n return {\n theta,\n phi,\n radius,\n toString() {\n return `${this.theta}rad ${this.phi}rad ${this.radius}m`;\n }\n };\n }\n getCameraTarget() {\n return toVector3D(this[$renderer].isPresenting ? this[$renderer].arRenderer.target :\n this[$scene].getTarget());\n }\n getFieldOfView() {\n return this[$controls].getFieldOfView();\n }\n // Provided so user code does not have to parse these from attributes.\n getMinimumFieldOfView() {\n return this[$controls].options.minimumFieldOfView;\n }\n getMaximumFieldOfView() {\n return this[$controls].options.maximumFieldOfView;\n }\n jumpCameraToGoal() {\n this[$jumpCamera] = true;\n this.requestUpdate($jumpCamera, false);\n }\n resetInteractionPrompt() {\n this[$lastPromptOffset] = 0;\n this[$promptElementVisibleTime] = Infinity;\n this[$userHasInteracted] = false;\n this[$waitingToPromptUser] =\n this.interactionPrompt === InteractionPromptStrategy.AUTO &&\n this.cameraControls;\n }\n connectedCallback() {\n super.connectedCallback();\n this[$controls].addEventListener('change', this[$onChange]);\n this[$controls].addEventListener('pointer-change-start', this[$onPointerChange]);\n this[$controls].addEventListener('pointer-change-end', this[$onPointerChange]);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this[$controls].removeEventListener('change', this[$onChange]);\n this[$controls].removeEventListener('pointer-change-start', this[$onPointerChange]);\n this[$controls].removeEventListener('pointer-change-end', this[$onPointerChange]);\n }\n updated(changedProperties) {\n super.updated(changedProperties);\n const controls = this[$controls];\n const input = this[$userInputElement];\n if (changedProperties.has('cameraControls')) {\n if (this.cameraControls) {\n controls.enableInteraction();\n if (this.interactionPrompt === InteractionPromptStrategy.AUTO) {\n this[$waitingToPromptUser] = true;\n }\n input.addEventListener('focus', this[$onFocus]);\n input.addEventListener('blur', this[$onBlur]);\n }\n else {\n input.removeEventListener('focus', this[$onFocus]);\n input.removeEventListener('blur', this[$onBlur]);\n controls.disableInteraction();\n this[$deferInteractionPrompt]();\n }\n }\n if (changedProperties.has('disableZoom')) {\n controls.disableZoom = this.disableZoom;\n }\n if (changedProperties.has('bounds')) {\n this[$scene].tightBounds = this.bounds === 'tight';\n }\n if (changedProperties.has('interactionPrompt') ||\n changedProperties.has('cameraControls') ||\n changedProperties.has('src')) {\n if (this.interactionPrompt === InteractionPromptStrategy.AUTO &&\n this.cameraControls && !this[$userHasInteracted]) {\n this[$waitingToPromptUser] = true;\n }\n else {\n this[$deferInteractionPrompt]();\n }\n }\n if (changedProperties.has('interactionPromptStyle')) {\n this[$promptElement].classList.toggle('wiggle', this.interactionPromptStyle === InteractionPromptStyle.WIGGLE);\n }\n if (changedProperties.has('interactionPolicy')) {\n const interactionPolicy = this.interactionPolicy;\n controls.applyOptions({ interactionPolicy });\n }\n if (changedProperties.has('touchAction')) {\n const touchAction = this.touchAction;\n controls.applyOptions({ touchAction });\n }\n if (changedProperties.has('orbitSensitivity')) {\n controls.sensitivity = this.orbitSensitivity;\n }\n if (changedProperties.has('interpolationDecay')) {\n controls.setDamperDecayTime(this.interpolationDecay);\n this[$scene].setTargetDamperDecayTime(this.interpolationDecay);\n }\n if (this[$jumpCamera] === true) {\n Promise.resolve().then(() => {\n controls.jumpToGoal();\n this[$scene].jumpToGoal();\n this[$jumpCamera] = false;\n });\n }\n }\n async updateFraming() {\n const scene = this[$scene];\n const oldFramedFieldOfView = scene.framedFieldOfView;\n await this.requestUpdate('cameraTarget');\n scene.updateFraming(this.bounds === 'tight' ? scene.getTarget() : undefined);\n scene.frameModel();\n const newFramedFieldOfView = scene.framedFieldOfView;\n const zoom = this[$controls].getFieldOfView() / oldFramedFieldOfView;\n this[$zoomAdjustedFieldOfView] = newFramedFieldOfView * zoom;\n this[$maintainThetaPhi] = true;\n this.requestUpdate('maxFieldOfView');\n this.requestUpdate('fieldOfView');\n this.requestUpdate('minCameraOrbit');\n this.requestUpdate('maxCameraOrbit');\n await this.requestUpdate('cameraOrbit');\n }\n [(_a = $promptElement, _b = $promptAnimatedContainer, _c = $focusedTime, _d = $lastPromptOffset, _e = $promptElementVisibleTime, _f = $userHasInteracted, _g = $waitingToPromptUser, _h = $controls, _j = $zoomAdjustedFieldOfView, _k = $lastSpherical, _l = $jumpCamera, _m = $initialized, _o = $maintainThetaPhi, $syncFieldOfView)](style) {\n this[$controls].setFieldOfView(style[0] * 180 / Math.PI);\n }\n [$syncCameraOrbit](style) {\n if (this[$maintainThetaPhi]) {\n const { theta, phi } = this.getCameraOrbit();\n style[0] = theta;\n style[1] = phi;\n this[$maintainThetaPhi] = false;\n }\n this[$controls].setOrbit(style[0], style[1], style[2]);\n }\n [$syncMinCameraOrbit](style) {\n this[$controls].applyOptions({\n minimumAzimuthalAngle: style[0],\n minimumPolarAngle: style[1],\n minimumRadius: style[2]\n });\n this.jumpCameraToGoal();\n }\n [$syncMaxCameraOrbit](style) {\n this[$controls].applyOptions({\n maximumAzimuthalAngle: style[0],\n maximumPolarAngle: style[1],\n maximumRadius: style[2]\n });\n this[$updateCameraForRadius](style[2]);\n this.jumpCameraToGoal();\n }\n [$syncMinFieldOfView](style) {\n this[$controls].applyOptions({ minimumFieldOfView: style[0] * 180 / Math.PI });\n this.jumpCameraToGoal();\n }\n [$syncMaxFieldOfView](style) {\n this[$controls].applyOptions({ maximumFieldOfView: style[0] * 180 / Math.PI });\n this.jumpCameraToGoal();\n }\n [$syncCameraTarget](style) {\n const [x, y, z] = style;\n this[$scene].setTarget(x, y, z);\n this[$renderer].arRenderer.updateTarget();\n }\n [$tick](time, delta) {\n super[$tick](time, delta);\n if (this[$renderer].isPresenting || !this[$hasTransitioned]()) {\n return;\n }\n const now = performance.now();\n if (this[$waitingToPromptUser]) {\n const thresholdTime = this.interactionPrompt === InteractionPromptStrategy.AUTO ?\n this[$loadedTime] :\n this[$focusedTime];\n if (this.loaded &&\n now > thresholdTime + this.interactionPromptThreshold) {\n this[$userInputElement].setAttribute('aria-label', INTERACTION_PROMPT);\n this[$waitingToPromptUser] = false;\n this[$promptElementVisibleTime] = now;\n this[$promptElement].classList.add('visible');\n }\n }\n if (isFinite(this[$promptElementVisibleTime]) &&\n this.interactionPromptStyle === InteractionPromptStyle.WIGGLE) {\n const scene = this[$scene];\n const animationTime = ((now - this[$promptElementVisibleTime]) / PROMPT_ANIMATION_TIME) %\n 1;\n const offset = wiggle(animationTime);\n const opacity = fade(animationTime);\n this[$promptAnimatedContainer].style.opacity = `${opacity}`;\n if (offset !== this[$lastPromptOffset]) {\n const xOffset = offset * scene.width * 0.05;\n const deltaTheta = (offset - this[$lastPromptOffset]) * Math.PI / 16;\n this[$promptAnimatedContainer].style.transform =\n `translateX(${xOffset}px)`;\n this[$controls].adjustOrbit(deltaTheta, 0, 0);\n this[$lastPromptOffset] = offset;\n }\n }\n this[$controls].update(time, delta);\n this[$scene].updateTarget(delta);\n }\n [$deferInteractionPrompt]() {\n // Effectively cancel the timer waiting for user interaction:\n this[$waitingToPromptUser] = false;\n this[$promptElement].classList.remove('visible');\n this[$promptElementVisibleTime] = Infinity;\n }\n /**\n * Updates the camera's near and far planes to enclose the scene when\n * orbiting at the supplied radius.\n */\n [$updateCameraForRadius](radius) {\n const { idealCameraDistance } = this[$scene];\n const maximumRadius = Math.max(idealCameraDistance, radius);\n const near = 0;\n const far = 2 * maximumRadius;\n this[$controls].updateNearFar(near, far);\n }\n [$updateAria]() {\n // NOTE(cdata): It is possible that we might want to record the\n // last spherical when the label actually changed. Right now, the\n // side-effect the current implementation is that we will only\n // announce the first view change that occurs after the element\n // becomes focused.\n const { theta: lastTheta, phi: lastPhi } = this[$lastSpherical];\n const { theta, phi } = this[$controls].getCameraSpherical(this[$lastSpherical]);\n const rootNode = this.getRootNode();\n // Only change the aria-label if is currently focused:\n if (rootNode != null && rootNode.activeElement === this) {\n const lastAzimuthalQuadrant = (4 + Math.floor(((lastTheta % TAU) + QUARTER_PI) / HALF_PI)) % 4;\n const azimuthalQuadrant = (4 + Math.floor(((theta % TAU) + QUARTER_PI) / HALF_PI)) % 4;\n const lastPolarTrient = Math.floor(lastPhi / THIRD_PI);\n const polarTrient = Math.floor(phi / THIRD_PI);\n if (azimuthalQuadrant !== lastAzimuthalQuadrant ||\n polarTrient !== lastPolarTrient) {\n const azimuthalQuadrantLabel = AZIMUTHAL_QUADRANT_LABELS[azimuthalQuadrant];\n const polarTrientLabel = POLAR_TRIENT_LABELS[polarTrient];\n const ariaLabel = `View from stage ${polarTrientLabel}${azimuthalQuadrantLabel}`;\n this[$userInputElement].setAttribute('aria-label', ariaLabel);\n }\n }\n }\n [$onResize](event) {\n const controls = this[$controls];\n const oldFramedFieldOfView = this[$scene].framedFieldOfView;\n // The super of $onResize will update the scene's framedFieldOfView, so we\n // compare the before and after to calculate the proper zoom.\n super[$onResize](event);\n const newFramedFieldOfView = this[$scene].framedFieldOfView;\n const zoom = controls.getFieldOfView() / oldFramedFieldOfView;\n this[$zoomAdjustedFieldOfView] = newFramedFieldOfView * zoom;\n controls.updateAspect(this[$scene].aspect);\n this.requestUpdate('maxFieldOfView', this.maxFieldOfView);\n this.requestUpdate('fieldOfView', this.fieldOfView);\n this.jumpCameraToGoal();\n }\n [$onModelLoad]() {\n super[$onModelLoad]();\n const { framedFieldOfView } = this[$scene];\n this[$zoomAdjustedFieldOfView] = framedFieldOfView;\n if (this[$initialized]) {\n this[$maintainThetaPhi] = true;\n }\n else {\n this[$initialized] = true;\n }\n this.requestUpdate('maxFieldOfView', this.maxFieldOfView);\n this.requestUpdate('fieldOfView', this.fieldOfView);\n this.requestUpdate('minCameraOrbit', this.minCameraOrbit);\n this.requestUpdate('maxCameraOrbit', this.maxCameraOrbit);\n this.requestUpdate('cameraOrbit', this.cameraOrbit);\n this.requestUpdate('cameraTarget', this.cameraTarget);\n this.jumpCameraToGoal();\n }\n }\n _p = $onFocus, _q = $onBlur, _r = $onChange, _s = $onPointerChange;\n __decorate$4([\n property({ type: Boolean, attribute: 'camera-controls' })\n ], ControlsModelViewerElement.prototype, \"cameraControls\", void 0);\n __decorate$4([\n style({\n intrinsics: cameraOrbitIntrinsics,\n observeEffects: true,\n updateHandler: $syncCameraOrbit\n }),\n property({ type: String, attribute: 'camera-orbit', hasChanged: () => true })\n ], ControlsModelViewerElement.prototype, \"cameraOrbit\", void 0);\n __decorate$4([\n style({\n intrinsics: cameraTargetIntrinsics,\n observeEffects: true,\n updateHandler: $syncCameraTarget\n }),\n property({ type: String, attribute: 'camera-target', hasChanged: () => true })\n ], ControlsModelViewerElement.prototype, \"cameraTarget\", void 0);\n __decorate$4([\n style({\n intrinsics: fieldOfViewIntrinsics,\n observeEffects: true,\n updateHandler: $syncFieldOfView\n }),\n property({ type: String, attribute: 'field-of-view', hasChanged: () => true })\n ], ControlsModelViewerElement.prototype, \"fieldOfView\", void 0);\n __decorate$4([\n style({\n intrinsics: minCameraOrbitIntrinsics,\n updateHandler: $syncMinCameraOrbit\n }),\n property({ type: String, attribute: 'min-camera-orbit', hasChanged: () => true })\n ], ControlsModelViewerElement.prototype, \"minCameraOrbit\", void 0);\n __decorate$4([\n style({\n intrinsics: maxCameraOrbitIntrinsics,\n updateHandler: $syncMaxCameraOrbit\n }),\n property({ type: String, attribute: 'max-camera-orbit', hasChanged: () => true })\n ], ControlsModelViewerElement.prototype, \"maxCameraOrbit\", void 0);\n __decorate$4([\n style({\n intrinsics: minFieldOfViewIntrinsics,\n updateHandler: $syncMinFieldOfView\n }),\n property({ type: String, attribute: 'min-field-of-view', hasChanged: () => true })\n ], ControlsModelViewerElement.prototype, \"minFieldOfView\", void 0);\n __decorate$4([\n style({\n intrinsics: maxFieldOfViewIntrinsics,\n updateHandler: $syncMaxFieldOfView\n }),\n property({ type: String, attribute: 'max-field-of-view', hasChanged: () => true })\n ], ControlsModelViewerElement.prototype, \"maxFieldOfView\", void 0);\n __decorate$4([\n property({ type: Number, attribute: 'interaction-prompt-threshold' })\n ], ControlsModelViewerElement.prototype, \"interactionPromptThreshold\", void 0);\n __decorate$4([\n property({ type: String, attribute: 'interaction-prompt-style' })\n ], ControlsModelViewerElement.prototype, \"interactionPromptStyle\", void 0);\n __decorate$4([\n property({ type: String, attribute: 'interaction-prompt' })\n ], ControlsModelViewerElement.prototype, \"interactionPrompt\", void 0);\n __decorate$4([\n property({ type: String, attribute: 'interaction-policy' })\n ], ControlsModelViewerElement.prototype, \"interactionPolicy\", void 0);\n __decorate$4([\n property({ type: Number, attribute: 'orbit-sensitivity' })\n ], ControlsModelViewerElement.prototype, \"orbitSensitivity\", void 0);\n __decorate$4([\n property({ type: String, attribute: 'touch-action' })\n ], ControlsModelViewerElement.prototype, \"touchAction\", void 0);\n __decorate$4([\n property({ type: Boolean, attribute: 'disable-zoom' })\n ], ControlsModelViewerElement.prototype, \"disableZoom\", void 0);\n __decorate$4([\n property({ type: Number, attribute: 'interpolation-decay' })\n ], ControlsModelViewerElement.prototype, \"interpolationDecay\", void 0);\n __decorate$4([\n property({ type: String, attribute: 'bounds' })\n ], ControlsModelViewerElement.prototype, \"bounds\", void 0);\n return ControlsModelViewerElement;\n};\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __decorate$3 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof undefined === \"function\") r = undefined(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst BASE_OPACITY = 0.1;\nconst DEFAULT_SHADOW_INTENSITY = 0.0;\nconst DEFAULT_SHADOW_SOFTNESS = 1.0;\nconst DEFAULT_EXPOSURE = 1.0;\nconst $currentEnvironmentMap = Symbol('currentEnvironmentMap');\nconst $applyEnvironmentMap = Symbol('applyEnvironmentMap');\nconst $updateEnvironment = Symbol('updateEnvironment');\nconst $cancelEnvironmentUpdate = Symbol('cancelEnvironmentUpdate');\nconst $onPreload = Symbol('onPreload');\nconst EnvironmentMixin = (ModelViewerElement) => {\n var _a, _b, _c;\n class EnvironmentModelViewerElement extends ModelViewerElement {\n constructor() {\n super(...arguments);\n this.environmentImage = null;\n this.skyboxImage = null;\n this.shadowIntensity = DEFAULT_SHADOW_INTENSITY;\n this.shadowSoftness = DEFAULT_SHADOW_SOFTNESS;\n this.exposure = DEFAULT_EXPOSURE;\n this[_a] = null;\n this[_b] = null;\n this[_c] = (event) => {\n if (event.element === this) {\n this[$updateEnvironment]();\n }\n };\n }\n connectedCallback() {\n super.connectedCallback();\n this[$renderer].loader.addEventListener('preload', this[$onPreload]);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this[$renderer].loader.removeEventListener('preload', this[$onPreload]);\n }\n updated(changedProperties) {\n super.updated(changedProperties);\n if (changedProperties.has('shadowIntensity')) {\n this[$scene].setShadowIntensity(this.shadowIntensity * BASE_OPACITY);\n this[$needsRender]();\n }\n if (changedProperties.has('shadowSoftness')) {\n this[$scene].setShadowSoftness(this.shadowSoftness);\n this[$needsRender]();\n }\n if (changedProperties.has('exposure')) {\n this[$scene].exposure = this.exposure;\n this[$needsRender]();\n }\n if ((changedProperties.has('environmentImage') ||\n changedProperties.has('skyboxImage')) &&\n this[$shouldAttemptPreload]()) {\n this[$updateEnvironment]();\n }\n }\n [(_a = $currentEnvironmentMap, _b = $cancelEnvironmentUpdate, _c = $onPreload, $onModelLoad)]() {\n super[$onModelLoad]();\n if (this[$currentEnvironmentMap] != null) {\n this[$applyEnvironmentMap](this[$currentEnvironmentMap]);\n }\n }\n async [$updateEnvironment]() {\n const { skyboxImage, environmentImage } = this;\n if (this[$cancelEnvironmentUpdate] != null) {\n this[$cancelEnvironmentUpdate]();\n this[$cancelEnvironmentUpdate] = null;\n }\n const { textureUtils } = this[$renderer];\n if (textureUtils == null) {\n return;\n }\n try {\n const { environmentMap, skybox } = await new Promise(async (resolve, reject) => {\n const texturesLoad = textureUtils.generateEnvironmentMapAndSkybox(deserializeUrl(skyboxImage), environmentImage, { progressTracker: this[$progressTracker] });\n this[$cancelEnvironmentUpdate] = () => reject(texturesLoad);\n resolve(await texturesLoad);\n });\n const environment = environmentMap.texture;\n if (skybox != null) {\n // When using the same environment and skybox, use the environment as\n // it gives HDR filtering.\n this[$scene].background = skybox.userData.url ===\n environment.userData.url ?\n environment :\n skybox;\n }\n else {\n this[$scene].background = null;\n }\n this[$applyEnvironmentMap](environmentMap.texture);\n this[$scene].dispatchEvent({ type: 'envmap-update' });\n }\n catch (errorOrPromise) {\n if (errorOrPromise instanceof Error) {\n this[$applyEnvironmentMap](null);\n throw errorOrPromise;\n }\n }\n }\n /**\n * Sets the Model to use the provided environment map,\n * or `null` if the Model should remove its' environment map.\n */\n [$applyEnvironmentMap](environmentMap) {\n this[$currentEnvironmentMap] = environmentMap;\n this[$scene].environment = this[$currentEnvironmentMap];\n this.dispatchEvent(new CustomEvent('environment-change'));\n this[$needsRender]();\n }\n }\n __decorate$3([\n property({ type: String, attribute: 'environment-image' })\n ], EnvironmentModelViewerElement.prototype, \"environmentImage\", void 0);\n __decorate$3([\n property({ type: String, attribute: 'skybox-image' })\n ], EnvironmentModelViewerElement.prototype, \"skyboxImage\", void 0);\n __decorate$3([\n property({ type: Number, attribute: 'shadow-intensity' })\n ], EnvironmentModelViewerElement.prototype, \"shadowIntensity\", void 0);\n __decorate$3([\n property({ type: Number, attribute: 'shadow-softness' })\n ], EnvironmentModelViewerElement.prototype, \"shadowSoftness\", void 0);\n __decorate$3([\n property({\n type: Number,\n })\n ], EnvironmentModelViewerElement.prototype, \"exposure\", void 0);\n return EnvironmentModelViewerElement;\n};\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar _a$4, _b$3;\nconst INITIAL_STATUS_ANNOUNCEMENT = 'This page includes one or more 3D models that are loading';\nconst FINISHED_LOADING_ANNOUNCEMENT = 'All 3D models in the page have loaded';\nconst UPDATE_STATUS_DEBOUNCE_MS = 100;\nconst $modelViewerStatusInstance = Symbol('modelViewerStatusInstance');\nconst $updateStatus = Symbol('updateStatus');\n/**\n * The LoadingStatusAnnouncer manages announcements of loading status across\n * all elements in the document at any given time. As new\n * elements are connected to the document, they are registered\n * with a LoadingStatusAnnouncer singleton. As they are disconnected, the are\n * also unregistered. Announcements are made to indicate the following\n * conditions:\n *\n * 1. There are elements that have yet to finish loading\n * 2. All elements in the page have finished attempting to load\n */\nclass LoadingStatusAnnouncer extends EventDispatcher {\n constructor() {\n super();\n /**\n * The \"status\" instance is the instance currently designated\n * to announce the loading status of all elements in the\n * document at any given time. It might change as elements are\n * attached or detached over time.\n */\n this[_a$4] = null;\n this.registeredInstanceStatuses = new Map();\n this.loadingPromises = [];\n /**\n * This element is a node that floats around the document as the status\n * instance changes (see above). It is a singleton that represents the loading\n * status for all elements currently in the page. It has its\n * role attribute set to \"status\", which causes screen readers to announce\n * any changes to its text content.\n *\n * @see https://www.w3.org/TR/wai-aria-1.1/#status\n */\n this.statusElement = document.createElement('p');\n this.statusUpdateInProgress = false;\n this[_b$3] = debounce(() => this.updateStatus(), UPDATE_STATUS_DEBOUNCE_MS);\n const { statusElement } = this;\n const { style } = statusElement;\n statusElement.setAttribute('role', 'status');\n statusElement.classList.add('screen-reader-only');\n style.top = style.left = '0';\n style.pointerEvents = 'none';\n }\n /**\n * Register a element with the announcer. If it is not yet\n * loaded, its loading status will be tracked by the announcer.\n */\n registerInstance(modelViewer) {\n if (this.registeredInstanceStatuses.has(modelViewer)) {\n return;\n }\n let onUnregistered = () => { };\n const loadShouldBeMeasured = modelViewer.loaded === false && !!modelViewer.src;\n const loadAttemptCompletes = new Promise((resolve) => {\n if (!loadShouldBeMeasured) {\n resolve();\n return;\n }\n const resolveHandler = () => {\n resolve();\n modelViewer.removeEventListener('load', resolveHandler);\n modelViewer.removeEventListener('error', resolveHandler);\n };\n modelViewer.addEventListener('load', resolveHandler);\n modelViewer.addEventListener('error', resolveHandler);\n onUnregistered = resolveHandler;\n });\n this.registeredInstanceStatuses.set(modelViewer, { onUnregistered });\n this.loadingPromises.push(loadAttemptCompletes);\n if (this.modelViewerStatusInstance == null) {\n this.modelViewerStatusInstance = modelViewer;\n }\n }\n /**\n * Unregister a element with the announcer. Its loading status\n * will no longer be tracked by the announcer.\n */\n unregisterInstance(modelViewer) {\n if (!this.registeredInstanceStatuses.has(modelViewer)) {\n return;\n }\n const statuses = this.registeredInstanceStatuses;\n const instanceStatus = statuses.get(modelViewer);\n statuses.delete(modelViewer);\n instanceStatus.onUnregistered();\n if (this.modelViewerStatusInstance === modelViewer) {\n this.modelViewerStatusInstance = statuses.size > 0 ?\n getFirstMapKey(statuses) :\n null;\n }\n }\n get modelViewerStatusInstance() {\n return this[$modelViewerStatusInstance];\n }\n set modelViewerStatusInstance(value) {\n const currentInstance = this[$modelViewerStatusInstance];\n if (currentInstance === value) {\n return;\n }\n const { statusElement } = this;\n if (value != null && value.shadowRoot != null) {\n value.shadowRoot.appendChild(statusElement);\n }\n else if (statusElement.parentNode != null) {\n statusElement.parentNode.removeChild(statusElement);\n }\n this[$modelViewerStatusInstance] = value;\n this[$updateStatus]();\n }\n async updateStatus() {\n if (this.statusUpdateInProgress || this.loadingPromises.length === 0) {\n return;\n }\n this.statusElement.textContent = INITIAL_STATUS_ANNOUNCEMENT;\n this.statusUpdateInProgress = true;\n this.dispatchEvent({ type: 'initial-status-announced' });\n while (this.loadingPromises.length) {\n const { loadingPromises } = this;\n this.loadingPromises = [];\n await Promise.all(loadingPromises);\n }\n this.statusElement.textContent = FINISHED_LOADING_ANNOUNCEMENT;\n this.statusUpdateInProgress = false;\n this.dispatchEvent({ type: 'finished-loading-announced' });\n }\n}\n_a$4 = $modelViewerStatusInstance, _b$3 = $updateStatus;\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __decorate$2 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof undefined === \"function\") r = undefined(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst PROGRESS_BAR_UPDATE_THRESHOLD = 100;\nconst PROGRESS_MASK_BASE_OPACITY = 0.2;\nconst DEFAULT_DRACO_DECODER_LOCATION = 'https://www.gstatic.com/draco/versioned/decoders/1.3.6/';\nconst DEFAULT_KTX2_TRANSCODER_LOCATION = 'https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/';\nconst SPACE_KEY = 32;\nconst ENTER_KEY = 13;\nconst RevealStrategy = {\n AUTO: 'auto',\n INTERACTION: 'interaction',\n MANUAL: 'manual'\n};\nconst LoadingStrategy = {\n AUTO: 'auto',\n LAZY: 'lazy',\n EAGER: 'eager'\n};\nconst PosterDismissalSource = {\n INTERACTION: 'interaction'\n};\nconst loadingStatusAnnouncer = new LoadingStatusAnnouncer();\nconst $defaultProgressBarElement = Symbol('defaultProgressBarElement');\nconst $defaultProgressMaskElement = Symbol('defaultProgressMaskElement');\nconst $posterContainerElement = Symbol('posterContainerElement');\nconst $defaultPosterElement = Symbol('defaultPosterElement');\nconst $posterDismissalSource = Symbol('posterDismissalSource');\nconst $hidePoster = Symbol('hidePoster');\nconst $modelIsRevealed = Symbol('modelIsRevealed');\nconst $updateProgressBar = Symbol('updateProgressBar');\nconst $lastReportedProgress = Symbol('lastReportedProgress');\nconst $transitioned = Symbol('transitioned');\nconst $ariaLabelCallToAction = Symbol('ariaLabelCallToAction');\nconst $onClick = Symbol('onClick');\nconst $onKeydown = Symbol('onKeydown');\nconst $onProgress = Symbol('onProgress');\n/**\n * LoadingMixin implements features related to lazy loading, as well as\n * presentation details related to the pre-load / pre-render presentation of a\n * \n *\n * This mixin implements support for models with DRACO-compressed meshes.\n * The DRACO decoder will be loaded on-demand if a glTF that uses the DRACO mesh\n * compression extension is encountered.\n *\n * By default, the DRACO decoder will be loaded from a Google CDN. It is\n * possible to customize where the decoder is loaded from by defining a global\n * configuration option for `` like so:\n *\n * ```html\n * \n * ```\n *\n * Note that the above configuration strategy must be performed *before* the\n * first `` element is created in the browser. The configuration\n * can be done anywhere, but the easiest way to ensure it is done at the right\n * time is to do it in the `` of the HTML document. This is the\n * recommended way to set the location because it is most compatible with\n * scenarios where the `` library is lazily loaded.\n *\n * If you absolutely have to set the DRACO decoder location *after* the first\n * `` element is created, you can do it this way:\n *\n * ```html\n * \n * ```\n *\n * Note that the above configuration approach will not work until *after*\n * `` is defined in the browser. Also note that this configuration\n * *must* be set *before* the first DRACO model is fully loaded.\n *\n * It is recommended that users who intend to take advantage of DRACO mesh\n * compression consider whether or not it is acceptable for their use case to\n * have code side-loaded from a Google CDN. If it is not acceptable, then the\n * location must be customized before loading any DRACO models in order to cause\n * the decoder to be loaded from an alternative, acceptable location.\n */\nconst LoadingMixin = (ModelViewerElement) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n class LoadingModelViewerElement extends ModelViewerElement {\n constructor(...args) {\n super(...args);\n /**\n * A URL pointing to the image to use as a poster in scenarios where the\n * is not ready to reveal a rendered model to the viewer.\n */\n this.poster = null;\n /**\n * An enumerable attribute describing under what conditions the\n * should reveal a model to the viewer.\n *\n * The default value is \"auto\". The only supported alternative values are\n * \"interaction\" and \"manual\".\n */\n this.reveal = RevealStrategy.AUTO;\n /**\n * An enumerable attribute describing under what conditions the\n * should preload a model.\n *\n * The default value is \"auto\". The only supported alternative values are\n * \"lazy\" and \"eager\". Auto is equivalent to lazy, which loads the model\n * when it is near the viewport for reveal = \"auto\", and when interacted\n * with for reveal = \"interaction\". Eager loads the model immediately.\n */\n this.loading = LoadingStrategy.AUTO;\n this[_a] = false;\n this[_b] = false;\n this[_c] = 0;\n this[_d] = null;\n // TODO: Add this to the shadow root as part of this mixin's\n // implementation:\n this[_e] = this.shadowRoot.querySelector('.slot.poster');\n this[_f] = this.shadowRoot.querySelector('#default-poster');\n this[_g] = this.shadowRoot.querySelector('#default-progress-bar > .bar');\n this[_h] = this.shadowRoot.querySelector('#default-progress-bar > .mask');\n this[_j] = this[$defaultPosterElement].getAttribute('aria-label');\n this[_k] = throttle((progress) => {\n const parentNode = this[$defaultProgressBarElement].parentNode;\n requestAnimationFrame(() => {\n this[$defaultProgressMaskElement].style.opacity =\n `${(1.0 - progress) * PROGRESS_MASK_BASE_OPACITY}`;\n this[$defaultProgressBarElement].style.transform =\n `scaleX(${progress})`;\n if (progress === 0) {\n // NOTE(cdata): We remove and re-append the progress bar in this\n // condition so that the progress bar does not appear to\n // transition backwards from the right when we reset to 0 (or\n // otherwise <1) progress after having already reached 1 progress\n // previously.\n parentNode.removeChild(this[$defaultProgressBarElement]);\n parentNode.appendChild(this[$defaultProgressBarElement]);\n }\n // NOTE(cdata): IE11 does not properly respect the second parameter\n // of classList.toggle, which this implementation originally used.\n // @see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11865865/\n if (progress === 1.0) {\n this[$defaultProgressBarElement].classList.add('hide');\n }\n else {\n this[$defaultProgressBarElement].classList.remove('hide');\n }\n });\n }, PROGRESS_BAR_UPDATE_THRESHOLD);\n this[_l] = () => {\n if (this.reveal === RevealStrategy.MANUAL) {\n return;\n }\n this.dismissPoster();\n };\n this[_m] = (event) => {\n if (this.reveal === RevealStrategy.MANUAL) {\n return;\n }\n switch (event.keyCode) {\n // NOTE(cdata): Links and buttons can typically be activated with\n // both spacebar and enter to produce a synthetic click action\n case SPACE_KEY:\n case ENTER_KEY:\n this.dismissPoster();\n break;\n }\n };\n this[_o] = (event) => {\n const progress = event.detail.totalProgress;\n this[$lastReportedProgress] =\n Math.max(progress, this[$lastReportedProgress]);\n if (progress === 1.0) {\n this[$updateProgressBar].flush();\n if (this[$sceneIsReady]() &&\n (this[$posterDismissalSource] != null ||\n this.reveal === RevealStrategy.AUTO)) {\n this[$hidePoster]();\n }\n }\n this[$updateProgressBar](progress);\n this.dispatchEvent(new CustomEvent('progress', { detail: { totalProgress: progress } }));\n };\n const ModelViewerElement = self.ModelViewerElement || {};\n const dracoDecoderLocation = ModelViewerElement.dracoDecoderLocation ||\n DEFAULT_DRACO_DECODER_LOCATION;\n CachingGLTFLoader.setDRACODecoderLocation(dracoDecoderLocation);\n const ktx2TranscoderLocation = ModelViewerElement.ktx2TranscoderLocation ||\n DEFAULT_KTX2_TRANSCODER_LOCATION;\n CachingGLTFLoader.setKTX2TranscoderLocation(ktx2TranscoderLocation);\n }\n static set dracoDecoderLocation(value) {\n CachingGLTFLoader.setDRACODecoderLocation(value);\n }\n static get dracoDecoderLocation() {\n return CachingGLTFLoader.getDRACODecoderLocation();\n }\n static set ktx2TranscoderLocation(value) {\n CachingGLTFLoader.setKTX2TranscoderLocation(value);\n }\n static get ktx2TranscoderLocation() {\n return CachingGLTFLoader.getKTX2TranscoderLocation();\n }\n /**\n * If provided, the callback will be passed each resource URL before a\n * request is sent. The callback may return the original URL, or a new URL\n * to override loading behavior. This behavior can be used to load assets\n * from .ZIP files, drag-and-drop APIs, and Data URIs.\n */\n static mapURLs(callback) {\n Renderer.singleton.loader[$loader].manager.setURLModifier(callback);\n }\n /**\n * Dismisses the poster, causing the model to load and render if\n * necessary. This is currently effectively the same as interacting with\n * the poster via user input.\n */\n dismissPoster() {\n if (this[$sceneIsReady]()) {\n this[$hidePoster]();\n }\n else {\n this[$posterDismissalSource] = PosterDismissalSource.INTERACTION;\n this[$updateSource]();\n }\n }\n /**\n * Displays the poster, hiding the 3D model. If this is called after the 3D\n * model has been revealed, then it will behave as though\n * reveal='interaction', being dismissed either by a user click or a call to\n * dismissPoster().\n */\n showPoster() {\n const posterContainerElement = this[$posterContainerElement];\n const defaultPosterElement = this[$defaultPosterElement];\n defaultPosterElement.removeAttribute('tabindex');\n defaultPosterElement.removeAttribute('aria-hidden');\n posterContainerElement.classList.add('show');\n const oldVisibility = this.modelIsVisible;\n this[$modelIsRevealed] = false;\n this[$announceModelVisibility](oldVisibility);\n this[$transitioned] = false;\n }\n /**\n * Returns the model's bounding box dimensions in meters, independent of\n * turntable rotation.\n */\n getDimensions() {\n return toVector3D(this[$scene].size);\n }\n connectedCallback() {\n super.connectedCallback();\n // Fired when a user first clicks the model element. Used to\n // change the visibility of a poster image, or start loading\n // a model.\n this[$posterContainerElement].addEventListener('click', this[$onClick]);\n this[$posterContainerElement].addEventListener('keydown', this[$onKeydown]);\n this[$progressTracker].addEventListener('progress', this[$onProgress]);\n loadingStatusAnnouncer.registerInstance(this);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this[$posterContainerElement].removeEventListener('click', this[$onClick]);\n this[$posterContainerElement].removeEventListener('keydown', this[$onKeydown]);\n this[$progressTracker].removeEventListener('progress', this[$onProgress]);\n loadingStatusAnnouncer.unregisterInstance(this);\n }\n async updated(changedProperties) {\n super.updated(changedProperties);\n if (changedProperties.has('poster') && this.poster != null) {\n this[$defaultPosterElement].style.backgroundImage =\n `url(${this.poster})`;\n }\n if (changedProperties.has('alt')) {\n this[$defaultPosterElement].setAttribute('aria-label', `${this[$ariaLabel]}. ${this[$ariaLabelCallToAction]}`);\n }\n if (changedProperties.has('reveal') || changedProperties.has('loading')) {\n this[$updateSource]();\n }\n }\n [(_a = $modelIsRevealed, _b = $transitioned, _c = $lastReportedProgress, _d = $posterDismissalSource, _e = $posterContainerElement, _f = $defaultPosterElement, _g = $defaultProgressBarElement, _h = $defaultProgressMaskElement, _j = $ariaLabelCallToAction, _k = $updateProgressBar, _l = $onClick, _m = $onKeydown, _o = $onProgress, $shouldAttemptPreload)]() {\n return !!this.src &&\n (this[$posterDismissalSource] != null ||\n this.loading === LoadingStrategy.EAGER ||\n (this.reveal === RevealStrategy.AUTO && this[$isElementInViewport]));\n }\n [$sceneIsReady]() {\n const { src } = this;\n return !!src && super[$sceneIsReady]() &&\n this[$lastReportedProgress] === 1.0;\n }\n [$hidePoster]() {\n this[$posterDismissalSource] = null;\n const posterContainerElement = this[$posterContainerElement];\n const defaultPosterElement = this[$defaultPosterElement];\n if (posterContainerElement.classList.contains('show')) {\n posterContainerElement.classList.remove('show');\n const oldVisibility = this.modelIsVisible;\n this[$modelIsRevealed] = true;\n this[$announceModelVisibility](oldVisibility);\n // We might need to forward focus to our internal canvas, but that\n // cannot happen until the poster has completely transitioned away\n posterContainerElement.addEventListener('transitionend', () => {\n requestAnimationFrame(() => {\n this[$transitioned] = true;\n const root = this.getRootNode();\n // If the is still focused, forward the focus to\n // the canvas that has just been revealed\n if (root &&\n root.activeElement === this) {\n this[$userInputElement].focus();\n }\n // Ensure that the poster is no longer focusable or visible to\n // screen readers\n defaultPosterElement.setAttribute('aria-hidden', 'true');\n defaultPosterElement.tabIndex = -1;\n this.dispatchEvent(new CustomEvent('poster-dismissed'));\n });\n }, { once: true });\n }\n }\n [$getModelIsVisible]() {\n return super[$getModelIsVisible]() && this[$modelIsRevealed];\n }\n [$hasTransitioned]() {\n return super[$hasTransitioned]() && this[$transitioned];\n }\n async [$updateSource]() {\n this[$lastReportedProgress] = 0;\n if (this[$scene].currentGLTF == null || this.src == null ||\n !this[$shouldAttemptPreload]()) {\n // Don't show the poster when switching models.\n this.showPoster();\n }\n await super[$updateSource]();\n }\n }\n __decorate$2([\n property({ type: String })\n ], LoadingModelViewerElement.prototype, \"poster\", void 0);\n __decorate$2([\n property({ type: String })\n ], LoadingModelViewerElement.prototype, \"reveal\", void 0);\n __decorate$2([\n property({ type: String })\n ], LoadingModelViewerElement.prototype, \"loading\", void 0);\n return LoadingModelViewerElement;\n};\n\nclass GLTFExporter {\n\n\tconstructor() {\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFLightExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsUnlitExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsPBRSpecularGlossiness( writer );\n\n\t\t} );\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\tparse( input, onDone, options ) {\n\n\t\tconst writer = new GLTFWriter();\n\t\tconst plugins = [];\n\n\t\tfor ( let i = 0, il = this.pluginCallbacks.length; i < il; i ++ ) {\n\n\t\t\tplugins.push( this.pluginCallbacks[ i ]( writer ) );\n\n\t\t}\n\n\t\twriter.setPlugins( plugins );\n\t\twriter.write( input, onDone, options );\n\n\t}\n\n}\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst WEBGL_CONSTANTS = {\n\tPOINTS: 0x0000,\n\tLINES: 0x0001,\n\tLINE_LOOP: 0x0002,\n\tLINE_STRIP: 0x0003,\n\tTRIANGLES: 0x0004,\n\tTRIANGLE_STRIP: 0x0005,\n\tTRIANGLE_FAN: 0x0006,\n\n\tUNSIGNED_BYTE: 0x1401,\n\tUNSIGNED_SHORT: 0x1403,\n\tFLOAT: 0x1406,\n\tUNSIGNED_INT: 0x1405,\n\tARRAY_BUFFER: 0x8892,\n\tELEMENT_ARRAY_BUFFER: 0x8893,\n\n\tNEAREST: 0x2600,\n\tLINEAR: 0x2601,\n\tNEAREST_MIPMAP_NEAREST: 0x2700,\n\tLINEAR_MIPMAP_NEAREST: 0x2701,\n\tNEAREST_MIPMAP_LINEAR: 0x2702,\n\tLINEAR_MIPMAP_LINEAR: 0x2703,\n\n\tCLAMP_TO_EDGE: 33071,\n\tMIRRORED_REPEAT: 33648,\n\tREPEAT: 10497\n};\n\nconst THREE_TO_WEBGL = {};\n\nTHREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapNearestFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapLinearFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[ LinearFilter ] = WEBGL_CONSTANTS.LINEAR;\nTHREE_TO_WEBGL[ LinearMipmapNearestFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ LinearMipmapLinearFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;\n\nTHREE_TO_WEBGL[ ClampToEdgeWrapping ] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;\nTHREE_TO_WEBGL[ RepeatWrapping ] = WEBGL_CONSTANTS.REPEAT;\nTHREE_TO_WEBGL[ MirroredRepeatWrapping ] = WEBGL_CONSTANTS.MIRRORED_REPEAT;\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\tposition: 'translation',\n\tquaternion: 'rotation',\n\tmorphTargetInfluences: 'weights'\n};\n\n// GLB constants\n// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\nconst GLB_HEADER_BYTES = 12;\nconst GLB_HEADER_MAGIC = 0x46546C67;\nconst GLB_VERSION = 2;\n\nconst GLB_CHUNK_PREFIX_BYTES = 8;\nconst GLB_CHUNK_TYPE_JSON = 0x4E4F534A;\nconst GLB_CHUNK_TYPE_BIN = 0x004E4942;\n\n//------------------------------------------------------------------------------\n// Utility functions\n//------------------------------------------------------------------------------\n\n/**\n * Compare two arrays\n * @param {Array} array1 Array 1 to compare\n * @param {Array} array2 Array 2 to compare\n * @return {Boolean} Returns true if both arrays are equal\n */\nfunction equalArray( array1, array2 ) {\n\n\treturn ( array1.length === array2.length ) && array1.every( function ( element, index ) {\n\n\t\treturn element === array2[ index ];\n\n\t} );\n\n}\n\n/**\n * Converts a string to an ArrayBuffer.\n * @param {string} text\n * @return {ArrayBuffer}\n */\nfunction stringToArrayBuffer( text ) {\n\n\tif ( window.TextEncoder !== undefined ) {\n\n\t\treturn new TextEncoder().encode( text ).buffer;\n\n\t}\n\n\tconst array = new Uint8Array( new ArrayBuffer( text.length ) );\n\n\tfor ( let i = 0, il = text.length; i < il; i ++ ) {\n\n\t\tconst value = text.charCodeAt( i );\n\n\t\t// Replacing multi-byte character with space(0x20).\n\t\tarray[ i ] = value > 0xFF ? 0x20 : value;\n\n\t}\n\n\treturn array.buffer;\n\n}\n\n/**\n * Is identity matrix\n *\n * @param {Matrix4} matrix\n * @returns {Boolean} Returns true, if parameter is identity matrix\n */\nfunction isIdentityMatrix( matrix ) {\n\n\treturn equalArray( matrix.elements, [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] );\n\n}\n\n/**\n * Get the min and max vectors from the given attribute\n * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count\n * @param {Integer} start\n * @param {Integer} count\n * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)\n */\nfunction getMinMax( attribute, start, count ) {\n\n\tconst output = {\n\n\t\tmin: new Array( attribute.itemSize ).fill( Number.POSITIVE_INFINITY ),\n\t\tmax: new Array( attribute.itemSize ).fill( Number.NEGATIVE_INFINITY )\n\n\t};\n\n\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\tlet value;\n\n\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t} else {\n\n\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t}\n\n\t\t\toutput.min[ a ] = Math.min( output.min[ a ], value );\n\t\t\toutput.max[ a ] = Math.max( output.max[ a ], value );\n\n\t\t}\n\n\t}\n\n\treturn output;\n\n}\n\n/**\n * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment\n *\n * @param {Integer} bufferSize The size the original buffer.\n * @returns {Integer} new buffer size with required padding.\n *\n */\nfunction getPaddedBufferSize( bufferSize ) {\n\n\treturn Math.ceil( bufferSize / 4 ) * 4;\n\n}\n\n/**\n * Returns a buffer aligned to 4-byte boundary.\n *\n * @param {ArrayBuffer} arrayBuffer Buffer to pad\n * @param {Integer} paddingByte (Optional)\n * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer\n */\nfunction getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {\n\n\tconst paddedLength = getPaddedBufferSize( arrayBuffer.byteLength );\n\n\tif ( paddedLength !== arrayBuffer.byteLength ) {\n\n\t\tconst array = new Uint8Array( paddedLength );\n\t\tarray.set( new Uint8Array( arrayBuffer ) );\n\n\t\tif ( paddingByte !== 0 ) {\n\n\t\t\tfor ( let i = arrayBuffer.byteLength; i < paddedLength; i ++ ) {\n\n\t\t\t\tarray[ i ] = paddingByte;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn array.buffer;\n\n\t}\n\n\treturn arrayBuffer;\n\n}\n\nlet cachedCanvas = null;\n\n/**\n * Writer\n */\nclass GLTFWriter {\n\n\tconstructor() {\n\n\t\tthis.plugins = [];\n\n\t\tthis.options = {};\n\t\tthis.pending = [];\n\t\tthis.buffers = [];\n\n\t\tthis.byteOffset = 0;\n\t\tthis.buffers = [];\n\t\tthis.nodeMap = new Map();\n\t\tthis.skins = [];\n\t\tthis.extensionsUsed = {};\n\n\t\tthis.uids = new Map();\n\t\tthis.uid = 0;\n\n\t\tthis.json = {\n\t\t\tasset: {\n\t\t\t\tversion: '2.0',\n\t\t\t\tgenerator: 'THREE.GLTFExporter'\n\t\t\t}\n\t\t};\n\n\t\tthis.cache = {\n\t\t\tmeshes: new Map(),\n\t\t\tattributes: new Map(),\n\t\t\tattributesNormalized: new Map(),\n\t\t\tmaterials: new Map(),\n\t\t\ttextures: new Map(),\n\t\t\timages: new Map()\n\t\t};\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\twrite( input, onDone, options ) {\n\n\t\tthis.options = Object.assign( {}, {\n\t\t\t// default options\n\t\t\tbinary: false,\n\t\t\ttrs: false,\n\t\t\tonlyVisible: true,\n\t\t\ttruncateDrawRange: true,\n\t\t\tembedImages: true,\n\t\t\tmaxTextureSize: Infinity,\n\t\t\tanimations: [],\n\t\t\tincludeCustomExtensions: false\n\t\t}, options );\n\n\t\tif ( this.options.animations.length > 0 ) {\n\n\t\t\t// Only TRS properties, and not matrices, may be targeted by animation.\n\t\t\tthis.options.trs = true;\n\n\t\t}\n\n\t\tthis.processInput( input );\n\n\t\tconst writer = this;\n\n\t\tPromise.all( this.pending ).then( function () {\n\n\t\t\tconst buffers = writer.buffers;\n\t\t\tconst json = writer.json;\n\t\t\tconst options = writer.options;\n\t\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\t\t// Merge buffers.\n\t\t\tconst blob = new Blob( buffers, { type: 'application/octet-stream' } );\n\n\t\t\t// Declare extensions.\n\t\t\tconst extensionsUsedList = Object.keys( extensionsUsed );\n\n\t\t\tif ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;\n\n\t\t\t// Update bytelength of the single buffer.\n\t\t\tif ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\n\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\treader.readAsArrayBuffer( blob );\n\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t// Binary chunk.\n\t\t\t\t\tconst binaryChunk = getPaddedArrayBuffer( reader.result );\n\t\t\t\t\tconst binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );\n\n\t\t\t\t\t// JSON chunk.\n\t\t\t\t\tconst jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );\n\t\t\t\t\tconst jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );\n\n\t\t\t\t\t// GLB header.\n\t\t\t\t\tconst header = new ArrayBuffer( GLB_HEADER_BYTES );\n\t\t\t\t\tconst headerView = new DataView( header );\n\t\t\t\t\theaderView.setUint32( 0, GLB_HEADER_MAGIC, true );\n\t\t\t\t\theaderView.setUint32( 4, GLB_VERSION, true );\n\t\t\t\t\tconst totalByteLength = GLB_HEADER_BYTES\n\t\t\t\t\t\t+ jsonChunkPrefix.byteLength + jsonChunk.byteLength\n\t\t\t\t\t\t+ binaryChunkPrefix.byteLength + binaryChunk.byteLength;\n\t\t\t\t\theaderView.setUint32( 8, totalByteLength, true );\n\n\t\t\t\t\tconst glbBlob = new Blob( [\n\t\t\t\t\t\theader,\n\t\t\t\t\t\tjsonChunkPrefix,\n\t\t\t\t\t\tjsonChunk,\n\t\t\t\t\t\tbinaryChunkPrefix,\n\t\t\t\t\t\tbinaryChunk\n\t\t\t\t\t], { type: 'application/octet-stream' } );\n\n\t\t\t\t\tconst glbReader = new window.FileReader();\n\t\t\t\t\tglbReader.readAsArrayBuffer( glbBlob );\n\t\t\t\t\tglbReader.onloadend = function () {\n\n\t\t\t\t\t\tonDone( glbReader.result );\n\n\t\t\t\t\t};\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tif ( json.buffers && json.buffers.length > 0 ) {\n\n\t\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\t\treader.readAsDataURL( blob );\n\t\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t\tconst base64data = reader.result;\n\t\t\t\t\t\tjson.buffers[ 0 ].uri = base64data;\n\t\t\t\t\t\tonDone( json );\n\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\tonDone( json );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Serializes a userData.\n\t *\n\t * @param {THREE.Object3D|THREE.Material} object\n\t * @param {Object} objectDef\n\t */\n\tserializeUserData( object, objectDef ) {\n\n\t\tif ( Object.keys( object.userData ).length === 0 ) return;\n\n\t\tconst options = this.options;\n\t\tconst extensionsUsed = this.extensionsUsed;\n\n\t\ttry {\n\n\t\t\tconst json = JSON.parse( JSON.stringify( object.userData ) );\n\n\t\t\tif ( options.includeCustomExtensions && json.gltfExtensions ) {\n\n\t\t\t\tif ( objectDef.extensions === undefined ) objectDef.extensions = {};\n\n\t\t\t\tfor ( const extensionName in json.gltfExtensions ) {\n\n\t\t\t\t\tobjectDef.extensions[ extensionName ] = json.gltfExtensions[ extensionName ];\n\t\t\t\t\textensionsUsed[ extensionName ] = true;\n\n\t\t\t\t}\n\n\t\t\t\tdelete json.gltfExtensions;\n\n\t\t\t}\n\n\t\t\tif ( Object.keys( json ).length > 0 ) objectDef.extras = json;\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: userData of \\'' + object.name + '\\' ' +\n\t\t\t\t'won\\'t be serialized because of JSON.stringify error - ' + error.message );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Assign and return a temporal unique id for an object\n\t * especially which doesn't have .uuid\n\t * @param {Object} object\n\t * @return {Integer}\n\t */\n\tgetUID( object ) {\n\n\t\tif ( ! this.uids.has( object ) ) this.uids.set( object, this.uid ++ );\n\n\t\treturn this.uids.get( object );\n\n\t}\n\n\t/**\n\t * Checks if normal attribute values are normalized.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {Boolean}\n\t */\n\tisNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) ) return false;\n\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = normal.count; i < il; i ++ ) {\n\n\t\t\t// 0.0005 is from glTF-validator\n\t\t\tif ( Math.abs( v.fromBufferAttribute( normal, i ).length() - 1.0 ) > 0.0005 ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Creates normalized normal buffer attribute.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {BufferAttribute}\n\t *\n\t */\n\tcreateNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) )\treturn cache.attributesNormalized.get( normal );\n\n\t\tconst attribute = normal.clone();\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tv.fromBufferAttribute( attribute, i );\n\n\t\t\tif ( v.x === 0 && v.y === 0 && v.z === 0 ) {\n\n\t\t\t\t// if values can't be normalized set (1, 0, 0)\n\t\t\t\tv.setX( 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.normalize();\n\n\t\t\t}\n\n\t\t\tattribute.setXYZ( i, v.x, v.y, v.z );\n\n\t\t}\n\n\t\tcache.attributesNormalized.set( normal, attribute );\n\n\t\treturn attribute;\n\n\t}\n\n\t/**\n\t * Applies a texture transform, if present, to the map definition. Requires\n\t * the KHR_texture_transform extension.\n\t *\n\t * @param {Object} mapDef\n\t * @param {THREE.Texture} texture\n\t */\n\tapplyTextureTransform( mapDef, texture ) {\n\n\t\tlet didTransform = false;\n\t\tconst transformDef = {};\n\n\t\tif ( texture.offset.x !== 0 || texture.offset.y !== 0 ) {\n\n\t\t\ttransformDef.offset = texture.offset.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.rotation !== 0 ) {\n\n\t\t\ttransformDef.rotation = texture.rotation;\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.repeat.x !== 1 || texture.repeat.y !== 1 ) {\n\n\t\t\ttransformDef.scale = texture.repeat.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( didTransform ) {\n\n\t\t\tmapDef.extensions = mapDef.extensions || {};\n\t\t\tmapDef.extensions[ 'KHR_texture_transform' ] = transformDef;\n\t\t\tthis.extensionsUsed[ 'KHR_texture_transform' ] = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process a buffer to append to the default one.\n\t * @param {ArrayBuffer} buffer\n\t * @return {Integer}\n\t */\n\tprocessBuffer( buffer ) {\n\n\t\tconst json = this.json;\n\t\tconst buffers = this.buffers;\n\n\t\tif ( ! json.buffers ) json.buffers = [ { byteLength: 0 } ];\n\n\t\t// All buffers are merged before export.\n\t\tbuffers.push( buffer );\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView\n\t * @param {BufferAttribute} attribute\n\t * @param {number} componentType\n\t * @param {number} start\n\t * @param {number} count\n\t * @param {number} target (Optional) Target usage of the BufferView\n\t * @return {Object}\n\t */\n\tprocessBufferView( attribute, componentType, start, count, target ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\t// Create a new dataview and dump the attribute's array into it\n\n\t\tlet componentSize;\n\n\t\tif ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\tcomponentSize = 1;\n\n\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\tcomponentSize = 2;\n\n\t\t} else {\n\n\t\t\tcomponentSize = 4;\n\n\t\t}\n\n\t\tconst byteLength = getPaddedBufferSize( count * attribute.itemSize * componentSize );\n\t\tconst dataView = new DataView( new ArrayBuffer( byteLength ) );\n\t\tlet offset = 0;\n\n\t\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\tlet value;\n\n\t\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( componentType === WEBGL_CONSTANTS.FLOAT ) {\n\n\t\t\t\t\tdataView.setFloat32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {\n\n\t\t\t\t\tdataView.setUint32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\t\t\tdataView.setUint16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\t\t\tdataView.setUint8( offset, value );\n\n\t\t\t\t}\n\n\t\t\t\toffset += componentSize;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bufferViewDef = {\n\n\t\t\tbuffer: this.processBuffer( dataView.buffer ),\n\t\t\tbyteOffset: this.byteOffset,\n\t\t\tbyteLength: byteLength\n\n\t\t};\n\n\t\tif ( target !== undefined ) bufferViewDef.target = target;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Only define byteStride for vertex attributes.\n\t\t\tbufferViewDef.byteStride = attribute.itemSize * componentSize;\n\n\t\t}\n\n\t\tthis.byteOffset += byteLength;\n\n\t\tjson.bufferViews.push( bufferViewDef );\n\n\t\t// @TODO Merge bufferViews where possible.\n\t\tconst output = {\n\n\t\t\tid: json.bufferViews.length - 1,\n\t\t\tbyteLength: 0\n\n\t\t};\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView from an image Blob.\n\t * @param {Blob} blob\n\t * @return {Promise}\n\t */\n\tprocessBufferViewImage( blob ) {\n\n\t\tconst writer = this;\n\t\tconst json = writer.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\treturn new Promise( function ( resolve ) {\n\n\t\t\tconst reader = new window.FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\tconst buffer = getPaddedArrayBuffer( reader.result );\n\n\t\t\t\tconst bufferViewDef = {\n\t\t\t\t\tbuffer: writer.processBuffer( buffer ),\n\t\t\t\t\tbyteOffset: writer.byteOffset,\n\t\t\t\t\tbyteLength: buffer.byteLength\n\t\t\t\t};\n\n\t\t\t\twriter.byteOffset += buffer.byteLength;\n\t\t\t\tresolve( json.bufferViews.push( bufferViewDef ) - 1 );\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Process attribute to generate an accessor\n\t * @param {BufferAttribute} attribute Attribute to process\n\t * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range\n\t * @param {Integer} start (Optional)\n\t * @param {Integer} count (Optional)\n\t * @return {Integer|null} Index of the processed accessor on the \"accessors\" array\n\t */\n\tprocessAccessor( attribute, geometry, start, count ) {\n\n\t\tconst options = this.options;\n\t\tconst json = this.json;\n\n\t\tconst types = {\n\n\t\t\t1: 'SCALAR',\n\t\t\t2: 'VEC2',\n\t\t\t3: 'VEC3',\n\t\t\t4: 'VEC4',\n\t\t\t16: 'MAT4'\n\n\t\t};\n\n\t\tlet componentType;\n\n\t\t// Detect the component type of the attribute array (float, uint or ushort)\n\t\tif ( attribute.array.constructor === Float32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.FLOAT;\n\n\t\t} else if ( attribute.array.constructor === Uint32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_INT;\n\n\t\t} else if ( attribute.array.constructor === Uint16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;\n\n\t\t} else if ( attribute.array.constructor === Uint8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type.' );\n\n\t\t}\n\n\t\tif ( start === undefined ) start = 0;\n\t\tif ( count === undefined ) count = attribute.count;\n\n\t\t// @TODO Indexed buffer geometry with drawRange not supported yet\n\t\tif ( options.truncateDrawRange && geometry !== undefined && geometry.index === null ) {\n\n\t\t\tconst end = start + count;\n\t\t\tconst end2 = geometry.drawRange.count === Infinity\n\t\t\t\t? attribute.count\n\t\t\t\t: geometry.drawRange.start + geometry.drawRange.count;\n\n\t\t\tstart = Math.max( start, geometry.drawRange.start );\n\t\t\tcount = Math.min( end, end2 ) - start;\n\n\t\t\tif ( count < 0 ) count = 0;\n\n\t\t}\n\n\t\t// Skip creating an accessor if the attribute doesn't have data to export\n\t\tif ( count === 0 ) return null;\n\n\t\tconst minMax = getMinMax( attribute, start, count );\n\t\tlet bufferViewTarget;\n\n\t\t// If geometry isn't provided, don't infer the target usage of the bufferView. For\n\t\t// animation samplers, target must not be set.\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tbufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;\n\n\t\t}\n\n\t\tconst bufferView = this.processBufferView( attribute, componentType, start, count, bufferViewTarget );\n\n\t\tconst accessorDef = {\n\n\t\t\tbufferView: bufferView.id,\n\t\t\tbyteOffset: bufferView.byteOffset,\n\t\t\tcomponentType: componentType,\n\t\t\tcount: count,\n\t\t\tmax: minMax.max,\n\t\t\tmin: minMax.min,\n\t\t\ttype: types[ attribute.itemSize ]\n\n\t\t};\n\n\t\tif ( attribute.normalized === true ) accessorDef.normalized = true;\n\t\tif ( ! json.accessors ) json.accessors = [];\n\n\t\treturn json.accessors.push( accessorDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process image\n\t * @param {Image} image to process\n\t * @param {Integer} format of the image (e.g. RGBFormat, RGBAFormat etc)\n\t * @param {Boolean} flipY before writing out the image\n\t * @return {Integer} Index of the processed texture in the \"images\" array\n\t */\n\tprocessImage( image, format, flipY ) {\n\n\t\tconst writer = this;\n\t\tconst cache = writer.cache;\n\t\tconst json = writer.json;\n\t\tconst options = writer.options;\n\t\tconst pending = writer.pending;\n\n\t\tif ( ! cache.images.has( image ) ) cache.images.set( image, {} );\n\n\t\tconst cachedImages = cache.images.get( image );\n\t\tconst mimeType = format === RGBAFormat ? 'image/png' : 'image/jpeg';\n\t\tconst key = mimeType + ':flipY/' + flipY.toString();\n\n\t\tif ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];\n\n\t\tif ( ! json.images ) json.images = [];\n\n\t\tconst imageDef = { mimeType: mimeType };\n\n\t\tif ( options.embedImages ) {\n\n\t\t\tconst canvas = cachedCanvas = cachedCanvas || document.createElement( 'canvas' );\n\n\t\t\tcanvas.width = Math.min( image.width, options.maxTextureSize );\n\t\t\tcanvas.height = Math.min( image.height, options.maxTextureSize );\n\n\t\t\tconst ctx = canvas.getContext( '2d' );\n\n\t\t\tif ( flipY === true ) {\n\n\t\t\t\tctx.translate( 0, canvas.height );\n\t\t\t\tctx.scale( 1, - 1 );\n\n\t\t\t}\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tctx.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\t\t} else {\n\n\t\t\t\tif ( format !== RGBAFormat && format !== RGBFormat ) {\n\n\t\t\t\t\tconsole.error( 'GLTFExporter: Only RGB and RGBA formats are supported.' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {\n\n\t\t\t\t\tconsole.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );\n\n\t\t\t\t}\n\n\t\t\t\tlet data = image.data;\n\n\t\t\t\tif ( format === RGBFormat ) {\n\n\t\t\t\t\tdata = new Uint8ClampedArray( image.height * image.width * 4 );\n\n\t\t\t\t\tfor ( let i = 0, j = 0; i < data.length; i += 4, j += 3 ) {\n\n\t\t\t\t\t\tdata[ i + 0 ] = image.data[ j + 0 ];\n\t\t\t\t\t\tdata[ i + 1 ] = image.data[ j + 1 ];\n\t\t\t\t\t\tdata[ i + 2 ] = image.data[ j + 2 ];\n\t\t\t\t\t\tdata[ i + 3 ] = 255;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\tpending.push( new Promise( function ( resolve ) {\n\n\t\t\t\t\tcanvas.toBlob( function ( blob ) {\n\n\t\t\t\t\t\twriter.processBufferViewImage( blob ).then( function ( bufferViewIndex ) {\n\n\t\t\t\t\t\t\timageDef.bufferView = bufferViewIndex;\n\t\t\t\t\t\t\tresolve();\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}, mimeType );\n\n\t\t\t\t} ) );\n\n\t\t\t} else {\n\n\t\t\t\timageDef.uri = canvas.toDataURL( mimeType );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\timageDef.uri = image.src;\n\n\t\t}\n\n\t\tconst index = json.images.push( imageDef ) - 1;\n\t\tcachedImages[ key ] = index;\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process sampler\n\t * @param {Texture} map Texture to process\n\t * @return {Integer} Index of the processed texture in the \"samplers\" array\n\t */\n\tprocessSampler( map ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.samplers ) json.samplers = [];\n\n\t\tconst samplerDef = {\n\t\t\tmagFilter: THREE_TO_WEBGL[ map.magFilter ],\n\t\t\tminFilter: THREE_TO_WEBGL[ map.minFilter ],\n\t\t\twrapS: THREE_TO_WEBGL[ map.wrapS ],\n\t\t\twrapT: THREE_TO_WEBGL[ map.wrapT ]\n\t\t};\n\n\t\treturn json.samplers.push( samplerDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process texture\n\t * @param {Texture} map Map to process\n\t * @return {Integer} Index of the processed texture in the \"textures\" array\n\t */\n\tprocessTexture( map ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.textures.has( map ) ) return cache.textures.get( map );\n\n\t\tif ( ! json.textures ) json.textures = [];\n\n\t\tconst textureDef = {\n\t\t\tsampler: this.processSampler( map ),\n\t\t\tsource: this.processImage( map.image, map.format, map.flipY )\n\t\t};\n\n\t\tif ( map.name ) textureDef.name = map.name;\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeTexture && ext.writeTexture( map, textureDef );\n\n\t\t} );\n\n\t\tconst index = json.textures.push( textureDef ) - 1;\n\t\tcache.textures.set( map, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process material\n\t * @param {THREE.Material} material Material to process\n\t * @return {Integer|null} Index of the processed material in the \"materials\" array\n\t */\n\tprocessMaterial( material ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.materials.has( material ) ) return cache.materials.get( material );\n\n\t\tif ( material.isShaderMaterial ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: THREE.ShaderMaterial not supported.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( ! json.materials ) json.materials = [];\n\n\t\t// @QUESTION Should we avoid including any attribute that has the default value?\n\t\tconst materialDef = {\tpbrMetallicRoughness: {} };\n\n\t\tif ( material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.' );\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorFactor\n\t\tconst color = material.color.toArray().concat( [ material.opacity ] );\n\n\t\tif ( ! equalArray( color, [ 1, 1, 1, 1 ] ) ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorFactor = color;\n\n\t\t}\n\n\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = material.metalness;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;\n\n\t\t} else {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.5;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.5;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.metallicRoughnessTexture\n\t\tif ( material.metalnessMap || material.roughnessMap ) {\n\n\t\t\tif ( material.metalnessMap === material.roughnessMap ) {\n\n\t\t\t\tconst metalRoughMapDef = { index: this.processTexture( material.metalnessMap ) };\n\t\t\t\tthis.applyTextureTransform( metalRoughMapDef, material.metalnessMap );\n\t\t\t\tmaterialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Ignoring metalnessMap and roughnessMap because they are not the same Texture.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorTexture or pbrSpecularGlossiness diffuseTexture\n\t\tif ( material.map ) {\n\n\t\t\tconst baseColorMapDef = { index: this.processTexture( material.map ) };\n\t\t\tthis.applyTextureTransform( baseColorMapDef, material.map );\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\t// emissiveFactor\n\t\t\tconst emissive = material.emissive.clone().multiplyScalar( material.emissiveIntensity ).toArray();\n\n\t\t\tif ( ! equalArray( emissive, [ 0, 0, 0 ] ) ) {\n\n\t\t\t\tmaterialDef.emissiveFactor = emissive;\n\n\t\t\t}\n\n\t\t\t// emissiveTexture\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tconst emissiveMapDef = { index: this.processTexture( material.emissiveMap ) };\n\t\t\t\tthis.applyTextureTransform( emissiveMapDef, material.emissiveMap );\n\t\t\t\tmaterialDef.emissiveTexture = emissiveMapDef;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalTexture\n\t\tif ( material.normalMap ) {\n\n\t\t\tconst normalMapDef = { index: this.processTexture( material.normalMap ) };\n\n\t\t\tif ( material.normalScale && material.normalScale.x !== - 1 ) {\n\n\t\t\t\tif ( material.normalScale.x !== material.normalScale.y ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Normal scale components are different, ignoring Y and exporting X.' );\n\n\t\t\t\t}\n\n\t\t\t\tnormalMapDef.scale = material.normalScale.x;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( normalMapDef, material.normalMap );\n\t\t\tmaterialDef.normalTexture = normalMapDef;\n\n\t\t}\n\n\t\t// occlusionTexture\n\t\tif ( material.aoMap ) {\n\n\t\t\tconst occlusionMapDef = {\n\t\t\t\tindex: this.processTexture( material.aoMap ),\n\t\t\t\ttexCoord: 1\n\t\t\t};\n\n\t\t\tif ( material.aoMapIntensity !== 1.0 ) {\n\n\t\t\t\tocclusionMapDef.strength = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( occlusionMapDef, material.aoMap );\n\t\t\tmaterialDef.occlusionTexture = occlusionMapDef;\n\n\t\t}\n\n\t\t// alphaMode\n\t\tif ( material.transparent ) {\n\n\t\t\tmaterialDef.alphaMode = 'BLEND';\n\n\t\t} else {\n\n\t\t\tif ( material.alphaTest > 0.0 ) {\n\n\t\t\t\tmaterialDef.alphaMode = 'MASK';\n\t\t\t\tmaterialDef.alphaCutoff = material.alphaTest;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// doubleSided\n\t\tif ( material.side === DoubleSide ) materialDef.doubleSided = true;\n\t\tif ( material.name !== '' ) materialDef.name = material.name;\n\n\t\tthis.serializeUserData( material, materialDef );\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMaterial && ext.writeMaterial( material, materialDef );\n\n\t\t} );\n\n\t\tconst index = json.materials.push( materialDef ) - 1;\n\t\tcache.materials.set( material, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process mesh\n\t * @param {THREE.Mesh} mesh Mesh to process\n\t * @return {Integer|null} Index of the processed mesh in the \"meshes\" array\n\t */\n\tprocessMesh( mesh ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tconst meshCacheKeyParts = [ mesh.geometry.uuid ];\n\n\t\tif ( Array.isArray( mesh.material ) ) {\n\n\t\t\tfor ( let i = 0, l = mesh.material.length; i < l; i ++ ) {\n\n\t\t\t\tmeshCacheKeyParts.push( mesh.material[ i ].uuid\t);\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tmeshCacheKeyParts.push( mesh.material.uuid );\n\n\t\t}\n\n\t\tconst meshCacheKey = meshCacheKeyParts.join( ':' );\n\n\t\tif ( cache.meshes.has( meshCacheKey ) ) return cache.meshes.get( meshCacheKey );\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet mode;\n\n\t\t// Use the correct mode\n\t\tif ( mesh.isLineSegments ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINES;\n\n\t\t} else if ( mesh.isLineLoop ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_LOOP;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_STRIP;\n\n\t\t} else if ( mesh.isPoints ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.POINTS;\n\n\t\t} else {\n\n\t\t\tmode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;\n\n\t\t}\n\n\t\tif ( geometry.isBufferGeometry !== true ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.' );\n\n\t\t}\n\n\t\tconst meshDef = {};\n\t\tconst attributes = {};\n\t\tconst primitives = [];\n\t\tconst targets = [];\n\n\t\t// Conversion between attributes names in threejs and gltf spec\n\t\tconst nameConversion = {\n\t\t\tuv: 'TEXCOORD_0',\n\t\t\tuv2: 'TEXCOORD_1',\n\t\t\tcolor: 'COLOR_0',\n\t\t\tskinWeight: 'WEIGHTS_0',\n\t\t\tskinIndex: 'JOINTS_0'\n\t\t};\n\n\t\tconst originalNormal = geometry.getAttribute( 'normal' );\n\n\t\tif ( originalNormal !== undefined && ! this.isNormalizedNormalAttribute( originalNormal ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.' );\n\n\t\t\tgeometry.setAttribute( 'normal', this.createNormalizedNormalAttribute( originalNormal ) );\n\n\t\t}\n\n\t\t// @QUESTION Detect if .vertexColors = true?\n\t\t// For every attribute create an accessor\n\t\tlet modifiedAttribute = null;\n\n\t\tfor ( let attributeName in geometry.attributes ) {\n\n\t\t\t// Ignore morph target attributes, which are exported later.\n\t\t\tif ( attributeName.substr( 0, 5 ) === 'morph' ) continue;\n\n\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\tattributeName = nameConversion[ attributeName ] || attributeName.toUpperCase();\n\n\t\t\t// Prefix all geometry attributes except the ones specifically\n\t\t\t// listed in the spec; non-spec attributes are considered custom.\n\t\t\tconst validVertexAttributes =\n\t\t\t\t\t/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\d+|COLOR_\\d+|JOINTS_\\d+|WEIGHTS_\\d+)$/;\n\n\t\t\tif ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;\n\n\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\tattributes[ attributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.\n\t\t\tmodifiedAttribute = null;\n\t\t\tconst array = attribute.array;\n\n\t\t\tif ( attributeName === 'JOINTS_0' &&\n\t\t\t\t! ( array instanceof Uint16Array ) &&\n\t\t\t\t! ( array instanceof Uint8Array ) ) {\n\n\t\t\t\tconsole.warn( 'GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT.' );\n\t\t\t\tmodifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tconst accessor = this.processAccessor( modifiedAttribute || attribute, geometry );\n\n\t\t\tif ( accessor !== null ) {\n\n\t\t\t\tattributes[ attributeName ] = accessor;\n\t\t\t\tcache.attributes.set( this.getUID( attribute ), accessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( originalNormal !== undefined ) geometry.setAttribute( 'normal', originalNormal );\n\n\t\t// Skip if no exportable attributes found\n\t\tif ( Object.keys( attributes ).length === 0 ) return null;\n\n\t\t// Morph targets\n\t\tif ( mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0 ) {\n\n\t\t\tconst weights = [];\n\t\t\tconst targetNames = [];\n\t\t\tconst reverseDictionary = {};\n\n\t\t\tif ( mesh.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tfor ( const key in mesh.morphTargetDictionary ) {\n\n\t\t\t\t\treverseDictionary[ mesh.morphTargetDictionary[ key ] ] = key;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < mesh.morphTargetInfluences.length; ++ i ) {\n\n\t\t\t\tconst target = {};\n\t\t\t\tlet warned = false;\n\n\t\t\t\tfor ( const attributeName in geometry.morphAttributes ) {\n\n\t\t\t\t\t// glTF 2.0 morph supports only POSITION/NORMAL/TANGENT.\n\t\t\t\t\t// Three.js doesn't support TANGENT yet.\n\n\t\t\t\t\tif ( attributeName !== 'position' && attributeName !== 'normal' ) {\n\n\t\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'GLTFExporter: Only POSITION and NORMAL morph are supported.' );\n\t\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst attribute = geometry.morphAttributes[ attributeName ][ i ];\n\t\t\t\t\tconst gltfAttributeName = attributeName.toUpperCase();\n\n\t\t\t\t\t// Three.js morph attribute has absolute values while the one of glTF has relative values.\n\t\t\t\t\t//\n\t\t\t\t\t// glTF 2.0 Specification:\n\t\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets\n\n\t\t\t\t\tconst baseAttribute = geometry.attributes[ attributeName ];\n\n\t\t\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\t\t\ttarget[ gltfAttributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clones attribute not to override\n\t\t\t\t\tconst relativeAttribute = attribute.clone();\n\n\t\t\t\t\tif ( ! geometry.morphTargetsRelative ) {\n\n\t\t\t\t\t\tfor ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\trelativeAttribute.setXYZ(\n\t\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\t\tattribute.getX( j ) - baseAttribute.getX( j ),\n\t\t\t\t\t\t\t\tattribute.getY( j ) - baseAttribute.getY( j ),\n\t\t\t\t\t\t\t\tattribute.getZ( j ) - baseAttribute.getZ( j )\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\ttarget[ gltfAttributeName ] = this.processAccessor( relativeAttribute, geometry );\n\t\t\t\t\tcache.attributes.set( this.getUID( baseAttribute ), target[ gltfAttributeName ] );\n\n\t\t\t\t}\n\n\t\t\t\ttargets.push( target );\n\n\t\t\t\tweights.push( mesh.morphTargetInfluences[ i ] );\n\n\t\t\t\tif ( mesh.morphTargetDictionary !== undefined ) targetNames.push( reverseDictionary[ i ] );\n\n\t\t\t}\n\n\t\t\tmeshDef.weights = weights;\n\n\t\t\tif ( targetNames.length > 0 ) {\n\n\t\t\t\tmeshDef.extras = {};\n\t\t\t\tmeshDef.extras.targetNames = targetNames;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst isMultiMaterial = Array.isArray( mesh.material );\n\n\t\tif ( isMultiMaterial && geometry.groups.length === 0 ) return null;\n\n\t\tconst materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\t\tconst groups = isMultiMaterial ? geometry.groups : [ { materialIndex: 0, start: undefined, count: undefined } ];\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = {\n\t\t\t\tmode: mode,\n\t\t\t\tattributes: attributes,\n\t\t\t};\n\n\t\t\tthis.serializeUserData( geometry, primitive );\n\n\t\t\tif ( targets.length > 0 ) primitive.targets = targets;\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tlet cacheKey = this.getUID( geometry.index );\n\n\t\t\t\tif ( groups[ i ].start !== undefined || groups[ i ].count !== undefined ) {\n\n\t\t\t\t\tcacheKey += ':' + groups[ i ].start + ':' + groups[ i ].count;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cache.attributes.has( cacheKey ) ) {\n\n\t\t\t\t\tprimitive.indices = cache.attributes.get( cacheKey );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprimitive.indices = this.processAccessor( geometry.index, geometry, groups[ i ].start, groups[ i ].count );\n\t\t\t\t\tcache.attributes.set( cacheKey, primitive.indices );\n\n\t\t\t\t}\n\n\t\t\t\tif ( primitive.indices === null ) delete primitive.indices;\n\n\t\t\t}\n\n\t\t\tconst material = this.processMaterial( materials[ groups[ i ].materialIndex ] );\n\n\t\t\tif ( material !== null ) primitive.material = material;\n\n\t\t\tprimitives.push( primitive );\n\n\t\t}\n\n\t\tmeshDef.primitives = primitives;\n\n\t\tif ( ! json.meshes ) json.meshes = [];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMesh && ext.writeMesh( mesh, meshDef );\n\n\t\t} );\n\n\t\tconst index = json.meshes.push( meshDef ) - 1;\n\t\tcache.meshes.set( meshCacheKey, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process camera\n\t * @param {THREE.Camera} camera Camera to process\n\t * @return {Integer} Index of the processed mesh in the \"camera\" array\n\t */\n\tprocessCamera( camera ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.cameras ) json.cameras = [];\n\n\t\tconst isOrtho = camera.isOrthographicCamera;\n\n\t\tconst cameraDef = {\n\t\t\ttype: isOrtho ? 'orthographic' : 'perspective'\n\t\t};\n\n\t\tif ( isOrtho ) {\n\n\t\t\tcameraDef.orthographic = {\n\t\t\t\txmag: camera.right * 2,\n\t\t\t\tymag: camera.top * 2,\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tcameraDef.perspective = {\n\t\t\t\taspectRatio: camera.aspect,\n\t\t\t\tyfov: MathUtils.degToRad( camera.fov ),\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t}\n\n\t\t// Question: Is saving \"type\" as name intentional?\n\t\tif ( camera.name !== '' ) cameraDef.name = camera.type;\n\n\t\treturn json.cameras.push( cameraDef ) - 1;\n\n\t}\n\n\t/**\n\t * Creates glTF animation entry from AnimationClip object.\n\t *\n\t * Status:\n\t * - Only properties listed in PATH_PROPERTIES may be animated.\n\t *\n\t * @param {THREE.AnimationClip} clip\n\t * @param {THREE.Object3D} root\n\t * @return {number|null}\n\t */\n\tprocessAnimation( clip, root ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.animations ) json.animations = [];\n\n\t\tclip = GLTFExporter.Utils.mergeMorphTargetTracks( clip.clone(), root );\n\n\t\tconst tracks = clip.tracks;\n\t\tconst channels = [];\n\t\tconst samplers = [];\n\n\t\tfor ( let i = 0; i < tracks.length; ++ i ) {\n\n\t\t\tconst track = tracks[ i ];\n\t\t\tconst trackBinding = PropertyBinding.parseTrackName( track.name );\n\t\t\tlet trackNode = PropertyBinding.findNode( root, trackBinding.nodeName );\n\t\t\tconst trackProperty = PATH_PROPERTIES[ trackBinding.propertyName ];\n\n\t\t\tif ( trackBinding.objectName === 'bones' ) {\n\n\t\t\t\tif ( trackNode.isSkinnedMesh === true ) {\n\n\t\t\t\t\ttrackNode = trackNode.skeleton.getBoneByName( trackBinding.objectIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttrackNode = undefined;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! trackNode || ! trackProperty ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Could not export animation track \"%s\".', track.name );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tconst inputItemSize = 1;\n\t\t\tlet outputItemSize = track.values.length / track.times.length;\n\n\t\t\tif ( trackProperty === PATH_PROPERTIES.morphTargetInfluences ) {\n\n\t\t\t\toutputItemSize /= trackNode.morphTargetInfluences.length;\n\n\t\t\t}\n\n\t\t\tlet interpolation;\n\n\t\t\t// @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE\n\n\t\t\t// Detecting glTF cubic spline interpolant by checking factory method's special property\n\t\t\t// GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return\n\t\t\t// valid value from .getInterpolation().\n\t\t\tif ( track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true ) {\n\n\t\t\t\tinterpolation = 'CUBICSPLINE';\n\n\t\t\t\t// itemSize of CUBICSPLINE keyframe is 9\n\t\t\t\t// (VEC3 * 3: inTangent, splineVertex, and outTangent)\n\t\t\t\t// but needs to be stored as VEC3 so dividing by 3 here.\n\t\t\t\toutputItemSize /= 3;\n\n\t\t\t} else if ( track.getInterpolation() === InterpolateDiscrete ) {\n\n\t\t\t\tinterpolation = 'STEP';\n\n\t\t\t} else {\n\n\t\t\t\tinterpolation = 'LINEAR';\n\n\t\t\t}\n\n\t\t\tsamplers.push( {\n\t\t\t\tinput: this.processAccessor( new BufferAttribute( track.times, inputItemSize ) ),\n\t\t\t\toutput: this.processAccessor( new BufferAttribute( track.values, outputItemSize ) ),\n\t\t\t\tinterpolation: interpolation\n\t\t\t} );\n\n\t\t\tchannels.push( {\n\t\t\t\tsampler: samplers.length - 1,\n\t\t\t\ttarget: {\n\t\t\t\t\tnode: nodeMap.get( trackNode ),\n\t\t\t\t\tpath: trackProperty\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t\tjson.animations.push( {\n\t\t\tname: clip.name || 'clip_' + json.animations.length,\n\t\t\tsamplers: samplers,\n\t\t\tchannels: channels\n\t\t} );\n\n\t\treturn json.animations.length - 1;\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D} object\n\t * @return {number|null}\n\t */\n\t processSkin( object ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tconst node = json.nodes[ nodeMap.get( object ) ];\n\n\t\tconst skeleton = object.skeleton;\n\n\t\tif ( skeleton === undefined ) return null;\n\n\t\tconst rootJoint = object.skeleton.bones[ 0 ];\n\n\t\tif ( rootJoint === undefined ) return null;\n\n\t\tconst joints = [];\n\t\tconst inverseBindMatrices = new Float32Array( skeleton.bones.length * 16 );\n\t\tconst temporaryBoneInverse = new Matrix4();\n\n\t\tfor ( let i = 0; i < skeleton.bones.length; ++ i ) {\n\n\t\t\tjoints.push( nodeMap.get( skeleton.bones[ i ] ) );\n\t\t\ttemporaryBoneInverse.copy( skeleton.boneInverses[ i ] );\n\t\t\ttemporaryBoneInverse.multiply( object.bindMatrix ).toArray( inverseBindMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( json.skins === undefined ) json.skins = [];\n\n\t\tjson.skins.push( {\n\t\t\tinverseBindMatrices: this.processAccessor( new BufferAttribute( inverseBindMatrices, 16 ) ),\n\t\t\tjoints: joints,\n\t\t\tskeleton: nodeMap.get( rootJoint )\n\t\t} );\n\n\t\tconst skinIndex = node.skin = json.skins.length - 1;\n\n\t\treturn skinIndex;\n\n\t}\n\n\t/**\n\t * Process Object3D node\n\t * @param {THREE.Object3D} node Object3D to processNode\n\t * @return {Integer} Index of the node in the nodes list\n\t */\n\tprocessNode( object ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.nodes ) json.nodes = [];\n\n\t\tconst nodeDef = {};\n\n\t\tif ( options.trs ) {\n\n\t\t\tconst rotation = object.quaternion.toArray();\n\t\t\tconst position = object.position.toArray();\n\t\t\tconst scale = object.scale.toArray();\n\n\t\t\tif ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {\n\n\t\t\t\tnodeDef.rotation = rotation;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( position, [ 0, 0, 0 ] ) ) {\n\n\t\t\t\tnodeDef.translation = position;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {\n\n\t\t\t\tnodeDef.scale = scale;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( object.matrixAutoUpdate ) {\n\n\t\t\t\tobject.updateMatrix();\n\n\t\t\t}\n\n\t\t\tif ( isIdentityMatrix( object.matrix ) === false ) {\n\n\t\t\t\tnodeDef.matrix = object.matrix.elements;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// We don't export empty strings name because it represents no-name in Three.js.\n\t\tif ( object.name !== '' ) nodeDef.name = String( object.name );\n\n\t\tthis.serializeUserData( object, nodeDef );\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tconst meshIndex = this.processMesh( object );\n\n\t\t\tif ( meshIndex !== null ) nodeDef.mesh = meshIndex;\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tnodeDef.camera = this.processCamera( object );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) this.skins.push( object );\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tconst children = [];\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = object.children[ i ];\n\n\t\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\t\tif ( nodeIndex !== null ) children.push( nodeIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( children.length > 0 ) nodeDef.children = children;\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeNode && ext.writeNode( object, nodeDef );\n\n\t\t} );\n\n\t\tconst nodeIndex = json.nodes.push( nodeDef ) - 1;\n\t\tnodeMap.set( object, nodeIndex );\n\t\treturn nodeIndex;\n\n\t}\n\n\t/**\n\t * Process Scene\n\t * @param {Scene} node Scene to process\n\t */\n\tprocessScene( scene ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( ! json.scenes ) {\n\n\t\t\tjson.scenes = [];\n\t\t\tjson.scene = 0;\n\n\t\t}\n\n\t\tconst sceneDef = {};\n\n\t\tif ( scene.name !== '' ) sceneDef.name = scene.name;\n\n\t\tjson.scenes.push( sceneDef );\n\n\t\tconst nodes = [];\n\n\t\tfor ( let i = 0, l = scene.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = scene.children[ i ];\n\n\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\tif ( nodeIndex !== null ) nodes.push( nodeIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( nodes.length > 0 ) sceneDef.nodes = nodes;\n\n\t\tthis.serializeUserData( scene, sceneDef );\n\n\t}\n\n\t/**\n\t * Creates a Scene to hold a list of objects and parse it\n\t * @param {Array} objects List of objects to process\n\t */\n\tprocessObjects( objects ) {\n\n\t\tconst scene = new Scene();\n\t\tscene.name = 'AuxScene';\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t// We push directly to children instead of calling `add` to prevent\n\t\t\t// modify the .parent and break its original scene and hierarchy\n\t\t\tscene.children.push( objects[ i ] );\n\n\t\t}\n\n\t\tthis.processScene( scene );\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D|Array} input\n\t */\n\tprocessInput( input ) {\n\n\t\tconst options = this.options;\n\n\t\tinput = input instanceof Array ? input : [ input ];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.beforeParse && ext.beforeParse( input );\n\n\t\t} );\n\n\t\tconst objectsWithoutScene = [];\n\n\t\tfor ( let i = 0; i < input.length; i ++ ) {\n\n\t\t\tif ( input[ i ] instanceof Scene ) {\n\n\t\t\t\tthis.processScene( input[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\tobjectsWithoutScene.push( input[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( objectsWithoutScene.length > 0 ) this.processObjects( objectsWithoutScene );\n\n\t\tfor ( let i = 0; i < this.skins.length; ++ i ) {\n\n\t\t\tthis.processSkin( this.skins[ i ] );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < options.animations.length; ++ i ) {\n\n\t\t\tthis.processAnimation( options.animations[ i ], input[ 0 ] );\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.afterParse && ext.afterParse( input );\n\n\t\t} );\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tfor ( let i = 0, il = this.plugins.length; i < il; i ++ ) {\n\n\t\t\tfunc( this.plugins[ i ] );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_lights_punctual';\n\n\t}\n\n\twriteNode( light, nodeDef ) {\n\n\t\tif ( ! light.isLight ) return;\n\n\t\tif ( ! light.isDirectionalLight && ! light.isPointLight && ! light.isSpotLight ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst writer = this.writer;\n\t\tconst json = writer.json;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst lightDef = {};\n\n\t\tif ( light.name ) lightDef.name = light.name;\n\n\t\tlightDef.color = light.color.toArray();\n\n\t\tlightDef.intensity = light.intensity;\n\n\t\tif ( light.isDirectionalLight ) {\n\n\t\t\tlightDef.type = 'directional';\n\n\t\t} else if ( light.isPointLight ) {\n\n\t\t\tlightDef.type = 'point';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t} else if ( light.isSpotLight ) {\n\n\t\t\tlightDef.type = 'spot';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t\tlightDef.spot = {};\n\t\t\tlightDef.spot.innerConeAngle = ( light.penumbra - 1.0 ) * light.angle * - 1.0;\n\t\t\tlightDef.spot.outerConeAngle = light.angle;\n\n\t\t}\n\n\t\tif ( light.decay !== undefined && light.decay !== 2 ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, '\n\t\t\t\t+ 'and expects light.decay=2.' );\n\n\t\t}\n\n\t\tif ( light.target\n\t\t\t\t&& ( light.target.parent !== light\n\t\t\t\t|| light.target.position.x !== 0\n\t\t\t\t|| light.target.position.y !== 0\n\t\t\t\t|| light.target.position.z !== - 1 ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light direction may be lost. For best results, '\n\t\t\t\t+ 'make light.target a child of the light with position 0,0,-1.' );\n\n\t\t}\n\n\t\tif ( ! extensionsUsed[ this.name ] ) {\n\n\t\t\tjson.extensions = json.extensions || {};\n\t\t\tjson.extensions[ this.name ] = { lights: [] };\n\t\t\textensionsUsed[ this.name ] = true;\n\n\t\t}\n\n\t\tconst lights = json.extensions[ this.name ].lights;\n\t\tlights.push( lightDef );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { light: lights.length - 1 };\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_unlit';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshBasicMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = {};\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.0;\n\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.9;\n\n\t}\n\n}\n\n/**\n * Specular-Glossiness Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n */\nclass GLTFMaterialsPBRSpecularGlossiness {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_pbrSpecularGlossiness';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isGLTFSpecularGlossinessMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorFactor ) {\n\n\t\t\textensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;\n\n\t\t}\n\n\t\tconst specularFactor = [ 1, 1, 1 ];\n\t\tmaterial.specular.toArray( specularFactor, 0 );\n\t\textensionDef.specularFactor = specularFactor;\n\t\textensionDef.glossinessFactor = material.glossiness;\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorTexture ) {\n\n\t\t\textensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tconst specularMapDef = { index: writer.processTexture( material.specularMap ) };\n\t\t\twriter.applyTextureTransform( specularMapDef, material.specularMap );\n\t\t\textensionDef.specularGlossinessTexture = specularMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Static utility functions\n */\nGLTFExporter.Utils = {\n\n\tinsertKeyframe: function ( track, time ) {\n\n\t\tconst tolerance = 0.001; // 1ms\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = new track.TimeBufferType( track.times.length + 1 );\n\t\tconst values = new track.ValueBufferType( track.values.length + valueSize );\n\t\tconst interpolant = track.createInterpolant( new track.ValueBufferType( valueSize ) );\n\n\t\tlet index;\n\n\t\tif ( track.times.length === 0 ) {\n\n\t\t\ttimes[ 0 ] = time;\n\n\t\t\tfor ( let i = 0; i < valueSize; i ++ ) {\n\n\t\t\t\tvalues[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time < track.times[ 0 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ 0 ] - time ) < tolerance ) return 0;\n\n\t\t\ttimes[ 0 ] = time;\n\t\t\ttimes.set( track.times, 1 );\n\n\t\t\tvalues.set( interpolant.evaluate( time ), 0 );\n\t\t\tvalues.set( track.values, valueSize );\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time > track.times[ track.times.length - 1 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ track.times.length - 1 ] - time ) < tolerance ) {\n\n\t\t\t\treturn track.times.length - 1;\n\n\t\t\t}\n\n\t\t\ttimes[ times.length - 1 ] = time;\n\t\t\ttimes.set( track.times, 0 );\n\n\t\t\tvalues.set( track.values, 0 );\n\t\t\tvalues.set( interpolant.evaluate( time ), track.values.length );\n\n\t\t\tindex = times.length - 1;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < track.times.length; i ++ ) {\n\n\t\t\t\tif ( Math.abs( track.times[ i ] - time ) < tolerance ) return i;\n\n\t\t\t\tif ( track.times[ i ] < time && track.times[ i + 1 ] > time ) {\n\n\t\t\t\t\ttimes.set( track.times.slice( 0, i + 1 ), 0 );\n\t\t\t\t\ttimes[ i + 1 ] = time;\n\t\t\t\t\ttimes.set( track.times.slice( i + 1 ), i + 2 );\n\n\t\t\t\t\tvalues.set( track.values.slice( 0, ( i + 1 ) * valueSize ), 0 );\n\t\t\t\t\tvalues.set( interpolant.evaluate( time ), ( i + 1 ) * valueSize );\n\t\t\t\t\tvalues.set( track.values.slice( ( i + 1 ) * valueSize ), ( i + 2 ) * valueSize );\n\n\t\t\t\t\tindex = i + 1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttrack.times = times;\n\t\ttrack.values = values;\n\n\t\treturn index;\n\n\t},\n\n\tmergeMorphTargetTracks: function ( clip, root ) {\n\n\t\tconst tracks = [];\n\t\tconst mergedTracks = {};\n\t\tconst sourceTracks = clip.tracks;\n\n\t\tfor ( let i = 0; i < sourceTracks.length; ++ i ) {\n\n\t\t\tlet sourceTrack = sourceTracks[ i ];\n\t\t\tconst sourceTrackBinding = PropertyBinding.parseTrackName( sourceTrack.name );\n\t\t\tconst sourceTrackNode = PropertyBinding.findNode( root, sourceTrackBinding.nodeName );\n\n\t\t\tif ( sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined ) {\n\n\t\t\t\t// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.\n\t\t\t\ttracks.push( sourceTrack );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete\n\t\t\t\t&& sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear ) {\n\n\t\t\t\tif ( sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\t// This should never happen, because glTF morph target animations\n\t\t\t\t\t// affect all targets already.\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.' );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.' );\n\n\t\t\t\tsourceTrack = sourceTrack.clone();\n\t\t\t\tsourceTrack.setInterpolation( InterpolateLinear );\n\n\t\t\t}\n\n\t\t\tconst targetCount = sourceTrackNode.morphTargetInfluences.length;\n\t\t\tconst targetIndex = sourceTrackNode.morphTargetDictionary[ sourceTrackBinding.propertyIndex ];\n\n\t\t\tif ( targetIndex === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex );\n\n\t\t\t}\n\n\t\t\tlet mergedTrack;\n\n\t\t\t// If this is the first time we've seen this object, create a new\n\t\t\t// track to store merged keyframe data for each morph target.\n\t\t\tif ( mergedTracks[ sourceTrackNode.uuid ] === undefined ) {\n\n\t\t\t\tmergedTrack = sourceTrack.clone();\n\n\t\t\t\tconst values = new mergedTrack.ValueBufferType( targetCount * mergedTrack.times.length );\n\n\t\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\t\tvalues[ j * targetCount + targetIndex ] = mergedTrack.values[ j ];\n\n\t\t\t\t}\n\n\t\t\t\t// We need to take into consideration the intended target node\n\t\t\t\t// of our original un-merged morphTarget animation.\n\t\t\t\tmergedTrack.name = ( sourceTrackBinding.nodeName || '' ) + '.morphTargetInfluences';\n\t\t\t\tmergedTrack.values = values;\n\n\t\t\t\tmergedTracks[ sourceTrackNode.uuid ] = mergedTrack;\n\t\t\t\ttracks.push( mergedTrack );\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst sourceInterpolant = sourceTrack.createInterpolant( new sourceTrack.ValueBufferType( 1 ) );\n\n\t\t\tmergedTrack = mergedTracks[ sourceTrackNode.uuid ];\n\n\t\t\t// For every existing keyframe of the merged track, write a (possibly\n\t\t\t// interpolated) value from the source track.\n\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\tmergedTrack.values[ j * targetCount + targetIndex ] = sourceInterpolant.evaluate( mergedTrack.times[ j ] );\n\n\t\t\t}\n\n\t\t\t// For every existing keyframe of the source track, write a (possibly\n\t\t\t// new) keyframe to the merged track. Values from the previous loop may\n\t\t\t// be written again, but keyframes are de-duplicated.\n\t\t\tfor ( let j = 0; j < sourceTrack.times.length; j ++ ) {\n\n\t\t\t\tconst keyframeIndex = this.insertKeyframe( mergedTrack, sourceTrack.times[ j ] );\n\t\t\t\tmergedTrack.values[ keyframeIndex * targetCount + targetIndex ] = sourceTrack.values[ j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\treturn clip;\n\n\t}\n\n};\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst $correlatedObjects = Symbol('correlatedObjects');\nconst $sourceObject = Symbol('sourceObject');\nconst $onUpdate = Symbol('onUpdate');\n/**\n * A SerializableThreeDOMElement is the common primitive of all scene graph\n * elements that have been facaded in the host execution context. It adds\n * a common interface to these elements in support of convenient\n * serializability.\n */\nclass ThreeDOMElement {\n constructor(onUpdate, element, correlatedObjects = null) {\n this[$onUpdate] = onUpdate;\n this[$sourceObject] = element;\n this[$correlatedObjects] = correlatedObjects;\n }\n}\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar _a$3, _b$2;\nconst loader = new ImageLoader();\nconst $threeTextures$1 = Symbol('threeTextures');\nconst $uri = Symbol('uri');\nconst $bufferViewImages = Symbol('bufferViewImages');\n/**\n * Image facade implementation for Three.js textures\n */\nclass Image$1 extends ThreeDOMElement {\n constructor(onUpdate, image, correlatedTextures) {\n super(onUpdate, image, correlatedTextures);\n this[_a$3] = undefined;\n this[_b$2] = new WeakMap();\n if (image.uri != null) {\n this[$uri] = image.uri;\n }\n if (image.bufferView != null) {\n for (const texture of correlatedTextures) {\n this[$bufferViewImages].set(texture, texture.image);\n }\n }\n }\n get [$threeTextures$1]() {\n return this[$correlatedObjects];\n }\n get name() {\n return this[$sourceObject].name || '';\n }\n get uri() {\n return this[$uri];\n }\n get type() {\n return this.uri != null ? 'external' : 'embedded';\n }\n async setURI(uri) {\n this[$uri] = uri;\n const image = await new Promise((resolve, reject) => {\n loader.load(uri, resolve, undefined, reject);\n });\n for (const texture of this[$threeTextures$1]) {\n // If the URI is set to null but the Image had an associated buffer view\n // (this would happen if it started out as embedded), then fall back to\n // the cached object URL created by GLTFLoader:\n if (image == null &&\n this[$sourceObject].bufferView != null) {\n texture.image = this[$bufferViewImages].get(texture);\n }\n else {\n texture.image = image;\n }\n texture.needsUpdate = true;\n }\n this[$onUpdate]();\n }\n}\n_a$3 = $uri, _b$2 = $bufferViewImages;\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst isMinFilter = (() => {\n const minFilterValues = [9728, 9729, 9984, 9985, 9986, 9987];\n return (value) => minFilterValues.indexOf(value) > -1;\n})();\nconst isMagFilter = (() => {\n const magFilterValues = [9728, 9729];\n return (value) => magFilterValues.indexOf(value) > -1;\n})();\nconst isWrapMode = (() => {\n const wrapModes = [33071, 33648, 10497];\n return (value) => wrapModes.indexOf(value) > -1;\n})();\nconst isValidSamplerValue = (property, value) => {\n switch (property) {\n case 'minFilter':\n return isMinFilter(value);\n case 'magFilter':\n return isMagFilter(value);\n case 'wrapS':\n case 'wrapT':\n return isWrapMode(value);\n default:\n throw new Error(`Cannot configure property \"${property}\" on Sampler`);\n }\n};\nconst $threeTextures = Symbol('threeTextures');\nconst $setProperty = Symbol('setProperty');\n/**\n * Sampler facade implementation for Three.js textures\n */\nclass Sampler extends ThreeDOMElement {\n get [$threeTextures]() {\n return this[$correlatedObjects];\n }\n constructor(onUpdate, sampler, correlatedTextures) {\n // These defaults represent a convergence of glTF defaults for wrap mode and\n // Three.js defaults for filters. Per glTF 2.0 spec, a renderer may choose\n // its own defaults for filters.\n // @see https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-sampler\n // @see https://threejs.org/docs/#api/en/textures/Texture\n if (sampler.minFilter == null) {\n sampler.minFilter = 9987;\n }\n if (sampler.magFilter == null) {\n sampler.magFilter = 9729;\n }\n if (sampler.wrapS == null) {\n sampler.wrapS = 10497;\n }\n if (sampler.wrapT == null) {\n sampler.wrapT = 10497;\n }\n super(onUpdate, sampler, correlatedTextures);\n }\n get name() {\n return this[$sourceObject].name || '';\n }\n get minFilter() {\n return this[$sourceObject].minFilter;\n }\n get magFilter() {\n return this[$sourceObject].magFilter;\n }\n get wrapS() {\n return this[$sourceObject].wrapS;\n }\n get wrapT() {\n return this[$sourceObject].wrapT;\n }\n setMinFilter(filter) {\n this[$setProperty]('minFilter', filter);\n }\n setMagFilter(filter) {\n this[$setProperty]('magFilter', filter);\n }\n setWrapS(mode) {\n this[$setProperty]('wrapS', mode);\n }\n setWrapT(mode) {\n this[$setProperty]('wrapT', mode);\n }\n [$setProperty](property, value) {\n const sampler = this[$sourceObject];\n if (isValidSamplerValue(property, value)) {\n sampler[property] = value;\n for (const texture of this[$threeTextures]) {\n texture[property] = value;\n texture.needsUpdate = true;\n }\n }\n this[$onUpdate]();\n }\n}\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst $source = Symbol('source');\nconst $sampler = Symbol('sampler');\n/**\n * Material facade implementation for Three.js materials\n */\nclass Texture extends ThreeDOMElement {\n constructor(onUpdate, gltf, texture, correlatedTextures) {\n super(onUpdate, texture, correlatedTextures);\n const { sampler: samplerIndex, source: imageIndex } = texture;\n const sampler = (gltf.samplers != null && samplerIndex != null) ?\n gltf.samplers[samplerIndex] :\n {};\n this[$sampler] = new Sampler(onUpdate, sampler, correlatedTextures);\n if (gltf.images != null && imageIndex != null) {\n const image = gltf.images[imageIndex];\n if (image != null) {\n this[$source] = new Image$1(onUpdate, image, correlatedTextures);\n }\n }\n }\n get name() {\n return this[$sourceObject].name || '';\n }\n get sampler() {\n return this[$sampler];\n }\n get source() {\n return this[$source];\n }\n}\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst $texture = Symbol('texture');\n/**\n * TextureInfo facade implementation for Three.js materials\n */\nclass TextureInfo extends ThreeDOMElement {\n constructor(onUpdate, gltf, textureInfo, correlatedTextures) {\n super(onUpdate, textureInfo, correlatedTextures);\n const { index: textureIndex } = textureInfo;\n const texture = gltf.textures[textureIndex];\n if (texture != null) {\n this[$texture] = new Texture(onUpdate, gltf, texture, correlatedTextures);\n }\n }\n get texture() {\n return this[$texture];\n }\n}\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar _a$2, _b$1;\nconst $threeMaterials = Symbol('threeMaterials');\nconst $baseColorTexture = Symbol('baseColorTexture');\nconst $metallicRoughnessTexture = Symbol('metallicRoughnessTexture');\n/**\n * PBR material properties facade implementation for Three.js materials\n */\nclass PBRMetallicRoughness extends ThreeDOMElement {\n constructor(onUpdate, gltf, pbrMetallicRoughness, correlatedMaterials) {\n super(onUpdate, pbrMetallicRoughness, correlatedMaterials);\n this[_a$2] = null;\n this[_b$1] = null;\n // Assign glTF default values\n if (pbrMetallicRoughness.baseColorFactor == null) {\n pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];\n }\n if (pbrMetallicRoughness.roughnessFactor == null) {\n pbrMetallicRoughness.roughnessFactor = 0;\n }\n if (pbrMetallicRoughness.metallicFactor == null) {\n pbrMetallicRoughness.metallicFactor = 0;\n }\n const { baseColorTexture, metallicRoughnessTexture } = pbrMetallicRoughness;\n const baseColorTextures = new Set();\n const metallicRoughnessTextures = new Set();\n for (const material of correlatedMaterials) {\n if (baseColorTexture != null && material.map != null) {\n baseColorTextures.add(material.map);\n }\n // NOTE: GLTFLoader users the same texture for metalnessMap and\n // roughnessMap in this case\n // @see https://github.com/mrdoob/three.js/blob/b4473c25816df4a09405c7d887d5c418ef47ee76/examples/js/loaders/GLTFLoader.js#L2173-L2174\n if (metallicRoughnessTexture != null && material.metalnessMap != null) {\n metallicRoughnessTextures.add(material.metalnessMap);\n }\n }\n if (baseColorTextures.size > 0) {\n this[$baseColorTexture] =\n new TextureInfo(onUpdate, gltf, baseColorTexture, baseColorTextures);\n }\n if (metallicRoughnessTextures.size > 0) {\n this[$metallicRoughnessTexture] = new TextureInfo(onUpdate, gltf, metallicRoughnessTexture, metallicRoughnessTextures);\n }\n }\n get [(_a$2 = $baseColorTexture, _b$1 = $metallicRoughnessTexture, $threeMaterials)]() {\n return this[$correlatedObjects];\n }\n get baseColorFactor() {\n return this[$sourceObject].baseColorFactor;\n }\n get metallicFactor() {\n return this[$sourceObject].metallicFactor;\n }\n get roughnessFactor() {\n return this[$sourceObject].roughnessFactor;\n }\n get baseColorTexture() {\n return this[$baseColorTexture];\n }\n get metallicRoughnessTexture() {\n return this[$metallicRoughnessTexture];\n }\n setBaseColorFactor(rgba) {\n for (const material of this[$threeMaterials]) {\n material.color.fromArray(rgba);\n material.opacity = (rgba)[3];\n }\n const pbrMetallicRoughness = this[$sourceObject];\n pbrMetallicRoughness.baseColorFactor = rgba;\n this[$onUpdate]();\n }\n setMetallicFactor(value) {\n for (const material of this[$threeMaterials]) {\n material.metalness = value;\n }\n const pbrMetallicRoughness = this[$sourceObject];\n pbrMetallicRoughness.metallicFactor = value;\n this[$onUpdate]();\n }\n setRoughnessFactor(value) {\n for (const material of this[$threeMaterials]) {\n material.roughness = value;\n }\n const pbrMetallicRoughness = this[$sourceObject];\n pbrMetallicRoughness.roughnessFactor = value;\n this[$onUpdate]();\n }\n}\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar _a$1, _b, _c;\nconst $pbrMetallicRoughness = Symbol('pbrMetallicRoughness');\nconst $normalTexture = Symbol('normalTexture');\nconst $occlusionTexture = Symbol('occlusionTexture');\nconst $emissiveTexture = Symbol('emissiveTexture');\n/**\n * Material facade implementation for Three.js materials\n */\nclass Material extends ThreeDOMElement {\n constructor(onUpdate, gltf, material, correlatedMaterials) {\n super(onUpdate, material, correlatedMaterials);\n this[_a$1] = null;\n this[_b] = null;\n this[_c] = null;\n if (correlatedMaterials == null) {\n return;\n }\n if (material.pbrMetallicRoughness == null) {\n material.pbrMetallicRoughness = {};\n }\n this[$pbrMetallicRoughness] = new PBRMetallicRoughness(onUpdate, gltf, material.pbrMetallicRoughness, correlatedMaterials);\n const { normalTexture, occlusionTexture, emissiveTexture } = material;\n const normalTextures = new Set();\n const occlusionTextures = new Set();\n const emissiveTextures = new Set();\n for (const material of correlatedMaterials) {\n const { normalMap, aoMap, emissiveMap } = material;\n if (normalTexture != null && normalMap != null) {\n normalTextures.add(normalMap);\n }\n if (occlusionTexture != null && aoMap != null) {\n occlusionTextures.add(aoMap);\n }\n if (emissiveTexture != null && emissiveMap != null) {\n emissiveTextures.add(emissiveMap);\n }\n }\n if (normalTextures.size > 0) {\n this[$normalTexture] =\n new TextureInfo(onUpdate, gltf, normalTexture, normalTextures);\n }\n if (occlusionTextures.size > 0) {\n this[$occlusionTexture] =\n new TextureInfo(onUpdate, gltf, occlusionTexture, occlusionTextures);\n }\n if (emissiveTextures.size > 0) {\n this[$emissiveTexture] =\n new TextureInfo(onUpdate, gltf, emissiveTexture, emissiveTextures);\n }\n }\n get name() {\n return this[$sourceObject].name || '';\n }\n get pbrMetallicRoughness() {\n return this[$pbrMetallicRoughness];\n }\n get normalTexture() {\n return this[$normalTexture];\n }\n get occlusionTexture() {\n return this[$occlusionTexture];\n }\n get emissiveTexture() {\n return this[$emissiveTexture];\n }\n get emissiveFactor() {\n return this[$sourceObject].emissiveFactor;\n }\n setEmissiveFactor(rgb) {\n for (const material of this[$correlatedObjects]) {\n material.emissive.fromArray(rgb);\n }\n this[$sourceObject].emissiveFactor = rgb;\n this[$onUpdate]();\n }\n}\n_a$1 = $normalTexture, _b = $occlusionTexture, _c = $emissiveTexture;\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar _a;\nconst $materials = Symbol('materials');\n/**\n * A Model facades the top-level GLTF object returned by Three.js' GLTFLoader.\n * Currently, the model only bothers itself with the materials in the Three.js\n * scene graph.\n */\nclass Model {\n constructor(correlatedSceneGraph, onUpdate = () => { }) {\n this[_a] = [];\n const { gltf, gltfElementMap } = correlatedSceneGraph;\n gltf.materials.forEach(material => {\n this[$materials].push(new Material(onUpdate, gltf, material, gltfElementMap.get(material)));\n });\n }\n /**\n * Materials are listed in the order of the GLTF materials array, plus a\n * default material at the end if one is used.\n *\n * TODO(#1003): How do we handle non-active scenes?\n */\n get materials() {\n return this[$materials];\n }\n}\n_a = $materials;\n\n/* @license\n * Copyright 2020 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __decorate$1 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof undefined === \"function\") r = undefined(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst $currentGLTF = Symbol('currentGLTF');\nconst $model = Symbol('model');\nconst $variants = Symbol('variants');\n/**\n * SceneGraphMixin manages exposes a model API in order to support operations on\n * the scene graph.\n */\nconst SceneGraphMixin = (ModelViewerElement) => {\n var _a, _b, _c;\n class SceneGraphModelViewerElement extends ModelViewerElement {\n constructor() {\n super(...arguments);\n this[_a] = undefined;\n this[_b] = null;\n this[_c] = [];\n this.variantName = undefined;\n this.orientation = '0 0 0';\n this.scale = '1 1 1';\n }\n // Scene-graph API:\n /** @export */\n get model() {\n return this[$model];\n }\n get availableVariants() {\n return this[$variants];\n }\n updated(changedProperties) {\n super.updated(changedProperties);\n if (changedProperties.has('variantName')) {\n const variants = this[$variants];\n const threeGLTF = this[$currentGLTF];\n const { variantName } = this;\n const variantIndex = variants.findIndex((v) => v === variantName);\n if (threeGLTF == null || variantIndex < 0) {\n return;\n }\n const onUpdate = () => {\n this[$needsRender]();\n };\n const updatedMaterials = threeGLTF.correlatedSceneGraph.loadVariant(variantIndex, onUpdate);\n const { gltf, gltfElementMap } = threeGLTF.correlatedSceneGraph;\n for (const index of updatedMaterials) {\n const material = gltf.materials[index];\n this[$model].materials[index] = new Material(onUpdate, gltf, material, gltfElementMap.get(material));\n }\n }\n if (changedProperties.has('orientation') ||\n changedProperties.has('scale')) {\n const { modelContainer } = this[$scene];\n const orientation = parseExpressions(this.orientation)[0]\n .terms;\n const roll = normalizeUnit(orientation[0]).number;\n const pitch = normalizeUnit(orientation[1]).number;\n const yaw = normalizeUnit(orientation[2]).number;\n modelContainer.quaternion.setFromEuler(new Euler(pitch, yaw, roll, 'YXZ'));\n const scale = parseExpressions(this.scale)[0]\n .terms;\n modelContainer.scale.set(scale[0].number, scale[1].number, scale[2].number);\n this[$scene].updateBoundingBox();\n this[$scene].updateShadow();\n this[$renderer].arRenderer.onUpdateScene();\n this[$needsRender]();\n }\n }\n [(_a = $model, _b = $currentGLTF, _c = $variants, $onModelLoad)]() {\n super[$onModelLoad]();\n this[$variants] = [];\n const { currentGLTF } = this[$scene];\n if (currentGLTF != null) {\n const { correlatedSceneGraph } = currentGLTF;\n if (correlatedSceneGraph != null &&\n currentGLTF !== this[$currentGLTF]) {\n this[$model] = new Model(correlatedSceneGraph, () => {\n this[$needsRender]();\n });\n }\n // KHR_materials_variants extension spec:\n // https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_variants\n const { gltfExtensions } = currentGLTF.userData;\n if (gltfExtensions != null) {\n const extension = gltfExtensions['KHR_materials_variants'];\n if (extension != null) {\n this[$variants] =\n extension.variants.map(variant => variant.name);\n this.requestUpdate('variantName');\n }\n }\n }\n this[$currentGLTF] = currentGLTF;\n // TODO: remove this event, as it is synonymous with the load event.\n this.dispatchEvent(new CustomEvent('scene-graph-ready'));\n }\n /** @export */\n async exportScene(options) {\n const scene = this[$scene];\n return new Promise(async (resolve) => {\n // Defaults\n const opts = {\n binary: true,\n onlyVisible: true,\n maxTextureSize: Infinity,\n forcePowerOfTwoTextures: false,\n includeCustomExtensions: false,\n embedImages: true\n };\n Object.assign(opts, options);\n // Not configurable\n opts.animations = scene.animations;\n opts.truncateDrawRange = true;\n const shadow = scene.shadow;\n let visible = false;\n // Remove shadow from export\n if (shadow != null) {\n visible = shadow.visible;\n shadow.visible = false;\n }\n const exporter = new GLTFExporter();\n exporter.parse(scene.modelContainer, (gltf) => {\n return resolve(new Blob([opts.binary ? gltf : JSON.stringify(gltf)], {\n type: opts.binary ? 'application/octet-stream' :\n 'application/json'\n }));\n }, opts);\n if (shadow != null) {\n shadow.visible = visible;\n }\n });\n }\n }\n __decorate$1([\n property({ type: String, attribute: 'variant-name' })\n ], SceneGraphModelViewerElement.prototype, \"variantName\", void 0);\n __decorate$1([\n property({ type: String, attribute: 'orientation' })\n ], SceneGraphModelViewerElement.prototype, \"orientation\", void 0);\n __decorate$1([\n property({ type: String, attribute: 'scale' })\n ], SceneGraphModelViewerElement.prototype, \"scale\", void 0);\n return SceneGraphModelViewerElement;\n};\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof undefined === \"function\") r = undefined(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// How much the model will rotate per\n// second in radians:\nconst DEFAULT_ROTATION_SPEED = Math.PI / 32;\nconst AUTO_ROTATE_DELAY_DEFAULT = 3000;\nconst rotationRateIntrinsics = {\n basis: [degreesToRadians(numberNode(DEFAULT_ROTATION_SPEED, 'rad'))],\n keywords: { auto: [null] }\n};\nconst $autoRotateStartTime = Symbol('autoRotateStartTime');\nconst $radiansPerSecond = Symbol('radiansPerSecond');\nconst $syncRotationRate = Symbol('syncRotationRate');\nconst $onCameraChange = Symbol('onCameraChange');\nconst StagingMixin = (ModelViewerElement) => {\n var _a, _b, _c;\n class StagingModelViewerElement extends ModelViewerElement {\n constructor() {\n super(...arguments);\n this.autoRotate = false;\n this.autoRotateDelay = AUTO_ROTATE_DELAY_DEFAULT;\n this.rotationPerSecond = 'auto';\n this[_a] = performance.now();\n this[_b] = 0;\n this[_c] = (event) => {\n if (!this.autoRotate) {\n return;\n }\n if (event.detail.source === 'user-interaction') {\n this[$autoRotateStartTime] = performance.now();\n }\n };\n }\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('camera-change', this[$onCameraChange]);\n this[$autoRotateStartTime] = performance.now();\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('camera-change', this[$onCameraChange]);\n this[$autoRotateStartTime] = performance.now();\n }\n updated(changedProperties) {\n super.updated(changedProperties);\n if (changedProperties.has('autoRotate')) {\n this[$autoRotateStartTime] = performance.now();\n }\n }\n [(_a = $autoRotateStartTime, _b = $radiansPerSecond, $syncRotationRate)](style) {\n this[$radiansPerSecond] = style[0];\n }\n [$tick](time, delta) {\n super[$tick](time, delta);\n if (!this.autoRotate || !this[$hasTransitioned]() ||\n this[$renderer].isPresenting) {\n return;\n }\n const rotationDelta = Math.min(delta, time - this[$autoRotateStartTime] - this.autoRotateDelay);\n if (rotationDelta > 0) {\n this[$scene].yaw = this.turntableRotation +\n this[$radiansPerSecond] * rotationDelta * 0.001;\n }\n }\n get turntableRotation() {\n return this[$scene].yaw;\n }\n resetTurntableRotation(theta = 0) {\n this[$scene].yaw = theta;\n }\n }\n _c = $onCameraChange;\n __decorate([\n property({ type: Boolean, attribute: 'auto-rotate' })\n ], StagingModelViewerElement.prototype, \"autoRotate\", void 0);\n __decorate([\n property({ type: Number, attribute: 'auto-rotate-delay' })\n ], StagingModelViewerElement.prototype, \"autoRotateDelay\", void 0);\n __decorate([\n style({ intrinsics: rotationRateIntrinsics, updateHandler: $syncRotationRate }),\n property({ type: String, attribute: 'rotation-per-second' })\n ], StagingModelViewerElement.prototype, \"rotationPerSecond\", void 0);\n return StagingModelViewerElement;\n};\n\n/**\n * This mixin function is designed to be applied to a class that inherits\n * from HTMLElement. It makes it easy for a custom element to coordinate with\n * the :focus-visible polyfill.\n *\n * NOTE(cdata): The code here was adapted from an example proposed with the\n * introduction of ShadowDOM support in the :focus-visible polyfill.\n *\n * @see https://github.com/WICG/focus-visible/pull/196\n * @param {Function} SuperClass The base class implementation to decorate with\n * implementation that coordinates with the :focus-visible polyfill\n */\nconst FocusVisiblePolyfillMixin = (SuperClass) => {\n var _a;\n const coordinateWithPolyfill = (instance) => {\n // If there is no shadow root, there is no need to coordinate with\n // the polyfill. If we already coordinated with the polyfill, we can\n // skip subsequent invokcations:\n if (instance.shadowRoot == null ||\n instance.hasAttribute('data-js-focus-visible')) {\n return () => { };\n }\n // The polyfill might already be loaded. If so, we can apply it to\n // the shadow root immediately:\n if (self.applyFocusVisiblePolyfill) {\n self.applyFocusVisiblePolyfill(instance.shadowRoot);\n }\n else {\n const coordinationHandler = () => {\n self.applyFocusVisiblePolyfill(instance.shadowRoot);\n };\n // Otherwise, wait for the polyfill to be loaded lazily. It might\n // never be loaded, but if it is then we can apply it to the\n // shadow root at the appropriate time by waiting for the ready\n // event:\n self.addEventListener('focus-visible-polyfill-ready', coordinationHandler, { once: true });\n return () => {\n self.removeEventListener('focus-visible-polyfill-ready', coordinationHandler);\n };\n }\n return () => { };\n };\n const $endPolyfillCoordination = Symbol('endPolyfillCoordination');\n // IE11 doesn't natively support custom elements or JavaScript class\n // syntax The mixin implementation assumes that the user will take the\n // appropriate steps to support both:\n class FocusVisibleCoordinator extends SuperClass {\n constructor() {\n super(...arguments);\n this[_a] = null;\n }\n // Attempt to coordinate with the polyfill when connected to the\n // document:\n connectedCallback() {\n super.connectedCallback && super.connectedCallback();\n if (this[$endPolyfillCoordination] == null) {\n this[$endPolyfillCoordination] = coordinateWithPolyfill(this);\n }\n }\n disconnectedCallback() {\n super.disconnectedCallback && super.disconnectedCallback();\n // It's important to remove the polyfill event listener when we\n // disconnect, otherwise we will leak the whole element via window:\n if (this[$endPolyfillCoordination] != null) {\n this[$endPolyfillCoordination]();\n this[$endPolyfillCoordination] = null;\n }\n }\n }\n _a = $endPolyfillCoordination;\n return FocusVisibleCoordinator;\n};\n\n/* @license\n * Copyright 2019 Google LLC. All Rights Reserved.\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 * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Uncomment these lines to export PMREM textures in Glitch:\n// export {default as TextureUtils} from './three-components/TextureUtils';\n// export * from 'three';\nconst ModelViewerElement = AnnotationMixin(SceneGraphMixin(StagingMixin(EnvironmentMixin(ControlsMixin(ARMixin(LoadingMixin(AnimationMixin(FocusVisiblePolyfillMixin(ModelViewerElementBase)))))))));\ncustomElements.define('model-viewer', ModelViewerElement);\n\nexport { ModelViewerElement };\n//# sourceMappingURL=model-viewer.js.map\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","import setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nimport isNativeReflectConstruct from \"@babel/runtime/helpers/esm/isNativeReflectConstruct\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nimport isNativeFunction from \"@babel/runtime/helpers/esm/isNativeFunction\";\nimport construct from \"@babel/runtime/helpers/esm/construct\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","/** @license React v17.0.2\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=require(\"object-assign\"),n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116;\nif(\"function\"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w(\"react.element\");p=w(\"react.portal\");exports.Fragment=w(\"react.fragment\");exports.StrictMode=w(\"react.strict_mode\");exports.Profiler=w(\"react.profiler\");q=w(\"react.provider\");r=w(\"react.context\");t=w(\"react.forward_ref\");exports.Suspense=w(\"react.suspense\");u=w(\"react.memo\");v=w(\"react.lazy\")}var x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){if(null===a||\"object\"!==typeof a)return null;a=x&&a[x]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function z(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function B(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var D={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){D[a]=new B(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];D[b]=new B(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){D[a]=new B(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){D[a]=new B(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){D[a]=new B(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){D[a]=new B(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){D[a]=new B(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){D[a]=new B(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){D[a]=new B(a,5,!1,a.toLowerCase(),null,!1,!1)});var oa=/[\\-:]([a-z])/g;function pa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(oa,\npa);D[b]=new B(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!1,!1)});\nD.xlinkHref=new B(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction qa(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2h||e[g]!==f[h])return\"\\n\"+e[g].replace(\" at new \",\" at \");while(1<=g&&0<=h)}break}}}finally{Oa=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Na(a):\"\"}\nfunction Qa(a){switch(a.tag){case 5:return Na(a.type);case 16:return Na(\"Lazy\");case 13:return Na(\"Suspense\");case 19:return Na(\"SuspenseList\");case 0:case 2:case 15:return a=Pa(a.type,!1),a;case 11:return a=Pa(a.type.render,!1),a;case 22:return a=Pa(a.type._render,!1),a;case 1:return a=Pa(a.type,!0),a;default:return\"\"}}\nfunction Ra(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ua:return\"Fragment\";case ta:return\"Portal\";case xa:return\"Profiler\";case wa:return\"StrictMode\";case Ba:return\"Suspense\";case Ca:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case za:return(a.displayName||\"Context\")+\".Consumer\";case ya:return(a._context.displayName||\"Context\")+\".Provider\";case Aa:var b=a.render;b=b.displayName||b.name||\"\";\nreturn a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\"ForwardRef\");case Da:return Ra(a.type);case Fa:return Ra(a._render);case Ea:b=a._payload;a=a._init;try{return Ra(a(b))}catch(c){}}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return m({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function $a(a,b){b=b.checked;null!=b&&qa(a,\"checked\",b,!1)}\nfunction ab(a,b){$a(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?bb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&bb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction cb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction bb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function db(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function eb(a,b){a=m({children:void 0},b);if(b=db(b.children))a.children=b;return a}\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e=c.length))throw Error(y(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var kb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction lb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function mb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?lb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar nb,ob=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==kb.svg||\"innerHTML\"in a)a.innerHTML=b;else{nb=nb||document.createElement(\"div\");nb.innerHTML=\"\"+b.valueOf().toString()+\"\";for(b=nb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction pb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar qb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},rb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(qb).forEach(function(a){rb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);qb[b]=qb[a]})});function sb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||qb.hasOwnProperty(a)&&qb[a]?(\"\"+b).trim():b+\"px\"}\nfunction tb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=sb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var ub=m({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction vb(a,b){if(b){if(ub[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(y(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(y(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(y(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(y(62));}}\nfunction wb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(y(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;ad?0:1<c;c++)b.push(a);return b}\nfunction $c(a,b,c){a.pendingLanes|=b;var d=b-1;a.suspendedLanes&=d;a.pingedLanes&=d;a=a.eventTimes;b=31-Vc(b);a[b]=c}var Vc=Math.clz32?Math.clz32:ad,bd=Math.log,cd=Math.LN2;function ad(a){return 0===a?32:31-(bd(a)/cd|0)|0}var dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function gd(a,b,c,d){Kb||Ib();var e=hd,f=Kb;Kb=!0;try{Hb(e,a,b,c,d)}finally{(Kb=f)||Mb()}}function id(a,b,c,d){ed(dd,hd.bind(null,a,b,c,d))}\nfunction hd(a,b,c,d){if(fd){var e;if((e=0===(b&4))&&0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Ke(c)}}function Me(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Me(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Ne(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Oe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nvar Pe=fa&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Oe(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Je(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Af||(a.current=zf[Af],zf[Af]=null,Af--)}function I(a,b){Af++;zf[Af]=a.current;a.current=b}var Cf={},M=Bf(Cf),N=Bf(!1),Df=Cf;\nfunction Ef(a,b){var c=a.type.contextTypes;if(!c)return Cf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function Ff(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Gf(){H(N);H(M)}function Hf(a,b,c){if(M.current!==Cf)throw Error(y(168));I(M,b);I(N,c)}\nfunction If(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(y(108,Ra(b)||\"Unknown\",e));return m({},c,d)}function Jf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Cf;Df=M.current;I(M,a);I(N,N.current);return!0}function Kf(a,b,c){var d=a.stateNode;if(!d)throw Error(y(169));c?(a=If(a,b,Df),d.__reactInternalMemoizedMergedChildContext=a,H(N),H(M),I(M,a)):H(N);I(N,c)}\nvar Lf=null,Mf=null,Nf=r.unstable_runWithPriority,Of=r.unstable_scheduleCallback,Pf=r.unstable_cancelCallback,Qf=r.unstable_shouldYield,Rf=r.unstable_requestPaint,Sf=r.unstable_now,Tf=r.unstable_getCurrentPriorityLevel,Uf=r.unstable_ImmediatePriority,Vf=r.unstable_UserBlockingPriority,Wf=r.unstable_NormalPriority,Xf=r.unstable_LowPriority,Yf=r.unstable_IdlePriority,Zf={},$f=void 0!==Rf?Rf:function(){},ag=null,bg=null,cg=!1,dg=Sf(),O=1E4>dg?Sf:function(){return Sf()-dg};\nfunction eg(){switch(Tf()){case Uf:return 99;case Vf:return 98;case Wf:return 97;case Xf:return 96;case Yf:return 95;default:throw Error(y(332));}}function fg(a){switch(a){case 99:return Uf;case 98:return Vf;case 97:return Wf;case 96:return Xf;case 95:return Yf;default:throw Error(y(332));}}function gg(a,b){a=fg(a);return Nf(a,b)}function hg(a,b,c){a=fg(a);return Of(a,b,c)}function ig(){if(null!==bg){var a=bg;bg=null;Pf(a)}jg()}\nfunction jg(){if(!cg&&null!==ag){cg=!0;var a=0;try{var b=ag;gg(99,function(){for(;az?(q=u,u=null):q=u.sibling;var n=p(e,u,h[z],k);if(null===n){null===u&&(u=q);break}a&&u&&null===\nn.alternate&&b(e,u);g=f(n,g,z);null===t?l=n:t.sibling=n;t=n;u=q}if(z===h.length)return c(e,u),l;if(null===u){for(;zz?(q=u,u=null):q=u.sibling;var w=p(e,u,n.value,k);if(null===w){null===u&&(u=q);break}a&&u&&null===w.alternate&&b(e,u);g=f(w,g,z);null===t?l=w:t.sibling=w;t=w;u=q}if(n.done)return c(e,u),l;if(null===u){for(;!n.done;z++,n=h.next())n=A(e,n.value,k),null!==n&&(g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);return l}for(u=d(e,u);!n.done;z++,n=h.next())n=C(u,e,z,n.value,k),null!==n&&(a&&null!==n.alternate&&\nu.delete(null===n.key?z:n.key),g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);a&&u.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ua&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case sa:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ua){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,k.sibling);\nd=e(k,f.props);d.ref=Qg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ua?(d=Xg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Vg(f.type,f.key,f.props,null,a.mode,h),h.ref=Qg(a,d,f),h.return=a,a=h)}return g(a);case ta:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=\nWg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Ug(f,a.mode,h),d.return=a,a=d),g(a);if(Pg(f))return x(a,d,f,h);if(La(f))return w(a,d,f,h);l&&Rg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 22:case 0:case 11:case 15:throw Error(y(152,Ra(a.type)||\"Component\"));}return c(a,d)}}var Yg=Sg(!0),Zg=Sg(!1),$g={},ah=Bf($g),bh=Bf($g),ch=Bf($g);\nfunction dh(a){if(a===$g)throw Error(y(174));return a}function eh(a,b){I(ch,b);I(bh,a);I(ah,$g);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:mb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=mb(b,a)}H(ah);I(ah,b)}function fh(){H(ah);H(bh);H(ch)}function gh(a){dh(ch.current);var b=dh(ah.current);var c=mb(b,a.type);b!==c&&(I(bh,a),I(ah,c))}function hh(a){bh.current===a&&(H(ah),H(bh))}var P=Bf(0);\nfunction ih(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var jh=null,kh=null,lh=!1;\nfunction mh(a,b){var c=nh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.flags=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function oh(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction ph(a){if(lh){var b=kh;if(b){var c=b;if(!oh(a,b)){b=rf(c.nextSibling);if(!b||!oh(a,b)){a.flags=a.flags&-1025|2;lh=!1;jh=a;return}mh(jh,c)}jh=a;kh=rf(b.firstChild)}else a.flags=a.flags&-1025|2,lh=!1,jh=a}}function qh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;jh=a}\nfunction rh(a){if(a!==jh)return!1;if(!lh)return qh(a),lh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!nf(b,a.memoizedProps))for(b=kh;b;)mh(a,b),b=rf(b.nextSibling);qh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(y(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){kh=rf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}kh=null}}else kh=jh?rf(a.stateNode.nextSibling):null;return!0}\nfunction sh(){kh=jh=null;lh=!1}var th=[];function uh(){for(var a=0;af))throw Error(y(301));f+=1;T=S=null;b.updateQueue=null;vh.current=Fh;a=c(d,e)}while(zh)}vh.current=Gh;b=null!==S&&null!==S.next;xh=0;T=S=R=null;yh=!1;if(b)throw Error(y(300));return a}function Hh(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===T?R.memoizedState=T=a:T=T.next=a;return T}\nfunction Ih(){if(null===S){var a=R.alternate;a=null!==a?a.memoizedState:null}else a=S.next;var b=null===T?R.memoizedState:T.next;if(null!==b)T=b,S=a;else{if(null===a)throw Error(y(310));S=a;a={memoizedState:S.memoizedState,baseState:S.baseState,baseQueue:S.baseQueue,queue:S.queue,next:null};null===T?R.memoizedState=T=a:T=T.next=a}return T}function Jh(a,b){return\"function\"===typeof b?b(a):b}\nfunction Kh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=S,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.lane;if((xh&l)===l)null!==h&&(h=h.next={lane:0,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),d=k.eagerReducer===a?k.eagerState:a(d,k.action);else{var n={lane:l,action:k.action,eagerReducer:k.eagerReducer,\neagerState:k.eagerState,next:null};null===h?(g=h=n,f=d):h=h.next=n;R.lanes|=l;Dg|=l}k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;He(d,b.memoizedState)||(ug=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction Lh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(ug=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction Mh(a,b,c){var d=b._getVersion;d=d(b._source);var e=b._workInProgressVersionPrimary;if(null!==e)a=e===d;else if(a=a.mutableReadLanes,a=(xh&a)===a)b._workInProgressVersionPrimary=d,th.push(b);if(a)return c(b._source);th.push(b);throw Error(y(350));}\nfunction Nh(a,b,c,d){var e=U;if(null===e)throw Error(y(349));var f=b._getVersion,g=f(b._source),h=vh.current,k=h.useState(function(){return Mh(e,b,c)}),l=k[1],n=k[0];k=T;var A=a.memoizedState,p=A.refs,C=p.getSnapshot,x=A.source;A=A.subscribe;var w=R;a.memoizedState={refs:p,source:b,subscribe:d};h.useEffect(function(){p.getSnapshot=c;p.setSnapshot=l;var a=f(b._source);if(!He(g,a)){a=c(b._source);He(n,a)||(l(a),a=Ig(w),e.mutableReadLanes|=a&e.pendingLanes);a=e.mutableReadLanes;e.entangledLanes|=a;for(var d=\ne.entanglements,h=a;0c?98:c,function(){a(!0)});gg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[wf]=b;a[xf]=d;Bi(a,b,!1,!1);b.stateNode=a;g=wb(c,d);switch(c){case \"dialog\":G(\"cancel\",a);G(\"close\",a);\ne=d;break;case \"iframe\":case \"object\":case \"embed\":G(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eJi&&(b.flags|=64,f=!0,Fi(d,!1),b.lanes=33554432)}else{if(!f)if(a=ih(g),null!==a){if(b.flags|=64,f=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Fi(d,!0),null===d.tail&&\"hidden\"===d.tailMode&&!g.alternate&&!lh)return b=b.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*O()-d.renderingStartTime>Ji&&1073741824!==c&&(b.flags|=\n64,f=!0,Fi(d,!1),b.lanes=33554432);d.isBackwards?(g.sibling=b.child,b.child=g):(c=d.last,null!==c?c.sibling=g:b.child=g,d.last=g)}return null!==d.tail?(c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=O(),c.sibling=null,b=P.current,I(P,f?b&1|2:b&1),c):null;case 23:case 24:return Ki(),null!==a&&null!==a.memoizedState!==(null!==b.memoizedState)&&\"unstable-defer-without-hiding\"!==d.mode&&(b.flags|=4),null}throw Error(y(156,b.tag));}\nfunction Li(a){switch(a.tag){case 1:Ff(a.type)&&Gf();var b=a.flags;return b&4096?(a.flags=b&-4097|64,a):null;case 3:fh();H(N);H(M);uh();b=a.flags;if(0!==(b&64))throw Error(y(285));a.flags=b&-4097|64;return a;case 5:return hh(a),null;case 13:return H(P),b=a.flags,b&4096?(a.flags=b&-4097|64,a):null;case 19:return H(P),null;case 4:return fh(),null;case 10:return rg(a),null;case 23:case 24:return Ki(),null;default:return null}}\nfunction Mi(a,b){try{var c=\"\",d=b;do c+=Qa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e}}function Ni(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Oi=\"function\"===typeof WeakMap?WeakMap:Map;function Pi(a,b,c){c=zg(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Qi||(Qi=!0,Ri=d);Ni(a,b)};return c}\nfunction Si(a,b,c){c=zg(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Ni(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===Ti?Ti=new Set([this]):Ti.add(this),Ni(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}var Ui=\"function\"===typeof WeakSet?WeakSet:Set;\nfunction Vi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Wi(a,c)}else b.current=null}function Xi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.flags&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:lg(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:b.flags&256&&qf(b.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(y(163));}\nfunction Yi(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{if(3===(a.tag&3)){var d=a.create;a.destroy=d()}a=a.next}while(a!==b)}b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{var e=a;d=e.next;e=e.tag;0!==(e&4)&&0!==(e&1)&&(Zi(c,a),$i(c,a));a=d}while(a!==b)}return;case 1:a=c.stateNode;c.flags&4&&(null===b?a.componentDidMount():(d=c.elementType===c.type?b.memoizedProps:lg(c.type,b.memoizedProps),a.componentDidUpdate(d,\nb.memoizedState,a.__reactInternalSnapshotBeforeUpdate)));b=c.updateQueue;null!==b&&Eg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Eg(c,b,a)}return;case 5:a=c.stateNode;null===b&&c.flags&4&&mf(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Cc(c))));\nreturn;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(y(163));}\nfunction aj(a,b){for(var c=a;;){if(5===c.tag){var d=c.stateNode;if(b)d=d.style,\"function\"===typeof d.setProperty?d.setProperty(\"display\",\"none\",\"important\"):d.display=\"none\";else{d=c.stateNode;var e=c.memoizedProps.style;e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null;d.style.display=sb(\"display\",e)}}else if(6===c.tag)c.stateNode.nodeValue=b?\"\":c.memoizedProps;else if((23!==c.tag&&24!==c.tag||null===c.memoizedState||c===a)&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===\na)break;for(;null===c.sibling;){if(null===c.return||c.return===a)return;c=c.return}c.sibling.return=c.return;c=c.sibling}}\nfunction bj(a,b){if(Mf&&\"function\"===typeof Mf.onCommitFiberUnmount)try{Mf.onCommitFiberUnmount(Lf,b)}catch(f){}switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var c=a=a.next;do{var d=c,e=d.destroy;d=d.tag;if(void 0!==e)if(0!==(d&4))Zi(b,c);else{d=b;try{e()}catch(f){Wi(d,f)}}c=c.next}while(c!==a)}break;case 1:Vi(b);a=b.stateNode;if(\"function\"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(f){Wi(b,\nf)}break;case 5:Vi(b);break;case 4:cj(a,b)}}function dj(a){a.alternate=null;a.child=null;a.dependencies=null;a.firstEffect=null;a.lastEffect=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.return=null;a.updateQueue=null}function ej(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction fj(a){a:{for(var b=a.return;null!==b;){if(ej(b))break a;b=b.return}throw Error(y(160));}var c=b;b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(y(161));}c.flags&16&&(pb(b,\"\"),c.flags&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||ej(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.flags&2)continue b;if(null===\nc.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.flags&2)){c=c.stateNode;break a}}d?gj(a,c,b):hj(a,c,b)}\nfunction gj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=jf));else if(4!==d&&(a=a.child,null!==a))for(gj(a,b,c),a=a.sibling;null!==a;)gj(a,b,c),a=a.sibling}\nfunction hj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(hj(a,b,c),a=a.sibling;null!==a;)hj(a,b,c),a=a.sibling}\nfunction cj(a,b){for(var c=b,d=!1,e,f;;){if(!d){d=c.return;a:for(;;){if(null===d)throw Error(y(160));e=d.stateNode;switch(d.tag){case 5:f=!1;break a;case 3:e=e.containerInfo;f=!0;break a;case 4:e=e.containerInfo;f=!0;break a}d=d.return}d=!0}if(5===c.tag||6===c.tag){a:for(var g=a,h=c,k=h;;)if(bj(g,k),null!==k.child&&4!==k.tag)k.child.return=k,k=k.child;else{if(k===h)break a;for(;null===k.sibling;){if(null===k.return||k.return===h)break a;k=k.return}k.sibling.return=k.return;k=k.sibling}f?(g=e,h=c.stateNode,\n8===g.nodeType?g.parentNode.removeChild(h):g.removeChild(h)):e.removeChild(c.stateNode)}else if(4===c.tag){if(null!==c.child){e=c.stateNode.containerInfo;f=!0;c.child.return=c;c=c.child;continue}}else if(bj(a,c),null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return;4===c.tag&&(d=!1)}c.sibling.return=c.return;c=c.sibling}}\nfunction ij(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:var c=b.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do 3===(d.tag&3)&&(a=d.destroy,d.destroy=void 0,void 0!==a&&a()),d=d.next;while(d!==c)}return;case 1:return;case 5:c=b.stateNode;if(null!=c){d=b.memoizedProps;var e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[xf]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&$a(c,d);wb(a,e);b=wb(a,d);for(e=0;ee&&(e=g);c&=~f}c=e;c=O()-c;c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3E3>c?3E3:4320>\nc?4320:1960*nj(c/1960))-c;if(10 component higher in the tree to provide a loading indicator or placeholder to display.\")}5!==V&&(V=2);k=Mi(k,h);p=\ng;do{switch(p.tag){case 3:f=k;p.flags|=4096;b&=-b;p.lanes|=b;var J=Pi(p,f,b);Bg(p,J);break a;case 1:f=k;var K=p.type,Q=p.stateNode;if(0===(p.flags&64)&&(\"function\"===typeof K.getDerivedStateFromError||null!==Q&&\"function\"===typeof Q.componentDidCatch&&(null===Ti||!Ti.has(Q)))){p.flags|=4096;b&=-b;p.lanes|=b;var L=Si(p,f,b);Bg(p,L);break a}}p=p.return}while(null!==p)}Zj(c)}catch(va){b=va;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}\nfunction Pj(){var a=oj.current;oj.current=Gh;return null===a?Gh:a}function Tj(a,b){var c=X;X|=16;var d=Pj();U===a&&W===b||Qj(a,b);do try{ak();break}catch(e){Sj(a,e)}while(1);qg();X=c;oj.current=d;if(null!==Y)throw Error(y(261));U=null;W=0;return V}function ak(){for(;null!==Y;)bk(Y)}function Rj(){for(;null!==Y&&!Qf();)bk(Y)}function bk(a){var b=ck(a.alternate,a,qj);a.memoizedProps=a.pendingProps;null===b?Zj(a):Y=b;pj.current=null}\nfunction Zj(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&2048)){c=Gi(c,b,qj);if(null!==c){Y=c;return}c=b;if(24!==c.tag&&23!==c.tag||null===c.memoizedState||0!==(qj&1073741824)||0===(c.mode&4)){for(var d=0,e=c.child;null!==e;)d|=e.lanes|e.childLanes,e=e.sibling;c.childLanes=d}null!==a&&0===(a.flags&2048)&&(null===a.firstEffect&&(a.firstEffect=b.firstEffect),null!==b.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=b.firstEffect),a.lastEffect=b.lastEffect),1g&&(h=g,g=J,J=h),h=Le(t,J),f=Le(t,g),h&&f&&(1!==v.rangeCount||v.anchorNode!==h.node||v.anchorOffset!==h.offset||v.focusNode!==f.node||v.focusOffset!==f.offset)&&(q=q.createRange(),q.setStart(h.node,h.offset),v.removeAllRanges(),J>g?(v.addRange(q),v.extend(f.node,f.offset)):(q.setEnd(f.node,f.offset),v.addRange(q))))));q=[];for(v=t;v=v.parentNode;)1===v.nodeType&&q.push({element:v,left:v.scrollLeft,top:v.scrollTop});\"function\"===typeof t.focus&&t.focus();for(t=\n0;tO()-jj?Qj(a,0):uj|=c);Mj(a,b)}function lj(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=a.mode,0===(b&2)?b=1:0===(b&4)?b=99===eg()?1:2:(0===Gj&&(Gj=tj),b=Yc(62914560&~Gj),0===b&&(b=4194304)));c=Hg();a=Kj(a,b);null!==a&&($c(a,b,c),Mj(a,c))}var ck;\nck=function(a,b,c){var d=b.lanes;if(null!==a)if(a.memoizedProps!==b.pendingProps||N.current)ug=!0;else if(0!==(c&d))ug=0!==(a.flags&16384)?!0:!1;else{ug=!1;switch(b.tag){case 3:ri(b);sh();break;case 5:gh(b);break;case 1:Ff(b.type)&&Jf(b);break;case 4:eh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;var e=b.type._context;I(mg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){if(0!==(c&b.child.childLanes))return ti(a,b,c);I(P,P.current&1);b=hi(a,b,c);return null!==\nb?b.sibling:null}I(P,P.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&64)){if(d)return Ai(a,b,c);b.flags|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);I(P,P.current);if(d)break;else return null;case 23:case 24:return b.lanes=0,mi(a,b,c)}return hi(a,b,c)}else ug=!1;b.lanes=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=Ef(b,M.current);tg(b,c);e=Ch(null,b,d,a,e,c);b.flags|=1;if(\"object\"===\ntypeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(Ff(d)){var f=!0;Jf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;xg(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Gg(b,d,g,a);e.updater=Kg;b.stateNode=e;e._reactInternals=b;Og(b,d,a,c);b=qi(null,b,d,!0,f,c)}else b.tag=0,fi(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);\na=b.pendingProps;f=e._init;e=f(e._payload);b.type=e;f=b.tag=hk(e);a=lg(e,a);switch(f){case 0:b=li(null,b,e,a,c);break a;case 1:b=pi(null,b,e,a,c);break a;case 11:b=gi(null,b,e,a,c);break a;case 14:b=ii(null,b,e,lg(e.type,a),d,c);break a}throw Error(y(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),li(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),pi(a,b,d,e,c);case 3:ri(b);d=b.updateQueue;if(null===a||null===d)throw Error(y(282));\nd=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;yg(a,b);Cg(b,d,null,c);d=b.memoizedState.element;if(d===e)sh(),b=hi(a,b,c);else{e=b.stateNode;if(f=e.hydrate)kh=rf(b.stateNode.containerInfo.firstChild),jh=b,f=lh=!0;if(f){a=e.mutableSourceEagerHydrationData;if(null!=a)for(e=0;e=\nE};k=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0I(n,c))void 0!==r&&0>I(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>I(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function I(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var L=[],M=[],N=1,O=null,P=3,Q=!1,R=!1,S=!1;\nfunction T(a){for(var b=J(M);null!==b;){if(null===b.callback)K(M);else if(b.startTime<=a)K(M),b.sortIndex=b.expirationTime,H(L,b);else break;b=J(M)}}function U(a){S=!1;T(a);if(!R)if(null!==J(L))R=!0,f(V);else{var b=J(M);null!==b&&g(U,b.startTime-a)}}\nfunction V(a,b){R=!1;S&&(S=!1,h());Q=!0;var c=P;try{T(b);for(O=J(L);null!==O&&(!(O.expirationTime>b)||a&&!exports.unstable_shouldYield());){var d=O.callback;if(\"function\"===typeof d){O.callback=null;P=O.priorityLevel;var e=d(O.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?O.callback=e:O===J(L)&&K(L);T(b)}else K(L);O=J(L)}if(null!==O)var m=!0;else{var n=J(M);null!==n&&g(U,n.startTime-b);m=!1}return m}finally{O=null,P=c,Q=!1}}var W=k;exports.unstable_IdlePriority=5;\nexports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){R||Q||(R=!0,f(V))};exports.unstable_getCurrentPriorityLevel=function(){return P};exports.unstable_getFirstCallbackNode=function(){return J(L)};\nexports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P}var c=P;P=b;try{return a()}finally{P=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=W;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=P;P=a;try{return b()}finally{P=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0d?(a.sortIndex=c,H(M,a),null===J(L)&&a===J(M)&&(S?h():S=!0,g(U,c-d))):(a.sortIndex=e,H(L,a),R||Q||(R=!0,f(V)));return a};\nexports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c}}};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","/** @license React v17.0.2\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';require(\"object-assign\");var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n"],"sourceRoot":""}