@predy-js/render-interface 0.1.68-beta.3 → 0.1.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../src/common/console.ts","../../types/constants.ts","../../types/RenderPass.ts","../../types/Texture.ts","../../types/GPUBuffer.ts","../../src/webgl/constants.ts","../../types/ShaderLibrary.ts","../../src/common/utils.ts","../../src/render/RenderFrameInternal.ts","../../src/render/MarsSemanticMap.ts","../../src/render/MarsRenderFrame.ts","../../types/GPUCapability.ts","../../src/webgl/GLGPUBuffer.ts","../../src/webgl/WebGLState.ts","../../src/common/raf.ts","../../src/webgl/glType.ts","../../src/webgl/GLUniformUtils.ts","../../src/webgl/GLProgram.ts","../../src/webgl/GLShaderLibrary.ts","../../src/common/env.ts","../../src/webgl/GLGPUCapability.ts","../../src/webgl/GLTexture.ts","../../src/webgl/GLGPURenderer.ts","../../src/render/MarsGPUCapability.ts","../../types/Canvas.ts","../../types/native/ResourceInternal.ts","../../src/webgl/GLRenderBuffer.ts","../../src/webgl/GLFrameBuffer.ts","../../src/common/request.ts","../../src/webgl/KhronosTextureContainer.ts","../../src/render/MarsTextureFactory.ts","../../src/render/MarsTexture.ts","../../src/render/MarsRenderPassColorAttachment.ts","../../src/render/MarsRenderPass.ts","../../src/webgl/GLMaterial.ts","../../src/render/MarsMaterialDataBlock.ts","../../src/render/MarsMaterial.ts","../../src/webgl/GLVertexArrayObject.ts","../../src/webgl/GLGeometry.ts","../../src/render/MarsGeometry.ts","../../src/render/MarsMesh.ts","../../src/render/MarsExtWrap.ts","../../src/render/MarsRenderer.ts","../../src/render/MarsSharedGeometry.ts","../../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","const prefix = '[Mars RI]';\n\nexport function consoleLog (msg: string, ...data: any[]) {\n console.info(prefix + msg, ...data);\n}\n\nexport function consoleWarn (msg: string, ...data: any[]) {\n console.warn(prefix + msg, ...data);\n}\nexport function consoleError (msg: string, ...data: any[]) {\n console.error(prefix + msg, ...data);\n}\n","export declare const constants: WebGL2RenderingContext;\n\nexport enum DestroyOptions {\n destroy = 0,\n keep = 1,\n force = destroy,\n}\n","import type {\n Texture, TextureConfigOptions, TextureFormatOptions,\n} from './Texture';\nimport type { Mesh, MeshDestroyOptions } from './Mesh';\nimport type { vec4 } from './type';\nimport type { IGPURenderer, IGPUResource } from './IGPURenderer';\nimport type { GPURenderer } from './Renderer';\nimport type { UniformValue } from './Material';\nimport type { GPUBuffer } from './GPUBuffer';\nimport type { RenderState, SemanticFunc } from './RenderFrame';\nimport type { DestroyOptions } from './constants';\n\nexport enum RenderPassDestroyAttachmentType {\n force = 0,\n keep = 1,\n keepExternal = 2,\n destroy = force\n}\n\nexport const RenderPassPriorityPrepare = 0;\nexport const RenderPassPriorityNormal = 1000;\nexport const RenderPassPriorityPostprocess = 3000;\n\nexport enum TextureLoadAction {\n whatever = 0,\n //preserve previous attachment\n //load = 1,\n //clear attachment\n clear = 2,\n}\n\nexport enum TextureStoreAction {\n store = 1,\n clear = 0\n}\n\nexport enum RenderPassAttachmentStorageType {\n none = 0,\n color = 1,\n //stencil 8 render buffer\n stencil_8_opaque = 2,\n //stencil 16 render buffer\n depth_16_opaque = 3,\n //depth 16 & stencil 8 render buffer\n depth_stencil_opaque = 4,\n //depth 16 texture, need gpu.capability.readableDepthStencilTextures\n depth_16_texture = 5,\n //depth 24 texture, need gpu.capability.readableDepthStencilTextures\n depth_24_stencil_8_texture = 6,\n\n}\n\nexport interface RenderPassStorageObject {\n readonly attachment: GLenum,\n readonly format: GLenum,\n readonly size: [width: number, height: number],\n readonly storageType: RenderPassAttachmentStorageType,\n readonly multiSample: number,\n}\n\nexport interface RenderPassColorAttachmentTextureOptions extends TextureFormatOptions, TextureConfigOptions {\n}\n\nexport interface RenderPassColorAttachmentOptions {\n // color storage must be texture or textureOptions\n texture?: Texture | RenderPassColorAttachmentTextureOptions,\n storage?: RenderPassStorageObject,\n}\n\nexport interface RenderPassColorAttachment {\n readonly storageType: RenderPassAttachmentStorageType.color,\n readonly texture: Texture,\n readonly isDestroyed: boolean,\n}\n\nexport interface RenderPassDepthStencilAttachment {\n readonly storageType: RenderPassAttachmentStorageType,\n readonly texture?: Texture,\n readonly storage: RenderPassStorageObject,\n}\n\nexport interface RenderPassDepthStencilAttachmentOptions {\n storageType: RenderPassAttachmentStorageType,\n storage?: RenderPassStorageObject,\n texture?: Texture,\n}\n\nexport interface RenderPassStoreAction {\n depthAction?: TextureStoreAction,\n stencilAction?: TextureStoreAction,\n colorAction?: TextureStoreAction,\n}\n\nexport interface RenderPassLoadAction {\n clearColor?: vec4,\n colorAction?: TextureLoadAction,\n clearDepth?: number,\n depthAction?: TextureLoadAction,\n clearStencil?: number,\n stencilAction?: TextureLoadAction,\n}\n\nexport interface RenderPassAttachmentOptions {\n attachments?: RenderPassColorAttachmentOptions[],\n depthStencilAttachment?: RenderPassDepthStencilAttachmentOptions,\n //if viewport not set,it will use viewportScale\n viewport?: [x: number, y: number, width: number, height: number],\n //default 1 , when renderer resize, this attachment will be resized to same scale\n //todo 增加测试:\n // 1.viewport 提供时,忽略此参数,renderPass的尺寸由viewport决定,无论renderer是否变化尺寸\n // 2.viewportScale 默认为1,renderPass的尺寸由renderer的尺寸决定,renderer尺寸变化时,renderPass的尺寸也会变化\n // 3.renderPass的color/depth_stencil attachment尺寸由\n viewportScale?: number,\n //in webgl2 use multisample renderbuffer\n //default is 0, means disabled\n //only enabled in webgl2\n multiSample?: number,\n}\n\nexport type SemanticGetter = UniformValue | SemanticFunc | GPUBuffer | Texture | Texture[];\n\nexport interface RenderPassOptions extends RenderPassAttachmentOptions {\n name?: string,\n meshes?: Mesh[],\n priority?: number,\n meshOrder?: RenderPassMeshOrder,\n loadAction?: RenderPassLoadAction,\n storeAction?: RenderPassStoreAction,\n semantics?: { [key: string]: SemanticGetter },\n delegate?: RenderPassDelegate,\n}\n\nexport enum RenderPassMeshOrder {\n none = 1,\n ascending = 2,\n descending = 3\n}\n\nexport type RenderPassDestroyOptions = {\n meshes?: MeshDestroyOptions | DestroyOptions.keep,\n depthStencilAttachment?: RenderPassDestroyAttachmentType,\n colorAttachment?: RenderPassDestroyAttachmentType,\n semantics?: DestroyOptions,\n};\n\nexport declare class SemanticMap {\n\n constructor (options?: { [key: string]: SemanticGetter });\n\n setSemantic (name: string, value: SemanticGetter | undefined): void;\n\n getSemanticValue (name: string, state: RenderState): UniformValue | GPUBuffer | null | undefined;\n\n hasSemanticValue (name: string): boolean;\n\n toObject (): Record<string, SemanticGetter>;\n\n destroy (): void;\n\n}\n\nexport interface RenderPassDelegate {\n willBeginRenderPass?: (renderPass: RenderPass, state: RenderState) => void,\n didEndRenderPass?: (renderPass: RenderPass, state: RenderState) => void,\n willRenderMesh?: (mesh: Mesh, state: RenderState) => void,\n didRenderMesh?: (mesh: Mesh, state: RenderState) => void,\n}\n\nexport declare class RenderPass implements IGPUResource {\n\n readonly isDestroyed: boolean;\n\n readonly name: string;\n\n readonly priority: number;\n\n readonly attachments: RenderPassColorAttachment[];\n\n readonly depthAttachment?: RenderPassDepthStencilAttachment;\n\n readonly stencilAttachment?: RenderPassDepthStencilAttachment;\n\n readonly viewport: [x: number, y: number, width: number, height: number];\n\n readonly meshes: Mesh[];\n\n readonly renderer?: IGPURenderer;\n\n readonly semantics: SemanticMap;\n\n readonly storeAction: RenderPassStoreAction;\n\n readonly loadAction: RenderPassLoadAction;\n\n readonly multisample: number;\n\n delegate: RenderPassDelegate;\n\n meshOrder: RenderPassMeshOrder;\n\n constructor (options: RenderPassOptions, renderer?: IGPURenderer);\n\n /**\n * reset color/depth_stencil attachments,\n * if color/depth_stencil texture is external, this will not destroy textures\n * if color/depth_stencil texture is internal created, this will also delete those textures\n * this method will delete previous fbo if exists\n * returns previous options\n **/\n resetAttachments (options: RenderPassAttachmentOptions): RenderPassAttachmentOptions;\n\n setMeshes (meshes: Mesh[]): Mesh[];\n\n addMesh (mesh: Mesh): void;\n\n removeMesh (mesh: Mesh): void;\n\n destroy (options?: RenderPassDestroyOptions): void;\n\n assignRenderer (renderer: GPURenderer): RenderPass;\n\n}\n","import type { IGPURenderer, IGPUResource } from './IGPURenderer';\nimport type { Immutable, TypedArray } from './type';\nimport type { GPURenderer } from './Renderer';\n\n/**\n * 图片解码的格式,默认为 WebGL2RenderingContext['RGBA8']\n * 如果图片解码格式和texture的不一致,在非Web环境下,会产生报错,无法上传数据\n * 一般情况由系统根据图片文件解析出图片的像素格式\n */\nexport type ImageBitmapPixelFormat = WebGL2RenderingContext['RGBA8'] |\nWebGL2RenderingContext['RGBA16F'] |\nWebGL2RenderingContext['RGBA32F'] ;\n\nexport enum TextureSourceType {\n none,\n data = 1,\n image = 2,\n compressed = 3,\n video = 4,\n canvas = 5,\n framebuffer = 6,\n mipmaps = 7\n}\n\nexport interface TextureFactorySource2DFrom {\n type: TextureSourceType.image | TextureSourceType.video,\n url: string,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n}\n\nexport interface TextureFactorySourceFromCompressed {\n type: TextureSourceType.compressed,\n url: string,\n}\n\nexport type TextureFactorySourceCubeFrom = {\n type: TextureSourceType.image,\n map: TextureCubeSourceURLMap | string[],\n target: WebGLRenderingContext['TEXTURE_CUBE_MAP'],\n};\n\ntype DataRange = [start: number, length: number];\n\nexport type TextureFactorySourceCubeBinaryMipmapsFrom = {\n target: WebGLRenderingContext['TEXTURE_CUBE_MAP'],\n type: TextureSourceType.mipmaps,\n bin: string,\n mipmaps: Array<[\n TEXTURE_CUBE_MAP_POSITIVE_X: DataRange,\n TEXTURE_CUBE_MAP_NEGATIVE_X: DataRange,\n TEXTURE_CUBE_MAP_POSITIVE_Y: DataRange,\n TEXTURE_CUBE_MAP_NEGATIVE_Y: DataRange,\n TEXTURE_CUBE_MAP_POSITIVE_Z: DataRange,\n TEXTURE_CUBE_MAP_NEGATIVE_Z: DataRange\n ]>,\n};\n\nexport type TextureFactorySource2DBinaryMipmapsFrom = {\n target?: WebGLRenderingContext['TEXTURE_2D'],\n type: TextureSourceType.mipmaps,\n bin: string,\n mipmaps: Array<DataRange>,\n};\n\nexport interface TextureFactorySourceCubeMipmapsFrom {\n type: TextureSourceType.mipmaps,\n target: WebGLRenderingContext['TEXTURE_CUBE_MAP'],\n maps: TextureCubeSourceURLMap[] | string[][],\n}\n\nexport interface TextureFactorySource2DMipmapsFrom {\n type: TextureSourceType.mipmaps,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n urls: string[],\n}\n\nexport type TextureFactorySourceFrom =\n TextureFactorySource2DBinaryMipmapsFrom\n | TextureFactorySourceCubeBinaryMipmapsFrom\n | TextureFactorySource2DFrom\n | TextureFactorySourceCubeFrom\n | TextureFactorySourceCubeMipmapsFrom\n | TextureFactorySource2DMipmapsFrom\n | TextureFactorySourceFromCompressed;\n\nexport interface TextureFactory {\n /**\n * 通过TextureConfigOptions可以决定图片解码时使用的格式\n * @param options\n * @param config texture的属性\n */\n loadSourceAsync (options: TextureFactorySourceFrom, config?: TextureConfigOptions): Promise<TextureOptions>,\n\n canOffloadTexture (texture: Texture): boolean,\n\n reloadTextureAsync (texture: Texture): Promise<Texture>,\n\n loadCompressedTextureFromArrayBuffer (arrayBuffer: ArrayBuffer, options?: TextureOptions): TextureOptions,\n}\n\nexport declare class Texture implements IGPUResource {\n readonly width: number;\n readonly height: number;\n readonly id: string;\n readonly options: Immutable<TextureOptions>;\n readonly renderer?: IGPURenderer;\n readonly sourceType: TextureSourceType;\n readonly name: string;\n readonly isDestroyed: boolean;\n\n constructor (options: TextureOptions, renderer?: IGPURenderer);\n\n destroy (): void;\n\n updateSource (options: TextureSourceOptions): void;\n\n uploadCurrentVideoFrame (): boolean;\n\n offloadData (): void;\n\n reloadDataAsync (): Promise<Texture>;\n\n assignRenderer (renderer: GPURenderer): Texture;\n\n}\n\ntype ImageSource = ImageBitmap | HTMLImageElement | HTMLCanvasElement;\n\nexport interface ImageData {\n data: TypedArray,\n width: number,\n height: number,\n}\n\nexport type TextureSourceCubeData = [\n TEXTURE_CUBE_MAP_POSITIVE_X: ImageSource | ImageData,\n TEXTURE_CUBE_MAP_NEGATIVE_X: ImageSource | ImageData,\n TEXTURE_CUBE_MAP_POSITIVE_Y: ImageSource | ImageData,\n TEXTURE_CUBE_MAP_NEGATIVE_Y: ImageSource | ImageData,\n TEXTURE_CUBE_MAP_POSITIVE_Z: ImageSource | ImageData,\n TEXTURE_CUBE_MAP_NEGATIVE_Z: ImageSource | ImageData\n];\n\n// 为减少内存消耗,除了video之外,其余的数据内容会在texture生成后被置为undefined\n// const tex = new Texture({image:myImage},renderer)\n// tex.options.image === undefined\n\nexport type TextureSourceOptions = Texture2DSourceOptions | TextureCubeSourceOptions;\n\nexport interface Texture2DSourceOptionsNone extends TextureOptionsBase {\n sourceType: TextureSourceType.none,\n target?: GLenum,\n}\n\nexport interface Texture2DSourceOptionsImage extends TextureOptionsBase {\n sourceType: TextureSourceType.image,\n image: ImageSource,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n generateMipmap?: boolean,\n}\n\nexport interface Texture2DSourceOptionsFrameBuffer extends TextureOptionsBase {\n sourceType: TextureSourceType.framebuffer,\n data?: { width: number, height: number },\n target?: WebGLRenderingContext['TEXTURE_2D'],\n}\n\nexport interface Texture2DSourceOptionsData extends TextureOptionsBase {\n sourceType: TextureSourceType.data,\n data: { data: TypedArray, width: number, height: number },\n target?: WebGLRenderingContext['TEXTURE_2D'],\n}\n\nexport interface Texture2DSourceOptionsVideo extends TextureOptionsBase {\n sourceType: TextureSourceType.video,\n video: HTMLVideoElement,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n generateMipmap?: boolean,\n}\n\nexport interface Texture2DSourceOptionsImageMipmaps extends TextureOptionsBase {\n sourceType: TextureSourceType.mipmaps,\n mipmaps: Array<ImageSource | { data: TypedArray, width: number, height: number }>,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n}\n\nexport interface Texture2DSourceOptionsCompressed extends TextureOptionsBase {\n sourceType: TextureSourceType.compressed,\n mipmaps: Array<{ data: TypedArray, width: number, height: number }>,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n}\n\nexport interface TextureCubeSourceOptionsImage extends TextureOptionsBase {\n sourceType: TextureSourceType.image | TextureSourceType.data,\n target: WebGLRenderingContext['TEXTURE_CUBE_MAP'],\n cube: TextureSourceCubeData,\n generateMipmap?: boolean,\n}\n\nexport interface TextureCubeSourceOptionsImageMipmaps extends TextureOptionsBase {\n sourceType: TextureSourceType.mipmaps,\n mipmaps: Array<TextureSourceCubeData>,\n target: WebGLRenderingContext['TEXTURE_CUBE_MAP'],\n}\n\nexport type TextureCubeSourceURLMap = [\n TEXTURE_CUBE_MAP_POSITIVE_X: string,\n TEXTURE_CUBE_MAP_NEGATIVE_X: string,\n TEXTURE_CUBE_MAP_POSITIVE_Y: string,\n TEXTURE_CUBE_MAP_NEGATIVE_Y: string,\n TEXTURE_CUBE_MAP_POSITIVE_Z: string,\n TEXTURE_CUBE_MAP_NEGATIVE_Z: string\n];\n\nexport interface TextureConfigOptionsBase {\n name?: string,\n wrapS?: GLenum, // GL_CLAMP_TO_EDGE\n wrapT?: GLenum, // GL_CLAMP_TO_EDGE\n magFilter?: GLenum, // GL_NEAREST\n minFilter?: GLenum, // GL_NEAREST\n anisotropic?: number, //0\n flipY?: boolean,\n premultiplyAlpha?: boolean,\n //when use ImageBitMap, the bitmap content will be closed after sent to GPU\n keepImageSource?: boolean,\n}\n\nexport interface TextureConfigOptions extends TextureConfigOptionsBase {\n sourceFrom?: TextureFactorySourceFrom,\n}\n\nexport interface TextureFormatOptions {\n format?: GLenum, // GL_RGBA\n internalFormat?: GLenum, // GL_RGBA\n type?: GLenum, //GL_UNSIGNED_BYTE\n}\n\nexport interface TextureOptionsBase extends TextureConfigOptions, TextureFormatOptions {\n sourceType: TextureSourceType,\n}\n\nexport type TextureCubeSourceOptions = TextureCubeSourceOptionsImage | TextureCubeSourceOptionsImageMipmaps;\n\nexport type Texture2DSourceOptions =\n Texture2DSourceOptionsImage\n | Texture2DSourceOptionsData\n | Texture2DSourceOptionsVideo\n | Texture2DSourceOptionsImageMipmaps\n | Texture2DSourceOptionsCompressed\n | Texture2DSourceOptionsFrameBuffer;\n\nexport type Texture2DOptions = Texture2DSourceOptions;\n\nexport type TextureCubeOptions = TextureCubeSourceOptions;\n\nexport type TextureOptions = Texture2DOptions | TextureCubeOptions;\n","import type { TypedArray } from './type';\nimport type { IGPUResource, IGPURenderer } from './IGPURenderer';\nimport type { GPURenderer } from './Renderer';\nexport const GPUBufferOptionsMemoryShared = 1 << 1;\nexport type GPUBufferTarget =\n | WebGLRenderingContext['ARRAY_BUFFER']\n | WebGLRenderingContext['ELEMENT_ARRAY_BUFFER']\n | WebGL2RenderingContext['COPY_READ_BUFFER']\n | WebGL2RenderingContext['COPY_WRITE_BUFFER']\n | WebGL2RenderingContext['TRANSFORM_FEEDBACK_BUFFER']\n | WebGL2RenderingContext['UNIFORM_BUFFER']\n | WebGL2RenderingContext['PIXEL_PACK_BUFFER']\n | WebGL2RenderingContext['PIXEL_UNPACK_BUFFER'];\n\nexport interface GPUBufferOptions {\n name?: string,\n /**\n * 数据长度,如果提供了data,忽略此参数\n */\n byteLength?: number,\n\n data?: TypedArray,\n\n /**\n * GL需要设置,Vulkan和Metal此属性忽略\n */\n target?: GPUBufferTarget,\n\n /**\n * GL需要设置,Vulkan和Metal此属性忽略\n */\n usage?: WebGLRenderingContext['STATIC_DRAW'] | WebGLRenderingContext['DYNAMIC_DRAW'],\n}\n\n/**\n * GPU的Buffer对象,通过JS ArrayBuffer,可以向其中写入数据\n * JS调用写入数据后,会立即执行GPU写入的操作,此类型不会保存JS的ArrayBuffer对象\n *\n */\nexport declare class GPUBuffer implements IGPUResource {\n readonly renderer?: IGPURenderer;\n\n readonly isDestroyed: boolean;\n\n readonly level: number;\n\n readonly byteLength: number;\n\n readonly target: GPUBufferTarget;\n\n readonly usage?: WebGLRenderingContext['STATIC_DRAW'] | WebGLRenderingContext['DYNAMIC_DRAW'];\n\n constructor (options: GPUBufferOptions, renderer?: IGPURenderer);\n\n getElementCount (bytePerElement: number): number;\n /**\n * 根据TypedArray容量,重新分配Buffer内存\n * @param typedArray\n */\n bufferData (typedArray: TypedArray): void;\n\n /**\n * 更新buffer数据,立即写入GPU中\n * @param elementOffset 从buffer的第几个元素开始\n * @param typedArray 要写入的数据\n */\n\n bufferSubData (elementOffset: number, typedArray: TypedArray): void;\n\n /**\n * 将数据从GPU中读出,写入到传入的typedArray中,只有当level为2时才能成功,webgl下此函数永远不会成功\n * @param elementOffset 从第几个元素开始拷贝,默认为 0\n * @param typedArray 要写入的typedArray\n * @param elementCount 要写入多少个元素,如果不传入,则为typedArray元素长度\n */\n readSubData (elementOffset: number, typedArray: TypedArray, elementCount?: number): boolean;\n\n assignRenderer (renderer: GPURenderer): GPUBuffer;\n\n destroy (): void;\n}\n\n","import type { TypedArray } from '../../types/type';\nimport { consoleError } from '../common/console';\nimport type { vec2 } from '@predy-js/specification';\n// @ts-expect-error safe to assign\nexport let constants: WebGL2RenderingContext = {};\n\nif (IS_NODE) {\n constants = require('./gl-constants.json');\n} else {\n if (typeof WebGL2RenderingContext === 'function') {\n copy(WebGL2RenderingContext);\n } else if (typeof WebGLRenderingContext !== 'undefined') {\n copy(WebGLRenderingContext);\n copy(WebGLRenderingContext.prototype);\n } else {\n //ios 16 lockdown mode\n consoleError('WebGL not in global');\n }\n}\n// @ts-expect-error set default value\nconstants['HALF_FLOAT'] = 5131;\n\nfunction copy (target: any) {\n for (const name in target) {\n if (/^[A-Z_]/.test(name)) {\n // @ts-expect-error safe to assign\n constants[name] = target[name];\n }\n }\n}\n\nconst map: { [p: number]: Int32ArrayConstructor | Float32ArrayConstructor | Int16ArrayConstructor | Int8ArrayConstructor | Uint8ArrayConstructor | Uint32ArrayConstructor | Uint16ArrayConstructor } = {\n [constants.INT]: Int32Array,\n [constants.FLOAT]: Float32Array,\n [constants.SHORT]: Int16Array,\n [constants.BYTE]: Int8Array,\n [constants.UNSIGNED_BYTE]: Uint8Array,\n [constants.UNSIGNED_INT]: Uint32Array,\n [constants.UNSIGNED_SHORT]: Uint16Array,\n};\n\nexport function createTypedArrayByGLType (type: number, elementCount: number | ArrayBuffer): TypedArray {\n return new (map[type] || Float32Array)(elementCount as number);\n}\n\nexport function getBytesPerElementByGLType (type: number): number {\n return map[type]?.BYTES_PER_ELEMENT || 0;\n}\nconst MatAttrLocPairMap: Record<number, vec2> = {\n [constants.FLOAT_MAT2]:[2, 2],\n [constants.FLOAT_MAT3]:[3, 3],\n [constants.FLOAT_MAT4]:[4, 4],\n};\n\nexport function getMatAttrLocPair (type: number): vec2 {\n return MatAttrLocPairMap[type] || [1, 1];\n}\n","export type Shader = ShaderWithSource | ShaderUseCacheId;\nexport type ShaderWithSource = InstancedShaderWithSource | SharedShaderWithSource;\n\nexport interface MetaShaderSpec {\n mtlBinary?: ArrayBuffer | string,\n mtlSource?: string,\n\n mtlVertex?: string,\n mtlFragment?: string,\n}\n\nexport interface ShaderSourceBase extends MetaShaderSpec {\n fragment: string,\n vertex: string,\n name?: string,\n //将es300的shader in/out关键字替换为attribute/varying\n downgrade?: boolean,\n marcos?: ShaderMarcos,\n}\n\nexport interface InstancedShaderWithSource extends ShaderSourceBase {\n shared?: false,\n}\n\nexport interface SharedShaderWithSource extends ShaderSourceBase {\n //相同cacheId的shader会使用同一个GLProgram\n //提供了cacheId就会认为是shared Shader\n cacheId?: string,\n //shared为true时,\n //如果没有提供cacheId,会根据字符串hash计算出 cacheId,\n //字符串相同的shader将会使用同一个GLProgram\n //如果提供了cacheId,cacheId相同的,都会使用同一个GLProgram\n shared: true,\n}\n\nexport interface ShaderUseCacheId {\n cacheId: string,\n}\n\nexport type ShaderMarcos = [key: string, value: string | number | boolean][];\n\nexport enum ShaderCompileResultStatus {\n noShader = 0,\n success = 1,\n fail = 2,\n compiling = 3\n}\n\nexport interface ShaderCompileResult {\n status: ShaderCompileResultStatus,\n cacheId?: string,\n error?: string | null,\n compileTime?: number,\n // deprecated\n shared?: boolean,\n}\n\n/**\n * @example\n * const lib:ShaderLibrary = ...;\n * const shaderCacheId = lib.addShader({fragment:'...',vertex:'...'});\n * lib.compileShader(shaderCacheId);\n * //pre-compiled program\n * const mtl = new Material({\n * shader:{ shaderCacheId }\n * })\n */\nexport interface ShaderLibrary {\n\n readonly cacheIds: string[],\n\n getShaderResult(cacheId: string): ShaderCompileResult | undefined,\n\n /**\n * 添加shader\n * @param shader\n */\n addShader(shader: Shader): string,\n\n /**\n * @param cacheId\n */\n deleteShader(cacheId: string): void,\n\n /**\n * 编译shader\n * @param shaderCacheId\n * @param asyncCallback 如果传入,则会启用异步编译,当所有编译完成后被回调\n */\n compileShader(shaderCacheId: string, asyncCallback?: (result: ShaderCompileResult) => void): ShaderCompileResult,\n\n /***\n * 编译现有的所有shader\n * @param asyncCallback 如果传入,则会启用异步编译,当所有编译完成后被回调\n */\n compileAllShaders(asyncCallback?: (results: ShaderCompileResult[]) => void): void,\n\n destroy(): void,\n}\n\nexport class ShaderLibraryEmpty implements ShaderLibrary {\n\n get cacheIds () {\n return [];\n }\n\n getShaderResult (cacheId: string): ShaderCompileResult | undefined {\n return undefined;\n }\n\n addShader (shader: Shader, marcos?: ShaderMarcos) {\n return '';\n }\n\n compileAllShaders (asyncCallback?: (results: ShaderCompileResult[]) => void) {\n return [];\n }\n\n deleteShader (cacheId: string) {\n }\n\n compileShader (shaderCacheId: string): ShaderCompileResult {\n return { status: ShaderCompileResultStatus.fail };\n }\n\n destroy () {\n }\n}\n","import { RenderPassMeshOrder } from '../../types/RenderPass';\n\nexport function isFunc (val: any): boolean {\n return typeof val === 'function';\n}\n\nexport function isObj (a: any): boolean {\n return (typeof a === 'object') && a;\n}\n\nexport function isStr (a: any, withLength?: boolean) {\n const str = typeof a === 'string';\n\n if (withLength) {\n return str && a.length > 0;\n }\n\n return str;\n}\n\nexport function arrRemove (arr: Array<any>, ele: any): boolean {\n const idx = arr.indexOf(ele);\n\n if (idx > -1) {\n arr.splice(idx, 1);\n\n return true;\n }\n\n return false;\n}\n\nexport function arrAdd<T> (arr: Array<T>, item: T): boolean {\n if (!arr.includes(item)) {\n arr.push(item);\n\n return true;\n }\n\n return false;\n}\n\nexport function strHashCode (...strings: string[]): number {\n let h = 0;\n\n for (let j = 0; j < arguments.length; j++) {\n const s = strings[j];\n\n for (let i = 0; i < s.length; i++) { h = Math.imul(31, h) + s.charCodeAt(i) | 0; }\n }\n\n return h;\n}\n\nexport function arrAddByOrder (arr: Array<any>, item: any, order?: number): boolean {\n const itemOrder = order || RenderPassMeshOrder.ascending;\n\n if (arr.includes(item)) { return true; }\n arr.push(item);\n if (arr.length === 1) { return true; }\n if (itemOrder !== RenderPassMeshOrder.none) {\n //单次插入排序\n let index = arr.length - 1;\n\n if (index) {\n const currentItem = arr[index];\n\n if (itemOrder !== RenderPassMeshOrder.ascending) {\n while (arr[index - 1].priority < currentItem.priority) {\n arr[index] = arr[index - 1];\n index--;\n if (index === 0) {\n break;\n }\n }\n } else {\n while (arr[index - 1].priority > currentItem.priority) {\n arr[index] = arr[index - 1];\n index--;\n if (index === 0) {\n break;\n }\n }\n }\n arr[index] = currentItem;\n }\n }\n\n return false;\n}\n\nfunction fastSort (arr: Array<any>, order: number, start = 0, end = arr.length - 1): Array<any> {\n // 终止条件\n if (start >= end) { return arr; }\n let left = start, right = end;\n const base = arr[start];\n\n while (left < right) {\n if (order === RenderPassMeshOrder.ascending) {\n // 从右向左,寻找第一个小于base的值\n while (arr[right].priority > base.priority && right >= left) { right--; }\n // 从左向右,寻找第一个大于base的值\n while (arr[left].priority <= base.priority && left < right) { left++; }\n } else {\n // 从右向左,寻找第一个大于base的值\n while (arr[right].priority < base.priority && right >= left) { right--; }\n // 从左向右,寻找第一个小于base的值\n while (arr[left].priority >= base.priority && left < right) { left++; }\n }\n // 将两个值交换位置\n [arr[left], arr[right]] = [arr[right], arr[left]];\n }\n // 将最后两个游标相遇的位置的值与base值交换\n [arr[start], arr[left]] = [arr[left], arr[start]];\n fastSort(arr, order, start, left - 1);\n fastSort(arr, order, right + 1, end);\n\n return arr;\n}\n\nexport function sortByOrder (arr: Array<any>, order?: number): Array<any> {\n const itemOrder = order || RenderPassMeshOrder.ascending;\n\n if (arr.length === 0 || arr.length === 1) { return arr; }\n if (itemOrder === RenderPassMeshOrder.none) {\n return arr;\n } else {\n //30个以下的数据用插入排序\n if (arr.length <= 30) {\n const length = arr.length;\n\n for (let i = 1; i < length; i++) {\n const currentItem = arr[i];\n let index = i;\n\n if (itemOrder !== RenderPassMeshOrder.ascending) {\n while (index >= 1 && arr[index - 1].priority < currentItem.priority) {\n arr[index] = arr[index - 1];\n index--;\n if (index === 0) {\n break;\n }\n }\n } else {\n while (index >= 1 && arr[index - 1].priority > currentItem.priority) {\n arr[index] = arr[index - 1];\n index--;\n if (index === 0) {\n break;\n }\n }\n }\n arr[index] = currentItem;\n }\n\n return arr;\n } else {\n return fastSort(arr, itemOrder);\n }\n }\n\n}\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function forEach<T> (object: null | undefined | { [key: string]: T }, callback: (val: T, key: string) => void, thisObj?: any) {\n if (isObj(object)) {\n if (thisObj === undefined) {\n thisObj = object;\n }\n for (const name in object) {\n if (hasOwnProperty.call(object, name)) {\n callback.call(thisObj, object[name], name);\n }\n }\n }\n\n return object;\n}\n\nexport function throwDestroyedError () {\n throw Error('destroyed item cannot be used again');\n}\n","import type { MarsRenderFrame } from './MarsRenderFrame';\nimport type { RenderState } from '../../types/RenderFrame';\nimport type {\n RenderPassLoadAction,\n RenderPassStoreAction,\n} from '../../types/RenderPass';\nimport {\n TextureLoadAction,\n} from '../../types/RenderPass';\nimport { constants } from '../webgl/constants';\nimport type { GLGPURenderer } from '../webgl/GLGPURenderer';\nimport type { MarsMesh } from './MarsMesh';\nimport type { MarsGeometry } from './MarsGeometry';\nimport type { MarsRenderPass } from './MarsRenderPass';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { consoleError } from '../common/console';\n\nexport class RenderFrameInternal {\n\n static render (frame: MarsRenderFrame) {\n const passes = frame._renderPasses;\n const renderer = frame.renderer;\n\n if (renderer.isDestroyed) {\n return consoleError('renderer is destroyed', renderer);\n }\n frame.renderer.shaderLibrary.compileAllShaders();\n clear(renderer.internal, frame.loadAction);\n //@ts-expect-error safe to assign\n const renderState: RenderState = {\n currentFrame: frame,\n };\n\n for (let i = 0; i < passes.length; i++) {\n const pass = passes[i];\n const delegate = pass.delegate;\n\n if (pass.isDestroyed) {\n consoleError(`render pass ${pass.name} destroyed`, pass);\n } else {\n delegate.willBeginRenderPass && delegate?.willBeginRenderPass(pass, renderState);\n this.renderRenderPass(renderer, pass as MarsRenderPass, renderState);\n delegate.didEndRenderPass && delegate?.didEndRenderPass(pass, renderState);\n }\n }\n }\n\n static renderRenderPass (renderer: MarsRenderer, pass: MarsRenderPass, renderState: RenderState): void {\n renderState.currentPass = pass;\n setupRenderPass(renderer, pass);\n\n renderMeshes(renderer, renderState);\n endRenderPass(renderer, pass);\n }\n}\n\nfunction endRenderPass (renderer: MarsRenderer, renderPass: MarsRenderPass) {\n if (renderPass.storeAction) {\n clear(renderer.internal, renderPass.storeAction);\n }\n renderPass.unbind();\n}\n\nfunction renderMeshes (renderer: MarsRenderer, state: RenderState) {\n //assume meshes has been sorted\n const sortedMeshes = state.currentPass.meshes;\n const delegate = state.currentPass.delegate;\n\n for (let i = 0; i < sortedMeshes.length; i++) {\n const mesh = sortedMeshes[i];\n\n if (mesh.isDestroyed) {\n consoleError(`mesh ${mesh.name} destroyed`, mesh);\n } else if (!mesh.hide) {\n delegate.willRenderMesh && delegate.willRenderMesh(mesh, state);\n renderMesh(renderer, mesh as MarsMesh, state);\n delegate.didRenderMesh && delegate.didRenderMesh(mesh, state);\n }\n }\n for (let i = 0; i < sortedMeshes.length; i++) {\n const mtl = (sortedMeshes[i] as MarsMesh).material;\n\n if (mtl) {\n mtl.dataBlocks.forEach(d => d.clearFlags());\n }\n }\n}\n\nfunction setupRenderPass (renderer: MarsRenderer, renderPass: MarsRenderPass) {\n renderPass.assignRenderer(renderer);\n loadRenderPassAttachments(renderer.internal, renderPass);\n}\n\nfunction renderMesh (renderer: MarsRenderer, mesh: MarsMesh, state: RenderState) {\n state.currentMesh = mesh;\n mesh.material.assignRenderer(renderer);\n const material = (mesh.material).materialInternal;\n\n if (material) {\n const program = material.getProgram();\n\n if (program) {\n material.setupStates();\n program.setupUniforms(state);\n mesh.geometries.forEach((geometry: MarsGeometry) => {\n geometry.assignRenderer(renderer);\n geometry.flush();\n const vao = program.setupAttributes(geometry.internal);\n\n geometry.internal.draw(state);\n if (vao) {\n vao.unbind();\n }\n });\n }\n }\n}\n\nfunction loadRenderPassAttachments (renderer: GLGPURenderer, renderPass: MarsRenderPass) {\n renderPass.bind();\n if (renderPass.loadAction) {\n clear(renderer, renderPass.loadAction);\n }\n}\n\nfunction clear (renderer: GLGPURenderer, action: RenderPassLoadAction | RenderPassStoreAction) {\n const state = renderer.state;\n let bit = 0;\n\n if (action.colorAction === TextureLoadAction.clear) {\n const clearColor = action.clearColor;\n\n if (clearColor) {\n state.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);\n }\n state.colorMask(true, true, true, true);\n bit = constants.COLOR_BUFFER_BIT;\n }\n if (action.stencilAction === TextureLoadAction.clear) {\n state.stencilMask(0xff);\n state.clearStencil(action.clearStencil || 0);\n bit = bit | constants.STENCIL_BUFFER_BIT;\n }\n if (action.depthAction === TextureLoadAction.clear) {\n const depth = action.clearDepth as number;\n\n state.depthMask(true);\n state.clearDepth(Number.isFinite(depth) ? depth : 1);\n bit = bit | constants.DEPTH_BUFFER_BIT;\n }\n if (bit) {\n state.clear(bit);\n }\n}\n","import type {\n GPUBuffer, RenderState, SemanticFunc, UniformValue, SemanticMap, SemanticGetter,\n} from '../../types';\nimport { forEach, isFunc } from '../common/utils';\n\nexport class MarsSemanticMap implements SemanticMap {\n public readonly semantics: Record<string, SemanticGetter>;\n\n constructor (semantics?: Record<string, SemanticGetter>) {\n this.semantics = Object.assign({}, semantics || {});\n }\n\n toObject (): Record<string, SemanticGetter> {\n return Object.assign({}, this.semantics);\n }\n\n setSemantic (name: string, value: SemanticGetter | undefined) {\n if (value === undefined) {\n delete this.semantics[name];\n } else {\n this.semantics[name] = value;\n }\n }\n\n getSemanticValue (name: string, state: RenderState): UniformValue | GPUBuffer | null | undefined {\n const ret = this.semantics[name];\n\n if (isFunc(ret)) {\n return (ret as SemanticFunc)(state);\n }\n\n return ret as UniformValue;\n }\n\n hasSemanticValue (name: string): boolean {\n return name in this.semantics;\n }\n\n destroy () {\n const c = this.semantics;\n\n forEach(c, function (va, name) {\n if (va && isFunc((va as GPUBuffer).destroy)) {\n (va as GPUBuffer).destroy();\n }\n delete c[name];\n });\n }\n}\n","import type {\n RenderFrame,\n RenderFrameDestroyOptions,\n RenderFrameOptions,\n RenderPass,\n RenderPassLoadAction,\n} from '../../types';\nimport {\n arrAddByOrder, arrRemove, sortByOrder, throwDestroyedError,\n} from '../common/utils';\nimport { RenderFrameInternal } from './RenderFrameInternal';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { MarsSemanticMap } from './MarsSemanticMap';\nimport { DestroyOptions } from '../../types/constants';\n\nlet renderFrameSeed = 1;\n\nexport class MarsRenderFrame implements RenderFrame {\n loadAction: RenderPassLoadAction;\n readonly name: string;\n readonly semantics: MarsSemanticMap;\n _renderPasses!: RenderPass[];\n private _renderer!: MarsRenderer;\n private _isDestroyed = false;\n\n get renderPasses () {\n return this._renderPasses.slice();\n }\n\n get isDestroyed () {\n return this._isDestroyed;\n }\n\n get renderer (): MarsRenderer {\n return this._renderer;\n }\n\n constructor (options: RenderFrameOptions, renderer?: MarsRenderer) {\n this.setRenderPasses(options.renderPasses as RenderPass[] || []);\n this.semantics = new MarsSemanticMap(options.semantics);\n this.loadAction = options.loadAction || {};\n this.name = options.name || ('RenderFrame' + renderFrameSeed++);\n if (renderer) {\n this.assignRenderer(renderer);\n }\n }\n\n assignRenderer (renderer: MarsRenderer): MarsRenderFrame {\n if (!this._renderer) {\n this._renderer = renderer;\n }\n\n return this;\n }\n\n destroy (options?: RenderFrameDestroyOptions) {\n if (options?.semantics !== DestroyOptions.keep) {\n this.semantics.destroy();\n }\n const pass = options?.passes ? options.passes : undefined;\n\n if (pass !== DestroyOptions.keep) {\n this._renderPasses.forEach(renderPass => {\n renderPass.destroy(pass);\n });\n }\n this._renderPasses.length = 0;\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsRenderFrame;\n this._isDestroyed = true;\n }\n\n render (): void {\n RenderFrameInternal.render(this);\n }\n\n setRenderPasses (passes: RenderPass[]) {\n this._renderPasses = sortByOrder(passes.slice());\n }\n\n addRenderPass (pass: RenderPass): void {\n arrAddByOrder(this._renderPasses, pass);\n }\n\n removeRenderPass (pass: RenderPass): void {\n arrRemove(this._renderPasses, pass);\n }\n\n forEachRenderPass (callback: (renderPass: RenderPass, index: number, pipeline: MarsRenderFrame) => void) {\n const passes = this._renderPasses;\n\n for (let i = 0; i < passes.length; i++) {\n callback.call(passes, passes[i], i, this);\n }\n }\n}\n","import type { Immutable } from './type';\n\nexport const COMPRESSED_TEXTURE_NONE = 0;\nexport const COMPRESSED_TEXTURE_PVRTC = 1;\nexport const COMPRESSED_TEXTURE_ASTC = 2;\n\nexport interface GPUCapabilityDetail {\n maxSample: number,\n floatTexture: number,\n halfFloatTexture: number,\n //set currentPass color attachment type FLOAT\n floatColorAttachment?: boolean,\n //set currentPass color attachment type HALF_FLOAT\n halfFloatColorAttachment?: boolean,\n maxVertexUniforms: number,\n maxVertexTextures: number,\n maxFragmentUniforms: number,\n maxFragmentTextures: number,\n maxShaderTexCount: number,\n maxTextureSize: number,\n maxTextureAnisotropy: number,\n compressedTexture: number,\n shaderTextureLod: boolean,\n instanceDraw?: boolean,\n drawBuffers?: boolean,\n asyncShaderCompile?: boolean,\n //draw elements use uint32 Array\n intIndexElementBuffer?: boolean,\n //render pass depth and stencil texture readable\n //in webgl, if not readable,use RenderBuffer which cannot readable\n readableDepthStencilTextures?: boolean,\n writableFragDepth?: boolean,\n}\n\nexport interface GPUCapability {\n type: 'webgl' | 'webgl2' | 'native-gl' | 'node-gl' | 'metal' | 'none',\n level: number,\n capability: Immutable<GPUCapabilityDetail>,\n\n setup (gl: WebGLRenderingContext): void,\n}\n\nexport class GPUCapabilityEmpty implements GPUCapability {\n type: 'webgl' | 'webgl2' | 'native-gl' | 'node-gl' | 'metal' | 'none';\n level = 0;\n capability = {\n maxSample: 0,\n floatTexture: 0,\n halfFloatTexture: 0,\n maxVertexUniforms: 0,\n maxVertexTextures: 0,\n maxFragmentUniforms: 0,\n maxFragmentTextures: 0,\n maxTextureSize: 0,\n maxShaderTexCount:0,\n maxTextureAnisotropy: 0,\n compressedTexture: 0,\n shaderTextureLod: false,\n };\n\n constructor () {\n this.type = 'none';\n }\n\n setup (gl: WebGLRenderingContext) {\n }\n}\n","import type { GPUBuffer, GPUBufferOptions, GPUBufferTarget } from '../../types/GPUBuffer';\nimport { constants } from './constants';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport type { TypedArray } from '../../types/type';\nimport type { MarsRenderer } from '../render/MarsRenderer';\nimport { isObj } from '../common/utils';\n\nexport class GLGPUBuffer implements GPUBuffer {\n\n readonly usage: WebGLRenderingContext['STATIC_DRAW'] | WebGLRenderingContext['DYNAMIC_DRAW'] | WebGLRenderingContext['STREAM_DRAW'];\n\n readonly renderer?: GLGPURenderer;\n\n readonly glBuffer: WebGLBuffer | null;\n\n readonly target: GPUBufferTarget;\n\n private _byteLength: number;\n\n private _isDestroyed = false;\n\n readonly name: string;\n\n get byteLength (): number {\n return this._byteLength;\n }\n\n get isBuffer () {\n return true;\n }\n\n get level () {\n return this.renderer?.level || 1;\n }\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n constructor (options: GPUBufferOptions, renderer: GLGPURenderer) {\n this.renderer = renderer;\n this.glBuffer = renderer.createGLBuffer(this, options.name) as WebGLBuffer;\n this.usage = options.usage || constants.STATIC_DRAW;\n this._byteLength = 0;\n this.name = options.name || '';\n this.target = options.target || constants.ARRAY_BUFFER;\n if (options.data) {\n this.bufferData(options.data);\n } else if (options.byteLength) {\n this.bufferData(options.byteLength);\n }\n }\n\n bind () {\n const gl = this.renderer?.gl as WebGLRenderingContext;\n\n gl.bindBuffer(this.target, this.glBuffer);\n }\n\n bufferData (typedArray: TypedArray | number): void {\n const byteLength = Number.isInteger(typedArray) ? typedArray as number : (typedArray as TypedArray).byteLength;\n\n if (this.renderer) {\n this._byteLength = byteLength;\n const gl = this.renderer.gl;\n const target = this.target;\n\n gl.bindBuffer(target, this.glBuffer);\n if (byteLength === 0) {\n // ios 12 13 cause error when byteLength == 0\n gl.bufferData(target, 1, this.usage);\n } else {\n gl.bufferData(target, byteLength, this.usage);\n if (isObj(typedArray)) {\n gl.bufferSubData(target, 0, typedArray as TypedArray);\n }\n }\n gl.bindBuffer(target, null);\n } else {\n this._byteLength = 0;\n }\n }\n\n bufferSubData (elementOffset: number, typedArray: TypedArray): void {\n if (this.renderer) {\n const gl = this.renderer.gl;\n const target = this.target;\n const byteOffset = elementOffset * typedArray.BYTES_PER_ELEMENT;\n\n gl.bindBuffer(target, this.glBuffer);\n const byteLength = byteOffset + typedArray.byteLength;\n\n if (byteLength > this._byteLength) {\n this._byteLength = byteLength;\n gl.bufferData(target, byteLength, this.usage);\n }\n gl.bufferSubData(target, byteOffset, typedArray);\n gl.bindBuffer(target, null);\n } else {\n this._byteLength = 0;\n }\n }\n\n destroy (): void {\n this.renderer?.deleteGPUBuffer(this);\n // @ts-expect-error safe to assign\n this.glBuffer = this.renderer = null;\n this._isDestroyed = true;\n }\n\n readSubData (elementOffset: number, typedArray: TypedArray): boolean {\n if (this.level === 2) {\n const gl = this.renderer?.gl as WebGL2RenderingContext;\n const target = this.target;\n\n if (gl) {\n gl.bindBuffer(target, this.glBuffer);\n gl.getBufferSubData(target, elementOffset * typedArray.BYTES_PER_ELEMENT, typedArray);\n gl.bindBuffer(target, null);\n\n return true;\n }\n }\n\n return false;\n }\n\n getElementCount (bytePerElement: number) {\n return this._byteLength / bytePerElement;\n }\n\n assignRenderer (renderer: MarsRenderer): GLGPUBuffer {\n if (!this.renderer) {\n // @ts-expect-error safe to assign\n this.renderer = renderer.internal;\n }\n\n return this;\n }\n\n}\n","/**\n * webgl的状态切换\n */\nimport { constants } from './constants';\n\nexport class WebGLState {\n\n public noCache = false;\n readonly _gl: WebGLRenderingContext | WebGL2RenderingContext;\n\n private _dict: any;\n\n private _currentFramebuffer!: Record<number, WebGLFramebuffer | null>;\n\n private _currentTextureBinding!: WebGLTexture | null;\n\n private _currentRenderBuffer!: Record<number, WebGLRenderbuffer | null>;\n\n private _activeTextureIndex!: number;\n\n private readonly _maxTextureCount: number;\n\n private _pixelStorei!: { [key: string]: GLenum };\n\n _textureUnitDict!: { [key: string]: WebGLTexture | null };\n\n bindingVAO?: WebGLVertexArrayObject;\n\n constructor (gl: WebGLRenderingContext | WebGL2RenderingContext) {\n this._gl = gl;\n this._maxTextureCount = gl.TEXTURE0 + gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS) - 1;\n this._reset();\n }\n\n destroy () {\n //@ts-expect-error save to assign\n this.gl = null;\n }\n\n private _reset () {\n this._dict = {};\n this._activeTextureIndex = constants.TEXTURE0;\n this._textureUnitDict = {};\n this._currentFramebuffer = {};\n this._pixelStorei = {};\n this._currentRenderBuffer = {};\n }\n\n toggle (capability: GLenum, enable?: boolean) {\n if (enable) {\n this.enable(capability);\n } else {\n this.disable(capability);\n }\n }\n\n /**\n * 对于该上下文开启某种特性\n * @param capability\n * example:\n * gl.enable(gl.DITHER);\n */\n enable (capability: GLenum) {\n const value = this._dict[capability];\n\n if (value !== true) {\n this._dict[capability] = true;\n this._gl.enable(capability);\n }\n }\n\n /**\n * 基于某种上下文关闭特性\n * @param capability\n * example:\n * gl.disable(gl.DITHER);\n */\n disable (capability: GLenum) {\n const value = this._dict[capability];\n\n if (value !== false) {\n this._dict[capability] = false;\n this._gl.disable(capability);\n }\n }\n\n /**\n * 绑定framebuffer webgl2新增: gl.DRAW_FRAMEBUFFER 和 gl.READ_FRAMEBUFFER\n * @param target\n * @param framebuffer\n * example:\n * const framebuffer = gl.createFramebuffer();\n * gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n */\n bindFramebuffer (target: GLenum, framebuffer: WebGLFramebuffer | null) {\n if (this._currentFramebuffer[target] !== framebuffer) {\n this._currentFramebuffer[target] = framebuffer;\n this._gl.bindFramebuffer(target, framebuffer);\n }\n }\n\n bindRenderBuffer (target: GLenum, renderBuffer: WebGLRenderbuffer | null) {\n if (this._currentRenderBuffer[target] !== renderBuffer) {\n this._currentRenderBuffer[target] = renderBuffer;\n this._gl.bindRenderbuffer(target, renderBuffer);\n }\n }\n\n /**\n * 绑定系统framebuffer\n */\n bindSystemFramebuffer () {\n this.bindFramebuffer(this._gl.FRAMEBUFFER, null);\n }\n\n /**\n * 将定义好的WebGLProgram 对象添加到当前的渲染状态中。\n * @param program\n * example:\n * gl.useProgram(program);\n * gl.useProgram(null);\n */\n useProgram (program: WebGLProgram | null) {\n this._set1('useProgram', program);\n }\n\n /**\n * 使用预设值来清空缓冲\n * @param mask\n * example:\n * gl.clear(gl.DEPTH_BUFFER_BIT);\n * gl.clear(gl.DEPTH_BUFFER_BIT | gl.COLOR_BUFFER_BIT);\n */\n clear (mask: number) {\n this._gl.clear(mask);\n }\n\n //depth start\n\n /**\n * 设置深度缓冲区的深度清除值\n * @param depth\n * example:\n * gl.clearDepth(0.5);\n */\n clearDepth (depth: GLclampf) {\n this._set1('clearDepth', depth);\n }\n\n /**\n * 指定将输入像素深度与当前深度缓冲区值进行比较的函数。\n * @param func\n * example:\n * gl.enable(gl.DEPTH_TEST);\n * gl.depthFunc(gl.NEVER);\n */\n public depthFunc (func: GLenum) {\n this._set1('depthFunc', func);\n }\n\n /**\n * 设置是否启用写入深度缓冲。\n * @param flag\n * example:\n * gl.depthMask(false);\n */\n depthMask (flag: boolean) {\n this._set1('depthMask', flag);\n }\n\n polygonOffset (factor: number, unit: number) {\n this._set2('polygonOffset', factor, unit);\n }\n\n /**\n * 将 z 值从规范化设备坐标映射到窗口坐标\n * @param zNear\n * @param zFar\n * example:\n * gl.depthRange(0.2, 0.6);\n */\n depthRange (zNear: number, zFar: number) {\n this._set2('depthRange', zNear, zFar);\n }\n\n //depth end\n\n //stencil start\n /**\n * 模版测试设置函数和引用值。\n * @param func\n * @param ref\n * @param mask\n * example:\n * gl.enable(gl.STENCIL_TEST);\n * gl.stencilFunc(gl.LESS, 0, 0b1110011);\n */\n clearStencil (s: GLint) {\n this._set1('clearStencil', s);\n }\n\n /**\n * 控制启用和禁用模板平面中单个位的正面和背面写入\n * @param mask\n * example:\n * gl.stencilMask(0xff);\n */\n stencilMask (mask: number) {\n this.stencilMaskSeparate(this._gl.FRONT, mask);\n this.stencilMaskSeparate(this._gl.BACK, mask);\n }\n\n /**\n * 模版测试设置函数和引用值。\n * @param func\n * @param ref\n * @param mask\n * example:\n * gl.enable(gl.STENCIL_TEST);\n * gl.stencilFunc(gl.LESS, 0, 0b1110011);\n */\n stencilFunc (func: GLenum, ref: GLint, mask: GLuint) {\n this.stencilFuncSeparate(this._gl.FRONT, func, ref, mask);\n this.stencilFuncSeparate(this._gl.BACK, func, ref, mask);\n }\n\n /**\n * 单面模版测试\n * @param face\n * @param func\n * @param ref\n * @param mask\n * example:\n * gl.enable(gl.STENCIL_TEST);\n * gl.stencilFuncSeparate(gl.FRONT, gl.LESS, 0.2, 1110011);\n */\n stencilFuncSeparate (face: GLenum, func: GLenum, ref: GLint, mask: GLuint) {\n this._set4('stencilFuncSeparate', face, func, ref, mask);\n }\n\n /**\n * 单面的mask写入\n * @param face\n * @param mask\n * example:\n * gl.stencilMaskSeparate(gl.FRONT, 110101);\n */\n stencilMaskSeparate (face: GLenum, mask: GLuint) {\n this._set2('stencilMaskSeparate', face, mask);\n }\n\n /**\n * 设置正面和背面模板测试操作\n * @param fail\n * @param zfail\n * @param zpass\n * example:\n * gl.enable(gl.STENCIL_TEST);\n * gl.stencilOp(gl.INCR, gl.DECR, gl.INVERT);\n */\n stencilOp (fail: GLenum, zfail: GLenum, zpass: GLenum) {\n this.stencilOpSeparate(this._gl.FRONT, fail, zfail, zpass);\n this.stencilOpSeparate(this._gl.BACK, fail, zfail, zpass);\n }\n\n /**\n * 设置正面和/或背面模板测试操作\n * @param face\n * @param fail\n * @param zfail\n * @param zpass\n * example:\n * gl.enable(gl.STENCIL_TEST);\n * gl.stencilOpSeparate(gl.FRONT, gl.INCR, gl.DECR, gl.INVERT);\n */\n stencilOpSeparate (face: GLenum, fail: GLenum, zfail: GLenum, zpass: GLenum) {\n this._set4('stencilOpSeparate', face, fail, zfail, zpass);\n }\n\n //stencil end\n\n //face start\n /**\n * 剔除方式\n * @param mode\n * example:\n * gl.enable(gl.CULL_FACE);\n * gl.cullFace(gl.FRONT_AND_BACK);\n */\n cullFace (mode: GLenum) {\n this._set1('cullFace', mode);\n }\n\n /**\n * 设置卷绕方向\n * @param mode\n * example:\n * gl.frontFace(gl.CW);\n */\n frontFace (mode: GLenum) {\n this._set1('frontFace', mode);\n }\n\n //face end\n\n //color start\n /**\n * 设置颜色写入\n * @param red\n * @param green\n * @param blue\n * @param alpha\n * example:\n * gl.colorMask(true, true, true, false);\n */\n clearColor (red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf) {\n this._set4('clearColor', red, green, blue, alpha);\n }\n\n /**\n * 设置颜色写入\n * @param red\n * @param green\n * @param blue\n * @param alpha\n * example:\n * gl.colorMask(true, true, true, false);\n */\n colorMask (red: boolean, green: boolean, blue: boolean, alpha: boolean) {\n this._set4('colorMask', red, green, blue, alpha);\n }\n\n /**\n * 设置源和目标混合因子\n * @param red\n * @param green\n * @param blue\n * @param alpha\n * example:\n * gl.blendColor(0, 0.5, 1, 1);\n */\n blendColor (red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf) {\n this._set4('blendColor', red, green, blue, alpha);\n }\n\n /**\n * 用于混合像素算法\n * @param sfactor\n * @param dfactor\n * example:\n * gl.enable(gl.BLEND);\n * gl.blendFunc(gl.SRC_COLOR, gl.DST_COLOR);\n */\n blendFunc (sfactor: GLenum, dfactor: GLenum) {\n this.blendFuncSeparate(sfactor, dfactor, sfactor, dfactor);\n }\n\n /**\n * 分别设置应用在 RGB 和 Alpha 上的 factor\n * @param srcRGB\n * @param dstRGB\n * @param srcAlpha\n * @param dstAlpha\n * example:\n * gl.enable(gl.BLEND);\n * gl.blendFuncSeparate(gl.SRC_COLOR, gl.DST_COLOR, gl.ONE, gl.ZERO);\n */\n blendFuncSeparate (srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum) {\n this._set4('blendFuncSeparate', srcRGB, dstRGB, srcAlpha, dstAlpha);\n }\n\n /**\n * 设置混合模式\n * @param mode\n * example:\n * gl.blendEquation(gl.FUNC_ADD);\n * gl.blendEquation(gl.FUNC_SUBTRACT);\n * gl.blendEquation(gl.FUNC_REVERSE_SUBTRACT);\n */\n public blendEquation (mode: GLenum) {\n this._set1('blendEquation', mode);\n }\n\n /**\n * 可以分别对 RGB 和 Alpha 做不同的操作处理\n * @param modeRGB\n * @param modeAlpha\n * example:\n * gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_SUBTRACT);\n */\n blendEquationSeparate (modeRGB: GLenum, modeAlpha: GLenum) {\n this._set2('blendEquationSeparate', modeRGB, modeAlpha);\n }\n\n //color end\n /**\n * 图像预处理\n * @param pname\n * @param param\n * example:\n * var tex = gl.createTexture();\n * gl.bindTexture(gl.TEXTURE_2D, tex);\n * gl.pixelStorei(gl.PACK_ALIGNMENT, 4);\n */\n pixelStorei (pname: GLenum, param: GLenum) {\n const currentParam = this._pixelStorei[pname];\n\n if (currentParam !== param) {\n this._pixelStorei[pname] = param;\n this._gl.pixelStorei(pname, param);\n }\n }\n\n /**\n * 用来设置视口,即指定从标准设备到窗口坐标的x、y仿射变换。\n * @param x\n * @param y\n * @param width\n * @param height\n * example:\n * gl.viewport(0, 0, width, height);\n */\n viewport (x: number, y: number, width: number, height: number) {\n this._set4('viewport', x, y, width, height);\n }\n\n /**\n * 激活指定的纹理单元\n * @param texture\n * example:\n * gl.activeTexture(gl.TEXTURE1);\n */\n activeTexture (texture: GLenum) {\n texture = Math.min(texture, this._maxTextureCount);\n if (this._activeTextureIndex !== texture || this.noCache) {\n this._activeTextureIndex = texture;\n this._gl.activeTexture(texture);\n }\n }\n\n /**\n * 绑定WebGLTexture\n * @param target\n * @param texture\n * @param force\n * example:\n * var texture = gl.createTexture();\n * gl.bindTexture(gl.TEXTURE_2D, texture)\n */\n bindTexture (target: GLenum, texture: WebGLTexture | null, force?: boolean) {\n if (this._currentTextureBinding !== texture || force || this.noCache) {\n this._gl.bindTexture(target, texture);\n this._currentTextureBinding = texture;\n }\n this._textureUnitDict[this._activeTextureIndex] = texture;\n }\n\n private _set1 (name: string, param: any) {\n const value = this._dict[name];\n\n if (value !== param) {\n this._dict[name] = param;\n //@ts-expect-error save to assign\n this._gl[name](param);\n }\n }\n\n private _set2 (name: string, param0: number, param1: number) {\n let value = this._dict[name];\n\n if (!value) {\n value = this._dict[name] = { x: NaN, y: NaN };\n }\n\n if (value.x !== param0 || value.y !== param1) {\n //@ts-expect-error save to assign\n this._gl[name](value.x = param0, value.y = param1);\n }\n }\n\n private _set3 (name: string, param0: any, param1: any, param2: any) {\n let value = this._dict[name];\n\n if (!value) {\n value = this._dict[name] = { x: NaN, y: NaN, z: NaN };\n }\n\n if (value.x !== param0 || value.y !== param1 || value.z !== param2) {\n //@ts-expect-error safe to assign\n this._gl[name](value.x = param0, value.y = param1, value.z = param2);\n }\n }\n\n private _set4 (name: string, param0: any, param1: any, param2: any, param3: any) {\n let value = this._dict[name];\n\n if (!value) {\n value = this._dict[name] = {\n x: NaN, y: NaN, z: NaN, w: NaN,\n };\n }\n\n if (value.x !== param0 || value.y !== param1 || value.z !== param2 || value.w !== param3) {\n //@ts-expect-error safe to assign\n this._gl[name](value.x = param0, value.y = param1, value.z = param2, value.w = param3);\n }\n }\n\n get (name: string): any {\n return this._dict[name];\n }\n}\n\n","export function requestAnimationFrame (cb: (n: number) => void) {\n return window.requestAnimationFrame(cb);\n}\n\nexport function cancelAnimationFrame (handle: number) {\n return window.cancelIdleCallback(handle);\n}\n","import { constants } from './constants';\nimport type { MarsTexture } from '../render/MarsTexture';\nimport type { ProgramUniformInfo } from './GLProgram';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport { consoleError, consoleWarn } from '../common/console';\n\nexport const DATA_DICT: {\n [k: string | number]: {\n name: number,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: any, renderer: GLGPURenderer) => void,\n },\n} = {\n [constants.FLOAT]: {\n name: constants.FLOAT,\n uniform (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) {\n if (value.length != undefined) {\n gl.uniform1fv(info.loc, value);\n } else {\n gl.uniform1f(info.loc, (value as any));\n }\n },\n },\n [constants.FLOAT_VEC2]: {\n name: constants.FLOAT_VEC2,\n uniform (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) {\n gl.uniform2fv(info.loc, value);\n },\n },\n [constants.FLOAT_VEC3]: {\n name: constants.FLOAT_VEC3,\n uniform (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) {\n gl.uniform3fv(info.loc, value);\n },\n },\n [constants.FLOAT_VEC4]: {\n name: constants.FLOAT_VEC4,\n uniform (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) {\n gl.uniform4fv(info.loc, value);\n },\n },\n [constants.FLOAT_MAT2]: {\n name: constants.FLOAT_MAT2,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix2fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT2x3]: {\n name: constants.FLOAT_MAT2x3,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix2x3fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT2x4]: {\n name: constants.FLOAT_MAT2x4,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix2x3fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT3]: {\n name: constants.FLOAT_MAT3,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix3fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT3x2]: {\n name: constants.FLOAT_MAT3x2,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix3x2fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT3x4]: {\n name: constants.FLOAT_MAT3x4,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix3x4fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT4]: {\n name: constants.FLOAT_MAT4,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix4fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT4x3]: {\n name: constants.FLOAT_MAT4x3,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix4x3fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT4x2]: {\n name: constants.FLOAT_MAT4x2,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix4x2fv(info.loc, false, value);\n },\n },\n [constants.INT]: {\n name: constants.INT,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n if (value.length != undefined) {\n gl.uniform1iv(info.loc, value);\n } else {\n gl.uniform1i(info.loc, (value as any));\n }\n },\n },\n [constants.INT_VEC2]: {\n name: constants.INT_VEC2,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform2iv(info.loc, value);\n },\n },\n [constants.INT_VEC3]: {\n name: constants.INT_VEC3,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform3iv(info.loc, value);\n },\n },\n [constants.INT_VEC4]: {\n name: constants.INT_VEC4,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform4iv(info.loc, value);\n },\n },\n [constants.UNSIGNED_INT]: {\n name: constants.UNSIGNED_INT,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Uint32Array | ArrayLike<number>) => {\n gl.uniform1uiv(info.loc, value);\n },\n },\n [constants.UNSIGNED_INT_VEC2]: {\n name: constants.UNSIGNED_INT_VEC2,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Uint32Array | ArrayLike<number>) => {\n gl.uniform2uiv(info.loc, value);\n },\n },\n [constants.UNSIGNED_INT_VEC3]: {\n name: constants.UNSIGNED_INT_VEC3,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Uint32Array | ArrayLike<number>) => {\n gl.uniform3uiv(info.loc, value);\n },\n },\n [constants.UNSIGNED_INT_VEC4]: {\n name: constants.UNSIGNED_INT_VEC4,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Uint32Array | ArrayLike<number>) => {\n gl.uniform4uiv(info.loc, value);\n },\n },\n [constants.BOOL]: {\n name: constants.BOOL,\n uniform: (gl: WebGLRenderingContext | WebGL2RenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n if (value.length != undefined) {\n gl.uniform1iv(info.loc, value);\n } else {\n gl.uniform1f(info.loc, (value as any));\n }\n },\n },\n [constants.BOOL_VEC2]: {\n name: constants.BOOL_VEC2,\n uniform: (gl: WebGLRenderingContext | WebGL2RenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform2iv(info.loc, value);\n },\n },\n [constants.BOOL_VEC4]: {\n name: constants.BOOL_VEC4,\n uniform: (gl: WebGLRenderingContext | WebGL2RenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform4iv(info.loc, value);\n },\n },\n [constants.BOOL_VEC3]: {\n name: constants.BOOL_VEC3,\n uniform: (gl: WebGLRenderingContext | WebGL2RenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform3iv(info.loc, value);\n },\n },\n [constants.SAMPLER_2D]: {\n name: constants.SAMPLER_2D,\n uniform: assignTexUniform,\n },\n [constants.SAMPLER_CUBE]: {\n name: constants.SAMPLER_CUBE,\n uniform: assignTexUniform,\n },\n};\n\nfunction assignTexUniform (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: MarsTexture | MarsTexture[], renderer: GLGPURenderer) {\n if (value) {\n if (info.size > 1) {\n if (Array.isArray(value)) {\n value.forEach(function (tex, index) {\n assignTextureLoc(gl, info, tex, renderer, index);\n });\n } else {\n consoleError(`${info.name}[${info.size}] expect texture arrays`);\n }\n } else {\n assignTextureLoc(gl, info, value as MarsTexture, renderer, 0);\n }\n }\n}\n\nfunction assignTextureLoc (gl: WebGLRenderingContext | WebGL2RenderingContext, info: ProgramUniformInfo, value: MarsTexture, renderer: GLGPURenderer, index: number) {\n if (value) {\n if (value.isDestroyed) {\n return consoleError(`texture ${value.name} destroyed `, value);\n }\n renderer.state.activeTexture(gl.TEXTURE0 + info.textureIndex + index);\n const glTex = value.internal;\n\n if (glTex) {\n renderer.state.bindTexture(glTex.target, glTex.glHandle as WebGLTexture, true);\n } else {\n consoleWarn('texture not assigned to gl');\n }\n }\n}\n","import { constants } from './constants';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport type { TypedArray, UniformValue, vec2 } from '../../types';\nimport { GLGPUBuffer } from './GLGPUBuffer';\nimport { forEach, strHashCode } from '../common/utils';\n\ntype TypedArrayCtrl =\n Float32ArrayConstructor\n | Int8ArrayConstructor\n | Int32ArrayConstructor\n | Int16ArrayConstructor\n | Uint32ArrayConstructor\n | Uint16ArrayConstructor\n | Uint8ArrayConstructor;\n\nexport interface UniformBlockSpec {\n index: number,\n usedByVertexShader: boolean,\n usedByFragmentShader: boolean,\n size: number,\n uniformIndices: number[],\n used: boolean,\n name: string,\n uniforms: Record<string, BlockUniformInfo>,\n id: string,\n}\n\ntype BlockUniformInfo = [\n type: number,\n offset: number,\n size: number,\n blockIndex: number,\n arrayStride: number,\n maxStride: number,\n rowMajor: number,\n index: number,\n byteLength: number,\n];\n\nconst BlockUniformInfoOffset = 1;\nconst BlockUniformInfoByteLength = 8;\nconst BlockUniformInfoType = 0;\nconst BlockUniformInfoArrayStride = 4;\nconst BlockUniformInfoArraySize = 2;\nconst BlockUniformInfoRowStride = 5;\n\nfunction getUboHash (spec: UniformBlockSpec) {\n const ret = Object.keys(spec.uniforms).map(name => name + '[' + spec.uniforms[name].join(':') + ']').join('+');\n\n return strHashCode(spec.name + '+', spec.size + '+', spec.uniformIndices.length + '+', ret);\n}\n\nexport function createUniformBlockSpecsFromProgram (gl: WebGL2RenderingContext, program: WebGLProgram, blockUniformNames: string[]): UniformBlockSpec[] {\n const blockSpecs: UniformBlockSpec[] = [];\n const numUniformBlocks = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n\n for (let ii = 0; ii < numUniformBlocks; ++ii) {\n const name = gl.getActiveUniformBlockName(program, ii) as string;\n const blockSpec: UniformBlockSpec = {\n index: gl.getUniformBlockIndex(program, name),\n usedByVertexShader: gl.getActiveUniformBlockParameter(program, ii, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n usedByFragmentShader: gl.getActiveUniformBlockParameter(program, ii, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n size: gl.getActiveUniformBlockParameter(program, ii, gl.UNIFORM_BLOCK_DATA_SIZE),\n uniformIndices: gl.getActiveUniformBlockParameter(program, ii, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),\n used: false,\n uniforms: {},\n name: name,\n id: '',\n };\n\n blockSpec.used = blockSpec.usedByVertexShader || blockSpec.usedByFragmentShader;\n blockSpecs[ii] = blockSpec;\n const indices = blockSpec.uniformIndices;\n const uniformNames: string[] = [];\n\n for (let i = 0; i < indices.length; i++) {\n const name = gl.getActiveUniform(program, indices[i])!.name.replace('[0]', '');\n\n blockSpec.uniforms[name] = [0, 0, 0, 0, 0, 0, 0, i, 0];\n uniformNames[i] = name;\n blockUniformNames.push(name);\n }\n [gl.UNIFORM_TYPE, gl.UNIFORM_OFFSET, gl.UNIFORM_SIZE, gl.UNIFORM_BLOCK_INDEX, gl.UNIFORM_ARRAY_STRIDE, gl.UNIFORM_MATRIX_STRIDE, gl.UNIFORM_IS_ROW_MAJOR].forEach(function (param, pi) {\n gl.getActiveUniforms(program, indices, param).forEach(function (value: number, idx: number) {\n const name = uniformNames[idx];\n\n blockSpec.uniforms[name][pi] = +value;\n });\n });\n for (let i = 0; i < uniformNames.length; i++) {\n const uniform = blockSpec.uniforms[uniformNames[i]];\n const nextUniform = blockSpec.uniforms[uniformNames[i + 1]];\n const size = nextUniform ? nextUniform[1] : blockSpec.size;\n\n uniform[8] = size - uniform[1];\n }\n blockSpec.id = getUboHash(blockSpec) + '';\n }\n\n return blockSpecs;\n}\n\nfunction numberSetter (type: TypedArrayCtrl) {\n return function (value: number | number[], info: BlockUniformInfo, name: string, range: vec2): UBODirtyFlag {\n const flag: UBODirtyFlag = {\n start: info[BlockUniformInfoOffset],\n dirty: true,\n };\n const arrSize = info[BlockUniformInfoArraySize];\n\n if (arrSize > 1) {\n const values = value as number[];\n\n if (values.length) {\n const eleCount = range[1] || values.length;\n const vecLen = info[BlockUniformInfoArrayStride] / type.BYTES_PER_ELEMENT;\n const buffer = flag.buffer = new type(eleCount * vecLen);\n const start = range[0] || 0;\n\n for (let i = 0; i < eleCount; i++) {\n buffer[i * vecLen] = values[i + start];\n }\n flag.start += start * vecLen;\n }\n } else {\n flag.buffer = new type([value] as number[]);\n }\n\n return flag;\n };\n}\n\nconst arrSetter = (type: TypedArrayCtrl) => function setArray (value: number[], info: BlockUniformInfo, name: string, range: vec2): UBODirtyFlag {\n const blockByteLen = info[BlockUniformInfoByteLength];\n const arrSize = info[BlockUniformInfoArraySize];\n const rowStride = info[BlockUniformInfoRowStride];\n const entryStride = arrSize === 1 ? blockByteLen : info[BlockUniformInfoArrayStride];\n const entryRowCount = rowStride ? entryStride / rowStride : 1;\n const rowNumPadding = entryStride / type.BYTES_PER_ELEMENT / entryRowCount;\n const maxRowCount = blockByteLen / type.BYTES_PER_ELEMENT / rowNumPadding;\n //set array\n const numPerEntry = ItemPerValueMap[info[BlockUniformInfoType]];\n const numPerRow = numPerEntry / entryRowCount;\n const valueStartIndex = (range[0] || 0) * numPerEntry;\n const totalRow = range[1] ? entryRowCount * range[1] : maxRowCount;\n const buffer = new type(rowNumPadding * totalRow);\n const flag: UBODirtyFlag = {\n start: info[BlockUniformInfoOffset] + entryStride * (range[0] || 0),\n dirty: true,\n buffer,\n };\n\n for (let i = 0, bufferTarget = 0, sourceIndex = valueStartIndex; i < totalRow; i++) {\n for (let j = 0; j < numPerRow; j++) {\n buffer[bufferTarget + j] = value[sourceIndex + j];\n }\n bufferTarget += rowNumPadding;\n sourceIndex += numPerRow;\n }\n\n return flag;\n};\n\nconst setFloat32Array = arrSetter(Float32Array);\nconst setInt32Array = arrSetter(Int32Array);\nconst setUInt8Array = arrSetter(Uint8Array);\n\nconst MemorySetter: Record<string, (value: any, info: BlockUniformInfo, name: string, range: vec2) => UBODirtyFlag> = {\n [constants.FLOAT]: numberSetter(Float32Array),\n [constants.INT]: numberSetter(Int32Array),\n [constants.UNSIGNED_INT]: numberSetter(Uint32Array),\n [constants.SHORT]: numberSetter(Int16Array),\n [constants.BOOL]: numberSetter(Uint8Array),\n [constants.UNSIGNED_SHORT]: numberSetter(Uint16Array),\n [constants.FLOAT_VEC2]: setFloat32Array,\n [constants.FLOAT_VEC3]: setFloat32Array,\n [constants.FLOAT_VEC4]: setFloat32Array,\n [constants.FLOAT_MAT2]: setFloat32Array,\n [constants.FLOAT_MAT3]: setFloat32Array,\n [constants.FLOAT_MAT4]: setFloat32Array,\n [constants.FLOAT_MAT2x3]: setFloat32Array,\n [constants.FLOAT_MAT2x4]: setFloat32Array,\n [constants.FLOAT_MAT4x3]: setFloat32Array,\n [constants.FLOAT_MAT4x2]: setFloat32Array,\n [constants.FLOAT_MAT3x4]: setFloat32Array,\n [constants.FLOAT_MAT3x2]: setFloat32Array,\n [constants.INT_VEC2]: setInt32Array,\n [constants.INT_VEC3]: setInt32Array,\n [constants.INT_VEC4]: setInt32Array,\n [constants.UNSIGNED_INT_VEC2]: setInt32Array,\n [constants.UNSIGNED_INT_VEC3]: setInt32Array,\n [constants.UNSIGNED_INT_VEC4]: setInt32Array,\n [constants.BOOL_VEC2]: setUInt8Array,\n [constants.BOOL_VEC3]: setUInt8Array,\n [constants.BOOL_VEC4]: setUInt8Array,\n};\n\nconst ItemPerValueMap: Record<number, number> = {\n [constants.FLOAT]: 1,\n [constants.INT]: 1,\n [constants.UNSIGNED_INT]: 1,\n [constants.SHORT]: 1,\n [constants.BOOL]: 1,\n [constants.UNSIGNED_SHORT]: 1,\n [constants.FLOAT_VEC2]: 2,\n [constants.FLOAT_VEC3]: 3,\n [constants.FLOAT_VEC4]: 4,\n [constants.FLOAT_MAT2]: 4,\n [constants.FLOAT_MAT3]: 9,\n [constants.FLOAT_MAT4]: 16,\n [constants.FLOAT_MAT2x3]: 6,\n [constants.FLOAT_MAT2x4]: 8,\n [constants.FLOAT_MAT4x3]: 12,\n [constants.FLOAT_MAT4x2]: 8,\n [constants.FLOAT_MAT3x4]: 12,\n [constants.FLOAT_MAT3x2]: 6,\n [constants.INT_VEC2]: 2,\n [constants.INT_VEC3]: 3,\n [constants.INT_VEC4]: 4,\n [constants.UNSIGNED_INT_VEC2]: 2,\n [constants.UNSIGNED_INT_VEC3]: 3,\n [constants.UNSIGNED_INT_VEC4]: 4,\n [constants.BOOL_VEC2]: 2,\n [constants.BOOL_VEC3]: 3,\n [constants.BOOL_VEC4]: 4,\n};\n\nconst fullRange = [0, 0];\n\ninterface UBODirtyFlag {\n start: number,\n dirty: boolean,\n buffer?: TypedArray,\n}\n\nexport class UniformBlockBuffer {\n buffer?: GLGPUBuffer;\n info: UniformBlockSpec;\n dirtyFlags: Record<string, UBODirtyFlag>;\n keepData: boolean;//for debug use\n\n constructor (renderer: GLGPURenderer, info: UniformBlockSpec) {\n this.buffer = new GLGPUBuffer({\n target: constants.UNIFORM_BUFFER,\n name: info.name,\n byteLength: info.size,\n }, renderer);\n this.dirtyFlags = {};\n this.info = info;\n }\n\n setValues (uniformValues: Record<string, UniformValue>, dirtyFlags: Record<string, boolean>, uniformValueOffsets: Record<string, vec2>) {\n forEach(uniformValues, (value, name) => {\n const uniformInfo: BlockUniformInfo = this.info.uniforms[name];\n\n if (uniformInfo && dirtyFlags[name]) {\n const range = uniformValueOffsets[name] || fullRange;\n const setter = MemorySetter[uniformInfo[BlockUniformInfoType]]!;\n\n this.dirtyFlags[name] = setter(value, uniformInfo, name, range);\n }\n });\n\n }\n\n bind (gl: WebGL2RenderingContext, program: WebGLProgram, bufferBindIndex: number) {\n const buffer = this.buffer;\n\n if (buffer) {\n buffer.bind();\n forEach(this.dirtyFlags, (flag, name) => {\n if (flag.dirty) {\n buffer.bufferSubData(flag.start, new Uint8Array(flag.buffer!.buffer));\n if (!this.keepData) {\n delete flag.buffer;\n }\n flag.dirty = false;\n }\n });\n gl.uniformBlockBinding(program, bufferBindIndex, bufferBindIndex);\n gl.bindBufferRange(gl.UNIFORM_BUFFER, bufferBindIndex, buffer.glBuffer, 0, this.info.size);\n }\n\n }\n\n destroy () {\n if (this.buffer) {\n this.buffer.destroy();\n this.buffer = undefined;\n }\n }\n}\n\n","import type { GLGPURenderer } from './GLGPURenderer';\nimport { arrAdd, forEach } from '../common/utils';\nimport type { GLGeometry } from './GLGeometry';\nimport type { RenderState } from '../../types/RenderFrame';\nimport { DATA_DICT } from './glType';\nimport { consoleError, consoleWarn } from '../common/console';\nimport type { MarsMaterial } from '../render/MarsMaterial';\nimport type { GLVertexArrayObject } from './GLVertexArrayObject';\nimport type { UniformBlockSpec } from './GLUniformUtils';\nimport { createUniformBlockSpecsFromProgram } from './GLUniformUtils';\nimport type { MarsMaterialDataBlock } from '../render/MarsMaterialDataBlock';\nimport { getBytesPerElementByGLType, getMatAttrLocPair } from './constants';\nimport type { UniformValue } from '../../types';\n\nexport interface ProgramAttributeInfo {\n readonly name: string,\n readonly size: number,\n readonly type: number,\n readonly loc: number,\n}\n\nexport interface ProgramUniformInfo {\n readonly loc: WebGLUniformLocation,\n readonly subInfos: ProgramUniformInfo[],\n readonly name: string,\n readonly size: number,\n readonly type: number,\n readonly textureIndex: number,\n readonly isTexture: boolean,\n}\n\nconst temArr: Set<MarsMaterialDataBlock> = new Set<MarsMaterialDataBlock>();\n\nexport class GLProgram {\n readonly glHandle: WebGLProgram;\n readonly renderer: GLGPURenderer;\n readonly shared: boolean;\n readonly id: string;\n readonly _vaos: GLVertexArrayObject[];\n readonly uniformBlockMap: Record<string, UniformBlockSpec>;\n attrInfoMap!: { [key: string]: ProgramAttributeInfo };\n uniformInfoMap!: { [key: string]: ProgramUniformInfo };\n private _uniformBlocks!: UniformBlockSpec[];\n\n constructor (renderer: GLGPURenderer, program: WebGLProgram, shared: boolean, id: string) {\n this.glHandle = program;\n this.renderer = renderer;\n this.shared = shared;\n this.uniformBlockMap = {};\n this.id = id;\n this.init(renderer, program);\n this._vaos = [];\n }\n\n init (renderer: GLGPURenderer, program: WebGLProgram) {\n const gl = renderer.gl;\n\n renderer.state.useProgram(program);\n let num = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n const attrMap: { [key: string]: ProgramAttributeInfo } = {};\n\n for (let i = 0; i < num; i++) {\n const { name, type, size } = gl.getActiveAttrib(program, i) as WebGLActiveInfo;\n const loc = gl.getAttribLocation(program, name);\n\n attrMap[name] = {\n type, name, size, loc,\n };\n }\n\n this.attrInfoMap = attrMap;\n\n const uniformMap: { [key: string]: ProgramUniformInfo } = {};\n\n num = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n let textureIndex = 0;\n const emptyTexture2D = renderer.emptyTexture2D;\n const emptyTextureCube = renderer.emptyTextureCube;\n const blockUniformNames: string[] = [];\n\n if (renderer.level === 2) {\n this._uniformBlocks = createUniformBlockSpecsFromProgram(gl as WebGL2RenderingContext, program, blockUniformNames);\n this._uniformBlocks.forEach(b => this.uniformBlockMap[b.name] = b);\n } else {\n this._uniformBlocks = [];\n }\n for (let i = 0; i < num; i++) {\n const info = gl.getActiveUniform(program, i) as WebGLActiveInfo;\n const { size, type } = gl.getActiveUniform(program, i) as WebGLActiveInfo;\n let name = info.name;\n let location = null;\n\n // BUG, webgl and node gl use different name\n if (/\\[0\\]$/.test(name)) {\n location = gl.getUniformLocation(program, name);\n }\n name = name.replace(/\\[0\\]$/, '');\n if (!location) {\n location = gl.getUniformLocation(program, name);\n }\n if (!location) {\n if (!blockUniformNames.includes(name)) {\n consoleWarn(`get uniform ${name} loc fail`);\n }\n continue;\n }\n this.renderer._assignInspectorName(location, name);\n let locTexIndex = -1;\n\n if (type === gl.SAMPLER_2D || type === gl.SAMPLER_CUBE) {\n locTexIndex = textureIndex;\n for (let k = 0; k < size; k++) {\n const subLoc = k > 0 ? gl.getUniformLocation(program, `${name}[${k}]`) : location;\n const activeIndex = textureIndex + k;\n\n if (activeIndex < renderer.gpu.capability.maxShaderTexCount) {\n gl.activeTexture(gl.TEXTURE0 + activeIndex);\n if (type === gl.SAMPLER_2D) {\n gl.bindTexture(gl.TEXTURE_2D, emptyTexture2D.glHandle as WebGLTexture);\n } else {\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, emptyTextureCube.glHandle as WebGLTexture);\n }\n gl.uniform1i(subLoc, activeIndex);\n } else {\n consoleError(`texture index ${activeIndex} overflows max ${renderer.gpu.capability.maxShaderTexCount}`);\n }\n }\n textureIndex += size;\n }\n\n const subInfos: ProgramUniformInfo[] = [];\n\n for (let j = 0; j < size; ++j) {\n const fullName = name + '[' + j + ']';\n const loc = gl.getUniformLocation(program, fullName);\n\n if (loc !== null) {\n subInfos.push({\n name: fullName,\n loc: loc,\n subInfos: [],\n type: type,\n size: 1,\n textureIndex: locTexIndex,\n isTexture: locTexIndex > -1,\n });\n }\n }\n\n uniformMap[name] = {\n name,\n loc: location,\n subInfos: subInfos,\n type,\n size,\n textureIndex: locTexIndex,\n isTexture: locTexIndex > -1,\n };\n }\n\n renderer.state.useProgram(null);\n gl.activeTexture(gl.TEXTURE0);\n renderer.state.activeTexture(gl.TEXTURE0);\n renderer.state.bindTexture(gl.TEXTURE_2D, emptyTexture2D.glHandle as WebGLTexture, true);\n this.uniformInfoMap = uniformMap;\n }\n\n bind () {\n const renderer = this.renderer;\n\n if (renderer) {\n renderer.state.useProgram(this.glHandle);\n }\n\n }\n\n getSemanticValue (state: RenderState, semanticName: string) {\n const renderPassSemantics = state.currentPass.semantics;\n const renderFrameSemantics = state.currentFrame.semantics;\n\n if (renderPassSemantics.hasSemanticValue(semanticName)) {\n return renderPassSemantics.getSemanticValue(semanticName, state);\n } else if (renderFrameSemantics.hasSemanticValue(semanticName)) {\n return renderFrameSemantics.getSemanticValue(semanticName, state);\n }\n }\n\n setupUniforms (state: RenderState) {\n this.bind();\n const material = state.currentMesh.material as MarsMaterial;\n const gl = this.renderer.gl;\n const blocks = material._dataBlocks;\n const shared = this.shared;\n\n temArr.clear();\n\n forEach(this.uniformBlockMap, (uboInfo, name) => {\n if (uboInfo) {\n\n const block = material.getDataBlockByName(uboInfo.name);\n\n if (block) {\n forEach(block.uniformSemantics, (semanticName, uniformName: string)=> {\n if (uniformName in uboInfo.uniforms && !block.hasUniformValue(uniformName)) {\n const val = this.getSemanticValue(state, semanticName) as UniformValue;\n\n if (val || val === 0) {\n block.setUniformValue(uniformName, val, true);\n }\n\n }\n });\n const uboBuffer = block.createUboBuffer(uboInfo);\n\n if (uboBuffer) {\n block.setUboBuffer(uboBuffer);\n temArr.add(block);\n\n return uboBuffer.bind(gl as WebGL2RenderingContext, this.glHandle, uboInfo.index);\n }\n }\n }\n });\n\n forEach(this.uniformInfoMap, (info: ProgramUniformInfo, name) => {\n let val;\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i];\n const semanticName = block.uniformSemantics[name];\n\n if (info.isTexture) {\n if (block.hasUniformValue(name)) {\n val = block.getUniformTexture(name);\n } else if (semanticName) {\n val = this.getSemanticValue(state, semanticName);\n }\n } else if (temArr.has(block)) {\n continue;\n } else if (block.hasUniformValue(name)) {\n if (!shared && !block._uniformFlags[name] && info.textureIndex === -1) {\n //not dirty, don't assign\n return;\n }\n val = block.getUniformValue(name);\n } else if (semanticName) {\n val = this.getSemanticValue(state, semanticName);\n }\n if (val !== undefined && val !== null) {\n return this.setGLUniformValue(name, val, info, gl);\n }\n }\n if (!info.isTexture) {\n consoleWarn(`mesh ${state.currentMesh.name} uniform ${name} value unset`);\n }\n });\n\n }\n\n setGLUniformValue (name: string, value: any, info: ProgramUniformInfo, gl: WebGL2RenderingContext | WebGLRenderingContext) {\n const uniformInfo = DATA_DICT[info.type];\n const subInfos = info.subInfos;\n\n if (subInfos.length > 0 && Array.isArray(value) && Array.isArray(value[0])) {\n for (let i = 0; i < subInfos.length && i < value.length; ++i) {\n const subInfo = subInfos[i];\n\n uniformInfo.uniform(gl, subInfo, value[i], this.renderer);\n }\n\n return;\n }\n uniformInfo.uniform(gl, info, value, this.renderer);\n }\n\n setupAttributes (geometry: GLGeometry): GLVertexArrayObject {\n const gl = this.renderer.gl as WebGLRenderingContext;\n const vao = geometry.createVao(this.id);\n const gpu = this.renderer.gpu;\n\n if (vao) {\n vao.bind();\n if (vao.ready) {\n return vao;\n } else {\n arrAdd(this._vaos, vao);\n }\n }\n forEach(this.attrInfoMap, function (attrInfo, name) {\n const attribute = geometry.attributes[name];\n\n if (attribute) {\n const buffer = geometry.getGPUBuffer(attribute.dataSource);\n\n if (!buffer) {\n throw Error(`no buffer named ${attribute.dataSource || name}`);\n }\n buffer.bind();\n if (attribute.size > 4) {\n const [row, col] = getMatAttrLocPair(attrInfo.type);\n const bytesPerRow = getBytesPerElementByGLType(attribute.type) * col;\n const stride = row * bytesPerRow;\n\n for (let i = 0; i < row; i++) {\n const loc = attrInfo.loc + i;\n\n gl.enableVertexAttribArray(loc);\n gl.vertexAttribPointer(loc, col, attribute.type, attribute.normalize as boolean, stride, i * bytesPerRow);\n if (attribute.instanceDivisor && gpu.capability.instanceDraw) {\n gpu.vertexAttribDivisor(gl, loc, attribute.instanceDivisor);\n }\n }\n } else {\n gl.enableVertexAttribArray(attrInfo.loc);\n gl.vertexAttribPointer(attrInfo.loc, attribute.size, attribute.type, attribute.normalize as boolean, attribute.stride || 0, attribute.offset || 0);\n if (attribute.instanceDivisor && gpu.capability.instanceDraw) {\n gpu.vertexAttribDivisor(gl, attrInfo.loc, attribute.instanceDivisor);\n }\n }\n\n }\n });\n geometry._indexBuffer?.bind();\n if (vao) {\n vao.ready = true;\n }\n\n return vao;\n }\n\n destroy () {\n if (this.renderer) {\n this._vaos.forEach(vao => vao.destroy());\n this._vaos.length = 0;\n this.renderer.gl.deleteProgram(this.glHandle);\n //@ts-expect-error safe to assign\n this.renderer = null;\n }\n }\n}\n","import type {\n ShaderCompileResult,\n ShaderLibrary,\n ShaderMarcos,\n ShaderWithSource,\n SharedShaderWithSource,\n} from '../../types/ShaderLibrary';\nimport {\n ShaderCompileResultStatus,\n} from '../../types/ShaderLibrary';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport { arrAdd, forEach, strHashCode } from '../common/utils';\nimport { requestAnimationFrame } from '../common/raf';\nimport { GLProgram } from './GLProgram';\nimport { consoleError } from '../common/console';\n\ninterface GLShaderCompileResult extends ShaderCompileResult {\n program?: WebGLProgram,\n}\n\nenum ShaderType {\n vertex = 0,\n fragment = 1\n}\n\nconst downgradeKeywords: Record<string, Record<string, string>> = {\n [ShaderType.vertex]: {\n in: 'attribute',\n out: 'varying',\n },\n [ShaderType.fragment]: {\n in: 'varying',\n },\n};\nlet shaderSeed = 1;\n\nexport class GLShaderLibrary implements ShaderLibrary {\n readonly renderer: GLGPURenderer;\n private readonly shaderResults: { [p: string]: ShaderCompileResult };\n\n private _shaderMap: { [key: string]: ShaderWithSource };\n private _programMap: { [key: string]: GLProgram };\n\n private _glVertShaderMap: Map<number, WebGLShader>;\n private _glFragShaderMap: Map<number, WebGLShader>;\n\n private readonly _glAsyncCompileExt?: { COMPLETION_STATUS_KHR: number };\n private _shaderAllDone = false;\n\n constructor (renderer: GLGPURenderer) {\n this.renderer = renderer;\n this._shaderMap = {};\n this.shaderResults = {};\n this._programMap = {};\n this._glVertShaderMap = new Map<number, WebGLShader>();\n this._glFragShaderMap = new Map<number, WebGLShader>();\n const gl = this.renderer.gl as WebGLRenderingContext;\n\n this._glAsyncCompileExt = gl.getExtension('KHR_parallel_shader_compile') as { COMPLETION_STATUS_KHR: number };\n }\n\n get cacheIds (): string[] {\n return Object.keys(this.shaderResults);\n }\n getShaderResult (cacheId: string): ShaderCompileResult | undefined {\n if (this.shaderResults) {\n return this.shaderResults[cacheId];\n }\n }\n\n compileAllShaders (asyncCallback?: (results: ShaderCompileResult[]) => void) {\n if (!this._shaderAllDone) {\n const res = this.shaderResults;\n const pendings: string[] = [];\n\n forEach(this._shaderMap, (result, id) => {\n if (!res[id]) {\n arrAdd(pendings, id);\n }\n });\n\n if (asyncCallback) {\n if (pendings.length) {\n Promise.all<Promise<ShaderCompileResult>[]>(\n pendings.map(id => new Promise(resolve => this.compileShader(id, resolve)))\n )\n .then(asyncCallback)\n .catch(() => 0);\n } else {\n asyncCallback([]);\n }\n } else {\n pendings.map(id => this.compileShader(id));\n }\n this._shaderAllDone = true;\n } else if (asyncCallback) {\n asyncCallback([]);\n }\n }\n\n getProgram (shaderCacheId: string): GLProgram | null {\n if (this._programMap[shaderCacheId] == undefined) {\n if (this._shaderMap[shaderCacheId] !== undefined) {\n this.compileShader(shaderCacheId);\n }\n }\n\n return this._programMap[shaderCacheId];\n }\n\n addMarcosHeader (header: string, shader: string, type: ShaderType, downgrade?: boolean): string {\n const versionTag = /#version\\s+\\b\\d{3}\\b\\s*(es)?/;\n const GLV = `WEBGL${this.renderer.level}`;\n\n if (downgrade) {\n header = header + `\n#ifndef ${GLV}\n#define ${GLV}\n#endif`;\n }\n let fullShader = header + '\\n' + shader;\n const match = fullShader.match(versionTag);\n const version = match ? match[0] : '';\n let realVersion = version;\n\n if (version && version.includes('300') && this.renderer.level === 1 && downgrade) {\n realVersion = '';\n fullShader = fullShader.replace(/\\b(in|out)\\b/g, function (str) {\n return downgradeKeywords[type][str] || str;\n });\n }\n\n return realVersion + '\\n' + fullShader.replace(version, '\\n');\n }\n\n addShader (shader: ShaderWithSource): string {\n const marcosHead = shader.marcos ? combineMaterialMarcos(shader.marcos) : '';\n const vertex = shader.vertex ? this.addMarcosHeader(marcosHead, shader.vertex, ShaderType.vertex, shader.downgrade) : '';\n const fragment = shader.fragment ? this.addMarcosHeader(marcosHead, shader.fragment, ShaderType.fragment, shader.downgrade) : '';\n let shaderCacheId: string;\n let shared = false;\n\n if (shader.shared || (shader as unknown as SharedShaderWithSource).cacheId) {\n shaderCacheId = (shader as SharedShaderWithSource).cacheId || `shared_${strHashCode(vertex, fragment)}`;\n shared = true;\n } else {\n shaderCacheId = 'instanced_' + shaderSeed++;\n }\n if (!this._shaderMap[shaderCacheId]) {\n this._shaderAllDone = false;\n this._shaderMap[shaderCacheId] = {\n vertex,\n fragment,\n name: shader.name || shaderCacheId,\n shared,\n };\n }\n\n return shaderCacheId;\n }\n\n compileShader (shaderCacheId: string, asyncCallback?: (result: ShaderCompileResult) => void): ShaderCompileResult {\n const shaderResult = this.shaderResults[shaderCacheId];\n\n if (!shaderResult) {\n const shader = this._shaderMap[shaderCacheId];\n\n if (!shader) {\n return {\n status: ShaderCompileResultStatus.noShader,\n };\n }\n const gl = this.renderer.gl as WebGLRenderingContext;\n const result: GLShaderCompileResult = { shared: shader.shared, status: ShaderCompileResultStatus.compiling };\n const linkProgram = this.createProgram(gl, shader.vertex, shader.fragment, result);\n const ext = this._glAsyncCompileExt;\n const startTime = Date.now();\n const checkComplete = () => {\n const shouldLink = !asyncCallback || !ext || (ext && gl.getProgramParameter(result.program as GLProgram, ext.COMPLETION_STATUS_KHR) == true);\n const program = shouldLink && linkProgram();\n\n if (program) {\n if (result.status !== ShaderCompileResultStatus.fail) {\n this.renderer._assignInspectorName(program, shader.name);\n const glProgram = new GLProgram(this.renderer, program, !!shader.shared, shaderCacheId);\n\n gl.validateProgram(program);\n const valid = gl.getProgramParameter(program, gl.VALIDATE_STATUS);\n\n if (!valid) {\n result.status = ShaderCompileResultStatus.fail;\n } else {\n result.status = ShaderCompileResultStatus.success;\n result.compileTime = Date.now() - startTime;\n this._programMap[shaderCacheId] = glProgram;\n }\n }\n if (result.status === ShaderCompileResultStatus.fail) {\n const error = gl.getProgramInfoLog(program);\n\n result.error = error;\n consoleError('compileProgramError: ' + error, '\\nvertex:\\n', shader.vertex, '\\nfragment:\\n', shader.fragment);\n gl.deleteProgram(program);\n }\n if (asyncCallback) {\n asyncCallback(result);\n }\n } else if (asyncCallback) {\n requestAnimationFrame(checkComplete);\n }\n };\n\n this.shaderResults[shaderCacheId] = result;\n checkComplete();\n } else if (asyncCallback) {\n asyncCallback(shaderResult);\n }\n\n return this.shaderResults[shaderCacheId];\n }\n\n createProgram (gl: WebGLRenderingContext, vs: string, fs: string, result: GLShaderCompileResult): () => (WebGLProgram | null) {\n const program = gl.createProgram();\n const vertexShader = this.createShader(gl, gl.VERTEX_SHADER, vs);\n const fragShader = this.createShader(gl, gl.FRAGMENT_SHADER, fs);\n\n if (program && vertexShader && fragShader) {\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragShader);\n gl.linkProgram(program);\n result.program = program;\n result.status = ShaderCompileResultStatus.compiling;\n\n return function () {\n delete result.program;\n let error!: string | null;\n const linked = !error && gl.getProgramParameter(program, gl.LINK_STATUS);\n\n if (!linked) {\n checkShader(vertexShader, 'vertex', vs);\n checkShader(fragShader, 'fragment', fs);\n result.status = ShaderCompileResultStatus.fail;\n\n return program;\n }\n\n return program;\n };\n }\n result.status = ShaderCompileResultStatus.fail;\n\n return () => null;\n function checkShader (shader: WebGLShader, type: string, code: string) {\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const error = gl.getShaderInfoLog(shader);\n\n consoleError(\n 'compile ' + (type) + ' error: ' + error,\n code\n .split('\\n')\n .map((line, index) => `${index + 1} ${line}`)\n .join('\\n'),\n );\n result.error = error;\n result.status = ShaderCompileResultStatus.fail;\n }\n }\n }\n\n createShader (gl: WebGLRenderingContext, shaderType: GLenum, code: string): WebGLShader | null {\n const map = shaderType === gl.VERTEX_SHADER ? this._glVertShaderMap : this._glFragShaderMap;\n const strHash = strHashCode(code);\n const ret = map.get(strHash);\n\n if (ret) {\n return ret;\n }\n const shader = gl.createShader(shaderType);\n\n if (shader) {\n gl.shaderSource(shader, code);\n gl.compileShader(shader);\n map.set(strHash, shader);\n }\n\n return shader;\n }\n\n deleteShader (cacheId: string): void {\n const program = this._programMap[cacheId];\n\n if (program !== undefined) {\n program.destroy();\n delete this._programMap[cacheId];\n }\n const result = this.shaderResults[cacheId];\n\n if (result !== undefined) {\n delete this.shaderResults[cacheId];\n }\n }\n\n destroy (): void {\n this._shaderMap = {};\n forEach(this._programMap, function (program: GLProgram) {\n program.destroy();\n });\n this._programMap = {};\n if (this.renderer) {\n const gl = this.renderer.gl;\n\n this._glFragShaderMap.forEach(function (shader) {\n gl.deleteShader(shader);\n });\n this._glVertShaderMap.forEach(function (shader) {\n gl.deleteShader(shader);\n });\n this._glVertShaderMap = new Map<number, WebGLShader>();\n this._glFragShaderMap = new Map<number, WebGLShader>();\n }\n // @ts-expect-error safe to assign\n this['renderer'] = null;\n }\n}\n\nfunction combineMaterialMarcos (marcos?: ShaderMarcos) {\n const ret: string[] = [];\n\n if (marcos) {\n marcos.forEach(function ([key, value]) {\n if (value === true) {\n ret.push(`#define ${key}`);\n } else if (Number.isFinite(value)) {\n ret.push(`#define ${key} ${value}`);\n }\n });\n\n return ret.length ? (ret.join('\\n') + '\\n') : '';\n }\n\n return '';\n}\n\n","export function isAndroid (): boolean {\n if (IS_NODE) {\n return false;\n } else {\n return /\\b[Aa]ndroid\\b/.test(navigator.userAgent);\n }\n}\n","import type {\n GPUCapability,\n GPUCapabilityDetail,\n} from '../../types/GPUCapability';\nimport {\n COMPRESSED_TEXTURE_ASTC,\n COMPRESSED_TEXTURE_PVRTC,\n} from '../../types/GPUCapability';\nimport type { Immutable } from '../../types/type';\nimport { isAndroid } from '../common/env';\nimport { consoleError, consoleWarn } from '../common/console';\n\nlet textureMaxAnisotropyExt: number;\n\ninterface GLGPUCapabilityDetail extends GPUCapabilityDetail {\n vao: boolean,\n standardDerivatives: boolean,\n halfFloatLinear: boolean,\n floatLinear: boolean,\n maxShaderTexCount: number,\n instanceDraw: boolean,\n}\n\nconst webGL2ConstructorAvailable = typeof WebGL2RenderingContext === 'function';\n\nconst TYPE_WEBGL = 'webgl';\nconst TYPE_WEBGL2 = 'webgl2';\n\nexport class GLGPUCapability implements GPUCapability {\n readonly capability!: Immutable<GLGPUCapabilityDetail>;\n readonly level!: number;\n readonly type!: 'webgl' | 'webgl2' | 'node-gl' | 'none';\n\n drawBufferExtension: any;\n vaoExt: any;\n\n UNSIGNED_INT_24_8!: number;\n\n internalFormatDepth16!: number;\n internalFormatDepth24_stencil8!: number;\n\n instanceDrawExt?: ANGLE_instanced_arrays;\n\n constructor (opt: { glType?: 'webgl' | 'webgl2', gl?: WebGLRenderingContext | WebGL2RenderingContext }) {\n let gl = opt.gl;\n let type = 'none';\n\n opt = opt || {};\n let canvas;\n\n if (IS_NODE) {\n gl = require('gl')(1, 1);\n type = 'node-gl';\n } else {\n if (!gl) {\n let prefix = TYPE_WEBGL;\n\n if (!isAndroid() && webGL2ConstructorAvailable) {\n prefix = opt.glType || TYPE_WEBGL2;\n }\n canvas = document.createElement('canvas');\n gl = canvas.getContext(prefix) as WebGLRenderingContext;\n if (!gl) {\n prefix = 'webgl';\n gl = canvas.getContext(prefix) as WebGLRenderingContext;\n }\n }\n if (gl) {\n type = (webGL2ConstructorAvailable && (gl instanceof WebGL2RenderingContext)) ? TYPE_WEBGL2 : TYPE_WEBGL;\n }\n }\n this._setupCapability(gl);\n // @ts-expect-error safe to assign\n this.type = type;\n if (canvas && gl) {\n gl.getExtension('WEBGL_lose_context')?.loseContext();\n }\n }\n\n _setupCapability (gl?: WebGLRenderingContext | WebGL2RenderingContext) {\n if (gl) {\n // @ts-expect-error safe to assign\n this['level'] = (webGL2ConstructorAvailable && gl instanceof WebGL2RenderingContext) ? 2 : 1;\n const level2 = this.level === 2;\n const textureAnisotropicExt = gl.getExtension('EXT_texture_filter_anisotropic') || gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic');\n\n if (!level2) {\n this.vaoExt = gl.getExtension('OES_vertex_array_object');\n } else {\n this.UNSIGNED_INT_24_8 = (gl as WebGL2RenderingContext).UNSIGNED_INT_24_8;\n }\n this.drawBufferExtension = gl.getExtension('WEBGL_draw_buffers');\n const depthTextureExtension = gl.getExtension('WEBGL_depth_texture');\n\n if (depthTextureExtension) {\n this.UNSIGNED_INT_24_8 = depthTextureExtension.UNSIGNED_INT_24_8_WEBGL;\n }\n let halfFloatLinear = !!gl.getExtension('OES_texture_half_float_linear');\n\n if (level2 && !halfFloatLinear) {\n halfFloatLinear = this.checkLinearTextureFilter(gl as WebGL2RenderingContext, (gl as WebGL2RenderingContext).HALF_FLOAT);\n }\n let floatLinear = !!gl.getExtension('OES_texture_float_linear');\n\n if (level2 && !floatLinear) {\n floatLinear = this.checkLinearTextureFilter(gl as WebGL2RenderingContext, (gl as WebGL2RenderingContext).FLOAT);\n }\n this.internalFormatDepth16 = level2 ? (gl as WebGL2RenderingContext).DEPTH_COMPONENT16 : gl.DEPTH_COMPONENT;\n this.internalFormatDepth24_stencil8 = level2 ? (gl as WebGL2RenderingContext).DEPTH24_STENCIL8 : gl.DEPTH_STENCIL;\n this.instanceDrawExt = gl.getExtension('ANGLE_instanced_arrays')!;\n const floatTexture = (level2 || gl.getExtension('OES_texture_float')) ? gl.FLOAT : 0;\n const halfFloatTexture = level2 ? WebGL2RenderingContext.HALF_FLOAT : (gl.getExtension('OES_texture_half_float')?.HALF_FLOAT_OES || 0);\n const detail: GLGPUCapabilityDetail = {\n floatTexture,\n halfFloatTexture,\n maxSample: level2 ? gl.getParameter((gl as WebGL2RenderingContext).MAX_SAMPLES) : 1,\n maxVertexUniforms: gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS),\n maxVertexTextures: gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS),\n maxFragmentUniforms: gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS),\n maxFragmentTextures: gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS),\n floatColorAttachment: level2 ? !!gl.getExtension('EXT_color_buffer_float') : (floatTexture > 0 && !!gl.getExtension('WEBGL_color_buffer_float')),\n halfFloatColorAttachment: level2 ? !!gl.getExtension('EXT_color_buffer_float') : (halfFloatTexture > 0 && !!gl.getExtension('EXT_color_buffer_half_float')),\n maxTextureSize: gl.getParameter(gl.MAX_TEXTURE_SIZE),\n maxShaderTexCount: gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS),\n compressedTexture: registerCompressedTexture(gl),\n halfFloatLinear,\n floatLinear,\n maxTextureAnisotropy: textureAnisotropicExt ? gl.getParameter(textureAnisotropicExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0,\n shaderTextureLod: level2 || !!gl.getExtension('EXT_shader_texture_lod'),\n instanceDraw: level2 || !!this.instanceDrawExt,\n drawBuffers: level2 || !!this.drawBufferExtension,\n asyncShaderCompile: !!gl.getExtension('KHR_parallel_shader_compile'),\n intIndexElementBuffer: !!gl.getExtension('OES_element_index_uint'),\n standardDerivatives: level2 || !!gl.getExtension('OES_standard_derivatives'),\n readableDepthStencilTextures: level2 || !!depthTextureExtension,\n vao: level2 || !!this.vaoExt,\n writableFragDepth: level2 || !!gl.getExtension('EXT_frag_depth'),\n };\n\n // @ts-expect-error safe to assign\n this['capability'] = detail;\n if (textureAnisotropicExt) {\n textureMaxAnisotropyExt = textureAnisotropicExt.TEXTURE_MAX_ANISOTROPY_EXT;\n }\n // @ts-expect-error safe to assign\n this['type'] = 'webgl' + (level2 ? '2' : '');\n } else {\n // @ts-expect-error safe to assign\n this['capability'] = {};\n }\n }\n\n checkLinearTextureFilter (gl: WebGL2RenderingContext, type: number): boolean {\n let ret = false;\n const tex = gl.createTexture();\n\n gl.getError();\n gl.bindTexture(gl.TEXTURE_2D, tex);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.R16F, 1, 1, 0, gl.RED, type, null);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n if (!gl.getError()) {\n ret = true;\n }\n gl.deleteTexture(tex);\n\n return ret;\n }\n\n framebufferTexture2D (gl: WebGLRenderingContext | WebGL2RenderingContext, target: GLenum, index: number, textarget: number, texture: WebGLTexture) {\n const ext = this.drawBufferExtension;\n\n if (this.level === 1 && !ext && index > 0) {\n throw Error('draw multiple color buffers not available');\n }\n // @ts-expect-error safe to assign\n const attachment = ext ? ext[`COLOR_ATTACHMENT${index}_WEBGL`] : gl['COLOR_ATTACHMENT' + index];\n\n if (attachment) {\n gl.framebufferTexture2D(target, attachment, textarget, texture, 0);\n } else {\n consoleError('invalid color attachment index:' + index);\n }\n }\n\n vertexAttribDivisor (gl: WebGLRenderingContext | WebGL2RenderingContext, loc: number, divisor: number) {\n if (this.level === 2) {\n (gl as WebGL2RenderingContext).vertexAttribDivisor(loc, divisor);\n } else if (this.instanceDrawExt) {\n this.instanceDrawExt.vertexAttribDivisorANGLE(loc, divisor);\n } else {\n consoleWarn('instance draw not support');\n }\n }\n\n drawElementsInstanced (gl: WebGLRenderingContext | WebGL2RenderingContext, mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr, instanceCount: GLsizei) {\n if (this.level === 2) {\n (gl as WebGL2RenderingContext).drawElementsInstanced(mode, count, type, offset, instanceCount);\n } else if (this.instanceDrawExt) {\n this.instanceDrawExt.drawElementsInstancedANGLE(mode, count, type, offset, instanceCount);\n } else {\n consoleWarn('instance draw not support');\n }\n\n }\n\n drawArraysInstanced (gl: WebGLRenderingContext | WebGL2RenderingContext, mode: GLenum, first: GLint, count: GLsizei, instanceCount: GLsizei) {\n if (this.level === 2) {\n (gl as WebGL2RenderingContext).drawArraysInstanced(mode, first, count, instanceCount);\n } else if (this.instanceDrawExt) {\n this.instanceDrawExt.drawArraysInstancedANGLE(mode, first, count, instanceCount);\n } else {\n consoleWarn('instance draw not support');\n }\n\n }\n\n drawBuffers (gl: WebGLRenderingContext | WebGL2RenderingContext, bufferStates: boolean[]) {\n const ext = this.drawBufferExtension;\n\n if (this.level === 1 && !ext) {\n if (bufferStates.length > 1) {\n throw Error('draw buffers not available');\n } else {\n return;\n }\n }\n const buffers = bufferStates.map(function (enabled, index) {\n if (enabled) {\n // @ts-expect-error safe to assign\n return ext ? ext[`COLOR_ATTACHMENT${index}_WEBGL`] : (gl as WebGL2RenderingContext)['COLOR_ATTACHMENT' + index];\n }\n\n return gl.NONE;\n });\n\n if (ext) {\n ext.drawBuffersWEBGL(buffers);\n } else {\n (gl as WebGL2RenderingContext).drawBuffers(buffers);\n }\n }\n\n setTextureAnisotropic (gl: WebGLRenderingContext | WebGL2RenderingContext, target: GLenum, level: number) {\n const max = this.capability.maxTextureAnisotropy;\n\n if (max) {\n gl.texParameterf(target, textureMaxAnisotropyExt, Math.min(max, level || 4));\n }\n }\n\n setup (gl: WebGLRenderingContext): void {\n this._setupCapability(gl);\n }\n\n}\n\nexport function registerCompressedTexture (gl: WebGLRenderingContext | WebGL2RenderingContext): number {\n if (gl.getExtension('WEBGL_compressed_texture_astc')) {\n return COMPRESSED_TEXTURE_ASTC;\n }\n if (gl.getExtension('WEBGL_compressed_texture_pvrtc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc')) {\n return COMPRESSED_TEXTURE_PVRTC;\n }\n\n return 0;\n}\n","import type {\n Texture2DSourceOptionsCompressed,\n Texture2DSourceOptionsData,\n Texture2DSourceOptionsFrameBuffer,\n Texture2DSourceOptionsImage,\n Texture2DSourceOptionsImageMipmaps,\n Texture2DSourceOptionsVideo,\n TextureConfigOptions,\n TextureCubeSourceOptionsImage,\n TextureCubeSourceOptionsImageMipmaps,\n TextureOptions,\n TextureSourceOptions,\n} from '../../types/Texture';\nimport {\n TextureSourceType,\n} from '../../types/Texture';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport type { TypedArray, vec2 } from '../../types/type';\nimport { constants } from './constants';\nimport { consoleError, consoleWarn } from '../common/console';\n\ntype HTMLImageLike = ImageBitmap | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;\ntype GLContext = WebGLRenderingContext | WebGL2RenderingContext;\n\nlet flipCanvas: HTMLCanvasElement;\n\nexport const imageBitMapAvailable = typeof ImageBitmap === 'function' && typeof createImageBitmap == 'function';\n\nexport class GLTexture {\n readonly renderer?: GLGPURenderer;\n readonly glHandle: WebGLTexture | null;\n readonly options: TextureOptions;\n readonly target: GLenum;\n readonly gpuInfo: [format: number, type: number, target: number, mipmaps: vec2[]];\n width!: number;\n height!: number;\n _mipmapUsed = false;\n constructor (option: TextureOptions, renderer: GLGPURenderer) {\n const gl = renderer.gl;\n\n this.renderer = renderer;\n this.gpuInfo = [0, 0, 0, []];\n this.glHandle = renderer.createGLTexture(this, option.name) as WebGLTexture;\n this.options = option;\n this.target = option.target || gl.TEXTURE_2D;\n this.update(option);\n }\n\n setInspectorName (name: string) {\n this.renderer?._assignInspectorName(this.glHandle, name);\n }\n\n errorLog () {\n consoleError('this this texture has been destroyed');\n }\n\n update (source: TextureSourceOptions) {\n const renderer = this.renderer;\n const handle = this.glHandle;\n const target = this.target;\n const options = this.options;\n\n if (renderer && handle) {\n let width = 0;\n let height = 0;\n const gl = renderer.gl;\n\n renderer.state.bindTexture(target, handle);\n const { sourceType, flipY } = options;\n let format = options.format as GLenum;\n let type = options.type as GLenum;\n let internalFormat = options.internalFormat as GLenum;\n\n if (type === constants.HALF_FLOAT) {\n type = renderer.gpu.capability.halfFloatTexture;\n if (!type) {\n consoleError('half float texture is not support');\n }\n if (renderer.gpu.level === 2 && internalFormat === format) {\n if (format === constants.LUMINANCE) {\n format = constants.RED;\n }\n internalFormat = FORMAT_HALF_FLOAT[format];\n }\n if (!renderer.gpu.capability.halfFloatLinear) {\n options.minFilter = options.magFilter = gl.NEAREST;\n consoleWarn('half float linear not support,change to NEAREST');\n }\n } else if (type === gl.FLOAT) {\n type = renderer.gpu.capability.floatTexture;\n if (!type) {\n consoleError('float texture is not support');\n }\n if (renderer.gpu.level === 2 && internalFormat === format) {\n if (format === constants.LUMINANCE) {\n format = constants.RED;\n }\n internalFormat = FORMAT_FLOAT[format];\n }\n if (!renderer.gpu.capability.floatLinear) {\n options.minFilter = options.magFilter = gl.NEAREST;\n consoleWarn('float linear not support,change to NEAREST');\n }\n }\n const gpuInfo = this.gpuInfo;\n\n gpuInfo[0] = internalFormat;\n gpuInfo[1] = type;\n gpuInfo[2] = target;\n const pma = gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL);\n\n //fucking pma conflicts for other webgl engine\n if (pma != options.premultiplyAlpha) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, options.premultiplyAlpha ? 1 : 0);\n }\n // renderer.state.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, options.premultiplyAlpha ? 1 : 0);\n renderer.state.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY ? 1 : 0);\n if (sourceType === TextureSourceType.framebuffer) {\n const data = (source as Texture2DSourceOptionsFrameBuffer).data;\n\n if (data) {\n width = data.width || 0;\n height = data.height || 0;\n if (width && height && (this.width !== width || this.height !== height)) {\n gl.texImage2D(target, 0, internalFormat, width, height, 0, format, type, null);\n }\n }\n } else if (sourceType === TextureSourceType.data) {\n if (target === gl.TEXTURE_CUBE_MAP) {\n let ret;\n const cubeData = (source as TextureCubeSourceOptionsImage).cube;\n\n cubeData.forEach((data, key) => {\n ret = this.texImage2DData(gl, gl.TEXTURE_CUBE_MAP_POSITIVE_X + key, 0, internalFormat, format, type, data as { data: TypedArray, width: number, height: number });\n width = Math.max(ret[0], width);\n height = Math.max(ret[1], height);\n });\n } else {\n [width, height] = this.texImage2DData(gl, target, 0, internalFormat, format, type, (source as Texture2DSourceOptionsData).data);\n }\n } else if (sourceType === TextureSourceType.image || sourceType === TextureSourceType.video) {\n if (target === gl.TEXTURE_CUBE_MAP) {\n let ret;\n\n (source as TextureCubeSourceOptionsImage).cube.forEach((image, key) => {\n ret = this.texImage2D(gl, gl.TEXTURE_CUBE_MAP_POSITIVE_X + key, 0, internalFormat, format, type, image as HTMLImageElement);\n width = Math.max(ret[0], width);\n height = Math.max(ret[1], height);\n });\n } else if (target === gl.TEXTURE_2D) {\n const image = (source as Texture2DSourceOptionsImage).image || (source as Texture2DSourceOptionsVideo).video;\n\n [width, height] = this.texImage2D(gl, target, 0, internalFormat, format, type, image);\n }\n if ((options as Texture2DSourceOptionsImage).generateMipmap) {\n if ((isPowerOfTwo(width) && isPowerOfTwo(height)) || renderer.level == 2) {\n gl.generateMipmap(target);\n const mipmapSizes: vec2[] = [[width, height]];\n let startWidth = width / 2;\n let startHeight = height / 2;\n\n while (startWidth >= 2 && startHeight >= 2) {\n mipmapSizes.push([startWidth, startHeight]);\n startWidth = Math.round(startWidth / 2);\n startHeight = Math.round(startHeight / 2);\n }\n mipmapSizes.push([1, 1]);\n this.gpuInfo[3] = mipmapSizes;\n this._mipmapUsed = true;\n }\n }\n } else if (sourceType === TextureSourceType.mipmaps) {\n let ret;\n\n if (target === gl.TEXTURE_2D) {\n const mipmaps = (source as Texture2DSourceOptionsImageMipmaps).mipmaps;\n const gpuMipmaps = this.gpuInfo[3];\n\n mipmaps.forEach((mipmap, level) => {\n if ('data' in mipmap) {\n ret = this.texImage2DData(gl, target, level, internalFormat, format, type, mipmap);\n } else {\n ret = this.texImage2D(gl, target, level, internalFormat, format, type, mipmap);\n }\n gpuMipmaps[level] = [ret[0], ret[1]];\n if (level === 0) {\n [width, height] = ret;\n }\n });\n this._mipmapUsed = mipmaps.length > 1;\n } else if (target === gl.TEXTURE_CUBE_MAP) {\n const mipmaps = (source as TextureCubeSourceOptionsImageMipmaps).mipmaps;\n const gpuMipmaps = this.gpuInfo[3];\n\n mipmaps.forEach((mipmap, level) => {\n mipmap.forEach((face, key) => {\n if ('data' in face) {\n ret = this.texImage2DData(gl, gl.TEXTURE_CUBE_MAP_POSITIVE_X + key, level, internalFormat, format, type, face);\n } else {\n ret = this.texImage2D(gl, gl.TEXTURE_CUBE_MAP_POSITIVE_X + key, level, internalFormat, format, type, face);\n }\n gpuMipmaps[level] = [ret[0], ret[1]];\n if (level === 0) {\n [width, height] = ret;\n }\n });\n });\n this._mipmapUsed = mipmaps.length > 1;\n }\n } else if (sourceType === TextureSourceType.compressed) {\n const mipmaps = (source as Texture2DSourceOptionsCompressed).mipmaps;\n\n if (mipmaps) {\n const gpuMipmaps = this.gpuInfo[3];\n\n width = mipmaps[0].width;\n height = mipmaps[0].height;\n for (let miplevel = 0; miplevel < mipmaps.length; miplevel++) {\n const mipmap = mipmaps[miplevel];\n\n gpuMipmaps[miplevel] = [mipmap.width, mipmap.height];\n gl.compressedTexImage2D(\n target,\n miplevel,\n internalFormat,\n mipmap.width,\n mipmap.height,\n 0,\n mipmap.data);\n }\n this._mipmapUsed = mipmaps.length > 1;\n }\n }\n if (!this._mipmapUsed) {\n this.gpuInfo[3] = [[width, height]];\n }\n if (pma != options.premultiplyAlpha) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, pma);\n }\n this.width = width;\n this.height = height;\n this.setTextureFilters(gl, target, options);\n } else {\n this.width = this.height = 0;\n }\n\n }\n\n setTextureFilters (gl: GLContext, target: GLenum, options: TextureConfigOptions) {\n if (this.target === gl.TEXTURE_2D) {\n this.renderer?.gpu.setTextureAnisotropic(gl, this.target, options.anisotropic || 4);\n }\n const isPot = this.renderer?.level == 2 || (isPowerOfTwo(this.width) && isPowerOfTwo(this.height));\n const minFiler = isPot ? (options.minFilter || gl.NEAREST) : gl.NEAREST;\n const magFilter = isPot ? (options.magFilter || gl.NEAREST) : gl.NEAREST;\n\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minFiler);\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magFilter);\n gl.texParameteri(target, gl.TEXTURE_WRAP_S, isPot ? (options.wrapS || gl.CLAMP_TO_EDGE) : gl.CLAMP_TO_EDGE);\n gl.texParameteri(target, gl.TEXTURE_WRAP_T, isPot ? (options.wrapT || gl.CLAMP_TO_EDGE) : gl.CLAMP_TO_EDGE);\n }\n\n texImage2D (gl: GLContext, target: GLenum, level: number, internalformat: GLenum, format: GLenum, type: GLenum, image: HTMLImageLike): vec2 {\n const options = this.options;\n const maxSize = this.renderer?.gpu.capability.maxTextureSize || 2048;\n let img = image;\n\n if (options.sourceType !== TextureSourceType.video) {\n let shouldResize = options.minFilter !== gl.NEAREST || options.magFilter !== gl.NEAREST || options.wrapS !== gl.CLAMP_TO_EDGE || options.wrapT !== gl.CLAMP_TO_EDGE;\n\n shouldResize = shouldResize || image.width > maxSize || image.height > maxSize;\n if (shouldResize) {\n img = this.resizeImage(image);\n }\n if (imageBitMapAvailable && img instanceof ImageBitmap && options.flipY) {\n img = this.flipImageBitmap(img);\n }\n }\n gl.texImage2D(target, level, internalformat, format, type, img);\n const size: vec2 = [img.width, img.height];\n\n if (flipCanvas) {\n flipCanvas.width = flipCanvas.height = 1;\n }\n\n return options.sourceType === TextureSourceType.video ? [(image as HTMLVideoElement).videoWidth, (image as HTMLVideoElement).videoHeight] : size;\n }\n\n flipImageBitmap (bitmap: ImageBitmap): HTMLCanvasElement {\n if (!flipCanvas) {\n flipCanvas = document.createElement('canvas');\n }\n const width = flipCanvas.width = bitmap.width;\n const height = flipCanvas.height = bitmap.height;\n const ctx = flipCanvas.getContext('2d') as CanvasRenderingContext2D;\n\n ctx.clearRect(0, 0, width, height);\n ctx.fillStyle = 'rgba(255,255,255,0.0039)';\n ctx.fillRect(0, 0, width, height);\n ctx.drawImage(bitmap, 0, 0);\n\n return flipCanvas;\n }\n\n texImage2DData (gl: GLContext, target: GLenum, level: number, internalformat: GLenum, format: GLenum, type: GLenum, data: { data: TypedArray, width: number, height: number }): vec2 {\n const bufferView = data.data;\n // Uint8ClampedArray is incompatible in android\n const neoBuffer = type === gl.UNSIGNED_BYTE ? new Uint8Array(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength / bufferView.BYTES_PER_ELEMENT) : bufferView;\n\n gl.texImage2D(target, level, internalformat, data.width, data.height, 0, format, type, neoBuffer);\n\n return [data.width, data.height];\n }\n\n resizeImage (image: HTMLImageLike, targetWidth?: number, targetHeight?: number): HTMLCanvasElement | HTMLImageElement {\n const maxSize = this.renderer?.gpu.capability.maxTextureSize || 2048;\n\n if (this.renderer?.level === 2 && (image.width < maxSize && image.height < maxSize)) {\n return image as HTMLImageElement;\n }\n if (image) {\n const width = image.width;\n const height = image.height;\n const nw = Math.min(maxSize, targetWidth || nearestPowerOfTwo(width));\n const nh = Math.min(maxSize, targetHeight || nearestPowerOfTwo(height));\n\n if (nh !== height || nw !== width) {\n const canvas = document.createElement('canvas');\n\n canvas.width = nw;\n canvas.height = nh;\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, nw, nh);\n consoleWarn(`image resize from ${width}x${height} to ${nw}x${nh}`);\n\n return canvas;\n }\n }\n\n return image as HTMLImageElement;\n }\n\n offloadData () {\n const renderer = this.renderer;\n const target = this.target;\n\n if (renderer && this.glHandle) {\n const gl = renderer.gl;\n\n renderer.state.bindTexture(target, this.glHandle);\n const data = new Uint8Array([255]);\n const info = this.gpuInfo;\n\n info[3] = [[1, 1]];\n info[0] = gl.LUMINANCE;\n info[1] = gl.UNSIGNED_BYTE;\n info[2] = target;\n if (target === gl.TEXTURE_2D) {\n gl.texImage2D(target, 0, gl.LUMINANCE, 1, 1, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, data);\n\n } else if (target === gl.TEXTURE_CUBE_MAP) {\n const faces = [\n gl.TEXTURE_CUBE_MAP_NEGATIVE_X,\n gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,\n gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,\n gl.TEXTURE_CUBE_MAP_POSITIVE_X,\n gl.TEXTURE_CUBE_MAP_POSITIVE_Y,\n gl.TEXTURE_CUBE_MAP_POSITIVE_Z,\n ];\n\n for (let i = 0; i < faces.length; i++) {\n gl.texImage2D(faces[i], 0, gl.LUMINANCE, 1, 1, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, data);\n }\n }\n //rewrite mipmap\n gl.generateMipmap(target);\n this.width = this.height = 1;\n }\n }\n\n destroy (): void {\n if (this.renderer) {\n this.renderer.deleteGLTexture(this);\n //@ts-expect-error safe to assign\n this.renderer = this.options = this.glHandle = null;\n\n this.update = this.destroy = this.errorLog;\n }\n }\n\n _assignRenderer (renderer: GLGPURenderer): void {\n throw new Error('Method not implemented.');\n }\n\n}\n\nexport function nearestPowerOfTwo (value: number): number {\n return 2 ** Math.round(Math.log(value) / Math.LN2);\n}\n\nexport function isPowerOfTwo (value: number) {\n return (value & (value - 1)) === 0 && value !== 0;\n}\n\nconst FORMAT_HALF_FLOAT = {\n [constants.RGBA]: 34842, //RGBA16F\n [constants.RGB]: 34843, //RGB16F\n [constants.ALPHA]: 33325, //R16F\n [constants.RED]: 33325, //R16F\n [constants.LUMINANCE_ALPHA]: 33327, //RG16F\n [constants.LUMINANCE]: 33325,\n};\nconst FORMAT_FLOAT = {\n [constants.RGBA]: 34836, //RGBA32F\n [constants.RGB]: 34837, //RGB32F\n [constants.ALPHA]: 33326, //R32F\n [constants.RED]: 33326, //R32F\n [constants.LUMINANCE_ALPHA]: 33328, //RG32F,\n [constants.LUMINANCE]: 33326, //R32F\n};\n","import { GLGPUBuffer } from './GLGPUBuffer';\nimport { WebGLState } from './WebGLState';\nimport { GLShaderLibrary } from './GLShaderLibrary';\nimport type { GPURenderer, RendererExtensions } from '../../types';\nimport type { GPUBufferOptions } from '../../types/GPUBuffer';\nimport type { RenderFrame, RenderFrameOptions } from '../../types/RenderFrame';\nimport { GLGPUCapability } from './GLGPUCapability';\nimport { GLTexture } from './GLTexture';\nimport { arrAdd, arrRemove } from '../common/utils';\nimport { TextureSourceType } from '../../types/Texture';\nimport type { GLRenderBuffer } from './GLRenderBuffer';\nimport type { GLFrameBuffer } from './GLFrameBuffer';\nimport { consoleError } from '../common/console';\n\nconst GL_LOST_EVENT = 'webglcontextlost';\n\nexport class GLGPURenderer implements GPURenderer {\n readonly gl: WebGLRenderingContext | WebGL2RenderingContext;\n readonly level: number;\n readonly gpu: GLGPUCapability;\n readonly state: WebGLState;\n readonly shaderLibrary: GLShaderLibrary;\n readonly emptyTexture2D: GLTexture;\n readonly emptyTextureCube: GLTexture;\n\n readonly _buffers: GLGPUBuffer[];\n readonly _textures: GLTexture[];\n readonly _renderBuffers: GLRenderBuffer[];\n readonly _frameBuffers: GLFrameBuffer[];\n readonly _vaos: WebGLVertexArrayObject[];\n private _sourceFbo!: WebGLFramebuffer | null;\n private _targetFbo!: WebGLFramebuffer | null;\n private _isDestroyed = false;\n extension: RendererExtensions = {};\n\n constructor (gl: WebGLRenderingContext | WebGL2RenderingContext) {\n this.gl = gl;\n this.state = new WebGLState(gl);\n this.level = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ? 2 : 1;\n this._buffers = [];\n this._textures = [];\n this._vaos = [];\n this._renderBuffers = [];\n this._frameBuffers = [];\n this.shaderLibrary = new GLShaderLibrary(this);\n this.gpu = new GLGPUCapability({ gl });\n const d = { width: 1, height: 1, data: new Uint8Array([255]) };\n\n this.emptyTexture2D = new GLTexture({\n data: d,\n sourceType: TextureSourceType.data,\n format: gl.LUMINANCE,\n internalFormat: gl.LUMINANCE,\n type: gl.UNSIGNED_BYTE,\n }, this);\n this.emptyTextureCube = new GLTexture({\n target: gl.TEXTURE_CUBE_MAP,\n cube: [d, d, d, d, d, d],\n sourceType: TextureSourceType.data,\n format: gl.LUMINANCE,\n internalFormat: gl.LUMINANCE,\n type: gl.UNSIGNED_BYTE,\n }, this);\n this.bindVertexArray = this.level === 2 ? this._bindVertexArray : this._bindVertexArrayOES;\n if (gl.canvas) {\n gl.canvas.addEventListener(GL_LOST_EVENT, this.onContextLose);\n }\n }\n\n requestAnimationFrame (cb: FrameRequestCallback): number {\n return window.requestAnimationFrame(cb);\n }\n cancelAnimationFrame (id: number): void {\n return window.cancelAnimationFrame(id);\n }\n\n get isDestroyed () {\n return this._isDestroyed;\n }\n\n onContextLose = (e: Event) => {\n consoleError('gl lost, destroy renderer by default', e.target);\n this.destroy();\n if (e.target) {\n e.target.removeEventListener(GL_LOST_EVENT, this.onContextLose);\n }\n };\n\n copy2 (source: GLTexture, target: GLTexture) {\n const gl = this.gl as WebGL2RenderingContext;\n\n if (gl) {\n if (!this._sourceFbo) {\n this._sourceFbo = gl.createFramebuffer();\n }\n if (!this._targetFbo) {\n this._targetFbo = gl.createFramebuffer();\n }\n const state = this.state;\n const COLOR_ATTACHMENT0 = gl.COLOR_ATTACHMENT0;\n\n state.bindFramebuffer(gl.FRAMEBUFFER, this._sourceFbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, COLOR_ATTACHMENT0, gl.TEXTURE_2D, source.glHandle as GLTexture, 0);\n state.bindFramebuffer(gl.FRAMEBUFFER, this._targetFbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, COLOR_ATTACHMENT0, gl.TEXTURE_2D, target.glHandle as GLTexture, 0);\n state.bindFramebuffer(gl.READ_FRAMEBUFFER, this._sourceFbo);\n state.bindFramebuffer(gl.DRAW_FRAMEBUFFER, this._targetFbo);\n const filter = source.width === source.height && target.width == target.height ? gl.NEAREST : gl.LINEAR;\n\n gl.blitFramebuffer(0, 0, source.width, source.height, 0, 0, target.width, target.height, gl.COLOR_BUFFER_BIT, filter);\n state.bindFramebuffer(gl.FRAMEBUFFER, null);\n state.bindFramebuffer(gl.READ_FRAMEBUFFER, null);\n state.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);\n }\n }\n\n resetColorAttachments (rp: GLFrameBuffer, colors: GLTexture[]) {\n rp.bind();\n rp.resetColorTextures(colors);\n }\n\n createGLRenderBuffer (renderbuffer: GLRenderBuffer): WebGLRenderbuffer | null {\n const rb = this.gl.createRenderbuffer();\n\n if (rb) {\n arrAdd(this._renderBuffers, renderbuffer);\n }\n\n return rb;\n }\n\n createPipeline (options?: RenderFrameOptions): RenderFrame {\n throw new Error('Method not implemented.');\n }\n\n createBuffer (options: GPUBufferOptions): GLGPUBuffer {\n return new GLGPUBuffer(options, this);\n }\n\n resize (width: number, height: number): void {\n const gl = this.gl;\n\n if (gl && gl.drawingBufferWidth !== width || gl.drawingBufferHeight !== height) {\n gl.canvas.width = width;\n gl.canvas.height = height;\n gl.viewport(0, 0, width, height);\n this._frameBuffers.forEach(frameBuffer => {\n const viewport = frameBuffer.viewport;\n\n if (!frameBuffer.isCustomViewport) {\n frameBuffer.resize(viewport[0], viewport[1], width * frameBuffer.viewportScale, height * frameBuffer.viewportScale);\n }\n });\n }\n }\n\n _assignInspectorName (obj: any, name?: string, id?: string) {\n if (name) {\n obj.__SPECTOR_Metadata = { name };\n if (obj.__SPECTOR_Object_TAG) {\n obj.__SPECTOR_Object_TAG.displayText = name;\n if (id) {\n obj.__SPECTOR_Object_TAG.id = id;\n }\n } else {\n obj.__SPECTOR_Object_TAG = {\n displayText: name,\n id: '',\n };\n }\n }\n }\n\n createGLFrameBuffer (frameBuffer: GLFrameBuffer, name?: string): WebGLFramebuffer | null {\n const fbo = this.gl.createFramebuffer();\n\n if (fbo) {\n arrAdd(this._frameBuffers, frameBuffer);\n this._assignInspectorName(fbo, name, name);\n }\n\n return fbo;\n }\n\n createGLTexture (texture: GLTexture, name?: string): WebGLTexture | null {\n const tex = this.gl.createTexture();\n\n if (tex) {\n arrAdd(this._textures, texture);\n this._assignInspectorName(tex, name);\n }\n\n return tex;\n }\n\n createGLBuffer (gpuBuffer: GLGPUBuffer, name?: string): WebGLBuffer | null {\n const buffer = this.gl.createBuffer();\n\n if (buffer) {\n arrAdd(this._buffers, gpuBuffer);\n this._assignInspectorName(buffer, name);\n }\n\n return buffer;\n }\n\n deleteGLTexture (texture: GLTexture) {\n if (texture.glHandle && !this._isDestroyed) {\n this.gl.deleteTexture(texture.glHandle);\n arrRemove(this._textures, texture);\n //@ts-expect-error safe to assign\n delete texture.glHandle;\n }\n }\n\n deleteGPUBuffer (buffer: GLGPUBuffer | null) {\n if (buffer && !this._isDestroyed) {\n arrRemove(this._buffers, buffer);\n this.gl.deleteBuffer(buffer.glBuffer);\n //@ts-expect-error safe to assign\n delete buffer.glBuffer;\n }\n }\n\n deleteGLFrameBuffer (frameBuffer: GLFrameBuffer) {\n if (frameBuffer && !this._isDestroyed) {\n const gl = this.gl;\n\n gl.deleteFramebuffer(frameBuffer.fbo!);\n gl.deleteFramebuffer(frameBuffer.multisampleFbo!);\n frameBuffer.multisampleRbs.forEach(rb=>rb.destroy());\n arrRemove(this._frameBuffers, frameBuffer);\n delete frameBuffer.fbo;\n }\n }\n\n deleteGLRenderBuffer (renderbuffer: GLRenderBuffer) {\n if (renderbuffer && !this._isDestroyed) {\n this.gl.deleteRenderbuffer(renderbuffer.glHandle);\n arrRemove(this._renderBuffers, renderbuffer);\n //@ts-expect-error safe to assign\n delete renderbuffer.glHandle;\n }\n }\n\n createVertexArray (name?: string): WebGLVertexArrayObject | undefined {\n let vao;\n\n if (this.level === 2) {\n vao = (this.gl as WebGL2RenderingContext).createVertexArray() as WebGLVertexArrayObject;\n }\n if (!vao) {\n vao = this.gpu.vaoExt?.createVertexArrayOES();\n }\n if (vao) {\n arrAdd(this._vaos, vao);\n this._assignInspectorName(vao, name);\n }\n\n return vao;\n }\n\n _bindVertexArray (vao: WebGLVertexArrayObject | null) {\n (this.gl as WebGL2RenderingContext).bindVertexArray(vao || null);\n }\n\n _bindVertexArrayOES (vao: WebGLVertexArrayObject | null) {\n this.gpu.vaoExt?.bindVertexArrayOES(vao as WebGLVertexArrayObjectOES);\n }\n\n bindVertexArray (vao: WebGLVertexArrayObject | null) {\n throw Error('xxx');\n }\n\n deleteVertexArray (vao: WebGLVertexArrayObject) {\n if (!this._isDestroyed) {\n if (this.level === 2) {\n (this.gl as WebGL2RenderingContext).deleteVertexArray(vao);\n } else {\n this.gpu.vaoExt?.deleteVertexArrayOES(vao as WebGLVertexArrayObjectOES);\n }\n arrRemove(this._vaos, vao);\n }\n }\n\n destroy (haltGL?: boolean) {\n const gl = this.gl;\n\n if (gl) {\n gl.deleteFramebuffer(this._sourceFbo);\n gl.deleteFramebuffer(this._targetFbo);\n this._buffers.forEach(buffer => this.deleteGPUBuffer(buffer));\n this._buffers.length = 0;\n this.state.destroy();\n this.shaderLibrary.destroy();\n this._vaos.forEach(vao => this.deleteVertexArray(vao));\n this.emptyTexture2D.destroy();\n this.emptyTextureCube.destroy();\n this._vaos.length = 0;\n this._frameBuffers.forEach(fb => this.deleteGLFrameBuffer(fb));\n this._frameBuffers.length = 0;\n this._renderBuffers.forEach(rb => this.deleteGLRenderBuffer(rb));\n this._renderBuffers.length = 0;\n this._textures.forEach(tex=>this.deleteGLTexture(tex));\n this._textures.length = 0;\n gl.canvas.removeEventListener(GL_LOST_EVENT, this.onContextLose);\n if (haltGL) {\n const ex = gl.getExtension('WEBGL_lose_context');\n\n ex?.loseContext();\n }\n // @ts-expect-error safe to assign\n this.emptyTexture2D = this.shaderLibrary = this.state = this.gpu = this.gl = null;\n // @ts-expect-error safe to assign\n this.emptyTextureCube = null;\n }\n this._isDestroyed = true;\n }\n\n get height () {\n return this.gl?.drawingBufferHeight;\n }\n\n get width () {\n return this.gl?.drawingBufferWidth;\n }\n\n get canvas () {\n return this.gl.canvas;\n }\n\n createRenderFrame (options?: RenderFrameOptions): RenderFrame {\n throw Error();\n }\n}\n","import type { GPUCapability } from '../../types/GPUCapability';\nimport { GLGPUCapability } from '../webgl/GLGPUCapability';\n\nlet g: GLGPUCapability;\n\nexport function getDefaultGPUCapability (): GPUCapability {\n if (!g) {\n g = new GLGPUCapability({});\n }\n\n return g;\n}\n","export interface Canvas {\n width: number,\n height: number,\n\n addEventListener(name: string, handler: Function): void,\n\n removeEventListener(name: string, handler: Function): void,\n\n}\n\nexport class CanvasEmpty implements Canvas {\n width = 0;\n height = 0;\n\n addEventListener (name: string, handler: Function) {\n }\n\n removeEventListener (name: string, handler: Function) {\n }\n}\n","/**\n * 客户端创建对象,iOS和android\n */\nexport enum ResourcePlatform {\n iOS = 1,\n android = 2\n}\n\nexport interface ResourceInternal {\n readonly isDestroyed: boolean,\n destroy(): void,\n}\n","import type {\n RenderPassStorageObject,\n RenderPassAttachmentStorageType,\n} from '../../types/RenderPass';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport { consoleError } from '../common/console';\n\ninterface GLRenderBufferOptions {\n storageType: RenderPassAttachmentStorageType,\n format: GLenum,\n attachment: GLenum,\n multisample?: number,\n}\n\nexport class GLRenderBuffer implements RenderPassStorageObject {\n readonly renderer: GLGPURenderer;\n readonly storageType: RenderPassAttachmentStorageType;\n readonly internalFormat: GLenum;\n readonly glHandle: WebGLRenderbuffer;\n readonly size: [x: number, y: number];\n readonly ready!: boolean;\n readonly format: GLenum;\n readonly attachment: GLenum;\n readonly multiSample: number;\n\n constructor (renderer: GLGPURenderer, options: GLRenderBufferOptions) {\n this.storageType = options.storageType;\n this.renderer = renderer;\n this.glHandle = renderer.createGLRenderBuffer(this) as WebGLRenderbuffer;\n this.internalFormat = this.format = options.format;\n this.attachment = options.attachment;\n this.size = [0, 0];\n this.multiSample = options.multisample ?? 0;\n }\n\n setSize (width: number, height: number): GLRenderBuffer {\n if (width !== this.size[0] || height !== this.size[1]) {\n const internalFormat = this.internalFormat;\n const state = this.renderer.state;\n const gl = this.renderer.gl;\n\n state.bindRenderBuffer(gl.RENDERBUFFER, this.glHandle);\n if (width && height) {\n gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, this.size[0] = width, this.size[1] = height);\n if (this.multiSample > 1) {\n const if2 = internalFormat === gl.DEPTH_STENCIL ? (gl as WebGL2RenderingContext).DEPTH24_STENCIL8 : internalFormat;\n\n (gl as WebGL2RenderingContext).renderbufferStorageMultisample(gl.RENDERBUFFER, this.multiSample, if2, width, height);\n }\n } else {\n consoleError(`invalid render buffer size ${width}x${height}`);\n }\n }\n\n return this;\n }\n\n destroy () {\n if (this.renderer) {\n this.renderer.deleteGLRenderBuffer(this);\n //@ts-expect-error safe to assign\n this.renderer = this.glHandle = this.ready = null;\n }\n }\n}\n","import type { GLGPURenderer } from './GLGPURenderer';\nimport type {\n RenderPassDepthStencilAttachmentOptions,\n RenderPassStorageObject,\n RenderPassStoreAction,\n} from '../../types/RenderPass';\nimport {\n RenderPassAttachmentStorageType,\n RenderPassDestroyAttachmentType,\n TextureStoreAction,\n} from '../../types/RenderPass';\nimport { GLRenderBuffer } from './GLRenderBuffer';\nimport { constants } from './constants';\nimport { GLTexture } from './GLTexture';\nimport { TextureSourceType } from '../../types/Texture';\nimport { arrAdd, forEach } from '../common/utils';\nimport type { MarsTexture } from '../render/MarsTexture';\n\nexport interface GLFrameBufferOptions {\n attachments: GLTexture[],\n depthStencilAttachment?: RenderPassDepthStencilAttachmentOptions,\n isCustomViewport?: boolean,\n viewport: [x: number, y: number, width: number, height: number],\n viewportScale?: number,\n storeAction: RenderPassStoreAction,\n name?: string,\n multisample?: number,\n}\n\nlet seed = 1;\n\nexport class GLFrameBuffer {\n\n readonly renderer: GLGPURenderer;\n\n readonly viewport: [x: number, y: number, width: number, height: number];\n\n readonly ready!: boolean;\n\n readonly depthStencilStorageType: RenderPassAttachmentStorageType;\n\n readonly name: string;\n\n externalStorage!: boolean;\n\n storeAction: RenderPassStoreAction;\n\n storeInvalidAttachments?: GLenum[];\n\n isCustomViewport: boolean;\n\n depthStencilRenderBuffer?: GLRenderBuffer;\n\n depthTexture?: GLTexture;\n\n stencilTexture?: GLTexture;\n\n colorTextures!: GLTexture[];\n\n fbo?: WebGLFramebuffer;\n\n multisampleFbo?: WebGLFramebuffer;\n\n multisampleRbs: GLRenderBuffer[] = [];\n\n viewportScale: number;\n\n readonly multisample: number;\n\n readonly _attachmentHandles: WebGLTexture[];\n\n constructor (options: GLFrameBufferOptions, renderer: GLGPURenderer) {\n this.renderer = renderer;\n this.depthStencilStorageType = options.depthStencilAttachment?.storageType || RenderPassAttachmentStorageType.none;\n this.viewport = options.viewport;\n this.isCustomViewport = !!options.isCustomViewport;\n this.viewportScale = options.viewportScale || 1;\n this.name = options.name || ('GLFrameBuffer' + seed++);\n this.storeAction = options.storeAction;\n this._attachmentHandles = [];\n this.multisample = renderer.level > 1 ? options.multisample || 0 : 0;\n this.checkOptions(options);\n }\n\n get stencilStorage (): RenderPassStorageObject | undefined {\n const storageType = this.depthStencilStorageType;\n\n if (storageType !== RenderPassAttachmentStorageType.depth_16_opaque) {\n return this.depthStencilRenderBuffer;\n }\n }\n\n get depthStorage (): RenderPassStorageObject | undefined {\n if (this.depthStencilStorageType !== RenderPassAttachmentStorageType.stencil_8_opaque) {\n return this.depthStencilRenderBuffer;\n }\n }\n\n _getHandles () {\n const handles = this._attachmentHandles;\n\n handles.length = 0;\n this.colorTextures.forEach(c => arrAdd(handles, c.glHandle));\n if (this.stencilTexture) {\n arrAdd(handles, this.stencilTexture.glHandle);\n }\n if (this.depthTexture) {\n arrAdd(handles, this.depthTexture.glHandle);\n }\n }\n\n checkOptions (options: GLFrameBufferOptions) {\n const renderer = this.renderer;\n const capability = renderer.gpu.capability;\n const depthStencilAttachment = options.depthStencilAttachment || { storageType: RenderPassAttachmentStorageType.none };\n const willUseFbo = options.attachments.length > 0;\n const willMultisample = this.multisample > 1 ;\n\n this.externalStorage = false;\n let separateDepthStencil = true;\n\n if (options.attachments.length > 1 && !capability.drawBuffers) {\n throw Error('multiple color attachments not support');\n }\n const optDepthStencilTex: GLTexture | undefined = (options.depthStencilAttachment?.texture as MarsTexture)?.internal;\n\n const readableDepthStencilTextures = capability.readableDepthStencilTextures;\n\n this.colorTextures = options.attachments.slice();\n if (!willUseFbo && depthStencilAttachment.storageType !== RenderPassAttachmentStorageType.none) {\n throw Error('use depth stencil attachment without color attachments');\n }\n if (willUseFbo) {\n this.fbo = renderer.createGLFrameBuffer(this, this.name)!;\n }\n if (willMultisample) {\n this.multisampleFbo = renderer.createGLFrameBuffer(this, this.name + '_multisample')!;\n }\n const storageType = depthStencilAttachment.storageType;\n\n if (storageType === RenderPassAttachmentStorageType.depth_stencil_opaque) {\n if (depthStencilAttachment.storage) {\n if (depthStencilAttachment.storage instanceof GLRenderBuffer) {\n if (this.multisample !== depthStencilAttachment.storage.multiSample && this.multisample > 1) {\n throw Error('fbo multisample not eql depth stencil attachment');\n }\n this.depthStencilRenderBuffer = depthStencilAttachment.storage;\n this.externalStorage = true;\n } else {\n throw Error('invalid depth stencil attachment storage');\n }\n } else {\n this.depthStencilRenderBuffer = new GLRenderBuffer(renderer, {\n format: constants.DEPTH_STENCIL,\n attachment: constants.DEPTH_STENCIL_ATTACHMENT,\n multisample:this.multisample,\n storageType,\n });\n }\n separateDepthStencil = false;\n } else if (storageType === RenderPassAttachmentStorageType.depth_16_opaque) {\n if (depthStencilAttachment.storage) {\n if (this.multisample !== depthStencilAttachment.storage.multiSample && this.multisample > 1) {\n throw Error('fbo multisample not eql depth attachment');\n }\n if (depthStencilAttachment.storage instanceof GLRenderBuffer) {\n this.depthStencilRenderBuffer = depthStencilAttachment.storage;\n this.externalStorage = true;\n } else {\n throw Error('invalid depth attachment storage');\n }\n } else {\n this.depthStencilRenderBuffer = new GLRenderBuffer(renderer, {\n attachment: constants.DEPTH_ATTACHMENT,\n multisample:this.multisample,\n format: constants.DEPTH_COMPONENT16,\n storageType,\n });\n }\n } else if (storageType === RenderPassAttachmentStorageType.stencil_8_opaque) {\n if (depthStencilAttachment.storage) {\n if (depthStencilAttachment.storage instanceof GLRenderBuffer) {\n if (this.multisample !== depthStencilAttachment.storage.multiSample && this.multisample > 1) {\n throw Error('fbo multisample not eql stencil attachment');\n }\n this.depthStencilRenderBuffer = depthStencilAttachment.storage;\n this.externalStorage = true;\n } else {\n throw Error('invalid stencil attachment storage');\n }\n } else {\n this.depthStencilRenderBuffer = new GLRenderBuffer(renderer, {\n attachment: constants.STENCIL_ATTACHMENT,\n format: constants.STENCIL_INDEX8,\n multisample: this.multisample,\n storageType,\n });\n }\n } else if (storageType === RenderPassAttachmentStorageType.depth_16_texture) {\n if (!readableDepthStencilTextures) {\n throw Error('depth texture is not support in framebuffer');\n }\n this.depthTexture = optDepthStencilTex || new GLTexture({\n sourceType: TextureSourceType.framebuffer,\n format: constants.DEPTH_COMPONENT,\n internalFormat: renderer.gpu.internalFormatDepth16,\n type: constants.UNSIGNED_SHORT,\n name: `${this.name}##depthTex`,\n }, renderer);\n } else if (storageType === RenderPassAttachmentStorageType.depth_24_stencil_8_texture) {\n if (!readableDepthStencilTextures) {\n throw Error('depth stencil texture is not support in framebuffer');\n }\n this.depthTexture = this.stencilTexture = optDepthStencilTex || new GLTexture({\n sourceType: TextureSourceType.framebuffer,\n format: constants.DEPTH_STENCIL,\n internalFormat: renderer.gpu.internalFormatDepth24_stencil8,\n type: renderer.gpu.UNSIGNED_INT_24_8,\n name: `${this.name}##dpthStclTex`,\n }, renderer);\n separateDepthStencil = true;\n }\n this.storeInvalidAttachments = this.getStoreAttachments(this.storeAction, separateDepthStencil);\n this._getHandles();\n }\n\n getStoreAttachments (storeAction: RenderPassStoreAction, separateDepthStencil: boolean): GLenum[] | undefined {\n const gl = this.renderer.gl as WebGL2RenderingContext;\n const colorLen = this.colorTextures.length;\n\n if (storeAction && this.renderer.gpu.level == 2 && colorLen > 0) {\n const attachments: GLenum[] = [];\n\n if (storeAction.depthAction === TextureStoreAction.clear && this.depthStorage) {\n arrAdd(attachments, separateDepthStencil ? gl.DEPTH_ATTACHMENT : gl.DEPTH_STENCIL_ATTACHMENT);\n }\n if (storeAction.stencilAction === TextureStoreAction.clear && this.stencilStorage) {\n arrAdd(attachments, separateDepthStencil ? gl.STENCIL_ATTACHMENT : gl.DEPTH_STENCIL_ATTACHMENT);\n }\n if (storeAction.colorAction === TextureStoreAction.clear) {\n for (let i = 0; i < colorLen; i++) {\n arrAdd(attachments, (gl as unknown as Record<string, GLenum>)[`COLOR_ATTACHMENT${i}`]);\n }\n }\n\n return attachments;\n }\n }\n\n unbind () {\n const att = this.storeInvalidAttachments;\n\n this.resolveMultiSample();\n if (att && att.length) {\n const gl = this.renderer.gl as WebGL2RenderingContext;\n\n gl.invalidateFramebuffer(gl.FRAMEBUFFER, att);\n }\n const state = this.renderer.state;\n\n state.bindSystemFramebuffer();\n }\n\n bind () {\n const gl = this.renderer.gl;\n const state = this.renderer.state;\n const FRAMEBUFFER = gl.FRAMEBUFFER;\n const viewport = this.viewport;\n const multisampleFbo = this.multisampleFbo;\n\n if (multisampleFbo) {\n\n state.bindFramebuffer(FRAMEBUFFER, multisampleFbo);\n state.viewport(viewport[0], viewport[1], viewport[2], viewport[3]);\n } else if (this.fbo) {\n\n state.bindFramebuffer(FRAMEBUFFER, this.fbo);\n state.viewport(viewport[0], viewport[1], viewport[2], viewport[3]);\n const r = this.renderer.emptyTexture2D.glHandle;\n const handles = this._attachmentHandles;\n\n //in case frame texture loop\n forEach(state._textureUnitDict, function (t, unit) {\n if (t !== r && handles.includes(t as WebGLTexture)) {\n state.activeTexture(+unit);\n state.bindTexture(constants.TEXTURE_2D, r, true);\n }\n });\n }\n if (!this.ready) {\n const { depthStencilRenderBuffer, depthTexture, stencilTexture } = this;\n\n state.activeTexture(gl.TEXTURE0);\n if (depthStencilRenderBuffer) {\n depthStencilRenderBuffer.setSize(viewport[2], viewport[3]);\n gl.framebufferRenderbuffer(FRAMEBUFFER, depthStencilRenderBuffer.attachment, gl.RENDERBUFFER, depthStencilRenderBuffer.glHandle);\n } else if (depthTexture) {\n if (multisampleFbo) {\n let attachment = gl.DEPTH_ATTACHMENT;\n let format = gl.DEPTH_COMPONENT16;\n\n if (this.depthStencilStorageType === RenderPassAttachmentStorageType.depth_24_stencil_8_texture) {\n attachment = gl.DEPTH_STENCIL_ATTACHMENT;\n format = (gl as WebGL2RenderingContext).DEPTH24_STENCIL8;\n }\n const renderBuffer = new GLRenderBuffer(this.renderer, {\n storageType:this.depthStencilStorageType,\n attachment,\n format,\n multisample:this.multisample,\n });\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, multisampleFbo);\n this.multisampleRbs.push(renderBuffer);\n renderBuffer.setSize(viewport[2], viewport[3]);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, renderBuffer.glHandle);\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.fbo!);\n }\n depthTexture.update({\n sourceType: TextureSourceType.framebuffer,\n data: { width: viewport[2], height: viewport[3] },\n });\n const attachment = depthTexture && stencilTexture ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;\n\n gl.framebufferTexture2D(FRAMEBUFFER, attachment, gl.TEXTURE_2D, depthTexture.glHandle as WebGLTexture, 0);\n }\n this.resetColorTextures(this.colorTextures);\n [multisampleFbo, this.fbo].forEach(function (fbo) {\n if (fbo) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n const status = gl.checkFramebufferStatus(FRAMEBUFFER);\n\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n const error = gl.getError();\n\n throw Error(`framebuffer failed status ${status} error:${error}`);\n }\n }\n });\n\n //@ts-expect-error safe to assign\n this.ready = true;\n }\n }\n\n resolveMultiSample () {\n const multisampleFbo = this.multisampleFbo;\n const fbo = this.fbo;\n\n if (multisampleFbo && fbo) {\n const gl = this.renderer.gl as WebGL2RenderingContext;\n\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, multisampleFbo);\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, fbo);\n const vp = this.viewport;\n let bit = gl.COLOR_BUFFER_BIT;\n\n if (this.depthTexture) {\n bit = bit | gl.DEPTH_BUFFER_BIT;\n }\n gl.blitFramebuffer(\n 0, 0, vp[2], vp[3], // Source region\n 0, 0, vp[2], vp[3], // Destination region\n bit, gl.LINEAR // Buffer mask and filter\n );\n gl.bindFramebuffer(gl.FRAMEBUFFER, multisampleFbo);\n }\n }\n\n resetColorTextures (colors?: GLTexture[]) {\n const gl: WebGLRenderingContext = this.renderer.gl;\n const gpu = this.renderer.gpu;\n const viewport = this.viewport;\n const data = { width: viewport[2], height: viewport[3] };\n const buffers: boolean[] = [];\n\n if (colors) {\n this.colorTextures = colors.slice();\n }\n this.renderer.state.activeTexture(gl.TEXTURE0);\n const multisampleFBO = this.multisampleFbo;\n\n this.colorTextures.forEach((tex, index) => {\n tex.update({ sourceType: TextureSourceType.framebuffer, data });\n if (multisampleFBO) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, multisampleFBO);\n\n const renderBuffer = new GLRenderBuffer(this.renderer, {\n format:(gl as WebGL2RenderingContext).RGBA8,\n attachment: gl.COLOR_ATTACHMENT0 + index,\n storageType: RenderPassAttachmentStorageType.color,\n multisample:this.multisample,\n });\n\n this.multisampleRbs.push(renderBuffer);\n renderBuffer.setSize(tex.width, tex.height);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + index, gl.RENDERBUFFER, renderBuffer.glHandle);\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.fbo!);\n gpu.framebufferTexture2D(gl, gl.FRAMEBUFFER, index, gl.TEXTURE_2D, tex.glHandle as WebGLTexture);\n buffers.push(true);\n });\n gpu.drawBuffers(gl, buffers);\n this._getHandles();\n }\n\n destroy (opt?: { depthStencilAttachment?: RenderPassDestroyAttachmentType }) {\n const renderer = this.renderer;\n\n if (renderer) {\n renderer.deleteGLFrameBuffer(this);\n delete this.fbo;\n const clearAttachment = opt?.depthStencilAttachment ? opt.depthStencilAttachment : RenderPassDestroyAttachmentType.force;\n\n if (clearAttachment === RenderPassDestroyAttachmentType.force || (clearAttachment === RenderPassDestroyAttachmentType.keepExternal && !this.externalStorage)) {\n this.depthStencilRenderBuffer?.destroy();\n this.depthTexture?.destroy();\n }\n //@ts-expect-error safe to assign\n this.renderer = this.depthStencilRenderBuffer = null;\n }\n }\n\n resize (x: number, y: number, width: number, height: number) {\n const vp = this.viewport;\n\n if (vp[0] !== x || vp[1] !== y || vp[2] !== width || vp[3] !== height) {\n //@ts-expect-error safe to assign\n this.viewport = [x, y, width, height];\n //@ts-expect-error safe to assign\n this.ready = false;\n this.bind();\n }\n }\n}\n","export interface RequestOptions {\n method?: 'get' | 'post',\n responseType?: 'json' | 'blob' | 'arraybuffer',\n data?: XMLHttpRequestBodyInit | null,\n}\n\n// const imageBitMapAvailable = typeof ImageBitmap === 'function' && typeof createImageBitmap == 'function';\nconst imageBitMapAvailable = false;//never use imagebitmap because its dark edge\n\nexport function requestAsync (url: string, options?: RequestOptions): Promise<any> {\n const opt: RequestOptions = options || {};\n\n return new Promise(function (resolve, reject) {\n const xhr = new XMLHttpRequest();\n\n xhr.responseType = opt.responseType || 'json';\n xhr.addEventListener('load', () => resolve(xhr.response));\n xhr.addEventListener('error', reject);\n xhr.open(opt.method || 'get', url);\n xhr.send(opt.data);\n });\n}\n\nexport function loadImageAsync (imgOrURL: string | HTMLImageElement | Blob, options?: { asImageBitMap?: boolean, revokeURL?: boolean }): Promise<HTMLImageElement | ImageBitmap> {\n let img: HTMLImageElement;\n let revoke = options?.revokeURL;\n\n if (typeof imgOrURL === 'string') {\n if (options?.asImageBitMap && imageBitMapAvailable) {\n return requestAsync(imgOrURL, { responseType: 'blob' }).then(blob => createImageBitmap(blob));\n }\n const src = imgOrURL;\n\n img = new Image();\n if (!/^data:/.test(src)) {\n img.crossOrigin = '*';\n }\n img.src = src;\n } else {\n img = imgOrURL as HTMLImageElement;\n if (options?.asImageBitMap && imageBitMapAvailable) {\n return createImageBitmap(img);\n }\n if (imgOrURL instanceof Blob) {\n img = new Image();\n img.src = URL.createObjectURL(imgOrURL);\n revoke = true;\n }\n }\n if (img.complete) {\n return Promise.resolve(img);\n }\n\n return new Promise(function (resolve, reject) {\n img.onload = () => {\n img.onload = null;\n if (revoke) {\n URL.revokeObjectURL(img.src);\n }\n\n return resolve(img);\n };\n img.onerror = err => {\n img.onerror = null;\n if (revoke) {\n URL.revokeObjectURL(img.src);\n }\n\n return reject(err);\n };\n });\n}\n","import type { TextureOptions, TypedArray } from '../../types';\nimport { TextureSourceType } from '../../types/Texture';\nimport { constants } from './constants';\nimport { consoleWarn } from '../common/console';\n\nconst HEADER_LEN = 12 + 13 * 4; // identifier + header elements (not including key value meta-data pairs)\nconst COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()\n//const COMPRESSED_3D = 1; // uses a gl.compressedTexImage3D()\nconst TEX_2D = 2; // uses a gl.texImage2D()\n\n//const TEX_3D = 3; // uses a gl.texImage3D()\nexport class KhronosTextureContainer {\n arrayBuffer: ArrayBuffer;\n baseOffset: number;\n glType: number;\n glTypeSize: number;\n glFormat: number;\n glInternalFormat: number;\n glBaseInternalFormat: number;\n pixelWidth: number;\n pixelHeight: number;\n loadType!: number;\n pixelDepth: number;\n numberOfArrayElements: number;\n numberOfFaces: number;\n numberOfMipmapLevels: number;\n bytesOfKeyValueData: number;\n\n constructor (arrayBuffer: ArrayBuffer, facesExpected: number, baseOffset = 0) {\n this.arrayBuffer = arrayBuffer;\n this.baseOffset = baseOffset;\n\n // Test that it is a ktx formatted file, based on the first 12 bytes, character representation is:\n // '´', 'K', 'T', 'X', ' ', '1', '1', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n // 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A\n const identifier = new Uint8Array(this.arrayBuffer, this.baseOffset, 12);\n\n if (\n identifier[0] !== 0xab ||\n identifier[1] !== 0x4b ||\n identifier[2] !== 0x54 ||\n identifier[3] !== 0x58 ||\n identifier[4] !== 0x20 ||\n identifier[5] !== 0x31 ||\n identifier[6] !== 0x31 ||\n identifier[7] !== 0xbb ||\n identifier[8] !== 0x0d ||\n identifier[9] !== 0x0a ||\n identifier[10] !== 0x1a ||\n identifier[11] !== 0x0a\n ) {\n throw Error('texture missing KTX identifier');\n }\n\n // load the reset of the header in native 32 bit uint\n const dataSize = Uint32Array.BYTES_PER_ELEMENT;\n const headerDataView = new DataView(this.arrayBuffer, this.baseOffset + 12, 13 * dataSize);\n const endianness = headerDataView.getUint32(0, true);\n const littleEndian = endianness === 0x04030201;\n\n this.glType = headerDataView.getUint32(1 * dataSize, littleEndian); // must be 0 for compressed textures\n this.glTypeSize = headerDataView.getUint32(2 * dataSize, littleEndian); // must be 1 for compressed textures\n this.glFormat = headerDataView.getUint32(3 * dataSize, littleEndian); // must be 0 for compressed textures\n this.glInternalFormat = headerDataView.getUint32(4 * dataSize, littleEndian); // the value of arg passed to gl.compressedTexImage2D(,,x,,,,)\n this.glBaseInternalFormat = headerDataView.getUint32(5 * dataSize, littleEndian); // specify GL_RGB, GL_RGBA, GL_ALPHA, etc (un-compressed only)\n this.pixelWidth = headerDataView.getUint32(6 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage2D(,,,x,,,)\n this.pixelHeight = headerDataView.getUint32(7 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage2D(,,,,x,,)\n this.pixelDepth = headerDataView.getUint32(8 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage3D(,,,,,x,,)\n this.numberOfArrayElements = headerDataView.getUint32(9 * dataSize, littleEndian); // used for texture arrays\n this.numberOfFaces = headerDataView.getUint32(10 * dataSize, littleEndian); // used for cubemap textures, should either be 1 or 6\n this.numberOfMipmapLevels = headerDataView.getUint32(11 * dataSize, littleEndian); // number of levels; disregard possibility of 0 for compressed textures\n this.bytesOfKeyValueData = headerDataView.getUint32(12 * dataSize, littleEndian); // the amount of space after the header for meta-data\n\n // value of zero is an indication to generate mipmaps @ runtime. Not usually allowed for compressed, so disregard.\n this.numberOfMipmapLevels = Math.max(1, this.numberOfMipmapLevels);\n\n if (this.pixelHeight === 0 || this.pixelDepth !== 0) {\n consoleWarn('only 2D textures currently supported');\n\n return;\n }\n if (this.numberOfArrayElements !== 0) {\n consoleWarn('texture arrays not currently supported');\n\n return;\n }\n if (this.numberOfFaces !== facesExpected) {\n consoleWarn('number of faces expected' + facesExpected + ', but found ' + this.numberOfFaces);\n\n return;\n }\n // we now have a completely validated file, so could use existence of loadType as success\n // would need to make this more elaborate & adjust checks above to support more than one load type\n if (this.glType === 0) {\n this.loadType = COMPRESSED_2D;\n } else {\n this.loadType = TEX_2D;\n }\n }\n\n mipmaps (loadMipmaps: boolean): Array<{ data: TypedArray, width: number, height: number }> {\n const mipmaps: Array<{ data: TypedArray, width: number, height: number }> = [];\n\n // initialize width & height for level 1\n let dataOffset = HEADER_LEN + this.bytesOfKeyValueData;\n let width = this.pixelWidth;\n let height = this.pixelHeight;\n const mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1;\n\n for (let level = 0; level < mipmapCount; level++) {\n const imageSize = new Int32Array(this.arrayBuffer, this.baseOffset + dataOffset, 1)[0]; // size per face, since not supporting array cubemaps\n\n for (let face = 0; face < this.numberOfFaces; face++) {\n const byteArray = new Uint8Array(this.arrayBuffer, this.baseOffset + dataOffset + 4, imageSize);\n\n mipmaps.push({\n data: byteArray,\n width,\n height,\n });\n\n dataOffset += imageSize + 4; // size of the image + 4 for the imageSize field\n dataOffset += 3 - ((imageSize + 3) % 4); // add padding for odd sized image\n }\n width = Math.max(1.0, width * 0.5);\n height = Math.max(1.0, height * 0.5);\n }\n\n return mipmaps;\n }\n}\n\nexport function getCompressedTextureOptions (data: ArrayBuffer): TextureOptions {\n const ktx = new KhronosTextureContainer(data, 1);\n const useMipmaps = ktx.numberOfMipmapLevels >= Math.floor(Math.log2(Math.max(ktx.pixelWidth, ktx.pixelHeight)) + 1);\n\n return {\n sourceType: TextureSourceType.compressed,\n type: ktx.glType,\n target: ktx.numberOfFaces === 6 ? constants.TEXTURE_CUBE_MAP : constants.TEXTURE_2D,\n internalFormat: ktx.glInternalFormat,\n format: ktx.glFormat,\n mipmaps: ktx.mipmaps(useMipmaps),\n };\n}\n","import type {\n Texture,\n Texture2DOptions,\n TextureConfigOptions,\n TextureCubeOptions,\n TextureCubeSourceURLMap,\n TextureFactory,\n TextureFactorySource2DBinaryMipmapsFrom,\n TextureFactorySource2DFrom,\n TextureFactorySource2DMipmapsFrom,\n TextureFactorySourceCubeBinaryMipmapsFrom,\n TextureFactorySourceCubeFrom,\n TextureFactorySourceCubeMipmapsFrom,\n TextureFactorySourceFrom,\n TextureOptions,\n TextureSourceCubeData,\n} from '../../types/Texture';\nimport {\n TextureSourceType,\n} from '../../types/Texture';\nimport { loadImageAsync, requestAsync } from '../common/request';\nimport { getCompressedTextureOptions } from '../webgl/KhronosTextureContainer';\nimport { isObj, isStr } from '../common/utils';\nimport { constants } from '../webgl/constants';\nimport { imageBitMapAvailable } from '../webgl/GLTexture';\nimport type { TypedArray, vec2 } from '../../types';\n\nconst loadOptions = { asImageBitMap: true };\n\nexport class MarsTextureFactory implements TextureFactory {\n reloadPending: { [key: string]: Promise<Texture> };\n\n constructor () {\n this.reloadPending = {};\n }\n\n loadMipmapImagesAsync (pointers: vec2[], bin: ArrayBuffer) {\n return Promise.all(pointers.map(function (pointer) {\n const blob = new Blob([new Uint8Array(bin, pointer[0], pointer[1])]);\n\n return loadImageAsync(blob, { asImageBitMap: true });\n }));\n }\n\n loadImageAsync (url: string | HTMLImageElement | Blob): Promise<HTMLImageElement | ImageBitmap> {\n return loadImageAsync(url, loadOptions);\n }\n\n requestBinaryAsync (url: string): Promise<ArrayBuffer> {\n return requestAsync(url, { responseType: 'arraybuffer' });\n }\n\n loadImageBinaryAsync (binary: ArrayBuffer | TypedArray | Blob, mime?: string): Promise<HTMLImageElement | ImageBitmap> {\n let blob = binary as Blob;\n\n if (!(binary instanceof Blob)) {\n blob = new Blob([binary], { type: mime || 'image/png' });\n }\n if (imageBitMapAvailable) {\n return createImageBitmap(blob);\n }\n const url = URL.createObjectURL(blob);\n\n return loadImageAsync(url, { revokeURL: true });\n }\n\n canOffloadTexture (texture: Texture): boolean {\n const data = texture.options.sourceFrom;\n\n if (data) {\n const type = data.type;\n\n if (type === TextureSourceType.compressed || type === TextureSourceType.image) {\n if ((data as TextureFactorySourceCubeFrom).target === constants.TEXTURE_CUBE_MAP) {\n return isObj((data as TextureFactorySourceCubeFrom).map);\n }\n\n return isStr((data as TextureFactorySource2DFrom).url, true);\n }\n if (type === TextureSourceType.mipmaps) {\n if ((data as TextureFactorySourceCubeBinaryMipmapsFrom).bin) {\n return (data as TextureFactorySourceCubeBinaryMipmapsFrom).mipmaps.length > 0;\n }\n if ((data as TextureFactorySourceCubeMipmapsFrom).target === constants.TEXTURE_CUBE_MAP) {\n return (data as TextureFactorySourceCubeMipmapsFrom).maps.every(map => isObj(map));\n }\n\n return (data as TextureFactorySource2DMipmapsFrom).urls.every(url => isStr(url, true));\n }\n }\n\n return false;\n }\n\n loadSourceAsync (sourceFrom: TextureFactorySourceFrom, config?: TextureConfigOptions): Promise<TextureOptions> {\n // cube without mipmap\n if ((sourceFrom as TextureFactorySourceCubeFrom).target === constants.TEXTURE_CUBE_MAP && sourceFrom.type !== TextureSourceType.mipmaps) {\n return this._loadCubeMapAsync((sourceFrom as TextureFactorySourceCubeFrom).map).then(function (cube) {\n return Object.assign({}, config, {\n sourceType: TextureSourceType.image,\n cube,\n sourceFrom: {\n type: TextureSourceType.image,\n map: Object.assign({}, (sourceFrom as TextureFactorySourceCubeFrom).map),\n target: constants.TEXTURE_CUBE_MAP,\n },\n target: constants.TEXTURE_CUBE_MAP,\n }) as TextureCubeOptions;\n }, catchError);\n } else if (sourceFrom.type === TextureSourceType.image) {\n // image without mipmap\n return this.loadImageAsync((sourceFrom as TextureFactorySource2DFrom).url).then(image => Object.assign({}, config, {\n image,\n sourceType: TextureSourceType.image,\n sourceFrom: {\n url: (sourceFrom as TextureFactorySource2DFrom).url,\n type: sourceFrom.type,\n target: constants.TEXTURE_2D,\n },\n }) as Texture2DOptions, catchError);\n } else if (sourceFrom.type === TextureSourceType.video) {\n return this._loadVideoAsync((sourceFrom).url).then(video => Object.assign({}, config, {\n video,\n sourceType: TextureSourceType.video,\n }) as Texture2DOptions, catchError);\n } else if (sourceFrom.type === TextureSourceType.compressed) {\n return this.requestBinaryAsync(sourceFrom.url).then(function (arrayBuffer: ArrayBuffer) {\n return Object.assign(getCompressedTextureOptions(arrayBuffer), config, {\n sourceFrom: { url: sourceFrom.url, type: TextureSourceType.compressed },\n });\n }, catchError);\n } else if (sourceFrom.type === TextureSourceType.mipmaps) {\n const target = sourceFrom.target;\n\n if ((sourceFrom as TextureFactorySourceCubeBinaryMipmapsFrom).bin) {\n return requestAsync((sourceFrom as TextureFactorySourceCubeBinaryMipmapsFrom).bin, { responseType: 'arraybuffer' })\n .then((data: ArrayBuffer): Promise<Array<ImageBitmap | HTMLImageElement> | Array<ImageBitmap | HTMLImageElement>[]> => {\n if (sourceFrom.target === constants.TEXTURE_CUBE_MAP) {\n const source = sourceFrom as TextureFactorySourceCubeBinaryMipmapsFrom;\n\n return Promise.all(source.mipmaps.map(mipmaps => this.loadMipmapImagesAsync(mipmaps, data)));\n } else {\n const source = sourceFrom as TextureFactorySource2DBinaryMipmapsFrom;\n\n return this.loadMipmapImagesAsync(source.mipmaps, data);\n }\n }).then(function (mipmaps) {\n const target = sourceFrom.target || constants.TEXTURE_2D;\n const mipmapsSource = (sourceFrom as TextureFactorySourceCubeBinaryMipmapsFrom).mipmaps;\n const source = {\n mipmaps,\n target,\n sourceType: TextureSourceType.mipmaps,\n sourceFrom: {\n bin: (sourceFrom as TextureFactorySourceCubeBinaryMipmapsFrom).bin,\n mipmaps: target === constants.TEXTURE_2D ? mipmapsSource.slice() : mipmapsSource.map(s => s.slice()),\n target,\n type: TextureSourceType.mipmaps,\n },\n } as TextureOptions;\n\n return Object.assign({}, config, source);\n });\n }\n if (target === constants.TEXTURE_2D || !target) {\n const urls = (sourceFrom as TextureFactorySource2DMipmapsFrom).urls;\n\n return Promise.all(urls.map(url => this.loadImageAsync(url))).then(mipmaps => {\n return Object.assign({}, config, {\n target: constants.TEXTURE_2D,\n sourceType: TextureSourceType.mipmaps,\n mipmaps,\n sourceFrom: {\n type: sourceFrom.type,\n urls: urls.slice(),\n target: constants.TEXTURE_2D,\n },\n }) as Texture2DOptions;\n }, catchError);\n } else if (target === constants.TEXTURE_CUBE_MAP) {\n const maps = (sourceFrom as TextureFactorySourceCubeMipmapsFrom).maps;\n\n return Promise.all(maps.map(map => this._loadCubeMapAsync(map))).then(mipmaps => {\n return Object.assign({}, config, {\n sourceType: TextureSourceType.mipmaps,\n target: constants.TEXTURE_CUBE_MAP,\n mipmaps,\n sourceFrom: {\n target: constants.TEXTURE_CUBE_MAP,\n type: sourceFrom.type,\n maps: (sourceFrom as TextureFactorySourceCubeMipmapsFrom).maps.map(map => Object.assign({}, map)),\n },\n }) as TextureCubeOptions;\n }, catchError);\n }\n }\n\n return Promise.reject(new Error('invalid resource type:' + sourceFrom.type));\n\n function catchError (error: Error): TextureOptions {\n throw Error('loadFail:' + JSON.stringify(config));\n }\n }\n\n _loadVideoAsync (url: string | null | MediaProvider): Promise<HTMLVideoElement> {\n if (IS_NODE) {\n return Promise.reject('video not support');\n }\n const video = document.createElement('video');\n\n video.setAttribute('renderer', 'standard');\n if (isObj(url)) {\n video.srcObject = url as MediaProvider;\n } else {\n video.src = url as string;\n }\n video.crossOrigin = 'anonymous';\n video.muted = true;\n video.setAttribute('playsinline', 'playsinline');\n const p = video.play();\n\n return p ? p.then(() => video) : new Promise(function (resolve, reject) {\n video.addEventListener('loadeddata', function h () {\n resolve(video);\n video.removeEventListener('loadeddata', h);\n }, true);\n video.addEventListener('error', function (e) {\n reject(e);\n });\n });\n }\n\n _loadCubeMapAsync (map: TextureCubeSourceURLMap | string[]): Promise<TextureSourceCubeData> {\n return Promise.all(map.map(key => this.loadImageAsync(key))) as Promise<TextureSourceCubeData>;\n }\n\n loadCompressedTextureFromArrayBuffer (arrayBuffer: ArrayBuffer, options?: TextureOptions): TextureOptions {\n return Object.assign(getCompressedTextureOptions(arrayBuffer), options);\n }\n\n reloadTextureAsync (texture: Texture): Promise<Texture> {\n const id = texture.id;\n const o = this.reloadPending[id];\n\n if (o) {\n return o;\n }\n if (texture.options.sourceFrom) {\n return this.reloadPending[id] = this.loadSourceAsync(texture.options.sourceFrom as TextureFactorySourceFrom).then(opt => {\n texture.updateSource(opt);\n delete this.reloadPending[id];\n\n return texture;\n }).catch(ex => {\n delete this.reloadPending[id];\n throw ex;\n });\n }\n\n return Promise.reject('no source from');\n }\n\n}\n\nlet g: TextureFactory;\n\nexport function getDefaultTextureFactory (): TextureFactory {\n if (!g) {\n g = new MarsTextureFactory();\n }\n\n return g;\n}\n\nexport function setDefaultTextureFactory (factory: TextureFactory) {\n g = factory;\n}\n","import type {\n Texture,\n Texture2DSourceOptionsData,\n Texture2DSourceOptionsImage,\n Texture2DSourceOptionsNone,\n Texture2DSourceOptionsVideo,\n TextureCubeSourceOptionsImage,\n TextureOptions,\n TextureSourceOptions } from '../../types/Texture';\nimport {\n TextureSourceType,\n} from '../../types/Texture';\nimport type { GLGPURenderer } from '../webgl/GLGPURenderer';\nimport { GLTexture, imageBitMapAvailable } from '../webgl/GLTexture';\nimport type { Immutable } from '../../types/type';\nimport { getDefaultTextureFactory } from './MarsTextureFactory';\nimport { constants } from '../webgl/constants';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { forEach, isObj, throwDestroyedError } from '../common/utils';\n\nexport function closeImageBitMap (img: any) {\n if (imageBitMapAvailable) {\n if (img instanceof ImageBitmap) {\n img.close();\n } else if (img instanceof Array) {\n img.forEach(closeImageBitMap);\n } else if (isObj(img)) {\n forEach(img, closeImageBitMap);\n }\n }\n}\n\nlet seed = 1;\n\nexport class MarsTexture implements Texture {\n readonly id: string;\n readonly options: Immutable<TextureOptions>;\n readonly sourceType: TextureSourceType;\n readonly name: string;\n readonly renderer?: MarsRenderer;\n readonly internal?: GLTexture;\n private _offloaded!: boolean;\n\n private _isDestroyed = false;\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n constructor (options: TextureOptions | GLTexture, renderer?: MarsRenderer) {\n this.id = 'Tex' + seed++;\n\n if (options instanceof GLTexture) {\n this.sourceType = options.options.sourceType as TextureSourceType;\n this.options = options.options as Immutable<TextureOptions>;\n if (!renderer) {\n throw Error('copy texture should assign renderer');\n }\n this.internal = options;\n this.renderer = renderer;\n this.name = '';\n } else {\n const opt = this.checkOptions(options);\n\n this.sourceType = opt.sourceType as TextureSourceType;\n this.options = opt;\n this.name = options.name || '';\n if (renderer) {\n this.assignRenderer(renderer);\n }\n }\n }\n\n checkOptions (options: TextureOptions): Immutable<TextureOptions> {\n const opt = Object.assign({\n minFilter: constants.NEAREST,\n magFilter: constants.NEAREST,\n wrapS: constants.CLAMP_TO_EDGE,\n wrapT: constants.CLAMP_TO_EDGE,\n target: options.target || constants.TEXTURE_2D,\n format: constants.RGBA,\n internalFormat: options.format || constants.RGBA,\n type: constants.UNSIGNED_BYTE,\n }, options) as TextureOptions;\n\n if (!opt.sourceType) {\n if ((opt as Texture2DSourceOptionsImage).image) {\n (opt as Texture2DSourceOptionsImage).sourceType = TextureSourceType.image;\n } else if ((opt as Texture2DSourceOptionsData).data) {\n (opt as Texture2DSourceOptionsData).sourceType = TextureSourceType.data;\n } else if ((opt as Texture2DSourceOptionsVideo).video) {\n (opt as Texture2DSourceOptionsVideo).sourceType = TextureSourceType.video;\n } else {\n (opt as Texture2DSourceOptionsNone).sourceType = TextureSourceType.none;\n }\n }\n if (!opt.sourceType) {\n throw Error('invalid source type');\n }\n\n return opt as Immutable<TextureOptions>;\n }\n\n get width () {\n return this.internal?.width || 0;\n }\n\n get height () {\n return this.internal?.height || 0;\n }\n\n assignRenderer (renderer: MarsRenderer): MarsTexture {\n // @ts-expect-error safe to assign\n this['renderer'] = renderer;\n this._assignRenderer(renderer.internal);\n\n return this;\n }\n\n _assignRenderer (renderer: GLGPURenderer): void {\n if (!this.internal) {\n const option = this.options as TextureOptions;\n\n // @ts-expect-error safe to assign\n this['internal'] = new GLTexture(option, renderer);\n const releaseImageSource = !option.keepImageSource;\n\n if (option.sourceType === TextureSourceType.image) {\n if (releaseImageSource) {\n closeImageBitMap((option as Texture2DSourceOptionsImage).image);\n closeImageBitMap((option as TextureCubeSourceOptionsImage).cube);\n }\n //@ts-expect-error delete image memory\n delete (option as Texture2DSourceOptionsImage).image;\n //@ts-expect-error delete image memory\n delete (option as TextureCubeSourceOptionsImage).cube;\n } else if (option.sourceType === TextureSourceType.data) {\n //@ts-expect-error delete image memory\n delete (option as Texture2DSourceOptionsData).data;\n } else if (option.sourceType === TextureSourceType.compressed) {\n //@ts-expect-error delete image memory\n delete option.mipmaps;\n } else if (option.sourceType === TextureSourceType.mipmaps) {\n //@ts-expect-error delete image memory\n delete option.mipmaps;\n if (releaseImageSource) {\n closeImageBitMap(option.mipmaps);\n }\n }\n }\n }\n\n uploadCurrentVideoFrame () {\n if (this.options.sourceType === TextureSourceType.video && this.options.video && this.internal) {\n this.internal.update({ sourceType: TextureSourceType.video, video: this.options.video as HTMLVideoElement });\n\n return true;\n }\n\n return false;\n }\n\n destroy (): void {\n if (this.internal) {\n this.internal?.destroy();\n //@ts-expect-error safe to assign\n this['internal'] = this['renderer'] = undefined;\n }\n this._isDestroyed = true;\n this._assignRenderer = throwDestroyedError;\n }\n\n reloadDataAsync (): Promise<Texture> {\n if (this._offloaded) {\n return getDefaultTextureFactory().reloadTextureAsync(this);\n }\n\n return Promise.resolve(this);\n }\n\n offloadData (): void {\n if (this.internal && getDefaultTextureFactory().canOffloadTexture(this)) {\n this.internal?.offloadData();\n this._offloaded = true;\n }\n }\n\n updateSource (options: TextureSourceOptions): void {\n // @ts-expect-error safe to assign\n this['options'] = this.checkOptions(Object.assign(this.options, options));\n // @ts-expect-error safe to assign\n this['sourceType'] = this.options.sourceType;\n this.internal?.update(this.options as TextureSourceOptions);\n }\n\n}\n","import type {\n RenderPassColorAttachment,\n RenderPassColorAttachmentOptions, RenderPassColorAttachmentTextureOptions,\n} from '../../types/RenderPass';\nimport {\n RenderPassAttachmentStorageType,\n} from '../../types/RenderPass';\nimport { MarsTexture } from './MarsTexture';\nimport { TextureSourceType } from '../../types/Texture';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { constants } from '../webgl/constants';\nimport { throwDestroyedError } from '../common/utils';\n\ninterface MarsRenderPassColorAttachmentOptions extends RenderPassColorAttachmentOptions {\n size?: [x: number, y: number],\n name?: string,\n}\n\ninterface MarsRenderPassColorAttachmentTextureOptions extends RenderPassColorAttachmentTextureOptions {\n size?: [x: number, y: number],\n}\n\nexport class MarsRenderPassColorAttachment implements RenderPassColorAttachment {\n readonly readable: boolean;\n texture!: MarsTexture;\n readonly externalTexture: boolean;\n textureOptions?: MarsRenderPassColorAttachmentTextureOptions;\n private _isDestroyed: boolean;\n multisample: number;\n readonly storageType = RenderPassAttachmentStorageType.color;\n get isDestroyed () {\n return this._isDestroyed;\n }\n\n constructor (options: MarsRenderPassColorAttachmentOptions) {\n if (options.texture instanceof MarsTexture) {\n this.texture = options.texture;\n this.externalTexture = true;\n } else if (options.texture) {\n const texOpt = options.texture as RenderPassColorAttachmentTextureOptions;\n\n this.externalTexture = false;\n this.textureOptions = {\n size: options.size,\n format: texOpt.format || constants.RGBA,\n type: texOpt.type || constants.UNSIGNED_BYTE,\n internalFormat: texOpt.internalFormat || texOpt.format || constants.RGBA,\n wrapT: texOpt.wrapT,\n wrapS: texOpt.wrapS,\n minFilter: texOpt.minFilter,\n magFilter: texOpt.magFilter,\n name: options.name,\n };\n } else {\n throw Error('color attachment must use texture');\n }\n this._isDestroyed = false;\n this.readable = true;\n }\n\n get size (): [x: number, y: number] {\n const tex = this.texture;\n\n return tex ? [tex.width, tex.height] : [0, 0];\n }\n\n get width (): number {\n return this.texture?.width || 0;\n }\n\n get height (): number {\n return this.texture?.height || 0;\n }\n\n assignRenderer (renderer: MarsRenderer): MarsRenderPassColorAttachment {\n if (this.textureOptions) {\n const size: [x: number, y: number] = this.textureOptions.size || [renderer.width, renderer.height];\n\n this.texture = new MarsTexture({\n ...this.textureOptions,\n sourceType: TextureSourceType.framebuffer,\n data: { width: size[0], height: size[1] },\n });\n }\n if (this.texture) {\n this.texture.assignRenderer(renderer);\n }\n if (this.multisample > 1) {\n this.multisample = Math.min(renderer.gpu.capability.maxSample, this.multisample);\n }\n\n return this;\n }\n\n destroy (): void {\n this.texture?.destroy();\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsRenderPassColorAttachment;\n this._isDestroyed = true;\n }\n\n}\n","import type {\n RenderPass,\n RenderPassAttachmentOptions,\n RenderPassLoadAction,\n RenderPassDelegate,\n RenderPassDepthStencilAttachment,\n RenderPassDestroyOptions,\n RenderPassOptions,\n RenderPassStorageObject,\n RenderPassStoreAction,\n} from '../../types/RenderPass';\nimport {\n RenderPassAttachmentStorageType,\n RenderPassDestroyAttachmentType,\n RenderPassMeshOrder,\n TextureStoreAction,\n} from '../../types/RenderPass';\nimport type { MarsMesh } from './MarsMesh';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { GLFrameBuffer } from '../webgl/GLFrameBuffer';\nimport { MarsRenderPassColorAttachment } from './MarsRenderPassColorAttachment';\nimport { MarsTexture } from './MarsTexture';\nimport type { GLTexture } from '../webgl/GLTexture';\nimport {\n arrAddByOrder, arrRemove, sortByOrder, throwDestroyedError,\n} from '../common/utils';\nimport type { vec4 } from '../../types';\nimport { TextureSourceType } from '../../types';\nimport { MarsSemanticMap } from './MarsSemanticMap';\nimport { DestroyOptions } from '../../types/constants';\n\nlet seed = 1;\n\nexport class MarsRenderPass implements RenderPass {\n delegate: RenderPassDelegate;\n readonly name: string;\n readonly priority: number;\n readonly meshes: MarsMesh[];\n readonly options: RenderPassAttachmentOptions;\n readonly renderer!: MarsRenderer;\n readonly frameBuffer?: GLFrameBuffer;\n\n readonly depthStencilType: RenderPassAttachmentStorageType;\n readonly loadAction: RenderPassLoadAction;\n readonly storeAction: RenderPassStoreAction;\n readonly semantics: MarsSemanticMap;\n\n private _isDestroyed = false;\n\n private _depthTexture?: MarsTexture;\n private _stencilTexture?: MarsTexture;\n private _attachments: MarsRenderPassColorAttachment[];\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n get multisample () {\n return this.frameBuffer?.multisample || 0;\n }\n get attachments () {\n return this._attachments;\n }\n\n public viewportScale!: number;\n private _isCustomViewport!: boolean;\n private _customViewport?: [x: number, y: number, width: number, height: number];\n //todo reorder meshes if changed\n meshOrder: RenderPassMeshOrder;\n\n constructor (options: RenderPassOptions, renderer?: MarsRenderer) {\n this.name = options.name || ('MarsRenderPass_' + seed++);\n this.priority = options.priority || 0;\n this.meshOrder = options.meshOrder || RenderPassMeshOrder.ascending;\n this.meshes = (options.meshes as MarsMesh[] || []).slice();\n sortByOrder(this.meshes, this.meshOrder);\n this.options = options;\n this.loadAction = Object.assign({}, options.loadAction);\n this._attachments = [];\n this.semantics = new MarsSemanticMap(options.semantics);\n this.depthStencilType = options.depthStencilAttachment?.storageType || RenderPassAttachmentStorageType.none;\n this._setViewportOptions(options);\n if (renderer) {\n this.assignRenderer(renderer);\n }\n this.delegate = options.delegate || {};\n const defStoreAction: RenderPassStoreAction = {\n colorAction: TextureStoreAction.store,\n depthAction: TextureStoreAction.store,\n stencilAction: TextureStoreAction.store,\n };\n\n this.storeAction = Object.assign(defStoreAction, options.storeAction);\n }\n\n get viewport (): vec4 {\n const ret = this.frameBuffer?.viewport || this._customViewport;\n\n if (ret) {\n return ret;\n }\n const renderer = this.renderer;\n const vs = this.viewportScale;\n\n return renderer ? [0, 0, renderer.width * vs, renderer.height * vs] : [0, 0, 0, 0];\n }\n\n get stencilAttachment (): RenderPassDepthStencilAttachment | undefined {\n const frameBuffer = this.frameBuffer;\n\n if (frameBuffer) {\n return {\n storageType: frameBuffer.depthStencilStorageType,\n storage: frameBuffer.stencilStorage as RenderPassStorageObject,\n texture: frameBuffer.stencilTexture ? this._getStencilTexture(frameBuffer.stencilTexture, frameBuffer.externalStorage) : undefined,\n };\n }\n }\n\n get depthAttachment (): RenderPassDepthStencilAttachment | undefined {\n const frameBuffer = this.frameBuffer;\n\n if (frameBuffer) {\n return {\n storageType: frameBuffer.depthStencilStorageType,\n storage: frameBuffer.depthStorage as RenderPassStorageObject,\n texture: frameBuffer.depthTexture ? this._getDepthTexture(frameBuffer.depthTexture, frameBuffer.externalStorage) : undefined,\n };\n }\n }\n\n bind () {\n if (this.frameBuffer) {\n this.frameBuffer.bind();\n } else {\n const state = this.renderer.internal.state;\n //在绑定的时候renderpass进行viewport的动态改变\n const vp = this.viewport;\n\n state.viewport(vp[0], vp[1], vp[2], vp[3]);\n }\n }\n\n private _getDepthTexture (texture: GLTexture, external: boolean): MarsTexture {\n if (!this._depthTexture) {\n const outTex = this.options.depthStencilAttachment?.texture as MarsTexture;\n const tex = texture === outTex?.internal ? outTex : new MarsTexture(texture, this.renderer);\n\n if (!external) {\n this._depthTexture = tex;\n }\n\n return tex;\n }\n\n return this._depthTexture;\n }\n\n private _getStencilTexture (texture: GLTexture, external: boolean): MarsTexture {\n if (!this._stencilTexture) {\n const outTex = this.options.depthStencilAttachment?.texture as MarsTexture;\n const tex = texture === outTex?.internal ? outTex : new MarsTexture(texture, this.renderer);\n\n if (!external) {\n this._stencilTexture = tex;\n }\n\n return tex;\n }\n\n return this._stencilTexture;\n }\n\n private _setViewportOptions (options: RenderPassAttachmentOptions) {\n if (options.viewport) {\n this._isCustomViewport = true;\n this.viewportScale = 1;\n this._customViewport = options.viewport.slice(0, 4) as [x: number, y: number, width: number, height: number];\n if (this.frameBuffer) {\n const vp = this._customViewport;\n\n this.frameBuffer.isCustomViewport = false;\n this.frameBuffer.resize(vp[0], vp[1], vp[2], vp[3]);\n }\n } else {\n this._isCustomViewport = false;\n this.viewportScale = options.viewportScale || 1;\n if (this.frameBuffer) {\n this.frameBuffer.isCustomViewport = true;\n this.frameBuffer.viewportScale = this.viewportScale;\n }\n }\n }\n\n resetColorAttachments (colors: MarsTexture[]) {\n if (!colors.length) {\n this.resetAttachments({ attachments: [] });\n }\n if (!this.attachments.length) {\n this.resetAttachments({ attachments: colors.map(t => ({ texture: t })) });\n } else {\n const attachments = colors.map(texture => {\n texture.updateSource({ sourceType: TextureSourceType.framebuffer });\n\n return new MarsRenderPassColorAttachment({ texture: texture.assignRenderer(this.renderer) });\n });\n\n this._attachments.forEach(att => !att.externalTexture && att.destroy());\n this._attachments = attachments;\n if (this.frameBuffer) {\n this.frameBuffer.bind();\n this.frameBuffer.resetColorTextures(colors.map(color => color.internal as GLTexture));\n }\n }\n }\n\n resetAttachments (options: RenderPassAttachmentOptions) {\n const ret = this.options;\n\n //@ts-expect-error safe to assign\n this.options = options;\n this._setViewportOptions(options);\n if (this.renderer) {\n this._resetAttachments();\n }\n\n return ret;\n }\n\n private _resetAttachments () {\n const renderer = this.renderer;\n const options = this.options;\n\n if (this._attachments.length) {\n this._attachments.forEach(att => !att.externalTexture && att.destroy());\n this._attachments.length = 0;\n this.frameBuffer?.destroy({ depthStencilAttachment: RenderPassDestroyAttachmentType.keepExternal });\n //@ts-expect-error safe to assign\n this.frameBuffer = null;\n }\n const vs = this.viewportScale;\n //renderpass的viewport相关参数都需要动态的修改\n const viewport = (this._isCustomViewport ? this._customViewport : [0, 0, renderer.width * vs, renderer.height * vs]) as vec4;\n\n const size: [x: number, y: number] = [viewport[2], viewport[3]];\n const name = this.name;\n\n if (options.attachments?.length) {\n const attachments = options.attachments.map(function (att, index) {\n return new MarsRenderPassColorAttachment(Object.assign({\n size,\n name: att.texture?.name || `${name}##color_${index}`,\n }, att)).assignRenderer(renderer);\n });\n\n this._attachments = attachments;\n const framebuffer = new GLFrameBuffer({\n storeAction: this.storeAction,\n name,\n viewport,\n multisample: options.multiSample,\n viewportScale: this.viewportScale,\n isCustomViewport: this._isCustomViewport,\n attachments: attachments.map(att => (att.texture).internal as GLTexture),\n depthStencilAttachment: options.depthStencilAttachment || { storageType: RenderPassAttachmentStorageType.none },\n }, renderer.internal);\n\n framebuffer.bind();\n framebuffer.unbind();\n //@ts-expect-error safe to assign\n this.frameBuffer = framebuffer;\n } else {\n this._attachments.length = 0;\n }\n }\n\n unbind () {\n const state = this.renderer.internal.state;\n\n if (this.frameBuffer) {\n this.frameBuffer.unbind();\n } else {\n state.bindSystemFramebuffer();\n }\n }\n\n assignRenderer (renderer: MarsRenderer): MarsRenderPass {\n if (!this.renderer) {\n //@ts-expect-error safe to assign\n this.renderer = renderer;\n this._resetAttachments();\n }\n\n return this;\n }\n\n destroy (options?: RenderPassDestroyOptions) {\n const destroyMeshOption = options?.meshes || undefined;\n\n if (destroyMeshOption !== DestroyOptions.keep) {\n this.meshes.forEach(mesh => {\n mesh.destroy(destroyMeshOption);\n });\n }\n this.meshes.length = 0;\n\n const colorOpt = options?.colorAttachment ? options.colorAttachment : RenderPassDestroyAttachmentType.force;\n\n this._attachments.forEach(att => {\n const keep = (att.externalTexture && colorOpt === RenderPassDestroyAttachmentType.keepExternal) || colorOpt === RenderPassDestroyAttachmentType.keep;\n\n if (!keep) {\n att.destroy();\n }\n });\n this._attachments.length = 0;\n if (options?.semantics !== DestroyOptions.keep) {\n this.semantics.destroy();\n }\n\n const depthStencilOpt = options?.depthStencilAttachment ? options.depthStencilAttachment : RenderPassDestroyAttachmentType.force;\n const fbo = this.frameBuffer;\n\n if (fbo) {\n fbo.destroy({ depthStencilAttachment: depthStencilOpt });\n const keep = (fbo.externalStorage && depthStencilOpt === RenderPassDestroyAttachmentType.keepExternal) || depthStencilOpt === RenderPassDestroyAttachmentType.keep;\n\n if (!keep) {\n this._stencilTexture?.destroy();\n this._depthTexture?.destroy();\n }\n }\n\n //@ts-expect-error safe to assign\n this.options = this.renderer = null;\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsRenderPass;\n this._isDestroyed = true;\n }\n\n addMesh (mesh: MarsMesh): void {\n arrAddByOrder(this.meshes, mesh, this.meshOrder);\n }\n\n removeMesh (mesh: MarsMesh): void {\n arrRemove(this.meshes, mesh);\n }\n\n setMeshes (meshes: MarsMesh[]): MarsMesh[] {\n this.meshes.length = 0;\n this.meshes.splice(0, 0, ...meshes);\n\n return sortByOrder(this.meshes, this.meshOrder);\n }\n}\n","import type { MaterialRenderStates } from '../../types/Material';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport type { MarsMaterial } from '../render/MarsMaterial';\nimport type { Immutable, vec3, vec4 } from '../../types/type';\nimport { constants } from './constants';\nimport type { GLProgram } from './GLProgram';\n\nexport class GLMaterial {\n\n readonly renderer: GLGPURenderer;\n\n readonly shaderCacheId: string;\n\n readonly states: Immutable<MaterialRenderStates>;\n\n readonly material: MarsMaterial;\n\n constructor (renderer: GLGPURenderer, material: MarsMaterial) {\n this.renderer = renderer;\n this.shaderCacheId = material.shaderCacheId;\n this.states = material.states;\n this.material = material;\n }\n\n setupStates () {\n const webGLState = this.renderer.state;\n const currentState = this.states;\n\n //在之前已经给过默认值 这里就不用再判断undefined和null了\n webGLState.toggle(constants.SAMPLE_ALPHA_TO_COVERAGE, currentState.sampleAlphaToCoverage);\n webGLState.toggle(constants.BLEND, currentState.blending);\n webGLState.toggle(constants.DEPTH_TEST, currentState.depthTest);\n webGLState.toggle(constants.STENCIL_TEST, currentState.stencilTest);\n webGLState.toggle(constants.CULL_FACE, currentState.cullFaceEnabled);\n webGLState.toggle(constants.POLYGON_OFFSET_FILL, currentState.polygonOffsetFill);\n if (currentState.stencilTest) {\n //stencil\n webGLState.stencilMaskSeparate(constants.BACK, currentState.stencilMaskBack as number);\n webGLState.stencilMaskSeparate(constants.FRONT, currentState.stencilMaskFront as number);\n const stencilBackFunc = currentState.stencilFuncBack as vec3;\n\n webGLState.stencilFuncSeparate(constants.BACK, stencilBackFunc[0], stencilBackFunc[1], stencilBackFunc[2]);\n const stencilFrontFunc = currentState.stencilFuncFront as vec3;\n\n webGLState.stencilFuncSeparate(constants.FRONT, stencilFrontFunc[0], stencilFrontFunc[1], stencilFrontFunc[2]);\n const stencilOpBack = currentState.stencilOpBack as vec3;\n\n webGLState.stencilOpSeparate(constants.BACK, stencilOpBack[0], stencilOpBack[1], stencilOpBack[2]);\n const stencilOpFront = currentState.stencilOpFront as vec3;\n\n webGLState.stencilOpSeparate(constants.FRONT, stencilOpFront[0], stencilOpFront[1], stencilOpFront[2]);\n }\n\n if (currentState.blending) {\n //blend\n const blendColor = currentState.blendColor as vec4;\n\n webGLState.blendColor(blendColor[0], blendColor[1], blendColor[2], blendColor[3]);\n webGLState.blendEquationSeparate(currentState.blendEquationRGB as number, currentState.blendEquationAlpha as number);\n webGLState.blendFuncSeparate(currentState.blendSrc as number, currentState.blendDst as number, currentState.blendSrcAlpha as number, currentState.blendDstAlpha as number);\n }\n\n //color depth\n const colorMask = currentState.colorMask as [r: boolean, g: boolean, b: boolean, a: boolean];\n\n webGLState.colorMask(colorMask[0], colorMask[1], colorMask[2], colorMask[3]);\n if (currentState.depthTest) {\n webGLState.depthMask(currentState.depthMask as boolean);\n webGLState.depthFunc(currentState.depthFunc as number);\n webGLState.depthRange(currentState.depthRange?.[0] as number, currentState.depthRange?.[1] as number);\n }\n\n if (currentState.cullFaceEnabled) {\n //face\n webGLState.cullFace(currentState.cullFace as number);\n webGLState.frontFace(currentState.frontFace as number);\n }\n\n if (currentState.polygonOffsetFill) {\n const polygonOffset = currentState.polygonOffset || [0, 0];\n\n webGLState.polygonOffset(polygonOffset[0], polygonOffset[1]);\n }\n\n // set gl states\n\n }\n\n getProgram (): GLProgram | null {\n return this.renderer.shaderLibrary.getProgram(this.shaderCacheId);\n }\n\n destroy () {\n const lib = this.renderer?.shaderLibrary;\n\n if (lib) {\n const shader = lib.getShaderResult(this.shaderCacheId);\n\n if (shader && !shader.shared) {\n lib.deleteShader(this.shaderCacheId);\n }\n }\n //@ts-expect-error safe to assign\n this.renderer = null;\n }\n}\n","import type {\n MaterialDataBlock,\n MaterialDataBlockDestroyOptions,\n MaterialDataBlockOptions, UniformSemantic, UniformStruct,\n UniformValue, vec2,\n Texture,\n} from '../../types';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { forEach, isObj, throwDestroyedError } from '../common/utils';\nimport { MarsTexture } from './MarsTexture';\nimport { DestroyOptions } from '../../types/constants';\nimport type { UniformBlockSpec } from '../webgl/GLUniformUtils';\nimport { UniformBlockBuffer } from '../webgl/GLUniformUtils';\n\nfunction isUniformStruct (value: UniformValue) {\n return (isObj(value)) && ((value as any).length === undefined);\n}\n\nfunction isUniformStructArray (value: UniformValue) {\n return (value) && ((value as Array<number>).length !== undefined) && isUniformStruct((value as Array<number>)[0]);\n}\n\nexport class MarsMaterialDataBlock implements MaterialDataBlock {\n readonly _uniformValues: Record<string, UniformValue>;\n readonly _uniformTextures: Record<string, MarsTexture | MarsTexture[]>;\n readonly _uniformFlags: Record<string, boolean>;\n readonly _uniformValueRanges: Record<string, vec2>;\n readonly name: string;\n readonly uniformSemantics: { [key: string]: UniformSemantic };\n readonly renderer?: MarsRenderer;\n readonly uboBufferMap: Record<string, UniformBlockBuffer>;\n protected _isDestroyed = false;\n private _uniformPrivate: Record<string, boolean>;\n private readonly _keepUboData: boolean;\n\n constructor (props: MaterialDataBlockOptions & { keepUboData?: boolean }, renderer?: MarsRenderer) {\n this._isDestroyed = false;\n this.name = props.name || 'defDataBlock';\n this._uniformValues = {};\n this._uniformFlags = {};\n this.uboBufferMap = {};\n this._uniformTextures = {};\n this._uniformValueRanges = {};\n this._keepUboData = !!props.keepUboData;\n this.uniformSemantics = props.uniformSemantics || {};\n this._uniformPrivate = {};\n if (props.uniformValues) {\n this.setUniformValues(props.uniformValues);\n }\n forEach(props.uniformTextures, (tex, name)=>this.setUniformTexture(name, tex as MarsTexture));\n if (renderer) {\n this.assignRenderer(renderer);\n }\n }\n\n _assignUniformValueRenderer (value: MarsTexture | MarsTexture[], renderer?: MarsRenderer) {\n if (renderer) {\n const assign = (value: MarsTexture) => isObj(value) && (value as any).assignRenderer && (value as any).assignRenderer(renderer);\n\n if (value instanceof Array) {\n value.forEach(assign);\n } else {\n assign(value);\n }\n }\n }\n\n invalidAllFlags () {\n const f = this._uniformFlags;\n const range = this._uniformValueRanges;\n\n forEach(this._uniformValues, function (val, key) {\n f[key] = true;\n range[key] = [0, 0];\n });\n }\n\n clearFlags () {\n // @ts-expect-error safe to assign\n this._uniformFlags = {};\n }\n\n isDirty (shaderCacheId: string, name: string): boolean {\n return this._uniformFlags[name] === true;\n }\n\n get isDestroyed () {\n return this._isDestroyed;\n }\n\n setUniformTexture (uniformName: string, texture: MarsTexture | MarsTexture[] | undefined) {\n if (texture) {\n this._uniformTextures[uniformName] = texture;\n this._assignUniformValueRenderer(texture, this.renderer);\n this._uniformPrivate[uniformName] = true;\n } else {\n delete this._uniformTextures[uniformName];\n delete this._uniformPrivate[uniformName];\n }\n }\n\n getUniformTexture <T extends (Texture | Texture[]) = MarsTexture> (uniformName: string): T | undefined {\n return this._uniformTextures[uniformName] as unknown as T;\n }\n\n assignRenderer (renderer: MarsRenderer): MaterialDataBlock {\n if (this.renderer && renderer !== this.renderer) {\n throw Error('assign different renderer');\n }\n if (renderer && !this.renderer) {\n // @ts-expect-error safe to assign\n this.renderer = renderer;\n\n forEach(this._uniformTextures, value => {\n this._assignUniformValueRenderer(value, renderer);\n });\n }\n\n return this;\n }\n\n createUboBuffer (spec: UniformBlockSpec): UniformBlockBuffer | undefined {\n if (!this.uboBufferMap[spec.id] && this.renderer && this.name === spec.name) {\n const ubo = this.uboBufferMap[spec.id] = new UniformBlockBuffer(this.renderer.internal, spec);\n\n ubo.keepData = this._keepUboData;\n }\n\n return this.uboBufferMap[spec.id];\n }\n\n setUboBuffer (uboBuffer: UniformBlockBuffer) {\n uboBuffer.setValues(this._uniformValues, this._uniformFlags, this._uniformValueRanges);\n }\n\n updateUniformSubData (name: string, start: number, count: number) {\n const range = this._uniformValueRanges[name];\n\n if (!this._uniformValueRanges[name]) {\n this._uniformValueRanges[name] = [start, count];\n } else {\n const end = Math.max(range[0] + range[1], start + count);\n const s = Math.min(start, range[0]);\n\n this._uniformValueRanges[name] = [s, end - s];\n }\n this._uniformFlags[name] = true;\n }\n\n hasUniformValue (name: string): boolean {\n return !!this._uniformPrivate[name];\n }\n\n destroy (options?: MaterialDataBlockDestroyOptions): void {\n if (options?.textures !== DestroyOptions.keep) {\n forEach(this._uniformTextures, uniform => {\n if (uniform instanceof MarsTexture) {\n uniform.destroy();\n }\n });\n }\n\n forEach(this.uboBufferMap, ubo => {\n if (ubo !== undefined) {\n ubo.destroy();\n }\n });\n // @ts-expect-error safe to assign\n this.uboBufferMap = {};\n\n this._uniformPrivate = {};\n\n // @ts-expect-error safe to assign\n this._uniformFlags = {};\n // @ts-expect-error safe to assign\n this._uniformValues = {};\n // @ts-expect-error safe to assign\n this._uniformTextures = {};\n // @ts-expect-error safe to assign\n this.uniformSemantics = {};\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsMaterialDataBlock;\n\n this._isDestroyed = true;\n }\n\n getUniformValue (name: string): UniformValue {\n return this._uniformValues[name];\n }\n\n getUniformValues (): { [p: string]: UniformValue } {\n return this._uniformValues;\n }\n\n setUniformValue (name: string, value: UniformValue | undefined, isSemantic?: boolean): boolean {\n if (value === undefined) {\n const originValue = this._uniformValues[name];\n\n if (isUniformStruct(originValue)) {\n forEach(originValue as UniformStruct, (data, key) => {\n const nameInStruct = name + '.' + key;\n\n delete this._uniformPrivate[nameInStruct];\n });\n } else if (isUniformStructArray(originValue)) {\n (originValue as UniformStruct[]).forEach((valueData, i) => {\n forEach(valueData, (valueInStruct: UniformValue, key) => {\n const nameInStruct = name + '[' + i + ']' + '.' + key;\n\n delete this._uniformPrivate[nameInStruct];\n });\n });\n }\n delete this._uniformValues[name];\n this._uniformFlags[name] = false;\n delete this._uniformPrivate[name];\n } else if (value instanceof MarsTexture) {\n throw Error('setUniformValue not accept texture:' + name);\n } else {\n this._uniformPrivate[name] = !isSemantic;\n if (isUniformStruct(value)) {\n forEach(value as UniformStruct, (data, key) => {\n const nameInStruct = name + '.' + key;\n\n this._uniformValues[nameInStruct] = data;\n this._uniformFlags[nameInStruct] = true;\n this._uniformPrivate[nameInStruct] = true;\n });\n // 只是用来保存结构体对象\n this._uniformValues[name] = value;\n this._uniformFlags[name] = false;\n } else if (isUniformStructArray(value)) {\n (value as UniformStruct[]).forEach((valueData, i) => {\n forEach(valueData, (valueInStruct: UniformValue, key) => {\n const nameInStruct = name + '[' + i + ']' + '.' + key;\n\n this._uniformValues[nameInStruct] = valueInStruct;\n this._uniformFlags[nameInStruct] = true;\n this._uniformPrivate[nameInStruct] = true;\n });\n });\n // 只是用来保存结构体对象\n this._uniformValues[name] = value;\n this._uniformFlags[name] = false;\n } else {\n this._uniformValues[name] = value;\n this._uniformFlags[name] = true;\n }\n }\n\n return true;\n }\n\n setUniformValues (map: { [p: string]: UniformValue }): void {\n forEach(map, (val, key) => {\n this.setUniformValue(key, val);\n });\n }\n\n setUniformSemantic (name: string, semantic: string | undefined) {\n if (semantic) {\n this.uniformSemantics[name] = semantic;\n } else {\n delete this.uniformSemantics[name];\n }\n }\n\n clone (name: string): MarsMaterialDataBlock {\n return new MarsMaterialDataBlock({\n name,\n uniformValues: { ...this._uniformValues },\n uniformTextures: { ...this._uniformTextures },\n uniformSemantics: { ...this.uniformSemantics },\n keepUboData: this._keepUboData,\n }, this.renderer);\n }\n\n}\n","import type {\n Material, MaterialDestroyOptions, MaterialOptions, MaterialRenderStates,\n} from '../../types';\nimport { MaterialRenderType } from '../../types/Material';\nimport type { Immutable } from '../../types/type';\nimport { GLMaterial } from '../webgl/GLMaterial';\nimport { constants } from '../webgl/constants';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { MarsMaterialDataBlock } from './MarsMaterialDataBlock';\nimport { arrAdd, arrRemove, throwDestroyedError } from '../common/utils';\nimport { DestroyOptions } from '../../types/constants';\n\nlet seed = 1;\n\nexport class MarsMaterial implements Material {\n readonly shaderCacheId!: string;\n readonly options!: Immutable<MaterialOptions>;\n readonly materialInternal?: GLMaterial;\n readonly name: string;\n public readonly _dataBlocks: MarsMaterialDataBlock[];\n readonly renderType: MaterialRenderType;\n readonly states: Immutable<MaterialRenderStates>;\n readonly renderer?: MarsRenderer;\n private _dbMap: Record<string, MarsMaterialDataBlock>;\n private _isDestroyed = false;\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n get dataBlocks (): MarsMaterialDataBlock[] {\n return this._dataBlocks;\n }\n\n get defaultDataBlock (): MarsMaterialDataBlock {\n return this._dataBlocks[0];\n }\n\n constructor (options: MaterialOptions) {\n this.name = options.name || ('Material' + seed++);\n this._dataBlocks = (options.dataBlocks || []).map(b => (b instanceof MarsMaterialDataBlock) ? b : new MarsMaterialDataBlock(b));\n this.renderType = MaterialRenderType.normal;\n this.states = this.createMaterialStates(options.states);\n this.options = options;\n this._dbMap = {};\n if (!this._dataBlocks.length) {\n this._dataBlocks[0] = new MarsMaterialDataBlock({ name: 'main' });\n }\n }\n\n createMaterialStates (states: MaterialRenderStates): Immutable<MaterialRenderStates> {\n const ret: MaterialRenderStates = {\n blending: !!states.blending,\n sampleAlphaToCoverage: !!states.sampleAlphaToCoverage,\n depthTest: !!states.depthTest,\n stencilTest: !!states.stencilTest,\n cullFaceEnabled: !!states.cullFaceEnabled,\n polygonOffsetFill: !!states.polygonOffsetFill,\n };\n\n if (states.stencilMask === undefined || states.stencilMask === null) {\n ret.stencilMaskBack = valIfUndefined(states.stencilMaskBack, 0xff);\n ret.stencilMaskFront = valIfUndefined(states.stencilMaskFront, 0xff);\n } else {\n const stencilMaskBack = valIfUndefined(states.stencilMaskBack, states.stencilMask);\n\n ret.stencilMaskBack = valIfUndefined(stencilMaskBack, 0xff);\n const stencilMaskFront = valIfUndefined(states.stencilMaskFront, states.stencilMask);\n\n ret.stencilMaskFront = valIfUndefined(stencilMaskFront, 0xff);\n }\n\n if (states.stencilFunc === undefined || states.stencilFunc === null) {\n ret.stencilFuncBack = valIfUndefined(states.stencilFuncBack, [constants.ALWAYS, 0, 0xff]);\n ret.stencilFuncFront = valIfUndefined(states.stencilFuncFront, [constants.ALWAYS, 0, 0xff]);\n } else {\n const stencilFuncFront = valIfUndefined(states.stencilFuncFront, states.stencilFunc);\n\n ret.stencilFuncFront = valIfUndefined(stencilFuncFront, [constants.ALWAYS, 0, 0xff]);\n const stencilFuncBack = valIfUndefined(states.stencilFuncBack, states.stencilFunc);\n\n ret.stencilFuncBack = valIfUndefined(stencilFuncBack, [constants.ALWAYS, 0, 0xff]);\n }\n\n if (states.stencilOp === undefined || states.stencilOp === null) {\n ret.stencilOpFront = valIfUndefined(states.stencilOpFront, [constants.KEEP, constants.KEEP, constants.KEEP]);\n ret.stencilOpBack = valIfUndefined(states.stencilOpBack, [constants.KEEP, constants.KEEP, constants.KEEP]);\n } else {\n const stencilOpFront = valIfUndefined(states.stencilOpFront, states.stencilOp);\n\n ret.stencilOpFront = valIfUndefined(stencilOpFront, [constants.KEEP, constants.KEEP, constants.KEEP]);\n const stencilOpBack = valIfUndefined(states.stencilOpBack, states.stencilOp);\n\n ret.stencilOpBack = valIfUndefined(stencilOpBack, [constants.KEEP, constants.KEEP, constants.KEEP]);\n }\n //blend\n ret.blendSrc = valIfUndefined(states.blendSrc, constants.ONE);\n ret.blendSrcAlpha = valIfUndefined(states.blendSrcAlpha, ret.blendSrc);\n ret.blendDst = valIfUndefined(states.blendDst, constants.ZERO);\n ret.blendDstAlpha = valIfUndefined(states.blendDstAlpha, ret.blendDst);\n ret.blendEquationRGB = valIfUndefined(states.blendEquationRGB, constants.FUNC_ADD);\n ret.blendEquationAlpha = valIfUndefined(states.blendEquationAlpha, ret.blendEquationRGB);\n ret.blendColor = valIfUndefined(states.blendColor, [0, 0, 0, 0]);\n //color\n ret.colorMask = valIfUndefined(states.colorMask, [true, true, true, true]);\n //depth\n ret.depthMask = valIfUndefined(states.depthMask, true);\n ret.depthFunc = valIfUndefined(states.depthFunc, constants.LESS);\n ret.depthRange = valIfUndefined(states.depthRange, [0, 1]);\n ret.cullFace = valIfUndefined(states.cullFace, constants.BACK);\n ret.frontFace = valIfUndefined(states.frontFace, constants.CCW);\n ret.polygonOffset = states.polygonOffset || [0, 0];\n\n //ret\n return Object.freeze(ret);\n }\n\n addDataBlock (b: MarsMaterialDataBlock) {\n if (this.getDataBlockByName(b.name)) {\n throw Error('dataBlock with same name:' + b.name);\n }\n if (arrAdd(this._dataBlocks, b)) {\n b.invalidAllFlags();\n const r = this.renderer;\n\n if (r) {\n b.assignRenderer(r);\n }\n\n }\n }\n\n getDataBlockByName (name: string) {\n const cache = this._dbMap[name];\n\n if (!cache) {\n const db = this._dataBlocks.find(db=> db.name === name);\n\n if (db) {\n return this._dbMap[name] = db;\n }\n }\n\n return cache;\n }\n\n removeDataBlock (b: MarsMaterialDataBlock) {\n arrRemove(this._dataBlocks, b);\n delete this._dbMap[b.name];\n }\n\n assignRenderer (renderer: MarsRenderer): MarsMaterial {\n if (!this.materialInternal) {\n const shader = this.options.shader;\n\n // @ts-expect-error safe to assign\n this.shaderCacheId = renderer.internal.shaderLibrary.addShader(shader);\n // @ts-expect-error safe to assign\n this.materialInternal = new GLMaterial(renderer.internal, this);\n // @ts-expect-error safe to assign\n this['renderer'] = renderer;\n this._dataBlocks.forEach(d => d.assignRenderer(renderer));\n }\n\n return this;\n }\n\n destroy (options?: MaterialDestroyOptions): void {\n if (options?.blocks !== DestroyOptions.keep) {\n this._dataBlocks.forEach(b => b.destroy({ textures: options?.textures }));\n }\n this.materialInternal?.destroy();\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsMaterial;\n this._isDestroyed = true;\n }\n}\n\nfunction valIfUndefined<T> (val: any, def: T): T {\n if (val === undefined || val === null) {\n return def;\n }\n\n return val;\n}\n","import type { GLGPURenderer } from './GLGPURenderer';\n\nexport function createVAO (renderer: GLGPURenderer, name?: string): GLVertexArrayObject | undefined {\n if (renderer.gpu.capability.vao) {\n const ret = new GLVertexArrayObject(renderer, name);\n\n if (ret.vao) {\n return ret;\n }\n }\n}\n\nexport class GLVertexArrayObject {\n readonly renderer: GLGPURenderer;\n\n readonly vao: WebGLVertexArrayObject;\n\n ready = false;\n\n constructor (renderer: GLGPURenderer, name?: string) {\n this.renderer = renderer;\n this.vao = renderer.createVertexArray(name) as WebGLVertexArrayObject;\n }\n\n destroy () {\n if (this.vao) {\n const renderer = this.renderer;\n\n if (renderer.state.bindingVAO == this.vao) {\n renderer.state.bindingVAO = undefined;\n renderer.bindVertexArray(null);\n }\n renderer.deleteVertexArray(this.vao);\n //@ts-expect-error safe to assign\n this.vao = this.renderer = null;\n }\n }\n\n bind () {\n const renderer = this.renderer;\n\n if (this.vao && renderer.state.bindingVAO !== this.vao) {\n renderer.state.bindingVAO = this.vao;\n renderer.bindVertexArray(this.vao);\n }\n }\n\n unbind () {\n const renderer = this.renderer;\n\n renderer.bindVertexArray(null);\n renderer.state.bindingVAO = undefined;\n }\n}\n","import type { AttributeWithType } from '../../types/Geometry';\nimport type { GPUBuffer, GPUBufferOptions } from '../../types/GPUBuffer';\nimport { GLGPUBuffer } from './GLGPUBuffer';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport type { RenderState } from '../../types/RenderFrame';\nimport { constants } from './constants';\nimport { forEach } from '../common/utils';\nimport type { GLVertexArrayObject } from './GLVertexArrayObject';\nimport { createVAO } from './GLVertexArrayObject';\nimport type { InstancedMesh } from '../../types';\n\nexport const INDEX_TYPE_MAP = {\n [Uint16Array.BYTES_PER_ELEMENT]: constants.UNSIGNED_SHORT,\n [Uint32Array.BYTES_PER_ELEMENT]: constants.UNSIGNED_INT,\n};\n\nexport const TYPE_BYTE_MAP = {\n [constants.UNSIGNED_SHORT]: Uint16Array.BYTES_PER_ELEMENT,\n [constants.UNSIGNED_INT]: Uint32Array.BYTES_PER_ELEMENT,\n};\n\nexport type GLGeometryOptions = {\n drawStart: number,\n drawCount: number,\n attributes: { [key: string]: AttributeWithType },\n buffers: { [key: string]: GPUBufferOptions },\n mode: GLenum,\n index?: GPUBufferOptions,\n name: string,\n vaoMap?: Record<string, GLVertexArrayObject | undefined>,\n};\n\n/**\n * GLGeometry对象,保存GLGPUBuffer对象。\n *\n */\nexport class GLGeometry {\n\n name?: string;\n\n renderer?: GLGPURenderer | undefined;\n\n drawStart: number;\n\n drawCount: number;\n\n mode: GLenum;\n\n indexBufferType: GLenum;\n\n // 记录顶点属性信息用于GLProgram绑定顶点属性\n attributes: { [key: string]: AttributeWithType };\n\n // 记录了顶点属性与GPUBuffer对应关系\n _buffersMap: { [key: string]: GLGPUBuffer };\n\n // 索引缓冲区\n _indexBuffer?: GLGPUBuffer;\n\n readonly vaoMap: Record<string, GLVertexArrayObject | undefined>;\n\n constructor (option: GLGeometryOptions | GLGeometry, renderer: GLGPURenderer) {\n\n this.renderer = renderer;\n\n this.drawStart = option.drawStart;\n\n this.drawCount = option.drawCount;\n\n this.mode = isNaN(option.mode) ? constants.TRIANGLES : option.mode;\n\n this.name = option.name;\n\n const buffers: { [key: string]: GLGPUBuffer } = {};\n\n const inAttributes = option.attributes;\n const attributes: { [key: string]: AttributeWithType } = {};\n\n if (option instanceof GLGeometry) {\n forEach(option._buffersMap, function (buffer, name) {\n buffers[name] = buffer;\n });\n } else {\n // 创建GPUBuffer\n forEach(option.buffers, function (opt, name) {\n buffers[name] = new GLGPUBuffer(opt, renderer);\n });\n if (option.index && option.index.data) {\n const ret = this.createIndexBuffer(option.index.data as Uint16Array, renderer);\n\n this.setIndexBuffer(ret[0], ret[1]);\n }\n }\n\n this._buffersMap = buffers;\n // 记录顶点属性\n forEach(inAttributes, function (attribute, name) {\n attributes[name] = attribute;\n });\n this.attributes = attributes;\n\n this.vaoMap = {};\n }\n\n createVao (name: string) {\n if (!this.vaoMap[name]) {\n this.vaoMap[name] = createVAO(this.renderer as GLGPURenderer, `${this.name}-${name}`);\n }\n\n return this.vaoMap[name] as GLVertexArrayObject;\n }\n\n destroyVao (name: string) {\n this.vaoMap[name]?.destroy();\n this.vaoMap[name] = undefined;\n }\n\n setIndexBuffer (buffer: GLGPUBuffer, indexBufferType: GLenum) {\n this._indexBuffer = buffer;\n this.indexBufferType = indexBufferType;\n }\n\n createIndexBuffer (data: Uint16Array | Uint32Array | Uint8Array, renderer: GLGPURenderer): [buffer: GLGPUBuffer, type: GLenum] {\n const type = INDEX_TYPE_MAP[data.BYTES_PER_ELEMENT];\n const indexOption: GPUBufferOptions = {\n data,\n target: constants.ELEMENT_ARRAY_BUFFER,\n name: `${this.name}##index`,\n };\n\n return [new GLGPUBuffer(indexOption, renderer), type];\n }\n\n getGPUBuffer (name: string | number): GLGPUBuffer | null {\n return this._buffersMap[name];\n }\n\n destroy (): void {\n if (this.renderer) {\n forEach(this._buffersMap, function (buffer) {\n buffer.destroy();\n });\n this._buffersMap = {};\n this._indexBuffer?.destroy();\n const m = this.vaoMap;\n\n forEach(m, function (vao, key) {\n vao?.destroy();\n m[key] = undefined;\n });\n }\n this.attributes = {};\n this._indexBuffer = undefined;\n this.renderer = undefined;\n }\n\n setAttributeBuffer (name: string, buffer: GPUBuffer): void {\n this._buffersMap[name] = buffer as GLGPUBuffer;\n // update vao bind\n }\n\n getAttributeBuffer (name: string): GPUBuffer | null {\n if (this._buffersMap != undefined) {\n return this._buffersMap[name];\n }\n\n return null;\n }\n\n draw (state: RenderState) {\n const index = this._indexBuffer;\n const gl = this.renderer?.gl as WebGL2RenderingContext;\n const gpu = this.renderer?.gpu;\n const useInstancedDraw = gpu?.capability.instanceDraw && (state.currentMesh as InstancedMesh).instanceCount > 0;\n\n if (gl && gpu) {\n const drawCount = this.drawCount;\n\n if (index) {\n const type = this.indexBufferType;\n //bind by vao\n //this._indexBuffer?.bind();\n const dc = isNaN(drawCount) ? index.getElementCount(TYPE_BYTE_MAP[type]) : drawCount;\n\n if (dc > 0) {\n if (useInstancedDraw) {\n gpu.drawElementsInstanced(gl, this.mode, dc, type, this.drawStart || 0, (state.currentMesh as InstancedMesh).instanceCount);\n } else {\n gl.drawElements(this.mode, dc, type, this.drawStart || 0);\n }\n }\n } else if (drawCount > 0) {\n if (useInstancedDraw) {\n gpu.drawArraysInstanced(gl, this.mode, this.drawStart, this.drawCount, (state.currentMesh as InstancedMesh).instanceCount);\n } else {\n gl.drawArrays(this.mode, this.drawStart, this.drawCount);\n }\n }\n }\n }\n}\n","import type { Immutable, TypedArray } from '../../types/type';\nimport type {\n Geometry,\n GeometryOptions,\n AttributeWithData,\n AttributeWithType,\n Attribute,\n} from '../../types/Geometry';\nimport type { GPUBuffer, GPUBufferOptions } from '../../types/GPUBuffer';\nimport { GLGeometry } from '../webgl/GLGeometry';\nimport { constants } from '../webgl/constants';\nimport { forEach, throwDestroyedError } from '../common/utils';\nimport type { GLGPUBuffer } from '../webgl/GLGPUBuffer';\nimport type { MarsRenderer } from './MarsRenderer';\n\nconst BYTES_TYPE_MAP = {\n [constants.FLOAT]: Float32Array.BYTES_PER_ELEMENT,\n [constants.INT]: Int32Array.BYTES_PER_ELEMENT,\n [constants.SHORT]: Int16Array.BYTES_PER_ELEMENT,\n [constants.BYTE]: Int8Array.BYTES_PER_ELEMENT,\n};\n\ntype BufferDirtyFlag = {\n dirty: boolean,\n discard?: boolean,\n start?: number,\n end?: number,\n};\n\nfunction isIndexDataType (data: any): boolean {\n const result = (data instanceof Uint8Array) || (data instanceof Uint16Array) ||\n (data instanceof Uint32Array);\n\n return result;\n}\n\nfunction attributeData2GLType (data: Float32Array | Int32Array | Int16Array | Uint16Array | Uint32Array | unknown): number {\n if (data instanceof Float32Array) {\n return constants.FLOAT;\n } else {\n return constants.INT;\n }\n}\n\nfunction emptyTypedArrayByGLType (type: number): Float32Array | Int32Array | Int16Array {\n if (type === constants.INT) {\n return new Int32Array(0);\n }\n if (type === constants.SHORT) {\n return new Int16Array(0);\n }\n\n return new Float32Array(0);\n}\n\n// 根据attribute的datasource获取js端buffer\nfunction getAttributeBufferOption (geom: MarsGeometry, name: string): GPUBufferOptions | undefined {\n const attribute = geom._attributes[name];\n\n if (attribute) {\n return geom._buffers[attribute.dataSource];\n }\n\n return undefined;\n}\n\nlet seed = 1;\n\n/**\n * 应用层Geometry对象,本身不直接保存GPU资源而是通过geometryInternal成员保存GPU资源。\n *\n */\nexport class MarsGeometry implements Geometry {\n\n renderer?: MarsRenderer;\n\n // JS端记录数据,用于flush\n _buffers: { [key: string]: GPUBufferOptions };\n\n // 用于创建internal geometry\n _attributes: Record<string, AttributeWithType>;\n\n _attributesReleasable: { [key: string]: boolean };\n\n _attributesName: string[] = [];\n\n // 记录SubData的变更范围\n _dirtyFlags: { [key: string]: BufferDirtyFlag };\n\n _index?: Uint16Array | Uint32Array;\n _indexReleasable = false;\n\n // 与底层图形相关的Geometry对象\n readonly internal!: GLGeometry;\n\n readonly options?: GeometryOptions;\n\n readonly name: string;\n protected _drawCount: number;\n protected _drawStart: number;\n protected _mode: number;\n protected _isDestroyed = false;\n\n indexDataType: Geometry['indexDataType'];\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n get mode (): number {\n return this._mode;\n }\n\n set mode (n: number) {\n this._mode = n;\n if (this.internal) {\n this.internal.mode = n;\n }\n }\n\n get attributes (): Immutable<{ [key: string]: Attribute }> {\n return this._attributes;\n }\n\n get drawCount (): number {\n return this._drawCount;\n }\n\n set drawCount (n: number | undefined) {\n this._drawCount = +(n as number);\n if (this.internal) {\n this.internal.drawCount = +(n as number);\n }\n }\n\n get drawStart () {\n return this._drawStart;\n }\n\n set drawStart (n: number) {\n this._drawStart = n;\n if (this.internal) {\n this.internal.drawStart = n;\n }\n }\n\n constructor (option: GeometryOptions) {\n this._drawStart = option.drawStart ? option.drawStart : 0;\n this._drawCount = isNaN(+(option.drawCount as number)) ? NaN : (option.drawCount as number);\n this._mode = (isNaN(option.mode as number) ? constants.TRIANGLES : option.mode) as number;\n this.name = option.name || ('MarsGeometry:' + seed++);\n const usage = option.bufferUsage || constants.STATIC_DRAW;\n\n this.options = option;\n // 记录顶点属性,需要与Shader中attribute进行关联\n const buffers: { [key: string]: GPUBufferOptions } = {};\n const attributesName: string[] = [];\n const attributes: { [key: string]: AttributeWithType } = {};\n // key为buffer的名字\n const dirtyFlags: { [key: string]: BufferDirtyFlag } = {};\n const attributesReleasable: { [key: string]: boolean } = {};\n\n forEach(option.attributes, function (attr, name) {\n let data = (attr as AttributeWithData).data;\n const type = attr.type || constants.FLOAT;\n const releasable = (attr as AttributeWithData).releasable;\n\n if (type && !(attr as AttributeWithType).dataSource && !data) {\n data = emptyTypedArrayByGLType(type);\n }\n if (data) {\n // 使用AttributeWithData构造的attribute\n buffers[name] = {\n data, usage, name,\n };\n const gltype = attributeData2GLType(data);\n\n attributes[name] = {\n size: attr.size,\n stride: attr.stride,\n offset: attr.offset,\n type: type || gltype,\n normalize: !!attr.normalize,\n dataSource: (name),\n instanceDivisor:attr.instanceDivisor,\n };\n attributesReleasable[name] = releasable || false;\n dirtyFlags[name] = {\n dirty: true,\n discard: true,\n start: Number.POSITIVE_INFINITY,\n end: 0,\n };\n } else {\n // 使用AttributeWithType构造的attribute\n const datasource = (attr as AttributeWithType).dataSource;\n\n if (datasource) {\n // 属性共享buffer\n attributes[name] = {\n size: attr.size,\n stride: attr.stride,\n offset: attr.offset,\n type: type,\n dataSource: datasource,\n normalize: !!attr.normalize,\n };\n }\n }\n attributesName.push(name);\n });\n\n // 顶点索引\n this._index = option.index?.data;\n if ((this._index as any) instanceof Uint8Array) {\n throw Error('Uint8 Index not support');\n }\n dirtyFlags['index'] = {\n dirty: true,\n discard: true,\n start: Number.POSITIVE_INFINITY,\n end: 0,\n };\n\n this._indexReleasable = option.index?.releasable === true;\n\n this._buffers = buffers;\n this._attributes = attributes;\n this._attributesName = attributesName;\n this._attributesReleasable = attributesReleasable;\n this._dirtyFlags = dirtyFlags;\n }\n\n destroy (): void {\n this.drawStart = 0;\n this.drawCount = NaN;\n // @ts-expect-error destroyed set null\n this._buffers = undefined;\n\n // @ts-expect-error destroyed set null\n this.options = undefined;\n\n this._attributes = {};\n this._attributesName = [];\n\n if (this.internal) {\n this.internal.destroy();\n // @ts-expect-error destroyed set null\n this['internal'] = undefined;\n this.renderer = undefined;\n }\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsGeometry;\n this._isDestroyed = true;\n }\n\n // 出入GPUBuffer对象,\n setAttributeBuffer (name: string, buffer: GPUBuffer): void {\n if (this.internal == undefined) { return; }\n const gpuBuffers = this.internal._buffersMap;\n const gpuBufferName = this._attributes[name].dataSource;\n\n if (gpuBuffers[gpuBufferName]) {\n gpuBuffers[gpuBufferName] = buffer as GLGPUBuffer;\n } else {\n // to do\n }\n }\n\n getAttributeBuffer (name: string): GPUBuffer | undefined {\n if (this.internal == undefined) { return undefined; }\n const gpuBuffers = this.internal._buffersMap;\n const gpuBufferName = this._attributes[name].dataSource;\n\n return gpuBuffers[gpuBufferName];\n }\n\n setAttributeData (name: string, data: TypedArray): void {\n const buffers = this._buffers;\n\n if (buffers == undefined) { return; }\n\n const gpuBufferOption = getAttributeBufferOption(this, name);\n const gpuBufferName = this._attributes[name].dataSource;\n\n if (gpuBufferOption) {\n const option: GPUBufferOptions = {\n data: data,\n usage: gpuBufferOption.usage,\n target: gpuBufferOption.target,\n };\n\n buffers[gpuBufferName] = option;\n this._dirtyFlags[gpuBufferName].discard = true;\n this._dirtyFlags[gpuBufferName].dirty = true;\n }\n }\n\n getAttributeData (name: string): TypedArray | undefined {\n const buffers = this._buffers;\n\n if (buffers == undefined) { return; }\n\n const gpuBufferOption = getAttributeBufferOption(this, name);\n\n if (gpuBufferOption) {\n return gpuBufferOption.data;\n }\n\n return undefined;\n }\n\n setAttributeSubData (name: string, offset: number, data: TypedArray): void {\n const buffers = this._buffers;\n\n if (buffers == undefined) { return; }\n\n const gpuBufferOption = getAttributeBufferOption(this, name);\n\n if (gpuBufferOption) {\n const attribute = gpuBufferOption;\n\n if (attribute.data != undefined) {\n const start = offset;\n const length = offset + data.length;\n\n // this._dirtyFlags[name].discard = false;\n if (attribute.data.length < length) {\n // @ts-expect-error safe to use\n const newData = new data.constructor(length);\n\n newData.set(attribute.data);\n attribute.data = newData;\n this._dirtyFlags[name].discard = true;\n } else if (!this._dirtyFlags[name].discard) {\n const dirtyFlag = this._dirtyFlags[name];\n\n dirtyFlag.start = Math.min(dirtyFlag.start as number, start);\n dirtyFlag.end = Math.max(dirtyFlag.end as number, length - 1);\n }\n (attribute.data as TypedArray).set(data, start);\n this._dirtyFlags[name].dirty = true;\n }\n } else {\n // to do\n }\n }\n\n getIndexData (): Uint16Array | Uint32Array | undefined {\n return this._index;\n }\n\n setIndexData (data: Uint16Array | Uint32Array | undefined): void {\n if (isIndexDataType(data)) {\n this._index = data as any;\n this._dirtyFlags['index'].discard = true;\n this._dirtyFlags['index'].dirty = true;\n }\n }\n\n setIndexSubData (offset: number, data: TypedArray): void {\n if (this._index) {\n // this._dirtyFlags['index'].discard = false;\n const start = offset;\n const length = offset + data.length;\n\n if (this._index.length < length) {\n // @ts-expect-error safe to use\n const newData = new data.constructor(end);\n\n newData.set(this._index);\n this._index = newData;\n this._dirtyFlags['index'].discard = true;\n } else if (!this._dirtyFlags['index'].discard) {\n const dirtyFlag = this._dirtyFlags['index'];\n\n dirtyFlag.start = Math.min(dirtyFlag.start as number, start);\n dirtyFlag.end = Math.max(dirtyFlag.end as number, length - 1);\n }\n this._index?.set(data, start);\n this._dirtyFlags['index'].dirty = true;\n }\n }\n\n getAttributeStride (name: string): number {\n const attr = this._attributes[name];\n\n if (attr.stride) {\n return attr.stride;\n }\n\n return attr.size * BYTES_TYPE_MAP[attr.type];\n }\n\n getAttributeDataLength (name: string): number {\n if (this._buffers) {\n const gpuBufferOption = getAttributeBufferOption(this, name);\n\n if (gpuBufferOption) {\n return gpuBufferOption.data?.length as number;\n }\n }\n\n return 0;\n }\n\n getAttributeNames (): string[] {\n return this._attributesName;\n }\n\n assignRenderer (renderer: MarsRenderer): MarsGeometry {\n if (!this.internal) {\n // 索引缓冲区参数\n let indexBufferOption: GPUBufferOptions | undefined = undefined;\n\n if (this._index) {\n const data = this._index;\n\n indexBufferOption = {\n data: data,\n usage: constants.STATIC_DRAW,\n };\n if (data instanceof Uint16Array) {\n this.indexDataType = constants.UNSIGNED_SHORT;\n } else if (data instanceof Uint32Array) {\n this.indexDataType = constants.UNSIGNED_INT;\n }\n }\n\n // 顶点属性参数\n const options = {\n drawStart: this.drawStart,\n drawCount: this.drawCount,\n // 传给GLGeometry用于绑定顶点属性\n attributes: this._attributes,\n buffers: this._buffers,\n mode: this.mode,\n index: indexBufferOption,\n indexDataType:this.indexDataType,\n name: this.name,\n };\n\n //@ts-expect-error safe to set\n this['internal'] = new GLGeometry(options, renderer.internal);\n this.renderer = renderer;\n this.flush();\n //@ts-expect-error safe to set\n this.options = undefined;\n }\n\n return this;\n }\n\n flush (): boolean {\n const internal = this.internal;\n\n if (internal) {\n const attributes = this._attributes;\n const attributesBuffer = this._buffers;\n const indexBuffer = this._index;\n\n forEach(this._dirtyFlags, function (flag, name) {\n let gpuBuffer;\n let data;\n\n if (name == 'index') {\n gpuBuffer = internal._indexBuffer;\n data = indexBuffer;\n } else {\n const bufferName = attributes[name].dataSource;\n\n gpuBuffer = internal.getGPUBuffer(bufferName) as GLGPUBuffer;\n data = attributesBuffer[bufferName].data;\n }\n\n if ((flag.dirty || flag.discard) && gpuBuffer && data) {\n if (flag.discard) {\n gpuBuffer.bufferData(data);\n } else {\n const offset = (flag.start as number) * data.BYTES_PER_ELEMENT + data.byteOffset;\n const length = (flag.end as number) - (flag.start as number) + 1;\n // @ts-expect-error safe to use\n const subData = new data.constructor(data.buffer, offset, length);\n\n gpuBuffer.bufferSubData(flag.start as number, subData);\n }\n flag.start = Number.POSITIVE_INFINITY;\n flag.end = 0;\n flag.dirty = flag.discard = false;\n }\n });\n\n // 需要释放的attributes数据\n forEach(this._attributesReleasable, function (releasable, name) {\n const bufferName = attributes[name].dataSource;\n\n if (attributesBuffer[bufferName] && releasable) {\n attributesBuffer[bufferName].data = undefined;\n }\n });\n\n // 释放indexbuffer\n if (this._indexReleasable) {\n this._index = undefined;\n }\n }\n\n return false;\n }\n}\n","import type {\n GeometriesMeshOptions, GeometryMeshOptions, InstancedMeshOptions, Mesh, MeshDestroyOptions, MeshOptions,\n} from '../../types/Mesh';\nimport { MarsMaterial } from './MarsMaterial';\nimport { MarsGeometry } from './MarsGeometry';\nimport type { GeometryOptions } from '../../types/Geometry';\nimport type { Material, MaterialDestroyOptions, MaterialOptions } from '../../types/Material';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { DestroyOptions } from '../../types/constants';\nimport { consoleError } from '../common/console';\nimport { throwDestroyedError } from '../common/utils';\nimport type { InstancedMesh } from '../../types/Mesh';\n\nlet seed = 1;\n\nexport class MarsMesh implements Mesh {\n\n readonly material: MarsMaterial;\n\n readonly geometries: MarsGeometry[];\n\n readonly name: string;\n\n public priority: number;\n\n public hide: boolean;\n\n public renderer?: MarsRenderer;\n\n private _isDestroyed = false;\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n get geometry () {\n return this.geometries[0];\n }\n\n constructor (options: MeshOptions, renderer?: MarsRenderer) {\n this.material = options.material instanceof MarsMaterial ? options.material : new MarsMaterial(options.material as MaterialOptions);\n const geo = (options as GeometryMeshOptions).geometry;\n\n if (geo) {\n this.geometries = [geo instanceof MarsGeometry ? geo : new MarsGeometry(geo as GeometryOptions)];\n } else if ((options as GeometriesMeshOptions).geometries) {\n this.geometries = (options as GeometriesMeshOptions).geometries.map(geo => geo instanceof MarsGeometry ? geo : new MarsGeometry(geo as GeometryOptions));\n } else {\n this.geometries = [];\n }\n this.name = options.name || ('MarsMesh_' + seed++);\n this.priority = options.priority || 0;\n this.hide = false;\n if (renderer) {\n this.assignRenderer(renderer);\n }\n }\n\n setMaterial (mtl: Material | MaterialOptions, destroyMtl?: MaterialDestroyOptions | DestroyOptions.keep) {\n if (destroyMtl !== DestroyOptions.keep) {\n this.material.destroy(destroyMtl);\n }\n //@ts-expect-error set from internal safely\n this.material = mtl instanceof MarsMaterial ? mtl : new MarsMaterial(mtl as MaterialOptions);\n if (this.renderer) {\n this.material.assignRenderer(this.renderer);\n }\n }\n\n setGeometries (geos: MarsGeometry[], destroyGeometries?: DestroyOptions) {\n const arr = this.geometries;\n\n if (destroyGeometries !== DestroyOptions.keep) {\n arr.forEach(g => g.destroy());\n }\n arr.length = 0;\n const r = this.renderer;\n\n geos.forEach(g => {\n if (r) {\n g.assignRenderer(r);\n }\n arr.push(g);\n });\n }\n\n destroy (options?: MeshDestroyOptions) {\n if (this._isDestroyed) {\n consoleError('call mesh.destroy multiple times', this);\n }\n if (options?.geometries !== DestroyOptions.keep) {\n this.geometries.forEach(element => {\n element.destroy();\n });\n }\n this.geometries.length = 0;\n const materialDestroyOption = options?.material;\n\n if (materialDestroyOption !== DestroyOptions.keep && this.material) {\n this.material.destroy(materialDestroyOption);\n // @ts-expect-error safe to assign\n this['material'] = undefined;\n }\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsMesh;\n this._isDestroyed = true;\n }\n\n assignRenderer (renderer: MarsRenderer): MarsMesh {\n this.geometries.forEach(element => {\n element.assignRenderer(renderer);\n });\n\n if (!this.material.materialInternal) {\n this.material.assignRenderer(renderer);\n }\n this.renderer = renderer;\n\n return this;\n }\n}\n\nexport class MarsInstancedMesh extends MarsMesh implements InstancedMesh {\n instanceCount: number;\n constructor (options: InstancedMeshOptions, renderer?: MarsRenderer) {\n super(options, renderer);\n this.instanceCount = options.instanceCount;\n }\n}\n","import type {\n RendererExtensions, RenderPass, RenderState, SharedShaderWithSource, Texture,\n} from '../../types';\nimport {\n TextureLoadAction, TextureSourceType,\n} from '../../types';\nimport type { MarsTexture } from './MarsTexture';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { MarsRenderPass } from './MarsRenderPass';\nimport type { GLFrameBuffer } from '../webgl/GLFrameBuffer';\nimport type { GLTexture } from '../webgl/GLTexture';\nimport { RenderFrameInternal } from './RenderFrameInternal';\nimport { constants } from '../webgl/constants';\nimport { MarsMesh } from './MarsMesh';\n\nconst copyShaderId = '$mri-internal-copy';\n\nexport class MarsExtWrap implements RendererExtensions {\n _copyRenderPass?: MarsRenderPass;\n renderer?: MarsRenderer;\n\n constructor (renderer: MarsRenderer) {\n this.renderer = renderer;\n if (renderer?.gpu.level === 1) {\n this._copyRenderPass = this._createCopyRenderPass().assignRenderer(renderer);\n const shader = this._copyRenderPass.meshes[0].material.options.shader;\n\n renderer.shaderLibrary.addShader(shader as SharedShaderWithSource);\n renderer.shaderLibrary.compileShader(copyShaderId);\n }\n }\n\n resetColorAttachments (rp: RenderPass, colorTextures: Texture[]) {\n const r = this.renderer;\n\n if (r) {\n (rp as MarsRenderPass).resetColorAttachments(colorTextures as MarsTexture[]);\n }\n }\n\n copyTexture (source: Texture, tex: Texture): void {\n const renderer = this.renderer;\n\n if (renderer) {\n source.assignRenderer(renderer);\n tex.assignRenderer(renderer);\n tex.updateSource({\n sourceType: TextureSourceType.framebuffer,\n data: {\n width: tex.width || source.width,\n height: tex.height || source.height,\n },\n });\n if (renderer.gpu.level === 2) {\n this.copy2(source as MarsTexture, tex as MarsTexture);\n } else {\n this.copy1(source as MarsTexture, tex as MarsTexture);\n }\n }\n\n }\n\n copy2 (source: MarsTexture, target: MarsTexture) {\n this.renderer?.internal.copy2(source.internal as GLTexture, target.internal as GLTexture);\n }\n\n copy1 (source: MarsTexture, target: MarsTexture) {\n const rp = this._copyRenderPass;\n\n if (rp) {\n const renderer = this.renderer;\n\n if (renderer) {\n const fb = rp.frameBuffer as GLFrameBuffer;\n\n fb.viewport[2] = target.width || source.width;\n fb.viewport[3] = target.height || source.height;\n renderer.internal.resetColorAttachments(fb, [target.internal as GLTexture]);\n const mesh = rp.meshes[0];\n\n mesh.material.defaultDataBlock.setUniformTexture('uTex', source);\n RenderFrameInternal.renderRenderPass(renderer, rp, { currentFrame: {} } as RenderState);\n }\n }\n }\n\n _createCopyRenderPass (): MarsRenderPass {\n const name = 'mri-copy-mesh';\n\n return new MarsRenderPass({\n name: 'mri-copy-rp',\n loadAction: {\n colorAction: TextureLoadAction.whatever,\n },\n attachments: [{ texture: { format: constants.RGBA } }],\n meshes: [new MarsMesh({\n name,\n priority: 0,\n geometry: {\n name,\n mode: constants.TRIANGLE_STRIP,\n attributes: {\n aPos: {\n type: constants.FLOAT,\n size: 2,\n data: new Float32Array([-1, 1, -1, -1, 1, 1, 1, -1]),\n },\n },\n drawCount: 4,\n },\n material: {\n states: {\n depthTest: false,\n cullFaceEnabled: false,\n stencilTest: false,\n },\n name,\n shader: {\n cacheId: copyShaderId,\n name,\n vertex: `precision highp float;\n attribute vec2 aPos;varying vec2 vTex;\n void main(){\n gl_Position = vec4(aPos,0.,1.0);\n vTex = (aPos + vec2(1.))/2.;\n }\n `,\n fragment: ` precision highp float;\n varying vec2 vTex;\n uniform sampler2D uTex;\n void main(){gl_FragColor = texture2D(uTex,vTex);}\n `,\n },\n },\n })],\n });\n }\n\n destroy () {\n if (this.renderer) {\n this._copyRenderPass?.meshes[0].material.defaultDataBlock.setUniformValue('uTex', undefined);\n this._copyRenderPass?.destroy();\n this.renderer = undefined;\n }\n }\n}\n","import type {\n GPUBuffer,\n GPUBufferOptions,\n GPUCapability,\n GPURenderer,\n RendererOptions,\n RenderFrameOptions,\n ShaderLibrary,\n} from '../../types';\nimport { GPUCapabilityEmpty } from '../../types/GPUCapability';\nimport { ShaderLibraryEmpty } from '../../types/ShaderLibrary';\nimport { GLGPURenderer } from '../webgl/GLGPURenderer';\nimport { GLGPUBuffer } from '../webgl/GLGPUBuffer';\nimport { MarsRenderFrame } from './MarsRenderFrame';\nimport { getDefaultGPUCapability } from './MarsGPUCapability';\nimport { GLGPUCapability } from '../webgl/GLGPUCapability';\nimport type { Canvas } from '../../types/Canvas';\nimport { CanvasEmpty } from '../../types/Canvas';\nimport { MarsExtWrap } from './MarsExtWrap';\nimport { consoleError } from '../common/console';\n\nconst ERR_EXP = 'WebGL not available';\n\nexport class MarsRenderer implements GPURenderer {\n readonly gpu: GPUCapability;\n readonly shaderLibrary: ShaderLibrary;\n readonly internal!: GLGPURenderer;\n readonly canvas!: Canvas;\n readonly extension: MarsExtWrap;\n\n get isDestroyed () {\n const internal = this.internal;\n\n return internal ? internal.isDestroyed : true;\n }\n\n get height () {\n return this.internal?.height || 0;\n }\n\n get width () {\n return this.internal?.width || 0;\n }\n\n constructor (options: RendererOptions) {\n let gl: WebGLRenderingContext | WebGL2RenderingContext = options.gl as WebGLRenderingContext | WebGL2RenderingContext;\n\n if (!gl) {\n const webglOptions = {\n preserveDrawingBuffer: options.willCaptureImage,\n alpha: true,\n stencil: true,\n antialias: true,\n depth: true,\n premultipliedAlpha: true,\n };\n const canvas = options.canvas;\n\n if (canvas) {\n const frameworks = options.frameworks || [getDefaultGPUCapability().type as 'webgl'];\n\n for (let i = 0; i < frameworks.length; i++) {\n gl = canvas?.getContext(frameworks[i], webglOptions) as WebGLRenderingContext;\n if (gl) {\n break;\n }\n }\n }\n }\n if (gl) {\n this.gpu = new GLGPUCapability({ gl });\n this.internal = new GLGPURenderer(gl);\n this.shaderLibrary = this.internal.shaderLibrary;\n this.canvas = gl.canvas;\n } else {\n this.gpu = new GPUCapabilityEmpty();\n this.shaderLibrary = new ShaderLibraryEmpty();\n this.canvas = new CanvasEmpty();\n consoleError(ERR_EXP);\n }\n this.extension = new MarsExtWrap(this);\n }\n\n createBuffer (options: GPUBufferOptions): GPUBuffer {\n const internal = this.internal;\n\n if (!internal) {\n throw Error(ERR_EXP);\n }\n\n return new GLGPUBuffer(options, internal);\n }\n\n createRenderFrame (options?: RenderFrameOptions): MarsRenderFrame {\n return new MarsRenderFrame(options || {}, this);\n }\n\n destroy (haltGL?: boolean): void {\n this.extension.destroy();\n this.internal?.destroy(haltGL);\n // @ts-expect-error safe to assign\n this.gpu = new GPUCapabilityEmpty();\n // @ts-expect-error safe to assign\n this.shaderLibrary = new ShaderLibraryEmpty();\n }\n\n resize (width: number, height: number): void {\n const internal = this.internal;\n\n if (internal) {\n if (this.width !== width || this.height !== height) {\n internal.resize(width, height);\n }\n }\n }\n\n cancelAnimationFrame (id: number): void {\n return window.cancelAnimationFrame(id);\n }\n\n getErrors (): string[] {\n const gl = this.internal.gl;\n const err = gl.getError();\n\n if (err) {\n return ['webgl error:' + err];\n }\n\n return [];\n }\n\n requestAnimationFrame (cb: FrameRequestCallback): number {\n return window.requestAnimationFrame(cb);\n }\n}\n","import { MarsGeometry } from './MarsGeometry';\nimport type { GeometryOptions, SharedGeometry, SharedGeometryOptions } from '../../types';\nimport { GLGeometry } from '../webgl/GLGeometry';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { forEach } from '../common/utils';\n\nexport class MarsSharedGeometry extends MarsGeometry implements SharedGeometry {\n private readonly _source: MarsGeometry;\n\n renderer!: MarsRenderer;\n\n constructor (opt: SharedGeometryOptions, renderer?: MarsRenderer) {\n super(Object.assign({ attributes: {} }, opt) as GeometryOptions);\n let indexData = opt.index ? opt.index.data : opt.geometry.getIndexData();\n\n if (indexData) {\n //@ts-expect-error safe to assign\n indexData = new indexData.constructor(indexData) as Uint16Array;\n }\n this._index = indexData;\n this._source = opt.geometry as MarsGeometry;\n this._drawCount = opt.drawCount || 0;\n this._drawStart = opt.drawStart || 0;\n this._mode = opt.mode || 0;\n forEach(this._source._attributes, (attr, name) => {\n this._attributes[name] = Object.assign({}, attr);\n });\n if (renderer) {\n this.assignRenderer(renderer);\n }\n }\n\n assignRenderer (renderer: MarsRenderer): MarsSharedGeometry {\n if (!this.renderer) {\n const geometry = this._source;\n\n geometry.assignRenderer(renderer);\n const internal = geometry.internal;\n const glgeo = new GLGeometry(internal, renderer.internal);\n\n glgeo.drawCount = this.drawCount;\n glgeo.drawStart = this.drawStart;\n glgeo.mode = this.mode;\n if (this._index) {\n const ret = glgeo.createIndexBuffer(this._index, renderer.internal);\n\n glgeo.setIndexBuffer(ret[0], ret[1]);\n }\n //@ts-expect-error safe to assign\n this.internal = glgeo;\n this.renderer = geometry.renderer as MarsRenderer;\n }\n\n return this;\n }\n\n getAttributeNames (): string[] {\n return this._source.getAttributeNames();\n }\n\n getAttributeDataLength (name: string): number {\n if (this._buffers[name]) {\n return super.getAttributeDataLength(name);\n }\n\n return this._source.getAttributeDataLength(name);\n }\n\n flush (): boolean {\n this._source.flush();\n\n return super.flush();\n }\n\n destroy () {\n if (this.internal) {\n //@ts-expect-error safe to assign\n this.internal.vaoMap = {};\n }\n super.destroy();\n }\n\n}\n","import { consoleLog } from './common/console';\n\nexport * from '../types/constants';\nexport * from '../types/RenderPass';\nexport * from '../types/Texture';\nexport * from '../types/GPUBuffer';\nexport { constants } from './webgl/constants';\nexport * from '../types/ShaderLibrary';\nexport { MarsRenderFrame as RenderFrame } from './render/MarsRenderFrame';\nexport { MarsRenderer as Renderer } from './render/MarsRenderer';\nexport { MarsMesh as Mesh, MarsInstancedMesh as InstancedMesh } from './render/MarsMesh';\nexport { MarsGeometry as Geometry } from './render/MarsGeometry';\nexport { MarsRenderPass as RenderPass } from './render/MarsRenderPass';\nexport { MarsTexture as Texture } from './render/MarsTexture';\nexport { MarsMaterial as Material } from './render/MarsMaterial';\nexport { MarsMaterialDataBlock as MaterialDataBlock } from './render/MarsMaterialDataBlock';\nexport { MarsSharedGeometry as SharedGeometry } from './render/MarsSharedGeometry';\nexport { getDefaultGPUCapability } from './render/MarsGPUCapability';\nexport { getDefaultTextureFactory, setDefaultTextureFactory, MarsTextureFactory } from './render/MarsTextureFactory';\n\nconsoleLog('version: ' + __VERSION__);\n"],"names":["DestroyOptions","RenderPassDestroyAttachmentType","TextureLoadAction","TextureStoreAction","RenderPassAttachmentStorageType","RenderPassMeshOrder","TextureSourceType","_a","_b","ShaderCompileResultStatus","imageBitMapAvailable","g","seed"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../src/common/console.ts","../../types/constants.ts","../../types/RenderPass.ts","../../types/Texture.ts","../../types/GPUBuffer.ts","../../src/webgl/constants.ts","../../types/ShaderLibrary.ts","../../src/common/utils.ts","../../src/render/RenderFrameInternal.ts","../../src/render/MarsSemanticMap.ts","../../src/render/MarsRenderFrame.ts","../../types/GPUCapability.ts","../../src/webgl/GLGPUBuffer.ts","../../src/webgl/WebGLState.ts","../../src/common/raf.ts","../../src/webgl/glType.ts","../../src/webgl/GLUniformUtils.ts","../../src/webgl/GLProgram.ts","../../src/webgl/GLShaderLibrary.ts","../../src/common/env.ts","../../src/webgl/GLGPUCapability.ts","../../src/webgl/GLTexture.ts","../../src/webgl/GLGPURenderer.ts","../../src/render/MarsGPUCapability.ts","../../types/Canvas.ts","../../types/native/ResourceInternal.ts","../../src/webgl/GLRenderBuffer.ts","../../src/webgl/GLFrameBuffer.ts","../../src/common/request.ts","../../src/webgl/KhronosTextureContainer.ts","../../src/render/MarsTextureFactory.ts","../../src/render/MarsTexture.ts","../../src/render/MarsRenderPassColorAttachment.ts","../../src/render/MarsRenderPass.ts","../../src/webgl/GLMaterial.ts","../../src/render/MarsMaterialDataBlock.ts","../../src/render/MarsMaterial.ts","../../src/webgl/GLVertexArrayObject.ts","../../src/webgl/GLGeometry.ts","../../src/render/MarsGeometry.ts","../../src/render/MarsMesh.ts","../../src/render/MarsExtWrap.ts","../../src/render/MarsRenderer.ts","../../src/render/MarsSharedGeometry.ts","../../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","const prefix = '[Mars RI]';\n\nexport function consoleLog (msg: string, ...data: any[]) {\n console.info(prefix + msg, ...data);\n}\n\nexport function consoleWarn (msg: string, ...data: any[]) {\n console.warn(prefix + msg, ...data);\n}\nexport function consoleError (msg: string, ...data: any[]) {\n console.error(prefix + msg, ...data);\n}\n","export declare const constants: WebGL2RenderingContext;\n\nexport enum DestroyOptions {\n destroy = 0,\n keep = 1,\n force = destroy,\n}\n","import type {\n Texture, TextureConfigOptions, TextureFormatOptions,\n} from './Texture';\nimport type { Mesh, MeshDestroyOptions } from './Mesh';\nimport type { vec4 } from './type';\nimport type { IGPURenderer, IGPUResource } from './IGPURenderer';\nimport type { GPURenderer } from './Renderer';\nimport type { UniformValue } from './Material';\nimport type { GPUBuffer } from './GPUBuffer';\nimport type { RenderState, SemanticFunc } from './RenderFrame';\nimport type { DestroyOptions } from './constants';\n\nexport enum RenderPassDestroyAttachmentType {\n force = 0,\n keep = 1,\n keepExternal = 2,\n destroy = force\n}\n\nexport const RenderPassPriorityPrepare = 0;\nexport const RenderPassPriorityNormal = 1000;\nexport const RenderPassPriorityPostprocess = 3000;\n\nexport enum TextureLoadAction {\n whatever = 0,\n //preserve previous attachment\n //load = 1,\n //clear attachment\n clear = 2,\n}\n\nexport enum TextureStoreAction {\n store = 1,\n clear = 0\n}\n\nexport enum RenderPassAttachmentStorageType {\n none = 0,\n color = 1,\n //stencil 8 render buffer\n stencil_8_opaque = 2,\n //stencil 16 render buffer\n depth_16_opaque = 3,\n //depth 16 & stencil 8 render buffer\n depth_stencil_opaque = 4,\n //depth 16 texture, need gpu.capability.readableDepthStencilTextures\n depth_16_texture = 5,\n //depth 24 texture, need gpu.capability.readableDepthStencilTextures\n depth_24_stencil_8_texture = 6,\n\n}\n\nexport interface RenderPassStorageObject {\n readonly attachment: GLenum,\n readonly format: GLenum,\n readonly size: [width: number, height: number],\n readonly storageType: RenderPassAttachmentStorageType,\n readonly multiSample: number,\n}\n\nexport interface RenderPassColorAttachmentTextureOptions extends TextureFormatOptions, TextureConfigOptions {\n}\n\nexport interface RenderPassColorAttachmentOptions {\n // color storage must be texture or textureOptions\n texture?: Texture | RenderPassColorAttachmentTextureOptions,\n storage?: RenderPassStorageObject,\n}\n\nexport interface RenderPassColorAttachment {\n readonly storageType: RenderPassAttachmentStorageType.color,\n readonly texture: Texture,\n readonly isDestroyed: boolean,\n}\n\nexport interface RenderPassDepthStencilAttachment {\n readonly storageType: RenderPassAttachmentStorageType,\n readonly texture?: Texture,\n readonly storage: RenderPassStorageObject,\n}\n\nexport interface RenderPassDepthStencilAttachmentOptions {\n storageType: RenderPassAttachmentStorageType,\n storage?: RenderPassStorageObject,\n texture?: Texture,\n}\n\nexport interface RenderPassStoreAction {\n depthAction?: TextureStoreAction,\n stencilAction?: TextureStoreAction,\n colorAction?: TextureStoreAction,\n}\n\nexport interface RenderPassLoadAction {\n clearColor?: vec4,\n colorAction?: TextureLoadAction,\n clearDepth?: number,\n depthAction?: TextureLoadAction,\n clearStencil?: number,\n stencilAction?: TextureLoadAction,\n}\n\nexport interface RenderPassAttachmentOptions {\n attachments?: RenderPassColorAttachmentOptions[],\n depthStencilAttachment?: RenderPassDepthStencilAttachmentOptions,\n //if viewport not set,it will use viewportScale\n viewport?: [x: number, y: number, width: number, height: number],\n //default 1 , when renderer resize, this attachment will be resized to same scale\n //todo 增加测试:\n // 1.viewport 提供时,忽略此参数,renderPass的尺寸由viewport决定,无论renderer是否变化尺寸\n // 2.viewportScale 默认为1,renderPass的尺寸由renderer的尺寸决定,renderer尺寸变化时,renderPass的尺寸也会变化\n // 3.renderPass的color/depth_stencil attachment尺寸由\n viewportScale?: number,\n //in webgl2 use multisample renderbuffer\n //default is 0, means disabled\n //only enabled in webgl2\n multiSample?: number,\n}\n\nexport type SemanticGetter = UniformValue | SemanticFunc | GPUBuffer | Texture | Texture[];\n\nexport interface RenderPassOptions extends RenderPassAttachmentOptions {\n name?: string,\n meshes?: Mesh[],\n priority?: number,\n meshOrder?: RenderPassMeshOrder,\n loadAction?: RenderPassLoadAction,\n storeAction?: RenderPassStoreAction,\n semantics?: { [key: string]: SemanticGetter },\n delegate?: RenderPassDelegate,\n}\n\nexport enum RenderPassMeshOrder {\n none = 1,\n ascending = 2,\n descending = 3\n}\n\nexport type RenderPassDestroyOptions = {\n meshes?: MeshDestroyOptions | DestroyOptions.keep,\n depthStencilAttachment?: RenderPassDestroyAttachmentType,\n colorAttachment?: RenderPassDestroyAttachmentType,\n semantics?: DestroyOptions,\n};\n\nexport declare class SemanticMap {\n\n constructor (options?: { [key: string]: SemanticGetter });\n\n setSemantic (name: string, value: SemanticGetter | undefined): void;\n\n getSemanticValue (name: string, state: RenderState): UniformValue | GPUBuffer | null | undefined;\n\n hasSemanticValue (name: string): boolean;\n\n toObject (): Record<string, SemanticGetter>;\n\n destroy (): void;\n\n}\n\nexport interface RenderPassDelegate {\n willBeginRenderPass?: (renderPass: RenderPass, state: RenderState) => void,\n didEndRenderPass?: (renderPass: RenderPass, state: RenderState) => void,\n willRenderMesh?: (mesh: Mesh, state: RenderState) => void,\n didRenderMesh?: (mesh: Mesh, state: RenderState) => void,\n}\n\nexport declare class RenderPass implements IGPUResource {\n\n readonly isDestroyed: boolean;\n\n readonly name: string;\n\n readonly priority: number;\n\n readonly attachments: RenderPassColorAttachment[];\n\n readonly depthAttachment?: RenderPassDepthStencilAttachment;\n\n readonly stencilAttachment?: RenderPassDepthStencilAttachment;\n\n readonly viewport: [x: number, y: number, width: number, height: number];\n\n readonly meshes: Mesh[];\n\n readonly renderer?: IGPURenderer;\n\n readonly semantics: SemanticMap;\n\n readonly storeAction: RenderPassStoreAction;\n\n readonly loadAction: RenderPassLoadAction;\n\n readonly multisample: number;\n\n delegate: RenderPassDelegate;\n\n meshOrder: RenderPassMeshOrder;\n\n constructor (options: RenderPassOptions, renderer?: IGPURenderer);\n\n /**\n * reset color/depth_stencil attachments,\n * if color/depth_stencil texture is external, this will not destroy textures\n * if color/depth_stencil texture is internal created, this will also delete those textures\n * this method will delete previous fbo if exists\n * returns previous options\n **/\n resetAttachments (options: RenderPassAttachmentOptions): RenderPassAttachmentOptions;\n\n setMeshes (meshes: Mesh[]): Mesh[];\n\n addMesh (mesh: Mesh): void;\n\n removeMesh (mesh: Mesh): void;\n\n destroy (options?: RenderPassDestroyOptions): void;\n\n assignRenderer (renderer: GPURenderer): RenderPass;\n\n}\n","import type { IGPURenderer, IGPUResource } from './IGPURenderer';\nimport type { Immutable, TypedArray } from './type';\nimport type { GPURenderer } from './Renderer';\n\n/**\n * 图片解码的格式,默认为 WebGL2RenderingContext['RGBA8']\n * 如果图片解码格式和texture的不一致,在非Web环境下,会产生报错,无法上传数据\n * 一般情况由系统根据图片文件解析出图片的像素格式\n */\nexport type ImageBitmapPixelFormat = WebGL2RenderingContext['RGBA8'] |\nWebGL2RenderingContext['RGBA16F'] |\nWebGL2RenderingContext['RGBA32F'] ;\n\nexport enum TextureSourceType {\n none,\n data = 1,\n image = 2,\n compressed = 3,\n video = 4,\n canvas = 5,\n framebuffer = 6,\n mipmaps = 7\n}\n\nexport interface TextureFactorySource2DFrom {\n type: TextureSourceType.image | TextureSourceType.video,\n url: string,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n}\n\nexport interface TextureFactorySourceFromCompressed {\n type: TextureSourceType.compressed,\n url: string,\n}\n\nexport type TextureFactorySourceCubeFrom = {\n type: TextureSourceType.image,\n map: TextureCubeSourceURLMap | string[],\n target: WebGLRenderingContext['TEXTURE_CUBE_MAP'],\n};\n\ntype DataRange = [start: number, length: number];\n\nexport type TextureFactorySourceCubeBinaryMipmapsFrom = {\n target: WebGLRenderingContext['TEXTURE_CUBE_MAP'],\n type: TextureSourceType.mipmaps,\n bin: string,\n mipmaps: Array<[\n TEXTURE_CUBE_MAP_POSITIVE_X: DataRange,\n TEXTURE_CUBE_MAP_NEGATIVE_X: DataRange,\n TEXTURE_CUBE_MAP_POSITIVE_Y: DataRange,\n TEXTURE_CUBE_MAP_NEGATIVE_Y: DataRange,\n TEXTURE_CUBE_MAP_POSITIVE_Z: DataRange,\n TEXTURE_CUBE_MAP_NEGATIVE_Z: DataRange\n ]>,\n};\n\nexport type TextureFactorySource2DBinaryMipmapsFrom = {\n target?: WebGLRenderingContext['TEXTURE_2D'],\n type: TextureSourceType.mipmaps,\n bin: string,\n mipmaps: Array<DataRange>,\n};\n\nexport interface TextureFactorySourceCubeMipmapsFrom {\n type: TextureSourceType.mipmaps,\n target: WebGLRenderingContext['TEXTURE_CUBE_MAP'],\n maps: TextureCubeSourceURLMap[] | string[][],\n}\n\nexport interface TextureFactorySource2DMipmapsFrom {\n type: TextureSourceType.mipmaps,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n urls: string[],\n}\n\nexport type TextureFactorySourceFrom =\n TextureFactorySource2DBinaryMipmapsFrom\n | TextureFactorySourceCubeBinaryMipmapsFrom\n | TextureFactorySource2DFrom\n | TextureFactorySourceCubeFrom\n | TextureFactorySourceCubeMipmapsFrom\n | TextureFactorySource2DMipmapsFrom\n | TextureFactorySourceFromCompressed;\n\nexport interface TextureFactory {\n /**\n * 通过TextureConfigOptions可以决定图片解码时使用的格式\n * @param options\n * @param config texture的属性\n */\n loadSourceAsync (options: TextureFactorySourceFrom, config?: TextureConfigOptions): Promise<TextureOptions>,\n\n canOffloadTexture (texture: Texture): boolean,\n\n reloadTextureAsync (texture: Texture): Promise<Texture>,\n\n loadCompressedTextureFromArrayBuffer (arrayBuffer: ArrayBuffer, options?: TextureOptions): TextureOptions,\n}\n\nexport declare class Texture implements IGPUResource {\n readonly width: number;\n readonly height: number;\n readonly id: string;\n readonly options: Immutable<TextureOptions>;\n readonly renderer?: IGPURenderer;\n readonly sourceType: TextureSourceType;\n readonly name: string;\n readonly isDestroyed: boolean;\n\n constructor (options: TextureOptions, renderer?: IGPURenderer);\n\n destroy (): void;\n\n updateSource (options: TextureSourceOptions): void;\n\n uploadCurrentVideoFrame (): boolean;\n\n offloadData (): void;\n\n reloadDataAsync (): Promise<Texture>;\n\n assignRenderer (renderer: GPURenderer): Texture;\n\n}\n\ntype ImageSource = ImageBitmap | HTMLImageElement | HTMLCanvasElement;\n\nexport interface ImageData {\n data: TypedArray,\n width: number,\n height: number,\n}\n\nexport type TextureSourceCubeData = [\n TEXTURE_CUBE_MAP_POSITIVE_X: ImageSource | ImageData,\n TEXTURE_CUBE_MAP_NEGATIVE_X: ImageSource | ImageData,\n TEXTURE_CUBE_MAP_POSITIVE_Y: ImageSource | ImageData,\n TEXTURE_CUBE_MAP_NEGATIVE_Y: ImageSource | ImageData,\n TEXTURE_CUBE_MAP_POSITIVE_Z: ImageSource | ImageData,\n TEXTURE_CUBE_MAP_NEGATIVE_Z: ImageSource | ImageData\n];\n\n// 为减少内存消耗,除了video之外,其余的数据内容会在texture生成后被置为undefined\n// const tex = new Texture({image:myImage},renderer)\n// tex.options.image === undefined\n\nexport type TextureSourceOptions = Texture2DSourceOptions | TextureCubeSourceOptions;\n\nexport interface Texture2DSourceOptionsNone extends TextureOptionsBase {\n sourceType: TextureSourceType.none,\n target?: GLenum,\n}\n\nexport interface Texture2DSourceOptionsImage extends TextureOptionsBase {\n sourceType: TextureSourceType.image,\n image: ImageSource,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n generateMipmap?: boolean,\n}\n\nexport interface Texture2DSourceOptionsFrameBuffer extends TextureOptionsBase {\n sourceType: TextureSourceType.framebuffer,\n data?: { width: number, height: number },\n target?: WebGLRenderingContext['TEXTURE_2D'],\n}\n\nexport interface Texture2DSourceOptionsData extends TextureOptionsBase {\n sourceType: TextureSourceType.data,\n data: { data: TypedArray, width: number, height: number },\n target?: WebGLRenderingContext['TEXTURE_2D'],\n}\n\nexport interface Texture2DSourceOptionsVideo extends TextureOptionsBase {\n sourceType: TextureSourceType.video,\n video: HTMLVideoElement,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n generateMipmap?: boolean,\n}\n\nexport interface Texture2DSourceOptionsImageMipmaps extends TextureOptionsBase {\n sourceType: TextureSourceType.mipmaps,\n mipmaps: Array<ImageSource | { data: TypedArray, width: number, height: number }>,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n}\n\nexport interface Texture2DSourceOptionsCompressed extends TextureOptionsBase {\n sourceType: TextureSourceType.compressed,\n mipmaps: Array<{ data: TypedArray, width: number, height: number }>,\n target?: WebGLRenderingContext['TEXTURE_2D'],\n}\n\nexport interface TextureCubeSourceOptionsImage extends TextureOptionsBase {\n sourceType: TextureSourceType.image | TextureSourceType.data,\n target: WebGLRenderingContext['TEXTURE_CUBE_MAP'],\n cube: TextureSourceCubeData,\n generateMipmap?: boolean,\n}\n\nexport interface TextureCubeSourceOptionsImageMipmaps extends TextureOptionsBase {\n sourceType: TextureSourceType.mipmaps,\n mipmaps: Array<TextureSourceCubeData>,\n target: WebGLRenderingContext['TEXTURE_CUBE_MAP'],\n}\n\nexport type TextureCubeSourceURLMap = [\n TEXTURE_CUBE_MAP_POSITIVE_X: string,\n TEXTURE_CUBE_MAP_NEGATIVE_X: string,\n TEXTURE_CUBE_MAP_POSITIVE_Y: string,\n TEXTURE_CUBE_MAP_NEGATIVE_Y: string,\n TEXTURE_CUBE_MAP_POSITIVE_Z: string,\n TEXTURE_CUBE_MAP_NEGATIVE_Z: string\n];\n\nexport interface TextureConfigOptionsBase {\n name?: string,\n wrapS?: GLenum, // GL_CLAMP_TO_EDGE\n wrapT?: GLenum, // GL_CLAMP_TO_EDGE\n magFilter?: GLenum, // GL_NEAREST\n minFilter?: GLenum, // GL_NEAREST\n anisotropic?: number, //0\n flipY?: boolean,\n premultiplyAlpha?: boolean,\n //when use ImageBitMap, the bitmap content will be closed after sent to GPU\n keepImageSource?: boolean,\n}\n\nexport interface TextureConfigOptions extends TextureConfigOptionsBase {\n sourceFrom?: TextureFactorySourceFrom,\n}\n\nexport interface TextureFormatOptions {\n format?: GLenum, // GL_RGBA\n internalFormat?: GLenum, // GL_RGBA\n type?: GLenum, //GL_UNSIGNED_BYTE\n}\n\nexport interface TextureOptionsBase extends TextureConfigOptions, TextureFormatOptions {\n sourceType: TextureSourceType,\n}\n\nexport type TextureCubeSourceOptions = TextureCubeSourceOptionsImage | TextureCubeSourceOptionsImageMipmaps;\n\nexport type Texture2DSourceOptions =\n Texture2DSourceOptionsImage\n | Texture2DSourceOptionsData\n | Texture2DSourceOptionsVideo\n | Texture2DSourceOptionsImageMipmaps\n | Texture2DSourceOptionsCompressed\n | Texture2DSourceOptionsFrameBuffer;\n\nexport type Texture2DOptions = Texture2DSourceOptions;\n\nexport type TextureCubeOptions = TextureCubeSourceOptions;\n\nexport type TextureOptions = Texture2DOptions | TextureCubeOptions;\n","import type { TypedArray } from './type';\nimport type { IGPUResource, IGPURenderer } from './IGPURenderer';\nimport type { GPURenderer } from './Renderer';\nexport const GPUBufferOptionsMemoryShared = 1 << 1;\nexport type GPUBufferTarget =\n | WebGLRenderingContext['ARRAY_BUFFER']\n | WebGLRenderingContext['ELEMENT_ARRAY_BUFFER']\n | WebGL2RenderingContext['COPY_READ_BUFFER']\n | WebGL2RenderingContext['COPY_WRITE_BUFFER']\n | WebGL2RenderingContext['TRANSFORM_FEEDBACK_BUFFER']\n | WebGL2RenderingContext['UNIFORM_BUFFER']\n | WebGL2RenderingContext['PIXEL_PACK_BUFFER']\n | WebGL2RenderingContext['PIXEL_UNPACK_BUFFER'];\n\nexport interface GPUBufferOptions {\n name?: string,\n /**\n * 数据长度,如果提供了data,忽略此参数\n */\n byteLength?: number,\n\n data?: TypedArray,\n\n /**\n * GL需要设置,Vulkan和Metal此属性忽略\n */\n target?: GPUBufferTarget,\n\n /**\n * GL需要设置,Vulkan和Metal此属性忽略\n */\n usage?: WebGLRenderingContext['STATIC_DRAW'] | WebGLRenderingContext['DYNAMIC_DRAW'],\n}\n\n/**\n * GPU的Buffer对象,通过JS ArrayBuffer,可以向其中写入数据\n * JS调用写入数据后,会立即执行GPU写入的操作,此类型不会保存JS的ArrayBuffer对象\n *\n */\nexport declare class GPUBuffer implements IGPUResource {\n readonly renderer?: IGPURenderer;\n\n readonly isDestroyed: boolean;\n\n readonly level: number;\n\n readonly byteLength: number;\n\n readonly target: GPUBufferTarget;\n\n readonly usage?: WebGLRenderingContext['STATIC_DRAW'] | WebGLRenderingContext['DYNAMIC_DRAW'];\n\n constructor (options: GPUBufferOptions, renderer?: IGPURenderer);\n\n getElementCount (bytePerElement: number): number;\n /**\n * 根据TypedArray容量,重新分配Buffer内存\n * @param typedArray\n */\n bufferData (typedArray: TypedArray): void;\n\n /**\n * 更新buffer数据,立即写入GPU中\n * @param elementOffset 从buffer的第几个元素开始\n * @param typedArray 要写入的数据\n */\n\n bufferSubData (elementOffset: number, typedArray: TypedArray): void;\n\n /**\n * 将数据从GPU中读出,写入到传入的typedArray中,只有当level为2时才能成功,webgl下此函数永远不会成功\n * @param elementOffset 从第几个元素开始拷贝,默认为 0\n * @param typedArray 要写入的typedArray\n * @param elementCount 要写入多少个元素,如果不传入,则为typedArray元素长度\n */\n readSubData (elementOffset: number, typedArray: TypedArray, elementCount?: number): boolean;\n\n assignRenderer (renderer: GPURenderer): GPUBuffer;\n\n destroy (): void;\n}\n\n","import type { TypedArray } from '../../types/type';\nimport { consoleError } from '../common/console';\nimport type { vec2 } from '@predy-js/specification';\n// @ts-expect-error safe to assign\nexport let constants: WebGL2RenderingContext = {};\n\nif (IS_NODE) {\n constants = require('./gl-constants.json');\n} else {\n if (typeof WebGL2RenderingContext === 'function') {\n copy(WebGL2RenderingContext);\n } else if (typeof WebGLRenderingContext !== 'undefined') {\n copy(WebGLRenderingContext);\n copy(WebGLRenderingContext.prototype);\n } else {\n //ios 16 lockdown mode\n consoleError('WebGL not in global');\n }\n}\n// @ts-expect-error set default value\nconstants['HALF_FLOAT'] = 5131;\n\nfunction copy (target: any) {\n for (const name in target) {\n if (/^[A-Z_]/.test(name)) {\n // @ts-expect-error safe to assign\n constants[name] = target[name];\n }\n }\n}\n\nconst map: { [p: number]: Int32ArrayConstructor | Float32ArrayConstructor | Int16ArrayConstructor | Int8ArrayConstructor | Uint8ArrayConstructor | Uint32ArrayConstructor | Uint16ArrayConstructor } = {\n [constants.INT]: Int32Array,\n [constants.FLOAT]: Float32Array,\n [constants.SHORT]: Int16Array,\n [constants.BYTE]: Int8Array,\n [constants.UNSIGNED_BYTE]: Uint8Array,\n [constants.UNSIGNED_INT]: Uint32Array,\n [constants.UNSIGNED_SHORT]: Uint16Array,\n};\n\nexport function createTypedArrayByGLType (type: number, elementCount: number | ArrayBuffer): TypedArray {\n return new (map[type] || Float32Array)(elementCount as number);\n}\n\nexport function getBytesPerElementByGLType (type: number): number {\n return map[type]?.BYTES_PER_ELEMENT || 0;\n}\nconst MatAttrLocPairMap: Record<number, vec2> = {\n [constants.FLOAT_MAT2]:[2, 2],\n [constants.FLOAT_MAT3]:[3, 3],\n [constants.FLOAT_MAT4]:[4, 4],\n};\n\nexport function getMatAttrLocPair (type: number): vec2 {\n return MatAttrLocPairMap[type] || [1, 1];\n}\n","export type Shader = ShaderWithSource | ShaderUseCacheId;\nexport type ShaderWithSource = InstancedShaderWithSource | SharedShaderWithSource;\n\nexport interface MetaShaderSpec {\n mtlBinary?: ArrayBuffer | string,\n mtlSource?: string,\n\n mtlVertex?: string,\n mtlFragment?: string,\n}\n\nexport interface ShaderSourceBase extends MetaShaderSpec {\n fragment: string,\n vertex: string,\n name?: string,\n //将es300的shader in/out关键字替换为attribute/varying\n downgrade?: boolean,\n marcos?: ShaderMarcos,\n}\n\nexport interface InstancedShaderWithSource extends ShaderSourceBase {\n shared?: false,\n}\n\nexport interface SharedShaderWithSource extends ShaderSourceBase {\n //相同cacheId的shader会使用同一个GLProgram\n //提供了cacheId就会认为是shared Shader\n cacheId?: string,\n //shared为true时,\n //如果没有提供cacheId,会根据字符串hash计算出 cacheId,\n //字符串相同的shader将会使用同一个GLProgram\n //如果提供了cacheId,cacheId相同的,都会使用同一个GLProgram\n shared: true,\n}\n\nexport interface ShaderUseCacheId {\n cacheId: string,\n}\n\nexport type ShaderMarcos = [key: string, value: string | number | boolean][];\n\nexport enum ShaderCompileResultStatus {\n noShader = 0,\n success = 1,\n fail = 2,\n compiling = 3\n}\n\nexport interface ShaderCompileResult {\n status: ShaderCompileResultStatus,\n cacheId?: string,\n error?: string | null,\n compileTime?: number,\n // deprecated\n shared?: boolean,\n}\n\n/**\n * @example\n * const lib:ShaderLibrary = ...;\n * const shaderCacheId = lib.addShader({fragment:'...',vertex:'...'});\n * lib.compileShader(shaderCacheId);\n * //pre-compiled program\n * const mtl = new Material({\n * shader:{ shaderCacheId }\n * })\n */\nexport interface ShaderLibrary {\n\n readonly cacheIds: string[],\n\n getShaderResult(cacheId: string): ShaderCompileResult | undefined,\n\n /**\n * 添加shader\n * @param shader\n */\n addShader(shader: Shader): string,\n\n /**\n * @param cacheId\n */\n deleteShader(cacheId: string): void,\n\n /**\n * 编译shader\n * @param shaderCacheId\n * @param asyncCallback 如果传入,则会启用异步编译,当所有编译完成后被回调\n */\n compileShader(shaderCacheId: string, asyncCallback?: (result: ShaderCompileResult) => void): ShaderCompileResult,\n\n /***\n * 编译现有的所有shader\n * @param asyncCallback 如果传入,则会启用异步编译,当所有编译完成后被回调\n */\n compileAllShaders(asyncCallback?: (results: ShaderCompileResult[]) => void): void,\n\n destroy(): void,\n}\n\nexport class ShaderLibraryEmpty implements ShaderLibrary {\n\n get cacheIds () {\n return [];\n }\n\n getShaderResult (cacheId: string): ShaderCompileResult | undefined {\n return undefined;\n }\n\n addShader (shader: Shader, marcos?: ShaderMarcos) {\n return '';\n }\n\n compileAllShaders (asyncCallback?: (results: ShaderCompileResult[]) => void) {\n return [];\n }\n\n deleteShader (cacheId: string) {\n }\n\n compileShader (shaderCacheId: string): ShaderCompileResult {\n return { status: ShaderCompileResultStatus.fail };\n }\n\n destroy () {\n }\n}\n","import { RenderPassMeshOrder } from '../../types/RenderPass';\n\nexport function isFunc (val: any): boolean {\n return typeof val === 'function';\n}\n\nexport function isObj (a: any): boolean {\n return (typeof a === 'object') && a;\n}\n\nexport function isStr (a: any, withLength?: boolean) {\n const str = typeof a === 'string';\n\n if (withLength) {\n return str && a.length > 0;\n }\n\n return str;\n}\n\nexport function arrRemove (arr: Array<any>, ele: any): boolean {\n const idx = arr.indexOf(ele);\n\n if (idx > -1) {\n arr.splice(idx, 1);\n\n return true;\n }\n\n return false;\n}\n\nexport function arrAdd<T> (arr: Array<T>, item: T): boolean {\n if (!arr.includes(item)) {\n arr.push(item);\n\n return true;\n }\n\n return false;\n}\n\nexport function strHashCode (...strings: string[]): number {\n let h = 0;\n\n for (let j = 0; j < arguments.length; j++) {\n const s = strings[j];\n\n for (let i = 0; i < s.length; i++) { h = Math.imul(31, h) + s.charCodeAt(i) | 0; }\n }\n\n return h;\n}\n\nexport function arrAddByOrder (arr: Array<any>, item: any, order?: number): boolean {\n const itemOrder = order || RenderPassMeshOrder.ascending;\n\n if (arr.includes(item)) { return true; }\n arr.push(item);\n if (arr.length === 1) { return true; }\n if (itemOrder !== RenderPassMeshOrder.none) {\n //单次插入排序\n let index = arr.length - 1;\n\n if (index) {\n const currentItem = arr[index];\n\n if (itemOrder !== RenderPassMeshOrder.ascending) {\n while (arr[index - 1].priority < currentItem.priority) {\n arr[index] = arr[index - 1];\n index--;\n if (index === 0) {\n break;\n }\n }\n } else {\n while (arr[index - 1].priority > currentItem.priority) {\n arr[index] = arr[index - 1];\n index--;\n if (index === 0) {\n break;\n }\n }\n }\n arr[index] = currentItem;\n }\n }\n\n return false;\n}\n\nfunction fastSort (arr: Array<any>, order: number, start = 0, end = arr.length - 1): Array<any> {\n // 终止条件\n if (start >= end) { return arr; }\n let left = start, right = end;\n const base = arr[start];\n\n while (left < right) {\n if (order === RenderPassMeshOrder.ascending) {\n // 从右向左,寻找第一个小于base的值\n while (arr[right].priority > base.priority && right >= left) { right--; }\n // 从左向右,寻找第一个大于base的值\n while (arr[left].priority <= base.priority && left < right) { left++; }\n } else {\n // 从右向左,寻找第一个大于base的值\n while (arr[right].priority < base.priority && right >= left) { right--; }\n // 从左向右,寻找第一个小于base的值\n while (arr[left].priority >= base.priority && left < right) { left++; }\n }\n // 将两个值交换位置\n [arr[left], arr[right]] = [arr[right], arr[left]];\n }\n // 将最后两个游标相遇的位置的值与base值交换\n [arr[start], arr[left]] = [arr[left], arr[start]];\n fastSort(arr, order, start, left - 1);\n fastSort(arr, order, right + 1, end);\n\n return arr;\n}\n\nexport function sortByOrder (arr: Array<any>, order?: number): Array<any> {\n const itemOrder = order || RenderPassMeshOrder.ascending;\n\n if (arr.length === 0 || arr.length === 1) { return arr; }\n if (itemOrder === RenderPassMeshOrder.none) {\n return arr;\n } else {\n //30个以下的数据用插入排序\n if (arr.length <= 30) {\n const length = arr.length;\n\n for (let i = 1; i < length; i++) {\n const currentItem = arr[i];\n let index = i;\n\n if (itemOrder !== RenderPassMeshOrder.ascending) {\n while (index >= 1 && arr[index - 1].priority < currentItem.priority) {\n arr[index] = arr[index - 1];\n index--;\n if (index === 0) {\n break;\n }\n }\n } else {\n while (index >= 1 && arr[index - 1].priority > currentItem.priority) {\n arr[index] = arr[index - 1];\n index--;\n if (index === 0) {\n break;\n }\n }\n }\n arr[index] = currentItem;\n }\n\n return arr;\n } else {\n return fastSort(arr, itemOrder);\n }\n }\n\n}\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function forEach<T> (object: null | undefined | { [key: string]: T }, callback: (val: T, key: string) => void, thisObj?: any) {\n if (isObj(object)) {\n if (thisObj === undefined) {\n thisObj = object;\n }\n for (const name in object) {\n if (hasOwnProperty.call(object, name)) {\n callback.call(thisObj, object[name], name);\n }\n }\n }\n\n return object;\n}\n\nexport function throwDestroyedError () {\n throw Error('destroyed item cannot be used again');\n}\n","import type { MarsRenderFrame } from './MarsRenderFrame';\nimport type { RenderState } from '../../types/RenderFrame';\nimport type {\n RenderPassLoadAction,\n RenderPassStoreAction,\n} from '../../types/RenderPass';\nimport {\n TextureLoadAction,\n} from '../../types/RenderPass';\nimport { constants } from '../webgl/constants';\nimport type { GLGPURenderer } from '../webgl/GLGPURenderer';\nimport type { MarsMesh } from './MarsMesh';\nimport type { MarsGeometry } from './MarsGeometry';\nimport type { MarsRenderPass } from './MarsRenderPass';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { consoleError } from '../common/console';\n\nexport class RenderFrameInternal {\n\n static render (frame: MarsRenderFrame) {\n const passes = frame._renderPasses;\n const renderer = frame.renderer;\n\n if (renderer.isDestroyed) {\n return consoleError('renderer is destroyed', renderer);\n }\n frame.renderer.shaderLibrary.compileAllShaders();\n clear(renderer.internal, frame.loadAction);\n //@ts-expect-error safe to assign\n const renderState: RenderState = {\n currentFrame: frame,\n };\n\n for (let i = 0; i < passes.length; i++) {\n const pass = passes[i];\n const delegate = pass.delegate;\n\n if (pass.isDestroyed) {\n consoleError(`render pass ${pass.name} destroyed`, pass);\n } else {\n delegate.willBeginRenderPass && delegate?.willBeginRenderPass(pass, renderState);\n this.renderRenderPass(renderer, pass as MarsRenderPass, renderState);\n delegate.didEndRenderPass && delegate?.didEndRenderPass(pass, renderState);\n }\n }\n }\n\n static renderRenderPass (renderer: MarsRenderer, pass: MarsRenderPass, renderState: RenderState): void {\n renderState.currentPass = pass;\n setupRenderPass(renderer, pass);\n\n renderMeshes(renderer, renderState);\n endRenderPass(renderer, pass);\n }\n}\n\nfunction endRenderPass (renderer: MarsRenderer, renderPass: MarsRenderPass) {\n if (renderPass.storeAction) {\n clear(renderer.internal, renderPass.storeAction);\n }\n renderPass.unbind();\n}\n\nfunction renderMeshes (renderer: MarsRenderer, state: RenderState) {\n //assume meshes has been sorted\n const sortedMeshes = state.currentPass.meshes;\n const delegate = state.currentPass.delegate;\n\n for (let i = 0; i < sortedMeshes.length; i++) {\n const mesh = sortedMeshes[i];\n\n if (mesh.isDestroyed) {\n consoleError(`mesh ${mesh.name} destroyed`, mesh);\n } else if (!mesh.hide) {\n delegate.willRenderMesh && delegate.willRenderMesh(mesh, state);\n renderMesh(renderer, mesh as MarsMesh, state);\n delegate.didRenderMesh && delegate.didRenderMesh(mesh, state);\n }\n }\n for (let i = 0; i < sortedMeshes.length; i++) {\n const mtl = (sortedMeshes[i] as MarsMesh).material;\n\n if (mtl) {\n mtl.dataBlocks.forEach(d => d.clearFlags());\n }\n }\n}\n\nfunction setupRenderPass (renderer: MarsRenderer, renderPass: MarsRenderPass) {\n renderPass.assignRenderer(renderer);\n loadRenderPassAttachments(renderer.internal, renderPass);\n}\n\nfunction renderMesh (renderer: MarsRenderer, mesh: MarsMesh, state: RenderState) {\n state.currentMesh = mesh;\n mesh.material.assignRenderer(renderer);\n const material = (mesh.material).materialInternal;\n\n if (material) {\n const program = material.getProgram();\n\n if (program) {\n material.setupStates();\n program.setupUniforms(state);\n mesh.geometries.forEach((geometry: MarsGeometry) => {\n geometry.assignRenderer(renderer);\n geometry.flush();\n const vao = program.setupAttributes(geometry.internal);\n\n geometry.internal.draw(state);\n if (vao) {\n vao.unbind();\n }\n });\n }\n }\n}\n\nfunction loadRenderPassAttachments (renderer: GLGPURenderer, renderPass: MarsRenderPass) {\n renderPass.bind();\n if (renderPass.loadAction) {\n clear(renderer, renderPass.loadAction);\n }\n}\n\nfunction clear (renderer: GLGPURenderer, action: RenderPassLoadAction | RenderPassStoreAction) {\n const state = renderer.state;\n let bit = 0;\n\n if (action.colorAction === TextureLoadAction.clear) {\n const clearColor = action.clearColor;\n\n if (clearColor) {\n state.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);\n }\n state.colorMask(true, true, true, true);\n bit = constants.COLOR_BUFFER_BIT;\n }\n if (action.stencilAction === TextureLoadAction.clear) {\n state.stencilMask(0xff);\n state.clearStencil(action.clearStencil || 0);\n bit = bit | constants.STENCIL_BUFFER_BIT;\n }\n if (action.depthAction === TextureLoadAction.clear) {\n const depth = action.clearDepth as number;\n\n state.depthMask(true);\n state.clearDepth(Number.isFinite(depth) ? depth : 1);\n bit = bit | constants.DEPTH_BUFFER_BIT;\n }\n if (bit) {\n state.clear(bit);\n }\n}\n","import type {\n GPUBuffer, RenderState, SemanticFunc, UniformValue, SemanticMap, SemanticGetter,\n} from '../../types';\nimport { forEach, isFunc } from '../common/utils';\n\nexport class MarsSemanticMap implements SemanticMap {\n public readonly semantics: Record<string, SemanticGetter>;\n\n constructor (semantics?: Record<string, SemanticGetter>) {\n this.semantics = Object.assign({}, semantics || {});\n }\n\n toObject (): Record<string, SemanticGetter> {\n return Object.assign({}, this.semantics);\n }\n\n setSemantic (name: string, value: SemanticGetter | undefined) {\n if (value === undefined) {\n delete this.semantics[name];\n } else {\n this.semantics[name] = value;\n }\n }\n\n getSemanticValue (name: string, state: RenderState): UniformValue | GPUBuffer | null | undefined {\n const ret = this.semantics[name];\n\n if (isFunc(ret)) {\n return (ret as SemanticFunc)(state);\n }\n\n return ret as UniformValue;\n }\n\n hasSemanticValue (name: string): boolean {\n return name in this.semantics;\n }\n\n destroy () {\n const c = this.semantics;\n\n forEach(c, function (va, name) {\n if (va && isFunc((va as GPUBuffer).destroy)) {\n (va as GPUBuffer).destroy();\n }\n delete c[name];\n });\n }\n}\n","import type {\n RenderFrame,\n RenderFrameDestroyOptions,\n RenderFrameOptions,\n RenderPass,\n RenderPassLoadAction,\n} from '../../types';\nimport {\n arrAddByOrder, arrRemove, sortByOrder, throwDestroyedError,\n} from '../common/utils';\nimport { RenderFrameInternal } from './RenderFrameInternal';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { MarsSemanticMap } from './MarsSemanticMap';\nimport { DestroyOptions } from '../../types/constants';\n\nlet renderFrameSeed = 1;\n\nexport class MarsRenderFrame implements RenderFrame {\n loadAction: RenderPassLoadAction;\n readonly name: string;\n readonly semantics: MarsSemanticMap;\n _renderPasses!: RenderPass[];\n private _renderer!: MarsRenderer;\n private _isDestroyed = false;\n\n get renderPasses () {\n return this._renderPasses.slice();\n }\n\n get isDestroyed () {\n return this._isDestroyed;\n }\n\n get renderer (): MarsRenderer {\n return this._renderer;\n }\n\n constructor (options: RenderFrameOptions, renderer?: MarsRenderer) {\n this.setRenderPasses(options.renderPasses as RenderPass[] || []);\n this.semantics = new MarsSemanticMap(options.semantics);\n this.loadAction = options.loadAction || {};\n this.name = options.name || ('RenderFrame' + renderFrameSeed++);\n if (renderer) {\n this.assignRenderer(renderer);\n }\n }\n\n assignRenderer (renderer: MarsRenderer): MarsRenderFrame {\n if (!this._renderer) {\n this._renderer = renderer;\n }\n\n return this;\n }\n\n destroy (options?: RenderFrameDestroyOptions) {\n if (options?.semantics !== DestroyOptions.keep) {\n this.semantics.destroy();\n }\n const pass = options?.passes ? options.passes : undefined;\n\n if (pass !== DestroyOptions.keep) {\n this._renderPasses.forEach(renderPass => {\n renderPass.destroy(pass);\n });\n }\n this._renderPasses.length = 0;\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsRenderFrame;\n this._isDestroyed = true;\n }\n\n render (): void {\n RenderFrameInternal.render(this);\n }\n\n setRenderPasses (passes: RenderPass[]) {\n this._renderPasses = sortByOrder(passes.slice());\n }\n\n addRenderPass (pass: RenderPass): void {\n arrAddByOrder(this._renderPasses, pass);\n }\n\n removeRenderPass (pass: RenderPass): void {\n arrRemove(this._renderPasses, pass);\n }\n\n forEachRenderPass (callback: (renderPass: RenderPass, index: number, pipeline: MarsRenderFrame) => void) {\n const passes = this._renderPasses;\n\n for (let i = 0; i < passes.length; i++) {\n callback.call(passes, passes[i], i, this);\n }\n }\n}\n","import type { Immutable } from './type';\n\nexport const COMPRESSED_TEXTURE_NONE = 0;\nexport const COMPRESSED_TEXTURE_PVRTC = 1;\nexport const COMPRESSED_TEXTURE_ASTC = 2;\n\nexport interface GPUCapabilityDetail {\n maxSample: number,\n floatTexture: number,\n halfFloatTexture: number,\n //set currentPass color attachment type FLOAT\n floatColorAttachment?: boolean,\n //set currentPass color attachment type HALF_FLOAT\n halfFloatColorAttachment?: boolean,\n maxVertexUniforms: number,\n maxVertexTextures: number,\n maxFragmentUniforms: number,\n maxFragmentTextures: number,\n maxShaderTexCount: number,\n maxTextureSize: number,\n maxTextureAnisotropy: number,\n compressedTexture: number,\n shaderTextureLod: boolean,\n instanceDraw?: boolean,\n drawBuffers?: boolean,\n asyncShaderCompile?: boolean,\n //draw elements use uint32 Array\n intIndexElementBuffer?: boolean,\n //render pass depth and stencil texture readable\n //in webgl, if not readable,use RenderBuffer which cannot readable\n readableDepthStencilTextures?: boolean,\n writableFragDepth?: boolean,\n}\n\nexport interface GPUCapability {\n type: 'webgl' | 'webgl2' | 'native-gl' | 'node-gl' | 'metal' | 'none',\n level: number,\n capability: Immutable<GPUCapabilityDetail>,\n\n setup (gl: WebGLRenderingContext): void,\n}\n\nexport class GPUCapabilityEmpty implements GPUCapability {\n type: 'webgl' | 'webgl2' | 'native-gl' | 'node-gl' | 'metal' | 'none';\n level = 0;\n capability = {\n maxSample: 0,\n floatTexture: 0,\n halfFloatTexture: 0,\n maxVertexUniforms: 0,\n maxVertexTextures: 0,\n maxFragmentUniforms: 0,\n maxFragmentTextures: 0,\n maxTextureSize: 0,\n maxShaderTexCount:0,\n maxTextureAnisotropy: 0,\n compressedTexture: 0,\n shaderTextureLod: false,\n };\n\n constructor () {\n this.type = 'none';\n }\n\n setup (gl: WebGLRenderingContext) {\n }\n}\n","import type { GPUBuffer, GPUBufferOptions, GPUBufferTarget } from '../../types/GPUBuffer';\nimport { constants } from './constants';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport type { TypedArray } from '../../types/type';\nimport type { MarsRenderer } from '../render/MarsRenderer';\nimport { isObj } from '../common/utils';\n\nexport class GLGPUBuffer implements GPUBuffer {\n\n readonly usage: WebGLRenderingContext['STATIC_DRAW'] | WebGLRenderingContext['DYNAMIC_DRAW'] | WebGLRenderingContext['STREAM_DRAW'];\n\n readonly renderer?: GLGPURenderer;\n\n readonly glBuffer: WebGLBuffer | null;\n\n readonly target: GPUBufferTarget;\n\n private _byteLength: number;\n\n private _isDestroyed = false;\n\n readonly name: string;\n\n get byteLength (): number {\n return this._byteLength;\n }\n\n get isBuffer () {\n return true;\n }\n\n get level () {\n return this.renderer?.level || 1;\n }\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n constructor (options: GPUBufferOptions, renderer: GLGPURenderer) {\n this.renderer = renderer;\n this.glBuffer = renderer.createGLBuffer(this, options.name) as WebGLBuffer;\n this.usage = options.usage || constants.STATIC_DRAW;\n this._byteLength = 0;\n this.name = options.name || '';\n this.target = options.target || constants.ARRAY_BUFFER;\n if (options.data) {\n this.bufferData(options.data);\n } else if (options.byteLength) {\n this.bufferData(options.byteLength);\n }\n }\n\n bind () {\n const gl = this.renderer?.gl as WebGLRenderingContext;\n\n gl.bindBuffer(this.target, this.glBuffer);\n }\n\n bufferData (typedArray: TypedArray | number): void {\n const byteLength = Number.isInteger(typedArray) ? typedArray as number : (typedArray as TypedArray).byteLength;\n\n if (this.renderer) {\n this._byteLength = byteLength;\n const gl = this.renderer.gl;\n const target = this.target;\n\n gl.bindBuffer(target, this.glBuffer);\n if (byteLength === 0) {\n // ios 12 13 cause error when byteLength == 0\n gl.bufferData(target, 1, this.usage);\n } else {\n gl.bufferData(target, byteLength, this.usage);\n if (isObj(typedArray)) {\n gl.bufferSubData(target, 0, typedArray as TypedArray);\n }\n }\n gl.bindBuffer(target, null);\n } else {\n this._byteLength = 0;\n }\n }\n\n bufferSubData (elementOffset: number, typedArray: TypedArray): void {\n if (this.renderer) {\n const gl = this.renderer.gl;\n const target = this.target;\n const byteOffset = elementOffset * typedArray.BYTES_PER_ELEMENT;\n\n gl.bindBuffer(target, this.glBuffer);\n const byteLength = byteOffset + typedArray.byteLength;\n\n if (byteLength > this._byteLength) {\n this._byteLength = byteLength;\n gl.bufferData(target, byteLength, this.usage);\n }\n gl.bufferSubData(target, byteOffset, typedArray);\n gl.bindBuffer(target, null);\n } else {\n this._byteLength = 0;\n }\n }\n\n destroy (): void {\n this.renderer?.deleteGPUBuffer(this);\n // @ts-expect-error safe to assign\n this.glBuffer = this.renderer = null;\n this._isDestroyed = true;\n }\n\n readSubData (elementOffset: number, typedArray: TypedArray): boolean {\n if (this.level === 2) {\n const gl = this.renderer?.gl as WebGL2RenderingContext;\n const target = this.target;\n\n if (gl) {\n gl.bindBuffer(target, this.glBuffer);\n gl.getBufferSubData(target, elementOffset * typedArray.BYTES_PER_ELEMENT, typedArray);\n gl.bindBuffer(target, null);\n\n return true;\n }\n }\n\n return false;\n }\n\n getElementCount (bytePerElement: number) {\n return this._byteLength / bytePerElement;\n }\n\n assignRenderer (renderer: MarsRenderer): GLGPUBuffer {\n if (!this.renderer) {\n // @ts-expect-error safe to assign\n this.renderer = renderer.internal;\n }\n\n return this;\n }\n\n}\n","/**\n * webgl的状态切换\n */\nimport { constants } from './constants';\n\nexport class WebGLState {\n\n public noCache = false;\n readonly _gl: WebGLRenderingContext | WebGL2RenderingContext;\n\n private _dict: any;\n\n private _currentFramebuffer!: Record<number, WebGLFramebuffer | null>;\n\n private _currentTextureBinding!: WebGLTexture | null;\n\n private _currentRenderBuffer!: Record<number, WebGLRenderbuffer | null>;\n\n private _activeTextureIndex!: number;\n\n private readonly _maxTextureCount: number;\n\n private _pixelStorei!: { [key: string]: GLenum };\n\n _textureUnitDict!: { [key: string]: WebGLTexture | null };\n\n bindingVAO?: WebGLVertexArrayObject;\n\n constructor (gl: WebGLRenderingContext | WebGL2RenderingContext) {\n this._gl = gl;\n this._maxTextureCount = gl.TEXTURE0 + gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS) - 1;\n this._reset();\n }\n\n destroy () {\n //@ts-expect-error save to assign\n this.gl = null;\n }\n\n private _reset () {\n this._dict = {};\n this._activeTextureIndex = constants.TEXTURE0;\n this._textureUnitDict = {};\n this._currentFramebuffer = {};\n this._pixelStorei = {};\n this._currentRenderBuffer = {};\n }\n\n toggle (capability: GLenum, enable?: boolean) {\n if (enable) {\n this.enable(capability);\n } else {\n this.disable(capability);\n }\n }\n\n /**\n * 对于该上下文开启某种特性\n * @param capability\n * example:\n * gl.enable(gl.DITHER);\n */\n enable (capability: GLenum) {\n const value = this._dict[capability];\n\n if (value !== true) {\n this._dict[capability] = true;\n this._gl.enable(capability);\n }\n }\n\n /**\n * 基于某种上下文关闭特性\n * @param capability\n * example:\n * gl.disable(gl.DITHER);\n */\n disable (capability: GLenum) {\n const value = this._dict[capability];\n\n if (value !== false) {\n this._dict[capability] = false;\n this._gl.disable(capability);\n }\n }\n\n /**\n * 绑定framebuffer webgl2新增: gl.DRAW_FRAMEBUFFER 和 gl.READ_FRAMEBUFFER\n * @param target\n * @param framebuffer\n * example:\n * const framebuffer = gl.createFramebuffer();\n * gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n */\n bindFramebuffer (target: GLenum, framebuffer: WebGLFramebuffer | null) {\n if (this._currentFramebuffer[target] !== framebuffer) {\n this._currentFramebuffer[target] = framebuffer;\n this._gl.bindFramebuffer(target, framebuffer);\n }\n }\n\n bindRenderBuffer (target: GLenum, renderBuffer: WebGLRenderbuffer | null) {\n if (this._currentRenderBuffer[target] !== renderBuffer) {\n this._currentRenderBuffer[target] = renderBuffer;\n this._gl.bindRenderbuffer(target, renderBuffer);\n }\n }\n\n /**\n * 绑定系统framebuffer\n */\n bindSystemFramebuffer () {\n this.bindFramebuffer(this._gl.FRAMEBUFFER, null);\n }\n\n /**\n * 将定义好的WebGLProgram 对象添加到当前的渲染状态中。\n * @param program\n * example:\n * gl.useProgram(program);\n * gl.useProgram(null);\n */\n useProgram (program: WebGLProgram | null) {\n this._set1('useProgram', program);\n }\n\n /**\n * 使用预设值来清空缓冲\n * @param mask\n * example:\n * gl.clear(gl.DEPTH_BUFFER_BIT);\n * gl.clear(gl.DEPTH_BUFFER_BIT | gl.COLOR_BUFFER_BIT);\n */\n clear (mask: number) {\n this._gl.clear(mask);\n }\n\n //depth start\n\n /**\n * 设置深度缓冲区的深度清除值\n * @param depth\n * example:\n * gl.clearDepth(0.5);\n */\n clearDepth (depth: GLclampf) {\n this._set1('clearDepth', depth);\n }\n\n /**\n * 指定将输入像素深度与当前深度缓冲区值进行比较的函数。\n * @param func\n * example:\n * gl.enable(gl.DEPTH_TEST);\n * gl.depthFunc(gl.NEVER);\n */\n public depthFunc (func: GLenum) {\n this._set1('depthFunc', func);\n }\n\n /**\n * 设置是否启用写入深度缓冲。\n * @param flag\n * example:\n * gl.depthMask(false);\n */\n depthMask (flag: boolean) {\n this._set1('depthMask', flag);\n }\n\n polygonOffset (factor: number, unit: number) {\n this._set2('polygonOffset', factor, unit);\n }\n\n /**\n * 将 z 值从规范化设备坐标映射到窗口坐标\n * @param zNear\n * @param zFar\n * example:\n * gl.depthRange(0.2, 0.6);\n */\n depthRange (zNear: number, zFar: number) {\n this._set2('depthRange', zNear, zFar);\n }\n\n //depth end\n\n //stencil start\n /**\n * 模版测试设置函数和引用值。\n * @param func\n * @param ref\n * @param mask\n * example:\n * gl.enable(gl.STENCIL_TEST);\n * gl.stencilFunc(gl.LESS, 0, 0b1110011);\n */\n clearStencil (s: GLint) {\n this._set1('clearStencil', s);\n }\n\n /**\n * 控制启用和禁用模板平面中单个位的正面和背面写入\n * @param mask\n * example:\n * gl.stencilMask(0xff);\n */\n stencilMask (mask: number) {\n this.stencilMaskSeparate(this._gl.FRONT, mask);\n this.stencilMaskSeparate(this._gl.BACK, mask);\n }\n\n /**\n * 模版测试设置函数和引用值。\n * @param func\n * @param ref\n * @param mask\n * example:\n * gl.enable(gl.STENCIL_TEST);\n * gl.stencilFunc(gl.LESS, 0, 0b1110011);\n */\n stencilFunc (func: GLenum, ref: GLint, mask: GLuint) {\n this.stencilFuncSeparate(this._gl.FRONT, func, ref, mask);\n this.stencilFuncSeparate(this._gl.BACK, func, ref, mask);\n }\n\n /**\n * 单面模版测试\n * @param face\n * @param func\n * @param ref\n * @param mask\n * example:\n * gl.enable(gl.STENCIL_TEST);\n * gl.stencilFuncSeparate(gl.FRONT, gl.LESS, 0.2, 1110011);\n */\n stencilFuncSeparate (face: GLenum, func: GLenum, ref: GLint, mask: GLuint) {\n this._set4('stencilFuncSeparate', face, func, ref, mask);\n }\n\n /**\n * 单面的mask写入\n * @param face\n * @param mask\n * example:\n * gl.stencilMaskSeparate(gl.FRONT, 110101);\n */\n stencilMaskSeparate (face: GLenum, mask: GLuint) {\n this._set2('stencilMaskSeparate', face, mask);\n }\n\n /**\n * 设置正面和背面模板测试操作\n * @param fail\n * @param zfail\n * @param zpass\n * example:\n * gl.enable(gl.STENCIL_TEST);\n * gl.stencilOp(gl.INCR, gl.DECR, gl.INVERT);\n */\n stencilOp (fail: GLenum, zfail: GLenum, zpass: GLenum) {\n this.stencilOpSeparate(this._gl.FRONT, fail, zfail, zpass);\n this.stencilOpSeparate(this._gl.BACK, fail, zfail, zpass);\n }\n\n /**\n * 设置正面和/或背面模板测试操作\n * @param face\n * @param fail\n * @param zfail\n * @param zpass\n * example:\n * gl.enable(gl.STENCIL_TEST);\n * gl.stencilOpSeparate(gl.FRONT, gl.INCR, gl.DECR, gl.INVERT);\n */\n stencilOpSeparate (face: GLenum, fail: GLenum, zfail: GLenum, zpass: GLenum) {\n this._set4('stencilOpSeparate', face, fail, zfail, zpass);\n }\n\n //stencil end\n\n //face start\n /**\n * 剔除方式\n * @param mode\n * example:\n * gl.enable(gl.CULL_FACE);\n * gl.cullFace(gl.FRONT_AND_BACK);\n */\n cullFace (mode: GLenum) {\n this._set1('cullFace', mode);\n }\n\n /**\n * 设置卷绕方向\n * @param mode\n * example:\n * gl.frontFace(gl.CW);\n */\n frontFace (mode: GLenum) {\n this._set1('frontFace', mode);\n }\n\n //face end\n\n //color start\n /**\n * 设置颜色写入\n * @param red\n * @param green\n * @param blue\n * @param alpha\n * example:\n * gl.colorMask(true, true, true, false);\n */\n clearColor (red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf) {\n this._set4('clearColor', red, green, blue, alpha);\n }\n\n /**\n * 设置颜色写入\n * @param red\n * @param green\n * @param blue\n * @param alpha\n * example:\n * gl.colorMask(true, true, true, false);\n */\n colorMask (red: boolean, green: boolean, blue: boolean, alpha: boolean) {\n this._set4('colorMask', red, green, blue, alpha);\n }\n\n /**\n * 设置源和目标混合因子\n * @param red\n * @param green\n * @param blue\n * @param alpha\n * example:\n * gl.blendColor(0, 0.5, 1, 1);\n */\n blendColor (red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf) {\n this._set4('blendColor', red, green, blue, alpha);\n }\n\n /**\n * 用于混合像素算法\n * @param sfactor\n * @param dfactor\n * example:\n * gl.enable(gl.BLEND);\n * gl.blendFunc(gl.SRC_COLOR, gl.DST_COLOR);\n */\n blendFunc (sfactor: GLenum, dfactor: GLenum) {\n this.blendFuncSeparate(sfactor, dfactor, sfactor, dfactor);\n }\n\n /**\n * 分别设置应用在 RGB 和 Alpha 上的 factor\n * @param srcRGB\n * @param dstRGB\n * @param srcAlpha\n * @param dstAlpha\n * example:\n * gl.enable(gl.BLEND);\n * gl.blendFuncSeparate(gl.SRC_COLOR, gl.DST_COLOR, gl.ONE, gl.ZERO);\n */\n blendFuncSeparate (srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum) {\n this._set4('blendFuncSeparate', srcRGB, dstRGB, srcAlpha, dstAlpha);\n }\n\n /**\n * 设置混合模式\n * @param mode\n * example:\n * gl.blendEquation(gl.FUNC_ADD);\n * gl.blendEquation(gl.FUNC_SUBTRACT);\n * gl.blendEquation(gl.FUNC_REVERSE_SUBTRACT);\n */\n public blendEquation (mode: GLenum) {\n this._set1('blendEquation', mode);\n }\n\n /**\n * 可以分别对 RGB 和 Alpha 做不同的操作处理\n * @param modeRGB\n * @param modeAlpha\n * example:\n * gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_SUBTRACT);\n */\n blendEquationSeparate (modeRGB: GLenum, modeAlpha: GLenum) {\n this._set2('blendEquationSeparate', modeRGB, modeAlpha);\n }\n\n //color end\n /**\n * 图像预处理\n * @param pname\n * @param param\n * example:\n * var tex = gl.createTexture();\n * gl.bindTexture(gl.TEXTURE_2D, tex);\n * gl.pixelStorei(gl.PACK_ALIGNMENT, 4);\n */\n pixelStorei (pname: GLenum, param: GLenum) {\n const currentParam = this._pixelStorei[pname];\n\n if (currentParam !== param) {\n this._pixelStorei[pname] = param;\n this._gl.pixelStorei(pname, param);\n }\n }\n\n /**\n * 用来设置视口,即指定从标准设备到窗口坐标的x、y仿射变换。\n * @param x\n * @param y\n * @param width\n * @param height\n * example:\n * gl.viewport(0, 0, width, height);\n */\n viewport (x: number, y: number, width: number, height: number) {\n this._set4('viewport', x, y, width, height);\n }\n\n /**\n * 激活指定的纹理单元\n * @param texture\n * example:\n * gl.activeTexture(gl.TEXTURE1);\n */\n activeTexture (texture: GLenum) {\n texture = Math.min(texture, this._maxTextureCount);\n if (this._activeTextureIndex !== texture || this.noCache) {\n this._activeTextureIndex = texture;\n this._gl.activeTexture(texture);\n }\n }\n\n /**\n * 绑定WebGLTexture\n * @param target\n * @param texture\n * @param force\n * example:\n * var texture = gl.createTexture();\n * gl.bindTexture(gl.TEXTURE_2D, texture)\n */\n bindTexture (target: GLenum, texture: WebGLTexture | null, force?: boolean) {\n if (this._currentTextureBinding !== texture || force || this.noCache) {\n this._gl.bindTexture(target, texture);\n this._currentTextureBinding = texture;\n }\n this._textureUnitDict[this._activeTextureIndex] = texture;\n }\n\n private _set1 (name: string, param: any) {\n const value = this._dict[name];\n\n if (value !== param) {\n this._dict[name] = param;\n //@ts-expect-error save to assign\n this._gl[name](param);\n }\n }\n\n private _set2 (name: string, param0: number, param1: number) {\n let value = this._dict[name];\n\n if (!value) {\n value = this._dict[name] = { x: NaN, y: NaN };\n }\n\n if (value.x !== param0 || value.y !== param1) {\n //@ts-expect-error save to assign\n this._gl[name](value.x = param0, value.y = param1);\n }\n }\n\n private _set3 (name: string, param0: any, param1: any, param2: any) {\n let value = this._dict[name];\n\n if (!value) {\n value = this._dict[name] = { x: NaN, y: NaN, z: NaN };\n }\n\n if (value.x !== param0 || value.y !== param1 || value.z !== param2) {\n //@ts-expect-error safe to assign\n this._gl[name](value.x = param0, value.y = param1, value.z = param2);\n }\n }\n\n private _set4 (name: string, param0: any, param1: any, param2: any, param3: any) {\n let value = this._dict[name];\n\n if (!value) {\n value = this._dict[name] = {\n x: NaN, y: NaN, z: NaN, w: NaN,\n };\n }\n\n if (value.x !== param0 || value.y !== param1 || value.z !== param2 || value.w !== param3) {\n //@ts-expect-error safe to assign\n this._gl[name](value.x = param0, value.y = param1, value.z = param2, value.w = param3);\n }\n }\n\n get (name: string): any {\n return this._dict[name];\n }\n}\n\n","export function requestAnimationFrame (cb: (n: number) => void) {\n return window.requestAnimationFrame(cb);\n}\n\nexport function cancelAnimationFrame (handle: number) {\n return window.cancelIdleCallback(handle);\n}\n","import { constants } from './constants';\nimport type { MarsTexture } from '../render/MarsTexture';\nimport type { ProgramUniformInfo } from './GLProgram';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport { consoleError, consoleWarn } from '../common/console';\n\nexport const DATA_DICT: {\n [k: string | number]: {\n name: number,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: any, renderer: GLGPURenderer) => void,\n },\n} = {\n [constants.FLOAT]: {\n name: constants.FLOAT,\n uniform (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) {\n if (value.length != undefined) {\n gl.uniform1fv(info.loc, value);\n } else {\n gl.uniform1f(info.loc, (value as any));\n }\n },\n },\n [constants.FLOAT_VEC2]: {\n name: constants.FLOAT_VEC2,\n uniform (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) {\n gl.uniform2fv(info.loc, value);\n },\n },\n [constants.FLOAT_VEC3]: {\n name: constants.FLOAT_VEC3,\n uniform (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) {\n gl.uniform3fv(info.loc, value);\n },\n },\n [constants.FLOAT_VEC4]: {\n name: constants.FLOAT_VEC4,\n uniform (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) {\n gl.uniform4fv(info.loc, value);\n },\n },\n [constants.FLOAT_MAT2]: {\n name: constants.FLOAT_MAT2,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix2fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT2x3]: {\n name: constants.FLOAT_MAT2x3,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix2x3fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT2x4]: {\n name: constants.FLOAT_MAT2x4,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix2x3fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT3]: {\n name: constants.FLOAT_MAT3,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix3fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT3x2]: {\n name: constants.FLOAT_MAT3x2,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix3x2fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT3x4]: {\n name: constants.FLOAT_MAT3x4,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix3x4fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT4]: {\n name: constants.FLOAT_MAT4,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix4fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT4x3]: {\n name: constants.FLOAT_MAT4x3,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix4x3fv(info.loc, false, value);\n },\n },\n [constants.FLOAT_MAT4x2]: {\n name: constants.FLOAT_MAT4x2,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Float32List) => {\n gl.uniformMatrix4x2fv(info.loc, false, value);\n },\n },\n [constants.INT]: {\n name: constants.INT,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n if (value.length != undefined) {\n gl.uniform1iv(info.loc, value);\n } else {\n gl.uniform1i(info.loc, (value as any));\n }\n },\n },\n [constants.INT_VEC2]: {\n name: constants.INT_VEC2,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform2iv(info.loc, value);\n },\n },\n [constants.INT_VEC3]: {\n name: constants.INT_VEC3,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform3iv(info.loc, value);\n },\n },\n [constants.INT_VEC4]: {\n name: constants.INT_VEC4,\n uniform: (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform4iv(info.loc, value);\n },\n },\n [constants.UNSIGNED_INT]: {\n name: constants.UNSIGNED_INT,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Uint32Array | ArrayLike<number>) => {\n gl.uniform1uiv(info.loc, value);\n },\n },\n [constants.UNSIGNED_INT_VEC2]: {\n name: constants.UNSIGNED_INT_VEC2,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Uint32Array | ArrayLike<number>) => {\n gl.uniform2uiv(info.loc, value);\n },\n },\n [constants.UNSIGNED_INT_VEC3]: {\n name: constants.UNSIGNED_INT_VEC3,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Uint32Array | ArrayLike<number>) => {\n gl.uniform3uiv(info.loc, value);\n },\n },\n [constants.UNSIGNED_INT_VEC4]: {\n name: constants.UNSIGNED_INT_VEC4,\n uniform: (gl: WebGL2RenderingContext, info: ProgramUniformInfo, value: Uint32Array | ArrayLike<number>) => {\n gl.uniform4uiv(info.loc, value);\n },\n },\n [constants.BOOL]: {\n name: constants.BOOL,\n uniform: (gl: WebGLRenderingContext | WebGL2RenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n if (value.length != undefined) {\n gl.uniform1iv(info.loc, value);\n } else {\n gl.uniform1f(info.loc, (value as any));\n }\n },\n },\n [constants.BOOL_VEC2]: {\n name: constants.BOOL_VEC2,\n uniform: (gl: WebGLRenderingContext | WebGL2RenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform2iv(info.loc, value);\n },\n },\n [constants.BOOL_VEC4]: {\n name: constants.BOOL_VEC4,\n uniform: (gl: WebGLRenderingContext | WebGL2RenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform4iv(info.loc, value);\n },\n },\n [constants.BOOL_VEC3]: {\n name: constants.BOOL_VEC3,\n uniform: (gl: WebGLRenderingContext | WebGL2RenderingContext, info: ProgramUniformInfo, value: Int32List) => {\n gl.uniform3iv(info.loc, value);\n },\n },\n [constants.SAMPLER_2D]: {\n name: constants.SAMPLER_2D,\n uniform: assignTexUniform,\n },\n [constants.SAMPLER_CUBE]: {\n name: constants.SAMPLER_CUBE,\n uniform: assignTexUniform,\n },\n};\n\nfunction assignTexUniform (gl: WebGL2RenderingContext | WebGLRenderingContext, info: ProgramUniformInfo, value: MarsTexture | MarsTexture[], renderer: GLGPURenderer) {\n if (value) {\n if (info.size > 1) {\n if (Array.isArray(value)) {\n value.forEach(function (tex, index) {\n assignTextureLoc(gl, info, tex, renderer, index);\n });\n } else {\n consoleError(`${info.name}[${info.size}] expect texture arrays`);\n }\n } else {\n assignTextureLoc(gl, info, value as MarsTexture, renderer, 0);\n }\n }\n}\n\nfunction assignTextureLoc (gl: WebGLRenderingContext | WebGL2RenderingContext, info: ProgramUniformInfo, value: MarsTexture, renderer: GLGPURenderer, index: number) {\n if (value) {\n if (value.isDestroyed) {\n return consoleError(`texture ${value.name} destroyed `, value);\n }\n renderer.state.activeTexture(gl.TEXTURE0 + info.textureIndex + index);\n const glTex = value.internal;\n\n if (glTex) {\n renderer.state.bindTexture(glTex.target, glTex.glHandle as WebGLTexture, true);\n } else {\n consoleWarn('texture not assigned to gl');\n }\n }\n}\n","import { constants } from './constants';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport type { TypedArray, UniformValue, vec2 } from '../../types';\nimport { GLGPUBuffer } from './GLGPUBuffer';\nimport { forEach, strHashCode } from '../common/utils';\n\ntype TypedArrayCtrl =\n Float32ArrayConstructor\n | Int8ArrayConstructor\n | Int32ArrayConstructor\n | Int16ArrayConstructor\n | Uint32ArrayConstructor\n | Uint16ArrayConstructor\n | Uint8ArrayConstructor;\n\nexport interface UniformBlockSpec {\n index: number,\n usedByVertexShader: boolean,\n usedByFragmentShader: boolean,\n size: number,\n uniformIndices: number[],\n used: boolean,\n name: string,\n uniforms: Record<string, BlockUniformInfo>,\n id: string,\n}\n\ntype BlockUniformInfo = [\n type: number,\n offset: number,\n size: number,\n blockIndex: number,\n arrayStride: number,\n maxStride: number,\n rowMajor: number,\n index: number,\n byteLength: number,\n];\n\nconst BlockUniformInfoOffset = 1;\nconst BlockUniformInfoByteLength = 8;\nconst BlockUniformInfoType = 0;\nconst BlockUniformInfoArrayStride = 4;\nconst BlockUniformInfoArraySize = 2;\nconst BlockUniformInfoRowStride = 5;\n\nfunction getUboHash (spec: UniformBlockSpec) {\n const ret = Object.keys(spec.uniforms).map(name => name + '[' + spec.uniforms[name].join(':') + ']').join('+');\n\n return strHashCode(spec.name + '+', spec.size + '+', spec.uniformIndices.length + '+', ret);\n}\n\nexport function createUniformBlockSpecsFromProgram (gl: WebGL2RenderingContext, program: WebGLProgram, blockUniformNames: string[]): UniformBlockSpec[] {\n const blockSpecs: UniformBlockSpec[] = [];\n const numUniformBlocks = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n\n for (let ii = 0; ii < numUniformBlocks; ++ii) {\n const name = gl.getActiveUniformBlockName(program, ii) as string;\n const blockSpec: UniformBlockSpec = {\n index: gl.getUniformBlockIndex(program, name),\n usedByVertexShader: gl.getActiveUniformBlockParameter(program, ii, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n usedByFragmentShader: gl.getActiveUniformBlockParameter(program, ii, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n size: gl.getActiveUniformBlockParameter(program, ii, gl.UNIFORM_BLOCK_DATA_SIZE),\n uniformIndices: gl.getActiveUniformBlockParameter(program, ii, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),\n used: false,\n uniforms: {},\n name: name,\n id: '',\n };\n\n blockSpec.used = blockSpec.usedByVertexShader || blockSpec.usedByFragmentShader;\n blockSpecs[ii] = blockSpec;\n const indices = blockSpec.uniformIndices;\n const uniformNames: string[] = [];\n\n for (let i = 0; i < indices.length; i++) {\n const name = gl.getActiveUniform(program, indices[i])!.name.replace('[0]', '');\n\n blockSpec.uniforms[name] = [0, 0, 0, 0, 0, 0, 0, i, 0];\n uniformNames[i] = name;\n blockUniformNames.push(name);\n }\n [gl.UNIFORM_TYPE, gl.UNIFORM_OFFSET, gl.UNIFORM_SIZE, gl.UNIFORM_BLOCK_INDEX, gl.UNIFORM_ARRAY_STRIDE, gl.UNIFORM_MATRIX_STRIDE, gl.UNIFORM_IS_ROW_MAJOR].forEach(function (param, pi) {\n gl.getActiveUniforms(program, indices, param).forEach(function (value: number, idx: number) {\n const name = uniformNames[idx];\n\n blockSpec.uniforms[name][pi] = +value;\n });\n });\n for (let i = 0; i < uniformNames.length; i++) {\n const uniform = blockSpec.uniforms[uniformNames[i]];\n const nextUniform = blockSpec.uniforms[uniformNames[i + 1]];\n const size = nextUniform ? nextUniform[1] : blockSpec.size;\n\n uniform[8] = size - uniform[1];\n }\n blockSpec.id = getUboHash(blockSpec) + '';\n }\n\n return blockSpecs;\n}\n\nfunction numberSetter (type: TypedArrayCtrl) {\n return function (value: number | number[], info: BlockUniformInfo, name: string, range: vec2): UBODirtyFlag {\n const flag: UBODirtyFlag = {\n start: info[BlockUniformInfoOffset],\n dirty: true,\n };\n const arrSize = info[BlockUniformInfoArraySize];\n\n if (arrSize > 1) {\n const values = value as number[];\n\n if (values.length) {\n const eleCount = range[1] || values.length;\n const vecLen = info[BlockUniformInfoArrayStride] / type.BYTES_PER_ELEMENT;\n const buffer = flag.buffer = new type(eleCount * vecLen);\n const start = range[0] || 0;\n\n for (let i = 0; i < eleCount; i++) {\n buffer[i * vecLen] = values[i + start];\n }\n flag.start += start * vecLen;\n }\n } else {\n flag.buffer = new type([value] as number[]);\n }\n\n return flag;\n };\n}\n\nconst arrSetter = (type: TypedArrayCtrl) => function setArray (value: number[], info: BlockUniformInfo, name: string, range: vec2): UBODirtyFlag {\n const blockByteLen = info[BlockUniformInfoByteLength];\n const arrSize = info[BlockUniformInfoArraySize];\n const rowStride = info[BlockUniformInfoRowStride];\n const entryStride = arrSize === 1 ? blockByteLen : info[BlockUniformInfoArrayStride];\n const entryRowCount = rowStride ? entryStride / rowStride : 1;\n const rowNumPadding = entryStride / type.BYTES_PER_ELEMENT / entryRowCount;\n const maxRowCount = blockByteLen / type.BYTES_PER_ELEMENT / rowNumPadding;\n //set array\n const numPerEntry = ItemPerValueMap[info[BlockUniformInfoType]];\n const numPerRow = numPerEntry / entryRowCount;\n const valueStartIndex = (range[0] || 0) * numPerEntry;\n const totalRow = range[1] ? entryRowCount * range[1] : maxRowCount;\n const buffer = new type(rowNumPadding * totalRow);\n const flag: UBODirtyFlag = {\n start: info[BlockUniformInfoOffset] + entryStride * (range[0] || 0),\n dirty: true,\n buffer,\n };\n\n for (let i = 0, bufferTarget = 0, sourceIndex = valueStartIndex; i < totalRow; i++) {\n for (let j = 0; j < numPerRow; j++) {\n buffer[bufferTarget + j] = value[sourceIndex + j];\n }\n bufferTarget += rowNumPadding;\n sourceIndex += numPerRow;\n }\n\n return flag;\n};\n\nconst setFloat32Array = arrSetter(Float32Array);\nconst setInt32Array = arrSetter(Int32Array);\nconst setUInt8Array = arrSetter(Uint8Array);\n\nconst MemorySetter: Record<string, (value: any, info: BlockUniformInfo, name: string, range: vec2) => UBODirtyFlag> = {\n [constants.FLOAT]: numberSetter(Float32Array),\n [constants.INT]: numberSetter(Int32Array),\n [constants.UNSIGNED_INT]: numberSetter(Uint32Array),\n [constants.SHORT]: numberSetter(Int16Array),\n [constants.BOOL]: numberSetter(Uint8Array),\n [constants.UNSIGNED_SHORT]: numberSetter(Uint16Array),\n [constants.FLOAT_VEC2]: setFloat32Array,\n [constants.FLOAT_VEC3]: setFloat32Array,\n [constants.FLOAT_VEC4]: setFloat32Array,\n [constants.FLOAT_MAT2]: setFloat32Array,\n [constants.FLOAT_MAT3]: setFloat32Array,\n [constants.FLOAT_MAT4]: setFloat32Array,\n [constants.FLOAT_MAT2x3]: setFloat32Array,\n [constants.FLOAT_MAT2x4]: setFloat32Array,\n [constants.FLOAT_MAT4x3]: setFloat32Array,\n [constants.FLOAT_MAT4x2]: setFloat32Array,\n [constants.FLOAT_MAT3x4]: setFloat32Array,\n [constants.FLOAT_MAT3x2]: setFloat32Array,\n [constants.INT_VEC2]: setInt32Array,\n [constants.INT_VEC3]: setInt32Array,\n [constants.INT_VEC4]: setInt32Array,\n [constants.UNSIGNED_INT_VEC2]: setInt32Array,\n [constants.UNSIGNED_INT_VEC3]: setInt32Array,\n [constants.UNSIGNED_INT_VEC4]: setInt32Array,\n [constants.BOOL_VEC2]: setUInt8Array,\n [constants.BOOL_VEC3]: setUInt8Array,\n [constants.BOOL_VEC4]: setUInt8Array,\n};\n\nconst ItemPerValueMap: Record<number, number> = {\n [constants.FLOAT]: 1,\n [constants.INT]: 1,\n [constants.UNSIGNED_INT]: 1,\n [constants.SHORT]: 1,\n [constants.BOOL]: 1,\n [constants.UNSIGNED_SHORT]: 1,\n [constants.FLOAT_VEC2]: 2,\n [constants.FLOAT_VEC3]: 3,\n [constants.FLOAT_VEC4]: 4,\n [constants.FLOAT_MAT2]: 4,\n [constants.FLOAT_MAT3]: 9,\n [constants.FLOAT_MAT4]: 16,\n [constants.FLOAT_MAT2x3]: 6,\n [constants.FLOAT_MAT2x4]: 8,\n [constants.FLOAT_MAT4x3]: 12,\n [constants.FLOAT_MAT4x2]: 8,\n [constants.FLOAT_MAT3x4]: 12,\n [constants.FLOAT_MAT3x2]: 6,\n [constants.INT_VEC2]: 2,\n [constants.INT_VEC3]: 3,\n [constants.INT_VEC4]: 4,\n [constants.UNSIGNED_INT_VEC2]: 2,\n [constants.UNSIGNED_INT_VEC3]: 3,\n [constants.UNSIGNED_INT_VEC4]: 4,\n [constants.BOOL_VEC2]: 2,\n [constants.BOOL_VEC3]: 3,\n [constants.BOOL_VEC4]: 4,\n};\n\nconst fullRange = [0, 0];\n\ninterface UBODirtyFlag {\n start: number,\n dirty: boolean,\n buffer?: TypedArray,\n}\n\nexport class UniformBlockBuffer {\n buffer?: GLGPUBuffer;\n info: UniformBlockSpec;\n dirtyFlags: Record<string, UBODirtyFlag>;\n keepData: boolean;//for debug use\n\n constructor (renderer: GLGPURenderer, info: UniformBlockSpec) {\n this.buffer = new GLGPUBuffer({\n target: constants.UNIFORM_BUFFER,\n name: info.name,\n byteLength: info.size,\n }, renderer);\n this.dirtyFlags = {};\n this.info = info;\n }\n\n setValues (uniformValues: Record<string, UniformValue>, dirtyFlags: Record<string, boolean>, uniformValueOffsets: Record<string, vec2>) {\n forEach(uniformValues, (value, name) => {\n const uniformInfo: BlockUniformInfo = this.info.uniforms[name];\n\n if (uniformInfo && dirtyFlags[name]) {\n const range = uniformValueOffsets[name] || fullRange;\n const setter = MemorySetter[uniformInfo[BlockUniformInfoType]]!;\n\n this.dirtyFlags[name] = setter(value, uniformInfo, name, range);\n }\n });\n\n }\n\n bind (gl: WebGL2RenderingContext, program: WebGLProgram, bufferBindIndex: number) {\n const buffer = this.buffer;\n\n if (buffer) {\n buffer.bind();\n forEach(this.dirtyFlags, (flag, name) => {\n if (flag.dirty) {\n buffer.bufferSubData(flag.start, new Uint8Array(flag.buffer!.buffer));\n if (!this.keepData) {\n delete flag.buffer;\n }\n flag.dirty = false;\n }\n });\n gl.uniformBlockBinding(program, bufferBindIndex, bufferBindIndex);\n gl.bindBufferRange(gl.UNIFORM_BUFFER, bufferBindIndex, buffer.glBuffer, 0, this.info.size);\n }\n\n }\n\n destroy () {\n if (this.buffer) {\n this.buffer.destroy();\n this.buffer = undefined;\n }\n }\n}\n\n","import type { GLGPURenderer } from './GLGPURenderer';\nimport { arrAdd, forEach } from '../common/utils';\nimport type { GLGeometry } from './GLGeometry';\nimport type { RenderState } from '../../types/RenderFrame';\nimport { DATA_DICT } from './glType';\nimport { consoleError, consoleWarn } from '../common/console';\nimport type { MarsMaterial } from '../render/MarsMaterial';\nimport type { GLVertexArrayObject } from './GLVertexArrayObject';\nimport type { UniformBlockSpec } from './GLUniformUtils';\nimport { createUniformBlockSpecsFromProgram } from './GLUniformUtils';\nimport type { MarsMaterialDataBlock } from '../render/MarsMaterialDataBlock';\nimport { getBytesPerElementByGLType, getMatAttrLocPair } from './constants';\nimport type { UniformValue } from '../../types';\n\nexport interface ProgramAttributeInfo {\n readonly name: string,\n readonly size: number,\n readonly type: number,\n readonly loc: number,\n}\n\nexport interface ProgramUniformInfo {\n readonly loc: WebGLUniformLocation,\n readonly subInfos: ProgramUniformInfo[],\n readonly name: string,\n readonly size: number,\n readonly type: number,\n readonly textureIndex: number,\n readonly isTexture: boolean,\n}\n\nconst temArr: Set<MarsMaterialDataBlock> = new Set<MarsMaterialDataBlock>();\n\nexport class GLProgram {\n readonly glHandle: WebGLProgram;\n readonly renderer: GLGPURenderer;\n readonly shared: boolean;\n readonly id: string;\n readonly _vaos: GLVertexArrayObject[];\n readonly uniformBlockMap: Record<string, UniformBlockSpec>;\n attrInfoMap!: { [key: string]: ProgramAttributeInfo };\n uniformInfoMap!: { [key: string]: ProgramUniformInfo };\n private _uniformBlocks!: UniformBlockSpec[];\n\n constructor (renderer: GLGPURenderer, program: WebGLProgram, shared: boolean, id: string) {\n this.glHandle = program;\n this.renderer = renderer;\n this.shared = shared;\n this.uniformBlockMap = {};\n this.id = id;\n this.init(renderer, program);\n this._vaos = [];\n }\n\n init (renderer: GLGPURenderer, program: WebGLProgram) {\n const gl = renderer.gl;\n\n renderer.state.useProgram(program);\n let num = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n const attrMap: { [key: string]: ProgramAttributeInfo } = {};\n\n for (let i = 0; i < num; i++) {\n const { name, type, size } = gl.getActiveAttrib(program, i) as WebGLActiveInfo;\n const loc = gl.getAttribLocation(program, name);\n\n attrMap[name] = {\n type, name, size, loc,\n };\n }\n\n this.attrInfoMap = attrMap;\n\n const uniformMap: { [key: string]: ProgramUniformInfo } = {};\n\n num = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n let textureIndex = 0;\n const emptyTexture2D = renderer.emptyTexture2D;\n const emptyTextureCube = renderer.emptyTextureCube;\n const blockUniformNames: string[] = [];\n\n if (renderer.level === 2) {\n this._uniformBlocks = createUniformBlockSpecsFromProgram(gl as WebGL2RenderingContext, program, blockUniformNames);\n this._uniformBlocks.forEach(b => this.uniformBlockMap[b.name] = b);\n } else {\n this._uniformBlocks = [];\n }\n for (let i = 0; i < num; i++) {\n const info = gl.getActiveUniform(program, i) as WebGLActiveInfo;\n const { size, type } = gl.getActiveUniform(program, i) as WebGLActiveInfo;\n let name = info.name;\n let location = null;\n\n // BUG, webgl and node gl use different name\n if (/\\[0\\]$/.test(name)) {\n location = gl.getUniformLocation(program, name);\n }\n name = name.replace(/\\[0\\]$/, '');\n if (!location) {\n location = gl.getUniformLocation(program, name);\n }\n if (!location) {\n if (!blockUniformNames.includes(name)) {\n consoleWarn(`get uniform ${name} loc fail`);\n }\n continue;\n }\n this.renderer._assignInspectorName(location, name);\n let locTexIndex = -1;\n\n if (type === gl.SAMPLER_2D || type === gl.SAMPLER_CUBE) {\n locTexIndex = textureIndex;\n for (let k = 0; k < size; k++) {\n const subLoc = k > 0 ? gl.getUniformLocation(program, `${name}[${k}]`) : location;\n const activeIndex = textureIndex + k;\n\n if (activeIndex < renderer.gpu.capability.maxShaderTexCount) {\n gl.activeTexture(gl.TEXTURE0 + activeIndex);\n if (type === gl.SAMPLER_2D) {\n gl.bindTexture(gl.TEXTURE_2D, emptyTexture2D.glHandle as WebGLTexture);\n } else {\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, emptyTextureCube.glHandle as WebGLTexture);\n }\n gl.uniform1i(subLoc, activeIndex);\n } else {\n consoleError(`texture index ${activeIndex} overflows max ${renderer.gpu.capability.maxShaderTexCount}`);\n }\n }\n textureIndex += size;\n }\n\n const subInfos: ProgramUniformInfo[] = [];\n\n for (let j = 0; j < size; ++j) {\n const fullName = name + '[' + j + ']';\n const loc = gl.getUniformLocation(program, fullName);\n\n if (loc !== null) {\n subInfos.push({\n name: fullName,\n loc: loc,\n subInfos: [],\n type: type,\n size: 1,\n textureIndex: locTexIndex,\n isTexture: locTexIndex > -1,\n });\n }\n }\n\n uniformMap[name] = {\n name,\n loc: location,\n subInfos: subInfos,\n type,\n size,\n textureIndex: locTexIndex,\n isTexture: locTexIndex > -1,\n };\n }\n\n renderer.state.useProgram(null);\n gl.activeTexture(gl.TEXTURE0);\n renderer.state.activeTexture(gl.TEXTURE0);\n renderer.state.bindTexture(gl.TEXTURE_2D, emptyTexture2D.glHandle as WebGLTexture, true);\n this.uniformInfoMap = uniformMap;\n }\n\n bind () {\n const renderer = this.renderer;\n\n if (renderer) {\n renderer.state.useProgram(this.glHandle);\n }\n\n }\n\n getSemanticValue (state: RenderState, semanticName: string) {\n const renderPassSemantics = state.currentPass.semantics;\n const renderFrameSemantics = state.currentFrame.semantics;\n\n if (renderPassSemantics.hasSemanticValue(semanticName)) {\n return renderPassSemantics.getSemanticValue(semanticName, state);\n } else if (renderFrameSemantics.hasSemanticValue(semanticName)) {\n return renderFrameSemantics.getSemanticValue(semanticName, state);\n }\n }\n\n setupUniforms (state: RenderState) {\n this.bind();\n const material = state.currentMesh.material as MarsMaterial;\n const gl = this.renderer.gl;\n const blocks = material._dataBlocks;\n const shared = this.shared;\n\n temArr.clear();\n\n forEach(this.uniformBlockMap, (uboInfo, name) => {\n if (uboInfo) {\n\n const block = material.getDataBlockByName(uboInfo.name);\n\n if (block) {\n forEach(block.uniformSemantics, (semanticName, uniformName: string)=> {\n if (uniformName in uboInfo.uniforms && !block.hasUniformValue(uniformName)) {\n const val = this.getSemanticValue(state, semanticName) as UniformValue;\n\n if (val || val === 0) {\n block.setUniformValue(uniformName, val, true);\n }\n\n }\n });\n const uboBuffer = block.createUboBuffer(uboInfo);\n\n if (uboBuffer) {\n block.setUboBuffer(uboBuffer);\n temArr.add(block);\n\n return uboBuffer.bind(gl as WebGL2RenderingContext, this.glHandle, uboInfo.index);\n }\n }\n }\n });\n\n forEach(this.uniformInfoMap, (info: ProgramUniformInfo, name) => {\n let val;\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i];\n const semanticName = block.uniformSemantics[name];\n\n if (info.isTexture) {\n if (block.hasUniformValue(name)) {\n val = block.getUniformTexture(name);\n } else if (semanticName) {\n val = this.getSemanticValue(state, semanticName);\n }\n } else if (temArr.has(block)) {\n continue;\n } else if (block.hasUniformValue(name)) {\n if (!shared && !block._uniformFlags[name] && info.textureIndex === -1) {\n //not dirty, don't assign\n return;\n }\n val = block.getUniformValue(name);\n } else if (semanticName) {\n val = this.getSemanticValue(state, semanticName);\n }\n if (val !== undefined && val !== null) {\n return this.setGLUniformValue(name, val, info, gl);\n }\n }\n if (!info.isTexture) {\n consoleWarn(`mesh ${state.currentMesh.name} uniform ${name} value unset`);\n }\n });\n\n }\n\n setGLUniformValue (name: string, value: any, info: ProgramUniformInfo, gl: WebGL2RenderingContext | WebGLRenderingContext) {\n const uniformInfo = DATA_DICT[info.type];\n const subInfos = info.subInfos;\n\n if (subInfos.length > 0 && Array.isArray(value) && Array.isArray(value[0])) {\n for (let i = 0; i < subInfos.length && i < value.length; ++i) {\n const subInfo = subInfos[i];\n\n uniformInfo.uniform(gl, subInfo, value[i], this.renderer);\n }\n\n return;\n }\n uniformInfo.uniform(gl, info, value, this.renderer);\n }\n\n setupAttributes (geometry: GLGeometry): GLVertexArrayObject {\n const gl = this.renderer.gl as WebGLRenderingContext;\n const vao = geometry.createVao(this.id);\n const gpu = this.renderer.gpu;\n\n if (vao) {\n vao.bind();\n if (vao.ready) {\n return vao;\n } else {\n arrAdd(this._vaos, vao);\n }\n }\n forEach(this.attrInfoMap, function (attrInfo, name) {\n const attribute = geometry.attributes[name];\n\n if (attribute) {\n const buffer = geometry.getGPUBuffer(attribute.dataSource);\n\n if (!buffer) {\n throw Error(`no buffer named ${attribute.dataSource || name}`);\n }\n buffer.bind();\n if (attribute.size > 4) {\n const [row, col] = getMatAttrLocPair(attrInfo.type);\n const bytesPerRow = getBytesPerElementByGLType(attribute.type) * col;\n const stride = row * bytesPerRow;\n\n for (let i = 0; i < row; i++) {\n const loc = attrInfo.loc + i;\n\n gl.enableVertexAttribArray(loc);\n gl.vertexAttribPointer(loc, col, attribute.type, attribute.normalize as boolean, stride, i * bytesPerRow);\n if (attribute.instanceDivisor && gpu.capability.instanceDraw) {\n gpu.vertexAttribDivisor(gl, loc, attribute.instanceDivisor);\n }\n }\n } else {\n gl.enableVertexAttribArray(attrInfo.loc);\n gl.vertexAttribPointer(attrInfo.loc, attribute.size, attribute.type, attribute.normalize as boolean, attribute.stride || 0, attribute.offset || 0);\n if (attribute.instanceDivisor && gpu.capability.instanceDraw) {\n gpu.vertexAttribDivisor(gl, attrInfo.loc, attribute.instanceDivisor);\n }\n }\n\n }\n });\n geometry._indexBuffer?.bind();\n if (vao) {\n vao.ready = true;\n }\n\n return vao;\n }\n\n destroy () {\n if (this.renderer) {\n this._vaos.forEach(vao => vao.destroy());\n this._vaos.length = 0;\n this.renderer.gl.deleteProgram(this.glHandle);\n //@ts-expect-error safe to assign\n this.renderer = null;\n }\n }\n}\n","import type {\n ShaderCompileResult,\n ShaderLibrary,\n ShaderMarcos,\n ShaderWithSource,\n SharedShaderWithSource,\n} from '../../types/ShaderLibrary';\nimport {\n ShaderCompileResultStatus,\n} from '../../types/ShaderLibrary';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport { arrAdd, forEach, strHashCode } from '../common/utils';\nimport { requestAnimationFrame } from '../common/raf';\nimport { GLProgram } from './GLProgram';\nimport { consoleError } from '../common/console';\n\ninterface GLShaderCompileResult extends ShaderCompileResult {\n program?: WebGLProgram,\n}\n\nenum ShaderType {\n vertex = 0,\n fragment = 1\n}\n\nconst downgradeKeywords: Record<string, Record<string, string>> = {\n [ShaderType.vertex]: {\n in: 'attribute',\n out: 'varying',\n },\n [ShaderType.fragment]: {\n in: 'varying',\n },\n};\nlet shaderSeed = 1;\n\nexport class GLShaderLibrary implements ShaderLibrary {\n readonly renderer: GLGPURenderer;\n private readonly shaderResults: { [p: string]: ShaderCompileResult };\n\n private _shaderMap: { [key: string]: ShaderWithSource };\n private _programMap: { [key: string]: GLProgram };\n\n private _glVertShaderMap: Map<number, WebGLShader>;\n private _glFragShaderMap: Map<number, WebGLShader>;\n\n private readonly _glAsyncCompileExt?: { COMPLETION_STATUS_KHR: number };\n private _shaderAllDone = false;\n\n constructor (renderer: GLGPURenderer) {\n this.renderer = renderer;\n this._shaderMap = {};\n this.shaderResults = {};\n this._programMap = {};\n this._glVertShaderMap = new Map<number, WebGLShader>();\n this._glFragShaderMap = new Map<number, WebGLShader>();\n const gl = this.renderer.gl as WebGLRenderingContext;\n\n this._glAsyncCompileExt = gl.getExtension('KHR_parallel_shader_compile') as { COMPLETION_STATUS_KHR: number };\n }\n\n get cacheIds (): string[] {\n return Object.keys(this.shaderResults);\n }\n getShaderResult (cacheId: string): ShaderCompileResult | undefined {\n if (this.shaderResults) {\n return this.shaderResults[cacheId];\n }\n }\n\n compileAllShaders (asyncCallback?: (results: ShaderCompileResult[]) => void) {\n if (!this._shaderAllDone) {\n const res = this.shaderResults;\n const pendings: string[] = [];\n\n forEach(this._shaderMap, (result, id) => {\n if (!res[id]) {\n arrAdd(pendings, id);\n }\n });\n\n if (asyncCallback) {\n if (pendings.length) {\n Promise.all<Promise<ShaderCompileResult>[]>(\n pendings.map(id => new Promise(resolve => this.compileShader(id, resolve)))\n )\n .then(asyncCallback)\n .catch(() => 0);\n } else {\n asyncCallback([]);\n }\n } else {\n pendings.map(id => this.compileShader(id));\n }\n this._shaderAllDone = true;\n } else if (asyncCallback) {\n asyncCallback([]);\n }\n }\n\n getProgram (shaderCacheId: string): GLProgram | null {\n if (this._programMap[shaderCacheId] == undefined) {\n if (this._shaderMap[shaderCacheId] !== undefined) {\n this.compileShader(shaderCacheId);\n }\n }\n\n return this._programMap[shaderCacheId];\n }\n\n addMarcosHeader (header: string, shader: string, type: ShaderType, downgrade?: boolean): string {\n const versionTag = /#version\\s+\\b\\d{3}\\b\\s*(es)?/;\n const GLV = `WEBGL${this.renderer.level}`;\n\n if (downgrade) {\n header = header + `\n#ifndef ${GLV}\n#define ${GLV}\n#endif`;\n }\n let fullShader = header + '\\n' + shader;\n const match = fullShader.match(versionTag);\n const version = match ? match[0] : '';\n let realVersion = version;\n\n if (version && version.includes('300') && this.renderer.level === 1 && downgrade) {\n realVersion = '';\n fullShader = fullShader.replace(/\\b(in|out)\\b/g, function (str) {\n return downgradeKeywords[type][str] || str;\n });\n }\n\n return realVersion + '\\n' + fullShader.replace(version, '\\n');\n }\n\n addShader (shader: ShaderWithSource): string {\n const marcosHead = shader.marcos ? combineMaterialMarcos(shader.marcos) : '';\n const vertex = shader.vertex ? this.addMarcosHeader(marcosHead, shader.vertex, ShaderType.vertex, shader.downgrade) : '';\n const fragment = shader.fragment ? this.addMarcosHeader(marcosHead, shader.fragment, ShaderType.fragment, shader.downgrade) : '';\n let shaderCacheId: string;\n let shared = false;\n\n if (shader.shared || (shader as unknown as SharedShaderWithSource).cacheId) {\n shaderCacheId = (shader as SharedShaderWithSource).cacheId || `shared_${strHashCode(vertex, fragment)}`;\n shared = true;\n } else {\n shaderCacheId = 'instanced_' + shaderSeed++;\n }\n if (!this._shaderMap[shaderCacheId]) {\n this._shaderAllDone = false;\n this._shaderMap[shaderCacheId] = {\n vertex,\n fragment,\n name: shader.name || shaderCacheId,\n shared,\n };\n }\n\n return shaderCacheId;\n }\n\n compileShader (shaderCacheId: string, asyncCallback?: (result: ShaderCompileResult) => void): ShaderCompileResult {\n const shaderResult = this.shaderResults[shaderCacheId];\n\n if (!shaderResult) {\n const shader = this._shaderMap[shaderCacheId];\n\n if (!shader) {\n return {\n status: ShaderCompileResultStatus.noShader,\n };\n }\n const gl = this.renderer.gl as WebGLRenderingContext;\n const result: GLShaderCompileResult = { shared: shader.shared, status: ShaderCompileResultStatus.compiling };\n const linkProgram = this.createProgram(gl, shader.vertex, shader.fragment, result);\n const ext = this._glAsyncCompileExt;\n const startTime = Date.now();\n const checkComplete = () => {\n const shouldLink = !asyncCallback || !ext || (ext && gl.getProgramParameter(result.program as GLProgram, ext.COMPLETION_STATUS_KHR) == true);\n const program = shouldLink && linkProgram();\n\n if (program) {\n if (result.status !== ShaderCompileResultStatus.fail) {\n this.renderer._assignInspectorName(program, shader.name);\n const glProgram = new GLProgram(this.renderer, program, !!shader.shared, shaderCacheId);\n\n gl.validateProgram(program);\n const valid = gl.getProgramParameter(program, gl.VALIDATE_STATUS);\n\n if (!valid) {\n result.status = ShaderCompileResultStatus.fail;\n } else {\n result.status = ShaderCompileResultStatus.success;\n result.compileTime = Date.now() - startTime;\n this._programMap[shaderCacheId] = glProgram;\n }\n }\n if (result.status === ShaderCompileResultStatus.fail) {\n const error = gl.getProgramInfoLog(program);\n\n result.error = error;\n consoleError('compileProgramError: ' + error, '\\nvertex:\\n', shader.vertex, '\\nfragment:\\n', shader.fragment);\n gl.deleteProgram(program);\n }\n if (asyncCallback) {\n asyncCallback(result);\n }\n } else if (asyncCallback) {\n requestAnimationFrame(checkComplete);\n }\n };\n\n this.shaderResults[shaderCacheId] = result;\n checkComplete();\n } else if (asyncCallback) {\n asyncCallback(shaderResult);\n }\n\n return this.shaderResults[shaderCacheId];\n }\n\n createProgram (gl: WebGLRenderingContext, vs: string, fs: string, result: GLShaderCompileResult): () => (WebGLProgram | null) {\n const program = gl.createProgram();\n const vertexShader = this.createShader(gl, gl.VERTEX_SHADER, vs);\n const fragShader = this.createShader(gl, gl.FRAGMENT_SHADER, fs);\n\n if (program && vertexShader && fragShader) {\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragShader);\n gl.linkProgram(program);\n result.program = program;\n result.status = ShaderCompileResultStatus.compiling;\n\n return function () {\n delete result.program;\n let error!: string | null;\n const linked = !error && gl.getProgramParameter(program, gl.LINK_STATUS);\n\n if (!linked) {\n checkShader(vertexShader, 'vertex', vs);\n checkShader(fragShader, 'fragment', fs);\n result.status = ShaderCompileResultStatus.fail;\n\n return program;\n }\n\n return program;\n };\n }\n result.status = ShaderCompileResultStatus.fail;\n\n return () => null;\n function checkShader (shader: WebGLShader, type: string, code: string) {\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const error = gl.getShaderInfoLog(shader);\n\n consoleError(\n 'compile ' + (type) + ' error: ' + error,\n code\n .split('\\n')\n .map((line, index) => `${index + 1} ${line}`)\n .join('\\n'),\n );\n result.error = error;\n result.status = ShaderCompileResultStatus.fail;\n }\n }\n }\n\n createShader (gl: WebGLRenderingContext, shaderType: GLenum, code: string): WebGLShader | null {\n const map = shaderType === gl.VERTEX_SHADER ? this._glVertShaderMap : this._glFragShaderMap;\n const strHash = strHashCode(code);\n const ret = map.get(strHash);\n\n if (ret) {\n return ret;\n }\n const shader = gl.createShader(shaderType);\n\n if (shader) {\n gl.shaderSource(shader, code);\n gl.compileShader(shader);\n map.set(strHash, shader);\n }\n\n return shader;\n }\n\n deleteShader (cacheId: string): void {\n const program = this._programMap[cacheId];\n\n if (program !== undefined) {\n program.destroy();\n delete this._programMap[cacheId];\n }\n const result = this.shaderResults[cacheId];\n\n if (result !== undefined) {\n delete this.shaderResults[cacheId];\n }\n }\n\n destroy (): void {\n this._shaderMap = {};\n forEach(this._programMap, function (program: GLProgram) {\n program.destroy();\n });\n this._programMap = {};\n if (this.renderer) {\n const gl = this.renderer.gl;\n\n this._glFragShaderMap.forEach(function (shader) {\n gl.deleteShader(shader);\n });\n this._glVertShaderMap.forEach(function (shader) {\n gl.deleteShader(shader);\n });\n this._glVertShaderMap = new Map<number, WebGLShader>();\n this._glFragShaderMap = new Map<number, WebGLShader>();\n }\n // @ts-expect-error safe to assign\n this['renderer'] = null;\n }\n}\n\nfunction combineMaterialMarcos (marcos?: ShaderMarcos) {\n const ret: string[] = [];\n\n if (marcos) {\n marcos.forEach(function ([key, value]) {\n if (value === true) {\n ret.push(`#define ${key}`);\n } else if (Number.isFinite(value)) {\n ret.push(`#define ${key} ${value}`);\n }\n });\n\n return ret.length ? (ret.join('\\n') + '\\n') : '';\n }\n\n return '';\n}\n\n","export function isAndroid (): boolean {\n if (IS_NODE) {\n return false;\n } else {\n return /\\b[Aa]ndroid\\b/.test(navigator.userAgent);\n }\n}\n","import type {\n GPUCapability,\n GPUCapabilityDetail,\n} from '../../types/GPUCapability';\nimport {\n COMPRESSED_TEXTURE_ASTC,\n COMPRESSED_TEXTURE_PVRTC,\n} from '../../types/GPUCapability';\nimport type { Immutable } from '../../types/type';\nimport { isAndroid } from '../common/env';\nimport { consoleError, consoleWarn } from '../common/console';\n\nlet textureMaxAnisotropyExt: number;\n\ninterface GLGPUCapabilityDetail extends GPUCapabilityDetail {\n vao: boolean,\n standardDerivatives: boolean,\n halfFloatLinear: boolean,\n floatLinear: boolean,\n maxShaderTexCount: number,\n instanceDraw: boolean,\n}\n\nconst webGL2ConstructorAvailable = typeof WebGL2RenderingContext === 'function';\n\nconst TYPE_WEBGL = 'webgl';\nconst TYPE_WEBGL2 = 'webgl2';\n\nexport class GLGPUCapability implements GPUCapability {\n readonly capability!: Immutable<GLGPUCapabilityDetail>;\n readonly level!: number;\n readonly type!: 'webgl' | 'webgl2' | 'node-gl' | 'none';\n\n drawBufferExtension: any;\n vaoExt: any;\n\n UNSIGNED_INT_24_8!: number;\n\n internalFormatDepth16!: number;\n internalFormatDepth24_stencil8!: number;\n\n instanceDrawExt?: ANGLE_instanced_arrays;\n\n constructor (opt: { glType?: 'webgl' | 'webgl2', gl?: WebGLRenderingContext | WebGL2RenderingContext }) {\n let gl = opt.gl;\n let type = 'none';\n\n opt = opt || {};\n let canvas;\n\n if (IS_NODE) {\n gl = require('gl')(1, 1);\n type = 'node-gl';\n } else {\n if (!gl) {\n let prefix = TYPE_WEBGL;\n\n if (!isAndroid() && webGL2ConstructorAvailable) {\n prefix = opt.glType || TYPE_WEBGL2;\n }\n canvas = document.createElement('canvas');\n gl = canvas.getContext(prefix) as WebGLRenderingContext;\n if (!gl) {\n prefix = 'webgl';\n gl = canvas.getContext(prefix) as WebGLRenderingContext;\n }\n }\n if (gl) {\n type = (webGL2ConstructorAvailable && (gl instanceof WebGL2RenderingContext)) ? TYPE_WEBGL2 : TYPE_WEBGL;\n }\n }\n this._setupCapability(gl);\n // @ts-expect-error safe to assign\n this.type = type;\n if (canvas && gl) {\n gl.getExtension('WEBGL_lose_context')?.loseContext();\n }\n }\n\n _setupCapability (gl?: WebGLRenderingContext | WebGL2RenderingContext) {\n if (gl) {\n // @ts-expect-error safe to assign\n this['level'] = (webGL2ConstructorAvailable && gl instanceof WebGL2RenderingContext) ? 2 : 1;\n const level2 = this.level === 2;\n const textureAnisotropicExt = gl.getExtension('EXT_texture_filter_anisotropic') || gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic');\n\n if (!level2) {\n this.vaoExt = gl.getExtension('OES_vertex_array_object');\n } else {\n this.UNSIGNED_INT_24_8 = (gl as WebGL2RenderingContext).UNSIGNED_INT_24_8;\n }\n this.drawBufferExtension = gl.getExtension('WEBGL_draw_buffers');\n const depthTextureExtension = gl.getExtension('WEBGL_depth_texture');\n\n if (depthTextureExtension) {\n this.UNSIGNED_INT_24_8 = depthTextureExtension.UNSIGNED_INT_24_8_WEBGL;\n }\n let halfFloatLinear = !!gl.getExtension('OES_texture_half_float_linear');\n\n if (level2 && !halfFloatLinear) {\n halfFloatLinear = this.checkLinearTextureFilter(gl as WebGL2RenderingContext, (gl as WebGL2RenderingContext).HALF_FLOAT);\n }\n let floatLinear = !!gl.getExtension('OES_texture_float_linear');\n\n if (level2 && !floatLinear) {\n floatLinear = this.checkLinearTextureFilter(gl as WebGL2RenderingContext, (gl as WebGL2RenderingContext).FLOAT);\n }\n this.internalFormatDepth16 = level2 ? (gl as WebGL2RenderingContext).DEPTH_COMPONENT16 : gl.DEPTH_COMPONENT;\n this.internalFormatDepth24_stencil8 = level2 ? (gl as WebGL2RenderingContext).DEPTH24_STENCIL8 : gl.DEPTH_STENCIL;\n this.instanceDrawExt = gl.getExtension('ANGLE_instanced_arrays')!;\n const floatTexture = (level2 || gl.getExtension('OES_texture_float')) ? gl.FLOAT : 0;\n const halfFloatTexture = level2 ? WebGL2RenderingContext.HALF_FLOAT : (gl.getExtension('OES_texture_half_float')?.HALF_FLOAT_OES || 0);\n const detail: GLGPUCapabilityDetail = {\n floatTexture,\n halfFloatTexture,\n maxSample: level2 ? gl.getParameter((gl as WebGL2RenderingContext).MAX_SAMPLES) : 1,\n maxVertexUniforms: gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS),\n maxVertexTextures: gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS),\n maxFragmentUniforms: gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS),\n maxFragmentTextures: gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS),\n floatColorAttachment: level2 ? !!gl.getExtension('EXT_color_buffer_float') : (floatTexture > 0 && !!gl.getExtension('WEBGL_color_buffer_float')),\n halfFloatColorAttachment: level2 ? !!gl.getExtension('EXT_color_buffer_float') : (halfFloatTexture > 0 && !!gl.getExtension('EXT_color_buffer_half_float')),\n maxTextureSize: gl.getParameter(gl.MAX_TEXTURE_SIZE),\n maxShaderTexCount: gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS),\n compressedTexture: registerCompressedTexture(gl),\n halfFloatLinear,\n floatLinear,\n maxTextureAnisotropy: textureAnisotropicExt ? gl.getParameter(textureAnisotropicExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0,\n shaderTextureLod: level2 || !!gl.getExtension('EXT_shader_texture_lod'),\n instanceDraw: level2 || !!this.instanceDrawExt,\n drawBuffers: level2 || !!this.drawBufferExtension,\n asyncShaderCompile: !!gl.getExtension('KHR_parallel_shader_compile'),\n intIndexElementBuffer: !!gl.getExtension('OES_element_index_uint'),\n standardDerivatives: level2 || !!gl.getExtension('OES_standard_derivatives'),\n readableDepthStencilTextures: level2 || !!depthTextureExtension,\n vao: level2 || !!this.vaoExt,\n writableFragDepth: level2 || !!gl.getExtension('EXT_frag_depth'),\n };\n\n // @ts-expect-error safe to assign\n this['capability'] = detail;\n if (textureAnisotropicExt) {\n textureMaxAnisotropyExt = textureAnisotropicExt.TEXTURE_MAX_ANISOTROPY_EXT;\n }\n // @ts-expect-error safe to assign\n this['type'] = 'webgl' + (level2 ? '2' : '');\n } else {\n // @ts-expect-error safe to assign\n this['capability'] = {};\n }\n }\n\n checkLinearTextureFilter (gl: WebGL2RenderingContext, type: number): boolean {\n let ret = false;\n const tex = gl.createTexture();\n\n gl.getError();\n gl.bindTexture(gl.TEXTURE_2D, tex);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.R16F, 1, 1, 0, gl.RED, type, null);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n if (!gl.getError()) {\n ret = true;\n }\n gl.deleteTexture(tex);\n\n return ret;\n }\n\n framebufferTexture2D (gl: WebGLRenderingContext | WebGL2RenderingContext, target: GLenum, index: number, textarget: number, texture: WebGLTexture) {\n const ext = this.drawBufferExtension;\n\n if (this.level === 1 && !ext && index > 0) {\n throw Error('draw multiple color buffers not available');\n }\n // @ts-expect-error safe to assign\n const attachment = ext ? ext[`COLOR_ATTACHMENT${index}_WEBGL`] : gl['COLOR_ATTACHMENT' + index];\n\n if (attachment) {\n gl.framebufferTexture2D(target, attachment, textarget, texture, 0);\n } else {\n consoleError('invalid color attachment index:' + index);\n }\n }\n\n vertexAttribDivisor (gl: WebGLRenderingContext | WebGL2RenderingContext, loc: number, divisor: number) {\n if (this.level === 2) {\n (gl as WebGL2RenderingContext).vertexAttribDivisor(loc, divisor);\n } else if (this.instanceDrawExt) {\n this.instanceDrawExt.vertexAttribDivisorANGLE(loc, divisor);\n } else {\n consoleWarn('instance draw not support');\n }\n }\n\n drawElementsInstanced (gl: WebGLRenderingContext | WebGL2RenderingContext, mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr, instanceCount: GLsizei) {\n if (this.level === 2) {\n (gl as WebGL2RenderingContext).drawElementsInstanced(mode, count, type, offset, instanceCount);\n } else if (this.instanceDrawExt) {\n this.instanceDrawExt.drawElementsInstancedANGLE(mode, count, type, offset, instanceCount);\n } else {\n consoleWarn('instance draw not support');\n }\n\n }\n\n drawArraysInstanced (gl: WebGLRenderingContext | WebGL2RenderingContext, mode: GLenum, first: GLint, count: GLsizei, instanceCount: GLsizei) {\n if (this.level === 2) {\n (gl as WebGL2RenderingContext).drawArraysInstanced(mode, first, count, instanceCount);\n } else if (this.instanceDrawExt) {\n this.instanceDrawExt.drawArraysInstancedANGLE(mode, first, count, instanceCount);\n } else {\n consoleWarn('instance draw not support');\n }\n\n }\n\n drawBuffers (gl: WebGLRenderingContext | WebGL2RenderingContext, bufferStates: boolean[]) {\n const ext = this.drawBufferExtension;\n\n if (this.level === 1 && !ext) {\n if (bufferStates.length > 1) {\n throw Error('draw buffers not available');\n } else {\n return;\n }\n }\n const buffers = bufferStates.map(function (enabled, index) {\n if (enabled) {\n // @ts-expect-error safe to assign\n return ext ? ext[`COLOR_ATTACHMENT${index}_WEBGL`] : (gl as WebGL2RenderingContext)['COLOR_ATTACHMENT' + index];\n }\n\n return gl.NONE;\n });\n\n if (ext) {\n ext.drawBuffersWEBGL(buffers);\n } else {\n (gl as WebGL2RenderingContext).drawBuffers(buffers);\n }\n }\n\n setTextureAnisotropic (gl: WebGLRenderingContext | WebGL2RenderingContext, target: GLenum, level: number) {\n const max = this.capability.maxTextureAnisotropy;\n\n if (max) {\n gl.texParameterf(target, textureMaxAnisotropyExt, Math.min(max, level || 4));\n }\n }\n\n setup (gl: WebGLRenderingContext): void {\n this._setupCapability(gl);\n }\n\n}\n\nexport function registerCompressedTexture (gl: WebGLRenderingContext | WebGL2RenderingContext): number {\n if (gl.getExtension('WEBGL_compressed_texture_astc')) {\n return COMPRESSED_TEXTURE_ASTC;\n }\n if (gl.getExtension('WEBGL_compressed_texture_pvrtc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc')) {\n return COMPRESSED_TEXTURE_PVRTC;\n }\n\n return 0;\n}\n","import type {\n Texture2DSourceOptionsCompressed,\n Texture2DSourceOptionsData,\n Texture2DSourceOptionsFrameBuffer,\n Texture2DSourceOptionsImage,\n Texture2DSourceOptionsImageMipmaps,\n Texture2DSourceOptionsVideo,\n TextureConfigOptions,\n TextureCubeSourceOptionsImage,\n TextureCubeSourceOptionsImageMipmaps,\n TextureOptions,\n TextureSourceOptions,\n} from '../../types/Texture';\nimport {\n TextureSourceType,\n} from '../../types/Texture';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport type { TypedArray, vec2 } from '../../types/type';\nimport { constants } from './constants';\nimport { consoleError, consoleWarn } from '../common/console';\n\ntype HTMLImageLike = ImageBitmap | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;\ntype GLContext = WebGLRenderingContext | WebGL2RenderingContext;\n\nlet flipCanvas: HTMLCanvasElement;\n\nexport const imageBitMapAvailable = typeof ImageBitmap === 'function' && typeof createImageBitmap == 'function';\n\nexport class GLTexture {\n readonly renderer?: GLGPURenderer;\n readonly glHandle: WebGLTexture | null;\n readonly options: TextureOptions;\n readonly target: GLenum;\n readonly gpuInfo: [format: number, type: number, target: number, mipmaps: vec2[]];\n width!: number;\n height!: number;\n _mipmapUsed = false;\n constructor (option: TextureOptions, renderer: GLGPURenderer) {\n const gl = renderer.gl;\n\n this.renderer = renderer;\n this.gpuInfo = [0, 0, 0, []];\n this.glHandle = renderer.createGLTexture(this, option.name) as WebGLTexture;\n this.options = option;\n this.target = option.target || gl.TEXTURE_2D;\n this.update(option);\n }\n\n setInspectorName (name: string) {\n this.renderer?._assignInspectorName(this.glHandle, name);\n }\n\n errorLog () {\n consoleError('this this texture has been destroyed');\n }\n\n update (source: TextureSourceOptions) {\n const renderer = this.renderer;\n const handle = this.glHandle;\n const target = this.target;\n const options = this.options;\n\n if (renderer && handle) {\n let width = 0;\n let height = 0;\n const gl = renderer.gl;\n\n renderer.state.bindTexture(target, handle);\n const { sourceType, flipY } = options;\n let format = options.format as GLenum;\n let type = options.type as GLenum;\n let internalFormat = options.internalFormat as GLenum;\n\n if (type === constants.HALF_FLOAT) {\n type = renderer.gpu.capability.halfFloatTexture;\n if (!type) {\n consoleError('half float texture is not support');\n }\n if (renderer.gpu.level === 2 && internalFormat === format) {\n if (format === constants.LUMINANCE) {\n format = constants.RED;\n }\n internalFormat = FORMAT_HALF_FLOAT[format];\n }\n if (!renderer.gpu.capability.halfFloatLinear) {\n options.minFilter = options.magFilter = gl.NEAREST;\n consoleWarn('half float linear not support,change to NEAREST');\n }\n } else if (type === gl.FLOAT) {\n type = renderer.gpu.capability.floatTexture;\n if (!type) {\n consoleError('float texture is not support');\n }\n if (renderer.gpu.level === 2 && internalFormat === format) {\n if (format === constants.LUMINANCE) {\n format = constants.RED;\n }\n internalFormat = FORMAT_FLOAT[format];\n }\n if (!renderer.gpu.capability.floatLinear) {\n options.minFilter = options.magFilter = gl.NEAREST;\n consoleWarn('float linear not support,change to NEAREST');\n }\n }\n const gpuInfo = this.gpuInfo;\n\n gpuInfo[0] = internalFormat;\n gpuInfo[1] = type;\n gpuInfo[2] = target;\n const pma = gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL);\n\n //fucking pma conflicts for other webgl engine\n if (pma != options.premultiplyAlpha) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, options.premultiplyAlpha ? 1 : 0);\n }\n // renderer.state.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, options.premultiplyAlpha ? 1 : 0);\n renderer.state.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY ? 1 : 0);\n if (sourceType === TextureSourceType.framebuffer) {\n const data = (source as Texture2DSourceOptionsFrameBuffer).data;\n\n if (data) {\n width = data.width || 0;\n height = data.height || 0;\n if (width && height && (this.width !== width || this.height !== height)) {\n gl.texImage2D(target, 0, internalFormat, width, height, 0, format, type, null);\n }\n }\n } else if (sourceType === TextureSourceType.data) {\n if (target === gl.TEXTURE_CUBE_MAP) {\n let ret;\n const cubeData = (source as TextureCubeSourceOptionsImage).cube;\n\n cubeData.forEach((data, key) => {\n ret = this.texImage2DData(gl, gl.TEXTURE_CUBE_MAP_POSITIVE_X + key, 0, internalFormat, format, type, data as { data: TypedArray, width: number, height: number });\n width = Math.max(ret[0], width);\n height = Math.max(ret[1], height);\n });\n } else {\n [width, height] = this.texImage2DData(gl, target, 0, internalFormat, format, type, (source as Texture2DSourceOptionsData).data);\n }\n } else if (sourceType === TextureSourceType.image || sourceType === TextureSourceType.video) {\n if (target === gl.TEXTURE_CUBE_MAP) {\n let ret;\n\n (source as TextureCubeSourceOptionsImage).cube.forEach((image, key) => {\n ret = this.texImage2D(gl, gl.TEXTURE_CUBE_MAP_POSITIVE_X + key, 0, internalFormat, format, type, image as HTMLImageElement);\n width = Math.max(ret[0], width);\n height = Math.max(ret[1], height);\n });\n } else if (target === gl.TEXTURE_2D) {\n const image = (source as Texture2DSourceOptionsImage).image || (source as Texture2DSourceOptionsVideo).video;\n\n [width, height] = this.texImage2D(gl, target, 0, internalFormat, format, type, image);\n }\n if ((options as Texture2DSourceOptionsImage).generateMipmap) {\n if ((isPowerOfTwo(width) && isPowerOfTwo(height)) || renderer.level == 2) {\n gl.generateMipmap(target);\n const mipmapSizes: vec2[] = [[width, height]];\n let startWidth = width / 2;\n let startHeight = height / 2;\n\n while (startWidth >= 2 && startHeight >= 2) {\n mipmapSizes.push([startWidth, startHeight]);\n startWidth = Math.round(startWidth / 2);\n startHeight = Math.round(startHeight / 2);\n }\n mipmapSizes.push([1, 1]);\n this.gpuInfo[3] = mipmapSizes;\n this._mipmapUsed = true;\n }\n }\n } else if (sourceType === TextureSourceType.mipmaps) {\n let ret;\n\n if (target === gl.TEXTURE_2D) {\n const mipmaps = (source as Texture2DSourceOptionsImageMipmaps).mipmaps;\n const gpuMipmaps = this.gpuInfo[3];\n\n mipmaps.forEach((mipmap, level) => {\n if ('data' in mipmap) {\n ret = this.texImage2DData(gl, target, level, internalFormat, format, type, mipmap);\n } else {\n ret = this.texImage2D(gl, target, level, internalFormat, format, type, mipmap);\n }\n gpuMipmaps[level] = [ret[0], ret[1]];\n if (level === 0) {\n [width, height] = ret;\n }\n });\n this._mipmapUsed = mipmaps.length > 1;\n } else if (target === gl.TEXTURE_CUBE_MAP) {\n const mipmaps = (source as TextureCubeSourceOptionsImageMipmaps).mipmaps;\n const gpuMipmaps = this.gpuInfo[3];\n\n mipmaps.forEach((mipmap, level) => {\n mipmap.forEach((face, key) => {\n if ('data' in face) {\n ret = this.texImage2DData(gl, gl.TEXTURE_CUBE_MAP_POSITIVE_X + key, level, internalFormat, format, type, face);\n } else {\n ret = this.texImage2D(gl, gl.TEXTURE_CUBE_MAP_POSITIVE_X + key, level, internalFormat, format, type, face);\n }\n gpuMipmaps[level] = [ret[0], ret[1]];\n if (level === 0) {\n [width, height] = ret;\n }\n });\n });\n this._mipmapUsed = mipmaps.length > 1;\n }\n } else if (sourceType === TextureSourceType.compressed) {\n const mipmaps = (source as Texture2DSourceOptionsCompressed).mipmaps;\n\n if (mipmaps) {\n const gpuMipmaps = this.gpuInfo[3];\n\n width = mipmaps[0].width;\n height = mipmaps[0].height;\n for (let miplevel = 0; miplevel < mipmaps.length; miplevel++) {\n const mipmap = mipmaps[miplevel];\n\n gpuMipmaps[miplevel] = [mipmap.width, mipmap.height];\n gl.compressedTexImage2D(\n target,\n miplevel,\n internalFormat,\n mipmap.width,\n mipmap.height,\n 0,\n mipmap.data);\n }\n this._mipmapUsed = mipmaps.length > 1;\n }\n }\n if (!this._mipmapUsed) {\n this.gpuInfo[3] = [[width, height]];\n }\n if (pma != options.premultiplyAlpha) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, pma);\n }\n this.width = width;\n this.height = height;\n this.setTextureFilters(gl, target, options);\n } else {\n this.width = this.height = 0;\n }\n\n }\n\n setTextureFilters (gl: GLContext, target: GLenum, options: TextureConfigOptions) {\n if (this.target === gl.TEXTURE_2D) {\n this.renderer?.gpu.setTextureAnisotropic(gl, this.target, options.anisotropic || 4);\n }\n const isPot = this.renderer?.level == 2 || (isPowerOfTwo(this.width) && isPowerOfTwo(this.height));\n const minFiler = isPot ? (options.minFilter || gl.NEAREST) : gl.NEAREST;\n const magFilter = isPot ? (options.magFilter || gl.NEAREST) : gl.NEAREST;\n\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minFiler);\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magFilter);\n gl.texParameteri(target, gl.TEXTURE_WRAP_S, isPot ? (options.wrapS || gl.CLAMP_TO_EDGE) : gl.CLAMP_TO_EDGE);\n gl.texParameteri(target, gl.TEXTURE_WRAP_T, isPot ? (options.wrapT || gl.CLAMP_TO_EDGE) : gl.CLAMP_TO_EDGE);\n }\n\n texImage2D (gl: GLContext, target: GLenum, level: number, internalformat: GLenum, format: GLenum, type: GLenum, image: HTMLImageLike): vec2 {\n const options = this.options;\n const maxSize = this.renderer?.gpu.capability.maxTextureSize || 2048;\n let img = image;\n\n if (options.sourceType !== TextureSourceType.video) {\n let shouldResize = options.minFilter !== gl.NEAREST || options.magFilter !== gl.NEAREST || options.wrapS !== gl.CLAMP_TO_EDGE || options.wrapT !== gl.CLAMP_TO_EDGE;\n\n shouldResize = shouldResize || image.width > maxSize || image.height > maxSize;\n if (shouldResize) {\n img = this.resizeImage(image);\n }\n if (imageBitMapAvailable && img instanceof ImageBitmap && options.flipY) {\n img = this.flipImageBitmap(img);\n }\n }\n gl.texImage2D(target, level, internalformat, format, type, img);\n const size: vec2 = [img.width, img.height];\n\n if (flipCanvas) {\n flipCanvas.width = flipCanvas.height = 1;\n }\n\n return options.sourceType === TextureSourceType.video ? [(image as HTMLVideoElement).videoWidth, (image as HTMLVideoElement).videoHeight] : size;\n }\n\n flipImageBitmap (bitmap: ImageBitmap): HTMLCanvasElement {\n if (!flipCanvas) {\n flipCanvas = document.createElement('canvas');\n }\n const width = flipCanvas.width = bitmap.width;\n const height = flipCanvas.height = bitmap.height;\n const ctx = flipCanvas.getContext('2d') as CanvasRenderingContext2D;\n\n ctx.clearRect(0, 0, width, height);\n ctx.fillStyle = 'rgba(255,255,255,0.0039)';\n ctx.fillRect(0, 0, width, height);\n ctx.drawImage(bitmap, 0, 0);\n\n return flipCanvas;\n }\n\n texImage2DData (gl: GLContext, target: GLenum, level: number, internalformat: GLenum, format: GLenum, type: GLenum, data: { data: TypedArray, width: number, height: number }): vec2 {\n const bufferView = data.data;\n // Uint8ClampedArray is incompatible in android\n const neoBuffer = type === gl.UNSIGNED_BYTE ? new Uint8Array(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength / bufferView.BYTES_PER_ELEMENT) : bufferView;\n\n gl.texImage2D(target, level, internalformat, data.width, data.height, 0, format, type, neoBuffer);\n\n return [data.width, data.height];\n }\n\n resizeImage (image: HTMLImageLike, targetWidth?: number, targetHeight?: number): HTMLCanvasElement | HTMLImageElement {\n const maxSize = this.renderer?.gpu.capability.maxTextureSize || 2048;\n\n if (this.renderer?.level === 2 && (image.width < maxSize && image.height < maxSize)) {\n return image as HTMLImageElement;\n }\n if (image) {\n const width = image.width;\n const height = image.height;\n const nw = Math.min(maxSize, targetWidth || nearestPowerOfTwo(width));\n const nh = Math.min(maxSize, targetHeight || nearestPowerOfTwo(height));\n\n if (nh !== height || nw !== width) {\n const canvas = document.createElement('canvas');\n\n canvas.width = nw;\n canvas.height = nh;\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, nw, nh);\n consoleWarn(`image resize from ${width}x${height} to ${nw}x${nh}`);\n\n return canvas;\n }\n }\n\n return image as HTMLImageElement;\n }\n\n offloadData () {\n const renderer = this.renderer;\n const target = this.target;\n\n if (renderer && this.glHandle) {\n const gl = renderer.gl;\n\n renderer.state.bindTexture(target, this.glHandle);\n const data = new Uint8Array([255]);\n const info = this.gpuInfo;\n\n info[3] = [[1, 1]];\n info[0] = gl.LUMINANCE;\n info[1] = gl.UNSIGNED_BYTE;\n info[2] = target;\n if (target === gl.TEXTURE_2D) {\n gl.texImage2D(target, 0, gl.LUMINANCE, 1, 1, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, data);\n\n } else if (target === gl.TEXTURE_CUBE_MAP) {\n const faces = [\n gl.TEXTURE_CUBE_MAP_NEGATIVE_X,\n gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,\n gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,\n gl.TEXTURE_CUBE_MAP_POSITIVE_X,\n gl.TEXTURE_CUBE_MAP_POSITIVE_Y,\n gl.TEXTURE_CUBE_MAP_POSITIVE_Z,\n ];\n\n for (let i = 0; i < faces.length; i++) {\n gl.texImage2D(faces[i], 0, gl.LUMINANCE, 1, 1, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, data);\n }\n }\n //rewrite mipmap\n gl.generateMipmap(target);\n this.width = this.height = 1;\n }\n }\n\n destroy (): void {\n if (this.renderer) {\n this.renderer.deleteGLTexture(this);\n //@ts-expect-error safe to assign\n this.renderer = this.options = this.glHandle = null;\n\n this.update = this.destroy = this.errorLog;\n }\n }\n\n _assignRenderer (renderer: GLGPURenderer): void {\n throw new Error('Method not implemented.');\n }\n\n}\n\nexport function nearestPowerOfTwo (value: number): number {\n return 2 ** Math.round(Math.log(value) / Math.LN2);\n}\n\nexport function isPowerOfTwo (value: number) {\n return (value & (value - 1)) === 0 && value !== 0;\n}\n\nconst FORMAT_HALF_FLOAT = {\n [constants.RGBA]: 34842, //RGBA16F\n [constants.RGB]: 34843, //RGB16F\n [constants.ALPHA]: 33325, //R16F\n [constants.RED]: 33325, //R16F\n [constants.LUMINANCE_ALPHA]: 33327, //RG16F\n [constants.LUMINANCE]: 33325,\n};\nconst FORMAT_FLOAT = {\n [constants.RGBA]: 34836, //RGBA32F\n [constants.RGB]: 34837, //RGB32F\n [constants.ALPHA]: 33326, //R32F\n [constants.RED]: 33326, //R32F\n [constants.LUMINANCE_ALPHA]: 33328, //RG32F,\n [constants.LUMINANCE]: 33326, //R32F\n};\n","import { GLGPUBuffer } from './GLGPUBuffer';\nimport { WebGLState } from './WebGLState';\nimport { GLShaderLibrary } from './GLShaderLibrary';\nimport type { GPURenderer, RendererExtensions } from '../../types';\nimport type { GPUBufferOptions } from '../../types/GPUBuffer';\nimport type { RenderFrame, RenderFrameOptions } from '../../types/RenderFrame';\nimport { GLGPUCapability } from './GLGPUCapability';\nimport { GLTexture } from './GLTexture';\nimport { arrAdd, arrRemove } from '../common/utils';\nimport { TextureSourceType } from '../../types/Texture';\nimport type { GLRenderBuffer } from './GLRenderBuffer';\nimport type { GLFrameBuffer } from './GLFrameBuffer';\nimport { consoleError } from '../common/console';\n\nconst GL_LOST_EVENT = 'webglcontextlost';\n\nexport class GLGPURenderer implements GPURenderer {\n readonly gl: WebGLRenderingContext | WebGL2RenderingContext;\n readonly level: number;\n readonly gpu: GLGPUCapability;\n readonly state: WebGLState;\n readonly shaderLibrary: GLShaderLibrary;\n readonly emptyTexture2D: GLTexture;\n readonly emptyTextureCube: GLTexture;\n\n readonly _buffers: GLGPUBuffer[];\n readonly _textures: GLTexture[];\n readonly _renderBuffers: GLRenderBuffer[];\n readonly _frameBuffers: GLFrameBuffer[];\n readonly _vaos: WebGLVertexArrayObject[];\n private _sourceFbo!: WebGLFramebuffer | null;\n private _targetFbo!: WebGLFramebuffer | null;\n private _isDestroyed = false;\n extension: RendererExtensions = {};\n\n constructor (gl: WebGLRenderingContext | WebGL2RenderingContext) {\n this.gl = gl;\n this.state = new WebGLState(gl);\n this.level = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ? 2 : 1;\n this._buffers = [];\n this._textures = [];\n this._vaos = [];\n this._renderBuffers = [];\n this._frameBuffers = [];\n this.shaderLibrary = new GLShaderLibrary(this);\n this.gpu = new GLGPUCapability({ gl });\n const d = { width: 1, height: 1, data: new Uint8Array([255]) };\n\n this.emptyTexture2D = new GLTexture({\n data: d,\n sourceType: TextureSourceType.data,\n format: gl.LUMINANCE,\n internalFormat: gl.LUMINANCE,\n type: gl.UNSIGNED_BYTE,\n }, this);\n this.emptyTextureCube = new GLTexture({\n target: gl.TEXTURE_CUBE_MAP,\n cube: [d, d, d, d, d, d],\n sourceType: TextureSourceType.data,\n format: gl.LUMINANCE,\n internalFormat: gl.LUMINANCE,\n type: gl.UNSIGNED_BYTE,\n }, this);\n this.bindVertexArray = this.level === 2 ? this._bindVertexArray : this._bindVertexArrayOES;\n if (gl.canvas) {\n gl.canvas.addEventListener(GL_LOST_EVENT, this.onContextLose);\n }\n }\n\n requestAnimationFrame (cb: FrameRequestCallback): number {\n return window.requestAnimationFrame(cb);\n }\n cancelAnimationFrame (id: number): void {\n return window.cancelAnimationFrame(id);\n }\n\n get isDestroyed () {\n return this._isDestroyed;\n }\n\n onContextLose = (e: Event) => {\n consoleError('gl lost, destroy renderer by default', e.target);\n this.destroy();\n if (e.target) {\n e.target.removeEventListener(GL_LOST_EVENT, this.onContextLose);\n }\n };\n\n copy2 (source: GLTexture, target: GLTexture) {\n const gl = this.gl as WebGL2RenderingContext;\n\n if (gl) {\n if (!this._sourceFbo) {\n this._sourceFbo = gl.createFramebuffer();\n }\n if (!this._targetFbo) {\n this._targetFbo = gl.createFramebuffer();\n }\n const state = this.state;\n const COLOR_ATTACHMENT0 = gl.COLOR_ATTACHMENT0;\n\n state.bindFramebuffer(gl.FRAMEBUFFER, this._sourceFbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, COLOR_ATTACHMENT0, gl.TEXTURE_2D, source.glHandle as GLTexture, 0);\n state.bindFramebuffer(gl.FRAMEBUFFER, this._targetFbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, COLOR_ATTACHMENT0, gl.TEXTURE_2D, target.glHandle as GLTexture, 0);\n state.bindFramebuffer(gl.READ_FRAMEBUFFER, this._sourceFbo);\n state.bindFramebuffer(gl.DRAW_FRAMEBUFFER, this._targetFbo);\n const filter = source.width === source.height && target.width == target.height ? gl.NEAREST : gl.LINEAR;\n\n gl.blitFramebuffer(0, 0, source.width, source.height, 0, 0, target.width, target.height, gl.COLOR_BUFFER_BIT, filter);\n state.bindFramebuffer(gl.FRAMEBUFFER, null);\n state.bindFramebuffer(gl.READ_FRAMEBUFFER, null);\n state.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);\n }\n }\n\n resetColorAttachments (rp: GLFrameBuffer, colors: GLTexture[]) {\n rp.bind();\n rp.resetColorTextures(colors);\n }\n\n createGLRenderBuffer (renderbuffer: GLRenderBuffer): WebGLRenderbuffer | null {\n const rb = this.gl.createRenderbuffer();\n\n if (rb) {\n arrAdd(this._renderBuffers, renderbuffer);\n }\n\n return rb;\n }\n\n createPipeline (options?: RenderFrameOptions): RenderFrame {\n throw new Error('Method not implemented.');\n }\n\n createBuffer (options: GPUBufferOptions): GLGPUBuffer {\n return new GLGPUBuffer(options, this);\n }\n\n resize (width: number, height: number): void {\n const gl = this.gl;\n\n if (gl && gl.drawingBufferWidth !== width || gl.drawingBufferHeight !== height) {\n gl.canvas.width = width;\n gl.canvas.height = height;\n gl.viewport(0, 0, width, height);\n this._frameBuffers.forEach(frameBuffer => {\n const viewport = frameBuffer.viewport;\n\n if (!frameBuffer.isCustomViewport) {\n frameBuffer.resize(viewport[0], viewport[1], width * frameBuffer.viewportScale, height * frameBuffer.viewportScale);\n }\n });\n }\n }\n\n _assignInspectorName (obj: any, name?: string, id?: string) {\n if (name) {\n obj.__SPECTOR_Metadata = { name };\n if (obj.__SPECTOR_Object_TAG) {\n obj.__SPECTOR_Object_TAG.displayText = name;\n if (id) {\n obj.__SPECTOR_Object_TAG.id = id;\n }\n } else {\n obj.__SPECTOR_Object_TAG = {\n displayText: name,\n id: '',\n };\n }\n }\n }\n\n createGLFrameBuffer (frameBuffer: GLFrameBuffer, name?: string): WebGLFramebuffer | null {\n const fbo = this.gl.createFramebuffer();\n\n if (fbo) {\n arrAdd(this._frameBuffers, frameBuffer);\n this._assignInspectorName(fbo, name, name);\n }\n\n return fbo;\n }\n\n createGLTexture (texture: GLTexture, name?: string): WebGLTexture | null {\n const tex = this.gl.createTexture();\n\n if (tex) {\n arrAdd(this._textures, texture);\n this._assignInspectorName(tex, name);\n }\n\n return tex;\n }\n\n createGLBuffer (gpuBuffer: GLGPUBuffer, name?: string): WebGLBuffer | null {\n const buffer = this.gl.createBuffer();\n\n if (buffer) {\n arrAdd(this._buffers, gpuBuffer);\n this._assignInspectorName(buffer, name);\n }\n\n return buffer;\n }\n\n deleteGLTexture (texture: GLTexture) {\n if (texture.glHandle && !this._isDestroyed) {\n this.gl.deleteTexture(texture.glHandle);\n arrRemove(this._textures, texture);\n //@ts-expect-error safe to assign\n delete texture.glHandle;\n }\n }\n\n deleteGPUBuffer (buffer: GLGPUBuffer | null) {\n if (buffer && !this._isDestroyed) {\n arrRemove(this._buffers, buffer);\n this.gl.deleteBuffer(buffer.glBuffer);\n //@ts-expect-error safe to assign\n delete buffer.glBuffer;\n }\n }\n\n deleteGLFrameBuffer (frameBuffer: GLFrameBuffer) {\n if (frameBuffer && !this._isDestroyed) {\n const gl = this.gl;\n\n gl.deleteFramebuffer(frameBuffer.fbo!);\n gl.deleteFramebuffer(frameBuffer.multisampleFbo!);\n frameBuffer.multisampleRbs.forEach(rb=>rb.destroy());\n arrRemove(this._frameBuffers, frameBuffer);\n delete frameBuffer.fbo;\n }\n }\n\n deleteGLRenderBuffer (renderbuffer: GLRenderBuffer) {\n if (renderbuffer && !this._isDestroyed) {\n this.gl.deleteRenderbuffer(renderbuffer.glHandle);\n arrRemove(this._renderBuffers, renderbuffer);\n //@ts-expect-error safe to assign\n delete renderbuffer.glHandle;\n }\n }\n\n createVertexArray (name?: string): WebGLVertexArrayObject | undefined {\n let vao;\n\n if (this.level === 2) {\n vao = (this.gl as WebGL2RenderingContext).createVertexArray() as WebGLVertexArrayObject;\n }\n if (!vao) {\n vao = this.gpu.vaoExt?.createVertexArrayOES();\n }\n if (vao) {\n arrAdd(this._vaos, vao);\n this._assignInspectorName(vao, name);\n }\n\n return vao;\n }\n\n _bindVertexArray (vao: WebGLVertexArrayObject | null) {\n (this.gl as WebGL2RenderingContext).bindVertexArray(vao || null);\n }\n\n _bindVertexArrayOES (vao: WebGLVertexArrayObject | null) {\n this.gpu.vaoExt?.bindVertexArrayOES(vao as WebGLVertexArrayObjectOES);\n }\n\n bindVertexArray (vao: WebGLVertexArrayObject | null) {\n throw Error('xxx');\n }\n\n deleteVertexArray (vao: WebGLVertexArrayObject) {\n if (!this._isDestroyed) {\n if (this.level === 2) {\n (this.gl as WebGL2RenderingContext).deleteVertexArray(vao);\n } else {\n this.gpu.vaoExt?.deleteVertexArrayOES(vao as WebGLVertexArrayObjectOES);\n }\n arrRemove(this._vaos, vao);\n }\n }\n\n destroy (haltGL?: boolean) {\n const gl = this.gl;\n\n if (gl) {\n gl.deleteFramebuffer(this._sourceFbo);\n gl.deleteFramebuffer(this._targetFbo);\n this._buffers.forEach(buffer => this.deleteGPUBuffer(buffer));\n this._buffers.length = 0;\n this.state.destroy();\n this.shaderLibrary.destroy();\n this._vaos.forEach(vao => this.deleteVertexArray(vao));\n this.emptyTexture2D.destroy();\n this.emptyTextureCube.destroy();\n this._vaos.length = 0;\n this._frameBuffers.forEach(fb => this.deleteGLFrameBuffer(fb));\n this._frameBuffers.length = 0;\n this._renderBuffers.forEach(rb => this.deleteGLRenderBuffer(rb));\n this._renderBuffers.length = 0;\n this._textures.forEach(tex=>this.deleteGLTexture(tex));\n this._textures.length = 0;\n gl.canvas.removeEventListener(GL_LOST_EVENT, this.onContextLose);\n if (haltGL) {\n const ex = gl.getExtension('WEBGL_lose_context');\n\n ex?.loseContext();\n }\n // @ts-expect-error safe to assign\n this.emptyTexture2D = this.shaderLibrary = this.state = this.gpu = this.gl = null;\n // @ts-expect-error safe to assign\n this.emptyTextureCube = null;\n }\n this._isDestroyed = true;\n }\n\n get height () {\n return this.gl?.drawingBufferHeight;\n }\n\n get width () {\n return this.gl?.drawingBufferWidth;\n }\n\n get canvas () {\n return this.gl.canvas;\n }\n\n createRenderFrame (options?: RenderFrameOptions): RenderFrame {\n throw Error();\n }\n}\n","import type { GPUCapability } from '../../types/GPUCapability';\nimport { GLGPUCapability } from '../webgl/GLGPUCapability';\n\nlet g: GLGPUCapability;\n\nexport function getDefaultGPUCapability (): GPUCapability {\n if (!g) {\n g = new GLGPUCapability({});\n }\n\n return g;\n}\n","export interface Canvas {\n width: number,\n height: number,\n\n addEventListener(name: string, handler: Function): void,\n\n removeEventListener(name: string, handler: Function): void,\n\n}\n\nexport class CanvasEmpty implements Canvas {\n width = 0;\n height = 0;\n\n addEventListener (name: string, handler: Function) {\n }\n\n removeEventListener (name: string, handler: Function) {\n }\n}\n","/**\n * 客户端创建对象,iOS和android\n */\nexport enum ResourcePlatform {\n iOS = 1,\n android = 2\n}\n\nexport interface ResourceInternal {\n readonly isDestroyed: boolean,\n destroy(): void,\n}\n","import type {\n RenderPassStorageObject,\n RenderPassAttachmentStorageType,\n} from '../../types/RenderPass';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport { consoleError } from '../common/console';\n\ninterface GLRenderBufferOptions {\n storageType: RenderPassAttachmentStorageType,\n format: GLenum,\n attachment: GLenum,\n multisample?: number,\n}\n\nexport class GLRenderBuffer implements RenderPassStorageObject {\n readonly renderer: GLGPURenderer;\n readonly storageType: RenderPassAttachmentStorageType;\n readonly internalFormat: GLenum;\n readonly glHandle: WebGLRenderbuffer;\n readonly size: [x: number, y: number];\n readonly ready!: boolean;\n readonly format: GLenum;\n readonly attachment: GLenum;\n readonly multiSample: number;\n\n constructor (renderer: GLGPURenderer, options: GLRenderBufferOptions) {\n this.storageType = options.storageType;\n this.renderer = renderer;\n this.glHandle = renderer.createGLRenderBuffer(this) as WebGLRenderbuffer;\n this.internalFormat = this.format = options.format;\n this.attachment = options.attachment;\n this.size = [0, 0];\n this.multiSample = options.multisample ?? 0;\n }\n\n setSize (width: number, height: number): GLRenderBuffer {\n if (width !== this.size[0] || height !== this.size[1]) {\n const internalFormat = this.internalFormat;\n const state = this.renderer.state;\n const gl = this.renderer.gl;\n\n state.bindRenderBuffer(gl.RENDERBUFFER, this.glHandle);\n if (width && height) {\n gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, this.size[0] = width, this.size[1] = height);\n if (this.multiSample > 1) {\n const if2 = internalFormat === gl.DEPTH_STENCIL ? (gl as WebGL2RenderingContext).DEPTH24_STENCIL8 : internalFormat;\n\n (gl as WebGL2RenderingContext).renderbufferStorageMultisample(gl.RENDERBUFFER, this.multiSample, if2, width, height);\n }\n } else {\n consoleError(`invalid render buffer size ${width}x${height}`);\n }\n }\n\n return this;\n }\n\n destroy () {\n if (this.renderer) {\n this.renderer.deleteGLRenderBuffer(this);\n //@ts-expect-error safe to assign\n this.renderer = this.glHandle = this.ready = null;\n }\n }\n}\n","import type { GLGPURenderer } from './GLGPURenderer';\nimport type {\n RenderPassDepthStencilAttachmentOptions,\n RenderPassStorageObject,\n RenderPassStoreAction,\n} from '../../types/RenderPass';\nimport {\n RenderPassAttachmentStorageType,\n RenderPassDestroyAttachmentType,\n TextureStoreAction,\n} from '../../types/RenderPass';\nimport { GLRenderBuffer } from './GLRenderBuffer';\nimport { constants } from './constants';\nimport { GLTexture } from './GLTexture';\nimport { TextureSourceType } from '../../types/Texture';\nimport { arrAdd, forEach } from '../common/utils';\nimport type { MarsTexture } from '../render/MarsTexture';\n\nexport interface GLFrameBufferOptions {\n attachments: GLTexture[],\n depthStencilAttachment?: RenderPassDepthStencilAttachmentOptions,\n isCustomViewport?: boolean,\n viewport: [x: number, y: number, width: number, height: number],\n viewportScale?: number,\n storeAction: RenderPassStoreAction,\n name?: string,\n multisample?: number,\n}\n\nlet seed = 1;\n\nexport class GLFrameBuffer {\n\n readonly renderer: GLGPURenderer;\n\n readonly viewport: [x: number, y: number, width: number, height: number];\n\n readonly ready!: boolean;\n\n readonly depthStencilStorageType: RenderPassAttachmentStorageType;\n\n readonly name: string;\n\n externalStorage!: boolean;\n\n storeAction: RenderPassStoreAction;\n\n storeInvalidAttachments?: GLenum[];\n\n isCustomViewport: boolean;\n\n depthStencilRenderBuffer?: GLRenderBuffer;\n\n depthTexture?: GLTexture;\n\n stencilTexture?: GLTexture;\n\n colorTextures!: GLTexture[];\n\n fbo?: WebGLFramebuffer;\n\n multisampleFbo?: WebGLFramebuffer;\n\n multisampleRbs: GLRenderBuffer[] = [];\n\n viewportScale: number;\n\n readonly multisample: number;\n\n readonly _attachmentHandles: WebGLTexture[];\n\n constructor (options: GLFrameBufferOptions, renderer: GLGPURenderer) {\n this.renderer = renderer;\n this.depthStencilStorageType = options.depthStencilAttachment?.storageType || RenderPassAttachmentStorageType.none;\n this.viewport = options.viewport;\n this.isCustomViewport = !!options.isCustomViewport;\n this.viewportScale = options.viewportScale || 1;\n this.name = options.name || ('GLFrameBuffer' + seed++);\n this.storeAction = options.storeAction;\n this._attachmentHandles = [];\n this.multisample = renderer.level > 1 ? options.multisample || 0 : 0;\n this.checkOptions(options);\n }\n\n get stencilStorage (): RenderPassStorageObject | undefined {\n const storageType = this.depthStencilStorageType;\n\n if (storageType !== RenderPassAttachmentStorageType.depth_16_opaque) {\n return this.depthStencilRenderBuffer;\n }\n }\n\n get depthStorage (): RenderPassStorageObject | undefined {\n if (this.depthStencilStorageType !== RenderPassAttachmentStorageType.stencil_8_opaque) {\n return this.depthStencilRenderBuffer;\n }\n }\n\n _getHandles () {\n const handles = this._attachmentHandles;\n\n handles.length = 0;\n this.colorTextures.forEach(c => arrAdd(handles, c.glHandle));\n if (this.stencilTexture) {\n arrAdd(handles, this.stencilTexture.glHandle);\n }\n if (this.depthTexture) {\n arrAdd(handles, this.depthTexture.glHandle);\n }\n }\n\n checkOptions (options: GLFrameBufferOptions) {\n const renderer = this.renderer;\n const capability = renderer.gpu.capability;\n const depthStencilAttachment = options.depthStencilAttachment || { storageType: RenderPassAttachmentStorageType.none };\n const willUseFbo = options.attachments.length > 0;\n const willMultisample = this.multisample > 1 ;\n\n this.externalStorage = false;\n let separateDepthStencil = true;\n\n if (options.attachments.length > 1 && !capability.drawBuffers) {\n throw Error('multiple color attachments not support');\n }\n const optDepthStencilTex: GLTexture | undefined = (options.depthStencilAttachment?.texture as MarsTexture)?.internal;\n\n const readableDepthStencilTextures = capability.readableDepthStencilTextures;\n\n this.colorTextures = options.attachments.slice();\n if (!willUseFbo && depthStencilAttachment.storageType !== RenderPassAttachmentStorageType.none) {\n throw Error('use depth stencil attachment without color attachments');\n }\n if (willUseFbo) {\n this.fbo = renderer.createGLFrameBuffer(this, this.name)!;\n }\n if (willMultisample) {\n this.multisampleFbo = renderer.createGLFrameBuffer(this, this.name + '_multisample')!;\n }\n const storageType = depthStencilAttachment.storageType;\n\n if (storageType === RenderPassAttachmentStorageType.depth_stencil_opaque) {\n if (depthStencilAttachment.storage) {\n if (depthStencilAttachment.storage instanceof GLRenderBuffer) {\n if (this.multisample !== depthStencilAttachment.storage.multiSample && this.multisample > 1) {\n throw Error('fbo multisample not eql depth stencil attachment');\n }\n this.depthStencilRenderBuffer = depthStencilAttachment.storage;\n this.externalStorage = true;\n } else {\n throw Error('invalid depth stencil attachment storage');\n }\n } else {\n this.depthStencilRenderBuffer = new GLRenderBuffer(renderer, {\n format: constants.DEPTH_STENCIL,\n attachment: constants.DEPTH_STENCIL_ATTACHMENT,\n multisample:this.multisample,\n storageType,\n });\n }\n separateDepthStencil = false;\n } else if (storageType === RenderPassAttachmentStorageType.depth_16_opaque) {\n if (depthStencilAttachment.storage) {\n if (this.multisample !== depthStencilAttachment.storage.multiSample && this.multisample > 1) {\n throw Error('fbo multisample not eql depth attachment');\n }\n if (depthStencilAttachment.storage instanceof GLRenderBuffer) {\n this.depthStencilRenderBuffer = depthStencilAttachment.storage;\n this.externalStorage = true;\n } else {\n throw Error('invalid depth attachment storage');\n }\n } else {\n this.depthStencilRenderBuffer = new GLRenderBuffer(renderer, {\n attachment: constants.DEPTH_ATTACHMENT,\n multisample:this.multisample,\n format: constants.DEPTH_COMPONENT16,\n storageType,\n });\n }\n } else if (storageType === RenderPassAttachmentStorageType.stencil_8_opaque) {\n if (depthStencilAttachment.storage) {\n if (depthStencilAttachment.storage instanceof GLRenderBuffer) {\n if (this.multisample !== depthStencilAttachment.storage.multiSample && this.multisample > 1) {\n throw Error('fbo multisample not eql stencil attachment');\n }\n this.depthStencilRenderBuffer = depthStencilAttachment.storage;\n this.externalStorage = true;\n } else {\n throw Error('invalid stencil attachment storage');\n }\n } else {\n this.depthStencilRenderBuffer = new GLRenderBuffer(renderer, {\n attachment: constants.STENCIL_ATTACHMENT,\n format: constants.STENCIL_INDEX8,\n multisample: this.multisample,\n storageType,\n });\n }\n } else if (storageType === RenderPassAttachmentStorageType.depth_16_texture) {\n if (!readableDepthStencilTextures) {\n throw Error('depth texture is not support in framebuffer');\n }\n this.depthTexture = optDepthStencilTex || new GLTexture({\n sourceType: TextureSourceType.framebuffer,\n format: constants.DEPTH_COMPONENT,\n internalFormat: renderer.gpu.internalFormatDepth16,\n type: constants.UNSIGNED_SHORT,\n name: `${this.name}##depthTex`,\n }, renderer);\n } else if (storageType === RenderPassAttachmentStorageType.depth_24_stencil_8_texture) {\n if (!readableDepthStencilTextures) {\n throw Error('depth stencil texture is not support in framebuffer');\n }\n this.depthTexture = this.stencilTexture = optDepthStencilTex || new GLTexture({\n sourceType: TextureSourceType.framebuffer,\n format: constants.DEPTH_STENCIL,\n internalFormat: renderer.gpu.internalFormatDepth24_stencil8,\n type: renderer.gpu.UNSIGNED_INT_24_8,\n name: `${this.name}##dpthStclTex`,\n }, renderer);\n separateDepthStencil = true;\n }\n this.storeInvalidAttachments = this.getStoreAttachments(this.storeAction, separateDepthStencil);\n this._getHandles();\n }\n\n getStoreAttachments (storeAction: RenderPassStoreAction, separateDepthStencil: boolean): GLenum[] | undefined {\n const gl = this.renderer.gl as WebGL2RenderingContext;\n const colorLen = this.colorTextures.length;\n\n if (storeAction && this.renderer.gpu.level == 2 && colorLen > 0) {\n const attachments: GLenum[] = [];\n\n if (storeAction.depthAction === TextureStoreAction.clear && this.depthStorage) {\n arrAdd(attachments, separateDepthStencil ? gl.DEPTH_ATTACHMENT : gl.DEPTH_STENCIL_ATTACHMENT);\n }\n if (storeAction.stencilAction === TextureStoreAction.clear && this.stencilStorage) {\n arrAdd(attachments, separateDepthStencil ? gl.STENCIL_ATTACHMENT : gl.DEPTH_STENCIL_ATTACHMENT);\n }\n if (storeAction.colorAction === TextureStoreAction.clear) {\n for (let i = 0; i < colorLen; i++) {\n arrAdd(attachments, (gl as unknown as Record<string, GLenum>)[`COLOR_ATTACHMENT${i}`]);\n }\n }\n\n return attachments;\n }\n }\n\n unbind () {\n const att = this.storeInvalidAttachments;\n\n this.resolveMultiSample();\n if (att && att.length) {\n const gl = this.renderer.gl as WebGL2RenderingContext;\n\n gl.invalidateFramebuffer(gl.FRAMEBUFFER, att);\n }\n const state = this.renderer.state;\n\n state.bindSystemFramebuffer();\n }\n\n bind () {\n const gl = this.renderer.gl;\n const state = this.renderer.state;\n const FRAMEBUFFER = gl.FRAMEBUFFER;\n const viewport = this.viewport;\n const multisampleFbo = this.multisampleFbo;\n\n if (multisampleFbo) {\n\n state.bindFramebuffer(FRAMEBUFFER, multisampleFbo);\n state.viewport(viewport[0], viewport[1], viewport[2], viewport[3]);\n } else if (this.fbo) {\n\n state.bindFramebuffer(FRAMEBUFFER, this.fbo);\n state.viewport(viewport[0], viewport[1], viewport[2], viewport[3]);\n const r = this.renderer.emptyTexture2D.glHandle;\n const handles = this._attachmentHandles;\n\n //in case frame texture loop\n forEach(state._textureUnitDict, function (t, unit) {\n if (t !== r && handles.includes(t as WebGLTexture)) {\n state.activeTexture(+unit);\n state.bindTexture(constants.TEXTURE_2D, r, true);\n }\n });\n }\n if (!this.ready) {\n const { depthStencilRenderBuffer, depthTexture, stencilTexture } = this;\n\n state.activeTexture(gl.TEXTURE0);\n if (depthStencilRenderBuffer) {\n depthStencilRenderBuffer.setSize(viewport[2], viewport[3]);\n gl.framebufferRenderbuffer(FRAMEBUFFER, depthStencilRenderBuffer.attachment, gl.RENDERBUFFER, depthStencilRenderBuffer.glHandle);\n } else if (depthTexture) {\n if (multisampleFbo) {\n let attachment = gl.DEPTH_ATTACHMENT;\n let format = gl.DEPTH_COMPONENT16;\n\n if (this.depthStencilStorageType === RenderPassAttachmentStorageType.depth_24_stencil_8_texture) {\n attachment = gl.DEPTH_STENCIL_ATTACHMENT;\n format = (gl as WebGL2RenderingContext).DEPTH24_STENCIL8;\n }\n const renderBuffer = new GLRenderBuffer(this.renderer, {\n storageType:this.depthStencilStorageType,\n attachment,\n format,\n multisample:this.multisample,\n });\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, multisampleFbo);\n this.multisampleRbs.push(renderBuffer);\n renderBuffer.setSize(viewport[2], viewport[3]);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, renderBuffer.glHandle);\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.fbo!);\n }\n depthTexture.update({\n sourceType: TextureSourceType.framebuffer,\n data: { width: viewport[2], height: viewport[3] },\n });\n const attachment = depthTexture && stencilTexture ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;\n\n gl.framebufferTexture2D(FRAMEBUFFER, attachment, gl.TEXTURE_2D, depthTexture.glHandle as WebGLTexture, 0);\n }\n this.resetColorTextures(this.colorTextures);\n [multisampleFbo, this.fbo].forEach(function (fbo) {\n if (fbo) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n const status = gl.checkFramebufferStatus(FRAMEBUFFER);\n\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n const error = gl.getError();\n\n throw Error(`framebuffer failed status ${status} error:${error}`);\n }\n }\n });\n\n //@ts-expect-error safe to assign\n this.ready = true;\n }\n }\n\n resolveMultiSample () {\n const multisampleFbo = this.multisampleFbo;\n const fbo = this.fbo;\n\n if (multisampleFbo && fbo) {\n const gl = this.renderer.gl as WebGL2RenderingContext;\n\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, multisampleFbo);\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, fbo);\n const vp = this.viewport;\n let bit = gl.COLOR_BUFFER_BIT;\n\n if (this.depthTexture) {\n bit = bit | gl.DEPTH_BUFFER_BIT;\n }\n gl.blitFramebuffer(\n 0, 0, vp[2], vp[3], // Source region\n 0, 0, vp[2], vp[3], // Destination region\n bit, gl.LINEAR // Buffer mask and filter\n );\n gl.bindFramebuffer(gl.FRAMEBUFFER, multisampleFbo);\n }\n }\n\n resetColorTextures (colors?: GLTexture[]) {\n const gl: WebGLRenderingContext = this.renderer.gl;\n const gpu = this.renderer.gpu;\n const viewport = this.viewport;\n const data = { width: viewport[2], height: viewport[3] };\n const buffers: boolean[] = [];\n\n if (colors) {\n this.colorTextures = colors.slice();\n }\n this.renderer.state.activeTexture(gl.TEXTURE0);\n const multisampleFBO = this.multisampleFbo;\n\n this.colorTextures.forEach((tex, index) => {\n tex.update({ sourceType: TextureSourceType.framebuffer, data });\n if (multisampleFBO) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, multisampleFBO);\n\n const renderBuffer = new GLRenderBuffer(this.renderer, {\n format:(gl as WebGL2RenderingContext).RGBA8,\n attachment: gl.COLOR_ATTACHMENT0 + index,\n storageType: RenderPassAttachmentStorageType.color,\n multisample:this.multisample,\n });\n\n this.multisampleRbs.push(renderBuffer);\n renderBuffer.setSize(tex.width, tex.height);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + index, gl.RENDERBUFFER, renderBuffer.glHandle);\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.fbo!);\n gpu.framebufferTexture2D(gl, gl.FRAMEBUFFER, index, gl.TEXTURE_2D, tex.glHandle as WebGLTexture);\n buffers.push(true);\n });\n gpu.drawBuffers(gl, buffers);\n this._getHandles();\n }\n\n destroy (opt?: { depthStencilAttachment?: RenderPassDestroyAttachmentType }) {\n const renderer = this.renderer;\n\n if (renderer) {\n renderer.deleteGLFrameBuffer(this);\n delete this.fbo;\n const clearAttachment = opt?.depthStencilAttachment ? opt.depthStencilAttachment : RenderPassDestroyAttachmentType.force;\n\n if (clearAttachment === RenderPassDestroyAttachmentType.force || (clearAttachment === RenderPassDestroyAttachmentType.keepExternal && !this.externalStorage)) {\n this.depthStencilRenderBuffer?.destroy();\n this.depthTexture?.destroy();\n }\n //@ts-expect-error safe to assign\n this.renderer = this.depthStencilRenderBuffer = null;\n }\n }\n\n resize (x: number, y: number, width: number, height: number) {\n const vp = this.viewport;\n\n if (vp[0] !== x || vp[1] !== y || vp[2] !== width || vp[3] !== height) {\n //@ts-expect-error safe to assign\n this.viewport = [x, y, width, height];\n //@ts-expect-error safe to assign\n this.ready = false;\n this.bind();\n }\n }\n}\n","export interface RequestOptions {\n method?: 'get' | 'post',\n responseType?: 'json' | 'blob' | 'arraybuffer',\n data?: XMLHttpRequestBodyInit | null,\n}\n\n// const imageBitMapAvailable = typeof ImageBitmap === 'function' && typeof createImageBitmap == 'function';\nconst imageBitMapAvailable = false;//never use imagebitmap because its dark edge\n\nexport function requestAsync (url: string, options?: RequestOptions): Promise<any> {\n const opt: RequestOptions = options || {};\n\n return new Promise(function (resolve, reject) {\n const xhr = new XMLHttpRequest();\n\n xhr.responseType = opt.responseType || 'json';\n xhr.addEventListener('load', () => resolve(xhr.response));\n xhr.addEventListener('error', reject);\n xhr.open(opt.method || 'get', url);\n xhr.send(opt.data);\n });\n}\n\nexport function loadImageAsync (imgOrURL: string | HTMLImageElement | Blob, options?: { asImageBitMap?: boolean, revokeURL?: boolean }): Promise<HTMLImageElement | ImageBitmap> {\n let img: HTMLImageElement;\n let revoke = options?.revokeURL;\n\n if (typeof imgOrURL === 'string') {\n if (options?.asImageBitMap && imageBitMapAvailable) {\n return requestAsync(imgOrURL, { responseType: 'blob' }).then(blob => createImageBitmap(blob));\n }\n const src = imgOrURL;\n\n img = new Image();\n if (!/^data:/.test(src)) {\n img.crossOrigin = '*';\n }\n img.src = src;\n } else {\n img = imgOrURL as HTMLImageElement;\n if (options?.asImageBitMap && imageBitMapAvailable) {\n return createImageBitmap(img);\n }\n if (imgOrURL instanceof Blob) {\n img = new Image();\n img.src = URL.createObjectURL(imgOrURL);\n revoke = true;\n }\n }\n if (img.complete) {\n return Promise.resolve(img);\n }\n\n return new Promise(function (resolve, reject) {\n img.onload = () => {\n img.onload = null;\n if (revoke) {\n URL.revokeObjectURL(img.src);\n }\n\n return resolve(img);\n };\n img.onerror = err => {\n img.onerror = null;\n if (revoke) {\n URL.revokeObjectURL(img.src);\n }\n\n return reject(err);\n };\n });\n}\n","import type { TextureOptions, TypedArray } from '../../types';\nimport { TextureSourceType } from '../../types/Texture';\nimport { constants } from './constants';\nimport { consoleWarn } from '../common/console';\n\nconst HEADER_LEN = 12 + 13 * 4; // identifier + header elements (not including key value meta-data pairs)\nconst COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()\n//const COMPRESSED_3D = 1; // uses a gl.compressedTexImage3D()\nconst TEX_2D = 2; // uses a gl.texImage2D()\n\n//const TEX_3D = 3; // uses a gl.texImage3D()\nexport class KhronosTextureContainer {\n arrayBuffer: ArrayBuffer;\n baseOffset: number;\n glType: number;\n glTypeSize: number;\n glFormat: number;\n glInternalFormat: number;\n glBaseInternalFormat: number;\n pixelWidth: number;\n pixelHeight: number;\n loadType!: number;\n pixelDepth: number;\n numberOfArrayElements: number;\n numberOfFaces: number;\n numberOfMipmapLevels: number;\n bytesOfKeyValueData: number;\n\n constructor (arrayBuffer: ArrayBuffer, facesExpected: number, baseOffset = 0) {\n this.arrayBuffer = arrayBuffer;\n this.baseOffset = baseOffset;\n\n // Test that it is a ktx formatted file, based on the first 12 bytes, character representation is:\n // '´', 'K', 'T', 'X', ' ', '1', '1', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n // 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A\n const identifier = new Uint8Array(this.arrayBuffer, this.baseOffset, 12);\n\n if (\n identifier[0] !== 0xab ||\n identifier[1] !== 0x4b ||\n identifier[2] !== 0x54 ||\n identifier[3] !== 0x58 ||\n identifier[4] !== 0x20 ||\n identifier[5] !== 0x31 ||\n identifier[6] !== 0x31 ||\n identifier[7] !== 0xbb ||\n identifier[8] !== 0x0d ||\n identifier[9] !== 0x0a ||\n identifier[10] !== 0x1a ||\n identifier[11] !== 0x0a\n ) {\n throw Error('texture missing KTX identifier');\n }\n\n // load the reset of the header in native 32 bit uint\n const dataSize = Uint32Array.BYTES_PER_ELEMENT;\n const headerDataView = new DataView(this.arrayBuffer, this.baseOffset + 12, 13 * dataSize);\n const endianness = headerDataView.getUint32(0, true);\n const littleEndian = endianness === 0x04030201;\n\n this.glType = headerDataView.getUint32(1 * dataSize, littleEndian); // must be 0 for compressed textures\n this.glTypeSize = headerDataView.getUint32(2 * dataSize, littleEndian); // must be 1 for compressed textures\n this.glFormat = headerDataView.getUint32(3 * dataSize, littleEndian); // must be 0 for compressed textures\n this.glInternalFormat = headerDataView.getUint32(4 * dataSize, littleEndian); // the value of arg passed to gl.compressedTexImage2D(,,x,,,,)\n this.glBaseInternalFormat = headerDataView.getUint32(5 * dataSize, littleEndian); // specify GL_RGB, GL_RGBA, GL_ALPHA, etc (un-compressed only)\n this.pixelWidth = headerDataView.getUint32(6 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage2D(,,,x,,,)\n this.pixelHeight = headerDataView.getUint32(7 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage2D(,,,,x,,)\n this.pixelDepth = headerDataView.getUint32(8 * dataSize, littleEndian); // level 0 value of arg passed to gl.compressedTexImage3D(,,,,,x,,)\n this.numberOfArrayElements = headerDataView.getUint32(9 * dataSize, littleEndian); // used for texture arrays\n this.numberOfFaces = headerDataView.getUint32(10 * dataSize, littleEndian); // used for cubemap textures, should either be 1 or 6\n this.numberOfMipmapLevels = headerDataView.getUint32(11 * dataSize, littleEndian); // number of levels; disregard possibility of 0 for compressed textures\n this.bytesOfKeyValueData = headerDataView.getUint32(12 * dataSize, littleEndian); // the amount of space after the header for meta-data\n\n // value of zero is an indication to generate mipmaps @ runtime. Not usually allowed for compressed, so disregard.\n this.numberOfMipmapLevels = Math.max(1, this.numberOfMipmapLevels);\n\n if (this.pixelHeight === 0 || this.pixelDepth !== 0) {\n consoleWarn('only 2D textures currently supported');\n\n return;\n }\n if (this.numberOfArrayElements !== 0) {\n consoleWarn('texture arrays not currently supported');\n\n return;\n }\n if (this.numberOfFaces !== facesExpected) {\n consoleWarn('number of faces expected' + facesExpected + ', but found ' + this.numberOfFaces);\n\n return;\n }\n // we now have a completely validated file, so could use existence of loadType as success\n // would need to make this more elaborate & adjust checks above to support more than one load type\n if (this.glType === 0) {\n this.loadType = COMPRESSED_2D;\n } else {\n this.loadType = TEX_2D;\n }\n }\n\n mipmaps (loadMipmaps: boolean): Array<{ data: TypedArray, width: number, height: number }> {\n const mipmaps: Array<{ data: TypedArray, width: number, height: number }> = [];\n\n // initialize width & height for level 1\n let dataOffset = HEADER_LEN + this.bytesOfKeyValueData;\n let width = this.pixelWidth;\n let height = this.pixelHeight;\n const mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1;\n\n for (let level = 0; level < mipmapCount; level++) {\n const imageSize = new Int32Array(this.arrayBuffer, this.baseOffset + dataOffset, 1)[0]; // size per face, since not supporting array cubemaps\n\n for (let face = 0; face < this.numberOfFaces; face++) {\n const byteArray = new Uint8Array(this.arrayBuffer, this.baseOffset + dataOffset + 4, imageSize);\n\n mipmaps.push({\n data: byteArray,\n width,\n height,\n });\n\n dataOffset += imageSize + 4; // size of the image + 4 for the imageSize field\n dataOffset += 3 - ((imageSize + 3) % 4); // add padding for odd sized image\n }\n width = Math.max(1.0, width * 0.5);\n height = Math.max(1.0, height * 0.5);\n }\n\n return mipmaps;\n }\n}\n\nexport function getCompressedTextureOptions (data: ArrayBuffer): TextureOptions {\n const ktx = new KhronosTextureContainer(data, 1);\n const useMipmaps = ktx.numberOfMipmapLevels >= Math.floor(Math.log2(Math.max(ktx.pixelWidth, ktx.pixelHeight)) + 1);\n\n return {\n sourceType: TextureSourceType.compressed,\n type: ktx.glType,\n target: ktx.numberOfFaces === 6 ? constants.TEXTURE_CUBE_MAP : constants.TEXTURE_2D,\n internalFormat: ktx.glInternalFormat,\n format: ktx.glFormat,\n mipmaps: ktx.mipmaps(useMipmaps),\n };\n}\n","import type {\n Texture,\n Texture2DOptions,\n TextureConfigOptions,\n TextureCubeOptions,\n TextureCubeSourceURLMap,\n TextureFactory,\n TextureFactorySource2DBinaryMipmapsFrom,\n TextureFactorySource2DFrom,\n TextureFactorySource2DMipmapsFrom,\n TextureFactorySourceCubeBinaryMipmapsFrom,\n TextureFactorySourceCubeFrom,\n TextureFactorySourceCubeMipmapsFrom,\n TextureFactorySourceFrom,\n TextureOptions,\n TextureSourceCubeData,\n} from '../../types/Texture';\nimport {\n TextureSourceType,\n} from '../../types/Texture';\nimport { loadImageAsync, requestAsync } from '../common/request';\nimport { getCompressedTextureOptions } from '../webgl/KhronosTextureContainer';\nimport { isObj, isStr } from '../common/utils';\nimport { constants } from '../webgl/constants';\nimport { imageBitMapAvailable } from '../webgl/GLTexture';\nimport type { TypedArray, vec2 } from '../../types';\n\nconst loadOptions = { asImageBitMap: true };\n\nexport class MarsTextureFactory implements TextureFactory {\n reloadPending: { [key: string]: Promise<Texture> };\n\n constructor () {\n this.reloadPending = {};\n }\n\n loadMipmapImagesAsync (pointers: vec2[], bin: ArrayBuffer) {\n return Promise.all(pointers.map(function (pointer) {\n const blob = new Blob([new Uint8Array(bin, pointer[0], pointer[1])]);\n\n return loadImageAsync(blob, { asImageBitMap: true });\n }));\n }\n\n loadImageAsync (url: string | HTMLImageElement | Blob): Promise<HTMLImageElement | ImageBitmap> {\n return loadImageAsync(url, loadOptions);\n }\n\n requestBinaryAsync (url: string): Promise<ArrayBuffer> {\n return requestAsync(url, { responseType: 'arraybuffer' });\n }\n\n loadImageBinaryAsync (binary: ArrayBuffer | TypedArray | Blob, mime?: string): Promise<HTMLImageElement | ImageBitmap> {\n let blob = binary as Blob;\n\n if (!(binary instanceof Blob)) {\n blob = new Blob([binary], { type: mime || 'image/png' });\n }\n if (imageBitMapAvailable) {\n return createImageBitmap(blob);\n }\n const url = URL.createObjectURL(blob);\n\n return loadImageAsync(url, { revokeURL: true });\n }\n\n canOffloadTexture (texture: Texture): boolean {\n const data = texture.options.sourceFrom;\n\n if (data) {\n const type = data.type;\n\n if (type === TextureSourceType.compressed || type === TextureSourceType.image) {\n if ((data as TextureFactorySourceCubeFrom).target === constants.TEXTURE_CUBE_MAP) {\n return isObj((data as TextureFactorySourceCubeFrom).map);\n }\n\n return isStr((data as TextureFactorySource2DFrom).url, true);\n }\n if (type === TextureSourceType.mipmaps) {\n if ((data as TextureFactorySourceCubeBinaryMipmapsFrom).bin) {\n return (data as TextureFactorySourceCubeBinaryMipmapsFrom).mipmaps.length > 0;\n }\n if ((data as TextureFactorySourceCubeMipmapsFrom).target === constants.TEXTURE_CUBE_MAP) {\n return (data as TextureFactorySourceCubeMipmapsFrom).maps.every(map => isObj(map));\n }\n\n return (data as TextureFactorySource2DMipmapsFrom).urls.every(url => isStr(url, true));\n }\n }\n\n return false;\n }\n\n loadSourceAsync (sourceFrom: TextureFactorySourceFrom, config?: TextureConfigOptions): Promise<TextureOptions> {\n // cube without mipmap\n if ((sourceFrom as TextureFactorySourceCubeFrom).target === constants.TEXTURE_CUBE_MAP && sourceFrom.type !== TextureSourceType.mipmaps) {\n return this._loadCubeMapAsync((sourceFrom as TextureFactorySourceCubeFrom).map).then(function (cube) {\n return Object.assign({}, config, {\n sourceType: TextureSourceType.image,\n cube,\n sourceFrom: {\n type: TextureSourceType.image,\n map: Object.assign({}, (sourceFrom as TextureFactorySourceCubeFrom).map),\n target: constants.TEXTURE_CUBE_MAP,\n },\n target: constants.TEXTURE_CUBE_MAP,\n }) as TextureCubeOptions;\n }, catchError);\n } else if (sourceFrom.type === TextureSourceType.image) {\n // image without mipmap\n return this.loadImageAsync((sourceFrom as TextureFactorySource2DFrom).url).then(image => Object.assign({}, config, {\n image,\n sourceType: TextureSourceType.image,\n sourceFrom: {\n url: (sourceFrom as TextureFactorySource2DFrom).url,\n type: sourceFrom.type,\n target: constants.TEXTURE_2D,\n },\n }) as Texture2DOptions, catchError);\n } else if (sourceFrom.type === TextureSourceType.video) {\n return this._loadVideoAsync((sourceFrom).url).then(video => Object.assign({}, config, {\n video,\n sourceType: TextureSourceType.video,\n }) as Texture2DOptions, catchError);\n } else if (sourceFrom.type === TextureSourceType.compressed) {\n return this.requestBinaryAsync(sourceFrom.url).then(function (arrayBuffer: ArrayBuffer) {\n return Object.assign(getCompressedTextureOptions(arrayBuffer), config, {\n sourceFrom: { url: sourceFrom.url, type: TextureSourceType.compressed },\n });\n }, catchError);\n } else if (sourceFrom.type === TextureSourceType.mipmaps) {\n const target = sourceFrom.target;\n\n if ((sourceFrom as TextureFactorySourceCubeBinaryMipmapsFrom).bin) {\n return requestAsync((sourceFrom as TextureFactorySourceCubeBinaryMipmapsFrom).bin, { responseType: 'arraybuffer' })\n .then((data: ArrayBuffer): Promise<Array<ImageBitmap | HTMLImageElement> | Array<ImageBitmap | HTMLImageElement>[]> => {\n if (sourceFrom.target === constants.TEXTURE_CUBE_MAP) {\n const source = sourceFrom as TextureFactorySourceCubeBinaryMipmapsFrom;\n\n return Promise.all(source.mipmaps.map(mipmaps => this.loadMipmapImagesAsync(mipmaps, data)));\n } else {\n const source = sourceFrom as TextureFactorySource2DBinaryMipmapsFrom;\n\n return this.loadMipmapImagesAsync(source.mipmaps, data);\n }\n }).then(function (mipmaps) {\n const target = sourceFrom.target || constants.TEXTURE_2D;\n const mipmapsSource = (sourceFrom as TextureFactorySourceCubeBinaryMipmapsFrom).mipmaps;\n const source = {\n mipmaps,\n target,\n sourceType: TextureSourceType.mipmaps,\n sourceFrom: {\n bin: (sourceFrom as TextureFactorySourceCubeBinaryMipmapsFrom).bin,\n mipmaps: target === constants.TEXTURE_2D ? mipmapsSource.slice() : mipmapsSource.map(s => s.slice()),\n target,\n type: TextureSourceType.mipmaps,\n },\n } as TextureOptions;\n\n return Object.assign({}, config, source);\n });\n }\n if (target === constants.TEXTURE_2D || !target) {\n const urls = (sourceFrom as TextureFactorySource2DMipmapsFrom).urls;\n\n return Promise.all(urls.map(url => this.loadImageAsync(url))).then(mipmaps => {\n return Object.assign({}, config, {\n target: constants.TEXTURE_2D,\n sourceType: TextureSourceType.mipmaps,\n mipmaps,\n sourceFrom: {\n type: sourceFrom.type,\n urls: urls.slice(),\n target: constants.TEXTURE_2D,\n },\n }) as Texture2DOptions;\n }, catchError);\n } else if (target === constants.TEXTURE_CUBE_MAP) {\n const maps = (sourceFrom as TextureFactorySourceCubeMipmapsFrom).maps;\n\n return Promise.all(maps.map(map => this._loadCubeMapAsync(map))).then(mipmaps => {\n return Object.assign({}, config, {\n sourceType: TextureSourceType.mipmaps,\n target: constants.TEXTURE_CUBE_MAP,\n mipmaps,\n sourceFrom: {\n target: constants.TEXTURE_CUBE_MAP,\n type: sourceFrom.type,\n maps: (sourceFrom as TextureFactorySourceCubeMipmapsFrom).maps.map(map => Object.assign({}, map)),\n },\n }) as TextureCubeOptions;\n }, catchError);\n }\n }\n\n return Promise.reject(new Error('invalid resource type:' + sourceFrom.type));\n\n function catchError (error: Error): TextureOptions {\n throw Error('loadFail:' + JSON.stringify(config));\n }\n }\n\n _loadVideoAsync (url: string | null | MediaProvider): Promise<HTMLVideoElement> {\n if (IS_NODE) {\n return Promise.reject('video not support');\n }\n const video = document.createElement('video');\n\n video.setAttribute('renderer', 'standard');\n if (isObj(url)) {\n video.srcObject = url as MediaProvider;\n } else {\n video.src = url as string;\n }\n video.crossOrigin = 'anonymous';\n video.muted = true;\n video.setAttribute('playsinline', 'playsinline');\n const p = video.play();\n\n return p ? p.then(() => video) : new Promise(function (resolve, reject) {\n video.addEventListener('loadeddata', function h () {\n resolve(video);\n video.removeEventListener('loadeddata', h);\n }, true);\n video.addEventListener('error', function (e) {\n reject(e);\n });\n });\n }\n\n _loadCubeMapAsync (map: TextureCubeSourceURLMap | string[]): Promise<TextureSourceCubeData> {\n return Promise.all(map.map(key => this.loadImageAsync(key))) as Promise<TextureSourceCubeData>;\n }\n\n loadCompressedTextureFromArrayBuffer (arrayBuffer: ArrayBuffer, options?: TextureOptions): TextureOptions {\n return Object.assign(getCompressedTextureOptions(arrayBuffer), options);\n }\n\n reloadTextureAsync (texture: Texture): Promise<Texture> {\n const id = texture.id;\n const o = this.reloadPending[id];\n\n if (o) {\n return o;\n }\n if (texture.options.sourceFrom) {\n return this.reloadPending[id] = this.loadSourceAsync(texture.options.sourceFrom as TextureFactorySourceFrom).then(opt => {\n texture.updateSource(opt);\n delete this.reloadPending[id];\n\n return texture;\n }).catch(ex => {\n delete this.reloadPending[id];\n throw ex;\n });\n }\n\n return Promise.reject('no source from');\n }\n\n}\n\nlet g: TextureFactory;\n\nexport function getDefaultTextureFactory (): TextureFactory {\n if (!g) {\n g = new MarsTextureFactory();\n }\n\n return g;\n}\n\nexport function setDefaultTextureFactory (factory: TextureFactory) {\n g = factory;\n}\n","import type {\n Texture,\n Texture2DSourceOptionsData,\n Texture2DSourceOptionsImage,\n Texture2DSourceOptionsNone,\n Texture2DSourceOptionsVideo,\n TextureCubeSourceOptionsImage,\n TextureOptions,\n TextureSourceOptions } from '../../types/Texture';\nimport {\n TextureSourceType,\n} from '../../types/Texture';\nimport type { GLGPURenderer } from '../webgl/GLGPURenderer';\nimport { GLTexture, imageBitMapAvailable } from '../webgl/GLTexture';\nimport type { Immutable } from '../../types/type';\nimport { getDefaultTextureFactory } from './MarsTextureFactory';\nimport { constants } from '../webgl/constants';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { forEach, isObj, throwDestroyedError } from '../common/utils';\n\nexport function closeImageBitMap (img: any) {\n if (imageBitMapAvailable) {\n if (img instanceof ImageBitmap) {\n img.close();\n } else if (img instanceof Array) {\n img.forEach(closeImageBitMap);\n } else if (isObj(img)) {\n forEach(img, closeImageBitMap);\n }\n }\n}\n\nlet seed = 1;\n\nexport class MarsTexture implements Texture {\n readonly id: string;\n readonly options: Immutable<TextureOptions>;\n readonly sourceType: TextureSourceType;\n readonly name: string;\n readonly renderer?: MarsRenderer;\n readonly internal?: GLTexture;\n private _offloaded!: boolean;\n\n private _isDestroyed = false;\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n constructor (options: TextureOptions | GLTexture, renderer?: MarsRenderer) {\n this.id = 'Tex' + seed++;\n\n if (options instanceof GLTexture) {\n this.sourceType = options.options.sourceType as TextureSourceType;\n this.options = options.options as Immutable<TextureOptions>;\n if (!renderer) {\n throw Error('copy texture should assign renderer');\n }\n this.internal = options;\n this.renderer = renderer;\n this.name = '';\n } else {\n const opt = this.checkOptions(options);\n\n this.sourceType = opt.sourceType as TextureSourceType;\n this.options = opt;\n this.name = options.name || '';\n if (renderer) {\n this.assignRenderer(renderer);\n }\n }\n }\n\n checkOptions (options: TextureOptions): Immutable<TextureOptions> {\n const opt = Object.assign({\n minFilter: constants.NEAREST,\n magFilter: constants.NEAREST,\n wrapS: constants.CLAMP_TO_EDGE,\n wrapT: constants.CLAMP_TO_EDGE,\n target: options.target || constants.TEXTURE_2D,\n format: constants.RGBA,\n internalFormat: options.format || constants.RGBA,\n type: constants.UNSIGNED_BYTE,\n }, options) as TextureOptions;\n\n if (!opt.sourceType) {\n if ((opt as Texture2DSourceOptionsImage).image) {\n (opt as Texture2DSourceOptionsImage).sourceType = TextureSourceType.image;\n } else if ((opt as Texture2DSourceOptionsData).data) {\n (opt as Texture2DSourceOptionsData).sourceType = TextureSourceType.data;\n } else if ((opt as Texture2DSourceOptionsVideo).video) {\n (opt as Texture2DSourceOptionsVideo).sourceType = TextureSourceType.video;\n } else {\n (opt as Texture2DSourceOptionsNone).sourceType = TextureSourceType.none;\n }\n }\n if (!opt.sourceType) {\n throw Error('invalid source type');\n }\n\n return opt as Immutable<TextureOptions>;\n }\n\n get width () {\n return this.internal?.width || 0;\n }\n\n get height () {\n return this.internal?.height || 0;\n }\n\n assignRenderer (renderer: MarsRenderer): MarsTexture {\n // @ts-expect-error safe to assign\n this['renderer'] = renderer;\n this._assignRenderer(renderer.internal);\n\n return this;\n }\n\n _assignRenderer (renderer: GLGPURenderer): void {\n if (!this.internal) {\n const option = this.options as TextureOptions;\n\n // @ts-expect-error safe to assign\n this['internal'] = new GLTexture(option, renderer);\n const releaseImageSource = !option.keepImageSource;\n\n if (option.sourceType === TextureSourceType.image) {\n if (releaseImageSource) {\n closeImageBitMap((option as Texture2DSourceOptionsImage).image);\n closeImageBitMap((option as TextureCubeSourceOptionsImage).cube);\n }\n //@ts-expect-error delete image memory\n delete (option as Texture2DSourceOptionsImage).image;\n //@ts-expect-error delete image memory\n delete (option as TextureCubeSourceOptionsImage).cube;\n } else if (option.sourceType === TextureSourceType.data) {\n //@ts-expect-error delete image memory\n delete (option as Texture2DSourceOptionsData).data;\n } else if (option.sourceType === TextureSourceType.compressed) {\n //@ts-expect-error delete image memory\n delete option.mipmaps;\n } else if (option.sourceType === TextureSourceType.mipmaps) {\n //@ts-expect-error delete image memory\n delete option.mipmaps;\n if (releaseImageSource) {\n closeImageBitMap(option.mipmaps);\n }\n }\n }\n }\n\n uploadCurrentVideoFrame () {\n if (this.options.sourceType === TextureSourceType.video && this.options.video && this.internal) {\n this.internal.update({ sourceType: TextureSourceType.video, video: this.options.video as HTMLVideoElement });\n\n return true;\n }\n\n return false;\n }\n\n destroy (): void {\n if (this.internal) {\n this.internal?.destroy();\n //@ts-expect-error safe to assign\n this['internal'] = this['renderer'] = undefined;\n }\n this._isDestroyed = true;\n this._assignRenderer = throwDestroyedError;\n }\n\n reloadDataAsync (): Promise<Texture> {\n if (this._offloaded) {\n return getDefaultTextureFactory().reloadTextureAsync(this);\n }\n\n return Promise.resolve(this);\n }\n\n offloadData (): void {\n if (this.internal && getDefaultTextureFactory().canOffloadTexture(this)) {\n this.internal?.offloadData();\n this._offloaded = true;\n }\n }\n\n updateSource (options: TextureSourceOptions): void {\n // @ts-expect-error safe to assign\n this['options'] = this.checkOptions(Object.assign(this.options, options));\n // @ts-expect-error safe to assign\n this['sourceType'] = this.options.sourceType;\n this.internal?.update(this.options as TextureSourceOptions);\n }\n\n}\n","import type {\n RenderPassColorAttachment,\n RenderPassColorAttachmentOptions, RenderPassColorAttachmentTextureOptions,\n} from '../../types/RenderPass';\nimport {\n RenderPassAttachmentStorageType,\n} from '../../types/RenderPass';\nimport { MarsTexture } from './MarsTexture';\nimport { TextureSourceType } from '../../types/Texture';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { constants } from '../webgl/constants';\nimport { throwDestroyedError } from '../common/utils';\n\ninterface MarsRenderPassColorAttachmentOptions extends RenderPassColorAttachmentOptions {\n size?: [x: number, y: number],\n name?: string,\n}\n\ninterface MarsRenderPassColorAttachmentTextureOptions extends RenderPassColorAttachmentTextureOptions {\n size?: [x: number, y: number],\n}\n\nexport class MarsRenderPassColorAttachment implements RenderPassColorAttachment {\n readonly readable: boolean;\n texture!: MarsTexture;\n readonly externalTexture: boolean;\n textureOptions?: MarsRenderPassColorAttachmentTextureOptions;\n private _isDestroyed: boolean;\n multisample: number;\n readonly storageType = RenderPassAttachmentStorageType.color;\n get isDestroyed () {\n return this._isDestroyed;\n }\n\n constructor (options: MarsRenderPassColorAttachmentOptions) {\n if (options.texture instanceof MarsTexture) {\n this.texture = options.texture;\n this.externalTexture = true;\n } else if (options.texture) {\n const texOpt = options.texture as RenderPassColorAttachmentTextureOptions;\n\n this.externalTexture = false;\n this.textureOptions = {\n size: options.size,\n format: texOpt.format || constants.RGBA,\n type: texOpt.type || constants.UNSIGNED_BYTE,\n internalFormat: texOpt.internalFormat || texOpt.format || constants.RGBA,\n wrapT: texOpt.wrapT,\n wrapS: texOpt.wrapS,\n minFilter: texOpt.minFilter,\n magFilter: texOpt.magFilter,\n name: options.name,\n };\n } else {\n throw Error('color attachment must use texture');\n }\n this._isDestroyed = false;\n this.readable = true;\n }\n\n get size (): [x: number, y: number] {\n const tex = this.texture;\n\n return tex ? [tex.width, tex.height] : [0, 0];\n }\n\n get width (): number {\n return this.texture?.width || 0;\n }\n\n get height (): number {\n return this.texture?.height || 0;\n }\n\n assignRenderer (renderer: MarsRenderer): MarsRenderPassColorAttachment {\n if (this.textureOptions) {\n const size: [x: number, y: number] = this.textureOptions.size || [renderer.width, renderer.height];\n\n this.texture = new MarsTexture({\n ...this.textureOptions,\n sourceType: TextureSourceType.framebuffer,\n data: { width: size[0], height: size[1] },\n });\n }\n if (this.texture) {\n this.texture.assignRenderer(renderer);\n }\n if (this.multisample > 1) {\n this.multisample = Math.min(renderer.gpu.capability.maxSample, this.multisample);\n }\n\n return this;\n }\n\n destroy (): void {\n this.texture?.destroy();\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsRenderPassColorAttachment;\n this._isDestroyed = true;\n }\n\n}\n","import type {\n RenderPass,\n RenderPassAttachmentOptions,\n RenderPassLoadAction,\n RenderPassDelegate,\n RenderPassDepthStencilAttachment,\n RenderPassDestroyOptions,\n RenderPassOptions,\n RenderPassStorageObject,\n RenderPassStoreAction,\n} from '../../types/RenderPass';\nimport {\n RenderPassAttachmentStorageType,\n RenderPassDestroyAttachmentType,\n RenderPassMeshOrder,\n TextureStoreAction,\n} from '../../types/RenderPass';\nimport type { MarsMesh } from './MarsMesh';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { GLFrameBuffer } from '../webgl/GLFrameBuffer';\nimport { MarsRenderPassColorAttachment } from './MarsRenderPassColorAttachment';\nimport { MarsTexture } from './MarsTexture';\nimport type { GLTexture } from '../webgl/GLTexture';\nimport {\n arrAddByOrder, arrRemove, sortByOrder, throwDestroyedError,\n} from '../common/utils';\nimport type { vec4 } from '../../types';\nimport { TextureSourceType } from '../../types';\nimport { MarsSemanticMap } from './MarsSemanticMap';\nimport { DestroyOptions } from '../../types/constants';\n\nlet seed = 1;\n\nexport class MarsRenderPass implements RenderPass {\n delegate: RenderPassDelegate;\n readonly name: string;\n readonly priority: number;\n readonly meshes: MarsMesh[];\n readonly options: RenderPassAttachmentOptions;\n readonly renderer!: MarsRenderer;\n readonly frameBuffer?: GLFrameBuffer;\n\n readonly depthStencilType: RenderPassAttachmentStorageType;\n readonly loadAction: RenderPassLoadAction;\n readonly storeAction: RenderPassStoreAction;\n readonly semantics: MarsSemanticMap;\n\n private _isDestroyed = false;\n\n private _depthTexture?: MarsTexture;\n private _stencilTexture?: MarsTexture;\n private _attachments: MarsRenderPassColorAttachment[];\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n get multisample () {\n return this.frameBuffer?.multisample || 0;\n }\n get attachments () {\n return this._attachments;\n }\n\n public viewportScale!: number;\n private _isCustomViewport!: boolean;\n private _customViewport?: [x: number, y: number, width: number, height: number];\n //todo reorder meshes if changed\n meshOrder: RenderPassMeshOrder;\n\n constructor (options: RenderPassOptions, renderer?: MarsRenderer) {\n this.name = options.name || ('MarsRenderPass_' + seed++);\n this.priority = options.priority || 0;\n this.meshOrder = options.meshOrder || RenderPassMeshOrder.ascending;\n this.meshes = (options.meshes as MarsMesh[] || []).slice();\n sortByOrder(this.meshes, this.meshOrder);\n this.options = options;\n this.loadAction = Object.assign({}, options.loadAction);\n this._attachments = [];\n this.semantics = new MarsSemanticMap(options.semantics);\n this.depthStencilType = options.depthStencilAttachment?.storageType || RenderPassAttachmentStorageType.none;\n this._setViewportOptions(options);\n if (renderer) {\n this.assignRenderer(renderer);\n }\n this.delegate = options.delegate || {};\n const defStoreAction: RenderPassStoreAction = {\n colorAction: TextureStoreAction.store,\n depthAction: TextureStoreAction.store,\n stencilAction: TextureStoreAction.store,\n };\n\n this.storeAction = Object.assign(defStoreAction, options.storeAction);\n }\n\n get viewport (): vec4 {\n const ret = this.frameBuffer?.viewport || this._customViewport;\n\n if (ret) {\n return ret;\n }\n const renderer = this.renderer;\n const vs = this.viewportScale;\n\n return renderer ? [0, 0, renderer.width * vs, renderer.height * vs] : [0, 0, 0, 0];\n }\n\n get stencilAttachment (): RenderPassDepthStencilAttachment | undefined {\n const frameBuffer = this.frameBuffer;\n\n if (frameBuffer) {\n return {\n storageType: frameBuffer.depthStencilStorageType,\n storage: frameBuffer.stencilStorage as RenderPassStorageObject,\n texture: frameBuffer.stencilTexture ? this._getStencilTexture(frameBuffer.stencilTexture, frameBuffer.externalStorage) : undefined,\n };\n }\n }\n\n get depthAttachment (): RenderPassDepthStencilAttachment | undefined {\n const frameBuffer = this.frameBuffer;\n\n if (frameBuffer) {\n return {\n storageType: frameBuffer.depthStencilStorageType,\n storage: frameBuffer.depthStorage as RenderPassStorageObject,\n texture: frameBuffer.depthTexture ? this._getDepthTexture(frameBuffer.depthTexture, frameBuffer.externalStorage) : undefined,\n };\n }\n }\n\n bind () {\n if (this.frameBuffer) {\n this.frameBuffer.bind();\n } else {\n const state = this.renderer.internal.state;\n //在绑定的时候renderpass进行viewport的动态改变\n const vp = this.viewport;\n\n state.viewport(vp[0], vp[1], vp[2], vp[3]);\n }\n }\n\n private _getDepthTexture (texture: GLTexture, external: boolean): MarsTexture {\n if (!this._depthTexture) {\n const outTex = this.options.depthStencilAttachment?.texture as MarsTexture;\n const tex = texture === outTex?.internal ? outTex : new MarsTexture(texture, this.renderer);\n\n if (!external) {\n this._depthTexture = tex;\n }\n\n return tex;\n }\n\n return this._depthTexture;\n }\n\n private _getStencilTexture (texture: GLTexture, external: boolean): MarsTexture {\n if (!this._stencilTexture) {\n const outTex = this.options.depthStencilAttachment?.texture as MarsTexture;\n const tex = texture === outTex?.internal ? outTex : new MarsTexture(texture, this.renderer);\n\n if (!external) {\n this._stencilTexture = tex;\n }\n\n return tex;\n }\n\n return this._stencilTexture;\n }\n\n private _setViewportOptions (options: RenderPassAttachmentOptions) {\n if (options.viewport) {\n this._isCustomViewport = true;\n this.viewportScale = 1;\n this._customViewport = options.viewport.slice(0, 4) as [x: number, y: number, width: number, height: number];\n if (this.frameBuffer) {\n const vp = this._customViewport;\n\n this.frameBuffer.isCustomViewport = false;\n this.frameBuffer.resize(vp[0], vp[1], vp[2], vp[3]);\n }\n } else {\n this._isCustomViewport = false;\n this.viewportScale = options.viewportScale || 1;\n if (this.frameBuffer) {\n this.frameBuffer.isCustomViewport = true;\n this.frameBuffer.viewportScale = this.viewportScale;\n }\n }\n }\n\n resetColorAttachments (colors: MarsTexture[]) {\n if (!colors.length) {\n this.resetAttachments({ attachments: [] });\n }\n if (!this.attachments.length) {\n this.resetAttachments({ attachments: colors.map(t => ({ texture: t })) });\n } else {\n const attachments = colors.map(texture => {\n texture.updateSource({ sourceType: TextureSourceType.framebuffer });\n\n return new MarsRenderPassColorAttachment({ texture: texture.assignRenderer(this.renderer) });\n });\n\n this._attachments.forEach(att => !att.externalTexture && att.destroy());\n this._attachments = attachments;\n if (this.frameBuffer) {\n this.frameBuffer.bind();\n this.frameBuffer.resetColorTextures(colors.map(color => color.internal as GLTexture));\n }\n }\n }\n\n resetAttachments (options: RenderPassAttachmentOptions) {\n const ret = this.options;\n\n //@ts-expect-error safe to assign\n this.options = options;\n this._setViewportOptions(options);\n if (this.renderer) {\n this._resetAttachments();\n }\n\n return ret;\n }\n\n private _resetAttachments () {\n const renderer = this.renderer;\n const options = this.options;\n\n if (this._attachments.length) {\n this._attachments.forEach(att => !att.externalTexture && att.destroy());\n this._attachments.length = 0;\n this.frameBuffer?.destroy({ depthStencilAttachment: RenderPassDestroyAttachmentType.keepExternal });\n //@ts-expect-error safe to assign\n this.frameBuffer = null;\n }\n const vs = this.viewportScale;\n //renderpass的viewport相关参数都需要动态的修改\n const viewport = (this._isCustomViewport ? this._customViewport : [0, 0, renderer.width * vs, renderer.height * vs]) as vec4;\n\n const size: [x: number, y: number] = [viewport[2], viewport[3]];\n const name = this.name;\n\n if (options.attachments?.length) {\n const attachments = options.attachments.map(function (att, index) {\n return new MarsRenderPassColorAttachment(Object.assign({\n size,\n name: att.texture?.name || `${name}##color_${index}`,\n }, att)).assignRenderer(renderer);\n });\n\n this._attachments = attachments;\n const framebuffer = new GLFrameBuffer({\n storeAction: this.storeAction,\n name,\n viewport,\n multisample: options.multiSample,\n viewportScale: this.viewportScale,\n isCustomViewport: this._isCustomViewport,\n attachments: attachments.map(att => (att.texture).internal as GLTexture),\n depthStencilAttachment: options.depthStencilAttachment || { storageType: RenderPassAttachmentStorageType.none },\n }, renderer.internal);\n\n framebuffer.bind();\n framebuffer.unbind();\n //@ts-expect-error safe to assign\n this.frameBuffer = framebuffer;\n } else {\n this._attachments.length = 0;\n }\n }\n\n unbind () {\n const state = this.renderer.internal.state;\n\n if (this.frameBuffer) {\n this.frameBuffer.unbind();\n } else {\n state.bindSystemFramebuffer();\n }\n }\n\n assignRenderer (renderer: MarsRenderer): MarsRenderPass {\n if (!this.renderer) {\n //@ts-expect-error safe to assign\n this.renderer = renderer;\n this._resetAttachments();\n }\n\n return this;\n }\n\n destroy (options?: RenderPassDestroyOptions) {\n const destroyMeshOption = options?.meshes || undefined;\n\n if (destroyMeshOption !== DestroyOptions.keep) {\n this.meshes.forEach(mesh => {\n mesh.destroy(destroyMeshOption);\n });\n }\n this.meshes.length = 0;\n\n const colorOpt = options?.colorAttachment ? options.colorAttachment : RenderPassDestroyAttachmentType.force;\n\n this._attachments.forEach(att => {\n const keep = (att.externalTexture && colorOpt === RenderPassDestroyAttachmentType.keepExternal) || colorOpt === RenderPassDestroyAttachmentType.keep;\n\n if (!keep) {\n att.destroy();\n }\n });\n this._attachments.length = 0;\n if (options?.semantics !== DestroyOptions.keep) {\n this.semantics.destroy();\n }\n\n const depthStencilOpt = options?.depthStencilAttachment ? options.depthStencilAttachment : RenderPassDestroyAttachmentType.force;\n const fbo = this.frameBuffer;\n\n if (fbo) {\n fbo.destroy({ depthStencilAttachment: depthStencilOpt });\n const keep = (fbo.externalStorage && depthStencilOpt === RenderPassDestroyAttachmentType.keepExternal) || depthStencilOpt === RenderPassDestroyAttachmentType.keep;\n\n if (!keep) {\n this._stencilTexture?.destroy();\n this._depthTexture?.destroy();\n }\n }\n\n //@ts-expect-error safe to assign\n this.options = this.renderer = null;\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsRenderPass;\n this._isDestroyed = true;\n }\n\n addMesh (mesh: MarsMesh): void {\n arrAddByOrder(this.meshes, mesh, this.meshOrder);\n }\n\n removeMesh (mesh: MarsMesh): void {\n arrRemove(this.meshes, mesh);\n }\n\n setMeshes (meshes: MarsMesh[]): MarsMesh[] {\n this.meshes.length = 0;\n this.meshes.splice(0, 0, ...meshes);\n\n return sortByOrder(this.meshes, this.meshOrder);\n }\n}\n","import type { MaterialRenderStates } from '../../types/Material';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport type { MarsMaterial } from '../render/MarsMaterial';\nimport type { Immutable, vec3, vec4 } from '../../types/type';\nimport { constants } from './constants';\nimport type { GLProgram } from './GLProgram';\n\nexport class GLMaterial {\n\n readonly renderer: GLGPURenderer;\n\n readonly shaderCacheId: string;\n\n readonly states: Immutable<MaterialRenderStates>;\n\n readonly material: MarsMaterial;\n\n constructor (renderer: GLGPURenderer, material: MarsMaterial) {\n this.renderer = renderer;\n this.shaderCacheId = material.shaderCacheId;\n this.states = material.states;\n this.material = material;\n }\n\n setupStates () {\n const webGLState = this.renderer.state;\n const currentState = this.states;\n\n //在之前已经给过默认值 这里就不用再判断undefined和null了\n webGLState.toggle(constants.SAMPLE_ALPHA_TO_COVERAGE, currentState.sampleAlphaToCoverage);\n webGLState.toggle(constants.BLEND, currentState.blending);\n webGLState.toggle(constants.DEPTH_TEST, currentState.depthTest);\n webGLState.toggle(constants.STENCIL_TEST, currentState.stencilTest);\n webGLState.toggle(constants.CULL_FACE, currentState.cullFaceEnabled);\n webGLState.toggle(constants.POLYGON_OFFSET_FILL, currentState.polygonOffsetFill);\n if (currentState.stencilTest) {\n //stencil\n webGLState.stencilMaskSeparate(constants.BACK, currentState.stencilMaskBack as number);\n webGLState.stencilMaskSeparate(constants.FRONT, currentState.stencilMaskFront as number);\n const stencilBackFunc = currentState.stencilFuncBack as vec3;\n\n webGLState.stencilFuncSeparate(constants.BACK, stencilBackFunc[0], stencilBackFunc[1], stencilBackFunc[2]);\n const stencilFrontFunc = currentState.stencilFuncFront as vec3;\n\n webGLState.stencilFuncSeparate(constants.FRONT, stencilFrontFunc[0], stencilFrontFunc[1], stencilFrontFunc[2]);\n const stencilOpBack = currentState.stencilOpBack as vec3;\n\n webGLState.stencilOpSeparate(constants.BACK, stencilOpBack[0], stencilOpBack[1], stencilOpBack[2]);\n const stencilOpFront = currentState.stencilOpFront as vec3;\n\n webGLState.stencilOpSeparate(constants.FRONT, stencilOpFront[0], stencilOpFront[1], stencilOpFront[2]);\n }\n\n if (currentState.blending) {\n //blend\n const blendColor = currentState.blendColor as vec4;\n\n webGLState.blendColor(blendColor[0], blendColor[1], blendColor[2], blendColor[3]);\n webGLState.blendEquationSeparate(currentState.blendEquationRGB as number, currentState.blendEquationAlpha as number);\n webGLState.blendFuncSeparate(currentState.blendSrc as number, currentState.blendDst as number, currentState.blendSrcAlpha as number, currentState.blendDstAlpha as number);\n }\n\n //color depth\n const colorMask = currentState.colorMask as [r: boolean, g: boolean, b: boolean, a: boolean];\n\n webGLState.colorMask(colorMask[0], colorMask[1], colorMask[2], colorMask[3]);\n if (currentState.depthTest) {\n webGLState.depthMask(currentState.depthMask as boolean);\n webGLState.depthFunc(currentState.depthFunc as number);\n webGLState.depthRange(currentState.depthRange?.[0] as number, currentState.depthRange?.[1] as number);\n }\n\n if (currentState.cullFaceEnabled) {\n //face\n webGLState.cullFace(currentState.cullFace as number);\n webGLState.frontFace(currentState.frontFace as number);\n }\n\n if (currentState.polygonOffsetFill) {\n const polygonOffset = currentState.polygonOffset || [0, 0];\n\n webGLState.polygonOffset(polygonOffset[0], polygonOffset[1]);\n }\n\n // set gl states\n\n }\n\n getProgram (): GLProgram | null {\n return this.renderer.shaderLibrary.getProgram(this.shaderCacheId);\n }\n\n destroy () {\n const lib = this.renderer?.shaderLibrary;\n\n if (lib) {\n const shader = lib.getShaderResult(this.shaderCacheId);\n\n if (shader && !shader.shared) {\n lib.deleteShader(this.shaderCacheId);\n }\n }\n //@ts-expect-error safe to assign\n this.renderer = null;\n }\n}\n","import type {\n MaterialDataBlock,\n MaterialDataBlockDestroyOptions,\n MaterialDataBlockOptions, UniformSemantic, UniformStruct,\n UniformValue, vec2,\n Texture,\n} from '../../types';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { forEach, isObj, throwDestroyedError } from '../common/utils';\nimport { MarsTexture } from './MarsTexture';\nimport { DestroyOptions } from '../../types/constants';\nimport type { UniformBlockSpec } from '../webgl/GLUniformUtils';\nimport { UniformBlockBuffer } from '../webgl/GLUniformUtils';\n\nfunction isUniformStruct (value: UniformValue) {\n return (isObj(value)) && ((value as any).length === undefined);\n}\n\nfunction isUniformStructArray (value: UniformValue) {\n return (value) && ((value as Array<number>).length !== undefined) && isUniformStruct((value as Array<number>)[0]);\n}\n\nexport class MarsMaterialDataBlock implements MaterialDataBlock {\n readonly _uniformValues: Record<string, UniformValue>;\n readonly _uniformTextures: Record<string, MarsTexture | MarsTexture[]>;\n readonly _uniformFlags: Record<string, boolean>;\n readonly _uniformValueRanges: Record<string, vec2>;\n readonly name: string;\n readonly uniformSemantics: { [key: string]: UniformSemantic };\n readonly renderer?: MarsRenderer;\n readonly uboBufferMap: Record<string, UniformBlockBuffer>;\n protected _isDestroyed = false;\n private _uniformPrivate: Record<string, boolean>;\n private readonly _keepUboData: boolean;\n\n constructor (props: MaterialDataBlockOptions & { keepUboData?: boolean }, renderer?: MarsRenderer) {\n this._isDestroyed = false;\n this.name = props.name || 'defDataBlock';\n this._uniformValues = {};\n this._uniformFlags = {};\n this.uboBufferMap = {};\n this._uniformTextures = {};\n this._uniformValueRanges = {};\n this._keepUboData = !!props.keepUboData;\n this.uniformSemantics = props.uniformSemantics || {};\n this._uniformPrivate = {};\n if (props.uniformValues) {\n this.setUniformValues(props.uniformValues);\n }\n forEach(props.uniformTextures, (tex, name)=>this.setUniformTexture(name, tex as MarsTexture));\n if (renderer) {\n this.assignRenderer(renderer);\n }\n }\n\n _assignUniformValueRenderer (value: MarsTexture | MarsTexture[], renderer?: MarsRenderer) {\n if (renderer) {\n const assign = (value: MarsTexture) => isObj(value) && (value as any).assignRenderer && (value as any).assignRenderer(renderer);\n\n if (value instanceof Array) {\n value.forEach(assign);\n } else {\n assign(value);\n }\n }\n }\n\n invalidAllFlags () {\n const f = this._uniformFlags;\n const range = this._uniformValueRanges;\n\n forEach(this._uniformValues, function (val, key) {\n f[key] = true;\n range[key] = [0, 0];\n });\n }\n\n clearFlags () {\n // @ts-expect-error safe to assign\n this._uniformFlags = {};\n }\n\n isDirty (shaderCacheId: string, name: string): boolean {\n return this._uniformFlags[name] === true;\n }\n\n get isDestroyed () {\n return this._isDestroyed;\n }\n\n setUniformTexture (uniformName: string, texture: MarsTexture | MarsTexture[] | undefined) {\n if (texture) {\n this._uniformTextures[uniformName] = texture;\n this._assignUniformValueRenderer(texture, this.renderer);\n this._uniformPrivate[uniformName] = true;\n } else {\n delete this._uniformTextures[uniformName];\n delete this._uniformPrivate[uniformName];\n }\n }\n\n getUniformTexture <T extends (Texture | Texture[]) = MarsTexture> (uniformName: string): T | undefined {\n return this._uniformTextures[uniformName] as unknown as T;\n }\n\n assignRenderer (renderer: MarsRenderer): MaterialDataBlock {\n if (this.renderer && renderer !== this.renderer) {\n throw Error('assign different renderer');\n }\n if (renderer && !this.renderer) {\n // @ts-expect-error safe to assign\n this.renderer = renderer;\n\n forEach(this._uniformTextures, value => {\n this._assignUniformValueRenderer(value, renderer);\n });\n }\n\n return this;\n }\n\n createUboBuffer (spec: UniformBlockSpec): UniformBlockBuffer | undefined {\n if (!this.uboBufferMap[spec.id] && this.renderer && this.name === spec.name) {\n const ubo = this.uboBufferMap[spec.id] = new UniformBlockBuffer(this.renderer.internal, spec);\n\n ubo.keepData = this._keepUboData;\n }\n\n return this.uboBufferMap[spec.id];\n }\n\n setUboBuffer (uboBuffer: UniformBlockBuffer) {\n uboBuffer.setValues(this._uniformValues, this._uniformFlags, this._uniformValueRanges);\n }\n\n updateUniformSubData (name: string, start: number, count: number) {\n const range = this._uniformValueRanges[name];\n\n if (!this._uniformValueRanges[name]) {\n this._uniformValueRanges[name] = [start, count];\n } else {\n const end = Math.max(range[0] + range[1], start + count);\n const s = Math.min(start, range[0]);\n\n this._uniformValueRanges[name] = [s, end - s];\n }\n this._uniformFlags[name] = true;\n }\n\n hasUniformValue (name: string): boolean {\n return !!this._uniformPrivate[name];\n }\n\n destroy (options?: MaterialDataBlockDestroyOptions): void {\n if (options?.textures !== DestroyOptions.keep) {\n forEach(this._uniformTextures, uniform => {\n if (uniform instanceof MarsTexture) {\n uniform.destroy();\n }\n });\n }\n\n forEach(this.uboBufferMap, ubo => {\n if (ubo !== undefined) {\n ubo.destroy();\n }\n });\n // @ts-expect-error safe to assign\n this.uboBufferMap = {};\n\n this._uniformPrivate = {};\n\n // @ts-expect-error safe to assign\n this._uniformFlags = {};\n // @ts-expect-error safe to assign\n this._uniformValues = {};\n // @ts-expect-error safe to assign\n this._uniformTextures = {};\n // @ts-expect-error safe to assign\n this.uniformSemantics = {};\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsMaterialDataBlock;\n\n this._isDestroyed = true;\n }\n\n getUniformValue (name: string): UniformValue {\n return this._uniformValues[name];\n }\n\n getUniformValues (): { [p: string]: UniformValue } {\n return this._uniformValues;\n }\n\n setUniformValue (name: string, value: UniformValue | undefined, isSemantic?: boolean): boolean {\n if (value === undefined) {\n const originValue = this._uniformValues[name];\n\n if (isUniformStruct(originValue)) {\n forEach(originValue as UniformStruct, (data, key) => {\n const nameInStruct = name + '.' + key;\n\n delete this._uniformPrivate[nameInStruct];\n });\n } else if (isUniformStructArray(originValue)) {\n (originValue as UniformStruct[]).forEach((valueData, i) => {\n forEach(valueData, (valueInStruct: UniformValue, key) => {\n const nameInStruct = name + '[' + i + ']' + '.' + key;\n\n delete this._uniformPrivate[nameInStruct];\n });\n });\n }\n delete this._uniformValues[name];\n this._uniformFlags[name] = false;\n delete this._uniformPrivate[name];\n } else if (value instanceof MarsTexture) {\n throw Error('setUniformValue not accept texture:' + name);\n } else {\n this._uniformPrivate[name] = !isSemantic;\n if (isUniformStruct(value)) {\n forEach(value as UniformStruct, (data, key) => {\n const nameInStruct = name + '.' + key;\n\n this._uniformValues[nameInStruct] = data;\n this._uniformFlags[nameInStruct] = true;\n this._uniformPrivate[nameInStruct] = true;\n });\n // 只是用来保存结构体对象\n this._uniformValues[name] = value;\n this._uniformFlags[name] = false;\n } else if (isUniformStructArray(value)) {\n (value as UniformStruct[]).forEach((valueData, i) => {\n forEach(valueData, (valueInStruct: UniformValue, key) => {\n const nameInStruct = name + '[' + i + ']' + '.' + key;\n\n this._uniformValues[nameInStruct] = valueInStruct;\n this._uniformFlags[nameInStruct] = true;\n this._uniformPrivate[nameInStruct] = true;\n });\n });\n // 只是用来保存结构体对象\n this._uniformValues[name] = value;\n this._uniformFlags[name] = false;\n } else {\n this._uniformValues[name] = value;\n this._uniformFlags[name] = true;\n }\n }\n\n return true;\n }\n\n setUniformValues (map: { [p: string]: UniformValue }): void {\n forEach(map, (val, key) => {\n this.setUniformValue(key, val);\n });\n }\n\n setUniformSemantic (name: string, semantic: string | undefined) {\n if (semantic) {\n this.uniformSemantics[name] = semantic;\n } else {\n delete this.uniformSemantics[name];\n }\n }\n\n clone (name: string): MarsMaterialDataBlock {\n return new MarsMaterialDataBlock({\n name,\n uniformValues: { ...this._uniformValues },\n uniformTextures: { ...this._uniformTextures },\n uniformSemantics: { ...this.uniformSemantics },\n keepUboData: this._keepUboData,\n }, this.renderer);\n }\n\n}\n","import type {\n Material, MaterialDestroyOptions, MaterialOptions, MaterialRenderStates,\n} from '../../types';\nimport { MaterialRenderType } from '../../types/Material';\nimport type { Immutable } from '../../types/type';\nimport { GLMaterial } from '../webgl/GLMaterial';\nimport { constants } from '../webgl/constants';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { MarsMaterialDataBlock } from './MarsMaterialDataBlock';\nimport { arrAdd, arrRemove, throwDestroyedError } from '../common/utils';\nimport { DestroyOptions } from '../../types/constants';\n\nlet seed = 1;\n\nexport class MarsMaterial implements Material {\n readonly shaderCacheId!: string;\n readonly options!: Immutable<MaterialOptions>;\n readonly materialInternal?: GLMaterial;\n readonly name: string;\n public readonly _dataBlocks: MarsMaterialDataBlock[];\n readonly renderType: MaterialRenderType;\n readonly states: Immutable<MaterialRenderStates>;\n readonly renderer?: MarsRenderer;\n private _dbMap: Record<string, MarsMaterialDataBlock>;\n private _isDestroyed = false;\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n get dataBlocks (): MarsMaterialDataBlock[] {\n return this._dataBlocks;\n }\n\n get defaultDataBlock (): MarsMaterialDataBlock {\n return this._dataBlocks[0];\n }\n\n constructor (options: MaterialOptions) {\n this.name = options.name || ('Material' + seed++);\n this._dataBlocks = (options.dataBlocks || []).map(b => (b instanceof MarsMaterialDataBlock) ? b : new MarsMaterialDataBlock(b));\n this.renderType = MaterialRenderType.normal;\n this.states = this.createMaterialStates(options.states);\n this.options = options;\n this._dbMap = {};\n if (!this._dataBlocks.length) {\n this._dataBlocks[0] = new MarsMaterialDataBlock({ name: 'main' });\n }\n }\n\n createMaterialStates (states: MaterialRenderStates): Immutable<MaterialRenderStates> {\n const ret: MaterialRenderStates = {\n blending: !!states.blending,\n sampleAlphaToCoverage: !!states.sampleAlphaToCoverage,\n depthTest: !!states.depthTest,\n stencilTest: !!states.stencilTest,\n cullFaceEnabled: !!states.cullFaceEnabled,\n polygonOffsetFill: !!states.polygonOffsetFill,\n };\n\n if (states.stencilMask === undefined || states.stencilMask === null) {\n ret.stencilMaskBack = valIfUndefined(states.stencilMaskBack, 0xff);\n ret.stencilMaskFront = valIfUndefined(states.stencilMaskFront, 0xff);\n } else {\n const stencilMaskBack = valIfUndefined(states.stencilMaskBack, states.stencilMask);\n\n ret.stencilMaskBack = valIfUndefined(stencilMaskBack, 0xff);\n const stencilMaskFront = valIfUndefined(states.stencilMaskFront, states.stencilMask);\n\n ret.stencilMaskFront = valIfUndefined(stencilMaskFront, 0xff);\n }\n\n if (states.stencilFunc === undefined || states.stencilFunc === null) {\n ret.stencilFuncBack = valIfUndefined(states.stencilFuncBack, [constants.ALWAYS, 0, 0xff]);\n ret.stencilFuncFront = valIfUndefined(states.stencilFuncFront, [constants.ALWAYS, 0, 0xff]);\n } else {\n const stencilFuncFront = valIfUndefined(states.stencilFuncFront, states.stencilFunc);\n\n ret.stencilFuncFront = valIfUndefined(stencilFuncFront, [constants.ALWAYS, 0, 0xff]);\n const stencilFuncBack = valIfUndefined(states.stencilFuncBack, states.stencilFunc);\n\n ret.stencilFuncBack = valIfUndefined(stencilFuncBack, [constants.ALWAYS, 0, 0xff]);\n }\n\n if (states.stencilOp === undefined || states.stencilOp === null) {\n ret.stencilOpFront = valIfUndefined(states.stencilOpFront, [constants.KEEP, constants.KEEP, constants.KEEP]);\n ret.stencilOpBack = valIfUndefined(states.stencilOpBack, [constants.KEEP, constants.KEEP, constants.KEEP]);\n } else {\n const stencilOpFront = valIfUndefined(states.stencilOpFront, states.stencilOp);\n\n ret.stencilOpFront = valIfUndefined(stencilOpFront, [constants.KEEP, constants.KEEP, constants.KEEP]);\n const stencilOpBack = valIfUndefined(states.stencilOpBack, states.stencilOp);\n\n ret.stencilOpBack = valIfUndefined(stencilOpBack, [constants.KEEP, constants.KEEP, constants.KEEP]);\n }\n //blend\n ret.blendSrc = valIfUndefined(states.blendSrc, constants.ONE);\n ret.blendSrcAlpha = valIfUndefined(states.blendSrcAlpha, ret.blendSrc);\n ret.blendDst = valIfUndefined(states.blendDst, constants.ZERO);\n ret.blendDstAlpha = valIfUndefined(states.blendDstAlpha, ret.blendDst);\n ret.blendEquationRGB = valIfUndefined(states.blendEquationRGB, constants.FUNC_ADD);\n ret.blendEquationAlpha = valIfUndefined(states.blendEquationAlpha, ret.blendEquationRGB);\n ret.blendColor = valIfUndefined(states.blendColor, [0, 0, 0, 0]);\n //color\n ret.colorMask = valIfUndefined(states.colorMask, [true, true, true, true]);\n //depth\n ret.depthMask = valIfUndefined(states.depthMask, true);\n ret.depthFunc = valIfUndefined(states.depthFunc, constants.LESS);\n ret.depthRange = valIfUndefined(states.depthRange, [0, 1]);\n ret.cullFace = valIfUndefined(states.cullFace, constants.BACK);\n ret.frontFace = valIfUndefined(states.frontFace, constants.CCW);\n ret.polygonOffset = states.polygonOffset || [0, 0];\n\n //ret\n return Object.freeze(ret);\n }\n\n addDataBlock (b: MarsMaterialDataBlock) {\n if (this.getDataBlockByName(b.name)) {\n throw Error('dataBlock with same name:' + b.name);\n }\n if (arrAdd(this._dataBlocks, b)) {\n b.invalidAllFlags();\n const r = this.renderer;\n\n if (r) {\n b.assignRenderer(r);\n }\n\n }\n }\n\n getDataBlockByName (name: string) {\n const cache = this._dbMap[name];\n\n if (!cache) {\n const db = this._dataBlocks.find(db=> db.name === name);\n\n if (db) {\n return this._dbMap[name] = db;\n }\n }\n\n return cache;\n }\n\n removeDataBlock (b: MarsMaterialDataBlock) {\n arrRemove(this._dataBlocks, b);\n delete this._dbMap[b.name];\n }\n\n assignRenderer (renderer: MarsRenderer): MarsMaterial {\n if (!this.materialInternal) {\n const shader = this.options.shader;\n\n // @ts-expect-error safe to assign\n this.shaderCacheId = renderer.internal.shaderLibrary.addShader(shader);\n // @ts-expect-error safe to assign\n this.materialInternal = new GLMaterial(renderer.internal, this);\n // @ts-expect-error safe to assign\n this['renderer'] = renderer;\n this._dataBlocks.forEach(d => d.assignRenderer(renderer));\n }\n\n return this;\n }\n\n destroy (options?: MaterialDestroyOptions): void {\n if (options?.blocks !== DestroyOptions.keep) {\n this._dataBlocks.forEach(b => b.destroy({ textures: options?.textures }));\n }\n this.materialInternal?.destroy();\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsMaterial;\n this._isDestroyed = true;\n }\n}\n\nfunction valIfUndefined<T> (val: any, def: T): T {\n if (val === undefined || val === null) {\n return def;\n }\n\n return val;\n}\n","import type { GLGPURenderer } from './GLGPURenderer';\n\nexport function createVAO (renderer: GLGPURenderer, name?: string): GLVertexArrayObject | undefined {\n if (renderer.gpu.capability.vao) {\n const ret = new GLVertexArrayObject(renderer, name);\n\n if (ret.vao) {\n return ret;\n }\n }\n}\n\nexport class GLVertexArrayObject {\n readonly renderer: GLGPURenderer;\n\n readonly vao: WebGLVertexArrayObject;\n\n ready = false;\n\n constructor (renderer: GLGPURenderer, name?: string) {\n this.renderer = renderer;\n this.vao = renderer.createVertexArray(name) as WebGLVertexArrayObject;\n }\n\n destroy () {\n if (this.vao) {\n const renderer = this.renderer;\n\n if (renderer.state.bindingVAO == this.vao) {\n renderer.state.bindingVAO = undefined;\n renderer.bindVertexArray(null);\n }\n renderer.deleteVertexArray(this.vao);\n //@ts-expect-error safe to assign\n this.vao = this.renderer = null;\n }\n }\n\n bind () {\n const renderer = this.renderer;\n\n if (this.vao && renderer.state.bindingVAO !== this.vao) {\n renderer.state.bindingVAO = this.vao;\n renderer.bindVertexArray(this.vao);\n }\n }\n\n unbind () {\n const renderer = this.renderer;\n\n renderer.bindVertexArray(null);\n renderer.state.bindingVAO = undefined;\n }\n}\n","import type { AttributeWithType } from '../../types/Geometry';\nimport type { GPUBuffer, GPUBufferOptions } from '../../types/GPUBuffer';\nimport { GLGPUBuffer } from './GLGPUBuffer';\nimport type { GLGPURenderer } from './GLGPURenderer';\nimport type { RenderState } from '../../types/RenderFrame';\nimport { constants } from './constants';\nimport { forEach } from '../common/utils';\nimport type { GLVertexArrayObject } from './GLVertexArrayObject';\nimport { createVAO } from './GLVertexArrayObject';\nimport type { InstancedMesh } from '../../types';\n\nexport const INDEX_TYPE_MAP = {\n [Uint16Array.BYTES_PER_ELEMENT]: constants.UNSIGNED_SHORT,\n [Uint32Array.BYTES_PER_ELEMENT]: constants.UNSIGNED_INT,\n};\n\nexport const TYPE_BYTE_MAP = {\n [constants.UNSIGNED_SHORT]: Uint16Array.BYTES_PER_ELEMENT,\n [constants.UNSIGNED_INT]: Uint32Array.BYTES_PER_ELEMENT,\n};\n\nexport type GLGeometryOptions = {\n drawStart: number,\n drawCount: number,\n attributes: { [key: string]: AttributeWithType },\n buffers: { [key: string]: GPUBufferOptions },\n mode: GLenum,\n index?: GPUBufferOptions,\n name: string,\n vaoMap?: Record<string, GLVertexArrayObject | undefined>,\n};\n\n/**\n * GLGeometry对象,保存GLGPUBuffer对象。\n *\n */\nexport class GLGeometry {\n\n name?: string;\n\n renderer?: GLGPURenderer | undefined;\n\n drawStart: number;\n\n drawCount: number;\n\n mode: GLenum;\n\n indexBufferType: GLenum;\n\n // 记录顶点属性信息用于GLProgram绑定顶点属性\n attributes: { [key: string]: AttributeWithType };\n\n // 记录了顶点属性与GPUBuffer对应关系\n _buffersMap: { [key: string]: GLGPUBuffer };\n\n // 索引缓冲区\n _indexBuffer?: GLGPUBuffer;\n\n readonly vaoMap: Record<string, GLVertexArrayObject | undefined>;\n\n constructor (option: GLGeometryOptions | GLGeometry, renderer: GLGPURenderer) {\n\n this.renderer = renderer;\n\n this.drawStart = option.drawStart;\n\n this.drawCount = option.drawCount;\n\n this.mode = isNaN(option.mode) ? constants.TRIANGLES : option.mode;\n\n this.name = option.name;\n\n const buffers: { [key: string]: GLGPUBuffer } = {};\n\n const inAttributes = option.attributes;\n const attributes: { [key: string]: AttributeWithType } = {};\n\n if (option instanceof GLGeometry) {\n forEach(option._buffersMap, function (buffer, name) {\n buffers[name] = buffer;\n });\n } else {\n // 创建GPUBuffer\n forEach(option.buffers, function (opt, name) {\n buffers[name] = new GLGPUBuffer(opt, renderer);\n });\n if (option.index && option.index.data) {\n const ret = this.createIndexBuffer(option.index.data as Uint16Array, renderer);\n\n this.setIndexBuffer(ret[0], ret[1]);\n }\n }\n\n this._buffersMap = buffers;\n // 记录顶点属性\n forEach(inAttributes, function (attribute, name) {\n attributes[name] = attribute;\n });\n this.attributes = attributes;\n\n this.vaoMap = {};\n }\n\n createVao (name: string) {\n if (!this.vaoMap[name]) {\n this.vaoMap[name] = createVAO(this.renderer as GLGPURenderer, `${this.name}-${name}`);\n }\n\n return this.vaoMap[name] as GLVertexArrayObject;\n }\n\n destroyVao (name: string) {\n this.vaoMap[name]?.destroy();\n this.vaoMap[name] = undefined;\n }\n\n setIndexBuffer (buffer: GLGPUBuffer, indexBufferType: GLenum) {\n this._indexBuffer = buffer;\n this.indexBufferType = indexBufferType;\n }\n\n createIndexBuffer (data: Uint16Array | Uint32Array | Uint8Array, renderer: GLGPURenderer): [buffer: GLGPUBuffer, type: GLenum] {\n const type = INDEX_TYPE_MAP[data.BYTES_PER_ELEMENT];\n const indexOption: GPUBufferOptions = {\n data,\n target: constants.ELEMENT_ARRAY_BUFFER,\n name: `${this.name}##index`,\n };\n\n return [new GLGPUBuffer(indexOption, renderer), type];\n }\n\n getGPUBuffer (name: string | number): GLGPUBuffer | null {\n return this._buffersMap[name];\n }\n\n destroy (): void {\n if (this.renderer) {\n forEach(this._buffersMap, function (buffer) {\n buffer.destroy();\n });\n this._buffersMap = {};\n this._indexBuffer?.destroy();\n const m = this.vaoMap;\n\n forEach(m, function (vao, key) {\n vao?.destroy();\n m[key] = undefined;\n });\n }\n this.attributes = {};\n this._indexBuffer = undefined;\n this.renderer = undefined;\n }\n\n setAttributeBuffer (name: string, buffer: GPUBuffer): void {\n this._buffersMap[name] = buffer as GLGPUBuffer;\n // update vao bind\n }\n\n getAttributeBuffer (name: string): GPUBuffer | null {\n if (this._buffersMap != undefined) {\n return this._buffersMap[name];\n }\n\n return null;\n }\n\n draw (state: RenderState) {\n const index = this._indexBuffer;\n const gl = this.renderer?.gl as WebGL2RenderingContext;\n const gpu = this.renderer?.gpu;\n const useInstancedDraw = gpu?.capability.instanceDraw && (state.currentMesh as InstancedMesh).instanceCount > 0;\n\n if (gl && gpu) {\n const drawCount = this.drawCount;\n\n if (index) {\n const type = this.indexBufferType;\n //bind by vao\n //this._indexBuffer?.bind();\n const dc = isNaN(drawCount) ? index.getElementCount(TYPE_BYTE_MAP[type]) : drawCount;\n\n if (dc > 0) {\n if (useInstancedDraw) {\n gpu.drawElementsInstanced(gl, this.mode, dc, type, this.drawStart || 0, (state.currentMesh as InstancedMesh).instanceCount);\n } else {\n gl.drawElements(this.mode, dc, type, this.drawStart || 0);\n }\n }\n } else if (drawCount > 0) {\n if (useInstancedDraw) {\n gpu.drawArraysInstanced(gl, this.mode, this.drawStart, this.drawCount, (state.currentMesh as InstancedMesh).instanceCount);\n } else {\n gl.drawArrays(this.mode, this.drawStart, this.drawCount);\n }\n }\n }\n }\n}\n","import type { Immutable, TypedArray } from '../../types/type';\nimport type {\n Geometry,\n GeometryOptions,\n AttributeWithData,\n AttributeWithType,\n Attribute,\n} from '../../types/Geometry';\nimport type { GPUBuffer, GPUBufferOptions } from '../../types/GPUBuffer';\nimport { GLGeometry } from '../webgl/GLGeometry';\nimport { constants } from '../webgl/constants';\nimport { forEach, throwDestroyedError } from '../common/utils';\nimport type { GLGPUBuffer } from '../webgl/GLGPUBuffer';\nimport type { MarsRenderer } from './MarsRenderer';\n\nconst BYTES_TYPE_MAP = {\n [constants.FLOAT]: Float32Array.BYTES_PER_ELEMENT,\n [constants.INT]: Int32Array.BYTES_PER_ELEMENT,\n [constants.SHORT]: Int16Array.BYTES_PER_ELEMENT,\n [constants.BYTE]: Int8Array.BYTES_PER_ELEMENT,\n};\n\ntype BufferDirtyFlag = {\n dirty: boolean,\n discard?: boolean,\n start?: number,\n end?: number,\n};\n\nfunction isIndexDataType (data: any): boolean {\n const result = (data instanceof Uint8Array) || (data instanceof Uint16Array) ||\n (data instanceof Uint32Array);\n\n return result;\n}\n\nfunction attributeData2GLType (data: Float32Array | Int32Array | Int16Array | Uint16Array | Uint32Array | unknown): number {\n if (data instanceof Float32Array) {\n return constants.FLOAT;\n } else {\n return constants.INT;\n }\n}\n\nfunction emptyTypedArrayByGLType (type: number): Float32Array | Int32Array | Int16Array {\n if (type === constants.INT) {\n return new Int32Array(0);\n }\n if (type === constants.SHORT) {\n return new Int16Array(0);\n }\n\n return new Float32Array(0);\n}\n\n// 根据attribute的datasource获取js端buffer\nfunction getAttributeBufferOption (geom: MarsGeometry, name: string): GPUBufferOptions | undefined {\n const attribute = geom._attributes[name];\n\n if (attribute) {\n return geom._buffers[attribute.dataSource];\n }\n\n return undefined;\n}\n\nlet seed = 1;\n\n/**\n * 应用层Geometry对象,本身不直接保存GPU资源而是通过geometryInternal成员保存GPU资源。\n *\n */\nexport class MarsGeometry implements Geometry {\n\n renderer?: MarsRenderer;\n\n // JS端记录数据,用于flush\n _buffers: { [key: string]: GPUBufferOptions };\n\n // 用于创建internal geometry\n _attributes: Record<string, AttributeWithType>;\n\n _attributesReleasable: { [key: string]: boolean };\n\n _attributesName: string[] = [];\n\n // 记录SubData的变更范围\n _dirtyFlags: { [key: string]: BufferDirtyFlag };\n\n _index?: Uint16Array | Uint32Array;\n _indexReleasable = false;\n\n // 与底层图形相关的Geometry对象\n readonly internal!: GLGeometry;\n\n readonly options?: GeometryOptions;\n\n readonly name: string;\n protected _drawCount: number;\n protected _drawStart: number;\n protected _mode: number;\n protected _isDestroyed = false;\n\n indexDataType: Geometry['indexDataType'];\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n get mode (): number {\n return this._mode;\n }\n\n set mode (n: number) {\n this._mode = n;\n if (this.internal) {\n this.internal.mode = n;\n }\n }\n\n get attributes (): Immutable<{ [key: string]: Attribute }> {\n return this._attributes;\n }\n\n get drawCount (): number {\n return this._drawCount;\n }\n\n set drawCount (n: number | undefined) {\n this._drawCount = +(n as number);\n if (this.internal) {\n this.internal.drawCount = +(n as number);\n }\n }\n\n get drawStart () {\n return this._drawStart;\n }\n\n set drawStart (n: number) {\n this._drawStart = n;\n if (this.internal) {\n this.internal.drawStart = n;\n }\n }\n\n constructor (option: GeometryOptions) {\n this._drawStart = option.drawStart ? option.drawStart : 0;\n this._drawCount = isNaN(+(option.drawCount as number)) ? NaN : (option.drawCount as number);\n this._mode = (isNaN(option.mode as number) ? constants.TRIANGLES : option.mode) as number;\n this.name = option.name || ('MarsGeometry:' + seed++);\n const usage = option.bufferUsage || constants.STATIC_DRAW;\n\n this.options = option;\n // 记录顶点属性,需要与Shader中attribute进行关联\n const buffers: { [key: string]: GPUBufferOptions } = {};\n const attributesName: string[] = [];\n const attributes: { [key: string]: AttributeWithType } = {};\n // key为buffer的名字\n const dirtyFlags: { [key: string]: BufferDirtyFlag } = {};\n const attributesReleasable: { [key: string]: boolean } = {};\n\n forEach(option.attributes, function (attr, name) {\n let data = (attr as AttributeWithData).data;\n const type = attr.type || constants.FLOAT;\n const releasable = (attr as AttributeWithData).releasable;\n\n if (type && !(attr as AttributeWithType).dataSource && !data) {\n data = emptyTypedArrayByGLType(type);\n }\n if (data) {\n // 使用AttributeWithData构造的attribute\n buffers[name] = {\n data, usage, name,\n };\n const gltype = attributeData2GLType(data);\n\n attributes[name] = {\n size: attr.size,\n stride: attr.stride,\n offset: attr.offset,\n type: type || gltype,\n normalize: !!attr.normalize,\n dataSource: (name),\n instanceDivisor:attr.instanceDivisor,\n };\n attributesReleasable[name] = releasable || false;\n dirtyFlags[name] = {\n dirty: true,\n discard: true,\n start: Number.POSITIVE_INFINITY,\n end: 0,\n };\n } else {\n // 使用AttributeWithType构造的attribute\n const datasource = (attr as AttributeWithType).dataSource;\n\n if (datasource) {\n // 属性共享buffer\n attributes[name] = {\n size: attr.size,\n stride: attr.stride,\n offset: attr.offset,\n type: type,\n dataSource: datasource,\n normalize: !!attr.normalize,\n };\n }\n }\n attributesName.push(name);\n });\n\n // 顶点索引\n this._index = option.index?.data;\n if ((this._index as any) instanceof Uint8Array) {\n throw Error('Uint8 Index not support');\n }\n dirtyFlags['index'] = {\n dirty: true,\n discard: true,\n start: Number.POSITIVE_INFINITY,\n end: 0,\n };\n\n this._indexReleasable = option.index?.releasable === true;\n\n this._buffers = buffers;\n this._attributes = attributes;\n this._attributesName = attributesName;\n this._attributesReleasable = attributesReleasable;\n this._dirtyFlags = dirtyFlags;\n }\n\n destroy (): void {\n this.drawStart = 0;\n this.drawCount = NaN;\n // @ts-expect-error destroyed set null\n this._buffers = undefined;\n\n // @ts-expect-error destroyed set null\n this.options = undefined;\n\n this._attributes = {};\n this._attributesName = [];\n\n if (this.internal) {\n this.internal.destroy();\n // @ts-expect-error destroyed set null\n this['internal'] = undefined;\n this.renderer = undefined;\n }\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsGeometry;\n this._isDestroyed = true;\n }\n\n // 出入GPUBuffer对象,\n setAttributeBuffer (name: string, buffer: GPUBuffer): void {\n if (this.internal == undefined) { return; }\n const gpuBuffers = this.internal._buffersMap;\n const gpuBufferName = this._attributes[name].dataSource;\n\n if (gpuBuffers[gpuBufferName]) {\n gpuBuffers[gpuBufferName] = buffer as GLGPUBuffer;\n } else {\n // to do\n }\n }\n\n getAttributeBuffer (name: string): GPUBuffer | undefined {\n if (this.internal == undefined) { return undefined; }\n const gpuBuffers = this.internal._buffersMap;\n const gpuBufferName = this._attributes[name].dataSource;\n\n return gpuBuffers[gpuBufferName];\n }\n\n setAttributeData (name: string, data: TypedArray): void {\n const buffers = this._buffers;\n\n if (buffers == undefined) { return; }\n\n const gpuBufferOption = getAttributeBufferOption(this, name);\n const gpuBufferName = this._attributes[name].dataSource;\n\n if (gpuBufferOption) {\n const option: GPUBufferOptions = {\n data: data,\n usage: gpuBufferOption.usage,\n target: gpuBufferOption.target,\n };\n\n buffers[gpuBufferName] = option;\n this._dirtyFlags[gpuBufferName].discard = true;\n this._dirtyFlags[gpuBufferName].dirty = true;\n }\n }\n\n getAttributeData (name: string): TypedArray | undefined {\n const buffers = this._buffers;\n\n if (buffers == undefined) { return; }\n\n const gpuBufferOption = getAttributeBufferOption(this, name);\n\n if (gpuBufferOption) {\n return gpuBufferOption.data;\n }\n\n return undefined;\n }\n\n setAttributeSubData (name: string, offset: number, data: TypedArray): void {\n const buffers = this._buffers;\n\n if (buffers == undefined) { return; }\n\n const gpuBufferOption = getAttributeBufferOption(this, name);\n\n if (gpuBufferOption) {\n const attribute = gpuBufferOption;\n\n if (attribute.data != undefined) {\n const start = offset;\n const length = offset + data.length;\n\n // this._dirtyFlags[name].discard = false;\n if (attribute.data.length < length) {\n // @ts-expect-error safe to use\n const newData = new data.constructor(length);\n\n newData.set(attribute.data);\n attribute.data = newData;\n this._dirtyFlags[name].discard = true;\n } else if (!this._dirtyFlags[name].discard) {\n const dirtyFlag = this._dirtyFlags[name];\n\n dirtyFlag.start = Math.min(dirtyFlag.start as number, start);\n dirtyFlag.end = Math.max(dirtyFlag.end as number, length - 1);\n }\n (attribute.data as TypedArray).set(data, start);\n this._dirtyFlags[name].dirty = true;\n }\n } else {\n // to do\n }\n }\n\n getIndexData (): Uint16Array | Uint32Array | undefined {\n return this._index;\n }\n\n setIndexData (data: Uint16Array | Uint32Array | undefined): void {\n if (isIndexDataType(data)) {\n this._index = data as any;\n this._dirtyFlags['index'].discard = true;\n this._dirtyFlags['index'].dirty = true;\n }\n }\n\n setIndexSubData (offset: number, data: TypedArray): void {\n if (this._index) {\n // this._dirtyFlags['index'].discard = false;\n const start = offset;\n const length = offset + data.length;\n\n if (this._index.length < length) {\n // @ts-expect-error safe to use\n const newData = new data.constructor(end);\n\n newData.set(this._index);\n this._index = newData;\n this._dirtyFlags['index'].discard = true;\n } else if (!this._dirtyFlags['index'].discard) {\n const dirtyFlag = this._dirtyFlags['index'];\n\n dirtyFlag.start = Math.min(dirtyFlag.start as number, start);\n dirtyFlag.end = Math.max(dirtyFlag.end as number, length - 1);\n }\n this._index?.set(data, start);\n this._dirtyFlags['index'].dirty = true;\n }\n }\n\n getAttributeStride (name: string): number {\n const attr = this._attributes[name];\n\n if (attr.stride) {\n return attr.stride;\n }\n\n return attr.size * BYTES_TYPE_MAP[attr.type];\n }\n\n getAttributeDataLength (name: string): number {\n if (this._buffers) {\n const gpuBufferOption = getAttributeBufferOption(this, name);\n\n if (gpuBufferOption) {\n return gpuBufferOption.data?.length as number;\n }\n }\n\n return 0;\n }\n\n getAttributeNames (): string[] {\n return this._attributesName;\n }\n\n assignRenderer (renderer: MarsRenderer): MarsGeometry {\n if (!this.internal) {\n // 索引缓冲区参数\n let indexBufferOption: GPUBufferOptions | undefined = undefined;\n\n if (this._index) {\n const data = this._index;\n\n indexBufferOption = {\n data: data,\n usage: constants.STATIC_DRAW,\n };\n if (data instanceof Uint16Array) {\n this.indexDataType = constants.UNSIGNED_SHORT;\n } else if (data instanceof Uint32Array) {\n this.indexDataType = constants.UNSIGNED_INT;\n }\n }\n\n // 顶点属性参数\n const options = {\n drawStart: this.drawStart,\n drawCount: this.drawCount,\n // 传给GLGeometry用于绑定顶点属性\n attributes: this._attributes,\n buffers: this._buffers,\n mode: this.mode,\n index: indexBufferOption,\n indexDataType:this.indexDataType,\n name: this.name,\n };\n\n //@ts-expect-error safe to set\n this['internal'] = new GLGeometry(options, renderer.internal);\n this.renderer = renderer;\n this.flush();\n //@ts-expect-error safe to set\n this.options = undefined;\n }\n\n return this;\n }\n\n flush (): boolean {\n const internal = this.internal;\n\n if (internal) {\n const attributes = this._attributes;\n const attributesBuffer = this._buffers;\n const indexBuffer = this._index;\n\n forEach(this._dirtyFlags, function (flag, name) {\n let gpuBuffer;\n let data;\n\n if (name == 'index') {\n gpuBuffer = internal._indexBuffer;\n data = indexBuffer;\n } else {\n const bufferName = attributes[name].dataSource;\n\n gpuBuffer = internal.getGPUBuffer(bufferName) as GLGPUBuffer;\n data = attributesBuffer[bufferName].data;\n }\n\n if ((flag.dirty || flag.discard) && gpuBuffer && data) {\n if (flag.discard) {\n gpuBuffer.bufferData(data);\n } else {\n const offset = (flag.start as number) * data.BYTES_PER_ELEMENT + data.byteOffset;\n const length = (flag.end as number) - (flag.start as number) + 1;\n // @ts-expect-error safe to use\n const subData = new data.constructor(data.buffer, offset, length);\n\n gpuBuffer.bufferSubData(flag.start as number, subData);\n }\n flag.start = Number.POSITIVE_INFINITY;\n flag.end = 0;\n flag.dirty = flag.discard = false;\n }\n });\n\n // 需要释放的attributes数据\n forEach(this._attributesReleasable, function (releasable, name) {\n const bufferName = attributes[name].dataSource;\n\n if (attributesBuffer[bufferName] && releasable) {\n attributesBuffer[bufferName].data = undefined;\n }\n });\n\n // 释放indexbuffer\n if (this._indexReleasable) {\n this._index = undefined;\n }\n }\n\n return false;\n }\n}\n","import type {\n GeometriesMeshOptions, GeometryMeshOptions, InstancedMeshOptions, Mesh, MeshDestroyOptions, MeshOptions,\n} from '../../types/Mesh';\nimport { MarsMaterial } from './MarsMaterial';\nimport { MarsGeometry } from './MarsGeometry';\nimport type { GeometryOptions } from '../../types/Geometry';\nimport type { Material, MaterialDestroyOptions, MaterialOptions } from '../../types/Material';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { DestroyOptions } from '../../types/constants';\nimport { consoleError } from '../common/console';\nimport { throwDestroyedError } from '../common/utils';\nimport type { InstancedMesh } from '../../types/Mesh';\n\nlet seed = 1;\n\nexport class MarsMesh implements Mesh {\n\n readonly material: MarsMaterial;\n\n readonly geometries: MarsGeometry[];\n\n readonly name: string;\n\n public priority: number;\n\n public hide: boolean;\n\n public renderer?: MarsRenderer;\n\n private _isDestroyed = false;\n\n get isDestroyed (): boolean {\n return this._isDestroyed;\n }\n\n get geometry () {\n return this.geometries[0];\n }\n\n constructor (options: MeshOptions, renderer?: MarsRenderer) {\n this.material = options.material instanceof MarsMaterial ? options.material : new MarsMaterial(options.material as MaterialOptions);\n const geo = (options as GeometryMeshOptions).geometry;\n\n if (geo) {\n this.geometries = [geo instanceof MarsGeometry ? geo : new MarsGeometry(geo as GeometryOptions)];\n } else if ((options as GeometriesMeshOptions).geometries) {\n this.geometries = (options as GeometriesMeshOptions).geometries.map(geo => geo instanceof MarsGeometry ? geo : new MarsGeometry(geo as GeometryOptions));\n } else {\n this.geometries = [];\n }\n this.name = options.name || ('MarsMesh_' + seed++);\n this.priority = options.priority || 0;\n this.hide = false;\n if (renderer) {\n this.assignRenderer(renderer);\n }\n }\n\n setMaterial (mtl: Material | MaterialOptions, destroyMtl?: MaterialDestroyOptions | DestroyOptions.keep) {\n if (destroyMtl !== DestroyOptions.keep) {\n this.material.destroy(destroyMtl);\n }\n //@ts-expect-error set from internal safely\n this.material = mtl instanceof MarsMaterial ? mtl : new MarsMaterial(mtl as MaterialOptions);\n if (this.renderer) {\n this.material.assignRenderer(this.renderer);\n }\n }\n\n setGeometries (geos: MarsGeometry[], destroyGeometries?: DestroyOptions) {\n const arr = this.geometries;\n\n if (destroyGeometries !== DestroyOptions.keep) {\n arr.forEach(g => g.destroy());\n }\n arr.length = 0;\n const r = this.renderer;\n\n geos.forEach(g => {\n if (r) {\n g.assignRenderer(r);\n }\n arr.push(g);\n });\n }\n\n destroy (options?: MeshDestroyOptions) {\n if (this._isDestroyed) {\n consoleError('call mesh.destroy multiple times', this);\n }\n if (options?.geometries !== DestroyOptions.keep) {\n this.geometries.forEach(element => {\n element.destroy();\n });\n }\n this.geometries.length = 0;\n const materialDestroyOption = options?.material;\n\n if (materialDestroyOption !== DestroyOptions.keep && this.material) {\n this.material.destroy(materialDestroyOption);\n // @ts-expect-error safe to assign\n this['material'] = undefined;\n }\n this.assignRenderer = throwDestroyedError as unknown as (r: MarsRenderer) => MarsMesh;\n this._isDestroyed = true;\n }\n\n assignRenderer (renderer: MarsRenderer): MarsMesh {\n this.geometries.forEach(element => {\n element.assignRenderer(renderer);\n });\n\n if (!this.material.materialInternal) {\n this.material.assignRenderer(renderer);\n }\n this.renderer = renderer;\n\n return this;\n }\n}\n\nexport class MarsInstancedMesh extends MarsMesh implements InstancedMesh {\n instanceCount: number;\n constructor (options: InstancedMeshOptions, renderer?: MarsRenderer) {\n super(options, renderer);\n this.instanceCount = options.instanceCount;\n }\n}\n","import type {\n RendererExtensions, RenderPass, RenderState, SharedShaderWithSource, Texture,\n} from '../../types';\nimport {\n TextureLoadAction, TextureSourceType,\n} from '../../types';\nimport type { MarsTexture } from './MarsTexture';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { MarsRenderPass } from './MarsRenderPass';\nimport type { GLFrameBuffer } from '../webgl/GLFrameBuffer';\nimport type { GLTexture } from '../webgl/GLTexture';\nimport { RenderFrameInternal } from './RenderFrameInternal';\nimport { constants } from '../webgl/constants';\nimport { MarsMesh } from './MarsMesh';\n\nconst copyShaderId = '$mri-internal-copy';\n\nexport class MarsExtWrap implements RendererExtensions {\n _copyRenderPass?: MarsRenderPass;\n renderer?: MarsRenderer;\n\n constructor (renderer: MarsRenderer) {\n this.renderer = renderer;\n if (renderer?.gpu.level === 1) {\n this._copyRenderPass = this._createCopyRenderPass().assignRenderer(renderer);\n const shader = this._copyRenderPass.meshes[0].material.options.shader;\n\n renderer.shaderLibrary.addShader(shader as SharedShaderWithSource);\n renderer.shaderLibrary.compileShader(copyShaderId);\n }\n }\n\n resetColorAttachments (rp: RenderPass, colorTextures: Texture[]) {\n const r = this.renderer;\n\n if (r) {\n (rp as MarsRenderPass).resetColorAttachments(colorTextures as MarsTexture[]);\n }\n }\n\n copyTexture (source: Texture, tex: Texture): void {\n const renderer = this.renderer;\n\n if (renderer) {\n source.assignRenderer(renderer);\n tex.assignRenderer(renderer);\n tex.updateSource({\n sourceType: TextureSourceType.framebuffer,\n data: {\n width: tex.width || source.width,\n height: tex.height || source.height,\n },\n });\n if (renderer.gpu.level === 2) {\n this.copy2(source as MarsTexture, tex as MarsTexture);\n } else {\n this.copy1(source as MarsTexture, tex as MarsTexture);\n }\n }\n\n }\n\n copy2 (source: MarsTexture, target: MarsTexture) {\n this.renderer?.internal.copy2(source.internal as GLTexture, target.internal as GLTexture);\n }\n\n copy1 (source: MarsTexture, target: MarsTexture) {\n const rp = this._copyRenderPass;\n\n if (rp) {\n const renderer = this.renderer;\n\n if (renderer) {\n const fb = rp.frameBuffer as GLFrameBuffer;\n\n fb.viewport[2] = target.width || source.width;\n fb.viewport[3] = target.height || source.height;\n renderer.internal.resetColorAttachments(fb, [target.internal as GLTexture]);\n const mesh = rp.meshes[0];\n\n mesh.material.defaultDataBlock.setUniformTexture('uTex', source);\n RenderFrameInternal.renderRenderPass(renderer, rp, { currentFrame: {} } as RenderState);\n }\n }\n }\n\n _createCopyRenderPass (): MarsRenderPass {\n const name = 'mri-copy-mesh';\n\n return new MarsRenderPass({\n name: 'mri-copy-rp',\n loadAction: {\n colorAction: TextureLoadAction.whatever,\n },\n attachments: [{ texture: { format: constants.RGBA } }],\n meshes: [new MarsMesh({\n name,\n priority: 0,\n geometry: {\n name,\n mode: constants.TRIANGLE_STRIP,\n attributes: {\n aPos: {\n type: constants.FLOAT,\n size: 2,\n data: new Float32Array([-1, 1, -1, -1, 1, 1, 1, -1]),\n },\n },\n drawCount: 4,\n },\n material: {\n states: {\n depthTest: false,\n cullFaceEnabled: false,\n stencilTest: false,\n },\n name,\n shader: {\n cacheId: copyShaderId,\n name,\n vertex: `precision highp float;\n attribute vec2 aPos;varying vec2 vTex;\n void main(){\n gl_Position = vec4(aPos,0.,1.0);\n vTex = (aPos + vec2(1.))/2.;\n }\n `,\n fragment: ` precision highp float;\n varying vec2 vTex;\n uniform sampler2D uTex;\n void main(){gl_FragColor = texture2D(uTex,vTex);}\n `,\n },\n },\n })],\n });\n }\n\n destroy () {\n if (this.renderer) {\n this._copyRenderPass?.meshes[0].material.defaultDataBlock.setUniformValue('uTex', undefined);\n this._copyRenderPass?.destroy();\n this.renderer = undefined;\n }\n }\n}\n","import type {\n GPUBuffer,\n GPUBufferOptions,\n GPUCapability,\n GPURenderer,\n RendererOptions,\n RenderFrameOptions,\n ShaderLibrary,\n} from '../../types';\nimport { GPUCapabilityEmpty } from '../../types/GPUCapability';\nimport { ShaderLibraryEmpty } from '../../types/ShaderLibrary';\nimport { GLGPURenderer } from '../webgl/GLGPURenderer';\nimport { GLGPUBuffer } from '../webgl/GLGPUBuffer';\nimport { MarsRenderFrame } from './MarsRenderFrame';\nimport { getDefaultGPUCapability } from './MarsGPUCapability';\nimport { GLGPUCapability } from '../webgl/GLGPUCapability';\nimport type { Canvas } from '../../types/Canvas';\nimport { CanvasEmpty } from '../../types/Canvas';\nimport { MarsExtWrap } from './MarsExtWrap';\nimport { consoleError } from '../common/console';\n\nconst ERR_EXP = 'WebGL not available';\n\nexport class MarsRenderer implements GPURenderer {\n readonly gpu: GPUCapability;\n readonly shaderLibrary: ShaderLibrary;\n readonly internal!: GLGPURenderer;\n readonly canvas!: Canvas;\n readonly extension: MarsExtWrap;\n\n get isDestroyed () {\n const internal = this.internal;\n\n return internal ? internal.isDestroyed : true;\n }\n\n get height () {\n return this.internal?.height || 0;\n }\n\n get width () {\n return this.internal?.width || 0;\n }\n\n constructor (options: RendererOptions) {\n let gl: WebGLRenderingContext | WebGL2RenderingContext = options.gl as WebGLRenderingContext | WebGL2RenderingContext;\n\n if (!gl) {\n const webglOptions = {\n preserveDrawingBuffer: options.willCaptureImage,\n alpha: true,\n stencil: true,\n antialias: true,\n depth: true,\n premultipliedAlpha: true,\n };\n const canvas = options.canvas;\n\n if (canvas) {\n const frameworks = options.frameworks || [getDefaultGPUCapability().type as 'webgl'];\n\n for (let i = 0; i < frameworks.length; i++) {\n gl = canvas?.getContext(frameworks[i], webglOptions) as WebGLRenderingContext;\n if (gl) {\n break;\n }\n }\n }\n }\n if (gl) {\n this.gpu = new GLGPUCapability({ gl });\n this.internal = new GLGPURenderer(gl);\n this.shaderLibrary = this.internal.shaderLibrary;\n this.canvas = gl.canvas;\n } else {\n this.gpu = new GPUCapabilityEmpty();\n this.shaderLibrary = new ShaderLibraryEmpty();\n this.canvas = new CanvasEmpty();\n consoleError(ERR_EXP);\n }\n this.extension = new MarsExtWrap(this);\n }\n\n createBuffer (options: GPUBufferOptions): GPUBuffer {\n const internal = this.internal;\n\n if (!internal) {\n throw Error(ERR_EXP);\n }\n\n return new GLGPUBuffer(options, internal);\n }\n\n createRenderFrame (options?: RenderFrameOptions): MarsRenderFrame {\n return new MarsRenderFrame(options || {}, this);\n }\n\n destroy (haltGL?: boolean): void {\n this.extension.destroy();\n this.internal?.destroy(haltGL);\n // @ts-expect-error safe to assign\n this.gpu = new GPUCapabilityEmpty();\n // @ts-expect-error safe to assign\n this.shaderLibrary = new ShaderLibraryEmpty();\n }\n\n resize (width: number, height: number): void {\n const internal = this.internal;\n\n if (internal) {\n if (this.width !== width || this.height !== height) {\n internal.resize(width, height);\n }\n }\n }\n\n cancelAnimationFrame (id: number): void {\n return window.cancelAnimationFrame(id);\n }\n\n getErrors (): string[] {\n const gl = this.internal.gl;\n const err = gl.getError();\n\n if (err) {\n return ['webgl error:' + err];\n }\n\n return [];\n }\n\n requestAnimationFrame (cb: FrameRequestCallback): number {\n return window.requestAnimationFrame(cb);\n }\n}\n","import { MarsGeometry } from './MarsGeometry';\nimport type { GeometryOptions, SharedGeometry, SharedGeometryOptions } from '../../types';\nimport { GLGeometry } from '../webgl/GLGeometry';\nimport type { MarsRenderer } from './MarsRenderer';\nimport { forEach } from '../common/utils';\n\nexport class MarsSharedGeometry extends MarsGeometry implements SharedGeometry {\n private readonly _source: MarsGeometry;\n\n renderer!: MarsRenderer;\n\n constructor (opt: SharedGeometryOptions, renderer?: MarsRenderer) {\n super(Object.assign({ attributes: {} }, opt) as GeometryOptions);\n let indexData = opt.index ? opt.index.data : opt.geometry.getIndexData();\n\n if (indexData) {\n //@ts-expect-error safe to assign\n indexData = new indexData.constructor(indexData) as Uint16Array;\n }\n this._index = indexData;\n this._source = opt.geometry as MarsGeometry;\n this._drawCount = opt.drawCount || 0;\n this._drawStart = opt.drawStart || 0;\n this._mode = opt.mode || 0;\n forEach(this._source._attributes, (attr, name) => {\n this._attributes[name] = Object.assign({}, attr);\n });\n if (renderer) {\n this.assignRenderer(renderer);\n }\n }\n\n assignRenderer (renderer: MarsRenderer): MarsSharedGeometry {\n if (!this.renderer) {\n const geometry = this._source;\n\n geometry.assignRenderer(renderer);\n const internal = geometry.internal;\n const glgeo = new GLGeometry(internal, renderer.internal);\n\n glgeo.drawCount = this.drawCount;\n glgeo.drawStart = this.drawStart;\n glgeo.mode = this.mode;\n if (this._index) {\n const ret = glgeo.createIndexBuffer(this._index, renderer.internal);\n\n glgeo.setIndexBuffer(ret[0], ret[1]);\n }\n //@ts-expect-error safe to assign\n this.internal = glgeo;\n this.renderer = geometry.renderer as MarsRenderer;\n }\n\n return this;\n }\n\n getAttributeNames (): string[] {\n return this._source.getAttributeNames();\n }\n\n getAttributeDataLength (name: string): number {\n if (this._buffers[name]) {\n return super.getAttributeDataLength(name);\n }\n\n return this._source.getAttributeDataLength(name);\n }\n\n flush (): boolean {\n this._source.flush();\n\n return super.flush();\n }\n\n destroy () {\n if (this.internal) {\n //@ts-expect-error safe to assign\n this.internal.vaoMap = {};\n }\n super.destroy();\n }\n\n}\n","import { consoleLog } from './common/console';\n\nexport * from '../types/constants';\nexport * from '../types/RenderPass';\nexport * from '../types/Texture';\nexport * from '../types/GPUBuffer';\nexport { constants } from './webgl/constants';\nexport * from '../types/ShaderLibrary';\nexport { MarsRenderFrame as RenderFrame } from './render/MarsRenderFrame';\nexport { MarsRenderer as Renderer } from './render/MarsRenderer';\nexport { MarsMesh as Mesh, MarsInstancedMesh as InstancedMesh } from './render/MarsMesh';\nexport { MarsGeometry as Geometry } from './render/MarsGeometry';\nexport { MarsRenderPass as RenderPass } from './render/MarsRenderPass';\nexport { MarsTexture as Texture } from './render/MarsTexture';\nexport { MarsMaterial as Material } from './render/MarsMaterial';\nexport { MarsMaterialDataBlock as MaterialDataBlock } from './render/MarsMaterialDataBlock';\nexport { MarsSharedGeometry as SharedGeometry } from './render/MarsSharedGeometry';\nexport { getDefaultGPUCapability } from './render/MarsGPUCapability';\nexport { getDefaultTextureFactory, setDefaultTextureFactory, MarsTextureFactory } from './render/MarsTextureFactory';\n\nconsoleLog('version: ' + __VERSION__);\n"],"names":["DestroyOptions","RenderPassDestroyAttachmentType","TextureLoadAction","TextureStoreAction","RenderPassAttachmentStorageType","RenderPassMeshOrder","TextureSourceType","_a","_b","ShaderCompileResultStatus","imageBitMapAvailable","g","seed"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG,SAAS,CAAC,EAAE,CAAC,EAAE;AACnC,IAAI,aAAa,GAAG,MAAM,CAAC,cAAc;AACzC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;AACpF,QAAQ,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1G,IAAI,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC;AACF;AACO,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE;AAChC,IAAI,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,IAAI;AAC7C,QAAQ,MAAM,IAAI,SAAS,CAAC,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC,CAAC;AAClG,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,IAAI,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACzF,CAAC;AACD;AACO,IAAI,QAAQ,GAAG,WAAW;AACjC,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC,EAAE;AACrD,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7D,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAY,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,SAAS;AACT,QAAQ,OAAO,CAAC,CAAC;AACjB,MAAK;AACL,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3C,EAAC;AA4KD;AACO,SAAS,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;AAC9C,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACzF,QAAQ,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE;AAChC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjE,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAS;AACT,KAAK;AACL,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AA6FD;AACuB,OAAO,eAAe,KAAK,UAAU,GAAG,eAAe,GAAG,UAAU,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;AACvH,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;AACrF;;AC9TA,IAAM,MAAM,GAAG,WAAW,CAAC;AAErB,SAAU,UAAU,CAAE,GAAW,EAAA;IAAE,IAAc,IAAA,GAAA,EAAA,CAAA;SAAd,IAAc,EAAA,GAAA,CAAA,EAAd,EAAc,GAAA,SAAA,CAAA,MAAA,EAAd,EAAc,EAAA,EAAA;QAAd,IAAc,CAAA,EAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;IACrD,OAAO,CAAC,IAAI,CAAA,KAAA,CAAZ,OAAO,EAAA,aAAA,CAAA,CAAM,MAAM,GAAG,GAAG,CAAK,EAAA,IAAI,EAAE,KAAA,CAAA,CAAA,CAAA;AACtC,CAAC;AAEK,SAAU,WAAW,CAAE,GAAW,EAAA;IAAE,IAAc,IAAA,GAAA,EAAA,CAAA;SAAd,IAAc,EAAA,GAAA,CAAA,EAAd,EAAc,GAAA,SAAA,CAAA,MAAA,EAAd,EAAc,EAAA,EAAA;QAAd,IAAc,CAAA,EAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;IACtD,OAAO,CAAC,IAAI,CAAA,KAAA,CAAZ,OAAO,EAAA,aAAA,CAAA,CAAM,MAAM,GAAG,GAAG,CAAK,EAAA,IAAI,EAAE,KAAA,CAAA,CAAA,CAAA;AACtC,CAAC;AACK,SAAU,YAAY,CAAE,GAAW,EAAA;IAAE,IAAc,IAAA,GAAA,EAAA,CAAA;SAAd,IAAc,EAAA,GAAA,CAAA,EAAd,EAAc,GAAA,SAAA,CAAA,MAAA,EAAd,EAAc,EAAA,EAAA;QAAd,IAAc,CAAA,EAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;IACvD,OAAO,CAAC,KAAK,CAAA,KAAA,CAAb,OAAO,EAAA,aAAA,CAAA,CAAO,MAAM,GAAG,GAAG,CAAK,EAAA,IAAI,EAAE,KAAA,CAAA,CAAA,CAAA;AACvC;;ACTYA,gCAIX;AAJD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,cAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,cAAA,CAAA,cAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,cAAA,CAAA,cAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EAJWA,sBAAc,KAAdA,sBAAc,GAIzB,EAAA,CAAA,CAAA;;ACMWC,iDAKX;AALD,CAAA,UAAY,+BAA+B,EAAA;AACzC,IAAA,+BAAA,CAAA,+BAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,+BAAA,CAAA,+BAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,+BAAA,CAAA,+BAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;AAChB,IAAA,+BAAA,CAAA,+BAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAe,CAAA;AACjB,CAAC,EALWA,uCAA+B,KAA/BA,uCAA+B,GAK1C,EAAA,CAAA,CAAA,CAAA;AAEM,IAAM,yBAAyB,GAAG,EAAE;AACpC,IAAM,wBAAwB,GAAG,KAAK;AACtC,IAAM,6BAA6B,GAAG,KAAK;AAEtCC,mCAMX;AAND,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;;;;AAIZ,IAAA,iBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACX,CAAC,EANWA,yBAAiB,KAAjBA,yBAAiB,GAM5B,EAAA,CAAA,CAAA,CAAA;AAEWC,oCAGX;AAHD,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,kBAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACX,CAAC,EAHWA,0BAAkB,KAAlBA,0BAAkB,GAG7B,EAAA,CAAA,CAAA,CAAA;AAEWC,iDAcX;AAdD,CAAA,UAAY,+BAA+B,EAAA;AACzC,IAAA,+BAAA,CAAA,+BAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,+BAAA,CAAA,+BAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;;AAET,IAAA,+BAAA,CAAA,+BAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,kBAAoB,CAAA;;AAEpB,IAAA,+BAAA,CAAA,+BAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAmB,CAAA;;AAEnB,IAAA,+BAAA,CAAA,+BAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,sBAAwB,CAAA;;AAExB,IAAA,+BAAA,CAAA,+BAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,kBAAoB,CAAA;;AAEpB,IAAA,+BAAA,CAAA,+BAAA,CAAA,4BAAA,CAAA,GAAA,CAAA,CAAA,GAAA,4BAA8B,CAAA;AAEhC,CAAC,EAdWA,uCAA+B,KAA/BA,uCAA+B,GAc1C,EAAA,CAAA,CAAA,CAAA;AAkFWC,qCAIX;AAJD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,mBAAA,CAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb,IAAA,mBAAA,CAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AAChB,CAAC,EAJWA,2BAAmB,KAAnBA,2BAAmB,GAI9B,EAAA,CAAA,CAAA;;AC3HWC,mCASX;AATD,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACJ,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,iBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,iBAAA,CAAA,iBAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AACd,IAAA,iBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,iBAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAe,CAAA;AACf,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACb,CAAC,EATWA,yBAAiB,KAAjBA,yBAAiB,GAS5B,EAAA,CAAA,CAAA;;ACnBY,IAAA,4BAA4B,GAAG,CAAC,IAAI;;;ACAjD;AACO,IAAI,SAAS,GAA2B,GAAG;AAI3C;AACL,IAAA,IAAI,OAAO,sBAAsB,KAAK,UAAU,EAAE;QAChD,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC9B,KAAA;AAAM,SAAA,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE;QACvD,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;AACvC,KAAA;AAAM,SAAA;;QAEL,YAAY,CAAC,qBAAqB,CAAC,CAAC;AACrC,KAAA;AACF,CAAA;AACD;AACA,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;AAE/B,SAAS,IAAI,CAAE,MAAW,EAAA;AACxB,IAAA,KAAK,IAAM,MAAI,IAAI,MAAM,EAAE;AACzB,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,MAAI,CAAC,EAAE;;YAExB,SAAS,CAAC,MAAI,CAAC,GAAG,MAAM,CAAC,MAAI,CAAC,CAAC;AAChC,SAAA;AACF,KAAA;AACH,CAAC;AAED,IAAM,GAAG,IAAAC,IAAA,GAAA,EAAA;AACP,IAAAA,IAAA,CAAC,SAAS,CAAC,GAAG,CAAA,GAAG,UAAU;AAC3B,IAAAA,IAAA,CAAC,SAAS,CAAC,KAAK,CAAA,GAAG,YAAY;AAC/B,IAAAA,IAAA,CAAC,SAAS,CAAC,KAAK,CAAA,GAAG,UAAU;AAC7B,IAAAA,IAAA,CAAC,SAAS,CAAC,IAAI,CAAA,GAAG,SAAS;AAC3B,IAAAA,IAAA,CAAC,SAAS,CAAC,aAAa,CAAA,GAAG,UAAU;AACrC,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,WAAW;AACrC,IAAAA,IAAA,CAAC,SAAS,CAAC,cAAc,CAAA,GAAG,WAAW;SACxC,CAAC;AAMI,SAAU,0BAA0B,CAAE,IAAY,EAAA;;IACtD,OAAO,CAAA,CAAA,EAAA,GAAA,GAAG,CAAC,IAAI,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,iBAAiB,KAAI,CAAC,CAAC;AAC3C,CAAC;AACD,IAAM,iBAAiB,IAAAC,IAAA,GAAA,EAAA;IACrBA,IAAC,CAAA,SAAS,CAAC,UAAU,CAAA,GAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7BA,IAAC,CAAA,SAAS,CAAC,UAAU,CAAA,GAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7BA,IAAC,CAAA,SAAS,CAAC,UAAU,CAAA,GAAE,CAAC,CAAC,EAAE,CAAC,CAAC;SAC9B,CAAC;AAEI,SAAU,iBAAiB,CAAE,IAAY,EAAA;IAC7C,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C;;ACfYC,2CAKX;AALD,CAAA,UAAY,yBAAyB,EAAA;AACnC,IAAA,yBAAA,CAAA,yBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACZ,IAAA,yBAAA,CAAA,yBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,yBAAA,CAAA,yBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,yBAAA,CAAA,yBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACf,CAAC,EALWA,iCAAyB,KAAzBA,iCAAyB,GAKpC,EAAA,CAAA,CAAA,CAAA;AAsDD,IAAA,kBAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,kBAAA,GAAA;KA2BC;AAzBC,IAAA,MAAA,CAAA,cAAA,CAAI,kBAAQ,CAAA,SAAA,EAAA,UAAA,EAAA;AAAZ,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,OAAO,EAAE,CAAC;SACX;;;AAAA,KAAA,CAAA,CAAA;IAED,kBAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,OAAe,EAAA;AAC9B,QAAA,OAAO,SAAS,CAAC;KAClB,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,SAAS,GAAT,UAAW,MAAc,EAAE,MAAqB,EAAA;AAC9C,QAAA,OAAO,EAAE,CAAC;KACX,CAAA;IAED,kBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,aAAwD,EAAA;AACzE,QAAA,OAAO,EAAE,CAAC;KACX,CAAA;IAED,kBAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,OAAe,EAAA;KAC5B,CAAA;IAED,kBAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAe,aAAqB,EAAA;AAClC,QAAA,OAAO,EAAE,MAAM,EAAEA,iCAAyB,CAAC,IAAI,EAAE,CAAC;KACnD,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;KACC,CAAA;IACH,OAAC,kBAAA,CAAA;AAAD,CAAC,EAAA;;AC7HK,SAAU,MAAM,CAAE,GAAQ,EAAA;AAC9B,IAAA,OAAO,OAAO,GAAG,KAAK,UAAU,CAAC;AACnC,CAAC;AAEK,SAAU,KAAK,CAAE,CAAM,EAAA;IAC3B,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,KAAK,CAAC,CAAC;AACtC,CAAC;AAEe,SAAA,KAAK,CAAE,CAAM,EAAE,UAAoB,EAAA;AACjD,IAAA,IAAM,GAAG,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC;AAElC,IAAA,IAAI,UAAU,EAAE;AACd,QAAA,OAAO,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,KAAA;AAED,IAAA,OAAO,GAAG,CAAC;AACb,CAAC;AAEe,SAAA,SAAS,CAAE,GAAe,EAAE,GAAQ,EAAA;IAClD,IAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAE7B,IAAA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;AACZ,QAAA,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAEnB,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;AAED,IAAA,OAAO,KAAK,CAAC;AACf,CAAC;AAEe,SAAA,MAAM,CAAK,GAAa,EAAE,IAAO,EAAA;AAC/C,IAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvB,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEf,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;AAED,IAAA,OAAO,KAAK,CAAC;AACf,CAAC;SAEe,WAAW,GAAA;IAAE,IAAoB,OAAA,GAAA,EAAA,CAAA;SAApB,IAAoB,EAAA,GAAA,CAAA,EAApB,EAAoB,GAAA,SAAA,CAAA,MAAA,EAApB,EAAoB,EAAA,EAAA;QAApB,OAAoB,CAAA,EAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;IAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;AAEV,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,IAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAErB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAAE,YAAA,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAAE,SAAA;AACnF,KAAA;AAED,IAAA,OAAO,CAAC,CAAC;AACX,CAAC;SAEe,aAAa,CAAE,GAAe,EAAE,IAAS,EAAE,KAAc,EAAA;AACvE,IAAA,IAAM,SAAS,GAAG,KAAK,IAAIJ,2BAAmB,CAAC,SAAS,CAAC;AAEzD,IAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAAE,QAAA,OAAO,IAAI,CAAC;AAAE,KAAA;AACxC,IAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAAE,QAAA,OAAO,IAAI,CAAC;AAAE,KAAA;AACtC,IAAA,IAAI,SAAS,KAAKA,2BAAmB,CAAC,IAAI,EAAE;;AAE1C,QAAA,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAE3B,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAE/B,YAAA,IAAI,SAAS,KAAKA,2BAAmB,CAAC,SAAS,EAAE;AAC/C,gBAAA,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE;oBACrD,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC5B,oBAAA,KAAK,EAAE,CAAC;oBACR,IAAI,KAAK,KAAK,CAAC,EAAE;wBACf,MAAM;AACP,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE;oBACrD,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC5B,oBAAA,KAAK,EAAE,CAAC;oBACR,IAAI,KAAK,KAAK,CAAC,EAAE;wBACf,MAAM;AACP,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,GAAG,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;AAC1B,SAAA;AACF,KAAA;AAED,IAAA,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAE,GAAe,EAAE,KAAa,EAAE,KAAS,EAAE,GAAoB,EAAA;;AAA/B,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAS,GAAA,CAAA,CAAA,EAAA;AAAE,IAAA,IAAA,GAAA,KAAA,KAAA,CAAA,EAAA,EAAA,GAAM,GAAA,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA,EAAA;;IAEhF,IAAI,KAAK,IAAI,GAAG,EAAE;AAAE,QAAA,OAAO,GAAG,CAAC;AAAE,KAAA;AACjC,IAAA,IAAI,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC;AAC9B,IAAA,IAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IAExB,OAAO,IAAI,GAAG,KAAK,EAAE;AACnB,QAAA,IAAI,KAAK,KAAKA,2BAAmB,CAAC,SAAS,EAAE;;AAE3C,YAAA,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;AAAE,gBAAA,KAAK,EAAE,CAAC;AAAE,aAAA;;AAEzE,YAAA,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,KAAK,EAAE;AAAE,gBAAA,IAAI,EAAE,CAAC;AAAE,aAAA;AACxE,SAAA;AAAM,aAAA;;AAEL,YAAA,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;AAAE,gBAAA,KAAK,EAAE,CAAC;AAAE,aAAA;;AAEzE,YAAA,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,KAAK,EAAE;AAAE,gBAAA,IAAI,EAAE,CAAC;AAAE,aAAA;AACxE,SAAA;;QAED,EAA0B,GAAA,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAhD,GAAG,CAAC,IAAI,CAAC,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,GAAG,CAAC,KAAK,CAAC,GAAA,EAAA,CAAA,CAAA,CAAA,CAA4B;AACnD,KAAA;;IAED,EAA0B,GAAA,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAhD,GAAG,CAAC,KAAK,CAAC,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,GAAG,CAAC,IAAI,CAAC,GAAA,EAAA,CAAA,CAAA,CAAA,CAA4B;IAClD,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IACtC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAErC,IAAA,OAAO,GAAG,CAAC;AACb,CAAC;AAEe,SAAA,WAAW,CAAE,GAAe,EAAE,KAAc,EAAA;AAC1D,IAAA,IAAM,SAAS,GAAG,KAAK,IAAIA,2BAAmB,CAAC,SAAS,CAAC;IAEzD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAAE,QAAA,OAAO,GAAG,CAAC;AAAE,KAAA;AACzD,IAAA,IAAI,SAAS,KAAKA,2BAAmB,CAAC,IAAI,EAAE;AAC1C,QAAA,OAAO,GAAG,CAAC;AACZ,KAAA;AAAM,SAAA;;AAEL,QAAA,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE;AACpB,YAAA,IAAM,QAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,gBAAA,IAAM,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;AAEd,gBAAA,IAAI,SAAS,KAAKA,2BAAmB,CAAC,SAAS,EAAE;AAC/C,oBAAA,OAAO,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE;wBACnE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC5B,wBAAA,KAAK,EAAE,CAAC;wBACR,IAAI,KAAK,KAAK,CAAC,EAAE;4BACf,MAAM;AACP,yBAAA;AACF,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE;wBACnE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC5B,wBAAA,KAAK,EAAE,CAAC;wBACR,IAAI,KAAK,KAAK,CAAC,EAAE;4BACf,MAAM;AACP,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,GAAG,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;AAC1B,aAAA;AAED,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACjC,SAAA;AACF,KAAA;AAEH,CAAC;AAED,IAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;SAEvC,OAAO,CAAK,MAA+C,EAAE,QAAuC,EAAE,OAAa,EAAA;AACjI,IAAA,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;QACjB,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,GAAG,MAAM,CAAC;AAClB,SAAA;AACD,QAAA,KAAK,IAAM,MAAI,IAAI,MAAM,EAAE;YACzB,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAI,CAAC,EAAE;AACrC,gBAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAI,CAAC,EAAE,MAAI,CAAC,CAAC;AAC5C,aAAA;AACF,SAAA;AACF,KAAA;AAED,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;SAEe,mBAAmB,GAAA;AACjC,IAAA,MAAM,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACrD;;ACrKA,IAAA,mBAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,mBAAA,GAAA;KAqCC;IAnCQ,mBAAM,CAAA,MAAA,GAAb,UAAe,KAAsB,EAAA;AACnC,QAAA,IAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACnC,QAAA,IAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEhC,IAAI,QAAQ,CAAC,WAAW,EAAE;AACxB,YAAA,OAAO,YAAY,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;AACxD,SAAA;AACD,QAAA,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;QACjD,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;;AAE3C,QAAA,IAAM,WAAW,GAAgB;AAC/B,YAAA,YAAY,EAAE,KAAK;SACpB,CAAC;AAEF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,IAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACvB,YAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAE/B,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,YAAY,CAAC,sBAAe,IAAI,CAAC,IAAI,EAAY,YAAA,CAAA,EAAE,IAAI,CAAC,CAAC;AAC1D,aAAA;AAAM,iBAAA;AACL,gBAAA,QAAQ,CAAC,mBAAmB,KAAI,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA,CAAC;gBACjF,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAsB,EAAE,WAAW,CAAC,CAAC;AACrE,gBAAA,QAAQ,CAAC,gBAAgB,KAAI,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA,CAAC;AAC5E,aAAA;AACF,SAAA;KACF,CAAA;AAEM,IAAA,mBAAA,CAAA,gBAAgB,GAAvB,UAAyB,QAAsB,EAAE,IAAoB,EAAE,WAAwB,EAAA;AAC7F,QAAA,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;AAC/B,QAAA,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAEhC,QAAA,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACpC,QAAA,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;KAC/B,CAAA;IACH,OAAC,mBAAA,CAAA;AAAD,CAAC,EAAA,CAAA,CAAA;AAED,SAAS,aAAa,CAAE,QAAsB,EAAE,UAA0B,EAAA;IACxE,IAAI,UAAU,CAAC,WAAW,EAAE;QAC1B,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;AAClD,KAAA;IACD,UAAU,CAAC,MAAM,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,YAAY,CAAE,QAAsB,EAAE,KAAkB,EAAA;;AAE/D,IAAA,IAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;AAC9C,IAAA,IAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;AAE5C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,QAAA,IAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAE7B,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,YAAY,CAAC,eAAQ,IAAI,CAAC,IAAI,EAAY,YAAA,CAAA,EAAE,IAAI,CAAC,CAAC;AACnD,SAAA;AAAM,aAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACrB,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAChE,YAAA,UAAU,CAAC,QAAQ,EAAE,IAAgB,EAAE,KAAK,CAAC,CAAC;YAC9C,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC/D,SAAA;AACF,KAAA;AACD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,IAAM,GAAG,GAAI,YAAY,CAAC,CAAC,CAAc,CAAC,QAAQ,CAAC;AAEnD,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,UAAU,EAAE,CAAd,EAAc,CAAC,CAAC;AAC7C,SAAA;AACF,KAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAE,QAAsB,EAAE,UAA0B,EAAA;AAC1E,IAAA,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACpC,IAAA,yBAAyB,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAE,QAAsB,EAAE,IAAc,EAAE,KAAkB,EAAA;AAC7E,IAAA,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AACzB,IAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC;AAElD,IAAA,IAAI,QAAQ,EAAE;AACZ,QAAA,IAAM,SAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;AAEtC,QAAA,IAAI,SAAO,EAAE;YACX,QAAQ,CAAC,WAAW,EAAE,CAAC;AACvB,YAAA,SAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,QAAsB,EAAA;AAC7C,gBAAA,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAClC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAM,GAAG,GAAG,SAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAEvD,gBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,gBAAA,IAAI,GAAG,EAAE;oBACP,GAAG,CAAC,MAAM,EAAE,CAAC;AACd,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;AACF,KAAA;AACH,CAAC;AAED,SAAS,yBAAyB,CAAE,QAAuB,EAAE,UAA0B,EAAA;IACrF,UAAU,CAAC,IAAI,EAAE,CAAC;IAClB,IAAI,UAAU,CAAC,UAAU,EAAE;AACzB,QAAA,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;AACxC,KAAA;AACH,CAAC;AAED,SAAS,KAAK,CAAE,QAAuB,EAAE,MAAoD,EAAA;AAC3F,IAAA,IAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7B,IAAI,GAAG,GAAG,CAAC,CAAC;AAEZ,IAAA,IAAI,MAAM,CAAC,WAAW,KAAKH,yBAAiB,CAAC,KAAK,EAAE;AAClD,QAAA,IAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAErC,QAAA,IAAI,UAAU,EAAE;YACd,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,SAAA;QACD,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACxC,QAAA,GAAG,GAAG,SAAS,CAAC,gBAAgB,CAAC;AAClC,KAAA;AACD,IAAA,IAAI,MAAM,CAAC,aAAa,KAAKA,yBAAiB,CAAC,KAAK,EAAE;AACpD,QAAA,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxB,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;AAC7C,QAAA,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,kBAAkB,CAAC;AAC1C,KAAA;AACD,IAAA,IAAI,MAAM,CAAC,WAAW,KAAKA,yBAAiB,CAAC,KAAK,EAAE;AAClD,QAAA,IAAM,KAAK,GAAG,MAAM,CAAC,UAAoB,CAAC;AAE1C,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;AACrD,QAAA,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,gBAAgB,CAAC;AACxC,KAAA;AACD,IAAA,IAAI,GAAG,EAAE;AACP,QAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClB,KAAA;AACH;;ACpJA,IAAA,eAAA,kBAAA,YAAA;AAGE,IAAA,SAAA,eAAA,CAAa,SAA0C,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;KACrD;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,YAAA;QACE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;KAC1C,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,WAAW,GAAX,UAAa,IAAY,EAAE,KAAiC,EAAA;QAC1D,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC9B,SAAA;KACF,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAkB,IAAY,EAAE,KAAkB,EAAA;QAChD,IAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAEjC,QAAA,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;AACf,YAAA,OAAQ,GAAoB,CAAC,KAAK,CAAC,CAAC;AACrC,SAAA;AAED,QAAA,OAAO,GAAmB,CAAC;KAC5B,CAAA;IAED,eAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAkB,IAAY,EAAA;AAC5B,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC;KAC/B,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;AACE,QAAA,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AAEzB,QAAA,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAA;YAC3B,IAAI,EAAE,IAAI,MAAM,CAAE,EAAgB,CAAC,OAAO,CAAC,EAAE;gBAC1C,EAAgB,CAAC,OAAO,EAAE,CAAC;AAC7B,aAAA;AACD,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;AACjB,SAAC,CAAC,CAAC;KACJ,CAAA;IACH,OAAC,eAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACjCD,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,IAAA,eAAA,kBAAA,YAAA;IAoBE,SAAa,eAAA,CAAA,OAA2B,EAAE,QAAuB,EAAA;QAdzD,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QAe3B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,YAA4B,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,aAAa,GAAG,eAAe,EAAE,CAAC,CAAC;AAChE,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC/B,SAAA;KACF;AApBD,IAAA,MAAA,CAAA,cAAA,CAAI,eAAY,CAAA,SAAA,EAAA,cAAA,EAAA;AAAhB,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SACnC;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,eAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,eAAQ,CAAA,SAAA,EAAA,UAAA,EAAA;AAAZ,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,SAAS,CAAC;SACvB;;;AAAA,KAAA,CAAA,CAAA;IAYD,eAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,QAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC3B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAED,eAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAS,OAAmC,EAAA;AAC1C,QAAA,IAAI,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,SAAS,MAAKF,sBAAc,CAAC,IAAI,EAAE;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC1B,SAAA;QACD,IAAM,IAAI,GAAG,CAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,IAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;AAE1D,QAAA,IAAI,IAAI,KAAKA,sBAAc,CAAC,IAAI,EAAE;AAChC,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAA,UAAU,EAAA;AACnC,gBAAA,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,aAAC,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,mBAAsE,CAAC;AAC7F,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;AACE,QAAA,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAClC,CAAA;IAED,eAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,MAAoB,EAAA;QACnC,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;KAClD,CAAA;IAED,eAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAe,IAAgB,EAAA;AAC7B,QAAA,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;KACzC,CAAA;IAED,eAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAkB,IAAgB,EAAA;AAChC,QAAA,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;KACrC,CAAA;IAED,eAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,QAAoF,EAAA;AACrG,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;AAElC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3C,SAAA;KACF,CAAA;IACH,OAAC,eAAA,CAAA;AAAD,CAAC,EAAA;;AC3FM,IAAM,wBAAwB,GAAG,CAAC,CAAC;AACnC,IAAM,uBAAuB,GAAG,CAAC,CAAC;AAsCzC,IAAA,kBAAA,kBAAA,YAAA;AAkBE,IAAA,SAAA,kBAAA,GAAA;QAhBA,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;AACV,QAAA,IAAA,CAAA,UAAU,GAAG;AACX,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,gBAAgB,EAAE,CAAC;AACnB,YAAA,iBAAiB,EAAE,CAAC;AACpB,YAAA,iBAAiB,EAAE,CAAC;AACpB,YAAA,mBAAmB,EAAE,CAAC;AACtB,YAAA,mBAAmB,EAAE,CAAC;AACtB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,iBAAiB,EAAC,CAAC;AACnB,YAAA,oBAAoB,EAAE,CAAC;AACvB,YAAA,iBAAiB,EAAE,CAAC;AACpB,YAAA,gBAAgB,EAAE,KAAK;SACxB,CAAC;AAGA,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;KACpB;IAED,kBAAK,CAAA,SAAA,CAAA,KAAA,GAAL,UAAO,EAAyB,EAAA;KAC/B,CAAA;IACH,OAAC,kBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC3DD,IAAA,WAAA,kBAAA,YAAA;IAgCE,SAAa,WAAA,CAAA,OAAyB,EAAE,QAAuB,EAAA;QApBvD,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;AAqB3B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAgB,CAAC;QAC3E,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC,WAAW,CAAC;AACpD,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,YAAY,CAAC;QACvD,IAAI,OAAO,CAAC,IAAI,EAAE;AAChB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/B,SAAA;aAAM,IAAI,OAAO,CAAC,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACrC,SAAA;KACF;AA5BD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAU,CAAA,SAAA,EAAA,YAAA,EAAA;AAAd,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,WAAQ,CAAA,SAAA,EAAA,UAAA,EAAA;AAAZ,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,OAAO,IAAI,CAAC;SACb;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,WAAK,CAAA,SAAA,EAAA,OAAA,EAAA;AAAT,QAAA,GAAA,EAAA,YAAA;;YACE,OAAO,CAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,KAAI,CAAC,CAAC;SAClC;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,WAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;AAAA,KAAA,CAAA,CAAA;AAgBD,IAAA,WAAA,CAAA,SAAA,CAAA,IAAI,GAAJ,YAAA;;QACE,IAAM,EAAE,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,EAA2B,CAAC;QAEtD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC3C,CAAA;IAED,WAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAY,UAA+B,EAAA;AACzC,QAAA,IAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,UAAoB,GAAI,UAAyB,CAAC,UAAU,CAAC;QAE/G,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAC9B,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5B,YAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAE3B,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,UAAU,KAAK,CAAC,EAAE;;gBAEpB,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,aAAA;AAAM,iBAAA;gBACL,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,gBAAA,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE;oBACrB,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,UAAwB,CAAC,CAAC;AACvD,iBAAA;AACF,aAAA;AACD,YAAA,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC7B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACtB,SAAA;KACF,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,aAAa,GAAb,UAAe,aAAqB,EAAE,UAAsB,EAAA;QAC1D,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5B,YAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3B,YAAA,IAAM,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC,iBAAiB,CAAC;YAEhE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrC,YAAA,IAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;AAEtD,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;AACjC,gBAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;gBAC9B,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/C,aAAA;YACD,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AACjD,YAAA,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC7B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACtB,SAAA;KACF,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;;QACE,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,eAAe,CAAC,IAAI,CAAC,CAAC;;QAErC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,WAAW,GAAX,UAAa,aAAqB,EAAE,UAAsB,EAAA;;AACxD,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;YACpB,IAAM,EAAE,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,EAA4B,CAAC;AACvD,YAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAE3B,YAAA,IAAI,EAAE,EAAE;gBACN,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrC,gBAAA,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;AACtF,gBAAA,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE5B,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;IAED,WAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,cAAsB,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC;KAC1C,CAAA;IAED,WAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,QAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;AAElB,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;AACnC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAEH,OAAC,WAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC5ID;;AAEG;AAGH,IAAA,UAAA,kBAAA,YAAA;AAuBE,IAAA,SAAA,UAAA,CAAa,EAAkD,EAAA;QArBxD,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAsBrB,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AACd,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gCAAgC,CAAC,GAAG,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;;AAEE,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;KAChB,CAAA;AAEO,IAAA,UAAA,CAAA,SAAA,CAAA,MAAM,GAAd,YAAA;AACE,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,QAAQ,CAAC;AAC9C,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;KAChC,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,MAAM,GAAN,UAAQ,UAAkB,EAAE,MAAgB,EAAA;AAC1C,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACzB,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC1B,SAAA;KACF,CAAA;AAED;;;;;AAKG;IACH,UAAM,CAAA,SAAA,CAAA,MAAA,GAAN,UAAQ,UAAkB,EAAA;QACxB,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAErC,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC7B,SAAA;KACF,CAAA;AAED;;;;;AAKG;IACH,UAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAS,UAAkB,EAAA;QACzB,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAErC,IAAI,KAAK,KAAK,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC9B,SAAA;KACF,CAAA;AAED;;;;;;;AAOG;AACH,IAAA,UAAA,CAAA,SAAA,CAAA,eAAe,GAAf,UAAiB,MAAc,EAAE,WAAoC,EAAA;QACnE,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE;AACpD,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC/C,SAAA;KACF,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAkB,MAAc,EAAE,YAAsC,EAAA;QACtE,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,YAAY,EAAE;AACtD,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACjD,SAAA;KACF,CAAA;AAED;;AAEG;AACH,IAAA,UAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,YAAA;QACE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KAClD,CAAA;AAED;;;;;;AAMG;IACH,UAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAY,OAA4B,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;KACnC,CAAA;AAED;;;;;;AAMG;IACH,UAAK,CAAA,SAAA,CAAA,KAAA,GAAL,UAAO,IAAY,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KACtB,CAAA;;AAID;;;;;AAKG;IACH,UAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAY,KAAe,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;KACjC,CAAA;AAED;;;;;;AAMG;IACI,UAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAkB,IAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KAC/B,CAAA;AAED;;;;;AAKG;IACH,UAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAW,IAAa,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KAC/B,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,aAAa,GAAb,UAAe,MAAc,EAAE,IAAY,EAAA;QACzC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;KAC3C,CAAA;AAED;;;;;;AAMG;AACH,IAAA,UAAA,CAAA,SAAA,CAAA,UAAU,GAAV,UAAY,KAAa,EAAE,IAAY,EAAA;QACrC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;KACvC,CAAA;;;AAKD;;;;;;;;AAQG;IACH,UAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,CAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;KAC/B,CAAA;AAED;;;;;AAKG;IACH,UAAW,CAAA,SAAA,CAAA,WAAA,GAAX,UAAa,IAAY,EAAA;QACvB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAC/C,CAAA;AAED;;;;;;;;AAQG;AACH,IAAA,UAAA,CAAA,SAAA,CAAA,WAAW,GAAX,UAAa,IAAY,EAAE,GAAU,EAAE,IAAY,EAAA;AACjD,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;KAC1D,CAAA;AAED;;;;;;;;;AASG;IACH,UAAmB,CAAA,SAAA,CAAA,mBAAA,GAAnB,UAAqB,IAAY,EAAE,IAAY,EAAE,GAAU,EAAE,IAAY,EAAA;AACvE,QAAA,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;KAC1D,CAAA;AAED;;;;;;AAMG;AACH,IAAA,UAAA,CAAA,SAAA,CAAA,mBAAmB,GAAnB,UAAqB,IAAY,EAAE,IAAY,EAAA;QAC7C,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KAC/C,CAAA;AAED;;;;;;;;AAQG;AACH,IAAA,UAAA,CAAA,SAAA,CAAA,SAAS,GAAT,UAAW,IAAY,EAAE,KAAa,EAAE,KAAa,EAAA;AACnD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KAC3D,CAAA;AAED;;;;;;;;;AASG;IACH,UAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,IAAY,EAAE,IAAY,EAAE,KAAa,EAAE,KAAa,EAAA;AACzE,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KAC3D,CAAA;;;AAKD;;;;;;AAMG;IACH,UAAQ,CAAA,SAAA,CAAA,QAAA,GAAR,UAAU,IAAY,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;KAC9B,CAAA;AAED;;;;;AAKG;IACH,UAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAW,IAAY,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KAC/B,CAAA;;;AAKD;;;;;;;;AAQG;IACH,UAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAY,GAAa,EAAE,KAAe,EAAE,IAAc,EAAE,KAAe,EAAA;AACzE,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KACnD,CAAA;AAED;;;;;;;;AAQG;IACH,UAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAW,GAAY,EAAE,KAAc,EAAE,IAAa,EAAE,KAAc,EAAA;AACpE,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAClD,CAAA;AAED;;;;;;;;AAQG;IACH,UAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAY,GAAa,EAAE,KAAe,EAAE,IAAc,EAAE,KAAe,EAAA;AACzE,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KACnD,CAAA;AAED;;;;;;;AAOG;AACH,IAAA,UAAA,CAAA,SAAA,CAAA,SAAS,GAAT,UAAW,OAAe,EAAE,OAAe,EAAA;QACzC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;KAC5D,CAAA;AAED;;;;;;;;;AASG;IACH,UAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,QAAgB,EAAA;AACnF,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;KACrE,CAAA;AAED;;;;;;;AAOG;IACI,UAAa,CAAA,SAAA,CAAA,aAAA,GAApB,UAAsB,IAAY,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;KACnC,CAAA;AAED;;;;;;AAMG;AACH,IAAA,UAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,UAAuB,OAAe,EAAE,SAAiB,EAAA;QACvD,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;KACzD,CAAA;;AAGD;;;;;;;;AAQG;AACH,IAAA,UAAA,CAAA,SAAA,CAAA,WAAW,GAAX,UAAa,KAAa,EAAE,KAAa,EAAA;QACvC,IAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE9C,IAAI,YAAY,KAAK,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACpC,SAAA;KACF,CAAA;AAED;;;;;;;;AAQG;IACH,UAAQ,CAAA,SAAA,CAAA,QAAA,GAAR,UAAU,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAA;AAC3D,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;KAC7C,CAAA;AAED;;;;;AAKG;IACH,UAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAe,OAAe,EAAA;QAC5B,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,mBAAmB,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE;AACxD,YAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACjC,SAAA;KACF,CAAA;AAED;;;;;;;;AAQG;AACH,IAAA,UAAA,CAAA,SAAA,CAAA,WAAW,GAAX,UAAa,MAAc,EAAE,OAA4B,EAAE,KAAe,EAAA;QACxE,IAAI,IAAI,CAAC,sBAAsB,KAAK,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;YACpE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC;AACvC,SAAA;QACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC;KAC3D,CAAA;AAEO,IAAA,UAAA,CAAA,SAAA,CAAA,KAAK,GAAb,UAAe,IAAY,EAAE,KAAU,EAAA;QACrC,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,KAAK,KAAK,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;;YAEzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACvB,SAAA;KACF,CAAA;AAEO,IAAA,UAAA,CAAA,SAAA,CAAA,KAAK,GAAb,UAAe,IAAY,EAAE,MAAc,EAAE,MAAc,EAAA;QACzD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AAC/C,SAAA;QAED,IAAI,KAAK,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE;;AAE5C,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AACpD,SAAA;KACF,CAAA;IAEO,UAAK,CAAA,SAAA,CAAA,KAAA,GAAb,UAAe,IAAY,EAAE,MAAW,EAAE,MAAW,EAAE,MAAW,EAAA;QAChE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AACvD,SAAA;AAED,QAAA,IAAI,KAAK,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE;;YAElE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AACtE,SAAA;KACF,CAAA;IAEO,UAAK,CAAA,SAAA,CAAA,KAAA,GAAb,UAAe,IAAY,EAAE,MAAW,EAAE,MAAW,EAAE,MAAW,EAAE,MAAW,EAAA;QAC7E,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;AACzB,gBAAA,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG;aAC/B,CAAC;AACH,SAAA;QAED,IAAI,KAAK,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE;;AAExF,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AACxF,SAAA;KACF,CAAA;IAED,UAAG,CAAA,SAAA,CAAA,GAAA,GAAH,UAAK,IAAY,EAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KACzB,CAAA;IACH,OAAC,UAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC/fK,SAAU,qBAAqB,CAAE,EAAuB,EAAA;AAC5D,IAAA,OAAO,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;AAC1C;;;ACIO,IAAM,SAAS,IAAAO,IAAA,GAAA,EAAA;IAMpBA,IAAC,CAAA,SAAS,CAAC,KAAK,CAAG,GAAA;QACjB,IAAI,EAAE,SAAS,CAAC,KAAK;AACrB,QAAA,OAAO,EAAE,UAAA,EAAkD,EAAE,IAAwB,EAAE,KAAkB,EAAA;AACvG,YAAA,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE;gBAC7B,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAChC,aAAA;AAAM,iBAAA;gBACL,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAG,KAAa,CAAC,CAAC;AACxC,aAAA;SACF;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,UAAU,CAAG,GAAA;QACtB,IAAI,EAAE,SAAS,CAAC,UAAU;AAC1B,QAAA,OAAO,EAAE,UAAA,EAAkD,EAAE,IAAwB,EAAE,KAAkB,EAAA;YACvG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAChC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,UAAU,CAAG,GAAA;QACtB,IAAI,EAAE,SAAS,CAAC,UAAU;AAC1B,QAAA,OAAO,EAAE,UAAA,EAAkD,EAAE,IAAwB,EAAE,KAAkB,EAAA;YACvG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAChC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,UAAU,CAAG,GAAA;QACtB,IAAI,EAAE,SAAS,CAAC,UAAU;AAC1B,QAAA,OAAO,EAAE,UAAA,EAAkD,EAAE,IAAwB,EAAE,KAAkB,EAAA;YACvG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAChC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,UAAU,CAAG,GAAA;QACtB,IAAI,EAAE,SAAS,CAAC,UAAU;AAC1B,QAAA,OAAO,EAAE,UAAC,EAAkD,EAAE,IAAwB,EAAE,KAAkB,EAAA;YACxG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC7C;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,YAAY,CAAG,GAAA;QACxB,IAAI,EAAE,SAAS,CAAC,YAAY;AAC5B,QAAA,OAAO,EAAE,UAAC,EAA0B,EAAE,IAAwB,EAAE,KAAkB,EAAA;YAChF,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC/C;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,YAAY,CAAG,GAAA;QACxB,IAAI,EAAE,SAAS,CAAC,YAAY;AAC5B,QAAA,OAAO,EAAE,UAAC,EAA0B,EAAE,IAAwB,EAAE,KAAkB,EAAA;YAChF,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC/C;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,UAAU,CAAG,GAAA;QACtB,IAAI,EAAE,SAAS,CAAC,UAAU;AAC1B,QAAA,OAAO,EAAE,UAAC,EAAkD,EAAE,IAAwB,EAAE,KAAkB,EAAA;YACxG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC7C;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,YAAY,CAAG,GAAA;QACxB,IAAI,EAAE,SAAS,CAAC,YAAY;AAC5B,QAAA,OAAO,EAAE,UAAC,EAA0B,EAAE,IAAwB,EAAE,KAAkB,EAAA;YAChF,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC/C;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,YAAY,CAAG,GAAA;QACxB,IAAI,EAAE,SAAS,CAAC,YAAY;AAC5B,QAAA,OAAO,EAAE,UAAC,EAA0B,EAAE,IAAwB,EAAE,KAAkB,EAAA;YAChF,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC/C;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,UAAU,CAAG,GAAA;QACtB,IAAI,EAAE,SAAS,CAAC,UAAU;AAC1B,QAAA,OAAO,EAAE,UAAC,EAAkD,EAAE,IAAwB,EAAE,KAAkB,EAAA;YACxG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC7C;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,YAAY,CAAG,GAAA;QACxB,IAAI,EAAE,SAAS,CAAC,YAAY;AAC5B,QAAA,OAAO,EAAE,UAAC,EAA0B,EAAE,IAAwB,EAAE,KAAkB,EAAA;YAChF,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC/C;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,YAAY,CAAG,GAAA;QACxB,IAAI,EAAE,SAAS,CAAC,YAAY;AAC5B,QAAA,OAAO,EAAE,UAAC,EAA0B,EAAE,IAAwB,EAAE,KAAkB,EAAA;YAChF,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC/C;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,GAAG,CAAG,GAAA;QACf,IAAI,EAAE,SAAS,CAAC,GAAG;AACnB,QAAA,OAAO,EAAE,UAAC,EAAkD,EAAE,IAAwB,EAAE,KAAgB,EAAA;AACtG,YAAA,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE;gBAC7B,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAChC,aAAA;AAAM,iBAAA;gBACL,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAG,KAAa,CAAC,CAAC;AACxC,aAAA;SACF;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,QAAQ,CAAG,GAAA;QACpB,IAAI,EAAE,SAAS,CAAC,QAAQ;AACxB,QAAA,OAAO,EAAE,UAAC,EAAkD,EAAE,IAAwB,EAAE,KAAgB,EAAA;YACtG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAChC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,QAAQ,CAAG,GAAA;QACpB,IAAI,EAAE,SAAS,CAAC,QAAQ;AACxB,QAAA,OAAO,EAAE,UAAC,EAAkD,EAAE,IAAwB,EAAE,KAAgB,EAAA;YACtG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAChC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,QAAQ,CAAG,GAAA;QACpB,IAAI,EAAE,SAAS,CAAC,QAAQ;AACxB,QAAA,OAAO,EAAE,UAAC,EAAkD,EAAE,IAAwB,EAAE,KAAgB,EAAA;YACtG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAChC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,YAAY,CAAG,GAAA;QACxB,IAAI,EAAE,SAAS,CAAC,YAAY;AAC5B,QAAA,OAAO,EAAE,UAAC,EAA0B,EAAE,IAAwB,EAAE,KAAsC,EAAA;YACpG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACjC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,iBAAiB,CAAG,GAAA;QAC7B,IAAI,EAAE,SAAS,CAAC,iBAAiB;AACjC,QAAA,OAAO,EAAE,UAAC,EAA0B,EAAE,IAAwB,EAAE,KAAsC,EAAA;YACpG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACjC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,iBAAiB,CAAG,GAAA;QAC7B,IAAI,EAAE,SAAS,CAAC,iBAAiB;AACjC,QAAA,OAAO,EAAE,UAAC,EAA0B,EAAE,IAAwB,EAAE,KAAsC,EAAA;YACpG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACjC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,iBAAiB,CAAG,GAAA;QAC7B,IAAI,EAAE,SAAS,CAAC,iBAAiB;AACjC,QAAA,OAAO,EAAE,UAAC,EAA0B,EAAE,IAAwB,EAAE,KAAsC,EAAA;YACpG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACjC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,IAAI,CAAG,GAAA;QAChB,IAAI,EAAE,SAAS,CAAC,IAAI;AACpB,QAAA,OAAO,EAAE,UAAC,EAAkD,EAAE,IAAwB,EAAE,KAAgB,EAAA;AACtG,YAAA,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE;gBAC7B,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAChC,aAAA;AAAM,iBAAA;gBACL,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAG,KAAa,CAAC,CAAC;AACxC,aAAA;SACF;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,SAAS,CAAG,GAAA;QACrB,IAAI,EAAE,SAAS,CAAC,SAAS;AACzB,QAAA,OAAO,EAAE,UAAC,EAAkD,EAAE,IAAwB,EAAE,KAAgB,EAAA;YACtG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAChC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,SAAS,CAAG,GAAA;QACrB,IAAI,EAAE,SAAS,CAAC,SAAS;AACzB,QAAA,OAAO,EAAE,UAAC,EAAkD,EAAE,IAAwB,EAAE,KAAgB,EAAA;YACtG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAChC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,SAAS,CAAG,GAAA;QACrB,IAAI,EAAE,SAAS,CAAC,SAAS;AACzB,QAAA,OAAO,EAAE,UAAC,EAAkD,EAAE,IAAwB,EAAE,KAAgB,EAAA;YACtG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAChC;AACF,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,UAAU,CAAG,GAAA;QACtB,IAAI,EAAE,SAAS,CAAC,UAAU;AAC1B,QAAA,OAAO,EAAE,gBAAgB;AAC1B,KAAA;IACDA,IAAC,CAAA,SAAS,CAAC,YAAY,CAAG,GAAA;QACxB,IAAI,EAAE,SAAS,CAAC,YAAY;AAC5B,QAAA,OAAO,EAAE,gBAAgB;AAC1B,KAAA;SACF,CAAC;AAEF,SAAS,gBAAgB,CAAE,EAAkD,EAAE,IAAwB,EAAE,KAAkC,EAAE,QAAuB,EAAA;AAClK,IAAA,IAAI,KAAK,EAAE;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;AACjB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,gBAAA,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,KAAK,EAAA;oBAChC,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACnD,iBAAC,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;gBACL,YAAY,CAAC,EAAG,CAAA,MAAA,CAAA,IAAI,CAAC,IAAI,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,IAAI,CAAC,IAAI,EAAyB,yBAAA,CAAA,CAAC,CAAC;AAClE,aAAA;AACF,SAAA;AAAM,aAAA;YACL,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,KAAoB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC/D,SAAA;AACF,KAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAE,EAAkD,EAAE,IAAwB,EAAE,KAAkB,EAAE,QAAuB,EAAE,KAAa,EAAA;AACjK,IAAA,IAAI,KAAK,EAAE;QACT,IAAI,KAAK,CAAC,WAAW,EAAE;YACrB,OAAO,YAAY,CAAC,UAAA,CAAA,MAAA,CAAW,KAAK,CAAC,IAAI,EAAa,aAAA,CAAA,EAAE,KAAK,CAAC,CAAC;AAChE,SAAA;AACD,QAAA,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC;AACtE,QAAA,IAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;AAE7B,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAwB,EAAE,IAAI,CAAC,CAAC;AAChF,SAAA;AAAM,aAAA;YACL,WAAW,CAAC,4BAA4B,CAAC,CAAC;AAC3C,SAAA;AACF,KAAA;AACH;;;AC/KA,IAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,IAAM,0BAA0B,GAAG,CAAC,CAAC;AACrC,IAAM,oBAAoB,GAAG,CAAC,CAAC;AAC/B,IAAM,2BAA2B,GAAG,CAAC,CAAC;AACtC,IAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,IAAM,yBAAyB,GAAG,CAAC,CAAC;AAEpC,SAAS,UAAU,CAAE,IAAsB,EAAA;AACzC,IAAA,IAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA,EAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE/G,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9F,CAAC;SAEe,kCAAkC,CAAE,EAA0B,EAAE,OAAqB,EAAE,iBAA2B,EAAA;IAChI,IAAM,UAAU,GAAuB,EAAE,CAAC;AAC1C,IAAA,IAAM,gBAAgB,GAAG,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC;4BAE1E,EAAE,EAAA;QACT,IAAM,MAAI,GAAG,EAAE,CAAC,yBAAyB,CAAC,OAAO,EAAE,EAAE,CAAW,CAAC;AACjE,QAAA,IAAM,SAAS,GAAqB;YAClC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAI,CAAC;AAC7C,YAAA,kBAAkB,EAAE,EAAE,CAAC,8BAA8B,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,yCAAyC,CAAC;AAChH,YAAA,oBAAoB,EAAE,EAAE,CAAC,8BAA8B,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,2CAA2C,CAAC;AACpH,YAAA,IAAI,EAAE,EAAE,CAAC,8BAA8B,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,uBAAuB,CAAC;AAChF,YAAA,cAAc,EAAE,EAAE,CAAC,8BAA8B,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,oCAAoC,CAAC;AACvG,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,IAAI,EAAE,MAAI;AACV,YAAA,EAAE,EAAE,EAAE;SACP,CAAC;QAEF,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,kBAAkB,IAAI,SAAS,CAAC,oBAAoB,CAAC;AAChF,QAAA,UAAU,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC;QACzC,IAAM,YAAY,GAAa,EAAE,CAAC;AAElC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAM,MAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAE/E,SAAS,CAAC,QAAQ,CAAC,MAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,YAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAI,CAAC;AACvB,YAAA,iBAAiB,CAAC,IAAI,CAAC,MAAI,CAAC,CAAC;AAC9B,SAAA;AACD,QAAA,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC,oBAAoB,EAAE,EAAE,CAAC,qBAAqB,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE,EAAE,EAAA;AACnL,YAAA,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,KAAa,EAAE,GAAW,EAAA;AACxF,gBAAA,IAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBAE/B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AACxC,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,YAAA,IAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5D,YAAA,IAAM,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC;YAE3D,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAChC,SAAA;QACD,SAAS,CAAC,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;;IAxC5C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,gBAAgB,EAAE,EAAE,EAAE,EAAA;gBAAnC,EAAE,CAAA,CAAA;AAyCV,KAAA;AAED,IAAA,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,YAAY,CAAE,IAAoB,EAAA;AACzC,IAAA,OAAO,UAAU,KAAwB,EAAE,IAAsB,EAAE,IAAY,EAAE,KAAW,EAAA;AAC1F,QAAA,IAAM,IAAI,GAAiB;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC;AACnC,YAAA,KAAK,EAAE,IAAI;SACZ,CAAC;AACF,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAEhD,IAAI,OAAO,GAAG,CAAC,EAAE;YACf,IAAM,MAAM,GAAG,KAAiB,CAAC;YAEjC,IAAI,MAAM,CAAC,MAAM,EAAE;gBACjB,IAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;gBAC3C,IAAM,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;AAC1E,gBAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;gBACzD,IAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACjC,oBAAA,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AACxC,iBAAA;AACD,gBAAA,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC;AAC9B,aAAA;AACF,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAa,CAAC,CAAC;AAC7C,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;AACd,KAAC,CAAC;AACJ,CAAC;AAED,IAAM,SAAS,GAAG,UAAC,IAAoB,IAAK,OAAA,SAAS,QAAQ,CAAE,KAAe,EAAE,IAAsB,EAAE,IAAY,EAAE,KAAW,EAAA;AAC/H,IAAA,IAAM,YAAY,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACtD,IAAA,IAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAChD,IAAA,IAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAClD,IAAA,IAAM,WAAW,GAAG,OAAO,KAAK,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC;AACrF,IAAA,IAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC;IAC9D,IAAM,aAAa,GAAG,WAAW,GAAG,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC;IAC3E,IAAM,WAAW,GAAG,YAAY,GAAG,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC;;IAE1E,IAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAChE,IAAA,IAAM,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;AAC9C,IAAA,IAAM,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;AACtD,IAAA,IAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;IACnE,IAAM,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,CAAC;AAClD,IAAA,IAAM,IAAI,GAAiB;AACzB,QAAA,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,GAAG,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACnE,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,MAAM,EAAA,MAAA;KACP,CAAC;AAEF,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,WAAW,GAAG,eAAe,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;QAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACnD,SAAA;QACD,YAAY,IAAI,aAAa,CAAC;QAC9B,WAAW,IAAI,SAAS,CAAC;AAC1B,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,EAAA,CAAC;AAEF,IAAM,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;AAChD,IAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5C,IAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAE5C,IAAM,YAAY,IAAAA,IAAA,GAAA,EAAA;AAChB,IAAAA,IAAA,CAAC,SAAS,CAAC,KAAK,IAAG,YAAY,CAAC,YAAY,CAAC;AAC7C,IAAAA,IAAA,CAAC,SAAS,CAAC,GAAG,IAAG,YAAY,CAAC,UAAU,CAAC;AACzC,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,IAAG,YAAY,CAAC,WAAW,CAAC;AACnD,IAAAA,IAAA,CAAC,SAAS,CAAC,KAAK,IAAG,YAAY,CAAC,UAAU,CAAC;AAC3C,IAAAA,IAAA,CAAC,SAAS,CAAC,IAAI,IAAG,YAAY,CAAC,UAAU,CAAC;AAC1C,IAAAA,IAAA,CAAC,SAAS,CAAC,cAAc,IAAG,YAAY,CAAC,WAAW,CAAC;AACrD,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,eAAe;AACvC,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,eAAe;AACvC,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,eAAe;AACvC,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,eAAe;AACvC,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,eAAe;AACvC,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,eAAe;AACvC,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,eAAe;AACzC,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,eAAe;AACzC,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,eAAe;AACzC,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,eAAe;AACzC,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,eAAe;AACzC,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,eAAe;AACzC,IAAAA,IAAA,CAAC,SAAS,CAAC,QAAQ,CAAA,GAAG,aAAa;AACnC,IAAAA,IAAA,CAAC,SAAS,CAAC,QAAQ,CAAA,GAAG,aAAa;AACnC,IAAAA,IAAA,CAAC,SAAS,CAAC,QAAQ,CAAA,GAAG,aAAa;AACnC,IAAAA,IAAA,CAAC,SAAS,CAAC,iBAAiB,CAAA,GAAG,aAAa;AAC5C,IAAAA,IAAA,CAAC,SAAS,CAAC,iBAAiB,CAAA,GAAG,aAAa;AAC5C,IAAAA,IAAA,CAAC,SAAS,CAAC,iBAAiB,CAAA,GAAG,aAAa;AAC5C,IAAAA,IAAA,CAAC,SAAS,CAAC,SAAS,CAAA,GAAG,aAAa;AACpC,IAAAA,IAAA,CAAC,SAAS,CAAC,SAAS,CAAA,GAAG,aAAa;AACpC,IAAAA,IAAA,CAAC,SAAS,CAAC,SAAS,CAAA,GAAG,aAAa;SACrC,CAAC;AAEF,IAAM,eAAe,IAAAC,IAAA,GAAA,EAAA;AACnB,IAAAA,IAAA,CAAC,SAAS,CAAC,KAAK,CAAA,GAAG,CAAC;AACpB,IAAAA,IAAA,CAAC,SAAS,CAAC,GAAG,CAAA,GAAG,CAAC;AAClB,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,CAAC;AAC3B,IAAAA,IAAA,CAAC,SAAS,CAAC,KAAK,CAAA,GAAG,CAAC;AACpB,IAAAA,IAAA,CAAC,SAAS,CAAC,IAAI,CAAA,GAAG,CAAC;AACnB,IAAAA,IAAA,CAAC,SAAS,CAAC,cAAc,CAAA,GAAG,CAAC;AAC7B,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,CAAC;AACzB,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,CAAC;AACzB,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,CAAC;AACzB,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,CAAC;AACzB,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,CAAC;AACzB,IAAAA,IAAA,CAAC,SAAS,CAAC,UAAU,CAAA,GAAG,EAAE;AAC1B,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,CAAC;AAC3B,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,CAAC;AAC3B,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,EAAE;AAC5B,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,CAAC;AAC3B,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,EAAE;AAC5B,IAAAA,IAAA,CAAC,SAAS,CAAC,YAAY,CAAA,GAAG,CAAC;AAC3B,IAAAA,IAAA,CAAC,SAAS,CAAC,QAAQ,CAAA,GAAG,CAAC;AACvB,IAAAA,IAAA,CAAC,SAAS,CAAC,QAAQ,CAAA,GAAG,CAAC;AACvB,IAAAA,IAAA,CAAC,SAAS,CAAC,QAAQ,CAAA,GAAG,CAAC;AACvB,IAAAA,IAAA,CAAC,SAAS,CAAC,iBAAiB,CAAA,GAAG,CAAC;AAChC,IAAAA,IAAA,CAAC,SAAS,CAAC,iBAAiB,CAAA,GAAG,CAAC;AAChC,IAAAA,IAAA,CAAC,SAAS,CAAC,iBAAiB,CAAA,GAAG,CAAC;AAChC,IAAAA,IAAA,CAAC,SAAS,CAAC,SAAS,CAAA,GAAG,CAAC;AACxB,IAAAA,IAAA,CAAC,SAAS,CAAC,SAAS,CAAA,GAAG,CAAC;AACxB,IAAAA,IAAA,CAAC,SAAS,CAAC,SAAS,CAAA,GAAG,CAAC;SACzB,CAAC;AAEF,IAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAQzB,IAAA,kBAAA,kBAAA,YAAA;IAME,SAAa,kBAAA,CAAA,QAAuB,EAAE,IAAsB,EAAA;AAC1D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC;YAC5B,MAAM,EAAE,SAAS,CAAC,cAAc;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,IAAI;SACtB,EAAE,QAAQ,CAAC,CAAC;AACb,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,SAAS,GAAT,UAAW,aAA2C,EAAE,UAAmC,EAAE,mBAAyC,EAAA;QAAtI,IAYC,KAAA,GAAA,IAAA,CAAA;AAXC,QAAA,OAAO,CAAC,aAAa,EAAE,UAAC,KAAK,EAAE,IAAI,EAAA;YACjC,IAAM,WAAW,GAAqB,KAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE/D,YAAA,IAAI,WAAW,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;gBACnC,IAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;gBACrD,IAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAE,CAAC;AAEhE,gBAAA,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACjE,aAAA;AACH,SAAC,CAAC,CAAC;KAEJ,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,IAAI,GAAJ,UAAM,EAA0B,EAAE,OAAqB,EAAE,eAAuB,EAAA;QAAhF,IAkBC,KAAA,GAAA,IAAA,CAAA;AAjBC,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAE3B,QAAA,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAC,IAAI,EAAE,IAAI,EAAA;gBAClC,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACtE,oBAAA,IAAI,CAAC,KAAI,CAAC,QAAQ,EAAE;wBAClB,OAAO,IAAI,CAAC,MAAM,CAAC;AACpB,qBAAA;AACD,oBAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACpB,iBAAA;AACH,aAAC,CAAC,CAAC;YACH,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;YAClE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5F,SAAA;KAEF,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AACzB,SAAA;KACF,CAAA;IACH,OAAC,kBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACpQD,IAAM,MAAM,GAA+B,IAAI,GAAG,EAAyB,CAAC;AAE5E,IAAA,SAAA,kBAAA,YAAA;AAWE,IAAA,SAAA,SAAA,CAAa,QAAuB,EAAE,OAAqB,EAAE,MAAe,EAAE,EAAU,EAAA;AACtF,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;KACjB;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,IAAI,GAAJ,UAAM,QAAuB,EAAE,OAAqB,EAAA;QAApD,IA+GC,KAAA,GAAA,IAAA,CAAA;AA9GC,QAAA,IAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;AAEvB,QAAA,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACnC,QAAA,IAAI,GAAG,GAAG,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAChE,IAAM,OAAO,GAA4C,EAAE,CAAC;QAE5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACtB,YAAA,IAAA,KAAuB,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAoB,EAAtE,MAAI,UAAA,EAAE,IAAI,UAAA,EAAE,IAAI,UAAsD,CAAC;YAC/E,IAAM,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAI,CAAC,CAAC;YAEhD,OAAO,CAAC,MAAI,CAAC,GAAG;AACd,gBAAA,IAAI,EAAA,IAAA;AAAE,gBAAA,IAAI,EAAA,MAAA;AAAE,gBAAA,IAAI,EAAA,IAAA;AAAE,gBAAA,GAAG,EAAA,GAAA;aACtB,CAAC;AACH,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAE3B,IAAM,UAAU,GAA0C,EAAE,CAAC;QAE7D,GAAG,GAAG,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC;QAC1D,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,QAAA,IAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;AAC/C,QAAA,IAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QACnD,IAAM,iBAAiB,GAAa,EAAE,CAAC;AAEvC,QAAA,IAAI,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE;YACxB,IAAI,CAAC,cAAc,GAAG,kCAAkC,CAAC,EAA4B,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;YACnH,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,CAAC,EAAI,EAAA,OAAA,KAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,CAAC,CAAC;AACpE,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AAC1B,SAAA;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAM,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAoB,CAAC;AAC1D,YAAA,IAAA,EAAiB,GAAA,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAoB,EAAjE,IAAI,GAAA,EAAA,CAAA,IAAA,EAAE,IAAI,UAAuD,CAAC;AAC1E,YAAA,IAAI,MAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,UAAQ,GAAG,IAAI,CAAC;;AAGpB,YAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAI,CAAC,EAAE;gBACvB,UAAQ,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAI,CAAC,CAAC;AACjD,aAAA;YACD,MAAI,GAAG,MAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,UAAQ,EAAE;gBACb,UAAQ,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAI,CAAC,CAAC;AACjD,aAAA;YACD,IAAI,CAAC,UAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAI,CAAC,EAAE;AACrC,oBAAA,WAAW,CAAC,cAAA,CAAA,MAAA,CAAe,MAAI,EAAA,WAAA,CAAW,CAAC,CAAC;AAC7C,iBAAA;gBACD,SAAS;AACV,aAAA;YACD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,UAAQ,EAAE,MAAI,CAAC,CAAC;AACnD,YAAA,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;YAErB,IAAI,IAAI,KAAK,EAAE,CAAC,UAAU,IAAI,IAAI,KAAK,EAAE,CAAC,YAAY,EAAE;gBACtD,WAAW,GAAG,YAAY,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;oBAC7B,IAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAA,CAAA,MAAA,CAAG,MAAI,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,CAAC,EAAA,GAAA,CAAG,CAAC,GAAG,UAAQ,CAAC;AAClF,oBAAA,IAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC;oBAErC,IAAI,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,iBAAiB,EAAE;wBAC3D,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC;AAC5C,wBAAA,IAAI,IAAI,KAAK,EAAE,CAAC,UAAU,EAAE;4BAC1B,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,QAAwB,CAAC,CAAC;AACxE,yBAAA;AAAM,6BAAA;4BACL,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,QAAwB,CAAC,CAAC;AAChF,yBAAA;AACD,wBAAA,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACnC,qBAAA;AAAM,yBAAA;AACL,wBAAA,YAAY,CAAC,gBAAA,CAAA,MAAA,CAAiB,WAAW,EAAA,iBAAA,CAAA,CAAA,MAAA,CAAkB,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAE,CAAC,CAAC;AACzG,qBAAA;AACF,iBAAA;gBACD,YAAY,IAAI,IAAI,CAAC;AACtB,aAAA;YAED,IAAM,QAAQ,GAAyB,EAAE,CAAC;YAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE;gBAC7B,IAAM,QAAQ,GAAG,MAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBACtC,IAAM,GAAG,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAErD,IAAI,GAAG,KAAK,IAAI,EAAE;oBAChB,QAAQ,CAAC,IAAI,CAAC;AACZ,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,GAAG,EAAE,GAAG;AACR,wBAAA,QAAQ,EAAE,EAAE;AACZ,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,IAAI,EAAE,CAAC;AACP,wBAAA,YAAY,EAAE,WAAW;AACzB,wBAAA,SAAS,EAAE,WAAW,GAAG,CAAC,CAAC;AAC5B,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACF,aAAA;YAED,UAAU,CAAC,MAAI,CAAC,GAAG;AACjB,gBAAA,IAAI,EAAA,MAAA;AACJ,gBAAA,GAAG,EAAE,UAAQ;AACb,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,IAAI,EAAA,IAAA;AACJ,gBAAA,IAAI,EAAA,IAAA;AACJ,gBAAA,YAAY,EAAE,WAAW;AACzB,gBAAA,SAAS,EAAE,WAAW,GAAG,CAAC,CAAC;aAC5B,CAAC;AACH,SAAA;AAED,QAAA,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAChC,QAAA,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC9B,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC1C,QAAA,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,QAAwB,EAAE,IAAI,CAAC,CAAC;AACzF,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;KAClC,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,IAAI,GAAJ,YAAA;AACE,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE/B,QAAA,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1C,SAAA;KAEF,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAkB,KAAkB,EAAE,YAAoB,EAAA;AACxD,QAAA,IAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC;AACxD,QAAA,IAAM,oBAAoB,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;AAE1D,QAAA,IAAI,mBAAmB,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;YACtD,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAClE,SAAA;AAAM,aAAA,IAAI,oBAAoB,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;YAC9D,OAAO,oBAAoB,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACnE,SAAA;KACF,CAAA;IAED,SAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAe,KAAkB,EAAA;QAAjC,IAsEC,KAAA,GAAA,IAAA,CAAA;QArEC,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,QAAA,IAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,QAAwB,CAAC;AAC5D,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC;AACpC,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAC,OAAO,EAAE,IAAI,EAAA;AAC1C,YAAA,IAAI,OAAO,EAAE;gBAEX,IAAM,OAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAExD,gBAAA,IAAI,OAAK,EAAE;oBACT,OAAO,CAAC,OAAK,CAAC,gBAAgB,EAAE,UAAC,YAAY,EAAE,WAAmB,EAAA;AAChE,wBAAA,IAAI,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE;4BAC1E,IAAM,GAAG,GAAG,KAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAiB,CAAC;AAEvE,4BAAA,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE;gCACpB,OAAK,CAAC,eAAe,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/C,6BAAA;AAEF,yBAAA;AACH,qBAAC,CAAC,CAAC;oBACH,IAAM,SAAS,GAAG,OAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAEjD,oBAAA,IAAI,SAAS,EAAE;AACb,wBAAA,OAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAC9B,wBAAA,MAAM,CAAC,GAAG,CAAC,OAAK,CAAC,CAAC;AAElB,wBAAA,OAAO,SAAS,CAAC,IAAI,CAAC,EAA4B,EAAE,KAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACnF,qBAAA;AACF,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,UAAC,IAAwB,EAAE,IAAI,EAAA;AAC1D,YAAA,IAAI,GAAG,CAAC;AAER,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,gBAAA,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAElD,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AAC/B,wBAAA,GAAG,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACrC,qBAAA;AAAM,yBAAA,IAAI,YAAY,EAAE;wBACvB,GAAG,GAAG,KAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAClD,qBAAA;AACF,iBAAA;AAAM,qBAAA,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBAC5B,SAAS;AACV,iBAAA;AAAM,qBAAA,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AACtC,oBAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE;;wBAErE,OAAO;AACR,qBAAA;AACD,oBAAA,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACnC,iBAAA;AAAM,qBAAA,IAAI,YAAY,EAAE;oBACvB,GAAG,GAAG,KAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAClD,iBAAA;AACD,gBAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;AACrC,oBAAA,OAAO,KAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACpD,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,WAAW,CAAC,OAAQ,CAAA,MAAA,CAAA,KAAK,CAAC,WAAW,CAAC,IAAI,EAAY,WAAA,CAAA,CAAA,MAAA,CAAA,IAAI,EAAc,cAAA,CAAA,CAAC,CAAC;AAC3E,aAAA;AACH,SAAC,CAAC,CAAC;KAEJ,CAAA;IAED,SAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,IAAY,EAAE,KAAU,EAAE,IAAwB,EAAE,EAAkD,EAAA;QACvH,IAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE/B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AAC1E,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAC5D,gBAAA,IAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE5B,gBAAA,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3D,aAAA;YAED,OAAO;AACR,SAAA;AACD,QAAA,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACrD,CAAA;IAED,SAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,QAAoB,EAAA;;AACnC,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAA2B,CAAC;QACrD,IAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxC,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAE9B,QAAA,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,gBAAA,OAAO,GAAG,CAAC;AACZ,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzB,aAAA;AACF,SAAA;QACD,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,QAAQ,EAAE,IAAI,EAAA;YAChD,IAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAE5C,YAAA,IAAI,SAAS,EAAE;gBACb,IAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAE3D,IAAI,CAAC,MAAM,EAAE;oBACX,MAAM,KAAK,CAAC,kBAAA,CAAA,MAAA,CAAmB,SAAS,CAAC,UAAU,IAAI,IAAI,CAAE,CAAC,CAAC;AAChE,iBAAA;gBACD,MAAM,CAAC,IAAI,EAAE,CAAC;AACd,gBAAA,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE;AAChB,oBAAA,IAAA,EAAa,GAAA,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAA5C,GAAG,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,GAAG,QAAoC,CAAC;oBACpD,IAAM,WAAW,GAAG,0BAA0B,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AACrE,oBAAA,IAAM,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC;oBAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC5B,wBAAA,IAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;AAE7B,wBAAA,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;wBAChC,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,SAAoB,EAAE,MAAM,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;wBAC1G,IAAI,SAAS,CAAC,eAAe,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE;4BAC5D,GAAG,CAAC,mBAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;AAC7D,yBAAA;AACF,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,EAAE,CAAC,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACzC,oBAAA,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,SAAoB,EAAE,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;oBACnJ,IAAI,SAAS,CAAC,eAAe,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE;AAC5D,wBAAA,GAAG,CAAC,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;AACtE,qBAAA;AACF,iBAAA;AAEF,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE,CAAC;AAC9B,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,SAAA;AAED,QAAA,OAAO,GAAG,CAAC;KACZ,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAA,GAAG,EAAA,EAAI,OAAA,GAAG,CAAC,OAAO,EAAE,CAAb,EAAa,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE9C,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACtB,SAAA;KACF,CAAA;IACH,OAAC,SAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;;AC/TD,IAAK,UAGJ,CAAA;AAHD,CAAA,UAAK,UAAU,EAAA;AACb,IAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACd,CAAC,EAHI,UAAU,KAAV,UAAU,GAGd,EAAA,CAAA,CAAA,CAAA;AAED,IAAM,iBAAiB,IAAAD,IAAA,GAAA,EAAA;IACrBA,IAAC,CAAA,UAAU,CAAC,MAAM,CAAG,GAAA;AACnB,QAAA,EAAE,EAAE,WAAW;AACf,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;IACDA,IAAC,CAAA,UAAU,CAAC,QAAQ,CAAG,GAAA;AACrB,QAAA,EAAE,EAAE,SAAS;AACd,KAAA;SACF,CAAC;AACF,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,IAAA,eAAA,kBAAA,YAAA;AAaE,IAAA,SAAA,eAAA,CAAa,QAAuB,EAAA;QAF5B,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AAG7B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAuB,CAAC;AACvD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAuB,CAAC;AACvD,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAA2B,CAAC;QAErD,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC,6BAA6B,CAAsC,CAAC;KAC/G;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,eAAQ,CAAA,SAAA,EAAA,UAAA,EAAA;AAAZ,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACxC;;;AAAA,KAAA,CAAA,CAAA;IACD,eAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,OAAe,EAAA;QAC9B,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,SAAA;KACF,CAAA;IAED,eAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,aAAwD,EAAA;QAA3E,IA4BC,KAAA,GAAA,IAAA,CAAA;AA3BC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAM,KAAG,GAAG,IAAI,CAAC,aAAa,CAAC;YAC/B,IAAM,UAAQ,GAAa,EAAE,CAAC;YAE9B,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAC,MAAM,EAAE,EAAE,EAAA;AAClC,gBAAA,IAAI,CAAC,KAAG,CAAC,EAAE,CAAC,EAAE;AACZ,oBAAA,MAAM,CAAC,UAAQ,EAAE,EAAE,CAAC,CAAC;AACtB,iBAAA;AACH,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,aAAa,EAAE;gBACjB,IAAI,UAAQ,CAAC,MAAM,EAAE;AACnB,oBAAA,OAAO,CAAC,GAAG,CACT,UAAQ,CAAC,GAAG,CAAC,UAAA,EAAE,EAAI,EAAA,OAAA,IAAI,OAAO,CAAC,UAAA,OAAO,EAAI,EAAA,OAAA,KAAI,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA,EAAA,CAAC,CAAvD,EAAuD,CAAC,CAC5E;yBACE,IAAI,CAAC,aAAa,CAAC;AACnB,yBAAA,KAAK,CAAC,YAAM,EAAA,OAAA,CAAC,CAAD,EAAC,CAAC,CAAC;AACnB,iBAAA;AAAM,qBAAA;oBACL,aAAa,CAAC,EAAE,CAAC,CAAC;AACnB,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,UAAQ,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,KAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAtB,EAAsB,CAAC,CAAC;AAC5C,aAAA;AACD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC5B,SAAA;AAAM,aAAA,IAAI,aAAa,EAAE;YACxB,aAAa,CAAC,EAAE,CAAC,CAAC;AACnB,SAAA;KACF,CAAA;IAED,eAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAY,aAAqB,EAAA;QAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,SAAS,EAAE;YAChD,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,SAAS,EAAE;AAChD,gBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AACnC,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;KACxC,CAAA;IAED,eAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,MAAc,EAAE,MAAc,EAAE,IAAgB,EAAE,SAAmB,EAAA;QACpF,IAAM,UAAU,GAAG,8BAA8B,CAAC;QAClD,IAAM,GAAG,GAAG,OAAQ,CAAA,MAAA,CAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC;AAE1C,QAAA,IAAI,SAAS,EAAE;YACb,MAAM,GAAG,MAAM,GAAG,YAAA,CAAA,MAAA,CACd,GAAG,EACH,YAAA,CAAA,CAAA,MAAA,CAAA,GAAG,aACN,CAAC;AACH,SAAA;AACD,QAAA,IAAI,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;QACxC,IAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC3C,QAAA,IAAM,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACtC,IAAI,WAAW,GAAG,OAAO,CAAC;AAE1B,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI,SAAS,EAAE;YAChF,WAAW,GAAG,EAAE,CAAC;YACjB,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,GAAG,EAAA;gBAC5D,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AAC7C,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,OAAO,WAAW,GAAG,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KAC/D,CAAA;IAED,eAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAW,MAAwB,EAAA;AACjC,QAAA,IAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AAC7E,QAAA,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACzH,QAAA,IAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACjI,QAAA,IAAI,aAAqB,CAAC;QAC1B,IAAI,MAAM,GAAG,KAAK,CAAC;AAEnB,QAAA,IAAI,MAAM,CAAC,MAAM,IAAK,MAA4C,CAAC,OAAO,EAAE;AAC1E,YAAA,aAAa,GAAI,MAAiC,CAAC,OAAO,IAAI,SAAA,CAAA,MAAA,CAAU,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAE,CAAC;YACxG,MAAM,GAAG,IAAI,CAAC;AACf,SAAA;AAAM,aAAA;AACL,YAAA,aAAa,GAAG,YAAY,GAAG,UAAU,EAAE,CAAC;AAC7C,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG;AAC/B,gBAAA,MAAM,EAAA,MAAA;AACN,gBAAA,QAAQ,EAAA,QAAA;AACR,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,aAAa;AAClC,gBAAA,MAAM,EAAA,MAAA;aACP,CAAC;AACH,SAAA;AAED,QAAA,OAAO,aAAa,CAAC;KACtB,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,aAAa,GAAb,UAAe,aAAqB,EAAE,aAAqD,EAAA;QAA3F,IA0DC,KAAA,GAAA,IAAA,CAAA;QAzDC,IAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAEvD,IAAI,CAAC,YAAY,EAAE;YACjB,IAAM,QAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAE9C,IAAI,CAAC,QAAM,EAAE;gBACX,OAAO;oBACL,MAAM,EAAEE,iCAAyB,CAAC,QAAQ;iBAC3C,CAAC;AACH,aAAA;AACD,YAAA,IAAM,IAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAA2B,CAAC;AACrD,YAAA,IAAM,QAAM,GAA0B,EAAE,MAAM,EAAE,QAAM,CAAC,MAAM,EAAE,MAAM,EAAEA,iCAAyB,CAAC,SAAS,EAAE,CAAC;AAC7G,YAAA,IAAM,aAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAE,EAAE,QAAM,CAAC,MAAM,EAAE,QAAM,CAAC,QAAQ,EAAE,QAAM,CAAC,CAAC;AACnF,YAAA,IAAM,KAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACpC,YAAA,IAAM,WAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,YAAA,IAAM,eAAa,GAAG,YAAA;gBACpB,IAAM,UAAU,GAAG,CAAC,aAAa,IAAI,CAAC,KAAG,KAAK,KAAG,IAAI,IAAE,CAAC,mBAAmB,CAAC,QAAM,CAAC,OAAoB,EAAE,KAAG,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC,CAAC;AAC7I,gBAAA,IAAM,OAAO,GAAG,UAAU,IAAI,aAAW,EAAE,CAAC;AAE5C,gBAAA,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,QAAM,CAAC,MAAM,KAAKA,iCAAyB,CAAC,IAAI,EAAE;wBACpD,KAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,QAAM,CAAC,IAAI,CAAC,CAAC;AACzD,wBAAA,IAAM,SAAS,GAAG,IAAI,SAAS,CAAC,KAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,QAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAExF,wBAAA,IAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC5B,wBAAA,IAAM,KAAK,GAAG,IAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAE,CAAC,eAAe,CAAC,CAAC;wBAElE,IAAI,CAAC,KAAK,EAAE;AACV,4BAAA,QAAM,CAAC,MAAM,GAAGA,iCAAyB,CAAC,IAAI,CAAC;AAChD,yBAAA;AAAM,6BAAA;AACL,4BAAA,QAAM,CAAC,MAAM,GAAGA,iCAAyB,CAAC,OAAO,CAAC;4BAClD,QAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAS,CAAC;AAC5C,4BAAA,KAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;AAC7C,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,QAAM,CAAC,MAAM,KAAKA,iCAAyB,CAAC,IAAI,EAAE;wBACpD,IAAM,KAAK,GAAG,IAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAE5C,wBAAA,QAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,wBAAA,YAAY,CAAC,uBAAuB,GAAG,KAAK,EAAE,aAAa,EAAE,QAAM,CAAC,MAAM,EAAE,eAAe,EAAE,QAAM,CAAC,QAAQ,CAAC,CAAC;AAC9G,wBAAA,IAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC3B,qBAAA;AACD,oBAAA,IAAI,aAAa,EAAE;wBACjB,aAAa,CAAC,QAAM,CAAC,CAAC;AACvB,qBAAA;AACF,iBAAA;AAAM,qBAAA,IAAI,aAAa,EAAE;oBACxB,qBAAqB,CAAC,eAAa,CAAC,CAAC;AACtC,iBAAA;AACH,aAAC,CAAC;AAEF,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,QAAM,CAAC;AAC3C,YAAA,eAAa,EAAE,CAAC;AACjB,SAAA;AAAM,aAAA,IAAI,aAAa,EAAE;YACxB,aAAa,CAAC,YAAY,CAAC,CAAC;AAC7B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;KAC1C,CAAA;IAED,eAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAe,EAAyB,EAAE,EAAU,EAAE,EAAU,EAAE,MAA6B,EAAA;AAC7F,QAAA,IAAM,OAAO,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;AACnC,QAAA,IAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AACjE,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAEjE,QAAA,IAAI,OAAO,IAAI,YAAY,IAAI,UAAU,EAAE;AACzC,YAAA,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACvC,YAAA,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACrC,YAAA,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACxB,YAAA,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,YAAA,MAAM,CAAC,MAAM,GAAGA,iCAAyB,CAAC,SAAS,CAAC;YAEpD,OAAO,YAAA;gBACL,OAAO,MAAM,CAAC,OAAO,CAAC;AAEtB,gBAAA,IAAM,MAAM,GAAa,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;gBAEzE,IAAI,CAAC,MAAM,EAAE;AACX,oBAAA,WAAW,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AACxC,oBAAA,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;AACxC,oBAAA,MAAM,CAAC,MAAM,GAAGA,iCAAyB,CAAC,IAAI,CAAC;AAE/C,oBAAA,OAAO,OAAO,CAAC;AAChB,iBAAA;AAED,gBAAA,OAAO,OAAO,CAAC;AACjB,aAAC,CAAC;AACH,SAAA;AACD,QAAA,MAAM,CAAC,MAAM,GAAGA,iCAAyB,CAAC,IAAI,CAAC;AAE/C,QAAA,OAAO,YAAM,EAAA,OAAA,IAAI,CAAA,EAAA,CAAC;AAClB,QAAA,SAAS,WAAW,CAAE,MAAmB,EAAE,IAAY,EAAE,IAAY,EAAA;YACnE,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE;gBACrD,IAAM,KAAK,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAE1C,YAAY,CACV,UAAU,IAAI,IAAI,CAAC,GAAG,UAAU,GAAG,KAAK,EACxC,IAAI;qBACD,KAAK,CAAC,IAAI,CAAC;AACX,qBAAA,GAAG,CAAC,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,EAAA,CAAA,MAAA,CAAG,KAAK,GAAG,CAAC,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,IAAI,CAAE,CAAA,EAAA,CAAC;AAC5C,qBAAA,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;AACF,gBAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,gBAAA,MAAM,CAAC,MAAM,GAAGA,iCAAyB,CAAC,IAAI,CAAC;AAChD,aAAA;SACF;KACF,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,UAAc,EAAyB,EAAE,UAAkB,EAAE,IAAY,EAAA;AACvE,QAAA,IAAM,GAAG,GAAG,UAAU,KAAK,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC5F,QAAA,IAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,IAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAE7B,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;QACD,IAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAE3C,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9B,YAAA,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACzB,YAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf,CAAA;IAED,eAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,OAAe,EAAA;QAC3B,IAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,CAAC,OAAO,EAAE,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC,SAAA;QACD,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE3C,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,SAAA;KACF,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;AACE,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,OAAkB,EAAA;YACpD,OAAO,CAAC,OAAO,EAAE,CAAC;AACpB,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAM,IAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAE5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,MAAM,EAAA;AAC5C,gBAAA,IAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC1B,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,MAAM,EAAA;AAC5C,gBAAA,IAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC1B,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAuB,CAAC;AACvD,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAuB,CAAC;AACxD,SAAA;;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;KACzB,CAAA;IACH,OAAC,eAAA,CAAA;AAAD,CAAC,EAAA,CAAA,CAAA;AAED,SAAS,qBAAqB,CAAE,MAAqB,EAAA;IACnD,IAAM,GAAG,GAAa,EAAE,CAAC;AAEzB,IAAA,IAAI,MAAM,EAAE;AACV,QAAA,MAAM,CAAC,OAAO,CAAC,UAAU,EAAY,EAAA;gBAAX,GAAG,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA;YAClC,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,gBAAA,GAAG,CAAC,IAAI,CAAC,kBAAW,GAAG,CAAE,CAAC,CAAC;AAC5B,aAAA;AAAM,iBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACjC,GAAG,CAAC,IAAI,CAAC,UAAA,CAAA,MAAA,CAAW,GAAG,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,KAAK,CAAE,CAAC,CAAC;AACrC,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AAClD,KAAA;AAED,IAAA,OAAO,EAAE,CAAC;AACZ;;SCrVgB,SAAS,GAAA;AACvB,IAEO;QACL,OAAO,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACnD,KAAA;AACH;;ACMA,IAAI,uBAA+B,CAAC;AAWpC,IAAM,0BAA0B,GAAG,OAAO,sBAAsB,KAAK,UAAU,CAAC;AAEhF,IAAM,UAAU,GAAG,OAAO,CAAC;AAC3B,IAAM,WAAW,GAAG,QAAQ,CAAC;AAE7B,IAAA,eAAA,kBAAA,YAAA;AAeE,IAAA,SAAA,eAAA,CAAa,GAAyF,EAAA;;AACpG,QAAA,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QAChB,IAAI,IAAI,GAAG,MAAM,CAAC;AAElB,QAAA,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;AAChB,QAAA,IAAI,MAAM,CAAC;AAEX,QAGO;YACL,IAAI,CAAC,EAAE,EAAE;gBACP,IAAI,MAAM,GAAG,UAAU,CAAC;AAExB,gBAAA,IAAI,CAAC,SAAS,EAAE,IAAI,0BAA0B,EAAE;AAC9C,oBAAA,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,WAAW,CAAC;AACpC,iBAAA;AACD,gBAAA,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1C,gBAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAA0B,CAAC;gBACxD,IAAI,CAAC,EAAE,EAAE;oBACP,MAAM,GAAG,OAAO,CAAC;AACjB,oBAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAA0B,CAAC;AACzD,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,EAAE,EAAE;AACN,gBAAA,IAAI,GAAG,CAAC,0BAA0B,KAAK,EAAE,YAAY,sBAAsB,CAAC,IAAI,WAAW,GAAG,UAAU,CAAC;AAC1G,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;;AAE1B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,MAAM,IAAI,EAAE,EAAE;YAChB,CAAA,EAAA,GAAA,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,EAAE,CAAC;AACtD,SAAA;KACF;IAED,eAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAkB,EAAmD,EAAA;;AACnE,QAAA,IAAI,EAAE,EAAE;;AAEN,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE,YAAY,sBAAsB,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7F,YAAA,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;AAChC,YAAA,IAAM,qBAAqB,GAAG,EAAE,CAAC,YAAY,CAAC,gCAAgC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,uCAAuC,CAAC,CAAC;YAE5I,IAAI,CAAC,MAAM,EAAE;gBACX,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;AAC1D,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,iBAAiB,GAAI,EAA6B,CAAC,iBAAiB,CAAC;AAC3E,aAAA;YACD,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;YACjE,IAAM,qBAAqB,GAAG,EAAE,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAErE,YAAA,IAAI,qBAAqB,EAAE;AACzB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,qBAAqB,CAAC,uBAAuB,CAAC;AACxE,aAAA;YACD,IAAI,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC;AAEzE,YAAA,IAAI,MAAM,IAAI,CAAC,eAAe,EAAE;gBAC9B,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,EAA4B,EAAG,EAA6B,CAAC,UAAU,CAAC,CAAC;AAC1H,aAAA;YACD,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;AAEhE,YAAA,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE;gBAC1B,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,EAA4B,EAAG,EAA6B,CAAC,KAAK,CAAC,CAAC;AACjH,aAAA;AACD,YAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,GAAI,EAA6B,CAAC,iBAAiB,GAAG,EAAE,CAAC,eAAe,CAAC;AAC5G,YAAA,IAAI,CAAC,8BAA8B,GAAG,MAAM,GAAI,EAA6B,CAAC,gBAAgB,GAAG,EAAE,CAAC,aAAa,CAAC;YAClH,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,wBAAwB,CAAE,CAAC;YAClE,IAAM,YAAY,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;YACrF,IAAM,gBAAgB,GAAG,MAAM,GAAG,sBAAsB,CAAC,UAAU,IAAI,CAAA,CAAA,EAAA,GAAA,EAAE,CAAC,YAAY,CAAC,wBAAwB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,cAAc,KAAI,CAAC,CAAC,CAAC;AACvI,YAAA,IAAM,MAAM,GAA0B;AACpC,gBAAA,YAAY,EAAA,YAAA;AACZ,gBAAA,gBAAgB,EAAA,gBAAA;AAChB,gBAAA,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,YAAY,CAAE,EAA6B,CAAC,WAAW,CAAC,GAAG,CAAC;gBACnF,iBAAiB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,0BAA0B,CAAC;gBACjE,iBAAiB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,8BAA8B,CAAC;gBACrE,mBAAmB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,4BAA4B,CAAC;gBACrE,mBAAmB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,uBAAuB,CAAC;AAChE,gBAAA,oBAAoB,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;AAChJ,gBAAA,wBAAwB,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,gBAAgB,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC;gBAC3J,cAAc,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,CAAC;gBACpD,iBAAiB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gCAAgC,CAAC;AACvE,gBAAA,iBAAiB,EAAE,yBAAyB,CAAC,EAAE,CAAC;AAChD,gBAAA,eAAe,EAAA,eAAA;AACf,gBAAA,WAAW,EAAA,WAAA;AACX,gBAAA,oBAAoB,EAAE,qBAAqB,GAAG,EAAE,CAAC,YAAY,CAAC,qBAAqB,CAAC,8BAA8B,CAAC,GAAG,CAAC;gBACvH,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,wBAAwB,CAAC;AACvE,gBAAA,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe;AAC9C,gBAAA,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB;gBACjD,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,6BAA6B,CAAC;gBACpE,qBAAqB,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,wBAAwB,CAAC;gBAClE,mBAAmB,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,0BAA0B,CAAC;AAC5E,gBAAA,4BAA4B,EAAE,MAAM,IAAI,CAAC,CAAC,qBAAqB;AAC/D,gBAAA,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM;gBAC5B,iBAAiB,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC;aACjE,CAAC;;AAGF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;AAC5B,YAAA,IAAI,qBAAqB,EAAE;AACzB,gBAAA,uBAAuB,GAAG,qBAAqB,CAAC,0BAA0B,CAAC;AAC5E,aAAA;;AAED,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;AAC9C,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;AACzB,SAAA;KACF,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,wBAAwB,GAAxB,UAA0B,EAA0B,EAAE,IAAY,EAAA;QAChE,IAAI,GAAG,GAAG,KAAK,CAAC;AAChB,QAAA,IAAM,GAAG,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;QAE/B,EAAE,CAAC,QAAQ,EAAE,CAAC;QACd,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACnC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACtE,QAAA,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;AAClE,QAAA,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE;YAClB,GAAG,GAAG,IAAI,CAAC;AACZ,SAAA;AACD,QAAA,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAEtB,QAAA,OAAO,GAAG,CAAC;KACZ,CAAA;IAED,eAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAsB,EAAkD,EAAE,MAAc,EAAE,KAAa,EAAE,SAAiB,EAAE,OAAqB,EAAA;AAC/I,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC;AAErC,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,GAAG,CAAC,EAAE;AACzC,YAAA,MAAM,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAC1D,SAAA;;QAED,IAAM,UAAU,GAAG,GAAG,GAAG,GAAG,CAAC,kBAAmB,CAAA,MAAA,CAAA,KAAK,WAAQ,CAAC,GAAG,EAAE,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC;AAEhG,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACpE,SAAA;AAAM,aAAA;AACL,YAAA,YAAY,CAAC,iCAAiC,GAAG,KAAK,CAAC,CAAC;AACzD,SAAA;KACF,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,mBAAmB,GAAnB,UAAqB,EAAkD,EAAE,GAAW,EAAE,OAAe,EAAA;AACnG,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;AACnB,YAAA,EAA6B,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAClE,SAAA;aAAM,IAAI,IAAI,CAAC,eAAe,EAAE;YAC/B,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC7D,SAAA;AAAM,aAAA;YACL,WAAW,CAAC,2BAA2B,CAAC,CAAC;AAC1C,SAAA;KACF,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,UAAuB,EAAkD,EAAE,IAAY,EAAE,KAAc,EAAE,IAAY,EAAE,MAAgB,EAAE,aAAsB,EAAA;AAC7J,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;AACnB,YAAA,EAA6B,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AAChG,SAAA;aAAM,IAAI,IAAI,CAAC,eAAe,EAAE;AAC/B,YAAA,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AAC3F,SAAA;AAAM,aAAA;YACL,WAAW,CAAC,2BAA2B,CAAC,CAAC;AAC1C,SAAA;KAEF,CAAA;IAED,eAAmB,CAAA,SAAA,CAAA,mBAAA,GAAnB,UAAqB,EAAkD,EAAE,IAAY,EAAE,KAAY,EAAE,KAAc,EAAE,aAAsB,EAAA;AACzI,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;YACnB,EAA6B,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;AACvF,SAAA;aAAM,IAAI,IAAI,CAAC,eAAe,EAAE;AAC/B,YAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;AAClF,SAAA;AAAM,aAAA;YACL,WAAW,CAAC,2BAA2B,CAAC,CAAC;AAC1C,SAAA;KAEF,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,WAAW,GAAX,UAAa,EAAkD,EAAE,YAAuB,EAAA;AACtF,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAErC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;AAC5B,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC3C,aAAA;AAAM,iBAAA;gBACL,OAAO;AACR,aAAA;AACF,SAAA;QACD,IAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,KAAK,EAAA;AACvD,YAAA,IAAI,OAAO,EAAE;;AAEX,gBAAA,OAAO,GAAG,GAAG,GAAG,CAAC,0BAAmB,KAAK,EAAA,QAAA,CAAQ,CAAC,GAAI,EAA6B,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC;AACjH,aAAA;YAED,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC/B,SAAA;AAAM,aAAA;AACJ,YAAA,EAA6B,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACrD,SAAA;KACF,CAAA;AAED,IAAA,eAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,UAAuB,EAAkD,EAAE,MAAc,EAAE,KAAa,EAAA;AACtG,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;AAEjD,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,uBAAuB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9E,SAAA;KACF,CAAA;IAED,eAAK,CAAA,SAAA,CAAA,KAAA,GAAL,UAAO,EAAyB,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;KAC3B,CAAA;IAEH,OAAC,eAAA,CAAA;AAAD,CAAC,EAAA,CAAA,CAAA;AAEK,SAAU,yBAAyB,CAAE,EAAkD,EAAA;AAC3F,IAAA,IAAI,EAAE,CAAC,YAAY,CAAC,+BAA+B,CAAC,EAAE;AACpD,QAAA,OAAO,uBAAuB,CAAC;AAChC,KAAA;AACD,IAAA,IAAI,EAAE,CAAC,YAAY,CAAC,gCAAgC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,uCAAuC,CAAC,EAAE;AACjH,QAAA,OAAO,wBAAwB,CAAC;AACjC,KAAA;AAED,IAAA,OAAO,CAAC,CAAC;AACX;;;AClPA,IAAI,UAA6B,CAAC;AAE3B,IAAMC,sBAAoB,GAAG,OAAO,WAAW,KAAK,UAAU,IAAI,OAAO,iBAAiB,IAAI,UAAU,CAAC;AAEhH,IAAA,SAAA,kBAAA,YAAA;IASE,SAAa,SAAA,CAAA,MAAsB,EAAE,QAAuB,EAAA;QAD5D,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAElB,QAAA,IAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAiB,CAAC;AAC5E,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,CAAC;AAC7C,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACrB;IAED,SAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAkB,IAAY,EAAA;;AAC5B,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;KAC1D,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,YAAA;QACE,YAAY,CAAC,sCAAsC,CAAC,CAAC;KACtD,CAAA;IAED,SAAM,CAAA,SAAA,CAAA,MAAA,GAAN,UAAQ,MAA4B,EAAA;;QAApC,IA8LC,KAAA,GAAA,IAAA,CAAA;AA7LC,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC7B,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3B,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,IAAI,QAAQ,IAAI,MAAM,EAAE;YACtB,IAAI,OAAK,GAAG,CAAC,CAAC;YACd,IAAI,QAAM,GAAG,CAAC,CAAC;AACf,YAAA,IAAM,IAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;YAEvB,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACnC,IAAA,UAAU,GAAY,OAAO,CAAA,UAAnB,EAAE,KAAK,GAAK,OAAO,CAAA,KAAZ,CAAa;AACtC,YAAA,IAAI,QAAM,GAAG,OAAO,CAAC,MAAgB,CAAC;AACtC,YAAA,IAAI,MAAI,GAAG,OAAO,CAAC,IAAc,CAAC;AAClC,YAAA,IAAI,gBAAc,GAAG,OAAO,CAAC,cAAwB,CAAC;AAEtD,YAAA,IAAI,MAAI,KAAK,SAAS,CAAC,UAAU,EAAE;gBACjC,MAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC;gBAChD,IAAI,CAAC,MAAI,EAAE;oBACT,YAAY,CAAC,mCAAmC,CAAC,CAAC;AACnD,iBAAA;gBACD,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,gBAAc,KAAK,QAAM,EAAE;AACzD,oBAAA,IAAI,QAAM,KAAK,SAAS,CAAC,SAAS,EAAE;AAClC,wBAAA,QAAM,GAAG,SAAS,CAAC,GAAG,CAAC;AACxB,qBAAA;AACD,oBAAA,gBAAc,GAAG,iBAAiB,CAAC,QAAM,CAAC,CAAC;AAC5C,iBAAA;gBACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE;oBAC5C,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,IAAE,CAAC,OAAO,CAAC;oBACnD,WAAW,CAAC,iDAAiD,CAAC,CAAC;AAChE,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,MAAI,KAAK,IAAE,CAAC,KAAK,EAAE;gBAC5B,MAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC;gBAC5C,IAAI,CAAC,MAAI,EAAE;oBACT,YAAY,CAAC,8BAA8B,CAAC,CAAC;AAC9C,iBAAA;gBACD,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,gBAAc,KAAK,QAAM,EAAE;AACzD,oBAAA,IAAI,QAAM,KAAK,SAAS,CAAC,SAAS,EAAE;AAClC,wBAAA,QAAM,GAAG,SAAS,CAAC,GAAG,CAAC;AACxB,qBAAA;AACD,oBAAA,gBAAc,GAAG,YAAY,CAAC,QAAM,CAAC,CAAC;AACvC,iBAAA;gBACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE;oBACxC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,IAAE,CAAC,OAAO,CAAC;oBACnD,WAAW,CAAC,4CAA4C,CAAC,CAAC;AAC3D,iBAAA;AACF,aAAA;AACD,YAAA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAE7B,YAAA,OAAO,CAAC,CAAC,CAAC,GAAG,gBAAc,CAAC;AAC5B,YAAA,OAAO,CAAC,CAAC,CAAC,GAAG,MAAI,CAAC;AAClB,YAAA,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;YACpB,IAAM,GAAG,GAAG,IAAE,CAAC,YAAY,CAAC,IAAE,CAAC,8BAA8B,CAAC,CAAC;;AAG/D,YAAA,IAAI,GAAG,IAAI,OAAO,CAAC,gBAAgB,EAAE;AACnC,gBAAA,IAAE,CAAC,WAAW,CAAC,IAAE,CAAC,8BAA8B,EAAE,OAAO,CAAC,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrF,aAAA;;AAED,YAAA,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,IAAE,CAAC,mBAAmB,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,YAAA,IAAI,UAAU,KAAKJ,yBAAiB,CAAC,WAAW,EAAE;AAChD,gBAAA,IAAM,IAAI,GAAI,MAA4C,CAAC,IAAI,CAAC;AAEhE,gBAAA,IAAI,IAAI,EAAE;AACR,oBAAA,OAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AACxB,oBAAA,QAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AAC1B,oBAAA,IAAI,OAAK,IAAI,QAAM,KAAK,IAAI,CAAC,KAAK,KAAK,OAAK,IAAI,IAAI,CAAC,MAAM,KAAK,QAAM,CAAC,EAAE;wBACvE,IAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,gBAAc,EAAE,OAAK,EAAE,QAAM,EAAE,CAAC,EAAE,QAAM,EAAE,MAAI,EAAE,IAAI,CAAC,CAAC;AAChF,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,UAAU,KAAKA,yBAAiB,CAAC,IAAI,EAAE;AAChD,gBAAA,IAAI,MAAM,KAAK,IAAE,CAAC,gBAAgB,EAAE;AAClC,oBAAA,IAAI,KAAG,CAAC;AACR,oBAAA,IAAM,QAAQ,GAAI,MAAwC,CAAC,IAAI,CAAC;AAEhE,oBAAA,QAAQ,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,GAAG,EAAA;wBACzB,KAAG,GAAG,KAAI,CAAC,cAAc,CAAC,IAAE,EAAE,IAAE,CAAC,2BAA2B,GAAG,GAAG,EAAE,CAAC,EAAE,gBAAc,EAAE,QAAM,EAAE,MAAI,EAAE,IAA2D,CAAC,CAAC;AAClK,wBAAA,OAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,OAAK,CAAC,CAAC;AAChC,wBAAA,QAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,QAAM,CAAC,CAAC;AACpC,qBAAC,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA;oBACL,EAAkB,GAAA,IAAI,CAAC,cAAc,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAc,EAAE,QAAM,EAAE,MAAI,EAAG,MAAqC,CAAC,IAAI,CAAC,EAA9H,OAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAM,GAAA,EAAA,CAAA,CAAA,CAAA,CAAkH;AACjI,iBAAA;AACF,aAAA;iBAAM,IAAI,UAAU,KAAKA,yBAAiB,CAAC,KAAK,IAAI,UAAU,KAAKA,yBAAiB,CAAC,KAAK,EAAE;AAC3F,gBAAA,IAAI,MAAM,KAAK,IAAE,CAAC,gBAAgB,EAAE;AAClC,oBAAA,IAAI,KAAG,CAAC;oBAEP,MAAwC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG,EAAA;wBAChE,KAAG,GAAG,KAAI,CAAC,UAAU,CAAC,IAAE,EAAE,IAAE,CAAC,2BAA2B,GAAG,GAAG,EAAE,CAAC,EAAE,gBAAc,EAAE,QAAM,EAAE,MAAI,EAAE,KAAyB,CAAC,CAAC;AAC5H,wBAAA,OAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,OAAK,CAAC,CAAC;AAChC,wBAAA,QAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,QAAM,CAAC,CAAC;AACpC,qBAAC,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA,IAAI,MAAM,KAAK,IAAE,CAAC,UAAU,EAAE;oBACnC,IAAM,KAAK,GAAI,MAAsC,CAAC,KAAK,IAAK,MAAsC,CAAC,KAAK,CAAC;oBAE7G,EAAkB,GAAA,IAAI,CAAC,UAAU,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAc,EAAE,QAAM,EAAE,MAAI,EAAE,KAAK,CAAC,EAApF,OAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAM,GAAA,EAAA,CAAA,CAAA,CAAA,CAAwE;AACvF,iBAAA;gBACD,IAAK,OAAuC,CAAC,cAAc,EAAE;AAC3D,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAK,CAAC,IAAI,YAAY,CAAC,QAAM,CAAC,KAAK,QAAQ,CAAC,KAAK,IAAI,CAAC,EAAE;AACxE,wBAAA,IAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;wBAC1B,IAAM,WAAW,GAAW,CAAC,CAAC,OAAK,EAAE,QAAM,CAAC,CAAC,CAAC;AAC9C,wBAAA,IAAI,UAAU,GAAG,OAAK,GAAG,CAAC,CAAC;AAC3B,wBAAA,IAAI,WAAW,GAAG,QAAM,GAAG,CAAC,CAAC;AAE7B,wBAAA,OAAO,UAAU,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE;4BAC1C,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;4BAC5C,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;4BACxC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AAC3C,yBAAA;wBACD,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzB,wBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;AAC9B,wBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACzB,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,UAAU,KAAKA,yBAAiB,CAAC,OAAO,EAAE;AACnD,gBAAA,IAAI,KAAG,CAAC;AAER,gBAAA,IAAI,MAAM,KAAK,IAAE,CAAC,UAAU,EAAE;AAC5B,oBAAA,IAAM,OAAO,GAAI,MAA6C,CAAC,OAAO,CAAC;oBACvE,IAAM,YAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEnC,oBAAA,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM,EAAE,KAAK,EAAA;wBAC5B,IAAI,MAAM,IAAI,MAAM,EAAE;AACpB,4BAAA,KAAG,GAAG,KAAI,CAAC,cAAc,CAAC,IAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAc,EAAE,QAAM,EAAE,MAAI,EAAE,MAAM,CAAC,CAAC;AACpF,yBAAA;AAAM,6BAAA;AACL,4BAAA,KAAG,GAAG,KAAI,CAAC,UAAU,CAAC,IAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAc,EAAE,QAAM,EAAE,MAAI,EAAE,MAAM,CAAC,CAAC;AAChF,yBAAA;AACD,wBAAA,YAAU,CAAC,KAAK,CAAC,GAAG,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,KAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACrC,IAAI,KAAK,KAAK,CAAC,EAAE;4BACd,OAAK,GAAY,KAAG,CAAf,CAAA,CAAA,EAAE,QAAM,GAAI,KAAG,GAAP,CAAQ;AACvB,yBAAA;AACH,qBAAC,CAAC,CAAC;oBACH,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACvC,iBAAA;AAAM,qBAAA,IAAI,MAAM,KAAK,IAAE,CAAC,gBAAgB,EAAE;AACzC,oBAAA,IAAM,OAAO,GAAI,MAA+C,CAAC,OAAO,CAAC;oBACzE,IAAM,YAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEnC,oBAAA,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM,EAAE,KAAK,EAAA;AAC5B,wBAAA,MAAM,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,GAAG,EAAA;4BACvB,IAAI,MAAM,IAAI,IAAI,EAAE;gCAClB,KAAG,GAAG,KAAI,CAAC,cAAc,CAAC,IAAE,EAAE,IAAE,CAAC,2BAA2B,GAAG,GAAG,EAAE,KAAK,EAAE,gBAAc,EAAE,QAAM,EAAE,MAAI,EAAE,IAAI,CAAC,CAAC;AAChH,6BAAA;AAAM,iCAAA;gCACL,KAAG,GAAG,KAAI,CAAC,UAAU,CAAC,IAAE,EAAE,IAAE,CAAC,2BAA2B,GAAG,GAAG,EAAE,KAAK,EAAE,gBAAc,EAAE,QAAM,EAAE,MAAI,EAAE,IAAI,CAAC,CAAC;AAC5G,6BAAA;AACD,4BAAA,YAAU,CAAC,KAAK,CAAC,GAAG,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,KAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4BACrC,IAAI,KAAK,KAAK,CAAC,EAAE;gCACd,OAAK,GAAY,KAAG,CAAf,CAAA,CAAA,EAAE,QAAM,GAAI,KAAG,GAAP,CAAQ;AACvB,6BAAA;AACH,yBAAC,CAAC,CAAC;AACL,qBAAC,CAAC,CAAC;oBACH,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACvC,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,UAAU,KAAKA,yBAAiB,CAAC,UAAU,EAAE;AACtD,gBAAA,IAAM,OAAO,GAAI,MAA2C,CAAC,OAAO,CAAC;AAErE,gBAAA,IAAI,OAAO,EAAE;oBACX,IAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEnC,oBAAA,OAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACzB,oBAAA,QAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3B,oBAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;AAC5D,wBAAA,IAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEjC,wBAAA,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;wBACrD,IAAE,CAAC,oBAAoB,CACrB,MAAM,EACN,QAAQ,EACR,gBAAc,EACd,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,EACb,CAAC,EACD,MAAM,CAAC,IAAI,CAAC,CAAC;AAChB,qBAAA;oBACD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACvC,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAK,EAAE,QAAM,CAAC,CAAC,CAAC;AACrC,aAAA;AACD,YAAA,IAAI,GAAG,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBACnC,IAAE,CAAC,WAAW,CAAC,IAAE,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;AACxD,aAAA;AACD,YAAA,IAAI,CAAC,KAAK,GAAG,OAAK,CAAC;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,QAAM,CAAC;YACrB,IAAI,CAAC,iBAAiB,CAAC,IAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC7C,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,SAAA;KAEF,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,UAAmB,EAAa,EAAE,MAAc,EAAE,OAA6B,EAAA;;AAC7E,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,UAAU,EAAE;YACjC,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC,qBAAqB,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;AACrF,SAAA;QACD,IAAM,KAAK,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,KAAI,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACnG,IAAM,QAAQ,GAAG,KAAK,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC;QACxE,IAAM,SAAS,GAAG,KAAK,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC;QAEzE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAC1D,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;AAC3D,QAAA,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC;AAC5G,QAAA,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC;KAC7G,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,UAAU,GAAV,UAAY,EAAa,EAAE,MAAc,EAAE,KAAa,EAAE,cAAsB,EAAE,MAAc,EAAE,IAAY,EAAE,KAAoB,EAAA;;AAClI,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,QAAA,IAAM,OAAO,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,UAAU,CAAC,cAAc,KAAI,IAAI,CAAC;QACrE,IAAI,GAAG,GAAG,KAAK,CAAC;AAEhB,QAAA,IAAI,OAAO,CAAC,UAAU,KAAKA,yBAAiB,CAAC,KAAK,EAAE;AAClD,YAAA,IAAI,YAAY,GAAG,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,aAAa,CAAC;AAEpK,YAAA,YAAY,GAAG,YAAY,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;AAC/E,YAAA,IAAI,YAAY,EAAE;AAChB,gBAAA,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC/B,aAAA;YACD,IAAII,sBAAoB,IAAI,GAAG,YAAY,WAAW,IAAI,OAAO,CAAC,KAAK,EAAE;AACvE,gBAAA,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACjC,aAAA;AACF,SAAA;AACD,QAAA,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAChE,IAAM,IAAI,GAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AAE3C,QAAA,IAAI,UAAU,EAAE;YACd,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1C,SAAA;QAED,OAAO,OAAO,CAAC,UAAU,KAAKJ,yBAAiB,CAAC,KAAK,GAAG,CAAE,KAA0B,CAAC,UAAU,EAAG,KAA0B,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;KAClJ,CAAA;IAED,SAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,MAAmB,EAAA;QAClC,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC/C,SAAA;QACD,IAAM,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC9C,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACjD,IAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;QAEpE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACnC,QAAA,GAAG,CAAC,SAAS,GAAG,0BAA0B,CAAC;QAC3C,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAClC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5B,QAAA,OAAO,UAAU,CAAC;KACnB,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,cAAc,GAAd,UAAgB,EAAa,EAAE,MAAc,EAAE,KAAa,EAAE,cAAsB,EAAE,MAAc,EAAE,IAAY,EAAE,IAAyD,EAAA;AAC3K,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;;AAE7B,QAAA,IAAM,SAAS,GAAG,IAAI,KAAK,EAAE,CAAC,aAAa,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC;QAE1K,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAElG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;KAClC,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,WAAW,GAAX,UAAa,KAAoB,EAAE,WAAoB,EAAE,YAAqB,EAAA;;AAC5E,QAAA,IAAM,OAAO,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,UAAU,CAAC,cAAc,KAAI,IAAI,CAAC;QAErE,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAK,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE;AACnF,YAAA,OAAO,KAAyB,CAAC;AAClC,SAAA;AACD,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAC5B,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AACtE,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;AAExE,YAAA,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,KAAK,EAAE;gBACjC,IAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAEhD,gBAAA,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;AAClB,gBAAA,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;gBACnB,IAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;gBAEhE,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpE,WAAW,CAAC,oBAAqB,CAAA,MAAA,CAAA,KAAK,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,MAAM,EAAO,MAAA,CAAA,CAAA,MAAA,CAAA,EAAE,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,EAAE,CAAE,CAAC,CAAC;AAEnE,gBAAA,OAAO,MAAM,CAAC;AACf,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAyB,CAAC;KAClC,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;AACE,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAE3B,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;YAEvB,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;YAE1B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;AACvB,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC;AAC3B,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AACjB,YAAA,IAAI,MAAM,KAAK,EAAE,CAAC,UAAU,EAAE;gBAC5B,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAEvF,aAAA;AAAM,iBAAA,IAAI,MAAM,KAAK,EAAE,CAAC,gBAAgB,EAAE;AACzC,gBAAA,IAAM,KAAK,GAAG;AACZ,oBAAA,EAAE,CAAC,2BAA2B;AAC9B,oBAAA,EAAE,CAAC,2BAA2B;AAC9B,oBAAA,EAAE,CAAC,2BAA2B;AAC9B,oBAAA,EAAE,CAAC,2BAA2B;AAC9B,oBAAA,EAAE,CAAC,2BAA2B;AAC9B,oBAAA,EAAE,CAAC,2BAA2B;iBAC/B,CAAC;AAEF,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,oBAAA,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AACzF,iBAAA;AACF,aAAA;;AAED,YAAA,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,SAAA;KACF,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;;AAEpC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAEpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC5C,SAAA;KACF,CAAA;IAED,SAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,QAAuB,EAAA;AACtC,QAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C,CAAA;IAEH,OAAC,SAAA,CAAA;AAAD,CAAC,EAAA,CAAA,CAAA;AAEK,SAAU,iBAAiB,CAAE,KAAa,EAAA;AAC9C,IAAA,OAAO,SAAA,CAAC,EAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,CAAC;AACrD,CAAC;AAEK,SAAU,YAAY,CAAE,KAAa,EAAA;AACzC,IAAA,OAAO,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,IAAM,iBAAiB,IAAAC,IAAA,GAAA,EAAA;AACrB,IAAAA,IAAA,CAAC,SAAS,CAAC,IAAI,CAAA,GAAG,KAAK;AACvB,IAAAA,IAAA,CAAC,SAAS,CAAC,GAAG,CAAA,GAAG,KAAK;AACtB,IAAAA,IAAA,CAAC,SAAS,CAAC,KAAK,CAAA,GAAG,KAAK;AACxB,IAAAA,IAAA,CAAC,SAAS,CAAC,GAAG,CAAA,GAAG,KAAK;AACtB,IAAAA,IAAA,CAAC,SAAS,CAAC,eAAe,CAAA,GAAG,KAAK;AAClC,IAAAA,IAAA,CAAC,SAAS,CAAC,SAAS,CAAA,GAAG,KAAK;SAC7B,CAAC;AACF,IAAM,YAAY,IAAAC,IAAA,GAAA,EAAA;AAChB,IAAAA,IAAA,CAAC,SAAS,CAAC,IAAI,CAAA,GAAG,KAAK;AACvB,IAAAA,IAAA,CAAC,SAAS,CAAC,GAAG,CAAA,GAAG,KAAK;AACtB,IAAAA,IAAA,CAAC,SAAS,CAAC,KAAK,CAAA,GAAG,KAAK;AACxB,IAAAA,IAAA,CAAC,SAAS,CAAC,GAAG,CAAA,GAAG,KAAK;AACtB,IAAAA,IAAA,CAAC,SAAS,CAAC,eAAe,CAAA,GAAG,KAAK;AAClC,IAAAA,IAAA,CAAC,SAAS,CAAC,SAAS,CAAA,GAAG,KAAK;SAC7B;;ACtZD,IAAM,aAAa,GAAG,kBAAkB,CAAC;AAEzC,IAAA,aAAA,kBAAA,YAAA;AAmBE,IAAA,SAAA,aAAA,CAAa,EAAkD,EAAA;QAA/D,IAgCC,KAAA,GAAA,IAAA,CAAA;QAnCO,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QAC7B,IAAS,CAAA,SAAA,GAAuB,EAAE,CAAC;QA+CnC,IAAa,CAAA,aAAA,GAAG,UAAC,CAAQ,EAAA;AACvB,YAAA,YAAY,CAAC,sCAAsC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAC/D,KAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,MAAM,EAAE;gBACZ,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,KAAI,CAAC,aAAa,CAAC,CAAC;AACjE,aAAA;AACH,SAAC,CAAC;AAlDA,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,sBAAsB,KAAK,WAAW,IAAI,EAAE,YAAY,sBAAsB,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3G,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,EAAE,EAAA,EAAA,EAAE,CAAC,CAAC;QACvC,IAAM,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;AAE/D,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,SAAS,CAAC;AAClC,YAAA,IAAI,EAAE,CAAC;YACP,UAAU,EAAEF,yBAAiB,CAAC,IAAI;YAClC,MAAM,EAAE,EAAE,CAAC,SAAS;YACpB,cAAc,EAAE,EAAE,CAAC,SAAS;YAC5B,IAAI,EAAE,EAAE,CAAC,aAAa;SACvB,EAAE,IAAI,CAAC,CAAC;AACT,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,SAAS,CAAC;YACpC,MAAM,EAAE,EAAE,CAAC,gBAAgB;AAC3B,YAAA,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACxB,UAAU,EAAEA,yBAAiB,CAAC,IAAI;YAClC,MAAM,EAAE,EAAE,CAAC,SAAS;YACpB,cAAc,EAAE,EAAE,CAAC,SAAS;YAC5B,IAAI,EAAE,EAAE,CAAC,aAAa;SACvB,EAAE,IAAI,CAAC,CAAC;QACT,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC3F,IAAI,EAAE,CAAC,MAAM,EAAE;YACb,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC/D,SAAA;KACF;IAED,aAAqB,CAAA,SAAA,CAAA,qBAAA,GAArB,UAAuB,EAAwB,EAAA;AAC7C,QAAA,OAAO,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;KACzC,CAAA;IACD,aAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAsB,EAAU,EAAA;AAC9B,QAAA,OAAO,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;KACxC,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,aAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;AAAA,KAAA,CAAA,CAAA;AAUD,IAAA,aAAA,CAAA,SAAA,CAAA,KAAK,GAAL,UAAO,MAAiB,EAAE,MAAiB,EAAA;AACzC,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,EAA4B,CAAC;AAE7C,QAAA,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;AAC1C,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;AAC1C,aAAA;AACD,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB,YAAA,IAAM,iBAAiB,GAAG,EAAE,CAAC,iBAAiB,CAAC;YAE/C,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACvD,YAAA,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,QAAqB,EAAE,CAAC,CAAC,CAAC;YAC3G,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACvD,YAAA,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,QAAqB,EAAE,CAAC,CAAC,CAAC;YAC3G,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5D,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5D,YAAA,IAAM,MAAM,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;AAExG,YAAA,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YACtH,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC5C,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACjD,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAClD,SAAA;KACF,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,UAAuB,EAAiB,EAAE,MAAmB,EAAA;QAC3D,EAAE,CAAC,IAAI,EAAE,CAAC;AACV,QAAA,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;KAC/B,CAAA;IAED,aAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAsB,YAA4B,EAAA;QAChD,IAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC;AAExC,QAAA,IAAI,EAAE,EAAE;AACN,YAAA,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAC3C,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX,CAAA;IAED,aAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,OAA4B,EAAA;AAC1C,QAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C,CAAA;IAED,aAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,OAAyB,EAAA;AACrC,QAAA,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KACvC,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,MAAM,GAAN,UAAQ,KAAa,EAAE,MAAc,EAAA;AACnC,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAEnB,QAAA,IAAI,EAAE,IAAI,EAAE,CAAC,kBAAkB,KAAK,KAAK,IAAI,EAAE,CAAC,mBAAmB,KAAK,MAAM,EAAE;AAC9E,YAAA,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB,YAAA,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YAC1B,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAA,WAAW,EAAA;AACpC,gBAAA,IAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;AAEtC,gBAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;oBACjC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;AACrH,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;KACF,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,oBAAoB,GAApB,UAAsB,GAAQ,EAAE,IAAa,EAAE,EAAW,EAAA;AACxD,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,GAAG,CAAC,kBAAkB,GAAG,EAAE,IAAI,EAAA,IAAA,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,oBAAoB,EAAE;AAC5B,gBAAA,GAAG,CAAC,oBAAoB,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5C,gBAAA,IAAI,EAAE,EAAE;AACN,oBAAA,GAAG,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,CAAC;AAClC,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,GAAG,CAAC,oBAAoB,GAAG;AACzB,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,EAAE,EAAE,EAAE;iBACP,CAAC;AACH,aAAA;AACF,SAAA;KACF,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,mBAAmB,GAAnB,UAAqB,WAA0B,EAAE,IAAa,EAAA;QAC5D,IAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC;AAExC,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YACxC,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5C,SAAA;AAED,QAAA,OAAO,GAAG,CAAC;KACZ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,eAAe,GAAf,UAAiB,OAAkB,EAAE,IAAa,EAAA;QAChD,IAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;AAEpC,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACtC,SAAA;AAED,QAAA,OAAO,GAAG,CAAC;KACZ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,cAAc,GAAd,UAAgB,SAAsB,EAAE,IAAa,EAAA;QACnD,IAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AAEtC,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACzC,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf,CAAA;IAED,aAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,OAAkB,EAAA;QACjC,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAC1C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACxC,YAAA,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;;YAEnC,OAAO,OAAO,CAAC,QAAQ,CAAC;AACzB,SAAA;KACF,CAAA;IAED,aAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,MAA0B,EAAA;AACzC,QAAA,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;;YAEtC,OAAO,MAAM,CAAC,QAAQ,CAAC;AACxB,SAAA;KACF,CAAA;IAED,aAAmB,CAAA,SAAA,CAAA,mBAAA,GAAnB,UAAqB,WAA0B,EAAA;AAC7C,QAAA,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACrC,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAEnB,YAAA,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAI,CAAC,CAAC;AACvC,YAAA,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,cAAe,CAAC,CAAC;AAClD,YAAA,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,EAAE,EAAA,EAAE,OAAA,EAAE,CAAC,OAAO,EAAE,CAAZ,EAAY,CAAC,CAAC;AACrD,YAAA,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC3C,OAAO,WAAW,CAAC,GAAG,CAAC;AACxB,SAAA;KACF,CAAA;IAED,aAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAsB,YAA4B,EAAA;AAChD,QAAA,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAClD,YAAA,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;;YAE7C,OAAO,YAAY,CAAC,QAAQ,CAAC;AAC9B,SAAA;KACF,CAAA;IAED,aAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,IAAa,EAAA;;AAC9B,QAAA,IAAI,GAAG,CAAC;AAER,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;AACpB,YAAA,GAAG,GAAI,IAAI,CAAC,EAA6B,CAAC,iBAAiB,EAA4B,CAAC;AACzF,SAAA;QACD,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,GAAG,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,oBAAoB,EAAE,CAAC;AAC/C,SAAA;AACD,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACtC,SAAA;AAED,QAAA,OAAO,GAAG,CAAC;KACZ,CAAA;IAED,aAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAkB,GAAkC,EAAA;QACjD,IAAI,CAAC,EAA6B,CAAC,eAAe,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;KAClE,CAAA;IAED,aAAmB,CAAA,SAAA,CAAA,mBAAA,GAAnB,UAAqB,GAAkC,EAAA;;QACrD,CAAA,EAAA,GAAA,IAAI,CAAC,GAAG,CAAC,MAAM,0CAAE,kBAAkB,CAAC,GAAgC,CAAC,CAAC;KACvE,CAAA;IAED,aAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,GAAkC,EAAA;AACjD,QAAA,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;KACpB,CAAA;IAED,aAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,GAA2B,EAAA;;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;AACnB,gBAAA,IAAI,CAAC,EAA6B,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC5D,aAAA;AAAM,iBAAA;gBACL,CAAA,EAAA,GAAA,IAAI,CAAC,GAAG,CAAC,MAAM,0CAAE,oBAAoB,CAAC,GAAgC,CAAC,CAAC;AACzE,aAAA;AACD,YAAA,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC5B,SAAA;KACF,CAAA;IAED,aAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAS,MAAgB,EAAA;QAAzB,IAgCC,KAAA,GAAA,IAAA,CAAA;AA/BC,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAEnB,QAAA,IAAI,EAAE,EAAE;AACN,YAAA,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtC,YAAA,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,MAAM,EAAI,EAAA,OAAA,KAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAA5B,EAA4B,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAA,GAAG,EAAI,EAAA,OAAA,KAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAA3B,EAA2B,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;AAChC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAA,EAAE,EAAI,EAAA,OAAA,KAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAA5B,EAA4B,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,EAAE,EAAI,EAAA,OAAA,KAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAA7B,EAA6B,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,GAAG,EAAE,EAAA,OAAA,KAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAzB,EAAyB,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1B,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AACjE,YAAA,IAAI,MAAM,EAAE;gBACV,IAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;AAEjD,gBAAA,EAAE,aAAF,EAAE,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAF,EAAE,CAAE,WAAW,EAAE,CAAC;AACnB,aAAA;;YAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;;AAElF,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,aAAM,CAAA,SAAA,EAAA,QAAA,EAAA;AAAV,QAAA,GAAA,EAAA,YAAA;;AACE,YAAA,OAAO,MAAA,IAAI,CAAC,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,mBAAmB,CAAC;SACrC;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,aAAK,CAAA,SAAA,EAAA,OAAA,EAAA;AAAT,QAAA,GAAA,EAAA,YAAA;;AACE,YAAA,OAAO,MAAA,IAAI,CAAC,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,kBAAkB,CAAC;SACpC;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,aAAM,CAAA,SAAA,EAAA,QAAA,EAAA;AAAV,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;SACvB;;;AAAA,KAAA,CAAA,CAAA;IAED,aAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,OAA4B,EAAA;QAC7C,MAAM,KAAK,EAAE,CAAC;KACf,CAAA;IACH,OAAC,aAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC3UD,IAAIK,GAAkB,CAAC;SAEP,uBAAuB,GAAA;IACrC,IAAI,CAACA,GAAC,EAAE;AACN,QAAAA,GAAC,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;AAC7B,KAAA;AAED,IAAA,OAAOA,GAAC,CAAC;AACX;;ACDA,IAAA,WAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,WAAA,GAAA;QACE,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;QACV,IAAM,CAAA,MAAA,GAAG,CAAC,CAAC;KAOZ;AALC,IAAA,WAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAkB,IAAY,EAAE,OAAiB,EAAA;KAChD,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,mBAAmB,GAAnB,UAAqB,IAAY,EAAE,OAAiB,EAAA;KACnD,CAAA;IACH,OAAC,WAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACnBD;;AAEG;AACH,IAAY,gBAGX,CAAA;AAHD,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,gBAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACb,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,GAG3B,EAAA,CAAA,CAAA;;ACQD,IAAA,cAAA,kBAAA,YAAA;IAWE,SAAa,cAAA,CAAA,QAAuB,EAAE,OAA8B,EAAA;;AAClE,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAsB,CAAC;QACzE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AACnD,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,WAAW,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;KAC7C;AAED,IAAA,cAAA,CAAA,SAAA,CAAA,OAAO,GAAP,UAAS,KAAa,EAAE,MAAc,EAAA;AACpC,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACrD,YAAA,IAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AAC3C,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClC,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAE5B,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,KAAK,IAAI,MAAM,EAAE;gBACnB,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AACrG,gBAAA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;AACxB,oBAAA,IAAM,GAAG,GAAG,cAAc,KAAK,EAAE,CAAC,aAAa,GAAI,EAA6B,CAAC,gBAAgB,GAAG,cAAc,CAAC;AAElH,oBAAA,EAA6B,CAAC,8BAA8B,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACtH,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,YAAY,CAAC,6BAA8B,CAAA,MAAA,CAAA,KAAK,cAAI,MAAM,CAAE,CAAC,CAAC;AAC/D,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED,IAAA,cAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;;AAEzC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACnD,SAAA;KACF,CAAA;IACH,OAAC,cAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACnCD,IAAIC,MAAI,GAAG,CAAC,CAAC;AAEb,IAAA,aAAA,kBAAA,YAAA;IAwCE,SAAa,aAAA,CAAA,OAA6B,EAAE,QAAuB,EAAA;;QARnE,IAAc,CAAA,cAAA,GAAqB,EAAE,CAAC;AASpC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,uBAAuB,GAAG,CAAA,MAAA,OAAO,CAAC,sBAAsB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,KAAIR,uCAA+B,CAAC,IAAI,CAAC;AACnH,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,eAAe,GAAGQ,MAAI,EAAE,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;KAC5B;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,aAAc,CAAA,SAAA,EAAA,gBAAA,EAAA;AAAlB,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,IAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC;AAEjD,YAAA,IAAI,WAAW,KAAKR,uCAA+B,CAAC,eAAe,EAAE;gBACnE,OAAO,IAAI,CAAC,wBAAwB,CAAC;AACtC,aAAA;SACF;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,aAAY,CAAA,SAAA,EAAA,cAAA,EAAA;AAAhB,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,IAAI,IAAI,CAAC,uBAAuB,KAAKA,uCAA+B,CAAC,gBAAgB,EAAE;gBACrF,OAAO,IAAI,CAAC,wBAAwB,CAAC;AACtC,aAAA;SACF;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;AACE,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAExC,QAAA,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAA3B,EAA2B,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC/C,SAAA;QACD,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC7C,SAAA;KACF,CAAA;IAED,aAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,OAA6B,EAAA;;AACzC,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;AAC3C,QAAA,IAAM,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,IAAI,EAAE,WAAW,EAAEA,uCAA+B,CAAC,IAAI,EAAE,CAAC;QACvH,IAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,QAAA,IAAM,eAAe,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAE;AAE9C,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,oBAAoB,GAAG,IAAI,CAAC;AAEhC,QAAA,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAC7D,YAAA,MAAM,KAAK,CAAC,wCAAwC,CAAC,CAAC;AACvD,SAAA;QACD,IAAM,kBAAkB,GAA0B,CAAA,EAAA,GAAC,CAAA,EAAA,GAAA,OAAO,CAAC,sBAAsB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAuB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAC;AAErH,QAAA,IAAM,4BAA4B,GAAG,UAAU,CAAC,4BAA4B,CAAC;QAE7E,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACjD,IAAI,CAAC,UAAU,IAAI,sBAAsB,CAAC,WAAW,KAAKA,uCAA+B,CAAC,IAAI,EAAE;AAC9F,YAAA,MAAM,KAAK,CAAC,wDAAwD,CAAC,CAAC;AACvE,SAAA;AACD,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAE,CAAC;AAC3D,SAAA;AACD,QAAA,IAAI,eAAe,EAAE;AACnB,YAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAE,CAAC;AACvF,SAAA;AACD,QAAA,IAAM,WAAW,GAAG,sBAAsB,CAAC,WAAW,CAAC;AAEvD,QAAA,IAAI,WAAW,KAAKA,uCAA+B,CAAC,oBAAoB,EAAE;YACxE,IAAI,sBAAsB,CAAC,OAAO,EAAE;AAClC,gBAAA,IAAI,sBAAsB,CAAC,OAAO,YAAY,cAAc,EAAE;AAC5D,oBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,sBAAsB,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;AAC3F,wBAAA,MAAM,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACjE,qBAAA;AACD,oBAAA,IAAI,CAAC,wBAAwB,GAAG,sBAAsB,CAAC,OAAO,CAAC;AAC/D,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,iBAAA;AAAM,qBAAA;AACL,oBAAA,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;AACzD,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE;oBAC3D,MAAM,EAAE,SAAS,CAAC,aAAa;oBAC/B,UAAU,EAAE,SAAS,CAAC,wBAAwB;oBAC9C,WAAW,EAAC,IAAI,CAAC,WAAW;AAC5B,oBAAA,WAAW,EAAA,WAAA;AACZ,iBAAA,CAAC,CAAC;AACJ,aAAA;YACD,oBAAoB,GAAG,KAAK,CAAC;AAC9B,SAAA;AAAM,aAAA,IAAI,WAAW,KAAKA,uCAA+B,CAAC,eAAe,EAAE;YAC1E,IAAI,sBAAsB,CAAC,OAAO,EAAE;AAClC,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,sBAAsB,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;AAC3F,oBAAA,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;AACzD,iBAAA;AACD,gBAAA,IAAI,sBAAsB,CAAC,OAAO,YAAY,cAAc,EAAE;AAC5D,oBAAA,IAAI,CAAC,wBAAwB,GAAG,sBAAsB,CAAC,OAAO,CAAC;AAC/D,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,iBAAA;AAAM,qBAAA;AACL,oBAAA,MAAM,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACjD,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE;oBAC3D,UAAU,EAAE,SAAS,CAAC,gBAAgB;oBACtC,WAAW,EAAC,IAAI,CAAC,WAAW;oBAC5B,MAAM,EAAE,SAAS,CAAC,iBAAiB;AACnC,oBAAA,WAAW,EAAA,WAAA;AACZ,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,WAAW,KAAKA,uCAA+B,CAAC,gBAAgB,EAAE;YAC3E,IAAI,sBAAsB,CAAC,OAAO,EAAE;AAClC,gBAAA,IAAI,sBAAsB,CAAC,OAAO,YAAY,cAAc,EAAE;AAC5D,oBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,sBAAsB,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;AAC3F,wBAAA,MAAM,KAAK,CAAC,4CAA4C,CAAC,CAAC;AAC3D,qBAAA;AACD,oBAAA,IAAI,CAAC,wBAAwB,GAAG,sBAAsB,CAAC,OAAO,CAAC;AAC/D,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,iBAAA;AAAM,qBAAA;AACL,oBAAA,MAAM,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACnD,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,cAAc,CAAC,QAAQ,EAAE;oBAC3D,UAAU,EAAE,SAAS,CAAC,kBAAkB;oBACxC,MAAM,EAAE,SAAS,CAAC,cAAc;oBAChC,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,oBAAA,WAAW,EAAA,WAAA;AACZ,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,WAAW,KAAKA,uCAA+B,CAAC,gBAAgB,EAAE;YAC3E,IAAI,CAAC,4BAA4B,EAAE;AACjC,gBAAA,MAAM,KAAK,CAAC,6CAA6C,CAAC,CAAC;AAC5D,aAAA;AACD,YAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB,IAAI,IAAI,SAAS,CAAC;gBACtD,UAAU,EAAEE,yBAAiB,CAAC,WAAW;gBACzC,MAAM,EAAE,SAAS,CAAC,eAAe;AACjC,gBAAA,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,qBAAqB;gBAClD,IAAI,EAAE,SAAS,CAAC,cAAc;AAC9B,gBAAA,IAAI,EAAE,EAAA,CAAA,MAAA,CAAG,IAAI,CAAC,IAAI,EAAY,YAAA,CAAA;aAC/B,EAAE,QAAQ,CAAC,CAAC;AACd,SAAA;AAAM,aAAA,IAAI,WAAW,KAAKF,uCAA+B,CAAC,0BAA0B,EAAE;YACrF,IAAI,CAAC,4BAA4B,EAAE;AACjC,gBAAA,MAAM,KAAK,CAAC,qDAAqD,CAAC,CAAC;AACpE,aAAA;YACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,GAAG,kBAAkB,IAAI,IAAI,SAAS,CAAC;gBAC5E,UAAU,EAAEE,yBAAiB,CAAC,WAAW;gBACzC,MAAM,EAAE,SAAS,CAAC,aAAa;AAC/B,gBAAA,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,8BAA8B;AAC3D,gBAAA,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,iBAAiB;AACpC,gBAAA,IAAI,EAAE,EAAA,CAAA,MAAA,CAAG,IAAI,CAAC,IAAI,EAAe,eAAA,CAAA;aAClC,EAAE,QAAQ,CAAC,CAAC;YACb,oBAAoB,GAAG,IAAI,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAChG,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,mBAAmB,GAAnB,UAAqB,WAAkC,EAAE,oBAA6B,EAAA;AACpF,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAA4B,CAAC;AACtD,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAE3C,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;YAC/D,IAAM,WAAW,GAAa,EAAE,CAAC;YAEjC,IAAI,WAAW,CAAC,WAAW,KAAKH,0BAAkB,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;AAC7E,gBAAA,MAAM,CAAC,WAAW,EAAE,oBAAoB,GAAG,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,wBAAwB,CAAC,CAAC;AAC/F,aAAA;YACD,IAAI,WAAW,CAAC,aAAa,KAAKA,0BAAkB,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;AACjF,gBAAA,MAAM,CAAC,WAAW,EAAE,oBAAoB,GAAG,EAAE,CAAC,kBAAkB,GAAG,EAAE,CAAC,wBAAwB,CAAC,CAAC;AACjG,aAAA;AACD,YAAA,IAAI,WAAW,CAAC,WAAW,KAAKA,0BAAkB,CAAC,KAAK,EAAE;gBACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;oBACjC,MAAM,CAAC,WAAW,EAAG,EAAwC,CAAC,0BAAmB,CAAC,CAAE,CAAC,CAAC,CAAC;AACxF,iBAAA;AACF,aAAA;AAED,YAAA,OAAO,WAAW,CAAC;AACpB,SAAA;KACF,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;AACE,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAEzC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE;AACrB,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAA4B,CAAC;YAEtD,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC/C,SAAA;AACD,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAElC,KAAK,CAAC,qBAAqB,EAAE,CAAC;KAC/B,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,IAAI,GAAJ,YAAA;AACE,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClC,QAAA,IAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;AACnC,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AAE3C,QAAA,IAAI,cAAc,EAAE;AAElB,YAAA,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACnD,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,SAAA;aAAM,IAAI,IAAI,CAAC,GAAG,EAAE;YAEnB,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7C,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACnE,IAAM,GAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;AAChD,YAAA,IAAM,SAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC;;YAGxC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAAE,IAAI,EAAA;gBAC/C,IAAI,CAAC,KAAK,GAAC,IAAI,SAAO,CAAC,QAAQ,CAAC,CAAiB,CAAC,EAAE;AAClD,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC3B,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,GAAC,EAAE,IAAI,CAAC,CAAC;AAClD,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACT,IAAA,EAAA,GAA6D,IAAI,EAA/D,wBAAwB,GAAA,EAAA,CAAA,wBAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA,EAAE,cAAc,GAAA,EAAA,CAAA,cAAS,CAAC;AAExE,YAAA,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AACjC,YAAA,IAAI,wBAAwB,EAAE;AAC5B,gBAAA,wBAAwB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,gBAAA,EAAE,CAAC,uBAAuB,CAAC,WAAW,EAAE,wBAAwB,CAAC,UAAU,EAAE,EAAE,CAAC,YAAY,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAClI,aAAA;AAAM,iBAAA,IAAI,YAAY,EAAE;AACvB,gBAAA,IAAI,cAAc,EAAE;AAClB,oBAAA,IAAI,YAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC;AACrC,oBAAA,IAAI,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC;AAElC,oBAAA,IAAI,IAAI,CAAC,uBAAuB,KAAKC,uCAA+B,CAAC,0BAA0B,EAAE;AAC/F,wBAAA,YAAU,GAAG,EAAE,CAAC,wBAAwB,CAAC;AACzC,wBAAA,MAAM,GAAI,EAA6B,CAAC,gBAAgB,CAAC;AAC1D,qBAAA;oBACD,IAAM,YAAY,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE;wBACrD,WAAW,EAAC,IAAI,CAAC,uBAAuB;AACxC,wBAAA,UAAU,EAAA,YAAA;AACV,wBAAA,MAAM,EAAA,MAAA;wBACN,WAAW,EAAC,IAAI,CAAC,WAAW;AAC7B,qBAAA,CAAC,CAAC;oBAEH,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AACnD,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACvC,oBAAA,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,oBAAA,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC,WAAW,EAAE,YAAU,EAAE,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAC/F,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,GAAI,CAAC,CAAC;AAC/C,iBAAA;gBACD,YAAY,CAAC,MAAM,CAAC;oBAClB,UAAU,EAAEE,yBAAiB,CAAC,WAAW;AACzC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;AAClD,iBAAA,CAAC,CAAC;AACH,gBAAA,IAAM,UAAU,GAAG,YAAY,IAAI,cAAc,GAAG,EAAE,CAAC,wBAAwB,GAAG,EAAE,CAAC,gBAAgB,CAAC;AAEtG,gBAAA,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,QAAwB,EAAE,CAAC,CAAC,CAAC;AAC3G,aAAA;AACD,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5C,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAA;AAC9C,gBAAA,IAAI,GAAG,EAAE;oBACP,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBACxC,IAAM,QAAM,GAAG,EAAE,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;AAEtD,oBAAA,IAAI,QAAM,KAAK,EAAE,CAAC,oBAAoB,EAAE;AACtC,wBAAA,IAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;wBAE5B,MAAM,KAAK,CAAC,4BAA6B,CAAA,MAAA,CAAA,QAAM,oBAAU,KAAK,CAAE,CAAC,CAAC;AACnE,qBAAA;AACF,iBAAA;AACH,aAAC,CAAC,CAAC;;AAGH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACnB,SAAA;KACF,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,YAAA;AACE,QAAA,IAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AAC3C,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QAErB,IAAI,cAAc,IAAI,GAAG,EAAE;AACzB,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAA4B,CAAC;YAEtD,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;YACxD,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAC7C,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;AACzB,YAAA,IAAI,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC;YAE9B,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC;AACjC,aAAA;AACD,YAAA,EAAE,CAAC,eAAe,CAChB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAClB,YAAA,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAClB,YAAA,GAAG,EAAE,EAAE,CAAC,MAAM;aACf,CAAC;YACF,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AACpD,SAAA;KACF,CAAA;IAED,aAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAoB,MAAoB,EAAA;QAAxC,IAoCC,KAAA,GAAA,IAAA,CAAA;AAnCC,QAAA,IAAM,EAAE,GAA0B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AACnD,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAM,IAAI,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,IAAM,OAAO,GAAc,EAAE,CAAC;AAE9B,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AACrC,SAAA;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC/C,QAAA,IAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAE3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,KAAK,EAAA;AACpC,YAAA,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,EAAEA,yBAAiB,CAAC,WAAW,EAAE,IAAI,EAAA,IAAA,EAAE,CAAC,CAAC;AAChE,YAAA,IAAI,cAAc,EAAE;gBAClB,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;gBAEnD,IAAM,YAAY,GAAG,IAAI,cAAc,CAAC,KAAI,CAAC,QAAQ,EAAE;oBACrD,MAAM,EAAE,EAA6B,CAAC,KAAK;AAC3C,oBAAA,UAAU,EAAE,EAAE,CAAC,iBAAiB,GAAG,KAAK;oBACxC,WAAW,EAAEF,uCAA+B,CAAC,KAAK;oBAClD,WAAW,EAAC,KAAI,CAAC,WAAW;AAC7B,iBAAA,CAAC,CAAC;AAEH,gBAAA,KAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACvC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC5C,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,iBAAiB,GAAG,KAAK,EAAE,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;AAClH,aAAA;YAED,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,KAAI,CAAC,GAAI,CAAC,CAAC;AAC9C,YAAA,GAAG,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,QAAwB,CAAC,CAAC;AACjG,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,SAAC,CAAC,CAAC;AACH,QAAA,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB,CAAA;IAED,aAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAS,GAAkE,EAAA;;AACzE,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE/B,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC,GAAG,CAAC;YAChB,IAAM,eAAe,GAAG,CAAA,GAAG,aAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,sBAAsB,IAAG,GAAG,CAAC,sBAAsB,GAAGH,uCAA+B,CAAC,KAAK,CAAC;AAEzH,YAAA,IAAI,eAAe,KAAKA,uCAA+B,CAAC,KAAK,KAAK,eAAe,KAAKA,uCAA+B,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AAC5J,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,wBAAwB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;AACzC,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;AAC9B,aAAA;;YAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;AACtD,SAAA;KACF,CAAA;IAED,aAAM,CAAA,SAAA,CAAA,MAAA,GAAN,UAAQ,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAA;AACzD,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEzB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;;AAErE,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;;AAEtC,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,IAAI,EAAE,CAAC;AACb,SAAA;KACF,CAAA;IACH,OAAC,aAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC7aD;AACA,IAAM,oBAAoB,GAAG,KAAK,CAAC;AAEnB,SAAA,YAAY,CAAE,GAAW,EAAE,OAAwB,EAAA;AACjE,IAAA,IAAM,GAAG,GAAmB,OAAO,IAAI,EAAE,CAAC;AAE1C,IAAA,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,EAAA;AAC1C,QAAA,IAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;QAEjC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC;AAC9C,QAAA,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,cAAM,OAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAArB,EAAqB,CAAC,CAAC;AAC1D,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC;AACnC,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrB,KAAC,CAAC,CAAC;AACL,CAAC;AAEe,SAAA,cAAc,CAAE,QAA0C,EAAE,OAA0D,EAAA;AACpI,IAAA,IAAI,GAAqB,CAAC;IAC1B,IAAI,MAAM,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,SAAS,CAAC;AAEhC,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;QAChC,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,aAAa,KAAI,oBAAoB,EAAE;YAClD,OAAO,YAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,UAAA,IAAI,EAAI,EAAA,OAAA,iBAAiB,CAAC,IAAI,CAAC,CAAA,EAAA,CAAC,CAAC;AAC/F,SAAA;QACD,IAAM,GAAG,GAAG,QAAQ,CAAC;AAErB,QAAA,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACvB,YAAA,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;AACvB,SAAA;AACD,QAAA,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,KAAA;AAAM,SAAA;QACL,GAAG,GAAG,QAA4B,CAAC;QACnC,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,aAAa,KAAI,oBAAoB,EAAE;AAClD,YAAA,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC/B,SAAA;QACD,IAAI,QAAQ,YAAY,IAAI,EAAE;AAC5B,YAAA,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;YAClB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,GAAG,IAAI,CAAC;AACf,SAAA;AACF,KAAA;IACD,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7B,KAAA;AAED,IAAA,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,EAAA;QAC1C,GAAG,CAAC,MAAM,GAAG,YAAA;AACX,YAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,aAAA;AAED,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AACtB,SAAC,CAAC;AACF,QAAA,GAAG,CAAC,OAAO,GAAG,UAAA,GAAG,EAAA;AACf,YAAA,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AACnB,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,aAAA;AAED,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,SAAC,CAAC;AACJ,KAAC,CAAC,CAAC;AACL;;AClEA,IAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/B,IAAM,aAAa,GAAG,CAAC,CAAC;AACxB;AACA,IAAM,MAAM,GAAG,CAAC,CAAC;AAEjB;AACA,IAAA,uBAAA,kBAAA,YAAA;AAiBE,IAAA,SAAA,uBAAA,CAAa,WAAwB,EAAE,aAAqB,EAAE,UAAc,EAAA;AAAd,QAAA,IAAA,UAAA,KAAA,KAAA,CAAA,EAAA,EAAA,UAAc,GAAA,CAAA,CAAA,EAAA;AAC1E,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;;;;AAK7B,QAAA,IAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAEzE,QAAA,IACE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AACtB,YAAA,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AACtB,YAAA,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AACtB,YAAA,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AACtB,YAAA,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AACtB,YAAA,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AACtB,YAAA,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AACtB,YAAA,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AACtB,YAAA,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AACtB,YAAA,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;AACtB,YAAA,UAAU,CAAC,EAAE,CAAC,KAAK,IAAI;AACvB,YAAA,UAAU,CAAC,EAAE,CAAC,KAAK,IAAI,EACvB;AACA,YAAA,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAC;AAC/C,SAAA;;AAGD,QAAA,IAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC;AAC/C,QAAA,IAAM,cAAc,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC3F,IAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACrD,QAAA,IAAM,YAAY,GAAG,UAAU,KAAK,UAAU,CAAC;AAE/C,QAAA,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AACnE,QAAA,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,oBAAoB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,qBAAqB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,oBAAoB,GAAG,cAAc,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,mBAAmB,GAAG,cAAc,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;;AAGjF,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAEnE,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACnD,WAAW,CAAC,sCAAsC,CAAC,CAAC;YAEpD,OAAO;AACR,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,CAAC,EAAE;YACpC,WAAW,CAAC,wCAAwC,CAAC,CAAC;YAEtD,OAAO;AACR,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,EAAE;YACxC,WAAW,CAAC,0BAA0B,GAAG,aAAa,GAAG,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;YAE9F,OAAO;AACR,SAAA;;;AAGD,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC;AAC/B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;AACxB,SAAA;KACF;IAED,uBAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAS,WAAoB,EAAA;QAC3B,IAAM,OAAO,GAA+D,EAAE,CAAC;;AAG/E,QAAA,IAAI,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACvD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC5B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;AAC9B,QAAA,IAAM,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAEhE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,EAAE,KAAK,EAAE,EAAE;YAChD,IAAM,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvF,YAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE;AACpD,gBAAA,IAAM,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;gBAEhG,OAAO,CAAC,IAAI,CAAC;AACX,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,KAAK,EAAA,KAAA;AACL,oBAAA,MAAM,EAAA,MAAA;AACP,iBAAA,CAAC,CAAC;AAEH,gBAAA,UAAU,IAAI,SAAS,GAAG,CAAC,CAAC;AAC5B,gBAAA,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,aAAA;YACD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC;YACnC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;AACtC,SAAA;AAED,QAAA,OAAO,OAAO,CAAC;KAChB,CAAA;IACH,OAAC,uBAAA,CAAA;AAAD,CAAC,EAAA,CAAA,CAAA;AAEK,SAAU,2BAA2B,CAAE,IAAiB,EAAA;IAC5D,IAAM,GAAG,GAAG,IAAI,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACjD,IAAA,IAAM,UAAU,GAAG,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpH,OAAO;QACL,UAAU,EAAEK,yBAAiB,CAAC,UAAU;QACxC,IAAI,EAAE,GAAG,CAAC,MAAM;AAChB,QAAA,MAAM,EAAE,GAAG,CAAC,aAAa,KAAK,CAAC,GAAG,SAAS,CAAC,gBAAgB,GAAG,SAAS,CAAC,UAAU;QACnF,cAAc,EAAE,GAAG,CAAC,gBAAgB;QACpC,MAAM,EAAE,GAAG,CAAC,QAAQ;AACpB,QAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;KACjC,CAAC;AACJ;;ACrHA,IAAM,WAAW,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAE5C,IAAA,kBAAA,kBAAA,YAAA;AAGE,IAAA,SAAA,kBAAA,GAAA;AACE,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KACzB;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,UAAuB,QAAgB,EAAE,GAAgB,EAAA;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,OAAO,EAAA;YAC/C,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAErE,OAAO,cAAc,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;SACtD,CAAC,CAAC,CAAC;KACL,CAAA;IAED,kBAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,GAAqC,EAAA;AACnD,QAAA,OAAO,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;KACzC,CAAA;IAED,kBAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAoB,GAAW,EAAA;QAC7B,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;KAC3D,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,oBAAoB,GAApB,UAAsB,MAAuC,EAAE,IAAa,EAAA;QAC1E,IAAI,IAAI,GAAG,MAAc,CAAC;AAE1B,QAAA,IAAI,EAAE,MAAM,YAAY,IAAI,CAAC,EAAE;AAC7B,YAAA,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;AAC1D,SAAA;AACD,QAAA,IAAII,sBAAoB,EAAE;AACxB,YAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;QACD,IAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAEtC,OAAO,cAAc,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;KACjD,CAAA;IAED,kBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,OAAgB,EAAA;AACjC,QAAA,IAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;AAExC,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAEvB,IAAI,IAAI,KAAKJ,yBAAiB,CAAC,UAAU,IAAI,IAAI,KAAKA,yBAAiB,CAAC,KAAK,EAAE;AAC7E,gBAAA,IAAK,IAAqC,CAAC,MAAM,KAAK,SAAS,CAAC,gBAAgB,EAAE;AAChF,oBAAA,OAAO,KAAK,CAAE,IAAqC,CAAC,GAAG,CAAC,CAAC;AAC1D,iBAAA;gBAED,OAAO,KAAK,CAAE,IAAmC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC9D,aAAA;AACD,YAAA,IAAI,IAAI,KAAKA,yBAAiB,CAAC,OAAO,EAAE;gBACtC,IAAK,IAAkD,CAAC,GAAG,EAAE;AAC3D,oBAAA,OAAQ,IAAkD,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/E,iBAAA;AACD,gBAAA,IAAK,IAA4C,CAAC,MAAM,KAAK,SAAS,CAAC,gBAAgB,EAAE;AACvF,oBAAA,OAAQ,IAA4C,CAAC,IAAI,CAAC,KAAK,CAAC,UAAA,GAAG,EAAI,EAAA,OAAA,KAAK,CAAC,GAAG,CAAC,CAAV,EAAU,CAAC,CAAC;AACpF,iBAAA;AAED,gBAAA,OAAQ,IAA0C,CAAC,IAAI,CAAC,KAAK,CAAC,UAAA,GAAG,EAAA,EAAI,OAAA,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAhB,EAAgB,CAAC,CAAC;AACxF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,eAAe,GAAf,UAAiB,UAAoC,EAAE,MAA6B,EAAA;QAApF,IA4GC,KAAA,GAAA,IAAA,CAAA;;AA1GC,QAAA,IAAK,UAA2C,CAAC,MAAM,KAAK,SAAS,CAAC,gBAAgB,IAAI,UAAU,CAAC,IAAI,KAAKA,yBAAiB,CAAC,OAAO,EAAE;AACvI,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAE,UAA2C,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,EAAA;AACjG,gBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;oBAC/B,UAAU,EAAEA,yBAAiB,CAAC,KAAK;AACnC,oBAAA,IAAI,EAAA,IAAA;AACJ,oBAAA,UAAU,EAAE;wBACV,IAAI,EAAEA,yBAAiB,CAAC,KAAK;wBAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAG,UAA2C,CAAC,GAAG,CAAC;wBACxE,MAAM,EAAE,SAAS,CAAC,gBAAgB;AACnC,qBAAA;oBACD,MAAM,EAAE,SAAS,CAAC,gBAAgB;AACnC,iBAAA,CAAuB,CAAC;aAC1B,EAAE,UAAU,CAAC,CAAC;AAChB,SAAA;AAAM,aAAA,IAAI,UAAU,CAAC,IAAI,KAAKA,yBAAiB,CAAC,KAAK,EAAE;;YAEtD,OAAO,IAAI,CAAC,cAAc,CAAE,UAAyC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAA,KAAK,EAAA,EAAI,OAAA,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;AACjH,gBAAA,KAAK,EAAA,KAAA;gBACL,UAAU,EAAEA,yBAAiB,CAAC,KAAK;AACnC,gBAAA,UAAU,EAAE;oBACV,GAAG,EAAG,UAAyC,CAAC,GAAG;oBACnD,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,MAAM,EAAE,SAAS,CAAC,UAAU;AAC7B,iBAAA;AACF,aAAA,CAAqB,CARmE,EAQnE,EAAE,UAAU,CAAC,CAAC;AACrC,SAAA;AAAM,aAAA,IAAI,UAAU,CAAC,IAAI,KAAKA,yBAAiB,CAAC,KAAK,EAAE;YACtD,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAA,KAAK,EAAI,EAAA,OAAA,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;AACpF,gBAAA,KAAK,EAAA,KAAA;gBACL,UAAU,EAAEA,yBAAiB,CAAC,KAAK;AACpC,aAAA,CAAqB,CAHsC,EAGtC,EAAE,UAAU,CAAC,CAAC;AACrC,SAAA;AAAM,aAAA,IAAI,UAAU,CAAC,IAAI,KAAKA,yBAAiB,CAAC,UAAU,EAAE;AAC3D,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,WAAwB,EAAA;gBACpF,OAAO,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE;AACrE,oBAAA,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,EAAEA,yBAAiB,CAAC,UAAU,EAAE;AACxE,iBAAA,CAAC,CAAC;aACJ,EAAE,UAAU,CAAC,CAAC;AAChB,SAAA;AAAM,aAAA,IAAI,UAAU,CAAC,IAAI,KAAKA,yBAAiB,CAAC,OAAO,EAAE;AACxD,YAAA,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YAEjC,IAAK,UAAwD,CAAC,GAAG,EAAE;gBACjE,OAAO,YAAY,CAAE,UAAwD,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;qBAChH,IAAI,CAAC,UAAC,IAAiB,EAAA;AACtB,oBAAA,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,gBAAgB,EAAE;wBACpD,IAAM,MAAM,GAAG,UAAuD,CAAC;wBAEvE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,OAAO,EAAA,EAAI,OAAA,KAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAzC,EAAyC,CAAC,CAAC,CAAC;AAC9F,qBAAA;AAAM,yBAAA;wBACL,IAAM,MAAM,GAAG,UAAqD,CAAC;wBAErE,OAAO,KAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACzD,qBAAA;AACH,iBAAC,CAAC,CAAC,IAAI,CAAC,UAAU,OAAO,EAAA;oBACvB,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,CAAC;AACzD,oBAAA,IAAM,aAAa,GAAI,UAAwD,CAAC,OAAO,CAAC;AACxF,oBAAA,IAAM,MAAM,GAAG;AACb,wBAAA,OAAO,EAAA,OAAA;AACP,wBAAA,MAAM,EAAA,MAAA;wBACN,UAAU,EAAEA,yBAAiB,CAAC,OAAO;AACrC,wBAAA,UAAU,EAAE;4BACV,GAAG,EAAG,UAAwD,CAAC,GAAG;AAClE,4BAAA,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,KAAK,EAAE,CAAA,EAAA,CAAC;AACpG,4BAAA,MAAM,EAAA,MAAA;4BACN,IAAI,EAAEA,yBAAiB,CAAC,OAAO;AAChC,yBAAA;qBACgB,CAAC;oBAEpB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3C,iBAAC,CAAC,CAAC;AACN,aAAA;YACD,IAAI,MAAM,KAAK,SAAS,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE;AAC9C,gBAAA,IAAM,MAAI,GAAI,UAAgD,CAAC,IAAI,CAAC;gBAEpE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAI,CAAC,GAAG,CAAC,UAAA,GAAG,EAAA,EAAI,OAAA,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAxB,EAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,OAAO,EAAA;AACxE,oBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;wBAC/B,MAAM,EAAE,SAAS,CAAC,UAAU;wBAC5B,UAAU,EAAEA,yBAAiB,CAAC,OAAO;AACrC,wBAAA,OAAO,EAAA,OAAA;AACP,wBAAA,UAAU,EAAE;4BACV,IAAI,EAAE,UAAU,CAAC,IAAI;AACrB,4BAAA,IAAI,EAAE,MAAI,CAAC,KAAK,EAAE;4BAClB,MAAM,EAAE,SAAS,CAAC,UAAU;AAC7B,yBAAA;AACF,qBAAA,CAAqB,CAAC;iBACxB,EAAE,UAAU,CAAC,CAAC;AAChB,aAAA;AAAM,iBAAA,IAAI,MAAM,KAAK,SAAS,CAAC,gBAAgB,EAAE;AAChD,gBAAA,IAAM,IAAI,GAAI,UAAkD,CAAC,IAAI,CAAC;gBAEtE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,EAAA,EAAI,OAAA,KAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAA3B,EAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,UAAA,OAAO,EAAA;AAC3E,oBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;wBAC/B,UAAU,EAAEA,yBAAiB,CAAC,OAAO;wBACrC,MAAM,EAAE,SAAS,CAAC,gBAAgB;AAClC,wBAAA,OAAO,EAAA,OAAA;AACP,wBAAA,UAAU,EAAE;4BACV,MAAM,EAAE,SAAS,CAAC,gBAAgB;4BAClC,IAAI,EAAE,UAAU,CAAC,IAAI;4BACrB,IAAI,EAAG,UAAkD,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,EAAA,EAAI,OAAA,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAtB,EAAsB,CAAC;AAClG,yBAAA;AACF,qBAAA,CAAuB,CAAC;iBAC1B,EAAE,UAAU,CAAC,CAAC;AAChB,aAAA;AACF,SAAA;AAED,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAE7E,SAAS,UAAU,CAAE,KAAY,EAAA;YAC/B,MAAM,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;SACnD;KACF,CAAA;IAED,kBAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,GAAkC,EAAA;QAIjD,IAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAE9C,QAAA,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAC3C,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;AACd,YAAA,KAAK,CAAC,SAAS,GAAG,GAAoB,CAAC;AACxC,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,CAAC,GAAG,GAAG,GAAa,CAAC;AAC3B,SAAA;AACD,QAAA,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;AAChC,QAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;AACnB,QAAA,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AACjD,QAAA,IAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAEvB,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAA,EAAM,OAAA,KAAK,GAAA,CAAC,GAAG,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,EAAA;AACpE,YAAA,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,CAAC,GAAA;gBAC7C,OAAO,CAAC,KAAK,CAAC,CAAC;AACf,gBAAA,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;aAC5C,EAAE,IAAI,CAAC,CAAC;AACT,YAAA,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,EAAA;gBACzC,MAAM,CAAC,CAAC,CAAC,CAAC;AACZ,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ,CAAA;IAED,kBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,GAAuC,EAAA;QAA1D,IAEC,KAAA,GAAA,IAAA,CAAA;QADC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,UAAA,GAAG,EAAA,EAAI,OAAA,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAxB,EAAwB,CAAC,CAAmC,CAAC;KAChG,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,oCAAoC,GAApC,UAAsC,WAAwB,EAAE,OAAwB,EAAA;QACtF,OAAO,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;KACzE,CAAA;IAED,kBAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAoB,OAAgB,EAAA;QAApC,IAoBC,KAAA,GAAA,IAAA,CAAA;AAnBC,QAAA,IAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACtB,IAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAEjC,QAAA,IAAI,CAAC,EAAE;AACL,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE;YAC9B,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,UAAsC,CAAC,CAAC,IAAI,CAAC,UAAA,GAAG,EAAA;AACnH,gBAAA,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1B,gBAAA,OAAO,KAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAE9B,gBAAA,OAAO,OAAO,CAAC;AACjB,aAAC,CAAC,CAAC,KAAK,CAAC,UAAA,EAAE,EAAA;AACT,gBAAA,OAAO,KAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC9B,gBAAA,MAAM,EAAE,CAAC;AACX,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;KACzC,CAAA;IAEH,OAAC,kBAAA,CAAA;AAAD,CAAC,EAAA,EAAA;AAED,IAAI,CAAiB,CAAC;SAEN,wBAAwB,GAAA;IACtC,IAAI,CAAC,CAAC,EAAE;AACN,QAAA,CAAC,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC9B,KAAA;AAED,IAAA,OAAO,CAAC,CAAC;AACX,CAAC;AAEK,SAAU,wBAAwB,CAAE,OAAuB,EAAA;IAC/D,CAAC,GAAG,OAAO,CAAC;AACd;;AChQM,SAAU,gBAAgB,CAAE,GAAQ,EAAA;AACxC,IAAA,IAAII,sBAAoB,EAAE;QACxB,IAAI,GAAG,YAAY,WAAW,EAAE;YAC9B,GAAG,CAAC,KAAK,EAAE,CAAC;AACb,SAAA;aAAM,IAAI,GAAG,YAAY,KAAK,EAAE;AAC/B,YAAA,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC/B,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;AACrB,YAAA,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;AAChC,SAAA;AACF,KAAA;AACH,CAAC;AAED,IAAIE,MAAI,GAAG,CAAC,CAAC;AAEb,IAAA,WAAA,kBAAA,YAAA;IAeE,SAAa,WAAA,CAAA,OAAmC,EAAE,QAAuB,EAAA;QANjE,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;AAO3B,QAAA,IAAI,CAAC,EAAE,GAAG,KAAK,GAAGA,MAAI,EAAE,CAAC;QAEzB,IAAI,OAAO,YAAY,SAAS,EAAE;YAChC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAA+B,CAAC;AAClE,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAoC,CAAC;YAC5D,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,MAAM,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACpD,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AAChB,SAAA;AAAM,aAAA;YACL,IAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAEvC,YAAA,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAA+B,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;YACnB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;AAC/B,YAAA,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC/B,aAAA;AACF,SAAA;KACF;AA1BD,IAAA,MAAA,CAAA,cAAA,CAAI,WAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;AAAA,KAAA,CAAA,CAAA;IA0BD,WAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,OAAuB,EAAA;AACnC,QAAA,IAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YACxB,SAAS,EAAE,SAAS,CAAC,OAAO;YAC5B,SAAS,EAAE,SAAS,CAAC,OAAO;YAC5B,KAAK,EAAE,SAAS,CAAC,aAAa;YAC9B,KAAK,EAAE,SAAS,CAAC,aAAa;AAC9B,YAAA,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU;YAC9C,MAAM,EAAE,SAAS,CAAC,IAAI;AACtB,YAAA,cAAc,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI;YAChD,IAAI,EAAE,SAAS,CAAC,aAAa;SAC9B,EAAE,OAAO,CAAmB,CAAC;AAE9B,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;YACnB,IAAK,GAAmC,CAAC,KAAK,EAAE;AAC7C,gBAAA,GAAmC,CAAC,UAAU,GAAGN,yBAAiB,CAAC,KAAK,CAAC;AAC3E,aAAA;iBAAM,IAAK,GAAkC,CAAC,IAAI,EAAE;AAClD,gBAAA,GAAkC,CAAC,UAAU,GAAGA,yBAAiB,CAAC,IAAI,CAAC;AACzE,aAAA;iBAAM,IAAK,GAAmC,CAAC,KAAK,EAAE;AACpD,gBAAA,GAAmC,CAAC,UAAU,GAAGA,yBAAiB,CAAC,KAAK,CAAC;AAC3E,aAAA;AAAM,iBAAA;AACJ,gBAAA,GAAkC,CAAC,UAAU,GAAGA,yBAAiB,CAAC,IAAI,CAAC;AACzE,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;AACnB,YAAA,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACpC,SAAA;AAED,QAAA,OAAO,GAAgC,CAAC;KACzC,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,WAAK,CAAA,SAAA,EAAA,OAAA,EAAA;AAAT,QAAA,GAAA,EAAA,YAAA;;YACE,OAAO,CAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,KAAI,CAAC,CAAC;SAClC;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,WAAM,CAAA,SAAA,EAAA,QAAA,EAAA;AAAV,QAAA,GAAA,EAAA,YAAA;;YACE,OAAO,CAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,CAAC;SACnC;;;AAAA,KAAA,CAAA,CAAA;IAED,WAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,QAAsB,EAAA;;AAEpC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAExC,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAED,WAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,QAAuB,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAM,MAAM,GAAG,IAAI,CAAC,OAAyB,CAAC;;YAG9C,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACnD,YAAA,IAAM,kBAAkB,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC;AAEnD,YAAA,IAAI,MAAM,CAAC,UAAU,KAAKA,yBAAiB,CAAC,KAAK,EAAE;AACjD,gBAAA,IAAI,kBAAkB,EAAE;AACtB,oBAAA,gBAAgB,CAAE,MAAsC,CAAC,KAAK,CAAC,CAAC;AAChE,oBAAA,gBAAgB,CAAE,MAAwC,CAAC,IAAI,CAAC,CAAC;AAClE,iBAAA;;gBAED,OAAQ,MAAsC,CAAC,KAAK,CAAC;;gBAErD,OAAQ,MAAwC,CAAC,IAAI,CAAC;AACvD,aAAA;AAAM,iBAAA,IAAI,MAAM,CAAC,UAAU,KAAKA,yBAAiB,CAAC,IAAI,EAAE;;gBAEvD,OAAQ,MAAqC,CAAC,IAAI,CAAC;AACpD,aAAA;AAAM,iBAAA,IAAI,MAAM,CAAC,UAAU,KAAKA,yBAAiB,CAAC,UAAU,EAAE;;gBAE7D,OAAO,MAAM,CAAC,OAAO,CAAC;AACvB,aAAA;AAAM,iBAAA,IAAI,MAAM,CAAC,UAAU,KAAKA,yBAAiB,CAAC,OAAO,EAAE;;gBAE1D,OAAO,MAAM,CAAC,OAAO,CAAC;AACtB,gBAAA,IAAI,kBAAkB,EAAE;AACtB,oBAAA,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAClC,iBAAA;AACF,aAAA;AACF,SAAA;KACF,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,uBAAuB,GAAvB,YAAA;AACE,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAKA,yBAAiB,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC9F,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,EAAEA,yBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAyB,EAAE,CAAC,CAAC;AAE7G,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;;QACE,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;;YAEzB,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;AACjD,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,mBAAmB,CAAC;KAC5C,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,eAAe,GAAf,YAAA;QACE,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,OAAO,wBAAwB,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC5D,SAAA;AAED,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9B,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;;QACE,IAAI,IAAI,CAAC,QAAQ,IAAI,wBAAwB,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;AACvE,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACxB,SAAA;KACF,CAAA;IAED,WAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,OAA6B,EAAA;;;AAEzC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;;QAE1E,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7C,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC,IAAI,CAAC,OAA+B,CAAC,CAAC;KAC7D,CAAA;IAEH,OAAC,WAAA,CAAA;AAAD,CAAC,EAAA;;AC7KD,IAAA,6BAAA,kBAAA,YAAA;AAYE,IAAA,SAAA,6BAAA,CAAa,OAA6C,EAAA;AALjD,QAAA,IAAA,CAAA,WAAW,GAAGF,uCAA+B,CAAC,KAAK,CAAC;AAM3D,QAAA,IAAI,OAAO,CAAC,OAAO,YAAY,WAAW,EAAE;AAC1C,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AAC/B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC7B,SAAA;aAAM,IAAI,OAAO,CAAC,OAAO,EAAE;AAC1B,YAAA,IAAM,MAAM,GAAG,OAAO,CAAC,OAAkD,CAAC;AAE1E,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,cAAc,GAAG;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,gBAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI;AACvC,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,aAAa;gBAC5C,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI;gBACxE,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,KAAK,CAAC,mCAAmC,CAAC,CAAC;AAClD,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;AA5BD,IAAA,MAAA,CAAA,cAAA,CAAI,6BAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;AAAA,KAAA,CAAA,CAAA;AA4BD,IAAA,MAAA,CAAA,cAAA,CAAI,6BAAI,CAAA,SAAA,EAAA,MAAA,EAAA;AAAR,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,IAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YAEzB,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/C;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,6BAAK,CAAA,SAAA,EAAA,OAAA,EAAA;AAAT,QAAA,GAAA,EAAA,YAAA;;YACE,OAAO,CAAA,MAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,KAAI,CAAC,CAAC;SACjC;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,6BAAM,CAAA,SAAA,EAAA,QAAA,EAAA;AAAV,QAAA,GAAA,EAAA,YAAA;;YACE,OAAO,CAAA,MAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,CAAC;SAClC;;;AAAA,KAAA,CAAA,CAAA;IAED,6BAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,QAAsB,EAAA;QACpC,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAM,IAAI,GAA2B,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEnG,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CACzB,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,cAAc,KACtB,UAAU,EAAEE,yBAAiB,CAAC,WAAW,EACzC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IACzC,CAAC;AACJ,SAAA;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACvC,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAClF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED,IAAA,6BAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;;AACE,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,mBAAoF,CAAC;AAC3G,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B,CAAA;IAEH,OAAC,6BAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACrED,IAAIM,MAAI,GAAG,CAAC,CAAC;AAEb,IAAA,cAAA,kBAAA,YAAA;IAqCE,SAAa,cAAA,CAAA,OAA0B,EAAE,QAAuB,EAAA;;QAvBxD,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;AAwB3B,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,iBAAiB,GAAGA,MAAI,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAIP,2BAAmB,CAAC,SAAS,CAAC;AACpE,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,MAAoB,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;QAC3D,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAA,MAAA,OAAO,CAAC,sBAAsB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,KAAID,uCAA+B,CAAC,IAAI,CAAC;AAC5G,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAClC,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC/B,SAAA;QACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;AACvC,QAAA,IAAM,cAAc,GAA0B;YAC5C,WAAW,EAAED,0BAAkB,CAAC,KAAK;YACrC,WAAW,EAAEA,0BAAkB,CAAC,KAAK;YACrC,aAAa,EAAEA,0BAAkB,CAAC,KAAK;SACxC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;KACvE;AAxCD,IAAA,MAAA,CAAA,cAAA,CAAI,cAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,cAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;;YACE,OAAO,CAAA,MAAA,IAAI,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,KAAI,CAAC,CAAC;SAC3C;;;AAAA,KAAA,CAAA,CAAA;AACD,IAAA,MAAA,CAAA,cAAA,CAAI,cAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;AAAA,KAAA,CAAA,CAAA;AAiCD,IAAA,MAAA,CAAA,cAAA,CAAI,cAAQ,CAAA,SAAA,EAAA,UAAA,EAAA;AAAZ,QAAA,GAAA,EAAA,YAAA;;AACE,YAAA,IAAM,GAAG,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,KAAI,IAAI,CAAC,eAAe,CAAC;AAE/D,YAAA,IAAI,GAAG,EAAE;AACP,gBAAA,OAAO,GAAG,CAAC;AACZ,aAAA;AACD,YAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;AAE9B,YAAA,OAAO,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,EAAE,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACpF;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,cAAiB,CAAA,SAAA,EAAA,mBAAA,EAAA;AAArB,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAErC,YAAA,IAAI,WAAW,EAAE;gBACf,OAAO;oBACL,WAAW,EAAE,WAAW,CAAC,uBAAuB;oBAChD,OAAO,EAAE,WAAW,CAAC,cAAyC;oBAC9D,OAAO,EAAE,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,eAAe,CAAC,GAAG,SAAS;iBACnI,CAAC;AACH,aAAA;SACF;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,cAAe,CAAA,SAAA,EAAA,iBAAA,EAAA;AAAnB,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAErC,YAAA,IAAI,WAAW,EAAE;gBACf,OAAO;oBACL,WAAW,EAAE,WAAW,CAAC,uBAAuB;oBAChD,OAAO,EAAE,WAAW,CAAC,YAAuC;oBAC5D,OAAO,EAAE,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,eAAe,CAAC,GAAG,SAAS;iBAC7H,CAAC;AACH,aAAA;SACF;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,cAAA,CAAA,SAAA,CAAA,IAAI,GAAJ,YAAA;QACE,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACzB,SAAA;AAAM,aAAA;YACL,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAE3C,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEzB,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,SAAA;KACF,CAAA;AAEO,IAAA,cAAA,CAAA,SAAA,CAAA,gBAAgB,GAAxB,UAA0B,OAAkB,EAAE,QAAiB,EAAA;;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAsB,CAAC;AAC3E,YAAA,IAAM,GAAG,GAAG,OAAO,MAAK,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,QAAQ,CAAA,GAAG,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE5F,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;AAC1B,aAAA;AAED,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;QAED,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B,CAAA;AAEO,IAAA,cAAA,CAAA,SAAA,CAAA,kBAAkB,GAA1B,UAA4B,OAAkB,EAAE,QAAiB,EAAA;;AAC/D,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAsB,CAAC;AAC3E,YAAA,IAAM,GAAG,GAAG,OAAO,MAAK,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,QAAQ,CAAA,GAAG,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE5F,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;AAC5B,aAAA;AAED,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;QAED,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B,CAAA;IAEO,cAAmB,CAAA,SAAA,CAAA,mBAAA,GAA3B,UAA6B,OAAoC,EAAA;QAC/D,IAAI,OAAO,CAAC,QAAQ,EAAE;AACpB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAA0D,CAAC;YAC7G,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;AAEhC,gBAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBACzC,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACrD,aAAA;AACF,SAAA;KACF,CAAA;IAED,cAAqB,CAAA,SAAA,CAAA,qBAAA,GAArB,UAAuB,MAAqB,EAAA;QAA5C,IAoBC,KAAA,GAAA,IAAA,CAAA;AAnBC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5C,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC,EAAA,EAAI,QAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAC,EAAA,CAAC,EAAE,CAAC,CAAC;AAC3E,SAAA;AAAM,aAAA;AACL,YAAA,IAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,UAAA,OAAO,EAAA;gBACpC,OAAO,CAAC,YAAY,CAAC,EAAE,UAAU,EAAEG,yBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC;AAEpE,gBAAA,OAAO,IAAI,6BAA6B,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,KAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/F,aAAC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,OAAO,EAAE,CAAA,EAAA,CAAC,CAAC;AACxE,YAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;YAChC,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK,EAAI,EAAA,OAAA,KAAK,CAAC,QAAqB,GAAA,CAAC,CAAC,CAAC;AACvF,aAAA;AACF,SAAA;KACF,CAAA;IAED,cAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAkB,OAAoC,EAAA;AACpD,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;;AAGzB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,GAAG,CAAC;KACZ,CAAA;AAEO,IAAA,cAAA,CAAA,SAAA,CAAA,iBAAiB,GAAzB,YAAA;;AACE,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAE7B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,OAAO,EAAE,CAAA,EAAA,CAAC,CAAC;AACxE,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7B,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,EAAE,sBAAsB,EAAEL,uCAA+B,CAAC,YAAY,EAAE,CAAC,CAAC;;AAEpG,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACzB,SAAA;AACD,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;;AAE9B,QAAA,IAAM,QAAQ,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,EAAE,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,CAAS,CAAC;AAE7H,QAAA,IAAM,IAAI,GAA2B,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAEvB,QAAA,IAAI,MAAA,OAAO,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;YAC/B,IAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,KAAK,EAAA;;AAC9D,gBAAA,OAAO,IAAI,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC;AACrD,oBAAA,IAAI,EAAA,IAAA;AACJ,oBAAA,IAAI,EAAE,CAAA,CAAA,EAAA,GAAA,GAAG,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,KAAI,EAAA,CAAA,MAAA,CAAG,IAAI,EAAA,UAAA,CAAA,CAAA,MAAA,CAAW,KAAK,CAAE;iBACrD,EAAE,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACpC,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;AAChC,YAAA,IAAM,WAAW,GAAG,IAAI,aAAa,CAAC;gBACpC,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,gBAAA,IAAI,EAAA,IAAA;AACJ,gBAAA,QAAQ,EAAA,QAAA;gBACR,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;AACxC,gBAAA,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,UAAA,GAAG,EAAI,EAAA,OAAA,CAAC,GAAG,CAAC,OAAO,EAAE,QAAqB,CAAA,EAAA,CAAC;gBACxE,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,IAAI,EAAE,WAAW,EAAEG,uCAA+B,CAAC,IAAI,EAAE;AAChH,aAAA,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEtB,WAAW,CAAC,IAAI,EAAE,CAAC;YACnB,WAAW,CAAC,MAAM,EAAE,CAAC;;AAErB,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAChC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,SAAA;KACF,CAAA;AAED,IAAA,cAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;QACE,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAE3C,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;AAC3B,SAAA;AAAM,aAAA;YACL,KAAK,CAAC,qBAAqB,EAAE,CAAC;AAC/B,SAAA;KACF,CAAA;IAED,cAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,QAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;AAElB,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAED,cAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAS,OAAkC,EAAA;;AACzC,QAAA,IAAM,iBAAiB,GAAG,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,KAAI,SAAS,CAAC;AAEvD,QAAA,IAAI,iBAAiB,KAAKJ,sBAAc,CAAC,IAAI,EAAE;AAC7C,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAA,IAAI,EAAA;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAClC,aAAC,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvB,IAAM,QAAQ,GAAG,CAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,eAAe,IAAG,OAAO,CAAC,eAAe,GAAGC,uCAA+B,CAAC,KAAK,CAAC;AAE5G,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAA,GAAG,EAAA;AAC3B,YAAA,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,QAAQ,KAAKA,uCAA+B,CAAC,YAAY,KAAK,QAAQ,KAAKA,uCAA+B,CAAC,IAAI,CAAC;YAErJ,IAAI,CAAC,IAAI,EAAE;gBACT,GAAG,CAAC,OAAO,EAAE,CAAC;AACf,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,SAAS,MAAKD,sBAAc,CAAC,IAAI,EAAE;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC1B,SAAA;QAED,IAAM,eAAe,GAAG,CAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,sBAAsB,IAAG,OAAO,CAAC,sBAAsB,GAAGC,uCAA+B,CAAC,KAAK,CAAC;AACjI,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;AAE7B,QAAA,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,OAAO,CAAC,EAAE,sBAAsB,EAAE,eAAe,EAAE,CAAC,CAAC;AACzD,YAAA,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,eAAe,KAAKA,uCAA+B,CAAC,YAAY,KAAK,eAAe,KAAKA,uCAA+B,CAAC,IAAI,CAAC;YAEnK,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;AAChC,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;AAC/B,aAAA;AACF,SAAA;;QAGD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,mBAAqE,CAAC;AAC5F,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B,CAAA;IAED,cAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAS,IAAc,EAAA;QACrB,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;KAClD,CAAA;IAED,cAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAY,IAAc,EAAA;AACxB,QAAA,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC9B,CAAA;IAED,cAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAW,MAAkB,EAAA;;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACvB,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,EAAC,MAAM,CAAA,KAAA,CAAA,EAAA,EAAA,aAAA,CAAA,CAAC,CAAC,EAAE,CAAC,CAAA,EAAK,MAAM,EAAE,KAAA,CAAA,CAAA,CAAA;QAEpC,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;KACjD,CAAA;IACH,OAAC,cAAA,CAAA;AAAD,CAAC,EAAA;;AC1VD,IAAA,UAAA,kBAAA,YAAA;IAUE,SAAa,UAAA,CAAA,QAAuB,EAAE,QAAsB,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;AAC5C,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;;AACE,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACvC,QAAA,IAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;;QAGjC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,wBAAwB,EAAE,YAAY,CAAC,qBAAqB,CAAC,CAAC;QAC1F,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1D,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAChE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;QACpE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC;QACrE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACjF,IAAI,YAAY,CAAC,WAAW,EAAE;;YAE5B,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,eAAyB,CAAC,CAAC;YACvF,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,gBAA0B,CAAC,CAAC;AACzF,YAAA,IAAM,eAAe,GAAG,YAAY,CAAC,eAAuB,CAAC;YAE7D,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3G,YAAA,IAAM,gBAAgB,GAAG,YAAY,CAAC,gBAAwB,CAAC;YAE/D,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/G,YAAA,IAAM,aAAa,GAAG,YAAY,CAAC,aAAqB,CAAC;YAEzD,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,YAAA,IAAM,cAAc,GAAG,YAAY,CAAC,cAAsB,CAAC;YAE3D,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AACxG,SAAA;QAED,IAAI,YAAY,CAAC,QAAQ,EAAE;;AAEzB,YAAA,IAAM,UAAU,GAAG,YAAY,CAAC,UAAkB,CAAC;YAEnD,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAClF,UAAU,CAAC,qBAAqB,CAAC,YAAY,CAAC,gBAA0B,EAAE,YAAY,CAAC,kBAA4B,CAAC,CAAC;AACrH,YAAA,UAAU,CAAC,iBAAiB,CAAC,YAAY,CAAC,QAAkB,EAAE,YAAY,CAAC,QAAkB,EAAE,YAAY,CAAC,aAAuB,EAAE,YAAY,CAAC,aAAuB,CAAC,CAAC;AAC5K,SAAA;;AAGD,QAAA,IAAM,SAAS,GAAG,YAAY,CAAC,SAA6D,CAAC;QAE7F,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,IAAI,YAAY,CAAC,SAAS,EAAE;AAC1B,YAAA,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,SAAoB,CAAC,CAAC;AACxD,YAAA,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,SAAmB,CAAC,CAAC;AACvD,YAAA,UAAU,CAAC,UAAU,CAAC,MAAA,YAAY,CAAC,UAAU,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAW,EAAE,CAAA,EAAA,GAAA,YAAY,CAAC,UAAU,0CAAG,CAAC,CAAW,CAAC,CAAC;AACvG,SAAA;QAED,IAAI,YAAY,CAAC,eAAe,EAAE;;AAEhC,YAAA,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAkB,CAAC,CAAC;AACrD,YAAA,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,SAAmB,CAAC,CAAC;AACxD,SAAA;QAED,IAAI,YAAY,CAAC,iBAAiB,EAAE;YAClC,IAAM,aAAa,GAAG,YAAY,CAAC,aAAa,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3D,YAAA,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,SAAA;;KAIF,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,UAAU,GAAV,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACnE,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;;QACE,IAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC;AAEzC,QAAA,IAAI,GAAG,EAAE;YACP,IAAM,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAEvD,YAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5B,gBAAA,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACtC,aAAA;AACF,SAAA;;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB,CAAA;IACH,OAAC,UAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC3FD,SAAS,eAAe,CAAE,KAAmB,EAAA;AAC3C,IAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAO,KAAa,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,oBAAoB,CAAE,KAAmB,EAAA;AAChD,IAAA,OAAO,CAAC,KAAK,MAAO,KAAuB,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,eAAe,CAAE,KAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;AACpH,CAAC;AAED,IAAA,qBAAA,kBAAA,YAAA;IAaE,SAAa,qBAAA,CAAA,KAA2D,EAAE,QAAuB,EAAA;QAAjG,IAkBC,KAAA,GAAA,IAAA,CAAA;QAtBS,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;AAK7B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,cAAc,CAAC;AACzC,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC5C,SAAA;QACD,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,UAAC,GAAG,EAAE,IAAI,EAAG,EAAA,OAAA,KAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAkB,CAAC,CAAA,EAAA,CAAC,CAAC;AAC9F,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC/B,SAAA;KACF;AAED,IAAA,qBAAA,CAAA,SAAA,CAAA,2BAA2B,GAA3B,UAA6B,KAAkC,EAAE,QAAuB,EAAA;AACtF,QAAA,IAAI,QAAQ,EAAE;YACZ,IAAM,MAAM,GAAG,UAAC,KAAkB,IAAK,OAAA,KAAK,CAAC,KAAK,CAAC,IAAK,KAAa,CAAC,cAAc,IAAK,KAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAxF,EAAwF,CAAC;YAEhI,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,gBAAA,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACvB,aAAA;AAAM,iBAAA;gBACL,MAAM,CAAC,KAAK,CAAC,CAAC;AACf,aAAA;AACF,SAAA;KACF,CAAA;AAED,IAAA,qBAAA,CAAA,SAAA,CAAA,eAAe,GAAf,YAAA;AACE,QAAA,IAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;AAC7B,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAEvC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,EAAE,GAAG,EAAA;AAC7C,YAAA,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACd,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,SAAC,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,qBAAA,CAAA,SAAA,CAAA,UAAU,GAAV,YAAA;;AAEE,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KACzB,CAAA;AAED,IAAA,qBAAA,CAAA,SAAA,CAAA,OAAO,GAAP,UAAS,aAAqB,EAAE,IAAY,EAAA;QAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;KAC1C,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,qBAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,qBAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,UAAmB,WAAmB,EAAE,OAAgD,EAAA;AACtF,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;YAC7C,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;AAC1C,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;AAC1C,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;AAC1C,SAAA;KACF,CAAA;IAED,qBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmE,WAAmB,EAAA;AACpF,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAiB,CAAC;KAC3D,CAAA;IAED,qBAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,QAAsB,EAAA;QAAtC,IAcC,KAAA,GAAA,IAAA,CAAA;QAbC,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE;AAC/C,YAAA,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC1C,SAAA;AACD,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;AAE9B,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAEzB,YAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAA,KAAK,EAAA;AAClC,gBAAA,KAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACpD,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAED,qBAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,IAAsB,EAAA;QACrC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;YAC3E,IAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAE9F,YAAA,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AAClC,SAAA;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACnC,CAAA;IAED,qBAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,SAA6B,EAAA;AACzC,QAAA,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;KACxF,CAAA;AAED,IAAA,qBAAA,CAAA,SAAA,CAAA,oBAAoB,GAApB,UAAsB,IAAY,EAAE,KAAa,EAAE,KAAa,EAAA;QAC9D,IAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAE7C,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;YACnC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACjD,SAAA;AAAM,aAAA;YACL,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC;AACzD,YAAA,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpC,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AAC/C,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KACjC,CAAA;IAED,qBAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,IAAY,EAAA;QAC3B,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KACrC,CAAA;IAED,qBAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAS,OAAyC,EAAA;AAChD,QAAA,IAAI,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,QAAQ,MAAKD,sBAAc,CAAC,IAAI,EAAE;AAC7C,YAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAA,OAAO,EAAA;gBACpC,IAAI,OAAO,YAAY,WAAW,EAAE;oBAClC,OAAO,CAAC,OAAO,EAAE,CAAC;AACnB,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAA,GAAG,EAAA;YAC5B,IAAI,GAAG,KAAK,SAAS,EAAE;gBACrB,GAAG,CAAC,OAAO,EAAE,CAAC;AACf,aAAA;AACH,SAAC,CAAC,CAAC;;AAEH,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;;AAG1B,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;;AAExB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;;AAEzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;;AAE3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,mBAA4E,CAAC;AAEnG,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B,CAAA;IAED,qBAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,IAAY,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KAClC,CAAA;AAED,IAAA,qBAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,YAAA;QACE,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B,CAAA;AAED,IAAA,qBAAA,CAAA,SAAA,CAAA,eAAe,GAAf,UAAiB,IAAY,EAAE,KAA+B,EAAE,UAAoB,EAAA;QAApF,IAyDC,KAAA,GAAA,IAAA,CAAA;QAxDC,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,IAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAE9C,YAAA,IAAI,eAAe,CAAC,WAAW,CAAC,EAAE;AAChC,gBAAA,OAAO,CAAC,WAA4B,EAAE,UAAC,IAAI,EAAE,GAAG,EAAA;AAC9C,oBAAA,IAAM,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAEtC,oBAAA,OAAO,KAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;AAC5C,iBAAC,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA,IAAI,oBAAoB,CAAC,WAAW,CAAC,EAAE;AAC3C,gBAAA,WAA+B,CAAC,OAAO,CAAC,UAAC,SAAS,EAAE,CAAC,EAAA;AACpD,oBAAA,OAAO,CAAC,SAAS,EAAE,UAAC,aAA2B,EAAE,GAAG,EAAA;AAClD,wBAAA,IAAM,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEtD,wBAAA,OAAO,KAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;AAC5C,qBAAC,CAAC,CAAC;AACL,iBAAC,CAAC,CAAC;AACJ,aAAA;AACD,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACjC,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACnC,SAAA;aAAM,IAAI,KAAK,YAAY,WAAW,EAAE;AACvC,YAAA,MAAM,KAAK,CAAC,qCAAqC,GAAG,IAAI,CAAC,CAAC;AAC3D,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AACzC,YAAA,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE;AAC1B,gBAAA,OAAO,CAAC,KAAsB,EAAE,UAAC,IAAI,EAAE,GAAG,EAAA;AACxC,oBAAA,IAAM,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAEtC,oBAAA,KAAI,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;AACzC,oBAAA,KAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;AACxC,oBAAA,KAAI,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;AAC5C,iBAAC,CAAC,CAAC;;AAEH,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAClC,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAClC,aAAA;AAAM,iBAAA,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE;AACrC,gBAAA,KAAyB,CAAC,OAAO,CAAC,UAAC,SAAS,EAAE,CAAC,EAAA;AAC9C,oBAAA,OAAO,CAAC,SAAS,EAAE,UAAC,aAA2B,EAAE,GAAG,EAAA;AAClD,wBAAA,IAAM,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEtD,wBAAA,KAAI,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC;AAClD,wBAAA,KAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;AACxC,wBAAA,KAAI,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;AAC5C,qBAAC,CAAC,CAAC;AACL,iBAAC,CAAC,CAAC;;AAEH,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAClC,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAClC,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAClC,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAED,qBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAkB,GAAkC,EAAA;QAApD,IAIC,KAAA,GAAA,IAAA,CAAA;AAHC,QAAA,OAAO,CAAC,GAAG,EAAE,UAAC,GAAG,EAAE,GAAG,EAAA;AACpB,YAAA,KAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACjC,SAAC,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,qBAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,UAAoB,IAAY,EAAE,QAA4B,EAAA;AAC5D,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;AACxC,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACpC,SAAA;KACF,CAAA;IAED,qBAAK,CAAA,SAAA,CAAA,KAAA,GAAL,UAAO,IAAY,EAAA;QACjB,OAAO,IAAI,qBAAqB,CAAC;AAC/B,YAAA,IAAI,EAAA,IAAA;AACJ,YAAA,aAAa,EAAO,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,cAAc,CAAE;AACzC,YAAA,eAAe,EAAO,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,gBAAgB,CAAE;AAC7C,YAAA,gBAAgB,EAAO,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,gBAAgB,CAAE;YAC9C,WAAW,EAAE,IAAI,CAAC,YAAY;AAC/B,SAAA,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACnB,CAAA;IAEH,OAAC,qBAAA,CAAA;AAAD,CAAC,EAAA;;ACxQD,IAAIY,MAAI,GAAG,CAAC,CAAC;AAEb,IAAA,YAAA,kBAAA,YAAA;AAwBE,IAAA,SAAA,YAAA,CAAa,OAAwB,EAAA;QAd7B,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;AAe3B,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,UAAU,GAAGA,MAAI,EAAE,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,YAAY,qBAAqB,IAAI,CAAC,GAAG,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAvE,EAAuE,CAAC,CAAC;QAChI,IAAI,CAAC,UAAU,GAAA,CAAA,iCAA6B;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,qBAAqB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AACnE,SAAA;KACF;AAtBD,IAAA,MAAA,CAAA,cAAA,CAAI,YAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,YAAU,CAAA,SAAA,EAAA,YAAA,EAAA;AAAd,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,YAAgB,CAAA,SAAA,EAAA,kBAAA,EAAA;AAApB,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SAC5B;;;AAAA,KAAA,CAAA,CAAA;IAcD,YAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAsB,MAA4B,EAAA;AAChD,QAAA,IAAM,GAAG,GAAyB;AAChC,YAAA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;AAC3B,YAAA,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,qBAAqB;AACrD,YAAA,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS;AAC7B,YAAA,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW;AACjC,YAAA,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,eAAe;AACzC,YAAA,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,iBAAiB;SAC9C,CAAC;QAEF,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;YACnE,GAAG,CAAC,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YACnE,GAAG,CAAC,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACtE,SAAA;AAAM,aAAA;AACL,YAAA,IAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAEnF,GAAG,CAAC,eAAe,GAAG,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAC5D,YAAA,IAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAErF,GAAG,CAAC,gBAAgB,GAAG,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAC/D,SAAA;QAED,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;AACnE,YAAA,GAAG,CAAC,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1F,YAAA,GAAG,CAAC,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7F,SAAA;AAAM,aAAA;AACL,YAAA,IAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AAErF,YAAA,GAAG,CAAC,gBAAgB,GAAG,cAAc,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACrF,YAAA,IAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AAEnF,YAAA,GAAG,CAAC,eAAe,GAAG,cAAc,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpF,SAAA;QAED,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE;YAC/D,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7G,GAAG,CAAC,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5G,SAAA;AAAM,aAAA;AACL,YAAA,IAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAE/E,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtG,YAAA,IAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAE7E,GAAG,CAAC,aAAa,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACrG,SAAA;;AAED,QAAA,GAAG,CAAC,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;AAC9D,QAAA,GAAG,CAAC,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;AACvE,QAAA,GAAG,CAAC,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAA,GAAG,CAAC,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;AACvE,QAAA,GAAG,CAAC,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AACnF,QAAA,GAAG,CAAC,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC,kBAAkB,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACzF,QAAA,GAAG,CAAC,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;AAEjE,QAAA,GAAG,CAAC,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;;QAE3E,GAAG,CAAC,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACvD,QAAA,GAAG,CAAC,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AACjE,QAAA,GAAG,CAAC,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,QAAA,GAAG,CAAC,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAA,GAAG,CAAC,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;AAChE,QAAA,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAGnD,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC3B,CAAA;IAED,YAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,CAAwB,EAAA;QACpC,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YACnC,MAAM,KAAK,CAAC,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACnD,SAAA;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE;YAC/B,CAAC,CAAC,eAAe,EAAE,CAAC;AACpB,YAAA,IAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAExB,YAAA,IAAI,CAAC,EAAE;AACL,gBAAA,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACrB,aAAA;AAEF,SAAA;KACF,CAAA;IAED,YAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAoB,IAAY,EAAA;QAC9B,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,EAAE;YACV,IAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAA,EAAE,IAAG,OAAA,EAAE,CAAC,IAAI,KAAK,IAAI,CAAhB,EAAgB,CAAC,CAAC;AAExD,YAAA,IAAI,EAAE,EAAE;gBACN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;IAED,YAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAiB,CAAwB,EAAA;AACvC,QAAA,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KAC5B,CAAA;IAED,YAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,QAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;;AAGnC,YAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;;AAEvE,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;;AAEhE,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,CAAC,EAAI,EAAA,OAAA,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAA1B,EAA0B,CAAC,CAAC;AAC3D,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAED,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAS,OAAgC,EAAA;;AACvC,QAAA,IAAI,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,MAAKZ,sBAAc,CAAC,IAAI,EAAE;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,QAAQ,EAAE,CAAC,CAAA,EAAA,CAAC,CAAC;AAC3E,SAAA;AACD,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,mBAAmE,CAAC;AAC1F,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAAC,EAAA,EAAA;AAED,SAAS,cAAc,CAAK,GAAQ,EAAE,GAAM,EAAA;AAC1C,IAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;AACrC,QAAA,OAAO,GAAG,CAAC;AACZ,KAAA;AAED,IAAA,OAAO,GAAG,CAAC;AACb;;ACrLgB,SAAA,SAAS,CAAE,QAAuB,EAAE,IAAa,EAAA;AAC/D,IAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE;QAC/B,IAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEpD,IAAI,GAAG,CAAC,GAAG,EAAE;AACX,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;AACF,KAAA;AACH,CAAC;AAED,IAAA,mBAAA,kBAAA,YAAA;IAOE,SAAa,mBAAA,CAAA,QAAuB,EAAE,IAAa,EAAA;QAFnD,IAAK,CAAA,KAAA,GAAG,KAAK,CAAC;AAGZ,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAA2B,CAAC;KACvE;AAED,IAAA,mBAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAE/B,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE;AACzC,gBAAA,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;AACtC,gBAAA,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAChC,aAAA;AACD,YAAA,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;YAErC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACjC,SAAA;KACF,CAAA;AAED,IAAA,mBAAA,CAAA,SAAA,CAAA,IAAI,GAAJ,YAAA;AACE,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,GAAG,EAAE;YACtD,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC;AACrC,YAAA,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,SAAA;KACF,CAAA;AAED,IAAA,mBAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;AACE,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE/B,QAAA,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;KACvC,CAAA;IACH,OAAC,mBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;;AC1CM,IAAM,cAAc,IAAAO,IAAA,GAAA,EAAA;AACzB,IAAAA,IAAA,CAAC,WAAW,CAAC,iBAAiB,CAAG,GAAA,SAAS,CAAC,cAAc;AACzD,IAAAA,IAAA,CAAC,WAAW,CAAC,iBAAiB,CAAG,GAAA,SAAS,CAAC,YAAY;SACxD,CAAC;AAEK,IAAM,aAAa,IAAA,EAAA,GAAA,EAAA;AACxB,IAAA,EAAA,CAAC,SAAS,CAAC,cAAc,CAAG,GAAA,WAAW,CAAC,iBAAiB;AACzD,IAAA,EAAA,CAAC,SAAS,CAAC,YAAY,CAAG,GAAA,WAAW,CAAC,iBAAiB;OACxD,CAAC;AAaF;;;AAGG;AACH,IAAA,UAAA,kBAAA,YAAA;IAyBE,SAAa,UAAA,CAAA,MAAsC,EAAE,QAAuB,EAAA;AAE1E,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAEzB,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAElC,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAElC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;AAEnE,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAExB,IAAM,OAAO,GAAmC,EAAE,CAAC;AAEnD,QAAA,IAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC;QACvC,IAAM,UAAU,GAAyC,EAAE,CAAC;QAE5D,IAAI,MAAM,YAAY,UAAU,EAAE;YAChC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,MAAM,EAAE,IAAI,EAAA;AAChD,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACzB,aAAC,CAAC,CAAC;AACJ,SAAA;AAAM,aAAA;;YAEL,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,EAAE,IAAI,EAAA;gBACzC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACjD,aAAC,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;AACrC,gBAAA,IAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAmB,EAAE,QAAQ,CAAC,CAAC;AAE/E,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;;AAE3B,QAAA,OAAO,CAAC,YAAY,EAAE,UAAU,SAAS,EAAE,IAAI,EAAA;AAC7C,YAAA,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAC/B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAE7B,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;KAClB;IAED,UAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAW,IAAY,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,QAAyB,EAAE,EAAA,CAAA,MAAA,CAAG,IAAI,CAAC,IAAI,cAAI,IAAI,CAAE,CAAC,CAAC;AACvF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAwB,CAAC;KACjD,CAAA;IAED,UAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAY,IAAY,EAAA;;QACtB,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;KAC/B,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,cAAc,GAAd,UAAgB,MAAmB,EAAE,eAAuB,EAAA;AAC1D,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;KACxC,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,UAAmB,IAA4C,EAAE,QAAuB,EAAA;QACtF,IAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACpD,QAAA,IAAM,WAAW,GAAqB;AACpC,YAAA,IAAI,EAAA,IAAA;YACJ,MAAM,EAAE,SAAS,CAAC,oBAAoB;AACtC,YAAA,IAAI,EAAE,EAAA,CAAA,MAAA,CAAG,IAAI,CAAC,IAAI,EAAS,SAAA,CAAA;SAC5B,CAAC;QAEF,OAAO,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;KACvD,CAAA;IAED,UAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,IAAqB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KAC/B,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;;QACE,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,MAAM,EAAA;gBACxC,MAAM,CAAC,OAAO,EAAE,CAAC;AACnB,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;AAC7B,YAAA,IAAM,GAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAEtB,YAAA,OAAO,CAAC,GAAC,EAAE,UAAU,GAAG,EAAE,GAAG,EAAA;AAC3B,gBAAA,GAAG,aAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,OAAO,EAAE,CAAC;AACf,gBAAA,GAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AACrB,aAAC,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;KAC3B,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,UAAoB,IAAY,EAAE,MAAiB,EAAA;AACjD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,MAAqB,CAAC;;KAEhD,CAAA;IAED,UAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAoB,IAAY,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAED,UAAI,CAAA,SAAA,CAAA,IAAA,GAAJ,UAAM,KAAkB,EAAA;;AACtB,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAChC,IAAM,EAAE,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,EAA4B,CAAC;QACvD,IAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC;QAC/B,IAAM,gBAAgB,GAAG,CAAA,GAAG,aAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,UAAU,CAAC,YAAY,KAAK,KAAK,CAAC,WAA6B,CAAC,aAAa,GAAG,CAAC,CAAC;QAEhH,IAAI,EAAE,IAAI,GAAG,EAAE;AACb,YAAA,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAEjC,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,IAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;;;gBAGlC,IAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;gBAErF,IAAI,EAAE,GAAG,CAAC,EAAE;AACV,oBAAA,IAAI,gBAAgB,EAAE;wBACpB,GAAG,CAAC,qBAAqB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC,EAAG,KAAK,CAAC,WAA6B,CAAC,aAAa,CAAC,CAAC;AAC7H,qBAAA;AAAM,yBAAA;AACL,wBAAA,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;AAC3D,qBAAA;AACF,iBAAA;AACF,aAAA;iBAAM,IAAI,SAAS,GAAG,CAAC,EAAE;AACxB,gBAAA,IAAI,gBAAgB,EAAE;oBACpB,GAAG,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAG,KAAK,CAAC,WAA6B,CAAC,aAAa,CAAC,CAAC;AAC5H,iBAAA;AAAM,qBAAA;AACL,oBAAA,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1D,iBAAA;AACF,aAAA;AACF,SAAA;KACF,CAAA;IACH,OAAC,UAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;;ACzLD,IAAM,cAAc,IAAA,EAAA,GAAA,EAAA;AAClB,IAAA,EAAA,CAAC,SAAS,CAAC,KAAK,CAAG,GAAA,YAAY,CAAC,iBAAiB;AACjD,IAAA,EAAA,CAAC,SAAS,CAAC,GAAG,CAAG,GAAA,UAAU,CAAC,iBAAiB;AAC7C,IAAA,EAAA,CAAC,SAAS,CAAC,KAAK,CAAG,GAAA,UAAU,CAAC,iBAAiB;AAC/C,IAAA,EAAA,CAAC,SAAS,CAAC,IAAI,CAAG,GAAA,SAAS,CAAC,iBAAiB;OAC9C,CAAC;AASF,SAAS,eAAe,CAAE,IAAS,EAAA;AACjC,IAAA,IAAM,MAAM,GAAG,CAAC,IAAI,YAAY,UAAU,MAAM,IAAI,YAAY,WAAW,CAAC;AAC1E,SAAC,IAAI,YAAY,WAAW,CAAC,CAAC;AAEhC,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAE,IAAkF,EAAA;IAC/G,IAAI,IAAI,YAAY,YAAY,EAAE;QAChC,OAAO,SAAS,CAAC,KAAK,CAAC;AACxB,KAAA;AAAM,SAAA;QACL,OAAO,SAAS,CAAC,GAAG,CAAC;AACtB,KAAA;AACH,CAAC;AAED,SAAS,uBAAuB,CAAE,IAAY,EAAA;AAC5C,IAAA,IAAI,IAAI,KAAK,SAAS,CAAC,GAAG,EAAE;AAC1B,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,KAAA;AACD,IAAA,IAAI,IAAI,KAAK,SAAS,CAAC,KAAK,EAAE;AAC5B,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,KAAA;AAED,IAAA,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED;AACA,SAAS,wBAAwB,CAAE,IAAkB,EAAE,IAAY,EAAA;IACjE,IAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAEzC,IAAA,IAAI,SAAS,EAAE;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5C,KAAA;AAED,IAAA,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,IAAIK,MAAI,GAAG,CAAC,CAAC;AAEb;;;AAGG;AACH,IAAA,YAAA,kBAAA,YAAA;AA0EE,IAAA,SAAA,YAAA,CAAa,MAAuB,EAAA;;QA9DpC,IAAe,CAAA,eAAA,GAAa,EAAE,CAAC;QAM/B,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QAWf,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;AA8C7B,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAE,MAAM,CAAC,SAAoB,CAAC,GAAG,GAAG,GAAI,MAAM,CAAC,SAAoB,CAAC;QAC5F,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,IAAc,CAAC,GAAG,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAW,CAAC;AAC1F,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,eAAe,GAAGA,MAAI,EAAE,CAAC,CAAC;QACtD,IAAM,KAAK,GAAG,MAAM,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC;AAE1D,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;;QAEtB,IAAM,OAAO,GAAwC,EAAE,CAAC;QACxD,IAAM,cAAc,GAAa,EAAE,CAAC;QACpC,IAAM,UAAU,GAAyC,EAAE,CAAC;;QAE5D,IAAM,UAAU,GAAuC,EAAE,CAAC;QAC1D,IAAM,oBAAoB,GAA+B,EAAE,CAAC;QAE5D,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,IAAI,EAAE,IAAI,EAAA;AAC7C,YAAA,IAAI,IAAI,GAAI,IAA0B,CAAC,IAAI,CAAC;YAC5C,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAM,UAAU,GAAI,IAA0B,CAAC,UAAU,CAAC;YAE1D,IAAI,IAAI,IAAI,CAAE,IAA0B,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE;AAC5D,gBAAA,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACtC,aAAA;AACD,YAAA,IAAI,IAAI,EAAE;;gBAER,OAAO,CAAC,IAAI,CAAC,GAAG;AACd,oBAAA,IAAI,EAAA,IAAA;AAAE,oBAAA,KAAK,EAAA,KAAA;AAAE,oBAAA,IAAI,EAAA,IAAA;iBAClB,CAAC;AACF,gBAAA,IAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAE1C,UAAU,CAAC,IAAI,CAAC,GAAG;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,IAAI,EAAE,IAAI,IAAI,MAAM;AACpB,oBAAA,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;oBAC3B,UAAU,GAAG,IAAI,CAAC;oBAClB,eAAe,EAAC,IAAI,CAAC,eAAe;iBACrC,CAAC;AACF,gBAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,KAAK,CAAC;gBACjD,UAAU,CAAC,IAAI,CAAC,GAAG;AACjB,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,MAAM,CAAC,iBAAiB;AAC/B,oBAAA,GAAG,EAAE,CAAC;iBACP,CAAC;AACH,aAAA;AAAM,iBAAA;;AAEL,gBAAA,IAAM,UAAU,GAAI,IAA0B,CAAC,UAAU,CAAC;AAE1D,gBAAA,IAAI,UAAU,EAAE;;oBAEd,UAAU,CAAC,IAAI,CAAC,GAAG;wBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,UAAU,EAAE,UAAU;AACtB,wBAAA,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;qBAC5B,CAAC;AACH,iBAAA;AACF,aAAA;AACD,YAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,SAAC,CAAC,CAAC;;QAGH,IAAI,CAAC,MAAM,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC;AACjC,QAAA,IAAK,IAAI,CAAC,MAAc,YAAY,UAAU,EAAE;AAC9C,YAAA,MAAM,KAAK,CAAC,yBAAyB,CAAC,CAAC;AACxC,SAAA;QACD,UAAU,CAAC,OAAO,CAAC,GAAG;AACpB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,MAAM,CAAC,iBAAiB;AAC/B,YAAA,GAAG,EAAE,CAAC;SACP,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAA,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAU,MAAK,IAAI,CAAC;AAE1D,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;AACtC,QAAA,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;AAClD,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;KAC/B;AA9HD,IAAA,MAAA,CAAA,cAAA,CAAI,YAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,YAAI,CAAA,SAAA,EAAA,MAAA,EAAA;AAAR,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;AAED,QAAA,GAAA,EAAA,UAAU,CAAS,EAAA;AACjB,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;AACxB,aAAA;SACF;;;AAPA,KAAA,CAAA,CAAA;AASD,IAAA,MAAA,CAAA,cAAA,CAAI,YAAU,CAAA,SAAA,EAAA,YAAA,EAAA;AAAd,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,YAAS,CAAA,SAAA,EAAA,WAAA,EAAA;AAAb,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,UAAU,CAAC;SACxB;AAED,QAAA,GAAA,EAAA,UAAe,CAAqB,EAAA;AAClC,YAAA,IAAI,CAAC,UAAU,GAAG,CAAE,CAAY,CAAC;YACjC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAE,CAAY,CAAC;AAC1C,aAAA;SACF;;;AAPA,KAAA,CAAA,CAAA;AASD,IAAA,MAAA,CAAA,cAAA,CAAI,YAAS,CAAA,SAAA,EAAA,WAAA,EAAA;AAAb,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,UAAU,CAAC;SACxB;AAED,QAAA,GAAA,EAAA,UAAe,CAAS,EAAA;AACtB,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;AAC7B,aAAA;SACF;;;AAPA,KAAA,CAAA,CAAA;AAgGD,IAAA,YAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;AACE,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;;AAErB,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;;AAG1B,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AAEzB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;;AAExB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC3B,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,mBAAmE,CAAC;AAC1F,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B,CAAA;;AAGD,IAAA,YAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,UAAoB,IAAY,EAAE,MAAiB,EAAA;AACjD,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE;YAAE,OAAO;AAAE,SAAA;AAC3C,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7C,IAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;AAExD,QAAA,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE;AAC7B,YAAA,UAAU,CAAC,aAAa,CAAC,GAAG,MAAqB,CAAC;AACnD,SAEA;KACF,CAAA;IAED,YAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAoB,IAAY,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE;AAAE,YAAA,OAAO,SAAS,CAAC;AAAE,SAAA;AACrD,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7C,IAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;AAExD,QAAA,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;KAClC,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAkB,IAAY,EAAE,IAAgB,EAAA;AAC9C,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,OAAO,IAAI,SAAS,EAAE;YAAE,OAAO;AAAE,SAAA;QAErC,IAAM,eAAe,GAAG,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;AAExD,QAAA,IAAI,eAAe,EAAE;AACnB,YAAA,IAAM,MAAM,GAAqB;AAC/B,gBAAA,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,eAAe,CAAC,KAAK;gBAC5B,MAAM,EAAE,eAAe,CAAC,MAAM;aAC/B,CAAC;AAEF,YAAA,OAAO,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;AAC9C,SAAA;KACF,CAAA;IAED,YAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAkB,IAAY,EAAA;AAC5B,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,OAAO,IAAI,SAAS,EAAE;YAAE,OAAO;AAAE,SAAA;QAErC,IAAM,eAAe,GAAG,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAE7D,QAAA,IAAI,eAAe,EAAE;YACnB,OAAO,eAAe,CAAC,IAAI,CAAC;AAC7B,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KAClB,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,mBAAmB,GAAnB,UAAqB,IAAY,EAAE,MAAc,EAAE,IAAgB,EAAA;AACjE,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,OAAO,IAAI,SAAS,EAAE;YAAE,OAAO;AAAE,SAAA;QAErC,IAAM,eAAe,GAAG,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAE7D,QAAA,IAAI,eAAe,EAAE;YACnB,IAAM,SAAS,GAAG,eAAe,CAAC;AAElC,YAAA,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,EAAE;gBAC/B,IAAM,KAAK,GAAG,MAAM,CAAC;AACrB,gBAAA,IAAM,QAAM,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;;AAGpC,gBAAA,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,QAAM,EAAE;;oBAElC,IAAM,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,QAAM,CAAC,CAAC;AAE7C,oBAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC5B,oBAAA,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;oBACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AACvC,iBAAA;qBAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;oBAC1C,IAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAEzC,oBAAA,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAe,EAAE,KAAK,CAAC,CAAC;AAC7D,oBAAA,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAa,EAAE,QAAM,GAAG,CAAC,CAAC,CAAC;AAC/D,iBAAA;gBACA,SAAS,CAAC,IAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;AACrC,aAAA;AACF,SAEA;KACF,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,YAAA;QACE,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB,CAAA;IAED,YAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,IAA2C,EAAA;AACvD,QAAA,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAW,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;YACzC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,SAAA;KACF,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,eAAe,GAAf,UAAiB,MAAc,EAAE,IAAgB,EAAA;;QAC/C,IAAI,IAAI,CAAC,MAAM,EAAE;;YAEf,IAAM,KAAK,GAAG,MAAM,CAAC;AACrB,YAAA,IAAM,QAAM,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAEpC,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,QAAM,EAAE;;gBAE/B,IAAM,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAE1C,gBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzB,gBAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;gBACtB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AAC1C,aAAA;iBAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;gBAC7C,IAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAE5C,gBAAA,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAe,EAAE,KAAK,CAAC,CAAC;AAC7D,gBAAA,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAa,EAAE,QAAM,GAAG,CAAC,CAAC,CAAC;AAC/D,aAAA;YACD,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;AACxC,SAAA;KACF,CAAA;IAED,YAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAoB,IAAY,EAAA;QAC9B,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,IAAI,CAAC,MAAM,CAAC;AACpB,SAAA;QAED,OAAO,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9C,CAAA;IAED,YAAsB,CAAA,SAAA,CAAA,sBAAA,GAAtB,UAAwB,IAAY,EAAA;;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAM,eAAe,GAAG,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAE7D,YAAA,IAAI,eAAe,EAAE;AACnB,gBAAA,OAAO,MAAA,eAAe,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAgB,CAAC;AAC/C,aAAA;AACF,SAAA;AAED,QAAA,OAAO,CAAC,CAAC;KACV,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,YAAA;QACE,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B,CAAA;IAED,YAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,QAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;YAElB,IAAI,iBAAiB,GAAiC,SAAS,CAAC;YAEhE,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,gBAAA,IAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;AAEzB,gBAAA,iBAAiB,GAAG;AAClB,oBAAA,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE,SAAS,CAAC,WAAW;iBAC7B,CAAC;gBACF,IAAI,IAAI,YAAY,WAAW,EAAE;AAC/B,oBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,cAAc,CAAC;AAC/C,iBAAA;qBAAM,IAAI,IAAI,YAAY,WAAW,EAAE;AACtC,oBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC;AAC7C,iBAAA;AACF,aAAA;;AAGD,YAAA,IAAM,OAAO,GAAG;gBACd,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;;gBAEzB,UAAU,EAAE,IAAI,CAAC,WAAW;gBAC5B,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,KAAK,EAAE,iBAAiB;gBACxB,aAAa,EAAC,IAAI,CAAC,aAAa;gBAChC,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;;AAGF,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,KAAK,EAAE,CAAC;;AAEb,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,KAAK,GAAL,YAAA;AACE,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE/B,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAM,YAAU,GAAG,IAAI,CAAC,WAAW,CAAC;AACpC,YAAA,IAAM,kBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;AACvC,YAAA,IAAM,aAAW,GAAG,IAAI,CAAC,MAAM,CAAC;YAEhC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,IAAI,EAAE,IAAI,EAAA;AAC5C,gBAAA,IAAI,SAAS,CAAC;AACd,gBAAA,IAAI,IAAI,CAAC;gBAET,IAAI,IAAI,IAAI,OAAO,EAAE;AACnB,oBAAA,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC;oBAClC,IAAI,GAAG,aAAW,CAAC;AACpB,iBAAA;AAAM,qBAAA;oBACL,IAAM,UAAU,GAAG,YAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;AAE/C,oBAAA,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAgB,CAAC;AAC7D,oBAAA,IAAI,GAAG,kBAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;AAC1C,iBAAA;AAED,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,EAAE;oBACrD,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,wBAAA,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5B,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAM,MAAM,GAAI,IAAI,CAAC,KAAgB,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;wBACjF,IAAM,QAAM,GAAI,IAAI,CAAC,GAAc,GAAI,IAAI,CAAC,KAAgB,GAAG,CAAC,CAAC;;AAEjE,wBAAA,IAAM,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAM,CAAC,CAAC;wBAElE,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,KAAe,EAAE,OAAO,CAAC,CAAC;AACxD,qBAAA;AACD,oBAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACtC,oBAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;oBACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACnC,iBAAA;AACH,aAAC,CAAC,CAAC;;YAGH,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAU,UAAU,EAAE,IAAI,EAAA;gBAC5D,IAAM,UAAU,GAAG,YAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;AAE/C,gBAAA,IAAI,kBAAgB,CAAC,UAAU,CAAC,IAAI,UAAU,EAAE;AAC9C,oBAAA,kBAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC;AAC/C,iBAAA;AACH,aAAC,CAAC,CAAC;;YAGH,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AACzB,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAAC,EAAA;;AC/eD,IAAI,IAAI,GAAG,CAAC,CAAC;AAEb,IAAA,QAAA,kBAAA,YAAA;IAwBE,SAAa,QAAA,CAAA,OAAoB,EAAE,QAAuB,EAAA;QAVlD,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QAW3B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,YAAY,YAAY,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,QAA2B,CAAC,CAAC;AACpI,QAAA,IAAM,GAAG,GAAI,OAA+B,CAAC,QAAQ,CAAC;AAEtD,QAAA,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,YAAY,YAAY,GAAG,GAAG,GAAG,IAAI,YAAY,CAAC,GAAsB,CAAC,CAAC,CAAC;AAClG,SAAA;aAAM,IAAK,OAAiC,CAAC,UAAU,EAAE;AACxD,YAAA,IAAI,CAAC,UAAU,GAAI,OAAiC,CAAC,UAAU,CAAC,GAAG,CAAC,UAAA,GAAG,EAAA,EAAI,OAAA,GAAG,YAAY,YAAY,GAAG,GAAG,GAAG,IAAI,YAAY,CAAC,GAAsB,CAAC,CAA5E,EAA4E,CAAC,CAAC;AAC1J,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACtB,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,WAAW,GAAG,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AAClB,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC/B,SAAA;KACF;AAzBD,IAAA,MAAA,CAAA,cAAA,CAAI,QAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,QAAQ,CAAA,SAAA,EAAA,UAAA,EAAA;AAAZ,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SAC3B;;;AAAA,KAAA,CAAA,CAAA;AAqBD,IAAA,QAAA,CAAA,SAAA,CAAA,WAAW,GAAX,UAAa,GAA+B,EAAE,UAAyD,EAAA;AACrG,QAAA,IAAI,UAAU,KAAKZ,sBAAc,CAAC,IAAI,EAAE;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,SAAA;;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,YAAY,YAAY,GAAG,GAAG,GAAG,IAAI,YAAY,CAAC,GAAsB,CAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7C,SAAA;KACF,CAAA;AAED,IAAA,QAAA,CAAA,SAAA,CAAA,aAAa,GAAb,UAAe,IAAoB,EAAE,iBAAkC,EAAA;AACrE,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;AAE5B,QAAA,IAAI,iBAAiB,KAAKA,sBAAc,CAAC,IAAI,EAAE;AAC7C,YAAA,GAAG,CAAC,OAAO,CAAC,UAAA,CAAC,EAAI,EAAA,OAAA,CAAC,CAAC,OAAO,EAAE,CAAX,EAAW,CAAC,CAAC;AAC/B,SAAA;AACD,QAAA,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,IAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAExB,QAAA,IAAI,CAAC,OAAO,CAAC,UAAA,CAAC,EAAA;AACZ,YAAA,IAAI,CAAC,EAAE;AACL,gBAAA,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACrB,aAAA;AACD,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,SAAC,CAAC,CAAC;KACJ,CAAA;IAED,QAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAS,OAA4B,EAAA;QACnC,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,YAAY,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAC;AACxD,SAAA;AACD,QAAA,IAAI,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,UAAU,MAAKA,sBAAc,CAAC,IAAI,EAAE;AAC/C,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,OAAO,EAAA;gBAC7B,OAAO,CAAC,OAAO,EAAE,CAAC;AACpB,aAAC,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAM,qBAAqB,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,QAAQ,CAAC;QAEhD,IAAI,qBAAqB,KAAKA,sBAAc,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AAClE,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;;AAE7C,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;AAC9B,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,mBAA+D,CAAC;AACtF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B,CAAA;IAED,QAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,QAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,OAAO,EAAA;AAC7B,YAAA,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACnC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACxC,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAEzB,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IACH,OAAC,QAAA,CAAA;AAAD,CAAC,EAAA,EAAA;AAED,IAAA,iBAAA,kBAAA,UAAA,MAAA,EAAA;IAAuC,SAAQ,CAAA,iBAAA,EAAA,MAAA,CAAA,CAAA;IAE7C,SAAa,iBAAA,CAAA,OAA6B,EAAE,QAAuB,EAAA;AAAnE,QAAA,IAAA,KAAA,GACE,MAAM,CAAA,IAAA,CAAA,IAAA,EAAA,OAAO,EAAE,QAAQ,CAAC,IAEzB,IAAA,CAAA;AADC,QAAA,KAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;;KAC5C;IACH,OAAC,iBAAA,CAAA;AAAD,CANA,CAAuC,QAAQ,CAM9C;;AChHD,IAAM,YAAY,GAAG,oBAAoB,CAAC;AAE1C,IAAA,WAAA,kBAAA,YAAA;AAIE,IAAA,SAAA,WAAA,CAAa,QAAsB,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAA,QAAQ,KAAR,IAAA,IAAA,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,GAAG,CAAC,KAAK,MAAK,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC7E,YAAA,IAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;AAEtE,YAAA,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAgC,CAAC,CAAC;AACnE,YAAA,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACpD,SAAA;KACF;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,UAAuB,EAAc,EAAE,aAAwB,EAAA;AAC7D,QAAA,IAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAExB,QAAA,IAAI,CAAC,EAAE;AACJ,YAAA,EAAqB,CAAC,qBAAqB,CAAC,aAA8B,CAAC,CAAC;AAC9E,SAAA;KACF,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,WAAW,GAAX,UAAa,MAAe,EAAE,GAAY,EAAA;AACxC,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE/B,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAChC,YAAA,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC7B,GAAG,CAAC,YAAY,CAAC;gBACf,UAAU,EAAEM,yBAAiB,CAAC,WAAW;AACzC,gBAAA,IAAI,EAAE;AACJ,oBAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;AAChC,oBAAA,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;AACpC,iBAAA;AACF,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAqB,EAAE,GAAkB,CAAC,CAAC;AACvD,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAqB,EAAE,GAAkB,CAAC,CAAC;AACvD,aAAA;AACF,SAAA;KAEF,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,KAAK,GAAL,UAAO,MAAmB,EAAE,MAAmB,EAAA;;AAC7C,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAqB,EAAE,MAAM,CAAC,QAAqB,CAAC,CAAC;KAC3F,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,KAAK,GAAL,UAAO,MAAmB,EAAE,MAAmB,EAAA;AAC7C,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;AAEhC,QAAA,IAAI,EAAE,EAAE;AACN,YAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE/B,YAAA,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAM,EAAE,GAAG,EAAE,CAAC,WAA4B,CAAC;AAE3C,gBAAA,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;AAC9C,gBAAA,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;AAChD,gBAAA,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAqB,CAAC,CAAC,CAAC;gBAC5E,IAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAE1B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjE,gBAAA,mBAAmB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAiB,CAAC,CAAC;AACzF,aAAA;AACF,SAAA;KACF,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,YAAA;QACE,IAAM,IAAI,GAAG,eAAe,CAAC;QAE7B,OAAO,IAAI,cAAc,CAAC;AACxB,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,UAAU,EAAE;gBACV,WAAW,EAAEJ,yBAAiB,CAAC,QAAQ;AACxC,aAAA;AACD,YAAA,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;AACtD,YAAA,MAAM,EAAE,CAAC,IAAI,QAAQ,CAAC;AACpB,oBAAA,IAAI,EAAA,IAAA;AACJ,oBAAA,QAAQ,EAAE,CAAC;AACX,oBAAA,QAAQ,EAAE;AACR,wBAAA,IAAI,EAAA,IAAA;wBACJ,IAAI,EAAE,SAAS,CAAC,cAAc;AAC9B,wBAAA,UAAU,EAAE;AACV,4BAAA,IAAI,EAAE;gCACJ,IAAI,EAAE,SAAS,CAAC,KAAK;AACrB,gCAAA,IAAI,EAAE,CAAC;gCACP,IAAI,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrD,6BAAA;AACF,yBAAA;AACD,wBAAA,SAAS,EAAE,CAAC;AACb,qBAAA;AACD,oBAAA,QAAQ,EAAE;AACR,wBAAA,MAAM,EAAE;AACN,4BAAA,SAAS,EAAE,KAAK;AAChB,4BAAA,eAAe,EAAE,KAAK;AACtB,4BAAA,WAAW,EAAE,KAAK;AACnB,yBAAA;AACD,wBAAA,IAAI,EAAA,IAAA;AACJ,wBAAA,MAAM,EAAE;AACN,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,IAAI,EAAA,IAAA;AACJ,4BAAA,MAAM,EAAE,sNAMT;AACC,4BAAA,QAAQ,EAAE,mKAIX;AACA,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC,CAAC;AACJ,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;;QACE,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,0CAAE,MAAM,CAAC,CAAC,CAAE,CAAA,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAC7F,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC3B,SAAA;KACF,CAAA;IACH,OAAC,WAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC5HD,IAAM,OAAO,GAAG,qBAAqB,CAAC;AAEtC,IAAA,YAAA,kBAAA,YAAA;AAqBE,IAAA,SAAA,YAAA,CAAa,OAAwB,EAAA;AACnC,QAAA,IAAI,EAAE,GAAmD,OAAO,CAAC,EAAoD,CAAC;QAEtH,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,IAAM,YAAY,GAAG;gBACnB,qBAAqB,EAAE,OAAO,CAAC,gBAAgB;AAC/C,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,kBAAkB,EAAE,IAAI;aACzB,CAAC;AACF,YAAA,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAE9B,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,IAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,uBAAuB,EAAE,CAAC,IAAe,CAAC,CAAC;AAErF,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,oBAAA,EAAE,GAAG,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,CAA0B,CAAC;AAC9E,oBAAA,IAAI,EAAE,EAAE;wBACN,MAAM;AACP,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;YACN,IAAI,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,EAAE,EAAA,EAAA,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;AACjD,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;AACzB,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,kBAAkB,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC9C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAChC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvB,SAAA;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;KACxC;AAnDD,IAAA,MAAA,CAAA,cAAA,CAAI,YAAW,CAAA,SAAA,EAAA,aAAA,EAAA;AAAf,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAE/B,OAAO,QAAQ,GAAG,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;SAC/C;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,YAAM,CAAA,SAAA,EAAA,QAAA,EAAA;AAAV,QAAA,GAAA,EAAA,YAAA;;YACE,OAAO,CAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,CAAC;SACnC;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,YAAK,CAAA,SAAA,EAAA,OAAA,EAAA;AAAT,QAAA,GAAA,EAAA,YAAA;;YACE,OAAO,CAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,KAAI,CAAC,CAAC;SAClC;;;AAAA,KAAA,CAAA,CAAA;IAyCD,YAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAc,OAAyB,EAAA;AACrC,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE/B,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;AACtB,SAAA;AAED,QAAA,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;KAC3C,CAAA;IAED,YAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAmB,OAA4B,EAAA;QAC7C,OAAO,IAAI,eAAe,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;KACjD,CAAA;IAED,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAS,MAAgB,EAAA;;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACzB,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,MAAM,CAAC,CAAC;;AAE/B,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,kBAAkB,EAAE,CAAC;;AAEpC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAC;KAC/C,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,MAAM,GAAN,UAAQ,KAAa,EAAE,MAAc,EAAA;AACnC,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAE/B,QAAA,IAAI,QAAQ,EAAE;YACZ,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;AAClD,gBAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAChC,aAAA;AACF,SAAA;KACF,CAAA;IAED,YAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAsB,EAAU,EAAA;AAC9B,QAAA,OAAO,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;KACxC,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,SAAS,GAAT,YAAA;AACE,QAAA,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE1B,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC;AAC/B,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX,CAAA;IAED,YAAqB,CAAA,SAAA,CAAA,qBAAA,GAArB,UAAuB,EAAwB,EAAA;AAC7C,QAAA,OAAO,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;KACzC,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAAC,EAAA;;AChID,IAAA,kBAAA,kBAAA,UAAA,MAAA,EAAA;IAAwC,SAAY,CAAA,kBAAA,EAAA,MAAA,CAAA,CAAA;IAKlD,SAAa,kBAAA,CAAA,GAA0B,EAAE,QAAuB,EAAA;AAAhE,QAAA,IAAA,KAAA,GACE,MAAM,CAAA,IAAA,CAAA,IAAA,EAAA,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,CAAoB,CAAC,IAkBjE,IAAA,CAAA;QAjBC,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAEzE,QAAA,IAAI,SAAS,EAAE;;YAEb,SAAS,GAAG,IAAI,SAAS,CAAC,WAAW,CAAC,SAAS,CAAgB,CAAC;AACjE,SAAA;AACD,QAAA,KAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AACxB,QAAA,KAAI,CAAC,OAAO,GAAG,GAAG,CAAC,QAAwB,CAAC;QAC5C,KAAI,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC;QACrC,KAAI,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC;QACrC,KAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAC,IAAI,EAAE,IAAI,EAAA;AAC3C,YAAA,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,KAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC/B,SAAA;;KACF;IAED,kBAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAgB,QAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;AAE9B,YAAA,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,YAAA,IAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YACnC,IAAM,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAE1D,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACjC,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACjC,YAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,gBAAA,IAAM,GAAG,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAEpE,gBAAA,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,aAAA;;AAED,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAwB,CAAC;AACnD,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;KACzC,CAAA;IAED,kBAAsB,CAAA,SAAA,CAAA,sBAAA,GAAtB,UAAwB,IAAY,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,OAAO,MAAM,CAAA,SAAA,CAAA,sBAAsB,CAAC,IAAA,CAAA,IAAA,EAAA,IAAI,CAAC,CAAC;AAC3C,SAAA;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;KAClD,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,KAAK,GAAL,YAAA;AACE,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAErB,OAAO,MAAA,CAAA,SAAA,CAAM,KAAK,CAAA,IAAA,CAAA,IAAA,CAAE,CAAC;KACtB,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,IAAI,IAAI,CAAC,QAAQ,EAAE;;AAEjB,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;AAC3B,SAAA;QACD,MAAM,CAAA,SAAA,CAAA,OAAO,WAAE,CAAC;KACjB,CAAA;IAEH,OAAC,kBAAA,CAAA;AAAD,CA5EA,CAAwC,YAAY,CA4EnD;;AC9DD,UAAU,CAAC,WAAW,GAAG,QAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;"}