From 2b94bb74c3a83f961bbadf2de430462ef3d0c4cb Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 11 Oct 2021 16:51:01 +0800 Subject: [PATCH 01/91] feat(text): init TextRenderer --- packages/core/src/2d/enums/TextAlignment.ts | 17 ++ packages/core/src/2d/enums/TextOverflow.ts | 15 ++ packages/core/src/2d/index.ts | 3 + packages/core/src/2d/text/TextRenderer.ts | 183 ++++++++++++++++++++ packages/core/src/2d/text/index.ts | 1 + 5 files changed, 219 insertions(+) create mode 100644 packages/core/src/2d/enums/TextAlignment.ts create mode 100644 packages/core/src/2d/enums/TextOverflow.ts create mode 100644 packages/core/src/2d/text/TextRenderer.ts create mode 100644 packages/core/src/2d/text/index.ts diff --git a/packages/core/src/2d/enums/TextAlignment.ts b/packages/core/src/2d/enums/TextAlignment.ts new file mode 100644 index 0000000000..876d058c3a --- /dev/null +++ b/packages/core/src/2d/enums/TextAlignment.ts @@ -0,0 +1,17 @@ +/** + * Text horizontal alignment. + */ +export enum TextHorizontalAlignment { + Left = 0, + Center = 1, + Right = 2 +} + +/** + * Text vertical alignment. + */ +export enum TextVerticalAlignment { + Top = 0, + Center = 1, + Bottom = 2 +} diff --git a/packages/core/src/2d/enums/TextOverflow.ts b/packages/core/src/2d/enums/TextOverflow.ts new file mode 100644 index 0000000000..669310d997 --- /dev/null +++ b/packages/core/src/2d/enums/TextOverflow.ts @@ -0,0 +1,15 @@ +/** + * Text horizontal overflow. + */ +export enum TextHorizontalOverflow { + Overflow = 0, + Wrap = 1 +} + +/** + * Text vertical overflow. + */ +export enum TextVerticalOverflow { + Overflow = 0, + Truncate = 1 +} diff --git a/packages/core/src/2d/index.ts b/packages/core/src/2d/index.ts index 31ba3b30bd..c28c7dd43f 100644 --- a/packages/core/src/2d/index.ts +++ b/packages/core/src/2d/index.ts @@ -1,4 +1,7 @@ export { SpriteMaskInteraction } from "./enums/SpriteMaskInteraction"; export { SpriteMaskLayer } from "./enums/SpriteMaskLayer"; +export { TextHorizontalAlignment, TextVerticalAlignment } from "./enums/TextAlignment"; +export { TextHorizontalOverflow, TextVerticalOverflow } from "./enums/TextOverflow"; export { SpriteAtlas } from "./atlas/SpriteAtlas"; export * from "./sprite/index"; +export * from "./text/index"; \ No newline at end of file diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts new file mode 100644 index 0000000000..8e09c4a707 --- /dev/null +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -0,0 +1,183 @@ +import { Camera } from "../../Camera"; +import { assignmentClone, ignoreClone } from "../../clone/CloneManager"; +import { Entity } from "../../Entity"; +import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; +import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; +import { SpriteRenderer } from "../sprite"; + +export class TextRenderer extends SpriteRenderer { + @assignmentClone + private _text: string = ''; + @assignmentClone + private _width: number = 0; + @assignmentClone + private _height: number = 0; + @assignmentClone + private _font: string = 'Arial'; + @assignmentClone + private _fontSize: number = 24; + @assignmentClone + private _lineHeight: number = 1; + @assignmentClone + private _isBolb: boolean = false; + @assignmentClone + private _isItalic: boolean = false; + @assignmentClone + private _horizontalAlignment: TextHorizontalAlignment = TextHorizontalAlignment.Center; + @assignmentClone + private _verticalAlignment: TextVerticalAlignment = TextVerticalAlignment.Center; + @assignmentClone + private _horizontalOverflow: TextHorizontalOverflow = TextHorizontalOverflow.Wrap; + @assignmentClone + private _verticalOverflow: TextVerticalOverflow = TextVerticalOverflow.Truncate; + @ignoreClone + private _textDirtyFlag: boolean = true; + + /** + * + */ + get text(): string { + return this._text; + } + + set text(value: string) { + value = value || ''; + if (this._text !== value) { + this._text = value; + this._textDirtyFlag = true; + } + } + + get width(): number { + return this._width; + } + + set width(value: number) { + if (this._width !== value) { + this._width = value; + this._textDirtyFlag = true; + } + } + + get height(): number { + return this._height; + } + + set height(value: number) { + if (this._height !== value) { + this._height = value; + this._textDirtyFlag = true; + } + } + + get font(): string { + return this._font; + } + + set font(value: string) { + value = value || 'Arial'; + if (this._font !== value) { + this._font = value; + this._textDirtyFlag = true; + } + } + + get fontSize(): number { + return this._fontSize; + } + + set fontSize(value: number) { + if (this._fontSize !== value) { + this._fontSize = value; + this._textDirtyFlag = true; + } + } + + get lineHeight(): number { + return this._lineHeight; + } + + set lineHeight(value: number) { + if (this._lineHeight !== value) { + this._lineHeight = value; + this._textDirtyFlag = true; + } + } + + get isBolb(): boolean { + return this._isBolb; + } + + set isBolb(value: boolean) { + if (this._isBolb !== value) { + this._isBolb = value; + this._textDirtyFlag = true; + } + } + + get isItalic(): boolean { + return this._isItalic; + } + + set isItalic(value: boolean) { + if (this._isItalic !== value) { + this._isItalic = value; + this._textDirtyFlag = true; + } + } + + get horizontalAlignment(): TextHorizontalAlignment { + return this._horizontalAlignment; + } + + set horizontalAlignment(value: TextHorizontalAlignment) { + if (this._horizontalAlignment !== value) { + this._horizontalAlignment = value; + this._textDirtyFlag = true; + } + } + + get verticalAlignment(): TextVerticalAlignment { + return this._verticalAlignment; + } + + set verticalAlignment(value: TextVerticalAlignment) { + if (this._verticalAlignment !== value) { + this._verticalAlignment = value; + this._textDirtyFlag = true; + } + } + + get horizontalOverflow(): TextHorizontalOverflow { + return this._horizontalOverflow; + } + + set horizontalOverflow(value: TextHorizontalOverflow) { + if (this._horizontalOverflow !== value) { + this._horizontalOverflow = value; + this._textDirtyFlag = true; + } + } + + get verticalOverflow(): TextVerticalOverflow { + return this._verticalOverflow; + } + + set verticalOverflow(value: TextVerticalOverflow) { + if (this._verticalOverflow !== value) { + this._verticalOverflow = value; + this._textDirtyFlag = true; + } + } + + constructor(entity: Entity) { + super(entity); + } + + /** + * @internal + */ + _render(camera: Camera): void { + + } +} diff --git a/packages/core/src/2d/text/index.ts b/packages/core/src/2d/text/index.ts new file mode 100644 index 0000000000..9db4e3da5d --- /dev/null +++ b/packages/core/src/2d/text/index.ts @@ -0,0 +1 @@ +export { TextRenderer } from "./TextRenderer"; \ No newline at end of file From a707c94a0dc4abdc3588113381046b0bfc41622d Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 12 Oct 2021 13:57:07 +0800 Subject: [PATCH 02/91] feat(text): add bounds --- packages/core/src/2d/text/TextRenderer.ts | 59 +++++++++++++++-------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 8e09c4a707..5e0aa84aa9 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -1,3 +1,4 @@ +import { BoundingBox } from "@oasis-engine/math"; import { Camera } from "../../Camera"; import { assignmentClone, ignoreClone } from "../../clone/CloneManager"; import { Entity } from "../../Entity"; @@ -7,13 +8,13 @@ import { SpriteRenderer } from "../sprite"; export class TextRenderer extends SpriteRenderer { @assignmentClone - private _text: string = ''; + private _text: string = ""; @assignmentClone private _width: number = 0; @assignmentClone private _height: number = 0; @assignmentClone - private _font: string = 'Arial'; + private _font: string = "Arial"; @assignmentClone private _fontSize: number = 24; @assignmentClone @@ -31,20 +32,20 @@ export class TextRenderer extends SpriteRenderer { @assignmentClone private _verticalOverflow: TextVerticalOverflow = TextVerticalOverflow.Truncate; @ignoreClone - private _textDirtyFlag: boolean = true; + private _styleDirtyFlag: boolean = true; /** - * + * */ get text(): string { return this._text; } set text(value: string) { - value = value || ''; + value = value || ""; if (this._text !== value) { this._text = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -55,7 +56,7 @@ export class TextRenderer extends SpriteRenderer { set width(value: number) { if (this._width !== value) { this._width = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -66,7 +67,7 @@ export class TextRenderer extends SpriteRenderer { set height(value: number) { if (this._height !== value) { this._height = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -75,10 +76,10 @@ export class TextRenderer extends SpriteRenderer { } set font(value: string) { - value = value || 'Arial'; + value = value || "Arial"; if (this._font !== value) { this._font = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -89,7 +90,7 @@ export class TextRenderer extends SpriteRenderer { set fontSize(value: number) { if (this._fontSize !== value) { this._fontSize = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -100,7 +101,7 @@ export class TextRenderer extends SpriteRenderer { set lineHeight(value: number) { if (this._lineHeight !== value) { this._lineHeight = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -111,7 +112,7 @@ export class TextRenderer extends SpriteRenderer { set isBolb(value: boolean) { if (this._isBolb !== value) { this._isBolb = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -122,7 +123,7 @@ export class TextRenderer extends SpriteRenderer { set isItalic(value: boolean) { if (this._isItalic !== value) { this._isItalic = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -133,7 +134,7 @@ export class TextRenderer extends SpriteRenderer { set horizontalAlignment(value: TextHorizontalAlignment) { if (this._horizontalAlignment !== value) { this._horizontalAlignment = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -144,7 +145,7 @@ export class TextRenderer extends SpriteRenderer { set verticalAlignment(value: TextVerticalAlignment) { if (this._verticalAlignment !== value) { this._verticalAlignment = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -155,7 +156,7 @@ export class TextRenderer extends SpriteRenderer { set horizontalOverflow(value: TextHorizontalOverflow) { if (this._horizontalOverflow !== value) { this._horizontalOverflow = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -166,7 +167,7 @@ export class TextRenderer extends SpriteRenderer { set verticalOverflow(value: TextVerticalOverflow) { if (this._verticalOverflow !== value) { this._verticalOverflow = value; - this._textDirtyFlag = true; + this._styleDirtyFlag = true; } } @@ -177,7 +178,25 @@ export class TextRenderer extends SpriteRenderer { /** * @internal */ - _render(camera: Camera): void { + _render(camera: Camera): void {} - } + /** + * @override + */ + protected _updateBounds(worldBounds: BoundingBox): void { + const sprite = this.sprite; + if (sprite) { + if (this._customLocalBounds && this._customRootEntity) { + const worldMatrix = this._customRootEntity.transform.worldMatrix; + BoundingBox.transform(this._customLocalBounds, worldMatrix, worldBounds); + } else { + // const localBounds = sprite.bounds; + // const worldMatrix = this._entity.transform.worldMatrix; + // BoundingBox.transform(localBounds, worldMatrix, worldBounds); + } + } else { + worldBounds.min.setValue(0, 0, 0); + worldBounds.max.setValue(0, 0, 0); + } + } } From 81f8fe5db9924509c9d6c5e3dbd2deb33b12713f Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 2 Nov 2021 19:01:38 +0800 Subject: [PATCH 03/91] feat(text): first basic version --- packages/core/src/2d/text/TextRenderer.ts | 86 +++++++++--- packages/core/src/2d/text/TextUtils.ts | 160 ++++++++++++++++++++++ packages/design/package.json | 2 +- packages/oasis-engine/src/index.ts | 2 + packages/physics-lite/package.json | 4 +- packages/physics-physx/package.json | 4 +- 6 files changed, 236 insertions(+), 22 deletions(-) create mode 100644 packages/core/src/2d/text/TextUtils.ts diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 5e0aa84aa9..6029f0afd2 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -2,11 +2,20 @@ import { BoundingBox } from "@oasis-engine/math"; import { Camera } from "../../Camera"; import { assignmentClone, ignoreClone } from "../../clone/CloneManager"; import { Entity } from "../../Entity"; +import { Texture2D } from "../../texture"; import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; -import { SpriteRenderer } from "../sprite"; +import { Sprite, SpriteRenderer } from "../sprite"; +import { TextUtils } from "./TextUtils"; export class TextRenderer extends SpriteRenderer { + /** @internal */ + @ignoreClone + _canvas: HTMLCanvasElement; + /** @internal */ + @ignoreClone + _context: CanvasRenderingContext2D; + @assignmentClone private _text: string = ""; @assignmentClone @@ -14,13 +23,13 @@ export class TextRenderer extends SpriteRenderer { @assignmentClone private _height: number = 0; @assignmentClone - private _font: string = "Arial"; + private _fontName: string = "Arial"; @assignmentClone private _fontSize: number = 24; @assignmentClone private _lineHeight: number = 1; @assignmentClone - private _isBolb: boolean = false; + private _isBold: boolean = false; @assignmentClone private _isItalic: boolean = false; @assignmentClone @@ -71,14 +80,14 @@ export class TextRenderer extends SpriteRenderer { } } - get font(): string { - return this._font; + get fontName(): string { + return this._fontName; } - set font(value: string) { + set fontName(value: string) { value = value || "Arial"; - if (this._font !== value) { - this._font = value; + if (this._fontName !== value) { + this._fontName = value; this._styleDirtyFlag = true; } } @@ -105,13 +114,13 @@ export class TextRenderer extends SpriteRenderer { } } - get isBolb(): boolean { - return this._isBolb; + get isBold(): boolean { + return this._isBold; } - set isBolb(value: boolean) { - if (this._isBolb !== value) { - this._isBolb = value; + set isBold(value: boolean) { + if (this._isBold !== value) { + this._isBold = value; this._styleDirtyFlag = true; } } @@ -173,12 +182,24 @@ export class TextRenderer extends SpriteRenderer { constructor(entity: Entity) { super(entity); + + const canvas = this._canvas = document.createElement("canvas"); + this._context = canvas.getContext("2d"); + canvas.width = canvas.height = 1; + + this.sprite = new Sprite(this.engine); } /** * @internal */ - _render(camera: Camera): void {} + _render(camera: Camera): void { + if (this._styleDirtyFlag) { + this._updateText(); + } + + super._render(camera); + } /** * @override @@ -190,13 +211,44 @@ export class TextRenderer extends SpriteRenderer { const worldMatrix = this._customRootEntity.transform.worldMatrix; BoundingBox.transform(this._customLocalBounds, worldMatrix, worldBounds); } else { - // const localBounds = sprite.bounds; - // const worldMatrix = this._entity.transform.worldMatrix; - // BoundingBox.transform(localBounds, worldMatrix, worldBounds); + const localBounds = sprite.bounds; + const worldMatrix = this._entity.transform.worldMatrix; + BoundingBox.transform(localBounds, worldMatrix, worldBounds); } } else { worldBounds.min.setValue(0, 0, 0); worldBounds.max.setValue(0, 0, 0); } } + + private _getFontString() { + let str = ""; + if (this.isBold) { + str += "bold "; + } + if (this.isItalic) { + str += "italic "; + } + str += `${this._fontSize}px ${this._fontName}`; + return str; + } + + private _updateText() { + const fontStr = this._getFontString(); + TextUtils.measureText(this, fontStr); + this._updateTexture(); + } + + private _updateTexture() { + const { _canvas: canvas } = this; + const trimData = TextUtils.trimCanvas(this); + const { width, height } = trimData; + canvas.width = width; + canvas.height = height; + this._context.putImageData(trimData.data, 0, 0); + const texture = new Texture2D(this.engine, width, height); + texture.setImageSource(canvas); + texture.generateMipmaps(); + this.sprite.texture = texture; + } } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts new file mode 100644 index 0000000000..869429a172 --- /dev/null +++ b/packages/core/src/2d/text/TextUtils.ts @@ -0,0 +1,160 @@ +import { TextRenderer } from "./TextRenderer"; + +interface TextContext { + canvas: HTMLCanvasElement; + context: CanvasRenderingContext2D; +} + +export class TextUtils { + public static TEST_STRING = "qpjÉÅ"; + public static TEST_BASELINE = "M"; + public static HEIGHT_MULTIPLIER = 2; + public static BASELINE_MULTIPLIER = 1.4; + + public static fontSizes: { [font: string]: number } = {}; + private static _textContext: TextContext = null; + + public static textContext(): TextContext { + if (!TextUtils._textContext) { + const canvas = document.createElement("canvas"); + TextUtils._textContext = { + canvas: canvas, + context: canvas.getContext("2d") + }; + } + + return TextUtils._textContext; + } + + public static measureFont(font: string): number { + const { fontSizes } = TextUtils; + if (fontSizes[font]) { + return fontSizes[font]; + } + + const { canvas, context } = TextUtils.textContext(); + context.font = font; + const testStr = TextUtils.TEST_STRING; + const width = Math.ceil(context.measureText(testStr).width); + let baseline = Math.ceil(context.measureText(TextUtils.TEST_BASELINE).width); + const height = baseline * TextUtils.HEIGHT_MULTIPLIER; + baseline = Math.floor(TextUtils.BASELINE_MULTIPLIER * baseline); + + canvas.width = width; + canvas.height = height; + + context.font = font; + context.fillStyle = "#000"; + context.clearRect(0, 0, width, height); + context.textBaseline = "alphabetic"; + context.fillStyle = "#f00"; + context.fillText(testStr, 0, baseline); + + const imgData = context.getImageData(0, 0, width, height).data; + const lineDataCount = width * 4; + let flag = false; + let i = 0; + let startIndex = 0; + + for (i = 0; i < baseline; ++i) { + startIndex = i * lineDataCount; + for (let j = 0; j < lineDataCount; j += 4) { + if (imgData[startIndex + j] !== 0) { + flag = true; + break; + } + } + if (flag) { + break; + } + } + + const ascent = baseline - i; + flag = false; + + for (i = height - 1; i >= baseline; --i) { + startIndex = i * lineDataCount; + for (let j = 0; j < lineDataCount; j += 4) { + if (imgData[startIndex + j] !== 255) { + flag = true; + break; + } + } + if (flag) { + break; + } + } + + const descent = i - baseline + 1; + const fontSize = ascent + descent; + TextUtils.fontSizes[font] = fontSize; + return fontSize; + } + + public static measureText(textRenderer: TextRenderer, fontStr: string): void { + const fontSize = TextUtils.measureFont(fontStr); + const { _canvas: canvas, _context: context, text } = textRenderer; + context.font = fontStr; + const width = Math.ceil(context.measureText(text || "").width); + canvas.width = width; + canvas.height = fontSize; + context.font = fontStr; + context.clearRect(0, 0, width, fontSize); + context.textBaseline = "top"; + context.fillText(text, 0, 0); + } + + public static trimCanvas(textRenderer: TextRenderer): { width: number; height: number; data?: ImageData } { + // https://gist.github.com/remy/784508 + + let { width, height } = textRenderer._canvas; + const { _context: context } = textRenderer; + + const imageData = context.getImageData(0, 0, width, height).data; + const len = imageData.length; + + let top = -1; + let bottom = -1; + let left = -1; + let right = -1; + let data = null; + let x; + let y; + + for (let i = 0; i < len; i += 4) { + if (imageData[i + 3] !== 0) { + const idx = i / 4; + x = idx % width; + y = ~~(idx / width); + + if (top === -1) { + top = y; + } + + if (left === -1 || x < left) { + left = x; + } + + if (right === null || x > right) { + right = x; + } + + if (bottom === null || y > bottom) { + bottom = y; + } + } + } + + if (top !== -1) { + width = right - left + 1; + height = bottom - top + 1; + data = context.getImageData(left, top, width, height); + } + + return { + width, + height, + data + }; + } +} diff --git a/packages/design/package.json b/packages/design/package.json index 6e45b5c7f8..6b7d11d0de 100755 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -13,6 +13,6 @@ ], "types": "types/index.d.ts", "dependencies": { - "@oasis-engine/math": "0.5.2" + "@oasis-engine/math": "0.5.7" } } diff --git a/packages/oasis-engine/src/index.ts b/packages/oasis-engine/src/index.ts index 9da430151f..4fcf81b3af 100644 --- a/packages/oasis-engine/src/index.ts +++ b/packages/oasis-engine/src/index.ts @@ -11,6 +11,7 @@ import { PointLight, SpriteRenderer, SpriteMask, + TextRenderer, Animator, StaticCollider, DynamicCollider @@ -21,6 +22,7 @@ Parser.registerComponents("o3", { GLTFModel, SpriteRenderer, SpriteMask, + TextRenderer, PointLight, AmbientLight, DirectLight, diff --git a/packages/physics-lite/package.json b/packages/physics-lite/package.json index 617bb189b9..05173e1b15 100644 --- a/packages/physics-lite/package.json +++ b/packages/physics-lite/package.json @@ -14,7 +14,7 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.5.6", - "@oasis-engine/math": "0.5.6" + "@oasis-engine/design": "0.5.7", + "@oasis-engine/math": "0.5.7" } } diff --git a/packages/physics-physx/package.json b/packages/physics-physx/package.json index b6715f440a..16c12d8192 100644 --- a/packages/physics-physx/package.json +++ b/packages/physics-physx/package.json @@ -14,7 +14,7 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.5.6", - "@oasis-engine/math": "0.5.6" + "@oasis-engine/design": "0.5.7", + "@oasis-engine/math": "0.5.7" } } From 1a0105a14864ce6fec98d684173303fa6074c71d Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 2 Nov 2021 19:10:10 +0800 Subject: [PATCH 04/91] feat(text): fix black border --- packages/core/src/2d/text/TextUtils.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 869429a172..cf8401c6c1 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -146,6 +146,10 @@ export class TextUtils { } if (top !== -1) { + top = Math.max(0, top - 1); + bottom = Math.min(height - 1, bottom + 1); + left = Math.max(0, left - 1); + right = Math.min(width - 1, right + 1); width = right - left + 1; height = bottom - top + 1; data = context.getImageData(left, top, width, height); From e57fdf9b395a256900ed2d3bd830f4ff2b32ac38 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 4 Nov 2021 16:41:17 +0800 Subject: [PATCH 05/91] feat(text): opt canvas for 2d --- packages/core/src/2d/text/TextRenderer.ts | 23 ++++++------- packages/core/src/2d/text/TextUtils.ts | 39 ++++++++++++++++++----- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 6029f0afd2..664dc51744 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -9,13 +9,6 @@ import { Sprite, SpriteRenderer } from "../sprite"; import { TextUtils } from "./TextUtils"; export class TextRenderer extends SpriteRenderer { - /** @internal */ - @ignoreClone - _canvas: HTMLCanvasElement; - /** @internal */ - @ignoreClone - _context: CanvasRenderingContext2D; - @assignmentClone private _text: string = ""; @assignmentClone @@ -183,9 +176,9 @@ export class TextRenderer extends SpriteRenderer { constructor(entity: Entity) { super(entity); - const canvas = this._canvas = document.createElement("canvas"); - this._context = canvas.getContext("2d"); - canvas.width = canvas.height = 1; + // const canvas = this._canvas = document.createElement("canvas"); + // this._context = canvas.getContext("2d"); + // canvas.width = canvas.height = 1; this.sprite = new Sprite(this.engine); } @@ -196,6 +189,7 @@ export class TextRenderer extends SpriteRenderer { _render(camera: Camera): void { if (this._styleDirtyFlag) { this._updateText(); + this._styleDirtyFlag = false; } super._render(camera); @@ -235,17 +229,18 @@ export class TextRenderer extends SpriteRenderer { private _updateText() { const fontStr = this._getFontString(); - TextUtils.measureText(this, fontStr); + TextUtils.measureText(TextUtils.textContext(), this, fontStr); this._updateTexture(); } private _updateTexture() { - const { _canvas: canvas } = this; - const trimData = TextUtils.trimCanvas(this); + const textContext = TextUtils.textContext(); + const { canvas, context } = textContext; + const trimData = TextUtils.trimCanvas(textContext); const { width, height } = trimData; canvas.width = width; canvas.height = height; - this._context.putImageData(trimData.data, 0, 0); + context.putImageData(trimData.data, 0, 0); const texture = new Texture2D(this.engine, width, height); texture.setImageSource(canvas); texture.generateMipmaps(); diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index cf8401c6c1..82e8e162f4 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -26,13 +26,13 @@ export class TextUtils { return TextUtils._textContext; } - public static measureFont(font: string): number { + public static measureFont(textContext: TextContext, font: string): number { const { fontSizes } = TextUtils; if (fontSizes[font]) { return fontSizes[font]; } - const { canvas, context } = TextUtils.textContext(); + const { canvas, context } = textContext; context.font = font; const testStr = TextUtils.TEST_STRING; const width = Math.ceil(context.measureText(testStr).width); @@ -91,9 +91,11 @@ export class TextUtils { return fontSize; } - public static measureText(textRenderer: TextRenderer, fontStr: string): void { - const fontSize = TextUtils.measureFont(fontStr); - const { _canvas: canvas, _context: context, text } = textRenderer; + public static measureText(textContext: TextContext, textRenderer: TextRenderer, fontStr: string): void { + const fontSize = TextUtils.measureFont(textContext, fontStr); + // const wrappedTexts = TextUtils._wordWrap(textRenderer, fontStr); + const { text } = textRenderer; + const { canvas, context } = textContext; context.font = fontStr; const width = Math.ceil(context.measureText(text || "").width); canvas.width = width; @@ -101,14 +103,15 @@ export class TextUtils { context.font = fontStr; context.clearRect(0, 0, width, fontSize); context.textBaseline = "top"; + context.fillStyle = '#000'; context.fillText(text, 0, 0); } - public static trimCanvas(textRenderer: TextRenderer): { width: number; height: number; data?: ImageData } { + public static trimCanvas(textContext: TextContext): { width: number; height: number; data?: ImageData } { // https://gist.github.com/remy/784508 - let { width, height } = textRenderer._canvas; - const { _context: context } = textRenderer; + const { canvas, context } = textContext; + let { width, height } = canvas; const imageData = context.getImageData(0, 0, width, height).data; const len = imageData.length; @@ -161,4 +164,24 @@ export class TextUtils { data }; } + + private static _wordWrap(textRenderer: TextRenderer, fontStr: string): Array { + const { context } = TextUtils.textContext(); + const { text, width, height, horizontalOverflow, verticalOverflow } = textRenderer; + const output: Array = []; + context.font = fontStr; + const textArr = text.split("\n"); + + for (let i = 0, l = textArr.length; i < l; ++i) { + const curText = textArr[i]; + const curWidth = Math.ceil(context.measureText(curText).width); + if (curWidth < width) { + output.push(curText); + } else { + + } + } + + return output; + } } From 1a0862de4b726dfceec26f2142a2d47d91e8ec16 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 5 Nov 2021 15:28:46 +0800 Subject: [PATCH 06/91] feat(text): opt text color --- packages/core/src/2d/text/TextUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 82e8e162f4..04556d87a6 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -103,7 +103,7 @@ export class TextUtils { context.font = fontStr; context.clearRect(0, 0, width, fontSize); context.textBaseline = "top"; - context.fillStyle = '#000'; + context.fillStyle = '#fff'; context.fillText(text, 0, 0); } From 359ba5f1819c38cb0830743010dfae6966111b69 Mon Sep 17 00:00:00 2001 From: GuoLei Date: Thu, 11 Nov 2021 12:45:07 +0800 Subject: [PATCH 07/91] merge main (#576) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: solve math design circular dependency (#485) * feat: solve math design cirular dependency * Revert "feat: solve math design circular dependency (#485)" (#487) This reverts commit df25f0312fbc9d025bb57e3cfe124ac141ef7c82. * feat: add rotateAxisAngle for Quaternion (#480) * feat: add rotateAxisAngle for Quaternion * refactor: delete useless scene raycast (#493) * fix: group other uniform block (#504) * fix(primitivemesh): fix cylinder error (#526) * Perf: release gpu command (#503) * perf: release viewport gpu command * perf: release clearColor gpu command * fix: reset clipTime (#530) * fix: reset clipTime * fix: use string replace asset type to extend easily (#520) * Fix/animator (#531) * fix: animator bug * Update README.md * Fix: cubic interpolation and crossfade bug: From fixed pose to dest pose, throw error. (#534) * fix: Animator bug * v0.5.3 * v0.5.4 * v0.5.5 * v0.5.6 * fix(2d): opt shader precision (#542) * fix: delete default gl state (#550) Co-authored-by: shensi.zxd * fix(gl): fix gl error (#555) * v0.5.7 * Fix Call EndRender Error (#563) * fix: onEndRender trigger error * feat: support skybox with hdr(rgbe) format (#567) * feat: add rgbm decode mode * fix: color space correction (#566) * fix: color space correction * fix: bump version (#568) * feat: change clipTime to normalized as same as transitionTime for mo… (#560) * feat: change clipTime to normalized as same as transitionTime for more understandable * Update README.md * Update README.md * Update README.md * feat: add method: addEvent overload (#559) * feat: support ambient-light replacement (#569) * feat: support ambient-light replacement Co-authored-by: shensi.zxd Co-authored-by: GuoLei * Feat/ambient light adapter editor (#570) * feat: adapter oasis editor with ambient light * feat: add getCurrentAnimatorState API and fix crossfade time (#565) * fix: use alipay cdn for physx wasm (#571) * add wasm file (#572) * fix: use alipay cdn for physx wasm * fix: include wasm files * Fix : the compatibility problem of IOS lower version (#573) * fix: the compatibility problem of IOS lower version * Merge dev/0.6 branch (#574) * feat: solve math design circular dependency (#488) * feat: solve math design cirular dependency * PhysX based raycast and collider (#505) * feat: add physx version raycast and trigger * feat: add trigger event in script * feat: Add InputManager (#497) * feat: add InputManager * Fix InputManager's Bug which will be triggered when there is no physics engine. (#524) * fix:InputManager modify timing * Lite Physics Package (#522) * feat: add physics lite package * Refactor: split pbr shader (#514) * refactor: pbr shader clean up * feat: add createCapsule in PrimitiveMesh (#515) * feat: add createCapsule in PrimitiveMesh * Feat: support read/write mipmap data from textures and render target (#382) * feat: support render to mip level * feat: support reading from texture with mip level * Feat: hdr runtime (#523) * feat: support IBL HDR Specular * perf: plane horizontal default (#535) * perf(plane): plane horizontal default * fix(plane): fix cull face (#537) * fix(plane): fix uv error (#538) * feat: add more uv channel and color (#548) * Feat: Sprite add clone function. (#532) * feat: sprite add clone function * Add color space (#543) * feat: add engine settings * fix: opt code (#519) * feat: modify physics-related class for editor (#547) * feat: modify physics-related class for editor * Merge main to dev/0.6 (#553) * refactor: merge main to dev/0.6 * fix: bump verison (#557) Co-authored-by: shensi.zxd * fix: shader error (#556) Co-authored-by: shensi.zxd * feat/add AnimatorState script for handle animatorState's lifecycle (#552) * feat: add `StateMachineScript` * feat: support skybox with hdr(rgbe) format (#567) * feat: add rgbm decode mode * fix: color space correction (#566) * fix: color space correction * fix: bump version (#568) * feat: change clipTime to normalized as same as transitionTime for mo… (#560) * feat: change clipTime to normalized as same as transitionTime for more understandable * feat: add method: addEvent overload (#559) * feat: support ambient-light replacement (#569) * feat: support ambient-light replacement Co-authored-by: shensi.zxd Co-authored-by: GuoLei * Feat/ambient light adapter editor (#570) * feat: adapter oasis editor with ambient light * feat: add getCurrentAnimatorState API and fix crossfade time (#565) * fix: use alipay cdn for physx wasm (#571) * add wasm file (#572) * fix: use alipay cdn for physx wasm * fix: include wasm files * Fix : the compatibility problem of IOS lower version (#573) * fix: the compatibility problem of IOS lower version Co-authored-by: yangfengzzz Co-authored-by: AZhan Co-authored-by: zhuxudong Co-authored-by: JujieX <67930474+JujieX@users.noreply.github.com> Co-authored-by: singlecoder Co-authored-by: shensi.zxd Co-authored-by: luzhuang <364439895@qq.com> * v0.6.0-alpha.0 * refactor: fix physics package.json * refactor: fix physics package.json (#575) * v0.6.0-alpha.1 Co-authored-by: yangfengzzz Co-authored-by: JujieX <67930474+JujieX@users.noreply.github.com> Co-authored-by: Hu Song Co-authored-by: zhuxudong Co-authored-by: singlecoder Co-authored-by: luzhuang <364439895@qq.com> Co-authored-by: Bob <768442443@qq.com> Co-authored-by: shensi.zxd Co-authored-by: AZhan --- README.md | 2 +- lerna.json | 2 +- packages/controls/package.json | 4 +- packages/core/package.json | 6 +-- packages/core/src/ComponentsManager.ts | 2 +- packages/core/src/Scene.ts | 26 ++++++++++-- packages/core/src/animation/AnimationClip.ts | 23 ++++++++++- packages/core/src/animation/Animator.ts | 36 ++++++++++++---- packages/core/src/animation/AnimatorState.ts | 18 ++++---- .../internal/AnimatorStatePlayData.ts | 6 +-- .../core/src/input/pointer/PointerManager.ts | 4 +- packages/core/src/lighting/AmbientLight.ts | 31 ++++++++++---- packages/core/src/shader/ShaderUniform.ts | 2 +- .../core/src/shaderlib/begin_mobile_frag.glsl | 21 +++++++--- packages/core/src/shaderlib/common.glsl | 14 ++++++- .../src/shaderlib/extra/blinn-phong.fs.glsl | 4 +- .../core/src/shaderlib/extra/skybox.fs.glsl | 12 +++++- .../core/src/shaderlib/extra/unlit.fs.glsl | 12 +++++- .../src/shaderlib/pbr/ibl_frag_define.glsl | 2 +- packages/core/src/shaderlib/pbr/pbr_frag.glsl | 8 ++-- .../core/src/shaderlib/pbr/pbr_helper.glsl | 12 ------ packages/core/src/sky/SkyBoxMaterial.ts | 39 +++++++++++++++--- packages/design/package.json | 2 +- packages/draco/package.json | 4 +- packages/framebuffer-picker/package.json | 4 +- packages/loader/package.json | 10 ++--- .../src/scene-loader/ResourceManager.ts | 6 ++- .../resources/AmbientLightResource.ts | 27 ++++++++++++ .../resources/AnimatorControllerResource.ts | 4 +- .../src/scene-loader/resources/index.ts | 1 + .../src/scene-loader/temp.compatible.ts | 7 +--- packages/math/package.json | 4 +- packages/oasis-engine/package.json | 10 ++--- packages/physics-lite/package.json | 9 ++-- .../physics-lite/src/LitePhysicsManager.ts | 16 +++---- packages/physics-physx/dist/physx.release.js | 21 ++++++++++ .../physics-physx/dist/physx.release.wasm | Bin 0 -> 2465815 bytes packages/physics-physx/package.json | 9 ++-- packages/physics-physx/src/PhysXCollider.ts | 2 +- packages/physics-physx/src/PhysXPhysics.ts | 4 +- packages/rhi-webgl/package.json | 8 ++-- packages/rhi-webgl/src/WebGLRenderer.ts | 4 +- packages/stats/package.json | 4 +- 43 files changed, 313 insertions(+), 129 deletions(-) create mode 100644 packages/loader/src/scene-loader/resources/AmbientLightResource.ts create mode 100644 packages/physics-physx/dist/physx.release.js create mode 100755 packages/physics-physx/dist/physx.release.wasm diff --git a/README.md b/README.md index 2302cc9974..8eabb07042 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ import { Engine, Scene, Entity } from "oasis-engine"; Everyone is welcome to join us! Whether you find a bug, have a great feature request or you fancy owning a task from the road map feel free to get in touch. -Make sure to read the [Contributing Guide](.github/HOW_TO_CONTRIBUTE.md) before submitting changes. +Make sure to read the [Contributing Guide](.github/HOW_TO_CONTRIBUTE.md) / [贡献指南](https://github.com/oasis-engine/engine/wiki/%E5%A6%82%E4%BD%95%E4%B8%8E%E6%88%91%E4%BB%AC%E5%85%B1%E5%BB%BA-Oasis-%E5%BC%80%E6%BA%90%E4%BA%92%E5%8A%A8%E5%BC%95%E6%93%8E) before submitting changes. ## Build diff --git a/lerna.json b/lerna.json index 97f7227cec..1b07b03727 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "npmClient": "npm", - "version": "0.5.7", + "version": "0.6.0-alpha.1", "bootstrap": { "hoist": true }, diff --git a/packages/controls/package.json b/packages/controls/package.json index 9ff9048860..8357f448fc 100644 --- a/packages/controls/package.json +++ b/packages/controls/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/controls", - "version": "0.5.7", + "version": "0.6.0-alpha.1", "license": "MIT", "scripts": { "b:types": "tsc", @@ -15,6 +15,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.5.7" + "oasis-engine": "0.6.0-alpha.1" } } diff --git a/packages/core/package.json b/packages/core/package.json index f3a44673cc..65ae8795b9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/core", - "version": "0.5.7", + "version": "0.6.0-alpha.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/math": "0.5.7" + "@oasis-engine/math": "0.6.0-alpha.1" }, "devDependencies": { - "@oasis-engine/design": "0.5.7" + "@oasis-engine/design": "0.6.0-alpha.1" } } diff --git a/packages/core/src/ComponentsManager.ts b/packages/core/src/ComponentsManager.ts index 79a12e5247..6e37ffa600 100644 --- a/packages/core/src/ComponentsManager.ts +++ b/packages/core/src/ComponentsManager.ts @@ -235,7 +235,7 @@ export class ComponentsManager { const camComps = camera.entity._components; for (let i = camComps.length - 1; i >= 0; --i) { const camComp = camComps[i]; - (camComp as any).onBeginRender && (camComp as any).onEndRender(camera); + (camComp as any).onEndRender && (camComp as any).onEndRender(camera); } } diff --git a/packages/core/src/Scene.ts b/packages/core/src/Scene.ts index 51a2f0249a..ab9e072410 100644 --- a/packages/core/src/Scene.ts +++ b/packages/core/src/Scene.ts @@ -19,8 +19,6 @@ export class Scene extends EngineObject { /** Scene name. */ name: string; - /** Ambient light. */ - ambientLight: AmbientLight; /** The background of the scene. */ readonly background: Background = new Background(this._engine); @@ -37,6 +35,28 @@ export class Scene extends EngineObject { private _destroyed: boolean = false; private _rootEntities: Entity[] = []; + private _ambientLight: AmbientLight; + + /** + * Ambient light. + */ + get ambientLight(): AmbientLight { + return this._ambientLight; + } + + set ambientLight(value: AmbientLight) { + if (!value) { + Logger.warn("The scene must have one ambient light"); + return; + } + + const lastAmbientLight = this._ambientLight; + if (lastAmbientLight !== value) { + lastAmbientLight && lastAmbientLight._setScene(null); + value._setScene(this); + this._ambientLight = value; + } + } /** * Count of root entities. @@ -71,7 +91,7 @@ export class Scene extends EngineObject { const shaderData = this.shaderData; Scene.sceneFeatureManager.addObject(this); shaderData._addRefCount(1); - this.ambientLight = new AmbientLight(this); + this.ambientLight = new AmbientLight(); } /** diff --git a/packages/core/src/animation/AnimationClip.ts b/packages/core/src/animation/AnimationClip.ts index 77a81d195a..b7f8280c88 100644 --- a/packages/core/src/animation/AnimationClip.ts +++ b/packages/core/src/animation/AnimationClip.ts @@ -46,12 +46,31 @@ export class AnimationClip extends Motion { super(); } + /** + * Adds an animation event to the clip. + * @param functionName - The name of the method called in the script + * @param time - The time when the event be triggered + * @param parameter - The parameter that is stored in the event and will be sent to the function + */ + addEvent(functionName: string, time: number, parameter: Object): void; + /** * Adds an animation event to the clip. * @param event - The animation event */ - addEvent(event: AnimationEvent): void { - this._events.push(event); + addEvent(event: AnimationEvent): void; + + + addEvent(param: AnimationEvent | string, time?: number, parameter?: Object): void { + if (typeof param === 'string') { + const event = new AnimationEvent(); + event.functionName = param; + event.time = time; + event.parameter = parameter; + this._events.push(event); + } else { + this._events.push(param); + } this._events.sort((a, b) => a.time - b.time); } diff --git a/packages/core/src/animation/Animator.ts b/packages/core/src/animation/Animator.ts index 2a12e48ba2..1f2f13ae91 100644 --- a/packages/core/src/animation/Animator.ts +++ b/packages/core/src/animation/Animator.ts @@ -171,6 +171,14 @@ export class Animator extends Component { } } + /** + * Get the playing state from the target layerIndex. + * @param layerIndex - The layer index + */ + getCurrentAnimatorState(layerIndex: number) { + return this._animatorLayersData[layerIndex]?.srcPlayData?.state; + } + /** * @override * @internal @@ -490,9 +498,15 @@ export class Animator extends Component { let crossWeight = destPlayData.frameTime / (destState._getDuration() * layerData.crossFadeTransition.duration); crossWeight >= 1.0 && (crossWeight = 1.0); + srcPlayData.update(); destPlayData.update(); + const { playState: srcPlayState } = srcPlayData; + const { playState: destPlayState } = destPlayData; + + this._updateCrossFadeData(layerData, crossWeight, delta, false); + const { clipTime: srcClipTime } = srcPlayData; const { clipTime: destClipTime } = destPlayData; @@ -503,7 +517,7 @@ export class Animator extends Component { if (lastSrcPlayState === AnimatorStatePlayState.UnStarted) { this._callAnimatorScriptOnEnter(srcState, layerIndex); } - if (crossWeight === 1 || srcPlayData.playState === AnimatorStatePlayState.Finished) { + if (crossWeight === 1 || srcPlayState === AnimatorStatePlayState.Finished) { this._callAnimatorScriptOnExit(srcState, layerIndex); } else { this._callAnimatorScriptOnUpdate(srcState, layerIndex); @@ -512,7 +526,7 @@ export class Animator extends Component { if (lastDstPlayState === AnimatorStatePlayState.UnStarted) { this._callAnimatorScriptOnEnter(destState, layerIndex); } - if (destPlayData.playState === AnimatorStatePlayState.Finished) { + if (destPlayState === AnimatorStatePlayState.Finished) { this._callAnimatorScriptOnExit(destState, layerIndex); } else { this._callAnimatorScriptOnUpdate(destState, layerIndex); @@ -533,7 +547,6 @@ export class Animator extends Component { this._applyCrossClipValue(curveOwner, srcValue, destValue, crossWeight, weight, additive); } - this._updateCrossFadeData(layerData, crossWeight, delta, false); } private _updateCrossFadeFromPose( @@ -552,16 +565,21 @@ export class Animator extends Component { let crossWeight = destPlayData.frameTime / (state._getDuration() * layerData.crossFadeTransition.duration); crossWeight >= 1.0 && (crossWeight = 1.0); + destPlayData.update(); + const { playState } = destPlayData; + + this._updateCrossFadeData(layerData, crossWeight, delta, true); + const { clipTime: destClipTime } = destPlayData; eventHandlers.length && this._fireAnimationEvents(destPlayData, eventHandlers, lastDestClipTime, destClipTime); - + if (lastPlayState === AnimatorStatePlayState.UnStarted) { this._callAnimatorScriptOnEnter(state, layerIndex); } - if (destPlayData.playState === AnimatorStatePlayState.Finished) { + if (playState === AnimatorStatePlayState.Finished) { this._callAnimatorScriptOnExit(state, layerIndex); } else { this._callAnimatorScriptOnUpdate(state, layerIndex); @@ -576,8 +594,6 @@ export class Animator extends Component { this._applyCrossClipValue(curveOwner, curveOwner.fixedPoseValue, destValue, crossWeight, weight, additive); } - - this._updateCrossFadeData(layerData, crossWeight, delta, true); } private _updateCrossFadeData(layerData: AnimatorLayerData, crossWeight: number, delta: number, fixed: boolean): void { @@ -793,11 +809,13 @@ export class Animator extends Component { lastClipTime: number, clipTime: number ): void { + const { state } = playState; + const clipDuration = state.clip.length; // TODO: If play backward, not work. if (clipTime < lastClipTime) { - this._fireSubAnimationEvents(playState, eventHandlers, lastClipTime, playState.state.clipEndTime); + this._fireSubAnimationEvents(playState, eventHandlers, lastClipTime, state.clipEndTime * clipDuration); playState.currentEventIndex = 0; - this._fireSubAnimationEvents(playState, eventHandlers, playState.state.clipStartTime, clipTime); + this._fireSubAnimationEvents(playState, eventHandlers, state.clipStartTime * clipDuration, clipTime); } else { this._fireSubAnimationEvents(playState, eventHandlers, lastClipTime, clipTime); } diff --git a/packages/core/src/animation/AnimatorState.ts b/packages/core/src/animation/AnimatorState.ts index cfe4299099..032e7272ea 100644 --- a/packages/core/src/animation/AnimatorState.ts +++ b/packages/core/src/animation/AnimatorState.ts @@ -20,7 +20,7 @@ export class AnimatorState { _onStateExitScripts: StateMachineScript[] = []; private _clipStartTime: number = 0; - private _clipEndTime: number = Infinity; + private _clipEndTime: number = 1; private _clip: AnimationClip; private _transitions: AnimatorStateTransition[] = []; @@ -44,28 +44,25 @@ export class AnimatorState { } /** - * The clip start time the user set , default is 0. + * The start time of the clip, the range is 0 to 1, default is 0. */ get clipStartTime() { return this._clipStartTime; } set clipStartTime(time: number) { - this._clipStartTime = time < 0 ? 0 : time; + this._clipStartTime = Math.max(time, 0); } /** - * The clip end time the user set , default is the clip duration. + * The start time of the clip, the range is 0 to 1, default is 1. */ get clipEndTime() { return this._clipEndTime; } set clipEndTime(time: number) { - const clip = this._clip; - if (clip) { - this._clipEndTime = Math.min(time, clip.length); - } + this._clipEndTime = Math.min(time, 1); } /** @@ -123,7 +120,10 @@ export class AnimatorState { * @internal */ _getDuration(): number { - return this._clipEndTime - this._clipStartTime; + if (this.clip) { + return (this._clipEndTime - this._clipStartTime) * this.clip.length; + } + return null; } /** diff --git a/packages/core/src/animation/internal/AnimatorStatePlayData.ts b/packages/core/src/animation/internal/AnimatorStatePlayData.ts index 69116512ab..eddc51169d 100644 --- a/packages/core/src/animation/internal/AnimatorStatePlayData.ts +++ b/packages/core/src/animation/internal/AnimatorStatePlayData.ts @@ -19,14 +19,14 @@ export class AnimatorStatePlayData { this.frameTime = offsetFrameTime; this.stateData = stateData; this.playState = AnimatorStatePlayState.UnStarted; - this.clipTime = this.state.clipStartTime; + this.clipTime = state.clipStartTime * state.clip.length; this.currentEventIndex = 0; } update(): void { const state = this.state; let time = this.frameTime; - const duration = state.clipEndTime - state.clipStartTime; + const duration = state._getDuration(); this.playState = AnimatorStatePlayState.Playing; if (time > duration) { if (state.wrapMode === WrapMode.Loop) { @@ -36,6 +36,6 @@ export class AnimatorStatePlayData { this.playState = AnimatorStatePlayState.Finished; } } - this.clipTime = time + this.state.clipStartTime; + this.clipTime = time + state.clipStartTime * state.clip.length; } } diff --git a/packages/core/src/input/pointer/PointerManager.ts b/packages/core/src/input/pointer/PointerManager.ts index 0fc418e558..0def097e52 100644 --- a/packages/core/src/input/pointer/PointerManager.ts +++ b/packages/core/src/input/pointer/PointerManager.ts @@ -48,8 +48,8 @@ export class PointerManager { htmlCanvas.onpointerdown = htmlCanvas.onpointerup = htmlCanvas.onpointerout = htmlCanvas.onpointermove = (evt:PointerEvent)=>{ this._nativeEvents.push(evt); }; - // MaxTouchCount + MouseCount(1) - this._pointerPool = new Array(navigator.maxTouchPoints + 1); + // If there are no compatibility issues, navigator.maxTouchPoints should be used here. + this._pointerPool = new Array(11); this._enablePhysics = engine.physicsManager ? true : false; } diff --git a/packages/core/src/lighting/AmbientLight.ts b/packages/core/src/lighting/AmbientLight.ts index 645fb2051b..5f199714b7 100644 --- a/packages/core/src/lighting/AmbientLight.ts +++ b/packages/core/src/lighting/AmbientLight.ts @@ -22,7 +22,6 @@ export class AmbientLight { ); private static _mipLevelProperty: ShaderProperty = Shader.getPropertyByName("u_envMapLight.mipMapLevel"); - private _scene: Scene; private _diffuseSphericalHarmonics: SphericalHarmonics3; private _diffuseSolidColor: Color = new Color(0.212, 0.227, 0.259); private _diffuseIntensity: number = 1.0; @@ -30,6 +29,7 @@ export class AmbientLight { private _specularIntensity: number = 1.0; private _diffuseMode: DiffuseMode = DiffuseMode.SolidColor; private _shArray: Float32Array = new Float32Array(27); + private _scene: Scene; /** * Diffuse mode of ambient light. @@ -40,6 +40,8 @@ export class AmbientLight { set diffuseMode(value: DiffuseMode) { this._diffuseMode = value; + if (!this._scene) return; + if (value === DiffuseMode.SphericalHarmonics) { this._scene.shaderData.enableMacro(AmbientLight._shMacro); } else { @@ -71,10 +73,10 @@ export class AmbientLight { set diffuseSphericalHarmonics(value: SphericalHarmonics3) { this._diffuseSphericalHarmonics = value; - const shaderData = this._scene.shaderData; + if (!this._scene) return; if (value) { - shaderData.setFloatArray(AmbientLight._diffuseSHProperty, this._preComputeSH(value, this._shArray)); + this._scene.shaderData.setFloatArray(AmbientLight._diffuseSHProperty, this._preComputeSH(value, this._shArray)); } } @@ -87,6 +89,8 @@ export class AmbientLight { set diffuseIntensity(value: number) { this._diffuseIntensity = value; + if (!this._scene) return; + this._scene.shaderData.setFloat(AmbientLight._diffuseIntensityProperty, value); } @@ -100,6 +104,7 @@ export class AmbientLight { set specularTexture(value: TextureCubeMap) { this._specularReflection = value; + if (!this._scene) return; const shaderData = this._scene.shaderData; @@ -121,16 +126,26 @@ export class AmbientLight { set specularIntensity(value: number) { this._specularIntensity = value; + if (!this._scene) return; + this._scene.shaderData.setFloat(AmbientLight._specularIntensityProperty, value); } - constructor(scene: Scene) { - this._scene = scene; + /** + * @internal + */ + _setScene(value: Scene) { + this._scene = value; + if (!value) return; - const { shaderData } = this._scene; + const { shaderData } = value; shaderData.setColor(AmbientLight._diffuseColorProperty, this._diffuseSolidColor); - shaderData.setFloat(AmbientLight._diffuseIntensityProperty, this._diffuseIntensity); - shaderData.setFloat(AmbientLight._specularIntensityProperty, this._specularIntensity); + + this.diffuseMode = this._diffuseMode; + this.diffuseSphericalHarmonics = this._diffuseSphericalHarmonics; + this.diffuseIntensity = this._diffuseIntensity; + this.specularTexture = this._specularReflection; + this.specularIntensity = this._specularIntensity; } private _preComputeSH(sh: SphericalHarmonics3, out: Float32Array): Float32Array { diff --git a/packages/core/src/shader/ShaderUniform.ts b/packages/core/src/shader/ShaderUniform.ts index e8b9448770..d696f9955a 100644 --- a/packages/core/src/shader/ShaderUniform.ts +++ b/packages/core/src/shader/ShaderUniform.ts @@ -120,7 +120,7 @@ export class ShaderUniform { Color.gammaToLinearSpace((value).r), Color.gammaToLinearSpace((value).g), Color.gammaToLinearSpace((value).b), - Color.gammaToLinearSpace((value).a) + (value).a ); } else { this._gl.uniform4f( diff --git a/packages/core/src/shaderlib/begin_mobile_frag.glsl b/packages/core/src/shaderlib/begin_mobile_frag.glsl index 795544d844..ba9742a5f9 100644 --- a/packages/core/src/shaderlib/begin_mobile_frag.glsl +++ b/packages/core/src/shaderlib/begin_mobile_frag.glsl @@ -6,14 +6,20 @@ #ifdef O3_EMISSIVE_TEXTURE - - emission *= texture2D(u_emissiveTexture, v_uv); + vec4 emissiveTextureColor = texture2D(u_emissiveTexture, v_uv); + #ifndef OASIS_COLORSPACE_GAMMA + emissiveTextureColor = gammaToLinear(emissiveTextureColor); + #endif + emission *= emissiveTextureColor; #endif #ifdef O3_DIFFUSE_TEXTURE - - diffuse *= texture2D(u_diffuseTexture, v_uv); + vec4 diffuseTextureColor = texture2D(u_diffuseTexture, v_uv); + #ifndef OASIS_COLORSPACE_GAMMA + diffuseTextureColor = gammaToLinear(diffuseTextureColor); + #endif + diffuse *= diffuseTextureColor; #endif @@ -24,8 +30,11 @@ #endif #ifdef O3_SPECULAR_TEXTURE - - specular *= texture2D(u_specularTexture, v_uv); + vec4 specularTextureColor = texture2D(u_specularTexture, v_uv); + #ifndef OASIS_COLORSPACE_GAMMA + specularTextureColor = gammaToLinear(specularTextureColor); + #endif + specular *= specularTextureColor; #endif diff --git a/packages/core/src/shaderlib/common.glsl b/packages/core/src/shaderlib/common.glsl index 50e05a012b..026ff80b34 100644 --- a/packages/core/src/shaderlib/common.glsl +++ b/packages/core/src/shaderlib/common.glsl @@ -4,4 +4,16 @@ #define LOG2 1.442695 #define saturate( a ) clamp( a, 0.0, 1.0 ) -#define whiteCompliment(a) ( 1.0 - saturate( a ) ) \ No newline at end of file +#define whiteCompliment(a) ( 1.0 - saturate( a ) ) + +vec4 RGBMToLinear(vec4 value, float maxRange ) { + return vec4( value.rgb * value.a * maxRange, 1.0 ); +} + +vec4 gammaToLinear(vec4 srgbIn){ + return vec4( pow(srgbIn.rgb, vec3(2.2)), srgbIn.a); +} + +vec4 linearToGamma(vec4 linearIn){ + return vec4( pow(linearIn.rgb, vec3(1.0 / 2.2)), linearIn.a); +} \ No newline at end of file diff --git a/packages/core/src/shaderlib/extra/blinn-phong.fs.glsl b/packages/core/src/shaderlib/extra/blinn-phong.fs.glsl index 9362a385db..4c52c888d2 100644 --- a/packages/core/src/shaderlib/extra/blinn-phong.fs.glsl +++ b/packages/core/src/shaderlib/extra/blinn-phong.fs.glsl @@ -12,7 +12,6 @@ #include #include - void main() { #include @@ -22,6 +21,9 @@ void main() { gl_FragColor = emission + ambient + diffuse + specular; gl_FragColor.a = diffuse.a; + #ifndef OASIS_COLORSPACE_GAMMA + gl_FragColor = linearToGamma(gl_FragColor); + #endif #include } diff --git a/packages/core/src/shaderlib/extra/skybox.fs.glsl b/packages/core/src/shaderlib/extra/skybox.fs.glsl index a2a8fe4a68..ef5e42f209 100644 --- a/packages/core/src/shaderlib/extra/skybox.fs.glsl +++ b/packages/core/src/shaderlib/extra/skybox.fs.glsl @@ -1,9 +1,19 @@ +#include uniform samplerCube u_cube; varying vec3 v_cubeUV; +uniform vec4 u_cubeDecodeParam; void main() { - gl_FragColor = textureCube( u_cube, v_cubeUV ); + vec4 textureColor = textureCube( u_cube, v_cubeUV ); + + if (u_cubeDecodeParam.x > 0.0){ + textureColor = RGBMToLinear(textureColor, u_cubeDecodeParam.y); + textureColor = linearToGamma(textureColor); + } + + + gl_FragColor = textureColor; } diff --git a/packages/core/src/shaderlib/extra/unlit.fs.glsl b/packages/core/src/shaderlib/extra/unlit.fs.glsl index f108847dc7..4bb203a846 100644 --- a/packages/core/src/shaderlib/extra/unlit.fs.glsl +++ b/packages/core/src/shaderlib/extra/unlit.fs.glsl @@ -1,3 +1,4 @@ +#include #include #include @@ -12,7 +13,11 @@ void main() { vec4 baseColor = u_baseColor; #ifdef O3_BASE_TEXTURE - baseColor *= texture2D(u_baseTexture, v_uv); + vec4 textureColor = texture2D(u_baseTexture, v_uv); + #ifndef OASIS_COLORSPACE_GAMMA + textureColor = gammaToLinear(textureColor); + #endif + baseColor *= textureColor; #endif #ifdef ALPHA_CUTOFF @@ -21,6 +26,11 @@ void main() { } #endif + + #ifndef OASIS_COLORSPACE_GAMMA + baseColor = linearToGamma(baseColor); + #endif + gl_FragColor = baseColor; #include diff --git a/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl b/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl index 5b5b822679..bdc757aa98 100644 --- a/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl +++ b/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl @@ -62,7 +62,7 @@ vec3 getLightProbeRadiance(GeometricContext geometry, float roughness, int maxMI envMapColor.rgb = RGBMToLinear(envMapColor, 5.0).rgb; #ifdef OASIS_COLORSPACE_GAMMA - envMapColor = linearTogamma(envMapColor); + envMapColor = linearToGamma(envMapColor); #endif return envMapColor.rgb * specularIntensity; diff --git a/packages/core/src/shaderlib/pbr/pbr_frag.glsl b/packages/core/src/shaderlib/pbr/pbr_frag.glsl index d9cb3ce77d..5391c69dc8 100644 --- a/packages/core/src/shaderlib/pbr/pbr_frag.glsl +++ b/packages/core/src/shaderlib/pbr/pbr_frag.glsl @@ -10,7 +10,7 @@ addTotalDirectRadiance(geometry, material, reflectedLight); #ifdef O3_USE_SH vec3 irradiance = getLightProbeIrradiance(u_env_sh, geometry.normal); #ifdef OASIS_COLORSPACE_GAMMA - irradiance = linearTogamma(irradiance); + irradiance = linearToGamma(vec4(irradiance, 1.0)).rgb; #endif irradiance *= u_envMapLight.diffuseIntensity; #else @@ -50,8 +50,8 @@ vec3 totalRadiance = reflectedLight.directDiffuse + reflectedLight.indirectSpecular + emissiveRadiance; -vec4 tagetColor =vec4(totalRadiance, u_baseColor.a); +vec4 targetColor =vec4(totalRadiance, u_baseColor.a); #ifndef OASIS_COLORSPACE_GAMMA - tagetColor = linearToGamma (tagetColor); + targetColor = linearToGamma(targetColor); #endif -gl_FragColor = tagetColor; +gl_FragColor = targetColor; diff --git a/packages/core/src/shaderlib/pbr/pbr_helper.glsl b/packages/core/src/shaderlib/pbr/pbr_helper.glsl index 06ebe88a04..accb425dae 100644 --- a/packages/core/src/shaderlib/pbr/pbr_helper.glsl +++ b/packages/core/src/shaderlib/pbr/pbr_helper.glsl @@ -5,18 +5,6 @@ float pow2(float x ) { return x * x; } -vec4 RGBMToLinear(vec4 value, float maxRange ) { - return vec4( value.rgb * value.a * maxRange, 1.0 ); -} - -vec4 gammaToLinear(vec4 srgbIn){ - return vec4( pow(srgbIn.rgb, vec3(2.2)), srgbIn.a); -} - -vec4 linearToGamma(vec4 linearIn){ - return vec4( pow(linearIn.rgb, vec3(1.0 / 2.2)), linearIn.a); -} - vec3 BRDF_Diffuse_Lambert(vec3 diffuseColor ) { return RECIPROCAL_PI * diffuseColor; } diff --git a/packages/core/src/sky/SkyBoxMaterial.ts b/packages/core/src/sky/SkyBoxMaterial.ts index 521579e719..cb86c2b2a6 100644 --- a/packages/core/src/sky/SkyBoxMaterial.ts +++ b/packages/core/src/sky/SkyBoxMaterial.ts @@ -1,3 +1,4 @@ +import { Vector4 } from "@oasis-engine/math"; import { Engine } from "../Engine"; import { Material } from "../material/Material"; import { CompareFunction } from "../shader/enums/CompareFunction"; @@ -9,14 +10,33 @@ import { TextureCubeMap } from "../texture"; * SkyboxMaterial */ export class SkyBoxMaterial extends Material { - constructor(engine: Engine) { - super(engine, Shader.find("skybox")); + private _decodeParam: Vector4 = new Vector4(0, 5, 0, 0); - this.renderState.rasterState.cullMode = CullMode.Off; - this.renderState.depthState.compareFunction = CompareFunction.LessEqual; + /** + * Whether to decode from texture with RGBM format. + */ + get textureDecodeRGBM(): boolean { + return Boolean(this._decodeParam.x); + } + + set textureDecodeRGBM(value: boolean) { + this._decodeParam.x = Number(value); + } + + /** + * RGBM decode factor, default 5.0. + */ + get RGBMDecodeFactor(): number { + return this._decodeParam.y; + } + + set RGBMDecodeFactor(value: number) { + this._decodeParam.y = value; } - /** Texture cube map of the sky box material. */ + /** + * Texture cube map of the sky box material. + */ get textureCubeMap(): TextureCubeMap { return this.shaderData.getTexture("u_cube") as TextureCubeMap; } @@ -24,4 +44,13 @@ export class SkyBoxMaterial extends Material { set textureCubeMap(v: TextureCubeMap) { this.shaderData.setTexture("u_cube", v); } + + constructor(engine: Engine) { + super(engine, Shader.find("skybox")); + + this.renderState.rasterState.cullMode = CullMode.Off; + this.renderState.depthState.compareFunction = CompareFunction.LessEqual; + + this.shaderData.setVector4("u_cubeDecodeParam", this._decodeParam); + } } diff --git a/packages/design/package.json b/packages/design/package.json index 6e45b5c7f8..f3538c3172 100755 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/design", - "version": "0.5.7", + "version": "0.6.0-alpha.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", diff --git a/packages/draco/package.json b/packages/draco/package.json index 909213bfcf..9f3f66b42e 100644 --- a/packages/draco/package.json +++ b/packages/draco/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/draco", - "version": "0.5.7", + "version": "0.6.0-alpha.1", "license": "MIT", "scripts": { "b:types": "tsc" @@ -13,6 +13,6 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.5.7" + "@oasis-engine/core": "0.6.0-alpha.1" } } diff --git a/packages/framebuffer-picker/package.json b/packages/framebuffer-picker/package.json index b94ba35bf2..c35e448a81 100755 --- a/packages/framebuffer-picker/package.json +++ b/packages/framebuffer-picker/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/framebuffer-picker", - "version": "0.5.7", + "version": "0.6.0-alpha.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.5.7" + "oasis-engine": "0.6.0-alpha.1" } } diff --git a/packages/loader/package.json b/packages/loader/package.json index 474f23b8cd..832c6e3aa1 100755 --- a/packages/loader/package.json +++ b/packages/loader/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/loader", - "version": "0.5.7", + "version": "0.6.0-alpha.1", "license": "MIT", "types": "types/index.d.ts", "scripts": { @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.5.7", - "@oasis-engine/draco": "0.5.7", - "@oasis-engine/math": "0.5.7", - "@oasis-engine/rhi-webgl": "0.5.7" + "@oasis-engine/core": "0.6.0-alpha.1", + "@oasis-engine/draco": "0.6.0-alpha.1", + "@oasis-engine/math": "0.6.0-alpha.1", + "@oasis-engine/rhi-webgl": "0.6.0-alpha.1" } } diff --git a/packages/loader/src/scene-loader/ResourceManager.ts b/packages/loader/src/scene-loader/ResourceManager.ts index fa80f78da5..1a90c9dd33 100644 --- a/packages/loader/src/scene-loader/ResourceManager.ts +++ b/packages/loader/src/scene-loader/ResourceManager.ts @@ -14,7 +14,8 @@ import { TextureResource, UnlitMaterialResource, AnimatorControllerResource, - AnimationClipResource + AnimationClipResource, + AmbientLightResource } from "./resources"; import { SpriteAtlasResource } from "./resources/SpriteAtlasResource"; import { AssetConfig } from "./types"; @@ -33,7 +34,8 @@ export const RESOURCE_CLASS = { sprite: SpriteResource, SpriteAtlas: SpriteAtlasResource, animatorController: AnimatorControllerResource, - animationClip: AnimationClipResource + animationClip: AnimationClipResource, + environment: AmbientLightResource }; const RESOURCE_TYPE: Map = new Map(); diff --git a/packages/loader/src/scene-loader/resources/AmbientLightResource.ts b/packages/loader/src/scene-loader/resources/AmbientLightResource.ts new file mode 100644 index 0000000000..8dc24c86b7 --- /dev/null +++ b/packages/loader/src/scene-loader/resources/AmbientLightResource.ts @@ -0,0 +1,27 @@ +import { ResourceManager } from "@oasis-engine/core"; +import { Oasis } from "../Oasis"; +import { AssetConfig } from "../types"; +import { SchemaResource } from "./SchemaResource"; + +export class AmbientLightResource extends SchemaResource { + load(resourceManager: ResourceManager, assetConfig: AssetConfig, oasis: Oasis): Promise { + return new Promise((resolve, reject) => { + const { url } = assetConfig; + resourceManager + .load({ url, type: "env" }) + .then((res) => { + this._resource = res; + resolve(this); + }) + .catch((e) => { + reject(e); + }); + }); + } + + setMeta() { + if (this.resource) { + this._meta.name = this.resource.name; + } + } +} diff --git a/packages/loader/src/scene-loader/resources/AnimatorControllerResource.ts b/packages/loader/src/scene-loader/resources/AnimatorControllerResource.ts index d0336de4f8..6946d4b788 100644 --- a/packages/loader/src/scene-loader/resources/AnimatorControllerResource.ts +++ b/packages/loader/src/scene-loader/resources/AnimatorControllerResource.ts @@ -136,8 +136,8 @@ export class AnimatorControllerResource extends SchemaResource { const animationClip = animations[animationIndex.index]; if (!animationClip) continue; state.clip = animationClip; - state.clipStartTime = animationClip.length * clipStartNormalizedTime; - state.clipEndTime = animationClip.length * clipEndNormalizedTime; + state.clipStartTime = clipStartNormalizedTime; + state.clipEndTime = clipEndNormalizedTime; for (let j = 0, length = transitions.length; j < length; ++j) { const transition = transitions[j]; transitions[j].srcState = state; diff --git a/packages/loader/src/scene-loader/resources/index.ts b/packages/loader/src/scene-loader/resources/index.ts index c989b1e53a..8d303c1e90 100644 --- a/packages/loader/src/scene-loader/resources/index.ts +++ b/packages/loader/src/scene-loader/resources/index.ts @@ -12,3 +12,4 @@ export * from "./ScriptResource"; export { BaseResource } from "./BaseResource"; export { AnimatorControllerResource } from "./AnimatorControllerResource"; export { AnimationClipResource } from "./AnimationClipResource"; +export { AmbientLightResource } from "./AmbientLightResource"; diff --git a/packages/loader/src/scene-loader/temp.compatible.ts b/packages/loader/src/scene-loader/temp.compatible.ts index 933fdb6907..1a40ad2e3a 100644 --- a/packages/loader/src/scene-loader/temp.compatible.ts +++ b/packages/loader/src/scene-loader/temp.compatible.ts @@ -1,4 +1,4 @@ -import { Color, Vector2, Vector3, Vector4, SphericalHarmonics3 } from "@oasis-engine/math"; +import { Color, Vector2, Vector3, Vector4 } from "@oasis-engine/math"; /** * temp compa @@ -46,8 +46,6 @@ function handleComponents(props) { } } -const sh = new SphericalHarmonics3(); - function handleSceneProps(props) { const keys = Object.keys(props); for (let i = 0, l = keys.length; i < l; ++i) { @@ -64,9 +62,6 @@ function handleSceneProps(props) { } else if (v.length === 2) { props[k] = new Vector2(v[0], v[1]); } - } else if (v && k === "diffuseSphericalHarmonics") { - sh.setValueByArray(JSON.parse(v)); - props[k] = sh; } } } diff --git a/packages/math/package.json b/packages/math/package.json index 2b7a1f9d5d..f99ae1088f 100755 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/math", - "version": "0.5.7", + "version": "0.6.0-alpha.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,6 +14,6 @@ "types/**/*" ], "devDependencies": { - "@oasis-engine/design": "0.5.7" + "@oasis-engine/design": "0.6.0-alpha.1" } } diff --git a/packages/oasis-engine/package.json b/packages/oasis-engine/package.json index dfccde0861..3f193ef208 100755 --- a/packages/oasis-engine/package.json +++ b/packages/oasis-engine/package.json @@ -1,6 +1,6 @@ { "name": "oasis-engine", - "version": "0.5.7", + "version": "0.6.0-alpha.1", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.5.7", - "@oasis-engine/loader": "0.5.7", - "@oasis-engine/math": "0.5.7", - "@oasis-engine/rhi-webgl": "0.5.7" + "@oasis-engine/core": "0.6.0-alpha.1", + "@oasis-engine/loader": "0.6.0-alpha.1", + "@oasis-engine/math": "0.6.0-alpha.1", + "@oasis-engine/rhi-webgl": "0.6.0-alpha.1" } } diff --git a/packages/physics-lite/package.json b/packages/physics-lite/package.json index 617bb189b9..99bd6f0148 100644 --- a/packages/physics-lite/package.json +++ b/packages/physics-lite/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/physics-lite", - "version": "0.5.6", + "version": "0.6.0-alpha.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,7 +14,10 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.5.6", - "@oasis-engine/math": "0.5.6" + "@oasis-engine/design": "0.6.0-alpha.1", + "@oasis-engine/math": "0.6.0-alpha.1" + }, + "publishConfig": { + "access": "public" } } diff --git a/packages/physics-lite/src/LitePhysicsManager.ts b/packages/physics-lite/src/LitePhysicsManager.ts index ee933dda86..6c501d5e5c 100644 --- a/packages/physics-lite/src/LitePhysicsManager.ts +++ b/packages/physics-lite/src/LitePhysicsManager.ts @@ -179,10 +179,10 @@ export class LitePhysicsManager implements IPhysicsManager { const myShape = myColliderShapes[i]; if (myShape instanceof LiteBoxColliderShape) { LitePhysicsManager._updateWorldBox(myShape, this._box); - for (let i = 0, len = colliders.length; i < len; i++) { - const colliderShape = colliders[i]._shapes; - for (let i = 0, len = colliderShape.length; i < len; i++) { - const shape = colliderShape[i]; + for (let j = 0, len = colliders.length; j < len; j++) { + const colliderShape = colliders[j]._shapes; + for (let k = 0, len = colliderShape.length; k < len; k++) { + const shape = colliderShape[k]; const index1 = shape._id; const index2 = myShape._id; const event = index1 < index2 ? this._eventMap[index1][index2] : this._eventMap[index2][index1]; @@ -206,10 +206,10 @@ export class LitePhysicsManager implements IPhysicsManager { } } else if (myShape instanceof LiteSphereColliderShape) { LitePhysicsManager._upWorldSphere(myShape, this._sphere); - for (let i = 0, len = colliders.length; i < len; i++) { - const colliderShape = colliders[i]._shapes; - for (let i = 0, len = colliderShape.length; i < len; i++) { - const shape = colliderShape[i]; + for (let j = 0, len = colliders.length; j < len; j++) { + const colliderShape = colliders[j]._shapes; + for (let k = 0, len = colliderShape.length; k < len; k++) { + const shape = colliderShape[k]; const index1 = shape._id; const index2 = myShape._id; const event = index1 < index2 ? this._eventMap[index1][index2] : this._eventMap[index2][index1]; diff --git a/packages/physics-physx/dist/physx.release.js b/packages/physics-physx/dist/physx.release.js new file mode 100644 index 0000000000..0192013251 --- /dev/null +++ b/packages/physics-physx/dist/physx.release.js @@ -0,0 +1,21 @@ + +var PHYSX = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(PHYSX) { + PHYSX = PHYSX || {}; + +var Module=typeof PHYSX!=="undefined"?PHYSX:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});if(!Object.getOwnPropertyDescriptor(Module["ready"],"_main")){Object.defineProperty(Module["ready"],"_main",{configurable:true,get:function(){abort("You are getting _main on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_main",{configurable:true,set:function(){abort("You are setting _main on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_emscripten_stack_get_end")){Object.defineProperty(Module["ready"],"_emscripten_stack_get_end",{configurable:true,get:function(){abort("You are getting _emscripten_stack_get_end on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_emscripten_stack_get_end",{configurable:true,set:function(){abort("You are setting _emscripten_stack_get_end on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_emscripten_stack_get_free")){Object.defineProperty(Module["ready"],"_emscripten_stack_get_free",{configurable:true,get:function(){abort("You are getting _emscripten_stack_get_free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_emscripten_stack_get_free",{configurable:true,set:function(){abort("You are setting _emscripten_stack_get_free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_emscripten_stack_init")){Object.defineProperty(Module["ready"],"_emscripten_stack_init",{configurable:true,get:function(){abort("You are getting _emscripten_stack_init on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_emscripten_stack_init",{configurable:true,set:function(){abort("You are setting _emscripten_stack_init on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_stackSave")){Object.defineProperty(Module["ready"],"_stackSave",{configurable:true,get:function(){abort("You are getting _stackSave on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_stackSave",{configurable:true,set:function(){abort("You are setting _stackSave on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_stackRestore")){Object.defineProperty(Module["ready"],"_stackRestore",{configurable:true,get:function(){abort("You are getting _stackRestore on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_stackRestore",{configurable:true,set:function(){abort("You are setting _stackRestore on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_stackAlloc")){Object.defineProperty(Module["ready"],"_stackAlloc",{configurable:true,get:function(){abort("You are getting _stackAlloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_stackAlloc",{configurable:true,set:function(){abort("You are setting _stackAlloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"___wasm_call_ctors")){Object.defineProperty(Module["ready"],"___wasm_call_ctors",{configurable:true,get:function(){abort("You are getting ___wasm_call_ctors on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"___wasm_call_ctors",{configurable:true,set:function(){abort("You are setting ___wasm_call_ctors on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_fflush")){Object.defineProperty(Module["ready"],"_fflush",{configurable:true,get:function(){abort("You are getting _fflush on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_fflush",{configurable:true,set:function(){abort("You are setting _fflush on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"___errno_location")){Object.defineProperty(Module["ready"],"___errno_location",{configurable:true,get:function(){abort("You are getting ___errno_location on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"___errno_location",{configurable:true,set:function(){abort("You are setting ___errno_location on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_malloc")){Object.defineProperty(Module["ready"],"_malloc",{configurable:true,get:function(){abort("You are getting _malloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_malloc",{configurable:true,set:function(){abort("You are setting _malloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_free")){Object.defineProperty(Module["ready"],"_free",{configurable:true,get:function(){abort("You are getting _free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_free",{configurable:true,set:function(){abort("You are setting _free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_ntohs")){Object.defineProperty(Module["ready"],"_ntohs",{configurable:true,get:function(){abort("You are getting _ntohs on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_ntohs",{configurable:true,set:function(){abort("You are setting _ntohs on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_htons")){Object.defineProperty(Module["ready"],"_htons",{configurable:true,get:function(){abort("You are getting _htons on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_htons",{configurable:true,set:function(){abort("You are setting _htons on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_emscripten_main_thread_process_queued_calls")){Object.defineProperty(Module["ready"],"_emscripten_main_thread_process_queued_calls",{configurable:true,get:function(){abort("You are getting _emscripten_main_thread_process_queued_calls on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_emscripten_main_thread_process_queued_calls",{configurable:true,set:function(){abort("You are setting _emscripten_main_thread_process_queued_calls on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"___getTypeName")){Object.defineProperty(Module["ready"],"___getTypeName",{configurable:true,get:function(){abort("You are getting ___getTypeName on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"___getTypeName",{configurable:true,set:function(){abort("You are setting ___getTypeName on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"___embind_register_native_and_builtin_types")){Object.defineProperty(Module["ready"],"___embind_register_native_and_builtin_types",{configurable:true,get:function(){abort("You are getting ___embind_register_native_and_builtin_types on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"___embind_register_native_and_builtin_types",{configurable:true,set:function(){abort("You are setting ___embind_register_native_and_builtin_types on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"onRuntimeInitialized")){Object.defineProperty(Module["ready"],"onRuntimeInitialized",{configurable:true,get:function(){abort("You are getting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"onRuntimeInitialized",{configurable:true,set:function(){abort("You are setting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(Module["ENVIRONMENT"]){throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)")}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(!(typeof process==="object"&&typeof require==="function"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};readAsync=function readAsync(filename,onload,onerror){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);nodeFS["readFile"](filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status,toThrow){if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof process==="object"&&typeof require==="function"||typeof window==="object"||typeof importScripts==="function")throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};readAsync=function readAsync(f,onload,onerror){setTimeout(function(){onload(readBinary(f))},0)};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}if(!(typeof window==="object"||typeof importScripts==="function"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{throw new Error("environment detection error")}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(!Object.getOwnPropertyDescriptor(Module,"arguments")){Object.defineProperty(Module,"arguments",{configurable:true,get:function(){abort("Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(!Object.getOwnPropertyDescriptor(Module,"thisProgram")){Object.defineProperty(Module,"thisProgram",{configurable:true,get:function(){abort("Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(Module["quit"])quit_=Module["quit"];if(!Object.getOwnPropertyDescriptor(Module,"quit")){Object.defineProperty(Module,"quit",{configurable:true,get:function(){abort("Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}assert(typeof Module["memoryInitializerPrefixURL"]==="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["pthreadMainPrefixURL"]==="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["cdInitializerPrefixURL"]==="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["filePackagePrefixURL"]==="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["read"]==="undefined","Module.read option was removed (modify read_ in JS)");assert(typeof Module["readAsync"]==="undefined","Module.readAsync option was removed (modify readAsync in JS)");assert(typeof Module["readBinary"]==="undefined","Module.readBinary option was removed (modify readBinary in JS)");assert(typeof Module["setWindowTitle"]==="undefined","Module.setWindowTitle option was removed (modify setWindowTitle in JS)");assert(typeof Module["TOTAL_MEMORY"]==="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");if(!Object.getOwnPropertyDescriptor(Module,"read")){Object.defineProperty(Module,"read",{configurable:true,get:function(){abort("Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(Module,"readAsync")){Object.defineProperty(Module,"readAsync",{configurable:true,get:function(){abort("Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(Module,"readBinary")){Object.defineProperty(Module,"readBinary",{configurable:true,get:function(){abort("Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(Module,"setWindowTitle")){Object.defineProperty(Module,"setWindowTitle",{configurable:true,get:function(){abort("Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add 'shell' to `-s ENVIRONMENT` to enable.");var STACK_ALIGN=16;function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function==="function"){var typeNames={"i":"i32","j":"i64","f":"f32","d":"f64"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>=2097152)warnOnce("Invalid Unicode code point 0x"+u.toString(16)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x1FFFFF).");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){assert(ptr%2==0,"Pointer passed to UTF16ToString must be aligned to two bytes!");var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){assert(outPtr%2==0,"Pointer passed to stringToUTF16 must be aligned to two bytes!");assert(typeof maxBytesToWrite=="number","stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){assert(ptr%4==0,"Pointer passed to UTF32ToString must be aligned to four bytes!");var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){assert(outPtr%4==0,"Pointer passed to stringToUTF32 must be aligned to four bytes!");assert(typeof maxBytesToWrite=="number","stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function writeArrayToMemory(array,buffer){assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var TOTAL_STACK=5242880;if(Module["TOTAL_STACK"])assert(TOTAL_STACK===Module["TOTAL_STACK"],"the stack size can no longer be determined at runtime");var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(!Object.getOwnPropertyDescriptor(Module,"INITIAL_MEMORY")){Object.defineProperty(Module,"INITIAL_MEMORY",{configurable:true,get:function(){abort("Module.INITIAL_MEMORY has been replaced with plain INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}assert(INITIAL_MEMORY>=TOTAL_STACK,"INITIAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");assert(typeof Int32Array!=="undefined"&&typeof Float64Array!=="undefined"&&Int32Array.prototype.subarray!==undefined&&Int32Array.prototype.set!==undefined,"JS engine does not provide full typed array support");assert(!Module["wasmMemory"],"Use of `wasmMemory` detected. Use -s IMPORTED_MEMORY to define wasmMemory externally");assert(INITIAL_MEMORY==16777216,"Detected runtime INITIAL_MEMORY setting. Use -s IMPORTED_MEMORY to define wasmMemory dynamically");var wasmTable;function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);HEAPU32[(max>>2)+1]=34821223;HEAPU32[(max>>2)+2]=2310721022;HEAP32[0]=1668509029}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();var cookie1=HEAPU32[(max>>2)+1];var cookie2=HEAPU32[(max>>2)+2];if(cookie1!=34821223||cookie2!=2310721022){abort("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x"+cookie2.toString(16)+" "+cookie1.toString(16))}if(HEAP32[0]!==1668509029)abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}(function(){var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)throw"Runtime error: expected the system to be little-endian! (Run with -s SUPPORT_BIG_ENDIAN=1 to bypass)"})();var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){checkStackCookie();assert(!runtimeInitialized);runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){checkStackCookie();runtimeExited=true}function postRun(){checkStackCookie();if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}assert(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;var runDependencyTracking={};function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&typeof setInterval!=="undefined"){runDependencyWatcher=setInterval(function(){if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err("still waiting on run dependencies:")}err("dependency: "+dep)}if(shown){err("(end of list)")}},1e4)}}else{err("warning: run dependency added without ID")}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id]}else{err("warning: run dependency removed without ID")}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;var output="abort("+what+") at "+stackTrace();what=output;var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var FS={error:function(){abort("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -s FORCE_FILESYSTEM=1")},init:function(){FS.error()},createDataFile:function(){FS.error()},createPreloadedFile:function(){FS.error()},createLazyFile:function(){FS.error()},open:function(){FS.error()},mkdev:function(){FS.error()},registerDevice:function(){FS.error()},analyzePath:function(){FS.error()},loadFilesFromDB:function(){FS.error()},ErrnoError:function ErrnoError(){FS.error()}};Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}function createExportWrapper(name,fixedasm){return function(){var displayName=name;var asm=fixedasm;if(!fixedasm){asm=Module["asm"]}assert(runtimeInitialized,"native function `"+displayName+"` called before runtime initialization");assert(!runtimeExited,"native function `"+displayName+"` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)");if(!asm[name]){assert(asm[name],"exported native function `"+displayName+"` not found")}return asm[name].apply(null,arguments)}}var wasmBinaryFile;wasmBinaryFile="physx.release.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"env":asmLibraryArg,"wasi_snapshot_preview1":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];assert(wasmMemory,"memory not found in wasm exports");updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["__indirect_function_table"];assert(wasmTable,"table not found in wasm exports");addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");trueModule=null;receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);if(isFileURI(wasmBinaryFile)){err("warning: Loading from a file URI ("+wasmBinaryFile+") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing")}abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function demangle(func){warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var error=new Error;if(!error.stack){try{throw new Error}catch(e){error=e}if(!error.stack){return"(no stack trace available)"}}return error.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function count_emval_handles(){var count=0;for(var i=5;i>2])}var awaitingDependencies={};var typeDependencies={};var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){assert("dynCall_"+sig in Module,"bad function pointer type - no table for sig '"+sig+"'");if(args&&args.length){assert(args.length===sig.substring(1).replace(/j/g,"--").length)}else{assert(sig.length==1)}var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}assert(wasmTable.get(ptr),"missing table entry in dynCall: "+ptr);return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){assert(sig.includes("j"),"getDynCaller should only be called with i64 sigs");var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);var args=[rawConstructor];var destructors=[];whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+" called with "+arguments.length+" arguments, expected "+(argCount-1))}destructors.length=0;args.length=argCount;for(var i=1;i4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=emval_handle_array[handle].value;__emval_decref(handle);return rv},"toWireType":function(destructors,value){return __emval_register(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function enumReadValueFromPointer(name,shift,signed){switch(shift){case 0:return function(pointer){var heap=signed?HEAP8:HEAPU8;return this["fromWireType"](heap[pointer])};case 1:return function(pointer){var heap=signed?HEAP16:HEAPU16;return this["fromWireType"](heap[pointer>>1])};case 2:return function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":function(c){return this.constructor.values[c]},"toWireType":function(destructors,c){return c.value},"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.includes("unsigned");registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emval_allocateDestructors(destructorsRef){var destructors=[];HEAP32[destructorsRef>>2]=__emval_register(destructors);return destructors}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_method(caller,handle,methodName,destructorsRef,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);return caller(handle,methodName,__emval_allocateDestructors(destructorsRef),args)}function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){console.error("emscripten_realloc_buffer: Attempted to grow heap from "+buffer.byteLength+" bytes to "+size+" bytes, but got error: "+e)}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;assert(requestedSize>oldSize);var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){err("Cannot enlarge memory, asked to go up to "+requestedSize+" bytes, but the limit is "+maxHeapSize+" bytes!");return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}err("Failed to grow the heap from "+oldSize+" bytes to "+newSize+" bytes, not enough memory!");return false}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else _emscripten_get_now=function(){return performance.now()};function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){if(low>=0)assert(high===0);else assert(high===-1);return low}};function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}function _setTempRet0(val){setTempRet0(val)}init_emval();PureVirtualError=Module["PureVirtualError"]=extendError(Error,"PureVirtualError");embind_init_charCodes();init_embind();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");var ASSERTIONS=true;var asmLibraryArg={"_embind_create_inheriting_constructor":__embind_create_inheriting_constructor,"_embind_finalize_value_object":__embind_finalize_value_object,"_embind_register_bigint":__embind_register_bigint,"_embind_register_bool":__embind_register_bool,"_embind_register_class":__embind_register_class,"_embind_register_class_class_function":__embind_register_class_class_function,"_embind_register_class_constructor":__embind_register_class_constructor,"_embind_register_class_function":__embind_register_class_function,"_embind_register_class_property":__embind_register_class_property,"_embind_register_constant":__embind_register_constant,"_embind_register_emval":__embind_register_emval,"_embind_register_enum":__embind_register_enum,"_embind_register_enum_value":__embind_register_enum_value,"_embind_register_float":__embind_register_float,"_embind_register_function":__embind_register_function,"_embind_register_integer":__embind_register_integer,"_embind_register_memory_view":__embind_register_memory_view,"_embind_register_std_string":__embind_register_std_string,"_embind_register_std_wstring":__embind_register_std_wstring,"_embind_register_value_object":__embind_register_value_object,"_embind_register_value_object_field":__embind_register_value_object_field,"_embind_register_void":__embind_register_void,"_emval_call_method":__emval_call_method,"_emval_call_void_method":__emval_call_void_method,"_emval_decref":__emval_decref,"_emval_get_method_caller":__emval_get_method_caller,"_emval_incref":__emval_incref,"_emval_run_destructors":__emval_run_destructors,"_emval_take_value":__emval_take_value,"abort":_abort,"emscripten_memcpy_big":_emscripten_memcpy_big,"emscripten_resize_heap":_emscripten_resize_heap,"emscripten_thread_sleep":_emscripten_thread_sleep,"exit":_exit,"fd_write":_fd_write,"gettimeofday":_gettimeofday,"setTempRet0":_setTempRet0};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=createExportWrapper("__wasm_call_ctors");var _free=Module["_free"]=createExportWrapper("free");var ___getTypeName=Module["___getTypeName"]=createExportWrapper("__getTypeName");var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=createExportWrapper("__embind_register_native_and_builtin_types");var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=createExportWrapper("emscripten_main_thread_process_queued_calls");var _malloc=Module["_malloc"]=createExportWrapper("malloc");var _emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=function(){return(_emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=Module["asm"]["emscripten_stack_get_end"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=createExportWrapper("__errno_location");var _htons=Module["_htons"]=createExportWrapper("htons");var _ntohs=Module["_ntohs"]=createExportWrapper("ntohs");var _fflush=Module["_fflush"]=createExportWrapper("fflush");var stackSave=Module["stackSave"]=createExportWrapper("stackSave");var stackRestore=Module["stackRestore"]=createExportWrapper("stackRestore");var stackAlloc=Module["stackAlloc"]=createExportWrapper("stackAlloc");var _emscripten_stack_init=Module["_emscripten_stack_init"]=function(){return(_emscripten_stack_init=Module["_emscripten_stack_init"]=Module["asm"]["emscripten_stack_init"]).apply(null,arguments)};var _emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=function(){return(_emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=Module["asm"]["emscripten_stack_get_free"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=createExportWrapper("dynCall_jiji");if(!Object.getOwnPropertyDescriptor(Module,"intArrayFromString"))Module["intArrayFromString"]=function(){abort("'intArrayFromString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"intArrayToString"))Module["intArrayToString"]=function(){abort("'intArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ccall"))Module["ccall"]=function(){abort("'ccall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"cwrap"))Module["cwrap"]=function(){abort("'cwrap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"setValue"))Module["setValue"]=function(){abort("'setValue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getValue"))Module["getValue"]=function(){abort("'getValue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"allocate"))Module["allocate"]=function(){abort("'allocate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"UTF8ArrayToString"))Module["UTF8ArrayToString"]=function(){abort("'UTF8ArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"UTF8ToString"))Module["UTF8ToString"]=function(){abort("'UTF8ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF8Array"))Module["stringToUTF8Array"]=function(){abort("'stringToUTF8Array' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF8"))Module["stringToUTF8"]=function(){abort("'stringToUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF8"))Module["lengthBytesUTF8"]=function(){abort("'lengthBytesUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stackTrace"))Module["stackTrace"]=function(){abort("'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addOnPreRun"))Module["addOnPreRun"]=function(){abort("'addOnPreRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addOnInit"))Module["addOnInit"]=function(){abort("'addOnInit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addOnPreMain"))Module["addOnPreMain"]=function(){abort("'addOnPreMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addOnExit"))Module["addOnExit"]=function(){abort("'addOnExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addOnPostRun"))Module["addOnPostRun"]=function(){abort("'addOnPostRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeStringToMemory"))Module["writeStringToMemory"]=function(){abort("'writeStringToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeArrayToMemory"))Module["writeArrayToMemory"]=function(){abort("'writeArrayToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeAsciiToMemory"))Module["writeAsciiToMemory"]=function(){abort("'writeAsciiToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addRunDependency"))Module["addRunDependency"]=function(){abort("'addRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"removeRunDependency"))Module["removeRunDependency"]=function(){abort("'removeRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createFolder"))Module["FS_createFolder"]=function(){abort("'FS_createFolder' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createPath"))Module["FS_createPath"]=function(){abort("'FS_createPath' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createDataFile"))Module["FS_createDataFile"]=function(){abort("'FS_createDataFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createPreloadedFile"))Module["FS_createPreloadedFile"]=function(){abort("'FS_createPreloadedFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createLazyFile"))Module["FS_createLazyFile"]=function(){abort("'FS_createLazyFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createLink"))Module["FS_createLink"]=function(){abort("'FS_createLink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"FS_createDevice"))Module["FS_createDevice"]=function(){abort("'FS_createDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"FS_unlink"))Module["FS_unlink"]=function(){abort("'FS_unlink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")};if(!Object.getOwnPropertyDescriptor(Module,"getLEB"))Module["getLEB"]=function(){abort("'getLEB' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getFunctionTables"))Module["getFunctionTables"]=function(){abort("'getFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"alignFunctionTables"))Module["alignFunctionTables"]=function(){abort("'alignFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerFunctions"))Module["registerFunctions"]=function(){abort("'registerFunctions' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"addFunction"))Module["addFunction"]=function(){abort("'addFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"removeFunction"))Module["removeFunction"]=function(){abort("'removeFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getFuncWrapper"))Module["getFuncWrapper"]=function(){abort("'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"prettyPrint"))Module["prettyPrint"]=function(){abort("'prettyPrint' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"dynCall"))Module["dynCall"]=function(){abort("'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getCompilerSetting"))Module["getCompilerSetting"]=function(){abort("'getCompilerSetting' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"print"))Module["print"]=function(){abort("'print' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"printErr"))Module["printErr"]=function(){abort("'printErr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getTempRet0"))Module["getTempRet0"]=function(){abort("'getTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"setTempRet0"))Module["setTempRet0"]=function(){abort("'setTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"callMain"))Module["callMain"]=function(){abort("'callMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"abort"))Module["abort"]=function(){abort("'abort' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"keepRuntimeAlive"))Module["keepRuntimeAlive"]=function(){abort("'keepRuntimeAlive' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"zeroMemory"))Module["zeroMemory"]=function(){abort("'zeroMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToNewUTF8"))Module["stringToNewUTF8"]=function(){abort("'stringToNewUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"setFileTime"))Module["setFileTime"]=function(){abort("'setFileTime' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emscripten_realloc_buffer"))Module["emscripten_realloc_buffer"]=function(){abort("'emscripten_realloc_buffer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ENV"))Module["ENV"]=function(){abort("'ENV' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ERRNO_CODES"))Module["ERRNO_CODES"]=function(){abort("'ERRNO_CODES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ERRNO_MESSAGES"))Module["ERRNO_MESSAGES"]=function(){abort("'ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"setErrNo"))Module["setErrNo"]=function(){abort("'setErrNo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"inetPton4"))Module["inetPton4"]=function(){abort("'inetPton4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"inetNtop4"))Module["inetNtop4"]=function(){abort("'inetNtop4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"inetPton6"))Module["inetPton6"]=function(){abort("'inetPton6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"inetNtop6"))Module["inetNtop6"]=function(){abort("'inetNtop6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"readSockaddr"))Module["readSockaddr"]=function(){abort("'readSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeSockaddr"))Module["writeSockaddr"]=function(){abort("'writeSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"DNS"))Module["DNS"]=function(){abort("'DNS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getHostByName"))Module["getHostByName"]=function(){abort("'getHostByName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GAI_ERRNO_MESSAGES"))Module["GAI_ERRNO_MESSAGES"]=function(){abort("'GAI_ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"Protocols"))Module["Protocols"]=function(){abort("'Protocols' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"Sockets"))Module["Sockets"]=function(){abort("'Sockets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getRandomDevice"))Module["getRandomDevice"]=function(){abort("'getRandomDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"traverseStack"))Module["traverseStack"]=function(){abort("'traverseStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"UNWIND_CACHE"))Module["UNWIND_CACHE"]=function(){abort("'UNWIND_CACHE' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"withBuiltinMalloc"))Module["withBuiltinMalloc"]=function(){abort("'withBuiltinMalloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"readAsmConstArgsArray"))Module["readAsmConstArgsArray"]=function(){abort("'readAsmConstArgsArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"readAsmConstArgs"))Module["readAsmConstArgs"]=function(){abort("'readAsmConstArgs' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"mainThreadEM_ASM"))Module["mainThreadEM_ASM"]=function(){abort("'mainThreadEM_ASM' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"jstoi_q"))Module["jstoi_q"]=function(){abort("'jstoi_q' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"jstoi_s"))Module["jstoi_s"]=function(){abort("'jstoi_s' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getExecutableName"))Module["getExecutableName"]=function(){abort("'getExecutableName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"listenOnce"))Module["listenOnce"]=function(){abort("'listenOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"autoResumeAudioContext"))Module["autoResumeAudioContext"]=function(){abort("'autoResumeAudioContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"dynCallLegacy"))Module["dynCallLegacy"]=function(){abort("'dynCallLegacy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getDynCaller"))Module["getDynCaller"]=function(){abort("'getDynCaller' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"dynCall"))Module["dynCall"]=function(){abort("'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"callRuntimeCallbacks"))Module["callRuntimeCallbacks"]=function(){abort("'callRuntimeCallbacks' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"runtimeKeepalivePush"))Module["runtimeKeepalivePush"]=function(){abort("'runtimeKeepalivePush' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"runtimeKeepalivePop"))Module["runtimeKeepalivePop"]=function(){abort("'runtimeKeepalivePop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"callUserCallback"))Module["callUserCallback"]=function(){abort("'callUserCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"maybeExit"))Module["maybeExit"]=function(){abort("'maybeExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"safeSetTimeout"))Module["safeSetTimeout"]=function(){abort("'safeSetTimeout' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"asmjsMangle"))Module["asmjsMangle"]=function(){abort("'asmjsMangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"asyncLoad"))Module["asyncLoad"]=function(){abort("'asyncLoad' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"mmapAlloc"))Module["mmapAlloc"]=function(){abort("'mmapAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"reallyNegative"))Module["reallyNegative"]=function(){abort("'reallyNegative' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"unSign"))Module["unSign"]=function(){abort("'unSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"reSign"))Module["reSign"]=function(){abort("'reSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"formatString"))Module["formatString"]=function(){abort("'formatString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"PATH"))Module["PATH"]=function(){abort("'PATH' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"PATH_FS"))Module["PATH_FS"]=function(){abort("'PATH_FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"SYSCALLS"))Module["SYSCALLS"]=function(){abort("'SYSCALLS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"syscallMmap2"))Module["syscallMmap2"]=function(){abort("'syscallMmap2' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"syscallMunmap"))Module["syscallMunmap"]=function(){abort("'syscallMunmap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getSocketFromFD"))Module["getSocketFromFD"]=function(){abort("'getSocketFromFD' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getSocketAddress"))Module["getSocketAddress"]=function(){abort("'getSocketAddress' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"JSEvents"))Module["JSEvents"]=function(){abort("'JSEvents' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerKeyEventCallback"))Module["registerKeyEventCallback"]=function(){abort("'registerKeyEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"specialHTMLTargets"))Module["specialHTMLTargets"]=function(){abort("'specialHTMLTargets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"maybeCStringToJsString"))Module["maybeCStringToJsString"]=function(){abort("'maybeCStringToJsString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"findEventTarget"))Module["findEventTarget"]=function(){abort("'findEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"findCanvasEventTarget"))Module["findCanvasEventTarget"]=function(){abort("'findCanvasEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getBoundingClientRect"))Module["getBoundingClientRect"]=function(){abort("'getBoundingClientRect' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"fillMouseEventData"))Module["fillMouseEventData"]=function(){abort("'fillMouseEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerMouseEventCallback"))Module["registerMouseEventCallback"]=function(){abort("'registerMouseEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerWheelEventCallback"))Module["registerWheelEventCallback"]=function(){abort("'registerWheelEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerUiEventCallback"))Module["registerUiEventCallback"]=function(){abort("'registerUiEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerFocusEventCallback"))Module["registerFocusEventCallback"]=function(){abort("'registerFocusEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"fillDeviceOrientationEventData"))Module["fillDeviceOrientationEventData"]=function(){abort("'fillDeviceOrientationEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerDeviceOrientationEventCallback"))Module["registerDeviceOrientationEventCallback"]=function(){abort("'registerDeviceOrientationEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"fillDeviceMotionEventData"))Module["fillDeviceMotionEventData"]=function(){abort("'fillDeviceMotionEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerDeviceMotionEventCallback"))Module["registerDeviceMotionEventCallback"]=function(){abort("'registerDeviceMotionEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"screenOrientation"))Module["screenOrientation"]=function(){abort("'screenOrientation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"fillOrientationChangeEventData"))Module["fillOrientationChangeEventData"]=function(){abort("'fillOrientationChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerOrientationChangeEventCallback"))Module["registerOrientationChangeEventCallback"]=function(){abort("'registerOrientationChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"fillFullscreenChangeEventData"))Module["fillFullscreenChangeEventData"]=function(){abort("'fillFullscreenChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerFullscreenChangeEventCallback"))Module["registerFullscreenChangeEventCallback"]=function(){abort("'registerFullscreenChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerRestoreOldStyle"))Module["registerRestoreOldStyle"]=function(){abort("'registerRestoreOldStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"hideEverythingExceptGivenElement"))Module["hideEverythingExceptGivenElement"]=function(){abort("'hideEverythingExceptGivenElement' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"restoreHiddenElements"))Module["restoreHiddenElements"]=function(){abort("'restoreHiddenElements' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"setLetterbox"))Module["setLetterbox"]=function(){abort("'setLetterbox' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"currentFullscreenStrategy"))Module["currentFullscreenStrategy"]=function(){abort("'currentFullscreenStrategy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"restoreOldWindowedStyle"))Module["restoreOldWindowedStyle"]=function(){abort("'restoreOldWindowedStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"softFullscreenResizeWebGLRenderTarget"))Module["softFullscreenResizeWebGLRenderTarget"]=function(){abort("'softFullscreenResizeWebGLRenderTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"doRequestFullscreen"))Module["doRequestFullscreen"]=function(){abort("'doRequestFullscreen' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"fillPointerlockChangeEventData"))Module["fillPointerlockChangeEventData"]=function(){abort("'fillPointerlockChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerPointerlockChangeEventCallback"))Module["registerPointerlockChangeEventCallback"]=function(){abort("'registerPointerlockChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerPointerlockErrorEventCallback"))Module["registerPointerlockErrorEventCallback"]=function(){abort("'registerPointerlockErrorEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"requestPointerLock"))Module["requestPointerLock"]=function(){abort("'requestPointerLock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"fillVisibilityChangeEventData"))Module["fillVisibilityChangeEventData"]=function(){abort("'fillVisibilityChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerVisibilityChangeEventCallback"))Module["registerVisibilityChangeEventCallback"]=function(){abort("'registerVisibilityChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerTouchEventCallback"))Module["registerTouchEventCallback"]=function(){abort("'registerTouchEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"fillGamepadEventData"))Module["fillGamepadEventData"]=function(){abort("'fillGamepadEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerGamepadEventCallback"))Module["registerGamepadEventCallback"]=function(){abort("'registerGamepadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerBeforeUnloadEventCallback"))Module["registerBeforeUnloadEventCallback"]=function(){abort("'registerBeforeUnloadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"fillBatteryEventData"))Module["fillBatteryEventData"]=function(){abort("'fillBatteryEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"battery"))Module["battery"]=function(){abort("'battery' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerBatteryEventCallback"))Module["registerBatteryEventCallback"]=function(){abort("'registerBatteryEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"setCanvasElementSize"))Module["setCanvasElementSize"]=function(){abort("'setCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getCanvasElementSize"))Module["getCanvasElementSize"]=function(){abort("'getCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"polyfillSetImmediate"))Module["polyfillSetImmediate"]=function(){abort("'polyfillSetImmediate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"demangle"))Module["demangle"]=function(){abort("'demangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"demangleAll"))Module["demangleAll"]=function(){abort("'demangleAll' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"jsStackTrace"))Module["jsStackTrace"]=function(){abort("'jsStackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stackTrace"))Module["stackTrace"]=function(){abort("'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getEnvStrings"))Module["getEnvStrings"]=function(){abort("'getEnvStrings' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"checkWasiClock"))Module["checkWasiClock"]=function(){abort("'checkWasiClock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"flush_NO_FILESYSTEM"))Module["flush_NO_FILESYSTEM"]=function(){abort("'flush_NO_FILESYSTEM' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64"))Module["writeI53ToI64"]=function(){abort("'writeI53ToI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64Clamped"))Module["writeI53ToI64Clamped"]=function(){abort("'writeI53ToI64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64Signaling"))Module["writeI53ToI64Signaling"]=function(){abort("'writeI53ToI64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToU64Clamped"))Module["writeI53ToU64Clamped"]=function(){abort("'writeI53ToU64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToU64Signaling"))Module["writeI53ToU64Signaling"]=function(){abort("'writeI53ToU64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"readI53FromI64"))Module["readI53FromI64"]=function(){abort("'readI53FromI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"readI53FromU64"))Module["readI53FromU64"]=function(){abort("'readI53FromU64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"convertI32PairToI53"))Module["convertI32PairToI53"]=function(){abort("'convertI32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"convertU32PairToI53"))Module["convertU32PairToI53"]=function(){abort("'convertU32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"Browser"))Module["Browser"]=function(){abort("'Browser' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"funcWrappers"))Module["funcWrappers"]=function(){abort("'funcWrappers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getFuncWrapper"))Module["getFuncWrapper"]=function(){abort("'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"setMainLoop"))Module["setMainLoop"]=function(){abort("'setMainLoop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"wget"))Module["wget"]=function(){abort("'wget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"FS"))Module["FS"]=function(){abort("'FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"MEMFS"))Module["MEMFS"]=function(){abort("'MEMFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"TTY"))Module["TTY"]=function(){abort("'TTY' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"PIPEFS"))Module["PIPEFS"]=function(){abort("'PIPEFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"SOCKFS"))Module["SOCKFS"]=function(){abort("'SOCKFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"_setNetworkCallback"))Module["_setNetworkCallback"]=function(){abort("'_setNetworkCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"tempFixedLengthArray"))Module["tempFixedLengthArray"]=function(){abort("'tempFixedLengthArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"miniTempWebGLFloatBuffers"))Module["miniTempWebGLFloatBuffers"]=function(){abort("'miniTempWebGLFloatBuffers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"heapObjectForWebGLType"))Module["heapObjectForWebGLType"]=function(){abort("'heapObjectForWebGLType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"heapAccessShiftForWebGLHeap"))Module["heapAccessShiftForWebGLHeap"]=function(){abort("'heapAccessShiftForWebGLHeap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GL"))Module["GL"]=function(){abort("'GL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGet"))Module["emscriptenWebGLGet"]=function(){abort("'emscriptenWebGLGet' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"computeUnpackAlignedImageSize"))Module["computeUnpackAlignedImageSize"]=function(){abort("'computeUnpackAlignedImageSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGetTexPixelData"))Module["emscriptenWebGLGetTexPixelData"]=function(){abort("'emscriptenWebGLGetTexPixelData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGetUniform"))Module["emscriptenWebGLGetUniform"]=function(){abort("'emscriptenWebGLGetUniform' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"webglGetUniformLocation"))Module["webglGetUniformLocation"]=function(){abort("'webglGetUniformLocation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"webglPrepareUniformLocationsBeforeFirstUse"))Module["webglPrepareUniformLocationsBeforeFirstUse"]=function(){abort("'webglPrepareUniformLocationsBeforeFirstUse' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"webglGetLeftBracePos"))Module["webglGetLeftBracePos"]=function(){abort("'webglGetLeftBracePos' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emscriptenWebGLGetVertexAttrib"))Module["emscriptenWebGLGetVertexAttrib"]=function(){abort("'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"writeGLArray"))Module["writeGLArray"]=function(){abort("'writeGLArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"AL"))Module["AL"]=function(){abort("'AL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"SDL_unicode"))Module["SDL_unicode"]=function(){abort("'SDL_unicode' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"SDL_ttfContext"))Module["SDL_ttfContext"]=function(){abort("'SDL_ttfContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"SDL_audio"))Module["SDL_audio"]=function(){abort("'SDL_audio' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"SDL"))Module["SDL"]=function(){abort("'SDL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"SDL_gfx"))Module["SDL_gfx"]=function(){abort("'SDL_gfx' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GLUT"))Module["GLUT"]=function(){abort("'GLUT' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"EGL"))Module["EGL"]=function(){abort("'EGL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GLFW_Window"))Module["GLFW_Window"]=function(){abort("'GLFW_Window' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GLFW"))Module["GLFW"]=function(){abort("'GLFW' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"GLEW"))Module["GLEW"]=function(){abort("'GLEW' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"IDBStore"))Module["IDBStore"]=function(){abort("'IDBStore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"runAndAbortIfError"))Module["runAndAbortIfError"]=function(){abort("'runAndAbortIfError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emval_handle_array"))Module["emval_handle_array"]=function(){abort("'emval_handle_array' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emval_free_list"))Module["emval_free_list"]=function(){abort("'emval_free_list' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emval_symbols"))Module["emval_symbols"]=function(){abort("'emval_symbols' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"init_emval"))Module["init_emval"]=function(){abort("'init_emval' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"count_emval_handles"))Module["count_emval_handles"]=function(){abort("'count_emval_handles' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"get_first_emval"))Module["get_first_emval"]=function(){abort("'get_first_emval' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getStringOrSymbol"))Module["getStringOrSymbol"]=function(){abort("'getStringOrSymbol' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"requireHandle"))Module["requireHandle"]=function(){abort("'requireHandle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emval_newers"))Module["emval_newers"]=function(){abort("'emval_newers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"craftEmvalAllocator"))Module["craftEmvalAllocator"]=function(){abort("'craftEmvalAllocator' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emval_get_global"))Module["emval_get_global"]=function(){abort("'emval_get_global' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"emval_methodCallers"))Module["emval_methodCallers"]=function(){abort("'emval_methodCallers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"InternalError"))Module["InternalError"]=function(){abort("'InternalError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"BindingError"))Module["BindingError"]=function(){abort("'BindingError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"UnboundTypeError"))Module["UnboundTypeError"]=function(){abort("'UnboundTypeError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"PureVirtualError"))Module["PureVirtualError"]=function(){abort("'PureVirtualError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"init_embind"))Module["init_embind"]=function(){abort("'init_embind' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"throwInternalError"))Module["throwInternalError"]=function(){abort("'throwInternalError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"throwBindingError"))Module["throwBindingError"]=function(){abort("'throwBindingError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"throwUnboundTypeError"))Module["throwUnboundTypeError"]=function(){abort("'throwUnboundTypeError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ensureOverloadTable"))Module["ensureOverloadTable"]=function(){abort("'ensureOverloadTable' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"exposePublicSymbol"))Module["exposePublicSymbol"]=function(){abort("'exposePublicSymbol' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"replacePublicSymbol"))Module["replacePublicSymbol"]=function(){abort("'replacePublicSymbol' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"extendError"))Module["extendError"]=function(){abort("'extendError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"createNamedFunction"))Module["createNamedFunction"]=function(){abort("'createNamedFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registeredInstances"))Module["registeredInstances"]=function(){abort("'registeredInstances' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getBasestPointer"))Module["getBasestPointer"]=function(){abort("'getBasestPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerInheritedInstance"))Module["registerInheritedInstance"]=function(){abort("'registerInheritedInstance' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"unregisterInheritedInstance"))Module["unregisterInheritedInstance"]=function(){abort("'unregisterInheritedInstance' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getInheritedInstance"))Module["getInheritedInstance"]=function(){abort("'getInheritedInstance' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getInheritedInstanceCount"))Module["getInheritedInstanceCount"]=function(){abort("'getInheritedInstanceCount' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getLiveInheritedInstances"))Module["getLiveInheritedInstances"]=function(){abort("'getLiveInheritedInstances' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registeredTypes"))Module["registeredTypes"]=function(){abort("'registeredTypes' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"awaitingDependencies"))Module["awaitingDependencies"]=function(){abort("'awaitingDependencies' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"typeDependencies"))Module["typeDependencies"]=function(){abort("'typeDependencies' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registeredPointers"))Module["registeredPointers"]=function(){abort("'registeredPointers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"registerType"))Module["registerType"]=function(){abort("'registerType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"whenDependentTypesAreResolved"))Module["whenDependentTypesAreResolved"]=function(){abort("'whenDependentTypesAreResolved' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"embind_charCodes"))Module["embind_charCodes"]=function(){abort("'embind_charCodes' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"embind_init_charCodes"))Module["embind_init_charCodes"]=function(){abort("'embind_init_charCodes' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"readLatin1String"))Module["readLatin1String"]=function(){abort("'readLatin1String' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getTypeName"))Module["getTypeName"]=function(){abort("'getTypeName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"heap32VectorToArray"))Module["heap32VectorToArray"]=function(){abort("'heap32VectorToArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"requireRegisteredType"))Module["requireRegisteredType"]=function(){abort("'requireRegisteredType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"getShiftFromSize"))Module["getShiftFromSize"]=function(){abort("'getShiftFromSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"integerReadValueFromPointer"))Module["integerReadValueFromPointer"]=function(){abort("'integerReadValueFromPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"enumReadValueFromPointer"))Module["enumReadValueFromPointer"]=function(){abort("'enumReadValueFromPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"floatReadValueFromPointer"))Module["floatReadValueFromPointer"]=function(){abort("'floatReadValueFromPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"simpleReadValueFromPointer"))Module["simpleReadValueFromPointer"]=function(){abort("'simpleReadValueFromPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"runDestructors"))Module["runDestructors"]=function(){abort("'runDestructors' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"new_"))Module["new_"]=function(){abort("'new_' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"craftInvokerFunction"))Module["craftInvokerFunction"]=function(){abort("'craftInvokerFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"embind__requireFunction"))Module["embind__requireFunction"]=function(){abort("'embind__requireFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"tupleRegistrations"))Module["tupleRegistrations"]=function(){abort("'tupleRegistrations' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"structRegistrations"))Module["structRegistrations"]=function(){abort("'structRegistrations' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"genericPointerToWireType"))Module["genericPointerToWireType"]=function(){abort("'genericPointerToWireType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"constNoSmartPtrRawPointerToWireType"))Module["constNoSmartPtrRawPointerToWireType"]=function(){abort("'constNoSmartPtrRawPointerToWireType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"nonConstNoSmartPtrRawPointerToWireType"))Module["nonConstNoSmartPtrRawPointerToWireType"]=function(){abort("'nonConstNoSmartPtrRawPointerToWireType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"init_RegisteredPointer"))Module["init_RegisteredPointer"]=function(){abort("'init_RegisteredPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"RegisteredPointer"))Module["RegisteredPointer"]=function(){abort("'RegisteredPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"RegisteredPointer_getPointee"))Module["RegisteredPointer_getPointee"]=function(){abort("'RegisteredPointer_getPointee' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"RegisteredPointer_destructor"))Module["RegisteredPointer_destructor"]=function(){abort("'RegisteredPointer_destructor' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"RegisteredPointer_deleteObject"))Module["RegisteredPointer_deleteObject"]=function(){abort("'RegisteredPointer_deleteObject' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"RegisteredPointer_fromWireType"))Module["RegisteredPointer_fromWireType"]=function(){abort("'RegisteredPointer_fromWireType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"runDestructor"))Module["runDestructor"]=function(){abort("'runDestructor' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"releaseClassHandle"))Module["releaseClassHandle"]=function(){abort("'releaseClassHandle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"finalizationGroup"))Module["finalizationGroup"]=function(){abort("'finalizationGroup' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"detachFinalizer_deps"))Module["detachFinalizer_deps"]=function(){abort("'detachFinalizer_deps' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"detachFinalizer"))Module["detachFinalizer"]=function(){abort("'detachFinalizer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"attachFinalizer"))Module["attachFinalizer"]=function(){abort("'attachFinalizer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"makeClassHandle"))Module["makeClassHandle"]=function(){abort("'makeClassHandle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"init_ClassHandle"))Module["init_ClassHandle"]=function(){abort("'init_ClassHandle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle"))Module["ClassHandle"]=function(){abort("'ClassHandle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle_isAliasOf"))Module["ClassHandle_isAliasOf"]=function(){abort("'ClassHandle_isAliasOf' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"throwInstanceAlreadyDeleted"))Module["throwInstanceAlreadyDeleted"]=function(){abort("'throwInstanceAlreadyDeleted' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle_clone"))Module["ClassHandle_clone"]=function(){abort("'ClassHandle_clone' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle_delete"))Module["ClassHandle_delete"]=function(){abort("'ClassHandle_delete' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"deletionQueue"))Module["deletionQueue"]=function(){abort("'deletionQueue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle_isDeleted"))Module["ClassHandle_isDeleted"]=function(){abort("'ClassHandle_isDeleted' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"ClassHandle_deleteLater"))Module["ClassHandle_deleteLater"]=function(){abort("'ClassHandle_deleteLater' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"flushPendingDeletes"))Module["flushPendingDeletes"]=function(){abort("'flushPendingDeletes' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"delayFunction"))Module["delayFunction"]=function(){abort("'delayFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"setDelayFunction"))Module["setDelayFunction"]=function(){abort("'setDelayFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"RegisteredClass"))Module["RegisteredClass"]=function(){abort("'RegisteredClass' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"shallowCopyInternalPointer"))Module["shallowCopyInternalPointer"]=function(){abort("'shallowCopyInternalPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"downcastPointer"))Module["downcastPointer"]=function(){abort("'downcastPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"upcastPointer"))Module["upcastPointer"]=function(){abort("'upcastPointer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"validateThis"))Module["validateThis"]=function(){abort("'validateThis' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"char_0"))Module["char_0"]=function(){abort("'char_0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"char_9"))Module["char_9"]=function(){abort("'char_9' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"makeLegalFunctionName"))Module["makeLegalFunctionName"]=function(){abort("'makeLegalFunctionName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"warnOnce"))Module["warnOnce"]=function(){abort("'warnOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stackSave"))Module["stackSave"]=function(){abort("'stackSave' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stackRestore"))Module["stackRestore"]=function(){abort("'stackRestore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stackAlloc"))Module["stackAlloc"]=function(){abort("'stackAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"AsciiToString"))Module["AsciiToString"]=function(){abort("'AsciiToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToAscii"))Module["stringToAscii"]=function(){abort("'stringToAscii' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"UTF16ToString"))Module["UTF16ToString"]=function(){abort("'UTF16ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF16"))Module["stringToUTF16"]=function(){abort("'stringToUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF16"))Module["lengthBytesUTF16"]=function(){abort("'lengthBytesUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"UTF32ToString"))Module["UTF32ToString"]=function(){abort("'UTF32ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF32"))Module["stringToUTF32"]=function(){abort("'stringToUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF32"))Module["lengthBytesUTF32"]=function(){abort("'lengthBytesUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"allocateUTF8"))Module["allocateUTF8"]=function(){abort("'allocateUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};if(!Object.getOwnPropertyDescriptor(Module,"allocateUTF8OnStack"))Module["allocateUTF8OnStack"]=function(){abort("'allocateUTF8OnStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")};Module["writeStackCookie"]=writeStackCookie;Module["checkStackCookie"]=checkStackCookie;if(!Object.getOwnPropertyDescriptor(Module,"ALLOC_NORMAL"))Object.defineProperty(Module,"ALLOC_NORMAL",{configurable:true,get:function(){abort("'ALLOC_NORMAL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")}});if(!Object.getOwnPropertyDescriptor(Module,"ALLOC_STACK"))Object.defineProperty(Module,"ALLOC_STACK",{configurable:true,get:function(){abort("'ALLOC_STACK' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")}});var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(args){args=args||arguments_;if(runDependencies>0){return}stackCheckInit();preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}checkStackCookie()}Module["run"]=run;function checkUnflushedContent(){var oldOut=out;var oldErr=err;var has=false;out=err=function(x){has=true};try{var flush=flush_NO_FILESYSTEM;if(flush)flush()}catch(e){}out=oldOut;err=oldErr;if(has){warnOnce("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.");warnOnce("(this may also be due to not including full filesystem support - try building with -s FORCE_FILESYSTEM=1)")}}function exit(status,implicit){EXITSTATUS=status;checkUnflushedContent();if(keepRuntimeAlive()){if(!implicit){var msg="program exited (with status: "+status+"), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)";readyPromiseReject(msg);err(msg)}}else{exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); + + + return PHYSX.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = PHYSX; +else if (typeof define === 'function' && define['amd']) + define([], function() { return PHYSX; }); +else if (typeof exports === 'object') + exports["PHYSX"] = PHYSX; diff --git a/packages/physics-physx/dist/physx.release.wasm b/packages/physics-physx/dist/physx.release.wasm new file mode 100755 index 0000000000000000000000000000000000000000..097ab89336d8b214f1711942c7030dc02aca1997 GIT binary patch literal 2465815 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 z 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

ab77B;Pr6-9iI#p%^szssks&e4TZfih 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%0A{8|QTejFj7Ot#z8(v3y*6+Sa>t;Lt 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%0As5zBU848GMx;@WdD7-EL(v~qE@QhYqTa#x+> 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�g0d*OWFj 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�c$_0hau67Af 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 z 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

sL9brvBrCL_It>_`}l~vy7bg-ZXaon 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�PXJ8)3z*rl$1jjqm5v<7dy=rh4A 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

EovZ@Eh1`&ROJy|*kcW*>brrmNj5>tn$a>? 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%0A!wz^R{mcA1gj~$?z*g$ zH(fR?J{J?~j|9D|stIHyV2esGKxS?xa=0CfR9%E88bM*g8Cwf(cWt&>L#=_|RpfQ~ zklFuiq0_ltE2Q6CIe1Aa@b53GeJIR8VrmOp*pLi92C{|mXO8PLejvTz4({zBD*rTBX1 zCl*qP?2pajC5Ng%BAega%S9L7z1OW6qEbF#>(Ei45qhtCYsm5&{4c>iEbyh-dvU!8 z^^U&i-6ByZC@0r$cw|zmz}^Q>%jr>Q7ldV;-oV1>P>*DO#Frinz6Mn1WL~ZJ9!(l@HTIX=q zIpRRNwrDuzHp_SXn+(*VP6gHM9$ovvdE?TLUa2=#dCJuRwJWUtU6O$C0SG>XOF#?; zA%EB{!NK947rbEEfRQ^4%Y=1+ZN(KV-O+7Qff_372@YxvbrjSH&v$wnEHzrxz=c$` zH0}>UXi8VqaQ>!VaJh|dRHYYqoc@?z0HNpwH9n>n+5_!p3z#4G0;gA{7uB zrWabI3JZkekLd-AJbDr0^CMxwX6KIIFItu0PCz>SARioI;BoPWImNoK9q6+)+05LW zQ8k^wxGF<#i3^t`2>R?eGqs9d$2lJO(6!M&8iQ1~2HFECJolvIGtj`U4?y$--GSR|CR z6oJSQWd;?M$E9;5Asu$KZp27KjUyY2L24?JI7%ggjcC#FFx0unt)f*p2Dr=?gjSN% zQ42USHRSZlI;VFX-P5m;;LO%51Q4z>B#^Nck~z<7Pk2LzNT*)SVFNvBiZ@70@eo;N zaUM1WrzfD=ifQmNzCw-3>}zJh$%zHXre(^2Lv(`9*$JQMggv9j_Kfb@GrGGP`qZam z;1JrEDCI;M9kYkWH%a)#3ncvFc@lncjfAmy1A?)9iG;CSVaE5_eQZUb8QZ!E9(sU5 z&l%ykuhIEfJ#b);=saJwD}2?i@Kw7)|Lh9=vn%xPTIoEZx&6G0VT?cdhAF@Kx+y=p zW6H0-M#8UNCqcdU8VLtDuaIzf{uR27($&epG$wc=b+8PI#{yu6;$(1`Wk(ruYcSwW6|OSl=+c;0%zVc1!;b0%3Aq>DR}yQQxNrm zDeZmFl=i-BN_*dFvtqbAt+{)xS{dTT<31J+k0@@+iqRgI7<#Bx_OfQkm662ISTP)5 zJ`(BZN_3H~L>K8wbdjz{7wLL*k*+@&4Q-yT0rp?oMZo?GQ^5X#DZl%w$2L(7VcyT0nd|`oy=RPkcN2 zL|>y%^fmfKUw=9p%L26QSDXrJbGXEwghaM|51ZC9T~^an=G0VvblCcITW(WNy0V&< z!&Xj@?Aw1y9=B9=DC_2G&J|^Hc9;~tu*a4$?Q>L_4>ERCXG%RXVaiCF`j! zr9UG}TcygeT3_wvA_cp{6A0}a;c;G-LLEYh@6;sY~a=vRsd?p!m za<1zM&=$ER_%zD<(U7)em=UBpUCO}ecxcgQ|HkF+%54@yAeG& zBB#fgcs}<*7M}YCkZcTjNZA~bdVn3dL34&`mDzd2Pjg&Q8%C^oJZmmA=St0`W_47v zYM!9xa#M#AVoV1yL??u@GRRslU7%&o|_Zc_KfLrbuRcf zXc`ms1A%X}LxN<$k=AGiopfF@6YSx{4#%Ae+{7`8z=a3xYPZ+{w#maeST^BtlzYCq zE0D*-Di$TS3nZTSGU>zn=nwwheo0q^;W%LWz_1#mKWNwcMPfb{SQKc*0?K&7(p@l( ziA4W%^exmwrR!P(m5we&mJVu!qnK4b`*xdY>>0!)`jV3f z%fQq3iI@~q${3@Ah=$JSy^U|)t&aeFteNsJ{9@g?_&33izwykyhOm(PZPB;Y#&s}@ z<$8lS#-?Ak___uwsTqI4nHr$hJiz*1VsRg3xgSB_vmcpkCa(k_9#2#)0}Xdk)roWv zN0E&x4=I%v?n+pTQVAQQf205DHd|RW^EAZw;omtDz7&e86{;NOr^}=^QIYmYm(WY~ z`Q}4?8}|zq}$i7YKQfB{{Y?X}zJqD_H z85{`19(EH@h^w4sDfF7au?tN^k(M0Z?Jp#C#=*1I#zbjP=;0RX^K>z2CQX0c{*Gwo z9Un$CGss}LW#Pcqsy*|8;(Q5Dh6tD^L(tp?NPsKwe(s-BC&TLE}6$K=KvvAt=ZQ z7lMk43r9qXF)p|)CLkQp^a+RvY=`cMwfje5G`NrLR=8Z+1y*5Zg+W)m2r>f>LT1D{ zvF*>fRQCQhONA@Lj|-lv*|!ne9D&#z+(5;0CRm*2=mzBOabpn9H-|RrbI@J^+Z@@b zSE<8(&}yoU`iX3(-z>AgWt|@TPF+)n`mN^VMtuyFc-){*?BbjClfe0mv7ZRfwu$=Y zh=m4Jrm%vDQ>Yq+!V_!@6rSw7L1QeJSDH_$A|m%%^9=LwxY^g6wb8k~YuvbzvGcP9 zeAoTEE^NVS+0WT6zGwLpvG+e=)TMo(Hewp6vubM0C`yTr7aR;cN^%eEDgN*rQY*2% z3~sif2Yo}7k+=H3s<9*@n#sViua(|BR(gZ{8B7Y;7~I8^r8n?Ka3U2U=;_Uq?v(WA zh-p(jX6dLm%cVD`OK(tV(HoU{qu!i0|KZ-uLZ?CgvKN8fv120eKXAp<$PXPF>)@xR z^yd2oM(>#d%b%Ds^dFl7%O9Bn%lAzg%@0h81Zc!Jc3ak%&?IHAu=Hsb)l;!=zL%b$iLye zMWFLDpPAD;J~R5C`^;Q^-RGuynkjVXQWK7+?LMP7O2fhGv?B#L7a%rKWrZx0{d5fe zL*ryT@kz!LP1B|LBwdNF^2z8bU7@QV9q0RHoaiKCoaiLrlTanuPa6NWDL8u9lt$h* zBKvxeDse^3uZds;3-22ymh|8*O+fd>>PuT%yA&*c#eP5^z!BC z8DEMo(zEChJ&qpHljs3GrNalfhj-!o+;q?t|{vr4M%|E zT~i3j4@?>UcT6E9KQwiEYeyW@OQhbMUKH0(?u0&V)WOS9T z(ABMRo(7Fi&xSfE#)rWbWkjN>Qv6SVz>DL>|fFbLlJrl9Z7O<6-fGvy;cHU*78 zFl9~s)HFyVOIeZ_imqet{4dO%O<@z${SGwl5g`|GYYR_`5CR`0JIHb1_rD9Mk%VakucZVD{# zm@>_8n*xqsIy|ucO`jS5uY6{j@98F(=;w|&CikR+b?w3~IJwIX6NJpZhd@wpnN9gE*yKKGt@3I#kyjvf1>i{X$k(AnmhPq4=$WcMlk&}a$~T`C(v#XWOrp&$uvIq_GV_N-xX%`B zT_2(9XUvT8RIVExD{L=vnvxgUWwMHvWGk{Xi&*LPnm(Q`!{9sk^t4lFe6|NyLG=}w zcjR|eI3_)oF-e~#%}wa1J1@ALQ3SI1G!S{-)y(7Jd(B}UuklDEJhVlP%12J&z;py= zl0mjNPkYhOm#E5yO06s82&GEyGC6)s?o!pp?8AlD;)ZE`CA9B!EPnc|)jTSkt*+?v ziz;(jWqwozCfh2UNm`|{%0gDDMpe*&SOth%Wq|q22d$Tz7AkS3{wm!3EJvpr@3fEx zD7seHY4~u=r|0WspZak2E#dN&ss*)O-t=U!#kp@y&fBJ^;E_BZ~*#J4?awj)CHkwZ{ z?d%%H;4XfDkz>FN%2X?I2UK6cQY*HTr6OCG_+8w=4~5_|9poqMLJ$M0X*dZXLfK{s zy2@T`M)BOU3lx5ffWuQ+|m;T-V$*#6{#@($#j< zXob+nU6cB0A+uUvFj=dga-`3LyAHT!VYx5@3@b@H;Xlf!gu6niVJs zCC{U^1$)R{m7iNMcddC+lz1%Ldcr`zr?t^|vWoKNE!adl_dF^U``BDo^rQ+8SJ^>H zR-5NG5z+Yt57%-c*P737Hs@{lY=%(3h?sOXLN6;n_uxnPd{jV?WgWt5J{EC`AA755 zvM-si@0)40s!Rx+WnWuszmI|Zy-~lj`_zqht*ksG`F800r=AfCq{J;``AL)_x`oFAb)P-87&Gm=sWyo@Me;uqlbF?32dmFGTwd(2Sk4S|84!GSv-usX zd@j4rh^o)stIh%fs`doOLKPLB4G;j5Meqbvd#h2M2naG^SfO5Q#j{}`vcUp^PZ*n+ z`z#>%q$UBu*>KIU1%e}X6RNbJ))P~w>=dSQ935GHD$AdJ3p#hOdO8M<1Mcc*{{X$vVrQP@xXNyi6C;U9xYUMPkZ^1m`d`hoM+zBd6C~lL(aq<~^wE=522{jzlhtXY zy8avs;E07Yi(^)+s$tyRL)J`IRPwvq!2Y@0z_Gan9X45qs|+@*_GuO7G8ndC(bnKu zdFs{6etfk)YqC~9Z8DH=L&B2ZvXu)a^X@n7F}caTSbxT+mulFe)152zag$4EiAgS_ z0Va7K4KT^o`Z1Ghb(4GN*Vs%C18T0q-)lY#g95kkY2(XKdYB1gVKwW_szC_=1$L8* z%_V*7^R9-~dxjn280?4Q`Vr3!gHZn8?7e@K9mjRw+5O&|nK$#^4Bq?zW`G$0)r|o# z_(ehz4Ke_Kpg|BMmrATZ^asx|$?y;U!85>m1qk8loQMXpt38Js!WIP#ZEwWbOysQO zM3I?@a%6{+7+Z;aHd0J^>9rDT6Xq=A#97*wV%nB>X>&i{d#n5Pdou$(;GhWD&(6MO@2oV-Vg=;+rf=R-1O!{Rs&Mi<;VQ13#~lK>M8Vm$f_- zUA*`xXHra*I8Qx)0c0Tk34Jzx%jd=T`8;_SqY!aEAG-&PI{C0)o#_p1NzqAjkX>Q} z7igejkejaA2I{-%Eqkj(A>OlzK~s>#Vgrv_19w{kkE#W>=|~H9*Bf|L>2K0!TN3hl zYt=yZII0GwivbV!G?d$dT~{DeO(2et0NM-UEOqp{%to`E=a3S4T6-mMe5C~Kh3%wd zpHHuQ`YDmZk&sHsX(uCVgSj0d2EeR|52M=UVjpQ%_DP=5kg}-Kh;x{}tPo*bBA1TH zkRLdaU&C|@`Hy*i6p*5I0HM{6O(Ll#c9vG=%d@!fZ;_Wx}64xzDl zp`~=~&aXEbGf$?MSZ8Yc5f>G0j@Gz$7V`)ba_pl1-rxPZcdp?%0dnD7(TLG*&K;m) z7I^W~c0GnNJn@BGrXEx3M5mBM+wpqg7KVW&>*ceSd@08)%L|7&LiAGbiTF(e!!{Me zI$|?Jyhw=&VkBT15=IC$KvA<)lAp-xMe1I?kP2q`F-)QEp8rQ*|NPawVFk(jNT2x5 z37u;=l5FZ2=8T7QU)6XFa_XLxV={n_i8wB=kP_i`(Sl_nET&_kxqc$-Q$0~OkKo?< z`gCLA$%YQ29zB}}pg(GNbgSdNY{I~mF@#!sGv|l}j)O)7n9(#Yv=ODr3UM59!puq{ z0Co{}d!fyRs1iKqLbkym=DX+PO`;Ha0S+e zUo{(!zg#3CIyum;Kd03VacB38HdII@uZ!hB-5N!!*T=wtM+zC8{(V}#OXe}>;^Zlki1M5RR||jWMYWry51*%74L1v+ukvd3^Imo^MDc% ze&wPm5q?3o{OBAv*2uh@Vhq-zcPxp(S|tFEwS)EFfqsPf>I;;@mv zQ8vTb(Lh&ucNEHy2_hp_8o6S?~tvDAq4}F{@wf zZfRdiJJm)D%0C&_GBQ5qWD~Fhg*9{FRZIQm@To|Q17v!um1krZp};U&zso_p2lK8P zU@(CDE}(%8_YFZq*NEK^G%y$592$ZI!-&<8Lja$c3_Qmo1Oam+N=I~g5jL|!5U>l4 zuvA7{R}MS?VxE|Qq%P%cF=_1YKG7c`_Sqan84mrBe#zm5GrxXXWFTga7XTcINYa@u{&JVp1Gd4~M z67C7jXsN}KuOON~nPr%(%7fTkWs@pjqwqen+md(I9(G%t4_n0RxHccA;x6AZivcE> zFeSb>t12+qf=!A&M=mX0B=2q5v+-&+?PQ##xUMu(oQx7X&~gC}v?6%c^6d0sq=oWg zzo%TtS7OSg{6Lv9pu%Jk$F#q{-1lQuV5;36@ySZk_Wg1>V$#k%0zOmwUOg9C9uNyZ z=8W7vt=4jJWSMUeM(@r%BX@1+;#gj?f}W8vDQ3)CdZ|~)K9Tu9qP@jgiAkpXmvSG$ zINoQd%|tw`JAavHc0olhAyc>Z5oTGoOn95ZtV1{yj%O!y01cpzgIn!{P2y%cbfcZ9 z+?50B5wURtX~JGTMQNx_0%R9T;6_kmzjpz#1JTO=hV~qpuV#HRm}5yR)6j*GF%jDH z`;^J{99~)bd<*DoiNxp5+@|q$rg0CwN&O6aEqa7sstfg^{cTWkD@NNFvyr9VOKJwr!4*PDsb>U|KS5v?``6 zS;h{y*bb_GZ05HK>SNJSh5VmMqCj9p_?ke(0Teti9oD0T?17Xfb7rG$Ob(-IC=w^g z!va7*En8GY(@>igh-5EGa#WO5CzKAgfm%vDQ#8RjC6U|_n{G0Z>W>YFj@_SzSp@gn zIqvP`p?30MrUFY`3E6cOBGNOng~VnZ)E-kLheZ@QY6I8#)@_a5b{|FYa^q~i*T=0z zi8g#~7?nmSAJvY;UKOyygW{I;FkIXlMtP#43}ZaaMm&zYoGQ2y*fz2KhUkQ<#q$#x z^7hK_?YIxA-ub6)`DyTGOy#1~@`zXqiSQDySjM6+%nma3C7|F7>DhdRzCc1zg)ycP z;C0F9OLs@I(%>C^iTp(pf zg9moEL{r}ArG6nevQk+rq_Gfkh0D}HA=R5!r_3{IE&>R7ba`%UO5&w-G0iPYnHVUg zddpE9YSWk1KYCOoz_P)_>*$#{N7Zi4bGxm|HUf}VAWVV?ovbv=Y&1$YucG@Jb@e4P zSUw){!U^CZ-Eq2CEMyFM;jmGq)=pXxH&61q4eeO>Tz;r{=F|95H~^S5E>R)+x>EzkC=D!^Hv4OKwh3OD2tE}ixOX={3#RJSn2cGQ`H)em_&wNVV}8;V4WbA%R?;pAO+Ae-u$rGLE4VP4L>Y)kU`ST>$Xvl>O`ve z1Uy810%5=`r`m9AAq!HWFfSWbTQF_|hanao@(IVIOKm)4k-|f6E_kRV6Hm*w zq3HFz`GLhOF+XBp=}h1Q5%HpWEj>Mg)xRg#f)5{vpdU@(928d^Qy?;phjv-fLIM?) zvxI)cD$rtD1#6C+;Va+pMjU2zy9)Y}s%+x$)pU(j9pCAUg`@|Xd6+h{Il&du%2SLK zoQ-BzN1s$0OI}r-DMF3rbRs}7H`ZSGB3UO8e4{avR`OhlZFo3gs;AV5taw4LN`zI8 zGuZLqZ$1ItG+x3S3o+NUJY?xWh(VkgM3#s_;0%k9!yNbl)qSkXQP4pL$BFJboL~~z z2q$!}_%Ke)-3U&Ij@}t34*d~vf>RC~;>4k0oH+C+g%gK{aY7MwoH*oD^(|bp>o~E` z4b(Qm39%l>iG3AL?5l7>psa8LE)#JAsk1F6@!jKu#=4FZ!ny^+2qS*jD#Sm)8kROd zgMb9vXAO{)vyPr}SFFL%04)*>LAqcM84;BY$oDU15e?*y3vwf3+&vMZAczs|vONQ= zVM#9XVGS(MR5T$k`Va+8ieQ;ZAF&FkTW7S1l8d8Bs2lf1lulh}DQm1@9M%8>gEin2 zDu%E(B#T&sPR#3$!SRwcFv?yNJl0r)BGhP#HP&#*TtC5M7m1cr#)t+kti>rRvWD*h z4KVYJXuy)i30`v>Gy4%Hm_z0*8YYz8)I1rmLy-I=7vk>12qa?@LvrUzAdF&DGO2}4 zTCHVpUrLt2v^Db8;fW6Zx$3+|IntC1aGl=c-V z8j=oI55t)8VX!~r1TG&ha)5RP&B3aMNjJP5P~3jKuGxoRVdk!8*k`fVo@L##N}tHi4AsfFZ@Q5%eMc8 z&zMJ0oLZP8!_k8kNH zZH}$vEDfUzqcp^w;jiVKAjo80neoBrYmFLGo>3)kEIB-`#vW8t35o7G!3iO!wl!@A#fgW}cu^vVMg&5XrtH9j^NOdTz?}BXG zwToxA%8vEg0kIus$9j2=gWY_$SkKeT&p?S;qRi`k16u@B)}Rqm13I*71*M1-`iZXK z(_W_W36!d~zgd6rY2DPV=zgLusGZpwsRwg_lIP$LqHUIVqH9)xrY$!aRpYV7dx@c^ z_wk@>r+Lu)lYEQU7auh{ndcj4?Pv!i>7|{F_U0G?i7ZSL*%EblnMpJgqSdJ25Nlxy zvJmolPquvO!F`Z}s~NG!l5nQu6=NpgC<3_95KIrl-j&8fIhffq3J9$uXk)P8BKrN3 z&SLaFMekqa*n$~VcsWubTLZu|_ULr(VPs8{CanRb+0K%mX9}6ago!Go@EZwZ4=*}8 znj_vHLF#(@?Mqy5sf{n%m>g(w=4Hi0Cv`vu^)N<`Y!>l&FgKz)&GyT<++P<$L9qu1rxfXn}=QwaW}i5j)2 zHAS%zVo_{nkm?ztK$5Eb#LG8K6;F%hU+I^xz1;oee5zl*<}*coq+h-^)fIJFQ6rpD zGSK{p>;tXAA0}EmKOf?`mFGpC@>cQzB#EQ4Y*Fu7p|vjJ&(k2Z$}O{)U8`BzbEqYo~q-fubq|imD1IvXO3`;YuhvsvdGp)O`)Y z2f2$#kWlC}mIAW$Ab6j{>|=nlW26Cxv8TGleiqj%7#oUA3HKplQNr8|_ZOfFw%dNI z8}lAnfv=$%*hcLQu9bXDp_Rr0C+U!wj;j47;=Nv>{BK%Yu1z$8pQSjv!APK$!Gmk6O zz70?!KFN}aYtE|KGcgXqh9O)&=tcVguzXl3FVe0C_Sm#7d=O!S;!K*uaKr`0Q~~$t zt!$oMo9jrzd)Z;6Kb?QyOlRW#Abx8GGr_2)#4lV0!AF?O)=WOdTFYh)$)M=uRRb0s zmZD`TTKG%T1QcD)`KmxV9NS;DB;2yadLHscLN)mnle{%L!~EBhH5+LOy1PV42MJ<0 z#3t%O^uwwRX;5}!)683BbXAdAc*#qs8RW?>Ov%vMFr#YXbop5;CtaCDZE_>3D-Nsz zsmst%8Fh+KEr4#HYPpAynQYCHSV!x`eO_~Gqkv;;@+3XIKS#W?7AP!p-#G)twg%qo!Dw28>s|ns?lg@qc zuXqiulBC8>#ODZcNo`jl<16CTgbp7=9<#4poGJ;3blj#II%5=6v{pMaDiBu0|0k!L zN$(%*=zJ|r?dqS`Qtk#_PJHH3VQp^DYTi%h2={aidf@#7ws}NMfS!0P63QshSDv4JXODhfT(=G7J?@1TGSE}M9gZ=%eoRzZY^EH0zA9POH-5xWr;=!Q)aGcY+)-nb*EDV=H3r-M84Jg;RS1q%J}FX zwG3CNd%(IP!S1G#z>$zx7Y;0id3DXE^|Wx+t-oG#~>#GYS_pS#8E19-wi?u(xqek%oU z`~tdfrv?HKj@sfYj^9v#Htf07no{JBYpJW9dGskXcnjeI3!ngjzrk>~i$LT8FQHNdJ`!WAF;I^0au8Oll&8ncfSm z;T6$FTvnByv^$-^35v#Hl6@{L+j4&S|O#YmXMpmA&WL zq7qXv&cbL?QDKIfBc&PDznX7!FSTSwB_7ZP$zU}GotNdx(ZTci7z92q#2^6rR15;4 z=Pf8)89R}F*;>mN5v?E;)>R-{y0JZ}rM)@twN1#UYNUx<-i8FfMW zGrb?vwjB(t_iyBd5^J6$@_6yCYz#orlZSb@&tWzVuKq||}5mJmnX z*yq!xd;$ffHV_?hX2}~nw6AEMv*?%RVkh$!{iaAYIB=MVqM<2z>MfB9CDE=F3k;X8 zrgf^;!klW-u9StlQr$tEV(3iE$5{RlKAzxz5vaGHIG!k?_fk%r79_1=fjAX9{Zc-D zJkdS7;}&OyTMmrsNY^7Bi<~fHc`;9oc~vnNw(wP#1dm%fT-t_ND{tQ7REIUn(#;U( z)v=Y?bp+%s=4$g1_tBU^j)BiW1w)6+CY_Do)Q3_ZMtunN;UnnWXk{8m z$1u<~y%(Bp>kjc2^*7WiP-L}02&$$~4ob%OBE2yD3EUHww2H>ryyaNJoI{~yo}ml~ zicp3O5G?`h1lodE8qZx{DO;3ANQP$hCW#h7GJVEnDQW7(2u;5*2UZli0lC1`k)%6J zP&Qos**RHv9@fuo*J?3G6?1z%<`!lH)Qn70Nj=)L%Hpok^TIr9J?0iIRg-$m2debN zo50u^%}cbU_%g4ut!?y5GCCJMkXKn44&ZFyJEzMuSpI8qMMQBJO)5e`@xLd(PwTTu$@P6U`5e{%OXlJ@Q9G2>aMj=jxju)A$wKyUldMfWqFixX3G=Pu!!Y0` z3>cJ2FRsGrFowFg3UE#UAB(-f{l)%ia_CcI^H0r7 zQXfDXHj;cwZ)v$kH6})dwiZ`o-f=6YVqxQS4}7sP%qM*Ga7|C;Q>&n8oqZ_T1k>hq z6M+NXF?d_-7`#nVc3I2yvcuF3&FV~ceG9>=_Qk-@6BkaTH_%x8tCOCe>!jbT-E#i# z&{4Z_f<{UFY+jPk3UI?Ue84t?^pS*ZBMuP)>B%8}Z&ezkua{`E7Q-3J7GEd3aNqCI zgM-AywX=@M79^Bw!YLUVs)fN-;*O54Q>t&6n!&eWYI`$WZAFYKStA!tr;Ud-E zX(u-19_itl!qld%`oz>y{Ul12^3fCoVy@^XsI2$n9A%A*<)riacsiw{;jd{{MY3lB zV3Iu>k_2tx^Qjm_vVT4Xk?h%hv;;`@&sdOYF&{aRvdyV7knBf~r9a(ZK+*2SRZ!uQ zJ@Tz2`_Z~&|I^^`btQZD(}pDbe?BDHw~A*PQtn2{UOd*LTE%y?8xsY47HBTmN6|!g zvJSvVxY*J?Fo$V;;*7x-J>`xC4Oz;$CS_kfaXh(+?v6_&c$>=?;cO#_3&`jfa#n+f z^$i&{pFW=4On-Y9i{4+!CL3t;6l=>a3e$Er>+|y&D|P~Xo@z?7QIpEKer3Q%t4rj1chNmc{+q?se2mWIowLMtaGk+>MJ?zFI4m<(yzsMW z@xT3CQoP)hNEKIS*j~4eBsZ};F9b+aZGg+543Zx?A4(M_T!Xy&*#-p0qepiz1x z?2`r?3bO{YNQfzf2^6RlnrMhd;OCo~+Ei0_&=30DJ=VC75bEWN@_uNc56Nqvg+44_ zeipi%>as8keuUto9(;=6V;;Oh@No}5L-3pj*9d;VgCEf4W>&yq-y@^WqZ0Hj?iLC9 z7P?J>zJ+erE)XH#$<-Mei#{z24-4HVs}BpkSC%0353~RlBchUXVKjr+KOGAEvgw!!zBVm%LEb+P%!ei zxLgaa<~q#VQ{UGIof|N@Mtz~raZXo;poKsgl1V2*=7#hHq)j@%buDea>(Um#u;zJ5 zM%lXq7pEd@z$-bJ4t8-CvG~Awh$Wvk5u$5Nk|d4o5L5(elh!={^A2^`vB^$0E@s1{ z2}=kI2a@F0MCC55B<*7?F)_DW&2+scM+?yGs~`?;h$?4{DyK}Vw@GH5U0dK(s+A>W z_>`58KMp=jl^;U&K{t~62TQlC50>{Z4LGU>=qt^E4WI_H25_-xK2^-E($fJrOc)fV zTpw)|A}HnKt880L{6!e<6zI>5C59bkly3)N)IDB|`7m+1cf6%T4 zgh?$;EX0Z(M=I+e6q!n<0vpn!tL&IgvnIFu)eT_`DD3NKoG1IR=_AZAK-MA5^g1vMBFyCV z5k}ebnF?WMDum&nM)^U#^bdl8f2a_~^HvC>uLB5!zU@+Ycb)uh%MWHV(D4EjEn2ce z(AA9eqdde(*sju>1{mnf9fRr2z)GF+kOlXVtR^=w{fqfRkW7S{Wd0*7$Ny_g$x9WW zp%62Zl~c_gJ1A!v{Q@oF?l*l~&eOkts`~@^{hti?p9)WX607(AG$!pM)8jAxMx(x7 zWRI>Uqp0d%t5*#LA%-PV*3N`+PWyuQsV^@iu^Eo;6`6E&LoTOwR&(S?Yj0{2rBL2N zb_vQ}sdx5TkvZye>CFxavVsr&V(CSQD_6MemZ>XL5 z$+=ZGn*A>Lt4wTMq_6j7yx zqxXJm-ue-cuoz;sH3^3lScclwEMRB7WwlB9Vz(0-dTKnRsaw&XP&8>%Q0wGszC)-5 zY-D-1U!iuMR3plGLXI?ns=yT!;|&49Jb2WNqy$w3+#4vf6;KWzV)m6|SJEG8X zc0dn7aZB;nKl9Q5lj&3UoKn+iVt8n)ch@ndWNuhj)3#7yo;W2Y+=|3%vVzqW z-3&qb%UwnUDKzqSY%9`D-a+1!H<&Q>z+xn#;urt<0Ld`>8N^-1^3h|(w>jS2Csq(t z=ouK?7P_aFl^@7~AeAR&J^IL*6ey;uC+9Ajk}-5dtP{oWe0`v1_RW+YR;OP)NaN^fn&3xp-n9a2C4#< zWE8=vn0Y-+=Z?#cVpLz5c=VN7M_-w8I++}C#Jql=QF7{%7$g3QyhI>NFGA=3JX;j2 zOyplcyV;!a;NScM`7-gc=8+q2g|)3s8U~IC<(-6;q4%Ge&G4B)Qe?h4L~W^e!rZ+m+&FL?nY54uCjGg8eH}#` zSil7WeJntv1Q^=Q4AT426m)0+S*=29KnRj*ZBDAS`Q}NQkD3tG8WubP6JXaUDmJ}< zrw;#QaIJkpwYJ$ORBIc3irX9W5{BlD`+{yia2Y3MziMNR9~3g5xW)M zu{W^Wsy9=yH&fox>Jz=$>=V7&=+h1N#_Cwtn^5bCL|R^pBzCMGX1$4OBH{wWv#N11 zqBE9Tj&b88;K3(p$i$^@Vx02%l8A6|1>uRB@=2*u!HVgK3LxlWu!LljH#jSAQmld5 z2z;K>qZgJ9Y~XuB5QJVXnq1vRmD90lMY{kAf3{Wp*dI3O#bcP z97t;eQ|}+%MOGT8 z^9cznX*P}3A-UG^bH4^G5Iw(^GE1Q>vVW_g}1AOVDtPnz&sqjHH%&d`nTJb50xnso80XgtA& z>1A!1YQQa(^uTYwtyCb&KmrXLFlyHlu;WxKp)Ee5y#zJLrLJD@|DN9=R{st_6vWl1 zlV@!jou)h5K$g&H-O8nnVfMG8b6v@|qj?fZrctEEzBG#n8LVwcx#~lDCZCp-Gx6T3 zDt>Xb-;pX(tGL*H(E=`#Q158UFBh;$u9dA?bf9;2F}oQN|A@YQtI6s%iJy+>(|f{x zjat$?Nf$DwwemL{pz*Z58*XOjSo0^^AwPW9!tEha_|vV=~2N%Bkg?VURvF;RACr z2r35&rf1Q{*TUQx{9=Qp5&;Qlx1S6g`brfMixi(ElczKxPboF4B=uC5^Gv>Nk&NE% zvTT*EXtE8#P6|~3*oR#Tm~2EEv`QZ;_-SOeQnYwl4My8a*txg|JWA*#gV5_t+J>X# z2~LK>$V#r59cK6$jchl)H;@{LfWXEe1(r0$z)DGd7}+pv0@f5pV3~BDPSEIQ+W@pl zhvu<@{NqEmcLBJFROR3pvb}2~WLuADw755fWW5r}_^=U@S@b5*FeK}3fMmUhWLlUQ zI&O$$r1~#`WHs0fA=$e&LNfT*5Q2eI;qV#Tl-*q+6SU|)H3857iq!$S8H(8;Yy#8@ z#Q^L&6k7*aL$U7($0Amgn2uXp&~7~PIE>wpmUe}4=W*q%=RA&yNYk-xggB3zx)%<* z8IS9gbm}~=EQ@)e#^WaHs5hSV#F}m9bsksFA#idrDfl2-QlTI3;&Hu_s$w+C8GSOO zQkIBRpdSew{c2g1NgRu3nX*K`^{J>U^0=ORu<+6YZ;A1^UIn|(dLG9_qpmefwyJpC zlpS&9_9o+TIPfV+wn9G!rg0Li+L*_Y!%+~6jg5F5>-3VxX~_=cY6z%a_bQMwpTMqg zu^}i`%t{af%nnvZDU$So6*CR8~H3E2!>e?(N%x!Q6%?UmpvhbB&^6&U-d zwjRys#GLvzfMPa{a;$D+6tn0G#UdKODC0Crz70@}3AZDJ(UeG_KaCEc7^&cJWk2#7 ziYfY!4aM?JQEbC$bUk_rjW*Yq zFO`QV#G}n3mPad_kPJ)RTceN*AH+4lG4^(GH*l=+XoGilK3FvISTLSAc3ujvEhvHc zd5u$ke`i6=o9{@qMHAiEmIK_=)u6SOmzJX!?8N1h_@ycvL!$1qE|G>k_2JsAw0Euz zZg}0=M#5IAqp}W_u_o+SMh_qLj^SbWMmjcrovLbM^SzU;*iRM960vKjV?(tpZR|c% zTn-GKMh#uA)}Wj-)*3V^p>Dcf>460x9*^^ZCBnsg+}D}fz#UKvjTayP-2vUE;~gVt zCh7n550c_1(YBfzMkeWS58C;dL|FW73Mh2uK1fXqb%4tnL*r`m5K+;4Rl-J324V34 zu_p{6g#qfq094JQQ zEKgMsk+Ei11p3yjXR{Ws32qFeywB%F!1z1RW87{F&;zD8f2PofZD(+w+dRokNOd5; z&pL)WUThCFvlTe!8Stwtl>yP>xmL2~Zurv!xOJvmRuVg;YIv7MvaNY>HG)PR0W{3V ztDMa<09ZP-XY9`xO>M2}BU)r_gwZaQu(c`y5A?JXO}~x# zJaG4kPLM%>3UNl2eR72sI4wp|Y};^msuXjoPJn|1@NLV;ryPZdvkPSB>F&u-7uUMuxio$&*=>I|WG z>DbM;(ggA}Ec&d-hLODpR}Rw$0mB1tqw9{VQzqlM->*VyTBIp45yssg%J0Hr=S zP)00)_{X%`1&ZEw&SM(b>{Xxa$Q3CJ?_?O;0IkUOsMJqjqHkPuv~dAZ0%G(DA~$we z`*<}0O|~yMHf)StLMy{pL$WDtNKDy4M_b>rTrXo7zs>SuJYu9_iA@I#NvgI!I8t2d zWLu4Y7|b5ckXvaj+{z}KJaIj14o81KvEm##6W9CH8x|Mkz!@JK2Dtps`oK|a1$SHB z`o?rMa00pygd_r_Y5gIj1h1(r$dBhO7 zK)?ru5i)}68bN7kW?U-LxVR2{E%IJ!t*l@)(hXoz<;cfl9$FDe$wI~#EM%mF$%ELq z?UO>$;tQ^`sRPd1JPf#3Hw2vNnj}2bFuo7C_f>#<|DRF7MeVWylKHMDVAj|yo3k)p zN65#a&*VOF+$d7@SrDOeN|)soql#R}{Nz>vIt>ZBz=@FZ6iV2zMK*}MT=LpZ`>aQO z*mlCGB&sCn@8F12v%$aG*up>u-R`eC4Ocif2E^#+Z%_bNfaDu5OWt@n|?A3Ze2O zya(wH9`^vC+%8~DsPQHv@QM#a6F#6M>w|S#3yC;V<5n%;fR`{;=t-_R)V2>mEiR*d zW1j1T`yg}P@Tge4HIS83?!y9LHsMxpSLK3oKu6(;-uie4dR`qJT zK^mNiu&5aq5f_;b=0M?IbWtS^9ZyYX@wX{P5v{Lv$fMtQTtaiE0issJ1sjdxl#a}G zD3sy62y|kzF*}G&Q6dzQl3fC6!4cl_I_a6E0)1i;JEyexpgzZTE(LE~=J;l1nvGjU(Y0b@ zpXq41(A)D%U z0aeoj{mClqG9J1PyGlWTe8K6=@OoY0lx8HR@{Pc}&6~oP^>M$=HNap7%800$Lx3?d zAzCNBppM2gtqL8PcENo+7x1{>7sKwwsYC&g-Dkp?;gnekT{ zCu;6-Zn9GxqZP0Z)nlhkiDIrXekWQwiWUjiL@k*W> zzBs$7+eGn2Fse8kY5`_8YqF}qJA?DIB^uFNRU=}nmb?)f61Y|=C#exw_Qghk@BK!I zw+%MJRY~vIh`Fi}_)?~^jtdJLNzF8w?ak{;&7@h`ByV_!yk0XFr|ac)NyP-^hl(;!J%1Xd*+d z%qSQ}cHVcND6&Mekl@yZNw-|a1WT@z%>0^{Q9{rn(W;b})E593%L4l-;$*pwft4z$ zH&_5O)xtx@3buNaX;Rtb@miC&mQ6;Trf5ntY^M>bc&q9v8!Roknj6(aus6gS>7#-a zerlgBh=$u2ld*R6PT4at3Bj8ApqdGQZ=|6#iH6$JX2YiSHBK8h34r0eTd>OwWpn4u zTFGdQk2dR3S^|}`9<8$kbsa0b+JaM@AdU*TNNl-`8sdV}NW##?kl(;>bBh%}zP|W! zVzHuaW3FOt1ErU%JylRnEQFaH*ON5yEPbxaOz1GFHe^M_zY{C++#50@a=#NZGE{Zx zJs8kgwMBDQ*A=i97*H1kpH8;;4cSy~Cw)re{Dg=dHuY&8U>5p#yJr41H71ooNMSUP%In|H;Ox%9y&8m?6>$r#0d${V;m8+BbQ;@(bS z2UB6zNMsKVjnpP%w+0UDBl9#4F7Vg~FbLWGEf&H%C3gdXMy#xi>rAW$+pLR{Ol+#p z?*eO%;G|X_&1RciJ#6bYz%whPvv%9cQ5~a+tSwwaYpceT3=`HF>1XY_3vy`dY}-_|6Jve> zwzWOQtp+XlP4f1clMZvpT9u_7SZ7qJgKIRMYGe$=Kw7y14Hr!)?F1=vI|VCkTi9bi zG;(~E{2-{&lSnALUG&q=jvEP_uxr?obpHEkJJ9R2Ld=1PJ}&xVODrw z7Te12xEieFB)=2C_t~j%GFTPu{O)Ufx$`QKC&OK2zT+BS?$-NV;T{6nJ>hh?<7##~ z6eP>|p^bObz&o-NWv_98Mz1HrDN*}GI4Spz6X7oLgHz$u8s*-#MvW)s?>awjjg`+> zk`TUpS2+G`eta#r^yChNV-cqmR;eoe9u;+(QfSFt6m=z}pM91y(h`Ok;VFjDb~`)b z)Kk9AY3C&;vv~(l1gE!vt}s9evNw+vnGHLgR34Vl0;*x2kGRDs-KjE%J_r*5qX;anEOpG^-3M zl^RSc%&IbI+~z9|L{pHRN!1~7JAi73I9Vnb9??oeHf~91Lm@m`*&XJSHoH@gZgyN$ z3`Fk)6tgArFkXfi8n4@hGmO`j{6sjeyXn$!Lf|@~(Txno4+V&`WO%(SYwVI^hwzPx z5|BeLoJ8d(FDRHd7&|{XcSA;>_w1~rD-;V8=pVpOmzpO&_XO#gG7xB4QBtG46(tmD%Qa8eFQbEX=}jVT~u3F@394STfm=fUjmQjz(N z*fTKu>9bF&@zAQKW^jrdj|A`;X5ggvah-&PO8ax&l;L8!yha z;V4((KLnHbtyO+&+qb*nHYdW}kL0@-K|OfTBl-Ly^bh)6Fap}mIWHOBF{sjB&+4*O zQMyK3urh|i1_Ejr(c7jqg%b}i;_s?+Jej4NjL{yKmb8@Yij8UCDvfNcD>gQ6Aej|N zs7Uz`UUk}hFv7jE)KWBuQ?!O7MusCsha<-75wkK+;m!rI)N$)?bg!uP^cy3>CK-_H zA3RJMFrmjZf0Jy2;mi^TH{gfk#QwY|34)hazT4R}q^vSU&Pmbui$=|9DTBF)_>1Gk z^Pg*hZ0r@XbOxKmBT-I3?hd}qWG7^mtTv7YSF!vCQBa46X;>UN#jhS8p z!Kc_l(voLRY?bJik~K3oG4^k$XQ0c8d}O zy9@?uL;_vf^1DbC6@B}p*{rk@tg|-M;t)Te#gV!~LtC5YJokoL9If8!8l+8gZ>Ulx z_kc=ygWR}ZkV-j7gbg#j=N7WPa=jrBpkc54vGp0_|N8Sufy0BZ{7=pp!(L4+&2W&p zH&5`+Abv6?*JS$@l9zNjcLo!Rzy0lIq1?Yzx)T&*lT84;Px+HFrDOu54)eT}5X7ez z1&xu0>5rtXOtCH47_KPE-HfappO-4GDPD$8P||CpaGTV)s3Z5q+JEvU{ObB9;O}r zpcxwE%V{YkhY|1ra&V21xTJghCuABSk|1_Swj~5#*OHwO9Q{N(LqU{+Zz*SUdr^FZ z+vM@--Id3uFSOE@oZ>yhoH=3>BbWzR=!fB86>1~qcpN^F>?_iZ(bvO@zBxq$^8g`p z&YSe!-U^)4-e2d;ADj{=(ErR_LGvr@F10af0~yEd4(>Ur&Pj+tFW$$Qao;9 zo7`Gd3*Q#Q){-jTU3pcnH>am9{CTpk;0&a!LV_CQEnTZpN@61>)MFMDvs{nyTvylS zs>gV)e#}bay;Z%K^Ht%4SQ7TT_Fxqzjmsmn80TR^xqS5I6i@>PI)bNP1VW(M_ZenB zg^T8Jq%5s+t}LKL$4&?Y$~=p2;E_=FTof+pw>=L!0NL!q=mLXt6Px=77J?~|P;AqGs2>n!x39M{>` zhqOUfugWJ~cb3c^=bH_uGo17E$xKXDjJ{ZiY#Ayomt^Ji5m~7MIw6UzBq{_o3o}moQsEeG@q}ZvrcB(&8#Y{oITA{e z$X@Xbeh&Ub5$0uCW#V*MuYm}>s-DlSAL-9Xy+fN?hWr1`~`8MKjNmKvJu!BhwFnKB=Ii01VEFJ1;lyP zIQL3J2%7+#dVsFaInYjj0DV*&1zYts3^aAg@o;?Ufj6t@(=_m2mt zA+?Uwso}@%#D&Bxn?#Gx|9i7hpt1uEP)IE!6fb}wgqg06bU_SUF(sclgbw>vFnoo{GL{?$8#%<9ARLE5E;b5sM$0R zop+J>d1%L$M~?+E4;>ZZ?nbJzqM0yq9U0?Go13Y*r}`5oxJ#A0p5$Fp=g%k0NZo-d z=aZb0;gZ#uQujm2Hzk&PcEb-wRNS~8%p~%f>X*Wus%kU*De#bZ%J&Xn+fmV8&H_6FF zW}eQ$$`dJwr@_Qs`iAjsi$?&)=T}T0rv-T{vNJPC@TG7lQVkipvY_`ErWBfD_2FlgCXb#)YND~C7K@<`_G&I+<#>0(UdbSn_O+3-sfwB$r8BrnIW9oVRtz|wrC^PXmLS%5yB(&Li)X0g;vQPGFwk0ik<5qc z9h3RUnMZ28|5v5q=DI9ReTMtnKsx4_jfFhgYCH|m$Z4ZV0o<%*qse%2!HVsF7KSKJE zf%2OgJY%!v;6Y`OD1_I`x!ps7B->$x$dn*zm13P4AiIUR2+blc3C%m65_c!jg-M&^ zCKI^Xf(UUE{x3ccTu>YusXA~LM7{N7UuYCR{11kbwakz1K(a44ijV!np=7;$ez-Ii z<^Q5ynp4u23E1tW?;_B?`+0TR@z3)GfG&S zbN6VYfu|Y_ljenRpiGW@1cIJ}NC<(0=dvb~l1vqtWUCaJOoW!?tiT9zv;m%m&&Zf;ta&v7q zq6UUh9p7vc+yc4c6aWQT3RnjP}T zk$_urBj8b~zR+~p%NQ^D(QElWV%&d>>Bxv~X5cb+1;<2LZ-+}jjAS`Ip>-`!LhqJx!6Y%#E>EG#v@({OQqd>}oYgc=} zy5s3^%OjaxYg<ljRWZeHOIH4$?XvE3|d*+DJIi8K~{< z|Ne`YzVtAaK~GMvd0zN}(CD?IQYTB%F^FwsiD*y}qEns`B40&oe2ui0`6M8p`?dwZ z#zcukTeF?j5N^wM6-l-mexl>xG;x7dKdihqS8JIhT;ygG{}c zY4m_k@Q@jWxCoh;ti6;me@xzsD>UNS&Qrvgmx;x6j34oMt^(F)4oWB<$W*k{&JK%k zS`eb>2eM>mq$IR07vyD=fH(3=n zbKV3YP~{OamDpd-Dkq0$mBG1B*nNfx@Nl0}EAgPD)IWv^P_rHl1iGTStK|fE!6zk? z)L0%GE9Ql}mL!RZPxBbfnlg5Gb}fPwMprKAKC@ZkFEfF3TmTjV!_W2`auQe;LLNpk zxC(cL)A^3)!*=JAhTjL_yGBv*+Ko^YR5Z>rjG}ODXV`y46g~1^3q|GCcvcp2Gcs10 z3G;f)W9`7auoxD^d(fq5WoRmuxY-9Xvlg*wRuWa-@>2rSOxyB`nVi=aqx98MzTm9s z@`vQlNfLxaE|On*FCVX;+8;q+OMUwnYT4{ zaJONL_h~hlMAE$YGG3cj7!7gfpDf6bz_>4}N`x-J*825Ch;XZvjhu<*$CmC?qth&q zt`)CfS-$C%V)>eJr?q4sSh`MYnJAb`ooLJR9a{LNS%dWS0@a+>pXv`i(6UoPkHO3C zA8w(Fu(1*A;E!AU*l-G?+^(qS$o-4fScBLO%`slA3e!SV9`7Xwqb-vhtik{YS#PW` zwGdbfZWwlQo3kK=`rRevM8<<2)2S64IOFW23IV~ zXcrsY7J_4g(VjxzSvOch_IqN&(OSZGt*CyAs;H=3bQ^NB@UqTIU&aZ*1G zGMcGMK`UBe{u|v>k5milr0(=oB40D`Xt;YOhST7sLh>;q(H16ow7pZ3Zi}V8NVipz zuBsSJ+uJCu(XCoFn092Nv=D7m7=kjF48G6SfN#_&0ZcJGE*0zBF|7wfI5=h3{E?cW zO{JH18t>NhlR2G4d8qu=o^T@dUYDsM+haOzI!)d6EgY1dW)cSd4d%i`K?i}-O6|32 zN<6vk>AcWxOkPTV!1sGf9UGZL14huS(Yxu`uBFBEbsbxgsx}-l>6YM2!Ed^m{$!Z; zn{GyjHj74!ul(k~7Tc(!%rZI0!}`VGXY!idV9kXP>&qXy z5W;k;_41#qm(S74s2S{PziD*%I*E0y`@tcEoWaHn6 z66*sB#Z|qNrA)^j`-tMGCyd>X166$(QBjKVSKST>%eG?~fDyl2OzYhKk&jU#J7ZjD zL7g5D|Ck7g_TD(3ChAB4M_ZE(Tv&`#cnCny0`fNs?6^%YYBBOu2=x7UQg5C+n{jgh zuWS)CwIQDw28)x!ZLr5DDsP^Fsi&dg?&EZitR_<1_%qWg^(D?4+J%-r)o#vkgKUzg zXO)Cm5C!EZ&7hxL{Az0?nyF0$vx-osWAkf>NIj)O_*ELw#|T&VlQ~0eLH)kz!j-sY z&OKQXymtC@ut8M;6iv;w;x%0TFY;e8@Nw`o*O*;bVHbt!BA;dY-TBEajoC{r_TGe< zqXXG>`=fN(zjC7ZMYq6W+%#cs5ep^x*g$fL`Z4)0u|Dkg6wV}lHOb2hU(}~s@>lE0 zjS#nj4kIS9KSUi6rH}EZ75>Y52~0P-{Vyf|<-5Yjv$k2nP2R#E?fPoUF+v2br8j1y zLVDtCJCgqvH4MsO8M>zW@4EU!I!B_o?fr znmH2YQfd~L&+eGz~O69QmPp*^I$QfR*<@BFU=G%$Z z-3^@I<@H*=xQ5c16a=?JH9BN*EgxZR%i(W*(osXc5Z@*)CMLK&ERtxEUlNUQnuz3N zBp5B!zt1qi2H2Y}buOc=7gIDdyU>ytgBNSfcJ{zCj(5YI;Njd%Fy?%hV7!%&koL4$k=B@NN^RQaj69jcEl{5k-h?dz#lhLQ1>P4-}^BKz0oq5d0XPF`=pZFj%srGH#ypM8E_6NDj<}A7;ePL)BUcECKmXiCM znd_9YSEU>oO4%GrIYG)%%d@4A=600P(cIcQN0Ay?(NmZK3bsLDhhc2TAhdCty)j;I zjoe4~w3Oy@x!G4?-r|Mo_#-h4W0*FJE4V1muIxaikQyeU2Y@~kuxfybYIH#ExMo4) zUoIi}!gr3k46JD3Kv61l0~yhgrVt|mNG{4(AaI-==%zKT4bsY-2tE%YyNMAYGb4^T zF=jYX!v_^oTRw**a4w|FV~Ytn>WeJOjM}9e*gAww0IY^hiP$K@KT|C(AS~E7D66j= zG?gM_3|1X8gPOIK!=@=|q;Rpn#@IAvyYm#|eW~ZS-m;C~Sr&_>;oV#oA8;kujTt9di7TmF0K~ts7lEa<3?=fh6HTsa5T#){U0!Q_S17no9bE+CyzNS%y{%n zbk=gUzdvrwlsb?I#qBeAD%r#uCuxh;sVGuf`l{tBUlE`?lAt4YYIix?!fUmkq?1D+ zM1>$3)B$!Nfl7PHbSqrJ*$I(tv|8HP;fR&c23LRrfb8H>MRfCdeeQCQa6T+NvIy@Z zQx}f9J?zk{u31i*E@t_+?cqhZ;tc;56_T}F3QbM(Zz~Z?pj|I4DI}Y@6b>`Rzd0gs zEy=%~3fTeJvOsFk5kL;96Pl5DQx!-AcXIJ>nov)OUlm9M-mocp3k7Zwbzmr9z>xPB z`k_BQO~JYOdw9{#72UPwRnvp&UG>rI>Rpx4*6JMc+!OZ38N}B?n49yCt^WY|2tvNRborn8 zBrcmm=Tv%YlT{V$&qTk$g=(FSK3*y{jP79Dz*+nin$@3)r<`rHSudV#9M#!I#03ek zHc1*oHb#6whDuDED8491pV!4S*TuBf#f+?rK|CHR89})glS*3*=ybwy)P|2P4>!?g z3QZJe^Oh3Tcu{KCh0^1T`a1IWPc8pIzUz~4Emp%)Q?~A347*I@QGDqejrvW#gKK>8 zrcc0nE8fJMZO|B1Nn$NyoaQ*k-&vF$j+kSHn1PRmZ1DIHQlTaEUMxEvS7_OWRm$K? zJZKrOelR#v4d&tPIohBi*0j{*{X49W_5LlblX+*^Y42Z+?=QsnPsR5u@%;nA7e8pt3 zq~OuUh=NBe+ocC46ne~ML62URArUyA*GDcE=d?*!jpJ&Dmv(P)o6kh+S;FYH?~2 zyNO^QRuOX+5hx>sOc9u|QAS2Y2Inm$cGY&3CCYXsXlNd<75lmr0n>e_;0hZ-P2XeZH^7y^j^5~$f?7W$wGvD)<@+7i17 z=lHDmQxMzYjol_dDNKJB1UrT4GSj)VTnzxf@G#)U`Ixo!0;BNAB3u+foFLRQt!JDE z86GqUtL7|D+ITIyag*wZNirE^v3N8l9Q&T*`3{1Yw#X!H4R3~vJIrx4&|_M?#w;RR z=@D5v6soy%uU)RN6n0nDt4{u8VaI)vc8zgI>;F+}hyX4XE*gMbx0|xCM&yd^>Xp^l zC$$J4^>MCYfvOdQ@|%9ZZa?wkurasJ=3Bq)ld|C-x1O7NS0%DZcVJUMdUW`ewnVgAh{-l#PlVx25}F$Guhkj!T(PwJL<2^^ObYIFcb1wROB}9hVMQOK`L&xmgx$tu>wd z>kTUYNoCJy?E;7+B1)p=N(<}whF~+EX%JPm2(~ge^+FC>;-Ag^)`+ps!p_>C&9;{y zD4Pee3$86#}>t`5G-uH zmnRZ>a^womhl+h-ov#5yuf;?t-OUo^FQab^EiMy>$&I3?59E)7Yzdf&5ql*V6 zl^;seRGTkmE8r&DbW|I-iOF(oQ-kts-VlM}ns8!^Yc*?ngj_5kneG?z5wVkzvVz`! znx`fy0GJz8mZh;u=*a43$vU0C*5q8M+M_ZXR7V*f`Ba0mrI)e48qjB?#g$KC$o}sJ zgwoQ=+&A59!HhUgJA8qiHwsFVwY~{PDO8-EVvF^yr!QZA`Agg!kL0O${b%p2AtgPs zNINCFiY+?KRs|&ulCa8*SU8aR7T(FsDXTKGNtdx8NtX58j}GO2&~v|UD47J)fm%N7 z=`JFZt}%2`CWUYqY)QOyn6Ur=oYQ-XFarn{X-7@#g7UjEpIb#*>^#*-N6H~!Of73* z0K~#uI{(VrOQvy#A{upyUSgrdNO92J2Hm!P5|yt>HZAq!*cqr4a0dj|9+k~WDu+FL zlZaKFLc&2%TN@3=1ch!!u+n`fgVkd*RX+pkH>!P?F7gcU`d z!*x>-^w{}KqX{xT+0+g)>Ya3%zFL3ChfY|)m1O7+OtioE`|}>l3RNFT4zjb1V&M(W z^BK$r8SM;63lA{?E0WO6?09hk2Lg)Z;n27VnFo-_5vD0*#jmB|>j7kToFNc*)Z z_cZ{^TXoApK=Zd8nwd=9z@^^ru#WL3Iw)I-biT9Hn0RvR5=7N-R@6W@LK?e+m`H*M zC3M@aBe2ugQeH|Gh*g=+Ns?p<#S#zQazObBx}&BRBjZZa&8S>`#o9*e74%&S%;i=< zJ0CUUv%A*vvD@H>DUuS0C=>Rr)^fC!(ju{+S;o*iDUU`&D^B#TG2$3y_0B*cZ*;16 zxVVZ-zAv9vH?*!9;~b{1aN2}a#dsJY#5N!Pe6+0IbzW09$ImWeIf^Mq(6#RBETCC} zV0Z*DmPmDvhq}kZy2pWJh1EkIgFOWEhI$AC8tUO~#MFBTOF|y*_wXq1^&TF^5USQQ z@1uIAqP=Igsb@*-83$qdJ%byx%GXg*$_w6#8I<3h0ReQ9l|>{|WzfCS6hHP*~7Rwp(hD3k_-SirWZ} z6hDMVirNT|6hDMVin?Ju0#w?M)K5ua3NP#DXe5+6$r0Vsx01pX#`Px7QOd-1k|Un2 z!9Im4d{{rX4W%w=$Ve__Jcmh6aT|e3@k5|e)JC9E{1B)Vb)%p9b_9^S_{){B=@tWS@D;1MQ%`YZBOpxMg>shvOq>cFXV~o|{jPximgEP`Y#MJpU zLf`0TT?I&H4#YD~Clg!<;l9pnEhrE*T=pya& zSjfk&vG5`!n$9TG%Ij8(9>GH!=OE~$u@?pi&`YM_;wYK9-GDC zRmDqkRXi(uD+K#V;%)h2<#2MLEQfesxq5n5*pwsPJ&o6d-RS+^yw2>v!%kP7avycx zuUoudN4;OSSN%Hd{krW>f4?5D`gO4Jn0M+y@6`LfQ;$}idY^X+->iSy2kS~&>(x`K zck9F6tq*y(K9W}by6FA7oc?Lr8&qL_{y>_#38}hdk-;tNAU=j> zM8vaZr`gQ9bgx#rA?H5pds*VGG#<}!Degf)wN+ufih%UmmCTlHD>B=wN0RLe+GNi5 z>(RPhEMq___A23*B7YTsJEtDkgNJ?RA9 zYM#XT#T@pOMenct!?m#Ik$mAE-rs&3)1t+DE@VrMlYm*byxqipSWNZ^!Wu5mNyAU- zJF56tZ-zydTo~NoSJ{w9U|WK#D~5aO&gSZ}He;#v2&W>;THp0ZK5-B4R_h$KF2q`Q zbNqC^Or~1rhib(VvKi*eTFso?0I(2i)fFN(Cb8B-tdz=Hk6Nvmv#PH%)QT|$JcNMQ?2Bs-b#&qDqwlk)+c%K}aaPYXEDV|L*yA{Co7Wxh?e zCWn)BI=|IKzGN?mnS|1$A#X~kG-nOkn;>?H-3T7S1WxqNu^mGax%J@DX3vJIZ3=2J z4bCwON*d)@7IT!`KPI+Gfj?#@QaHnCRIkZaM)qT4Wr|VlHt4|3L>bf3u7eJvjaPZ( zEE3b0>b=`PJ%q6h$2GJ+K^lyf2q`zfC$t2wiaJ|PSe1JHtXU+YZJNsQZ9V3^<1KYu zokMVrolA0V3W%K>^UhU!GBi{?i&3r`rfsNNS8Uftg2i~*Il8Oesd{I`prq4skjdak z;LfY_QDC?COZHjbFBKsv+8LW7$5$yTt;e;>74?hu~Uo8^=hi{hQvQ&(6t&}g9A4v38 zjC+HpHL($!%u^kEy-Zsc@}?5frBSu1EqaL?__>0#=oLx z%>0tl)HA;r6Mb4A$ovy}C-Y@=3aa^AdXJgEsWkP>uj(U-zN!yo{<7XR6fyHNddAFe z4QGBcW_}}Pem!P>Ic9#Lmialt12wP3L|61deb&4B9OGZnGuHf)($t&%VodaDeNdnE zu0Dh2)@QxP%->X+dgfR4QGM12^;z%gbIkmVo-y-V!a*U}=a~5!J!9s#hBLnzGrtitzaBHc95cUA%lsVSftv9T`^LMbB9C zOG;C3_KPvmr}aU7*1P(Q0?qoY_n7&cN>k7Lsy?dE`k+4RU44$3pV2dBerq`Mn=$hn zG4ty&^UE>w3$@J85gw>{Ehf6659+ht)#n)hik`9Nmy|}~l5@Nm6Mb4A)Mve`&sf@6 zpYG4nHe#>{UGXMQtgej{dnJ!XD6W`3cT`8mP^HLt}) zSM))B*1P%~<6qG;*8Gyv)SLZcO!R4eP@gR^-c=}o3Cy}}Q9coTQ_1T2U)4u-TOZWz z`2G=Oy0X%@hBLhx6TJ~Lz0R}qjZwU^k4Uj}ImLn*pWV9=mm397DJ?$R3qySb%H0y{2++&Y-hY%p1RC|$tz5+gA=J&}CNyHGpdU^b_*+@neoi>T9Jg-8vgL=Rv5KVw6ta{ zciR?@1__X>s}mELi~uDFFdj{8j3EXz4$3&eB!&QCEq+WE0Tu)X49W1*mge*Qo^#)? zs_JezW?;h|;WLf`35`Po^HtT#F@ zi5DC%DUSX;T}c*E27kYGhQhA>Ms>bRzX?S%(r<14U2nf#;x7Hhi+il!Ds``Z6YM+n zTi?Zg%L6v{d&q@nvVNvhf7dUKn5+^{0X%5p#Ju>+S$!EB04K>et(xq8aTzSZ{UI9k z$|w@?w)Yywh8V|oN+j>-(GV0X8$HrAb4D`qtF3%eXY^buu#F$l*isb24|NcZig5#X zjMB)jPqQUrw;d!G+^7?}5k16r@)403hY$y*M5N;m#L!IPZb?RTzQgAOmr$kQMkeo@6FwZld;1bO! z^Ma)Er1e6Jpq_X(I>w71!9C2kyN{EMv9x6>K9A?y6KN^O*ZN$vfHxd8`K8*x3L6>D z&Z+`$n4~o{Q*BV2&}b-l2cIXE21<-ZrO|tROqG!eA~Y-op_9nFL&zZog-Al<{zak1 zf1auXQS4f(jsbp*xR#8pwTw>8!>9Ck57 ztpJAFpyiDX))OI~(ztg&RB&((EwgW|QDrQy6+3VB|NLhoQ!xUonToG|F{{5XmWiF7 z+_R%UYP%}x{A)aI3Zo>93d4rj-*zxNHvXVenkK$u!cdjc>@n{vO{m7=aMFY3kE0?p4k!5IN_YtgrLr9tWV^Z5~`0vj7PLlb}XNd&J_DD=14F6q&8%Af zs^0`$F4D@@+rn!e<&j!=z;#7GC3N))^QgKE#R{Vz^yX?&b>N|q>Rb=u_hNNBY8rHf zn$$LI|a&^gB% z(4X}|Ssnm`1kP5(n>dW_Y0s^}!H3`}?4-n|aAKTxg(6stp0Q^8UhQwbaFknqz#Ab6 zga6fZ0X@CizArh?xeJVrViTp|kyjl+XRRabNNAluYcG4$aOXo;A$ukULLO3)2mn zoED>Y(45B!@Q|}DLi{cDP92?qd&v99xqleE=n?a<(15$32T@mo-sqIg@wNp4%|zq)-d59aFbv4 z0c50C*q!?%P5i3&@etnJdU+G@7j;VxA6$qM41dE?Q%yi#XnQY zO~V?`T~U=Rxlvp(2s$-li&WMWqwnnxJNzL9XriG{UjcW8Js-c>gmuXWk4y; z8Q85&;@IKX3P3;z0)yy~?AOZ@wrZaFO|U)Ym>ub~TVnnBeo)(vbw+o9ui0L)#osHB zMJs?RZvP*N`~ElUvQlp7vQ!?W)~T>y_#VUUlJx^-PY@n1sp5!*aE!&~Sa4yuwsW&i zLKR$Wn}j1yI1*d|ft&f{W*pKvxWP3#VS`Tyr0lw#aFm3j8bAdyTQFn8Yn-i*@EL{( zm7*8ppM7&Uq8Q5+QJ%uW$Jpu*CI6}itBxGn=b@F{5cGv@8jKmdnlT|H%g%@@-N-T` zyga0yvF*nL$5Zw{o1X9(_F&x(sRK9RL#1>E&@hpp6M2qQxgD)sqrp_( z5hemG;y_}GtES=b8Ee3zmh04E;%;EBA-P~Ev9nv^>|Njn($1Vs)*81 z45}kCB->9-$xu1vM?8rKkh4olR(YS&GO}uKr)M0DsHi4N-#`;NQ*9Oza%GpdwDl@) zY4jc?9FHnWn&!pB*7*?r8fMpiIjJGJp0TbnGdQFU~-X~bN4SHST=x79p>IE}0 z0ubp+9DPz~*@wA%xrER~kC(=J3Co0uW_6Xfv6s7*oW^Lhm#nOVCeck*>S%pKO-h3` z)J;0Z;e2M;Om3_}sjMX_kLc1aZ?;MTiouh}4Hw7_=-gJYl8TC8_sq75!;|rm=5wSd zBy^l`1Og(8LPFaKk)pWJ%n8THq2TP~SaCu_Vn|qWf=LXNAuN1#)eps6E-^3gF?Y~M zJmS?`2#Mw2p(o|;?3nk(CopNt}ubUeJ<-Wz-m@gq_f8LHlR4 zUhMJ~I(n72(9u0g?rOD=GLh9{+SnY|iqsy!3LfvM5yg(a8X}@B`&uj9TL&;|dOO@v zkcY+29fdlhP}@PBds??1Q=C%0ogeF{-qO*lyrrXil$<&`w5YSB=Ys~Zno8$7HCAQn z>0oUKGY5k^<-uiISUHO=jh2I{W=vC8rxY^U+CpKgf|^F&1e+LD)+Ev~H+>|L{)~RU z%Xr0AZ`aCpj+5pMc5iWsCdQbA8oCYZ_O{h7Jlwu?II<)&xchJj{tz@rQ~lB=HqBf= zvWXGo>#t8;P+!IE^TVmIA4L1BOp#u2`ywp982l(1&~s!2WzcM9-oCVnkU_ww4(3^^ zs1pvs>8mzQxW0~hETrsKORA#_C+b!(`A|!Xt0Arivdl!dQQR9t_jvS-r)5zpx6hZ}N#3UAf&<{Qj&33Wgn@`v3Qzz>-U-?YN;(7tE)gIJIQ@Y4vF5s^ zxnqgyQ=4ED%DEx2>g7!x!ffb$k~*c=_QT7YF}SE7KE8>}(P0i-%2WT`Un%U-E5gy) z#He1pmyR#qdw~hhZAZ5kME`H6>-8%?I4Oh-#n)bd!Gq0ac1)(A7Om6q_CGT8Kk?o- zw@#(UKaP(ZLyxZ^83zS>2X7!I7RsoiLj*>2Au^bpZ}4v+-FV@~rD6$=gG*ax+okSS zSRT1_663*buR5lbOv~gDlTnrBy68~~ljUY#Z(FtKy|+Aqv^o)Qt9ZG&z8G2g^(0I# zj0lsoVu|y4xU?&d;yE7Mdm^^?BzEUMrl-dtOKvYmD{?-Wju|`!Q$+T4F;BF*giqoR zcCmzi;#9KmCi8(u!b!NUlcckRhFkS#mh$FsTi}m-j)@8<^hbV<4-7iP?-uSigzpkU z(`nF?;ppk&c2HsCG(jFF!?Dx26HbOBr}06Y)VjIO<>u2xpiQM>0fn!65OwqnXrM7f z4g-@xBZvf>dXEXM`$%)?qehy)>Fp93!_5FSh-9uDm=_j*hXCWVGq?uFG#+3ZgwzSdAB_+SqlvF1r zKig@p+sD>^O)(*KPtt1a`!Gy1F|dD@doE(r$w9Zr5%CcgKs< z>?SmTGf`46#^FQ@tO{;4VuYoTP|s{-5z?UPBXmttx)eeWv_?V??QDP^!hxnCzH>u- z=Z0{1yrqU{$A+Ssupd#6QCo}8#&VkTUMQsho{?=c+F>`?-?8;V3{$lNZSxxJGz%zA zl!YhyAqppib?<3*Pc%~K(6wTqb2|@(<)icogjP>3u=y6Uy`<`4X~qk25k;&O3cco| zt*DD`41K-guPJ6{D_j7pjKN0%o+W-5FGLCumPJOP-wN%9p?=gx;2+Pm4qTj$;f7B^ z#C5zm3$t{0%<1K*lhi5k%hpLwS|@4xiuD8lG29rYP7M1v8t<`J1`Xi~q=w5@vQz`h35V;XzvxXlF32hRH+z6FXxJD8(Cp6(2N$5GD3D-!%iW6eE#>(|N zAuS%%b*cRf?~fmR^Gx4;{rb z)m}Fk*n2;C$dv^VO)Ogo^y5Z^(-zm89$W?Vbbx-LdX#$g34REJN}RB#9+CZTs|F?O z?5kH%WdS3OFm9n<4~vhWTR8;At!j(FI<>j5BBk#l%k~Ol_*~i&i%%VpXD>Rc&Qx}7eX+@^jqR3h)W|sha60(4Oi@|46Zh;BJ`a+#{fhuPz zp&`+$c%6ogFT#EcW@}&P*kWivXeDh|)Z{e2G5+9^ijSEerZBC|6jI?nkP(RSfMR)P zaQ_E&@g6Q45h`Rxg!}qGj)<#W3~-B{H~LIN28Od=G3A;WhV^ijY|aSd2~8nkPKUp+ zdC${3IE3Ve&n_w(J3kY>WmAQhmv?AUZPhkAJ3cP#>G&p>YS`|9Jzb_ud`)e4rNEP9bmP`gT z&PHLOxVBu#3u$9foI{OHd{QNJQ1Z%OVtD2qZ>`8B2p-mYb)*K}*(1nz9k~cG>i5op zoFE1LSc%EsvCP3^F%~5;ki3`Q) zEqtyRfS4Sa+M=g5kWpnrYA|-O(T!EnV(?lU<6ejnj%B2g!FHB;R>3 zea9vVEso^b1LM&m9Ixv35P950wo@*cDl_j=3wEjilyz^*1IQf!%3RZR$UWIpbnrq02Us zLs!)#$f_`+6&ynsaP-QXd7^6D3bn$`vX++?7FChsgM$}3n5X-*g+kJ4--0>uTq9+& zo|^w7%9v!S!!(=ogTy3eC$meNnrtInFjTJy}Nnjtn(g&;UW(n)@Lv!tiV9Hf1`Fk-b8lUZgbvSY;ZO1z$nfJfb-^8N3_YHvmXPT{(oE(Wmo|kGW40fxRbJ&A77kYY4uBOvXoCFd>bd|gaR4{F zzm>-@f5|?E1B^tUhJZr*>py<6H5~HWyc?y&=!%JT)=p>yO0tiU4F)MAW-_cN0H%e+ z-Pp(o6(i#)M2(yzcaeEk7-cbT1e8sH5<94BqFg=JRQPpUa}2sZZ1(a)MLv}R8a7P9 z5bC6p8tDHRJT*{b{l5{z(wcw;;X8&-1&aaX8?r>F;y&9v+-n$4tym~I@y8?VF{%O zc)i@uSgLFdhwUjT78?vVjk`ik;E5wtbvjH&sAH%PMj4>nL=1mPd&Te*AX2i!IhUjw z!oF=+7#2BMmjuH8G-v-jOci2|C_%Gm8?Hoih`2Yy<$v>J z{qf=QQL{scd({zf6251-?!`Ov6Qtdi6Z7`2JjB$sHy7(b>&W*?BITSBfruk&zd=mR zLd~A~5~&mQ7jYuz8_rY|Lk%Ml&)I5S;7rAVMG^2u8+Z+iBEjW9Ca1<5v%yt!vBpcp#5o??~YQi?KW?tH)9}z+x;Vp6^Co z5E)1eb@`+>)$Wv?2Uut=XI720F&X_0?J95>4O}v7xuhbFRuC#Mvs%69h%rzc4xm~? zq%cndo|I=;$&4y;0qIK{XZkZv$OV2X>14)PwUo^lG9o03=0-t$AH1lUpFWbXd3B0> z1?DV%$+E(*7M46)7m!?u9R@})4B9G7NFAF~j2n!Nt}Png*P13(aA2fItV-#OHNAlfLpS z=KydB8GQH1`;GK|ZO41fwcC-OPS9KPV49oE={eI1DqpGF7ep?Mlm;KjdxoQF8cVte zm{$F5-!j69H5Ry$=@4N4EK-e#_hs&3VvzwdcNF)5VJxb+j2wpMUE)8{p;3DBzM}p@ zI_Xt>l-k1ZmNS^h1Z>JMilvOZa-zc`Hwbd|Pk;Nze$RqhtV}fLjErP2hW5z};Z-6x zX=hcOu4PeYT^OFceqZ5&B+5(3Mps37%7eAxN`nz%bn2D*TfX@k9seD8A~#kTQHjAa z|6iz?tSh?6J(`&zq}J5x{qC|z5?v%WH-%R3qN&$}2HNd1qkSR6qs5<(u*n;k(o9of7yORt|L9o9UQ zg-N1PLd+tn5F142Xq*^owjR|e*m1EJB6G9~Ar8vRxql;MR#4~VRSh?VZr|>yIZS3F z5QJ{Gt8^(@APYh{16pDN6F(6UxIhw?O4eXT9dzY_eXn39no zfuYA*Hr&|Jmdy?|Vo>f-;!w+ApxMO&0cGUWBF1@t?U5|XW?xF0V}a7fwe20#vQ!A8 zz;JDLFtll1Xr_s>Csb&7v$?WiG8v7 zz*%xaG@QGszwAUB#YuBPCkj>VSd=e>eb5sMVa;Lbh0&4Qr{8xFEEF~o1-YCC^PEwU zARtQ$8bLj95QTh(UY5R^T0|SlT#2CThna8Qe?$oqD@J$Mu0!wh%ffceHXSwAzz1#{ zCA*KVdl9#$FT$If(s(_?iV@UTy$uzsgIdkzQY2qcF=!6U7dl$|03N1Uy*_<5A&nh1 z;`gJl*Z+d^RCEA=Ry`Iu+w#)6ncjDCV$7g*{$R$r$OueCiV5tb^(A_3iKw$UeuR_BELTGFCLU+%Lc{OAfB-W>!zCgEx*z^eBU3Qf z;4ohz%b*5*kJ~sx!Uq6AER z)gY;gD;7${rv3$W5xzD|*bWSA(#kdoLgHZp2t*VU^Qq7Ke5ba@%Go?Irh)-7)0|cnX zzPmi~onz_vyI65pmQ@I4oyJd%OAp;!SCc9mG{lQI+zJi(_urb!b9#8<(}MP9YZK8l z<6QfAITSB=A+V7teihp~byCulcx!3Yct?ty^vrFOQnB59V@#GlOvxFGx;1naF&uB& zwhB(+9B&A`A*A8uDm3SOI|-f%!l}&IKT}IbnX7OUnb;tc>2%m;tuJ|I&qjtoH@T_u zzgy$((%s>v4_&DaZ9|Z6;CL5J`dW7$TJNZ2E}-vFrH5oXpghu8>Pvkl;gY1_B&L>%D@b4SXXN6Zy*I7k zSc%4!D!2V}3+$S#362)|*AA2cRlXcgJGC57#cIO)Nv1{&f+t5bswk-OJ!PJLjnzU- ziSu>xJ#D-OnW*hDYiZ)b&!KP7@Q4FIMw$un5bNk7C?RV)?3a#~_qea{W0T^E(!4)A z=~^wOs8-4p+oiC3oXUXoF}Ku30H>WAl!7^LBR=Gk*?23UrhOa$hwOo)42(qRXuDP- z27LiEjTb6A_hAa5)@GA-7cN zu2RQPRlKyer|DVjg~07z0B)qXR1J4~S0iu1-9A<)L9B=ph88o`z)VeVh6@v+)ZmuY z8-|pW{X#HVFNp$!W$F$G*2``SmHd7r&;hI*9fVKz^HDaa)|j}W5B7%@eIU3R6a9g} zE`L?5A^PL$p3-}a+f(nkOTFLM2QqiD&8$Lpm)zxh>T*v}9;EMWb!rst_nE{=M(F6YPLMBLH_HTaX); zM>)af)QnpfN&GbHBGXw5FD+-$j_acQ#!7xlxXqGI0EbD&-;? zp~=ZIB=7EuwTJyG?Z>or3Zxv_xbNt|cAck=Um*OG=8tl3Bhe}+`&X;Zw!QV7Y&|%) zkvh?d(d(Xc{7j?XH?OdR-n`LLHTkuDyiSy}wb-a^ftUrv0N2FM znw4uvS72~a{Sdf-RfC~^Yp$mc%$|W~Zt@~*tXxz0NqWeG$gn$km@z#h!w+1Wxg##? zpES&&xh!JN&>9WJ88$osCr7*q*N0MD3|x96dj+zdD%)u=#SS!xBm8M%YZw49b6ALq zt?lp8ZJJ3G8szc2%IpLg6ZQ?kPoL{!HHVoz*!kFrbv3F(?Ze2-BV^s}T~eSd$wR}H9epa+Xo? zb`4Sgh0im{5-bZ~#aUp3vsRczg=$-(W`NnA1pE5+{knCcslEz&dKS;F!FJPF?%y2F z&7Lw%Ju80-TwE}B){Zxp`Dff^o%K3ffp>9Ekpp@a;hIiHHErk$eJ3yOY_n>|*3@j-_X4=P=e>EcW?L);~; zV7qmRnWTxOn(RL3=cY@IOxbS-P#@`%rYkSU3ZYA5#n2_EjC9E z(N$tHv4$6t;XR-nYzwXkDX^rSjN<$7rl_a%Wc{Z<9 zN$6yyBwE@X#r?r{J-l6G{)p*gg+kYVL9;8)pWCwRt_-+0vqmgJ%o*oha*@t${4nx~ zaGSZ3y978BNaAGkDD#$~M+i^aP#_EK#KQ}@M$-|{z~@Bs2+r&UB2hFVCJzuK?3ZXC zhHNXsZ&)IP%C$--t`lml&m1vtv@$%G*I)RjP3q4#^siWtyl3yCV)5FR1R-~)*q{)+8BGwr*Cr?lun7yrbV-- zO|uQ)A%&Y)&^)2Lm|??6At8t>1lmK(65fcH1AVY#NUAhPLttncE@W0*NSug@YtyWC zNuzR2ZsdnXRV_p9Ks9g?B=m8x@=&5&lIW9LngCb5^Vu6#G40?LjGCC( zt0W{yh8WTaHkS;oXs1wbfO7Hk{*n!g5J`kF%TSsXHep;Hxk2Jupxsc>tdv|GJcHvj zDB1QN^rnqq?rxy}JtM<&u4jkQ+;zfqn-&cQ$FfVCCcB>n{JMAz+7I)wbCO7vB|-<2 zLHP|+lUi(92l&D+1X_I7JLzX=ibfsHJz+N>5$lhi-QJGjKXh6!#VAz0T8j=QGb1{2vH9nx)zo(}kC+F+c#ZaPUDyR`Gs3oT+R(h~_1F9&!Wy0B&sw8Ev01 zt|xkfQ5^Pc#w0q?0gt(`!s(LXPoeihGrwGjFX3$TQj8Q`XYtatm#z!xI-jmu-1L6> zUIjw5mVpiSx=0JV&b(j(rCOwgLK(`XP4Qf?+u>XOhyZ|W@7i>QFT!E11|Mqd#2JxG z#l379%WkT3p>92aFE*5$=sIEUF-jVOE&v{VJTv?#*du+D39YJMd};}pcCf~(=D=}} z57g}puO-ApAVP1{GjCelnJMyYx5mfSG+$%9IDx&r^9tM9MGv;a*y;4D8DF-{@vNIO-v;ZFRvn!rXM z4}lBz%aJ7^jGa-)VJs%hMbLX0<_KCu1LPv~;Ue_mBJ|P7?}7=&h?#^DJ(>9rSUo9g zVyPLZpaMMD^cXHd#@sCTlb&l6R*A*VHggBken#Syr1z;f3ki~}X@TL5Z50?cdZwA7 z(bKI~rwL68^#=Zzylh}O2G5YV4H3mr^&1cb4X7B9&^v z4z=n}LrjQ8TK@u94&|-C^3IH4+4Waw?@y)?J607X?tp_5aZ4PfSV{yfM-rh8YNv=N zd}DvC;TebS<9aECfoJZgbC_BGTeJ$p_om6&9RmhBd&_$;{Rsk))YK^_3_j|pf_q)AH zy&npHBvyOR`cv;AOy{e%n3j?LT4ygpYFnTzQSzn578ze*>@p#M1U6Tl44>*Z;U*oU*=nP~Cm> z8n!p?`lFOdWTcFi_c=VA$iiL`$7BKw2~#PF@dJ- z@GX&MJ{$_LqxG&rH1rn<)60ZT*3ViahxIuq^v@v#h>-r=FJ<*lMHNmYr1HCTL9i|= zFT@MXh@MWx%W10EJg)>`q|4cO(TW8*Wf2n|XkGIjCd{m$V-kCReD~ozUZ3H*Q9Qr{ z7To+k!;uT0X{@Bfqzt1GQPM<)O`+kAI*sliVw^V*Ij>NbC=f-LCWGOr1n396_bjs< zzqT>4-vQc{-v5IoG3{p!(}Lqx({GysJLbLKu~b{x!bM;$d@!Hup#&cPi0~$ZiUnu* zQ=GcrV%AFMYEo73p_<&hySYI#&N-W4n@~kRK#d{LPx~Ap=qKw*&Tkm&d#68WpZ4xa zqe6ijA`*ygM`?>hAQ5O3H`*hx8I=3>618b$USu&mnZ1RU+9T|L!q%EMqHupM3dg~& zPxjwDI{M<>frY#N69Ga5ietb-aZB+e`(s?*gMNg|rJS%LTypaXh58$P5!~7L*Ea)5ldw_lX7wAiT zH<#W~M0)p~{dcqJ9VMoB!pZpEVtPk&)4S*U?|SJStxxZs>%Ut_@6u)nZ2`aGA%K;P zhXuL5@i6y&lm}sm{n4&Zoa2a5Yfe{0t6Axo;m^EOKrCY1b?pmlW)Dm?LaWLxpo^!I z>Q3XUs7e}OR?A|u&`uW|gk(8w^K-_{v`y9f)5^AwdHw8jBQEuMVi2OKx(LOmeVk~* zIcdv7$F?!>lPZ`ktPX5M4zJOY>=9od9(oHKB31Jw9fQ3Sf^#@Q4qUo;0OM;UMv2GU z^2xh$Ry*Bs$a9EyNWoALrM2(M9h>I1ymMDxDb4g(s(s#agtg`)cL$?`8+V8A%GYCB zPX}E4Er&VdGOTDWz39vf6Kt-j&OgoU~i+$~WR&h!Qku>v!dNa_H^G zUHL7#Bjhj~WlZ~uyK>7Cx8---mD^1Hw*1b!@)Pmxsk?FsSA2W>T{-?1x;uSW{wCca z+c@%=m~rBGV3ybCXPDa{f%hf)WDv$!)_*9%;RhNFipdQqd00Pyw-Z|C{+j+4D(?Y9>0QG-QJe?Hre=9* zjK!yR8jHWysb5XT;tSrGd6fNJGZ_rt{emL@WMac361IHenH)qLkekT(+#B0n9-VvI zNd3FRbC3OyrXowi6ILZkV8LC6%1e3(;3Wsd@SfHowgCGK!z1=w`lW_NCXeYMQ7Tn)ZQK6mM{N6xq2bdWX#9uM zDh;7-Y@sBrX$bX%Fe9+g8S!xr<34WduLeh99T+BC|3Q9;1KVaA#WR+#(LD$##o9h5Ds^Wcba?!w(-HJeRQo z@yT?Rp!(gp5Amw|`TAe7HBo3%p3HudDJ~@vK=@4V1!zc;XDMPL*o^eNkWPdUkv`V+ z8E8RqJ;Ez1DCQu5ydZ=*W27+8o>LZE+7Q-20@_^t@^9PRny-2#+!U`5BYo~6AL9|xC0@%M2v{n( zIiARh-=EWj&#~mnN1{-Lh%c%ThC#bujHVPeFaV?BPb)996ZH@LF#_M``@HSwqW5Y% z<1CUD+eTk(=F&vCEwR(imVXGSDTxMg|Rp6bAE`N`Jj{uGh;|dV@9lBc)V3`&k-@kfC)L^R7IT)hwK_x((y3H4t`H^j&!1w{%2r zfmpXxRGw%E;b?88g7kQ+Sw2N2;pBmXcAi0=tURK?XYF!5@UmUrER1TGN0rzqk14T( z|0Ri?67g4~eqX%26(Y8R#Wa5e=U5KMux#dZh@W>wVDW z{pgmAyie1pn;w!d+SKdzx!!(0BE8*C({FqTX|-Rk^SR!BzGa0YUJf@rq$40BLYj;; z0lZK|XlBHBO(MACfN-tV>VRg%fiK&PaNTK6Fnz!5bHY8u`XPq=WkEgOI^_wjyR!;I z4(}tDdH32@iuQef#qHwMfZtzf8SS@eDV{Ik$6d?8nMt5ozH+T$`b(E3g{l!Mu6*0-! zr`Qh>)jM^r_YdW0Wp)ZHrDn+A!GuLd>unRps?aP!%OOb#*vOU%-fJkcv{%YTVc+RZ zf8MFf%;$J|8oMujkdRRzIi)HQ_oO|Uc33eAc;B!7@UQ-lcd#~JwVIzqCp=zH^Jzvy zM(R@AUjfZT*jdTxsScR~_3KZf)4<=EkhSjM$5m-EpluWp@iS&rgh0UpLUS9aIaNH8 z%5IcXr+6(b$yl}*QZ|^QeqmCejAax5rqaaWHFcs?9M5(sWs{!EV-s~+V}(igMOp72 zWJ2XNTol?FkE7N&c=Ox_d5q1I0wDv~JimMF`8m1vlkb_lq#?3;y1l7`DaR|s)Cze1TL zi{T;3O@>8#){oI>G`ELSh=)7Tq4z`pJUQHdnq(c$F8zNgFRdDVvfqD*?DYT7VURXK z-#rWi$yi|s2ZSXb&b4--J1%<-N<8&+Gkkd z0%yC#g=vL3Xfz(2p)$`=Ip|{}%A`l>uhnH{MD&e8VP5!LR{stQh-F$apURz7u$GVq z*?xC8n{9PR3uL4o$9BnzdlmbC59gP>K_3SGLt};i-f(7FVBLYiiMkT4>Hj`D=tt{q z2Nt~awGXD$hh@-q`1|M^A25Bq|(JyMF%Ub$$N)UY|dcU)T39?DhSJukZVp_xk>&Yke=!v8ABC=U{_$S^^zY%VWvi zp2H3rHS;t_+{4mVF7jH)W3(vwVR@qAT>?5ol9+Kq6h}kxoP!BtfdnbFe+T2!?)_Z_ zrpF3W*4k$4Bw`RrMnQ>=>mu2L%L?Z&5)KThL_eG-3^%V;Yb7jiRdDQb3)%?Bw<@^u zHe*bYgtydXDRokuRn9)eGd}g37r5M6)M*8O-wOH^WO2#bl@QNJl;|0;R}dZRlEcKv zoa-_Ls95v#N0(^(TPeF(~;+x9W!FL^*J51GUGUuZV@&67^o#r!9Hj|{z zsPAa?n56Cv66mQ%mwp54&t&Yhw>BejfVZ7CGP3PK?4A0e+(5iP`sd*H>3GXl>6s9B zN@e`d?+9rXuFfwf=Cb%-dG+5?#Y15Nk#6{Zsgw*ZWD3TB0PHc#vPhr|$@r zOjSzbh!&N_9Y?g#65TCHIA$8l5RlDvN>0Ukr~NEJe1*z+SYlaab}dddln+cY4H(Rd zH0&Y_DRD?h?Fbn=bGb> zGDqOz(B@a}esc?40+V*OB^$;C|3Re<$4x4fB`v)$TO!4)bKoqn=apTDZBJ$qO!i^7m6&G5>TyE zB_U{$r1xSIvu{FV8Vjruc+;&E0e4#gdtN`D?q7DU^zc}CP_%<&NIn( z%%uBcnq$2?jak@>Y0Sc)J5!~Hxr;{tL5}g?&=BL&#Qc;MgPfZ*D}6_)?~Hep+KzXW zs%c3+N|g-*4js_CujkHtaKi!mC+asS?&s;-t1`y^z{cwmkj|>I;mv1vjetnvyI6<6w9V(wGrtF2T^zL0 z`>EP|ZrOdsl{=7wmg`16VWU}@jV=NLZ9aps17Hj`pZ!`QXp^U}c^J*Z=JPf4SYEwK zIeiy_cH=D~+u>`sQG*08(szsz}fQz`7F<$uxMXcMj1TbW$W4FB}@TA zY3q4P);c@U(X82Z1PT7rk-;0n({gIC^*lxS>c}aFWzpR56V5*Zik-+%Z=voR915E7 zRSk})nyidR@%<;nYb(cvl!{h58&sx$`3%#as+slD;p@>{l$3#uvp1^ z1vbDA4D}_J=%L5wM;~7pdE6*oW@Y5dxQU#$m*WF#UT_zx38HVa(p;>e zzwL{_n9LBsdWof>eKOlu$-b3Bcw^#^xEtEH<-K#~PG4`B?&t} zN4#PpAU*2f>0!AFWf=}t zYiv}lR5v!e&MVH#suaKRp|G!)N62y$TU&>!8`%3=uK2RGNqe-P3e=X%QtQ}q2oI`7 z%Vp?>m1oQKaOl}`H7q|{E|d2VTb|@SRNkPxM0$4KL*-hRpjqn=vemrGNnETO%bba3 z@3Iv(UHM|A^f6&(X?ftUd5jM?-{X*+O0phd4#?20e35M0(x| zH!0!9L4r%zu9kfb@xtMeY#TmT-cW3UDx5Xw8H^?a*s!a?v_O%IR6x&QxCtG$YSx<2 zVOWpS{{9g;fVj?yi@|qu{*JX~m+vk&-(7Z$FqKan?>Q9hij_f4Q1ugu}#Ts$bv@#>0Bvzl|Z+B+qCT80HVL`;*1br8x5?WtYw~aG2&qeRodTm+lVTE7Ucy9Sg_I zfIF4Nehqh6q(7arl(9ulF`(w1S>Tf4#^Auag7iv!-HR7o*OYmki}XbNhjy#5c8la^ z^3n85dL|uZ({OgQO)B{jUGB>74_Wt{T6TWhC?2t4Lf-q=2m0s0ReO1<@jcE}Lx!wk z0AYxwOX5uw8C=tba-u*T?2YYJCI*g@Pp%^;a1mBsM@|4LUg0`&dJ-a4Ub~%)13kQ+ zoU_V_WOeN_d);T=*)A{6a#UOX9=L8y6K@dHZSpD|2M(@2tc|eB{S(;MW#|bz!F#hs zT$y{~gP^?|=7@;C-UCc&n$RKSk2$i}XZ3`N#h(tN%q-fA(Lu zP4z50gmyU@`>L}~+iZ-{mTFnO?Li(SI6ived^KC?+&b1#(KOzQSLlg6cl6Zu;b=WH zDAk;pSYk+pUO6o`E8Vu}Jb{K|SVitOVpv6{p*#hpXyX&Qe;$*FIWfvG7H~%q;Cp=R zS&RtcvJ^@nmM?)<<)#;*|3W@6@rB#5u19}+f(8&)F}|faScfEMWmXN$P|FTIr<-e* z&pB<5dt&gR5UAP>fI0$DSU#BvApijal1#5Uf0Kok>?`FWW#|)iZl*4tfLL*kTx5ki zQ9j{9SB(phhm7_ux>YfhiJ(IOB!PtunHW=Xke54h+ptnw@*|JZx(>ay&UBF33gf|} zG`&NarKcTwlm}316jrDBxq<19PN9f|v7_^G9B15LFyf#vV!VeNS$0RJ9&)A!a3A!L z@rRC|uMVb;YQjaJq)*hGc{=LH*wOxD>}dayjw0?0zhX6maaBu~N;Q$2UKD5+0P9j8 z;boMp=%tMQjPRIzv)Hh(r^;#9eCK$f?%Et3n2E@qZg=8q?~aVE6(MNn&6!%c5Yc`~ zz1P5wb{m^nc73l|j1YFgcux82{qi+NaVmIH46?|jD>gv}Ix)+J?wrMw;;sEGXLPrb zQSyCE4>TN}A8z*$90{!hC<@U#8cpy(gQn=m|3REA6#K4kly3mi+ za`;JdE2Y9bTq_T4J#gz_PNc2xl6HERwEITVOkV8vbx_kf;?;BmU9!5)@f!UVVtX8& zH0?~_Z6N}?BbDR5o4P9&Jm+&yln?fXJ|(3&Cl5gsq-SY|8y#6( zSiv3nwBw1Y2aF5Ywa;)e!!n((dl&vj835osanO8(l{UKxcRDRzf_pI$i*&d@-|)iU_R6( z8iUmlTwvHY_{MuX`^FVzh6MaV^cWRzp2@XFr#%vt$j-aGWoO|kZ`o7W<8428Fj+zVZ0F!Uv$(vPzcji8cD@-BvbD17-*%>VjN*f1eFRQAS$m5K;pCkHN=cl}ho;1^rO({UTul_$?Du%sUc20`Vj#M-+ z&yAbTp$n@RCl4n9^)xexjfSpwjw5DfP-4xOS(q*tz^bXRW3mJv_3t%!Ag5v9P0A(!~yp~HCS+EfF<{YbY)mo^cbXnp+ z)ccYB9OOC&!1CUYaTIjA5jr1G|3}2Ay>JODDd9lar^%9qeQa-b#;8>1>cM?A@_#lw zAd%iR=2wH!-Pr`7t*A?oeEC8VYjlv=sBj%Mj~=9pYvgMrE z>}_BT2O_*pA)hHP6EFF8KM;(PH-}c`g3n+JskrZtejHs(QdHXkJ7)2snWUW=GL;)W zvNV17#DIn{(boKBb%<>o5SFngbXIXbuv}t{p$>|7U5q9ta7CJQJR z*&TvzfvDjA6KWrNVFHE-YgfWLF;C*%P3Ho2$+{&@61=0lD?&kQXo6@^gnQ5;wHnqN z96ge5O6Y2kR!Ylc2j&y{bD=z-ekw;=lJ<#bn{8o=8^?w)TsP4jkAY?rL!lNNmK5rh z<)*+4SMu1~&Q;&e?)f%3STi-7MMl0yg9fpf?N+7e1|4CoIbR*nTkFcn$jZb6AS@DLJ?@TsQ@2|Aewbrj4__fwV!qe;mA%^oCRZ z1hbY;S;=%_ZGJ9>iXdIq*QO0)>4?U=rW1;EJpHhwAVskNj4>AG{s_jsDn2agCz1&O z(MSV8)Ab<$LMXCQXZGaeqCz#Ukhx)`u9c2~B8J8;Gw0WaW)2EtY*q$Cu#-Z`=(ZUk zzqN{}*$}T0E`k)UBUxaOJvdPTw%YsA{T$j`BH<&_Bk zN(vk9<)qQ8Ut{ACwItkx719UjIV8)A7$Fop3ryWG$vD^Ese$TtBaZK0N0_gExp zEG4il#MfOk;^E}BuD!5<;+mVKa0}Yb6S~dPyLR)g<9Elxn*x6iR&%S>G44)0RN({m zCPby2=#l_`ZdFcUaEb_4@K#*}1Zsw|DxMCg@1+a_V(785?^zRdtcsA_neFfMY@#q? zm=@7nQ1+te#FVU)7wac4l$k-&6-cN^-_27!V#a7fF`m#GPr%b)^plD4gvs%Qso?~j z-AkV{)L>QS{z`7!(YnOI0=e@k)>_V2CYTew?_4Qa^1JvRNCnWR{8FHOl5K;3)wTjn zz_4icN_L^1d_s#wDem)mpdG`=;%fS+blln3(FC9CoBwyr!`I*Ug{eF8hnA8u#j zWcFWIGj|kyjKjiP7Q1YYJBEr7(Y8@660+a5fw;I7-Ky^rBF+f|qfU?ZXzP2Z8QvBeG{YN1G$R$~ogtc`;)wGV)%r6ZyTSyx z6&=2sb}Ss{PIVs(N4cZ#^gg54ll5tqPsMrScjH{|vn!DRjHmw;vIe7x_57`^OZg|N zzb4aAKYf^|+hi~5r7HeTKaIB(mT zbZTePn|3DMx-;pPok<%zlTPkTI=(aM#LlE+JCly?Oag*WR$uvvYL{0N;VaK*R_VY0 zzWr1)K?`fRe><;#>7_V9K?s%d58l#Z_-$D2Ca^x#dLvnP9i!WH{b`KF#ydaIAlX^6fmI2pj$9 zQ#>CJC;QJQ*v(bD?rm>EW^v?^mKM_JV@qMThIh?&@)8Y`AV#l-WB;wIaCxHiPdENo zQ7_hyWGN!cUP9EjrGS>KmD;izyBtcD5(lm_fVO9u`S1fB}Xjxrk*`;=M;C;BT&10jRc33j! zlgrG2m_?FtqWn(z5+tTwD~cIwxpER=6{OPUP9|70tU}tR>DizPNrLVdgoH5PYY9$b zO*FmQ<889j+T(4q>Duu&2^2Hpgrg&`_ARd7nj}p~OP}<>@|i#rF&R|>0&wqh2i#?B zuK+%(eqbgUNc8|2CKe1b;6`(#Q3i0wB4pbo?i+>&{)+&$V)LR9SPvw~3odZ)%fcPn z>Bg{+4)B((24T;qhpa4lmpm|a?Qr02)|HgBxSWd3lA{M>xG0>$^n)fQkQeMOM`5D? zAHsAJP-p2LEnNcdSdfIDD{P^tB@#|OQV|nn$Lw(;-;x^y1i}nXLknUzfyYebcbPEi zp3ic^CgmXOv(ZP|A1dgCgD`Ewoh(oS=I9XVoa72lOaXTfJ?c89l>%Ff5m&ydamkfj z5~m=}rPy0_GaZ@)^mplKGKEh4)6ruzOs$zkKIa0+kYPeWFAjOE)joFLkl6*7gVzTP z17ZM>h%~)01*p-`QT72PsXpAQ`d)iN5$&zTE(yQ(Lo}e)v|$i-~9AlQfsq_}2Jzdwe<-FDJP0`9^%V9uq@+;@oBx zCRGogGxo|k8xwIPP$H0qPY}O&N&VpZ_3?5xUQWl$TD*9K6vW1ZkC)^UM4L;`IvlyC zPSr24tH$=wqGkp~YWzNvuCJskHr7tZ3Y(c^);^O+aLcx$w@2BNn-1*tR(X_CQPP2G zn%D~>Z>DWJHPQ49gav6N*RZg>ScQ zB{6+zHjBs;^%~0@f97P5&9bdg&IBphFU9NxU~WXC#b$*SR4&+1RBp(#~#wE`WFEVj=Vcpt<e}(u4_xJ|@9?{5_h0us!C`8&){+lZ9cS_WYMhHxUS+s4M4cpb)`dQ{EQ)nU}n?E38RHJ~> z-B&)iI+qPr`*3T>V2EQgx2p|5J0J|-ZUZz8&vSc^4*=S#PHt^KTOH+7{(#AGi13D* zua_flPVnYf*tk5Bcue{*+9?V3p^CU?x(}I2%{AK)6 z0E-(-6>y;*J>rlIzKWY~Fa}hzMHytUE!dZ>2)Y46hQfe5HUt@DZLrE}JY>lRT<~4j z0#A9IHqsQ7ef@FpoyS2!_vLWn$}sef$wd3%1{~@-%d+t9BxpO5)BV%>)gJEd!_u>F z^egk-P-Pn}2(VTl#HUe9*k`cV;B53t!?2=_VZp06x4c4yB4OWDp_x|x#KFOw$ zXL#fVi0_b<`VPf{RHu3*Zis|q_SJRa1X__5HYat#l3dcW(0-EqQwU9bKFQ~LoYW(q zD*z%ve^^49G&~i2&J!n6OBk92WGDvSUSVdzTMzg!JSnK9#_;iQEciTuexuC$g0k%rcP2I#Jq|r)G3H6 z3(}sN72n1ODw}XtrnfV=*;6|5wm>4(T$tqW05v5k*E{vM-BDwX|7RaXA(2jU1c3}} z@`~j&)q*hH_;^q-3gMTBh9u|&Od~Hcy=`>97taBTLc-zP%hmcn-Cq9`DAnJ5rEv^ts;pm+u#Kvp~!AGmJq`8ZP^aw?G>oUkP5K zx)a4PoynY+(6Y^NU6WFc}@Lg6DRd|rU~7*qrYgj`~8LFxW78{7f|$H(cisZ z(cj%(U4MUF$%F((yy++lPUZ7pbk127bsS;ktsl^ znZX`87%Y7=Grhz7or00Ls7XKfRUD(j3(aJq@J<3?r886V*BIyilvG)oE||rzhltJ- zRI=qPsXZChX!0yl3B*YAgb_Ng?PNtz%c^}skZMA9fP81um<($I2qJsc?b3m2B#c&5 zKaQ?pO5IR^E7i}0a^_l`ggjqaN6L*ltW9gKXvq zzDBb|IB7acOc_MXm=Xb>3ChkeR}9j8aOf@lvc}%El0c_1hxW-qm_y3`fZlGNw?U#P zYjoSqzP6g6t=6AIZuE`Ae?VvgxjH^%1j;YSBY7fG2ZTZdWUm5Iz!rh`o!1_kESG65 za8Y&0AuGKq8w@?m<++e0RbMoZu=Ox&hMIL9IcK%h*pgzR`)a#bc&g)r^tAqaHFa-H zBcUS~8ns~du`6-u)k#pBpquP&Slc;7RfcC7SilAY%UtBG({3jDOLB{&8;uTpFpneMVpzn8L`nA1>r~y#)jns&fEcel{M`7O zUvzQv+prA#c%H@&ZfmQG2M$S$)iFV+Z|6UBrJC602qc0yZNoHy@!N`C0mQZe{4CIA zJBwe)%QiDb2}GsX-tvwfn%k-!RvwF|k1k!%7#|AQX9`CTi@0Q6<}8qtP`Vt&{LNxyJ|Mk@%SNOdt2&TEigEYHAntcl^-^=i(S% z^e=Kpul6I(3qT6$!}f&<0vn8qWG8MPdTPFjBzj+QwK5;AT{@gT1#Ig#4;FJ5XT+_e7g-c% zs>O&bx*+T85~xrlCT7y!>Bw8@a$YN!ba`(nZ~xq`Rq^>iyg0PLYvsY1_mJ=t4RU&l z7r%RN>74H^W#+{WDRZkj%*|mu=$E7%W@cjf3vQEe2-9N{GHinn;@JZeG#NM>I!*>=MOaF^-PK_k8_4YQP?LhvfayaK2b&Z& z|9hk?h2_ilyc#ayN_&Gy5m#2XS>6!KzIn5f-ViNPqk#W^^X5Q$b5JXyAF{ut$sknz z0;AP7btn%KQ$aaLUv}b44*hb~qc24fFWrs%b-_N7&^l8jL>*=ZwOP8tc=>MmO0!ZN zykaLIWWaJtXbE5e78f>3Ax9ieEJAnq^0wk=VgwApfG&?%L`WG;ufiIS2Vl#nGZ*U0 z=u^=`MJeXOObVpQ3mm0P2Idtyv%`w*La^%-Psi*v&49o)gJdUpja#8&1H;E6v4Wu_ zmn8*j!1|$Fi>$$nXFAXIf!6Y46MoFd?Y5zNrp=Qy3`e^PMM6CFlzB1V4F~^ z78$>315|!+3IGC;ia)$sqV5D1Mp_iOZP9t|#7D7F6F0zZgda7yDRK)^I40GU zhuTC9QHD|=!eB)-d$ zw?4?ovg%xBaXQG7v-GS}A40pPEs_4BET%_6r6Z|{i*nM(bmcgnOOjWpZKV7;Q!S7g zDgR!3X)t4{deCXgh0EjpMO5pcv`sq;i+Q23A(970nFs3?laWks)n zfz({$R>4Hl0N?Y(XK(!qI>m85#U?1y(jwUkUD01kO_?`l}cmRRdaVpqcc|}olesTz>z*`^*=%dAmJ9&nDT_j zjZa8rSd9*erUGPxG0;5lovB$gi5|nZFgt9aZwV69Ez{44LX!bAX-yY`gR#DEAk_oZ zc0`Qagw@MzJR3_<(#^l08d{aX$-%0;0rRf$h2aEm)K=fQt-f%!Z&`p(FhjYFc589CTX9abgGMHqB)W<-(66Be8~SkJp9=_p1l2wI!`P0<`jlqJ3^H5 z0pUglwa^4QZQe!gP$MEN*7x{222dE15yrk|ctQZ?Av*9~HyCl}O@gAf(-fEBhSln#a^eryZ@y zYtWrIHo?zWpDCKm7h0V9oNi;3W$?)v*5lk zgQ9WP3;a#i`+*fuH!s=KwK^@;KfBm6#4va#(1z@y+blq7{p6{01!h3Rd|Q(+rO#hs zNfGfP5k+=fZ0D}9gpin#n5FTM=#H_RsD8YI7Fm|)NW~H9!8Y~z{O4@j=1ZB#e&T|o zX()xsW;?2C#OG8Cm!IW)?VmYqgC(?mG^JV@PQz=FHdlv+(^zfv?ct=cp_lq>5oHY; znJrjOo;!-8v>H~eU?JxMp_3pyWYXOhJQ44GD+UO6B#{mjGUi0XJm6s5uvug+&$MJh z|HZQi0Pq*yb<>`mh%39r`U*9rfSARi6#0bDa5?ds){>yZwjyR&k#)BeSGSR)1SOz3 zI&PenoXQq8)yp_;(uI-|$BT;f;BjjBHn$RD2HTF7YJfI5XoFeuE*R6y%}{^n-)Hre zqW2o8mQwix)IY}ZlXb2VWp@$k^E->{x#@sBDfVx--sJOY=N5VW@11F4x9tr^t zg<+B5k9)bNa@bwi$Gs*boV>j37zccoHK5+T4s(qX05p*Hav^k^ltm3HB2t)dQuYZ| z5PmOH6FTY3NxwcHi1CG{`avDREw<<(UuJa4>Vg17GEpV)39~>Sy4M%eg#+az((u_l zr`D;zbA%=&7GUW5naBs}c}CC9{I@80?w+6i?0tWI8%*vpc~MrlV)b=_l4DA~D%DhQ zLuO)HNpv*SO_EwcYyt`=Wa~*4+KSk`sQ%1El-?I$F>!*RCxElPRlz|>B|=tdQOG6L z2~U9wA8u8+U953WJ}F*!gX$@exWR>j*11sGmMS~VJtf>8-<;w?;u&DJd0y$NlVaW) z)9>d(G55v9vyerO*06-(&mM@c-^GPm-dX2#6e~yd2;NGaA$B`u)>-$zjVtvF|G~14 z7TqDG!Y<3P$T*8`pKaJROZT@YiUUs-7d=3>IgmNI=xSC9_FObjTs&VcqVBdRI~6bU zqA!U3vla5NjCr%4*kXT2iU1}7mo^y91u4N%{-i}$qCzT z>W7)eY@F4+2xMJ~S&2g>759Odb${5u#q{fj{hrC1xMZD27uc;+BPW5TulIk|!lLZ;+%W z$up27#*OfM2+Rs06?J>yCjYhw_orZiQ~I}6A=55gR-w?PZ73r6yIn1ArELl9U6hQz zN6DSbY(-cGSHpU&c5V%@;U8fEx2ri)gfX;;jh=0U)FDuU>$pzMJ3`)=E*k-*{%Jxr4xRP-C28KJO4+G--^jB&atSoZebT&pw{J}I zuI-FGW-K<%oqbs}?>|^bYRhARQBBIRkJRAZJV#_0(jbU@$kt&D6rYBalvlF#8=Y*RZBnAJK5fdL)Bdy`U3ceMnj#AJE<EEfUDW+UNv97K;V- zDkdywvEK%(2n({^Wj;X&1eV!qYMW1i%q&D@ixnRzux4S-A9;rbs(}9J9mK@R`k3NH zSCou7gOjuFrzT@ycDAc@mKfH$8%1EJp<;_m_714nKzCglG_muW802%kkNF@k=@}Ve z&1*hF0l-7rqm%%Mtq=H1oHnWU!Bxty&~U7PO5Ah06K1!H#ZKB9ot=>!sTRmmg85_- zCThbZ4wz#1BNh2>pcL1!8vq_^Z6 zhmd%wJ|J4V07BpB1azG=)&K$yLgU|0rzZIwCqVGj2L!EVO@8BmNGLi42%8tG7Q{uJ z3ui#!gZptjOaw)@2VJeuNrR>B9c_Mx>Fx&$jBA-C(BWnfhPJq82yD!4O|I4i} zZ4tIX02qTIfYu&OYl^r{Sh4*yr#+5x#g`&aG7QC)6i=v zV%Rb+jWNQvPZX_-b5F$>!H6b;A)*OwsWj~?5K(hP_{Rz(ZddC@g;)b?WLnR1B~lLC z2j2yS68TqBr-CaKI}R^qO8rokuWC-D?_t?Q480EUu^v&x>)BuWnbi0#K9*HScJC@c zO;S^02xrRRfd)YaT!I?VJn=o|3>e6P(~d{hc4tiUEdLn(8&XsyYNHN!Y1R z9e893$!emT1T!tt&vS(Q<*LWBG_xfMQzE1Vk2$z|gw9zlSe7v*RTBCl)A#?CRIg**?aP56k;T%YOIF)IMr2a)h-W0tbX{3_pnnC6*m{0)mJw-gR zqJQv_k%e|w5l@U#0-0dNVetPid+#4)*OA@#-Fx4gnK$$1#~WY(3@`(r@0}T7@QVaV zEHV5ca^4avL0MQvrI0G57Ubd&R)qy14#{F%{DWN1T9gcBM-n;nDA6)29?`T+uW6Z% zD1|Yp2#%Ugz5Fz7zGJ#Z z2r+q?{>yCeX>Z0$S^ERC_(6>Y$X>`Uw1Yu{!e3pV_Hs4t&Gl)ob<@)JQVKRLrFdsF zbGql(Lo=n}X7s8~Z=5~MzxH$gVjVO$)g4IYjnG60B-k;Z1(H@&L>HRR2%2dWTsA;6 z>JF+)W|~?;6N0xvufecvfF>CCyr2nGp8=ZvCbNAn65FTgx)YZT28(|hCAO8UYpbf8 z*9=SvgU=Z+jk`}RmI)QTgvL%5SCKMQM%gAUL>Y;{w0YH(gsL(q6v*bP94_k$T_pL1 zkZCheclF8^^&{@?ed@RoBc>A+zyxqTBv#m)3z~>#sSGDXlJd-q(=wZ8I3yO9Rj--0 zU1Qmr#WgC)h(|&_``o2hUjuNzwA2$Av;J0!3W*|n+Cd6w{l(Jk(v{b9T&G3s$Fs9Yk2?|8%tq zkECe+FmqIkc02i}ma3H!e_hg-9^VGk-278QQ|J;cBr5lFijym6i7r2ZF>;S6cxCcS zhgJlBLh;n88nphct5~g^kO?o@(E+4nL!!DPk#-RV*mPJ3b;qOndORYV@W>u&xZ#n# zA%m-u0XM)I5+2n{Jfa16&SHsaq&SGj&O1N!tZpj_W1!t^WDk- zS>wda)pVnB>M#YGmPA@JmW#7IwD6FY&=*4;IR-ZA_$!==>#4^5j=!81y8mqc*Ocj@Q4Zvdosr!llm&)*&sqP zS$iU+>~$n7vZ&t_d#(i@lL0qkkAsKOJ^?(mJAwzBeSrr7EP}^E1|AE=eWRKKMfrMo zB()Keu;>82(HoY)#$EK7CNqPC2RxCAW6%>K(QQb@hDQeJcKW{;NnwM?xv7x!AC9DO zC@Y@Y8Eu4gHB53OdC25Z4KG*y*yvnh*tkCxY9fnB&Gn@HZQjwUp_{OGDbkqdODRbo zlZ2|?hEB-fh3Gc%_Uq6mj6AxfyvaK>Z$l|>E9(`KFcvRMX+O<7wq+4r60SVJYfz=A zW!^aq%D=A-r;>~rKop#pQse|9`D<(D(V9j^*%{hfp%N<0`K5ew^eJr z@2nK{67N_JZ)g>sjFR@tBu!O{`X=w_kh(>E$ouX}QQzWy&s9ZztfD?5X>VCnJH?7n zHRiMSbv~y@V*VZ&)X5^WQ`ybW=KI53ejw~KH#(H^8mgb1=eKa{P$=4x$yQs;_zMSN zPTN_bVrfHp#r*vgl8XhRFlu6iqkCoM`D$N2BU)6D#2G}?_bAzwgg<||Pa+AQO}?)r zcf<;@TO2`zXA;9C5y#;O<{A8!SPKp)Tit8kO7RmEzm4K|Sj`7$uhl$C(l|*ilD5Q} z=gOMZcCXypaJ`!6yypGZK(ARl9lI%h55@1bn)d@tt9g>7oh0od2?I6j^X%0%_quIu z*u2lP-Miv~Z+0XB53-EHzSWg5$G=%S&&Da5nfsFD%CSx{YtP`12RMiGos{V}qp2** zrecOHyv}fqD2YoMYJL{kHNHxce7`?b7HGhaVzA`bJ;$b7kpOZf zl{F%Fa7jx3zTKF+J#|;V}$R5`ndW7a7Y&zmK8y4tH*w>-`cdQmShnvwx z9twA^7DvNTsYL~PSBoAc#9rd;bH!{YKZ-{l9yf=5dfOYE{=?T*(N92 zABhKY%ERLrbC}1`d`@$a&(VgLy{{Lys1frW3a39wajRN)nElcta?5Rzjp8=7?k@QT znkVI^aFc?EI}~*n@A7}gCh9y_$x14hlkf&b6WjzcI$ZcBRk!*gQZz~Sv$HFbe zZ2q}$YcZGK9&Un`;0!MuVfxSKGg@^)lH$f0UjkBAh5?8l;{mYok$gPNJbTrs|MWon zH@H2xJL(3{T>fbGcR+qTyfFdrKmM#Cy@Ogv3aDqE1Hq~PK;UtJFL>;4^1NMNe$Ku; z#=+U!8_cGU%NY^!9!2D(L;f zK>OQ2T7jOg2kY>4dKEhtQEED$^N!=6u8VFVKccsKev=-J{4nH$fc;FaD0tL_S_M)#d_JCfpR}DzOs%_lH{r#aj%3^9DN`;`=3ZXcdDz#mQ|% z4RoPM7_EQE{Unm#EUo>vi53Wtibn~geO-ic33-aK4J?nL0L38tv8e(5Ln852DwjZO zr_pv>gC()CqP-R0KwFopFNoK^n{re?jD;y0^9IjgrKoV~(nH^o>e3*4WQv0y>Y*=m z$k0xEl>Mf|>NnjVi2bYfTh^1-C*a}zrVktXEsAH~TEAnnV%OI-zuMw%12^ek?ESiL z*L6L1ZnLiUV51?V&))T#bV(7U$^uCfoFa5+c!1EO7q$Z$z`ax$laaS`MZbg>NDJB@ zMU=@}nv$H`GLg{PxP~|Eft-mT5k9AFaMla5bf6H9!(6uySt$?3Q5r*DlRP&CM?o*q508h;ZMey&WudL-K3|E5Wq`| zS#6|oPHz*u@tDV(nOOe76odhrYrdG(Q<>)!P(B{y6Y1W^W#zc8EBcikrx%u;r)MXi z>^#UWg1?_D&6T}R*;!FqcAlP{fU@%-`waX8x;|CRnzuAN#hx0m!gm@J7SkH_RzCWe zZy<~WQHxJ)<6DDbb+jb@n!?ib8#U#%Lxsdi-tdo67zy!U0WQPosz>>FY9btF$W(ek zBLMToS~NEq;9PkG2@4P%(5TDL63WU{!^#LJ^kHTtH?i)lwkz7yi2lhHdYlFdGxv|w z4_?&v(-sY)FB5E|H>lzzzyOt^#E0d_?Pj|rctKjp{%2Ov4%(@QtTi! z?NlL?_oxubG>sA>W@HB0DkSz2O+S&11OCG_@lgBe0GiGBPyL;0laW6bPF_V$&z@XvW zl#?_uh0$j!NvY@>CO}7&F4oY}m<3*Tq4leiw3R9zWG&01L(-P^k}eVS_*Z#VWVA;83EdR=N#X zdh_b7;zfP}7Edr|{Lw^p;5pxKENQtqjUy0O&34J4Y1acEQG=jETSNm5y!Q5B7!|>q zP%V(P>7u0{yckep$%3|tzX;NO)WKxeYo7`Y!d2lY7iY>Ujz?+sqvl{h(Q6KAptfe5 zt`SQ}1Wq&uD;l|!OY<7tW%hAFAcaZKula#VN?9MYB2b`dqYy%cW)UIQd@m8$ff6rB zx##m*U^@y?Qi9k96KU*1>%X5=+2mYf=J7J_BC-poa^>cAmgH}Kzj?f|SfYTzyw9vMK z>XEpMd}WNYO4D})>ryUGFzH~jc3g=Fo9t}VD=t!dr2=`T;{>0GRdk7d^u3=baV=wB z@a)9r<@kJs{mXa?$S8yHahdc@w`;>7)EL7^W0*(aHfW>q^r@EGR68cp2=o?YYynhh zA}}gpHq={IoAt4oS(3Xnz*yLbHei!BUJk1oZ*Vkwn3vu?x~`SfTG^rkzq;EKm=#Ds z0G#I7#abroGUJMx?Kad^ojdDF&8&)5fwg|U85)}Q)TawYpDxrb_>`kGi=wi-X}7zD zHV9QKeeHGkG+e+)2lQsh_TRjZoPANRPw?iZ3yZQ>NHkurcgM-!uQiSjdNRjkT5nEj z;IzFHIXcb_bjqEk*M*0ySfr9_%s%iEF7buN6;=n-#05l}jGRV4uo zMzWj$&aNYXI+unRq1+6MeTQJodoT%&PYBN{Eb*AfJZ6LVV=(LD&-xXoGCzCsqzq;r z4_J4#5;THI3|pdb7uG$Grw48wE_i#_P0GeZtutx>MDNkp$p6(I}cU{Yd# z)B0~F4VlgTmx(Ke>iT&d`A!IL=*|FZA3e@wx#aApXXJX#gj@I00q(KbGE&Zp-?!() zc1$8fBS&l|jWK8(>-E6kT z(@{{7XyL@-(smU94+G+QXhLj`NhL$bj>=ewgRr{bh`0$E=voLzDpExghp#Ltq6r08 zLlZ*($IMn7+XeF;I;?Y_#2v_vnz@Zg>4NMgYVEsa!Am>k_F%*LEZR;axDgvmC^nW* zY%HPJSVFO}gkoa}#l{kfjU^NtODHy$P;4xr*jR|6HIWv0vq5FhrfU2mnXEEqnq(4a zoP&#pAh2sUAE8S~M1t>w*PDNw`l(Z<2*+cEO|0=8#hELj)yCq3Kjz8umYq+n)K+U> z$=Y9gC9B%*qiM7H-F2PJqn_oAqD7hSgPPf=JS_hQrUHOfs8Zqg?1i@Otg&0GY7#GC zyq5htUt3zbBD*N|XDk8BKzkw^+7r3oo-f7cEAa`PFy8zoGKuD4P@Mp<^(&Ljm6{HH zmAx`90(62FLO8k*eaZxsbE0C=o3%-VCL%=udlqmlPX*e5WN9mdbC55sh_lu&Pv)pC zo`=@U3X25|IjZAh49ga`)XSpFt@^m{#4R0R;l!iTT|dn9BEqzE&q1z*t z6iajNz*{@BeI(Y}uOO~+1X>&Kxx5#>%2RxantQ7VJi43Fl#IWg{k^396MWsPnLE~T zqre2zG3h_f=k)kWzCS~f0|EW*pg-n4%RYbDHA=W#i*J>*ujH2VEBQfK<(xUdMa{^j zAqSA>Q2n6*>XuAdmpiL{Mbz$a}hC^}TB({$NJs|lznrKBJ zG;t(RDM?vMT4LzcrJ!74GH{L(>iJ5_!TOr?p9L0zksVpc*pVEQ(9vP1;=`d3;Ov~K zIV~~fWua$}vS%+8L7(9DpdBt0xxSMs$D1=5M)V!a zk@eq=K-P*KrK_8llQMpL({3$|gwKLDIHZS+qK-R@UpB^|sryIquMtehNpdzEw~QqFytr&>YBw zOg`>QV(ifDzuqyh(RXPvI0Ha{)ibz2j@UaOEN{ZX0a+`}M{)nj; z$0#xsEG|nz)hIsa1{CXTC1e-UwUv-<2u2cfRK=svk_-2;rte8>i*#rXgmbSd>?_sT z|DhJ_9SSY|!9RB6i(4>lxK%sN7TI7+iE3wM^l*d}GmqHE9<t+^*$%TEzAz^4Vv%s?CkQu}rmMu)akAX|G#h|6J#!zx64~9?_ zqdS23>o}y5)44t_CuF`0QmbDBB4W@p_p@b4!%|vI0P3&~{{3Ijs%RL96%%SvkqLez^rO?_M6#=4DLKHo&aYEC6pr*0wLg`PHA5jJzazg z8=*#;*gBzgDw3x-A}n7#Zb&>pnGF}+Mv=RvETN-gNJHL=!^3a32 zZqni&(k;(~4rG^(XOAm1pFL)_oR-WI5JN5tvIcxT23Z8YX~6^8^zrP91?kl7SX+7C z$L+35`|Jt3{?dX=sa=Ul_yAX79@oX=Ri}42;xYe^AcR5h=`#uk;yIs*QU*nl+fA^S6I)r$0nvkK}1^Z1+s)ZLc z7X=?t*x$HDh%izrKb@8PZvKU*?llu7A`xc!Ij@zFZ@6sXxl>D!*nW1y~z z-G#3N)iGP_AOvMG3;gy{`G#3ZwqGNb!T!SG+8&-7I^ed6V;BgUqbfakCq;HrNdN@ zYrvBQ8+?sG)2G7@RzF3;^cv${Tg*iP^)>`zjO7u}n&#VTHn3+CC!2+AvRSC18Ad4X z_z*H{RAf>Ys%fYy*~+a{)2c5ZN15+obywFB$On6!x{E=%UzdX=0$Yg2_qQ4$Jq2b0 z1jDuq?ZapZ8I|13Eac&0tE7OiODi~Uxxgm7<+9~lyDhhnwcJA1aze4?guLa5-zp9( zYPFp0{-CB7(;{frXz5MT3vz;>b|k^_BsPewkMJrbrzK$vJ>EhX3+b{OT*bY<8x)f} zfar`_9-ppen zKbk@5T$x}l+l``{wtFedXTWA~Sca2DZ81nqD*~&LhBparb>mb78dyZGuxyHZeso<# z6^~X@gKN^-sT?q?A!GOkJcUOcerq<>`=yG-#cft`OF%G5BRl;=oR$?W4VIUfALCde!8X^>R^Tr~W%&qED z-FZVS+E31X3Ujlr!nZ&@M9E~@jgh5f4kRQbeZy2uIq*U=!Th7-R{Cr{N=3pqx=Gq( zm#W~(hxM-94T1|sXU0HDwMrO*GdzK^o8*}x5T2K5#VQ+Q@z);`cCz1n3Y^~7`XBJG z*o2blsE672*m4c`xS}Oyj}XRD+2e6r`14>Gm%1e}Eqwx2rU}I8mc2-kQE=ey!P>@# zzR=aIM<#L^dGIEUyvE#!amNPSh%h6m;Z|51EIiQ2!-s`2?l}P#f@?*?Eh*^G)|+1-4@e^F$U*f{CBa}S z`+)r#81~`S8bK%Lb+_il?%>XgX%q}WrjNAV+`r)+$E+vF-he~+Vcv?`ParjGfOQH2 z)1yZ<1B|lCxJL)TiJCwo&uL3gdx!-)o!SThAl%#Mtdu5*r80VKr2d7GRL57M9Z#$E z*5ob$uhseu+xAnwb*XORq-5rywY|);ls+OQ4zIJ)<#;d@;NCgYq$jnt}(F^cZ${Xzkb4rE@l{Qx= zYvWJtcryJ8;(`tZNMl(OuADWcb?vm&JfZ@O9$u1687#-(j3S#d8?>+NU2WWyNuzRf z-DNRMbjmdKCYv${jAzh+Mn7$7+>#;oG{eCbJAg(ai+tTe#vLtW+|fd|%V8ng<*<h_ zTD}o76_P7$oKj0GMqun<26osmU}NzFKR)#gi>Oo&Fuj$AoecFYS&x zn}QMNutU}>)@!q}9bx<1NvU2W)z*I)Yf2eSouFo3Wim<4iwv&i#bi3fZ!?@Vkcm{~ z<&%?PK+{7vLS}zKi?SFi+Y6BzY4U&vD1{OM>YC)kfP(-yN>KtE!W55VXbX89#Tgs> zfwe_);nPtjX?2ZxfgRS-Fb?~Xwbrqq>y{N-5Vw#y6y!pdCnDgLt$w70)~^{&(6Moq zLp%S}APc^B00acj%*hxP+k*y3aA`)frsOzegt}wkL)KU~WW05UjJ)5|klEaFq&*`S zCBoj5IU1+=?1UVs&S#5^naw?N3E3GXhc10MYC@oJ>{uAlC=o)bWTOOqWt7-A({%8C zBCRG2I}BCgV1a~juvo`3W1&S_(K2HpA__5MSraS7jAdvQV#c!Ptq?O-+t!4bu{t?Q zh#9NHql8#pYGxBU<};hng3oM1cWbj1y}aEiC8J9u87#QjY*nlAh09=_=@~I-u&h(% zEQPg6l?*DME4p4Uc$+NTj8)W;*I6bokF#cO3%X0dF~PMzH-c>w02M$fn20s-rL+ao zoUrzjxNnrElN3T%fW$w+vT21f72#tlF5=#_Y^WX>ZEKE z6gZtX)W}olHh3)N8LUKYWxu~1Aex0_ko~2?#0#K-CKvJI(nUMzPa6*-DDs#`AKlN| z1ZfhoXhW$1JaF8`cIz^Woh_?cb$Gi?!)e=C$Nr?nYuqVbD6v`bW|Jif_$O?=7y-o# zlQt{IsxkQ4!g)Z0S(4_jJDGlgx>7kmb`nxY^19nETaN`5uql>sf+7a(@(_Hp5_=rGs?5fpIV`nOz|^ zS?n+sZ=(R1j9IZ$8cT~xSXbM#)nO5`J?!cfEHHHT z%ql)dw{>-eU04zQaLzx+9fA1_@su_hwz34_eJ{An0Rg$$+`}4lsza4AX*Wq+GN#Np zL?%OF5oFn}EJOq%wyC%sF=9H*s?a>l>9Iw0$S=U?54+X=VL2aVJfSItgm|>Tpl`vY z8q1)h3?uQ8f6L95WUBu^BBz(*Q6?M$SGwlZRNJFdr3Pb?5@ zUGOGPBMX=w=-Fa1&6-BbN{$@9skd)I}Jd1)u6`)uG8P5h(0mh-_ z73X#<3Qng<}^``@@(I1zTU5q-iEb4~;1jW@&ks5!^yzdX6C z%x%)H!85Kz+9?)^SyNTHBn#XzpOdJbs+@`qMIj?6mxxL;Q_F&I2+WQC%YTJFlD#of zQ7RjX?l!48_aKK2tP6T9T2XFEfV$D$s!3uTh}yb-t&`~>gLihb1)E5H!Fss6D7Xr! zS`>U>tL&`#?xot)Q`>z}u#{eOf3xcL!}Z$X?0w~9St=@yvMJg8NWr?@Esmxp=YkB#CF) zyyhgkr0UY%X2@JH1sWWX&3GJUEx<#%3d75_G^DET`IG@6VUqhN84XN;5ifag-Y0{Z z!;a~LW-4L=iog}Y9sN8qkR*&fD}p`Bc6)Dx-7A8t%C_&)NB;z$GTv^tMjtYhI%t%w z!+VWE6kFFA-q$sT_g-U|YR1gMARZ?7hTWam!o6V+L2LZpFir4zAd?UBZ@^)46#K{? z+M5Fvw{QQsW9{ESGUyRuWFBN4Wo9%08@w5hLS59A$#2auLHT^$_msYwEo$wFYkB9R znty7iMxiLS;>9JVNGXJ_##)cMGU|dzstB%Q8xj||6=9Ju=9>qy#&N)aUQlur5l52N zoyiu3Zcew{m9nIAK4j-0fRa%2#~C}}#Zr7e?ynDnHI9`(6%!s}jA;$WUM}g0IT#VF zOrIuQCTUObKp(~TTI=z>avjCI9E1~ik0i(1R}vj*OWPlc0>}>rzt5)^TJKY3ZL-sM+%?x z@Y@QX^6U7xKDW+HReJT<^0>$oCtgx+!)qzB8P8W!#5JCn`{a7Q zoaVED-^ivGR1nd59=R{MSfK^pvR}IIiT`cwo(>hr+F`o&ja|h-C%V(E_jUn*xlX~# zP2_hvgidiJ(qOy;*lxC=2Xj#eM#z%_$JXDQba}3Y(*_zcQJ@j$IfS6}F;$h!7L*e3;I6v(mE})}GMv zDbCl=-f7mZTE)gr7mQ`uX@=lH+37R(-raE<+n$&43`F?a7op+_v`#{vP)7Z1nBICALDHN>YuhZ#6-suCe(+9hqrYq{S zfv_&$6zVh;tJ74cPE(UQO(mb9(}5FMrBLZ?BQgsU>=3HSnbkflkkO+K1E=6ia+N7kZ(ULCZ%ApTXF4;s%Rg;V4iRk72 z-8^wdBX>KE+>1}?qZS8!oF+Tv@8R27;>bcM5Sm8%k$4$vV&_n8VCsodXCgT=Rh*P@ z!thFC;TQCWcKQix`D#WCfu6MC5ycP|I) z3+3>`Q-s8>B(bq_)j+W{)okgPh^kS@j3k*-(JFmdjS2*?7CLqm1$Mid=lF*)W!o?54AO^L;*3_ z@rTrIyzSB4de~?9UfKBZ$|8#269r4r&{6O)tx5}pItWD4l|=(Ui({EW%1LM#TmK3^ zj;%tmAF+q;`9&3mat)J1-ep6GLT%0}*OFJ>s33-O&prnMr8P4Mgcz$J`gJ6vK+Bv2 zMM6NwM4Yr#g7{6FMr#imEv>ChHL1M_BRZk7Xx5$+wCNw)h6?bKb5;q{_(oIdnc&6B z*r`!gg3UKLrmqdQ%hvI;MG3bhdq3BM+j80k+!I&BjpYcyI^ToaGwGibz@1XZ7dODI zf^Vm<54H-ro%wSDHAgpiLy2$a1V%VQcb-=8?d;X~c3#=xCf#}Z=LX*%T#s)Cw+gyF z)J3;zL9K#qm;Rh!+Y^G>!(ChhwRnH5hieeKk|}_gS1|=}i~NuGkPT}0XNoJZM6d%X zwRRH|Bo~ZZa1_`})qyvA#$r9cXkszWK1-cBvaZaUSQ9mLV_~ZAT2cIEtE|@k*(EmB zRPK!{@~4+@&T(Uld}fKQlp9;*PcA)w!^?bb>4h6!=1(kjZg`n1OV8Z!GFO+Da2<4G z$LPnGp1I*=c9uFfyv(Jgr*C+fKeMzvd86U^^wJAAyv%2pp1v3RA zS;T+WWJ(JA9cVA%uaqBdESk_hr1o43WE)KC=Op7SW%=$JHiy!o`GaySWfX$ikWJ4x)@^>%zF#dG#s#$vjklkQ=7a-m>U+U)&AwM%kWn+6 zp|;_RqA{P9Cb^N@UQ0a>dQ0*dTB04sB*~*G&2(*1nnZTmkY8l)pzTV|_3^B;RyTh; zD4MlM--G6HFNe?Bfz*CX*h3goGzlqer@7UY8}CSmxhiF7*nR)hbJ9zGS%wIeCiY{0 zC&MqA$s@@NL5rqLv*aH~7K+`d=QG)p09}p81gH2?o5qFNFHMx`rJReJ}H1g9{{2+<}~y^_s}z9R{{ zZdgl~B^5x8NLOL%48O|K;eIQQ0Otbjq%FdQ>_O?mmGZXQ`n4kx^r2Wn1 zWIWGhNXPw<@u!*N?jTN7t$&FZ&jaysTSn zYv3y#l0~jMRCe0?!x2mRfZ<5{DY`$$3EmU~W3vy=wX>Sp=JUe<51e2! z?9OFJQ0HI9zajpO@sHyY=7?{*l==5uEc#I9o6!%q*J_Wr#q{I+nN31XHa8)dUIyJ- zLY%#NG=Mq}AteuxQZvsS9<{%VpDX{ojgkm>V+6x&5nci!;b$GydptCpYqo^2=YBdL z?x#bewKPc?xUA5r09my3wbzd7n!Fl?G%5Yg#4en_GhrrI(gF!dNW;*h*hED8MnAfO z?^H81poP;oM0hIaoIX1zX>NxNDmF#!t2R*V2uXJXg?;CL&K8{Q#h7=Pau1}k@iDO3 z#s>>JcKEeNVgNNITWPW^>uM~7T7Q*G^5{;GnYU$NbKpNx8gNDFZ$PAHac|owfSFe% zQdIT~tt`|qog9lS7FE#?9#zOmj#>H82wY>TuGZhzRmK8Le1FvzTTX1Pv5Z~o*(o-s z>9r#4r^O_+ryv=*tzgglX%X#Lua<$lqQfzM}wHTm=v7>TaG}wcR40f zy64$S8dxM;+DUrBnS7{}5^ujinJMeafxA+i031nDj`bOkU}3t*)GEYbh{0j;&y)H&G1BTyL_X*X`3*){yp`R3cMBvq^Y?UkHFR zqVr6KS{5=JJ_{LYaT_`##j&Jv1{y>|#+SsyLyHi=8TH21|XtVtHKCRr#pNe+>%Ntv!K=bWQt4@ijU<#*FZK(6mHS~bQ> zka|Qx2R%fE;VpKoAK)RQGvw4Da(owOk8=CSkpIv~jp2wxUL8FfcE*jYokRn z%u_8V9ofJLJF)>dIB+S{CYS!51R*b)`&7zM<`JV(B(d8o-FwObUid;^n7q*b>p?iK z0%XNqcE+mC{4}mHf8jDs5_T9NDv_fuq|y*Dfi^*ox{yQjrGgxI5@94bCK^Y=LN*c> ziX#CWHb)Mqx}f2z9J42#EI0~VA_a#}uf~$Hk@R_!My|sXXEfKt6SW}Xi8n@*%TU7D zi%uRI!uYig4pkq#>!1i7ldHpxq@-HHdK9Y*#fF2ZLNTKAZROXWg??z3fQuZ&`4fFE z#8kso3=R#NvblaV$Ek8W_qomeNYM%C#h4R9lQ?aTb77EPBoFz1nIs~&;*dxrHbg;4 z4caThhcGUvIE*Y*w0XcZ7&nl>wnbK%0s;w6Ry0F3@#JSYAMak316`Sxsa6<=@QH)N zWF+lxGg@(V8zq}~!z8SD!wAKO5vnwdqBzK*8ZQ>xut(d4UrHgL?6gMXgccq3cZr$S z^nPXtIK$US!H@|Mdi*br)N1idBLxKnnvoW#(XlLY`pHV2mKu^tbRt<**r=~fcEuWS zkfYq&OxhjSp>26oRV{S&ldV41`?N!7S;jiFE3{BKP@FZfFj|d6Z5$hoL7o+zjQIqGETrbj93xWR$Aj>e0GB(j^)F1xXijg*DrNIARl zqk;IEmp3iEGJW*uNnr2X0-!##@Zqwu&O>R3% zVrL<1nuTK1)D$zjfVTO%!`6ovSd>Jnk-`2YXvr`pP9fn@>(xnGBI%vh4Ch0tmnm|Q z#jQuE2kT6C`{@tjK)^|ZAtWquz@-sGN=LO3cIfHJh0aVfQkNAd;k<;4x{7tBj!$1Yhf8+v+5TG#W#)FU!y$`8O4CW?$&6qG8Zw$u8Fl0oBR(Txv;Wl zq0B--hb|175+#Q5-5~THLL>$Hq9+5I5uB}-2xH=xj^#nyLcPhzi;5`&Vs$l{)O?UN z7(9T)ob~Y1y)?SNZdlpatstg+;?2hGVUU6#oMY80Km$z=kupZC4kd&yZ6PKwm11Z(jyV}UOf*;Gf4mttf0 z1bYwmPQJbN9#srq9)Xe!Xl*3w3elH`dk3X$Efs?rF9EHDtiiPlQ#%nWz*}wso-4H+ zrcB;JVf7#kOp*l8@3MAD48pC)+O7Z6;jFLYh`>GY9^Oux(09fT6yj|4)o3i#x(*uq z*Av(HdiYa)jhp;U>rSrob;*(#eOcwY6}_F!@!6z)*@+pJwQ`I8XSuJ8LndDY?r6Z& zo30P+aZ^97q2wVmLiR0NS)?#D9vpORi1lF7el!yJ13tgRHp7 zyy+As{xeNs)VE#!7$$7E!CnMG>cI5)@y*VZ5&!V@&XhHn6>!?-zf0ZAw;VHP2nn4hjF6C$*n!Y*eYb;VP!$Qz zKLShFH8%BJiWaW5QsQN$XVMZ-~$l{AZw6>w^G{v&Hh@8n;6osC?|VLI(Ufvz0m(` z-bcSQ>JT(al)EDH!y>gYB4-_d>Y^%7<^79ONN$+AU*PC_xv*eZG~#iqhElnYkS~a8 z=plc;+b>;^0r>DGjZuwZ>RRn90vzgIn(}Wr_}UwrL2EK4Qc%va4>6BQ?{}};-ItYy87FKMbPI=`!5@>(}7n+7`Vn%cN?{z zGTGG{Z!L|3xY=C5_k$o`10Hsl3=44e4Uq;QTj5@=9008^mka7*xfU|avXCLg`1*2b zq?Ky|8Jz(7xNY_~lmn)^))!!0+pfujWauDr+UBSlYs}EFqXz;d`)s=UWP-<-&ej7d z;M4CgDq#jw>*ufegHsY+rwWa#AqzNY$Rb>1rSO!7MvE3x5yJaeOAXu7A$|aG+PV-5 zB=Zi~2{f!`!_bA8o4y&0C{duyyikXzMyJwoCdvfIq*HlKpabqhAq7XNVGLF*q~K`w zU8#;z*X*z#t_a)^*N#+YVM3=ez>LFWmpZ$lxvwVa^^KYr?L$#dZzk0+gwf7anLUf1oKS~L>fIbnF_vs z5Hbv|^tLY`WIC{HAZ4v!iv1E>xR5LP)3uhyZASuOoJs=ZCu$>NWn_~ z(E_VAMo7YzumOyx2t4=x;8d9zSBFT`sB4ZScWZmA5zxXZlg<1x*7kPhd-3Rrg|-8( zY&F%MVH^CB&Rd;zTXlm~DvUj8?}#azYH&*WDTR9%CQj~0zR-NTDZ2X=+i50s*2H)P zIWWsh9nC6!=CcbLHXXF@>97>T?CH|Vf5l;%9tI7o39~tu z6`?6opN7MzQ3flPxr9OhulCje{CTyC5nxZi7vcEHU~XzbY_~MBeEo}{H7>v}(s6PP zBPH9!M}CfCf$m#kjuRnedDO_k85p5ZkKlp1_Ms;9xyba=Tm+sRyk*Hh?rgA2QL%C` z$_EBSy`zO(x}dRCaS^_()|iaVMg)B@+G?Dp29M#`@sY$_E2$rFDf>tcy-`&%Q&Il2 z;e~Ro_Zd1TxL5fZbQ=HOFsW);ifn8asS#P1Q&%Tht@VqAJ6#g2^AXgrYR@=mIpP>n zQsp4SPA9-FS8YzUDETG*$+ zWtkc=O-J%KiCfqt?iBvk#2?IkI=5f4J>vsnqp^9NR-=6d^dzXzr_8>x)B2i{P-*LP z(1faYsU}^QKMI>I&;DN0{_j90Fvq1nQ8zI|qz4@muR%N%VoTrE4??5I5gCho8qrp%qV|D45)Upf(?i!39 z*2}9kKvqy2$m`A!1zes^@LU1w<}tx8iYS|u$gnkOxrm+QbRmA5*k+Nd1zvFI6ejeN z@B%jyCwth(1sJ?UTZ^g zB-v6dN+$qW5BCJJ0No2kTe|}4`rT^AO{>M{-e8W^Uc|>_?L|yUh~^abYH|A;#c&vY z5!K%Ci+NBqK3rFe<8L4x^uJi-{N#nY(a0C{sONX+k>qy*jD&_HQcL^*NVh=kZC-(2 z5*8nZ_H`RzMIH#paoK8_exREE1FNyw7<2Uv|&XpxOx2NZJ z*T8Md`EB8rW&F+_Th5P>dWh7+q~Z>CoWrWz9q>jmxCWjKzPN_=l@s1?6!kR(h&u0V z=Z5;4g5l5`#n6jzJQi+izyqI5Xyf1?;! zE5K3;n}xU^exqotAr3TnA4OhntSLwZ%r`b4*BCmLZf^r?`b?#-gA^FaO{nuMSgV(@pe2tjRsY+ zBTSNAsgrn&(qTAtaKxaXoIAs=5W=iA4grNUeYGo0g(7h84DVys29+>{S{cuxgygvR z3qBR^6=K~RJ|8D$m_G5J*nhuq?~6t44jjCsVd})V{r4Qt$SY#wZHi*1=rk&P4CzcJ?}fElN+M<`Bo~}Cod7V zzVTwH|Ge7qI7QULypHW3B68^GRX-;oF?GD7_7IO@VQkokTLW_O>A{ua@Eb4w{2jG5 zWs+2}?@QD(WEjV-z=8+}V&;bi!;Rq*E6IM!q91Qa~&u}OlBEhiPfTozM_Rwk4}EG;)b~#WvY`Ob;52#!vwsGDR{30*^-+K=M5t7jg-Di z=AqNW`MBNwU?iLJM?z~A8fmPCCJctL)uPrBMYkqx(|ez@9C8mUcRyr$yKd*Oc%W@@x`^r+)sF zsy7HXfAP&qV-pY}d=%!xJxD8sZVlPRUxRkj^1YC9;6NzAS?B|y972v4BtqQYLFys; z4#Nc=j&@Y6!kZp`tP~#CoVVM?7UIj=2T&K`F_ml0nwrdTg&Lrb!jvi5>ki|F_?!4UL%ww;b^#dKI4|}%t=fG$Qe`yFF53&|D zr}}v>rq4-T(TnMKT7Mgm0=@e>Z>$x!JEcEH6w{%ms5>K_CrNbvxN@ro-6hu7DHyqJ zoi|E4zd$PUhA#^ccgPZ!M7HlB0ciuwu(q{`OUafVoNUpf#WH-G0$d=eOk7>j(Q8r|uo9-0UWegrqz*HyR`gy+CgmNIEVz{5 zunlOD6*7$736yUYXbg8&NyEV^VWKhg6-<>jKwhQkf)hNgX(A{Zjfy2wsQgP9T^I35 zehnrBn-~}09b|r~uzo207F}BmpRp2*Lt}WTsgJu@H6!#dt86Ocjk1f84$IehN*<;{ z3bBS+Yxn?;q~uvkw$7+0-YSw&Oer}Sh-(5dV<-@7C;>5#>w}m~RS@%91u?JdK+Jmy z;ssiDEf60g?OGr{O4_wReAv?Z{yl*B1SNk0h;_RTrqddM%|Lv2*d{l%-}zDQzP(qv zr**HIDcsz1ntkdZJFBg_PU(#3!|z8zvGi|ECl6sdU1a9)R#yVud)#h?l3C*Ukm+&O zAE!gs{+++^(jT)Wgzwty^9ujcAN~3_b?q)rZM}q7V+7uA?OVLxW^GFSn6I8Gzp5Rt zT~_#i`fI=R2P%QaFM0mj$7wJBw+UM<&Es}!R3*RNEv2@7gO!vhhg5oO@BR^6mrw8& z3OM+c9uEaHQ1=b}uQPW;bRO?!RuY^o`~25`>+Apb-~O$y|JGNI%Uet)+PcIOkoPgW zp0?n9zk2+~KgZ|qveR4^R`lKX+lznuE4=D)Kc2KMGkd9SQ1uXcsZ)$-oqz3lR38m2m56%-8&$GIon7p z@qhSZ?=AiEAN~4ES19zo8XQwPL&Q%BbT!PQ<^B2h8!)}dVlRykC%R+iR7kL%+1|&* z*lxVHHC{_l;5PqFmJUAYEH|A^GFGor7A0yl_kNW#gE_`p%VJ^PYL)C(l{;=VPr~fo z>+8B0^olGzl5Vz##}m_V3TWCW#`8Nd+IgH{3BqHN)d&x1i+Qk*s)r6>@@T*#E$^_z zr(wbk_97KGz!L)mXt~5Hw3^}wSCExW^oi^NS|W{nEv6wmAvVSrR#Py524jl!i9iG` zM@H1*L3{@9z2t??qsdkwFa<5aSiD6RC55*!3rj}qR8|Re;$Y~0QzJvomI*$nQKTt` z@-z=sBjn-qw3eA7Rf0@msf1=3t7a$7YEPz5`B2GMyE;rF|IY(Ml-0&5QuQeLk{yM_ zS9{hrcpKNqNJ2Ze@IqRcbCX_?pMxuZwdm^RNA^eeyG{f4(c17TAa> z->($uGWnCK=5ME2quZ)MS~a+?RkF5ZztW5@8B1Ad<`R-=8FGL)n+;VWhwW;)))1jy zHcu^8^RkX;9LY)20ZmX>(_Yz7_!x4?kC0@841gDnWd@RQ*7)+H++^rO3ZdCn$o)k! z6=Dyp(v{ZlsDp#CgNj@1G=Jx_^v%l2`%nmcuiX-mBxy;kU}fNaQ(vubs6%f^=WYUd zq~;fAlO;`h019e*`I>64XFjpW@Fr+E-25T3E3-_ebf_5d*l8|7W+pc|3V~#La64aI z8;eia9p=V$165Lnm=vLwUlvISf5Q)3Wts^PJ?h;s749qBUeMHse99BLW*a3C~Ealpp>^)4;}fAtGz3aA(@mZrk*EJ#}~ zo0H)(yF9GL?638*!_La=FWHf`GCPc<%>HgKJ6xm8eg*Pb6CnQOW`Jn^B;-zmn5W$y zWYz;LjIFP_A=99B5Psf;&t-y9 zs$B5Yn?Gz-2)k(DdlVC^e4k*f@*4zWl^+m{ReqCTtnx!u+5DjrJFtIoJbe%J7OX*p zZ&}cA_M0&XA|Q@kjjCs=Em~$)#TGq7Ft(^u&NV!Q5sWQ*fnaRW8uJpps@m}~!RhAx zS2d0c7p!r??ZxQ|y*EDK4RnJ)pX^{;&ccmwJC zg&Nz^nFKb>7E<_aM7b2(3Wzhi^+fRh^mskV7KN`3Gm!;-%7j$cFvOG?8KpNxuTOYC z9Z!fnk|35mf}s+lQz?hJ;X>T&weeVJww#pBTi#3f|ET4Rfh2NKB48y{VW;60u*}}^VNMVUSNjjI5k!Nc z;Omybf^S*|3tmx%=6}|mL?#(?zVH=63{1t)hqZzQVZg5$91*GD#W6^RH)D_tSHQ_n zz^uInQaJoV_Wouwuj%OrNo`j0vIwD@8?dyS_q|&4XZzBIZTcIN(w&ND3=4E4?-{_w zTH+lhmk9h@HSNV@i~17+oG$94S(;?BumOH;jGN!C$(AdXxT@E;YT!zl{Y)`1n!&xb zyOy=HM++pEx0IjvMDJAfcJ+g^MWgaTeZvR5Z~TD!wkjVqHhjSQ#t+UHwaN#r4Il8n z@q-78{>lg8(P|I$7Td4ke>J-=;XjGab^J^KIZk!zp~Tlb5mj`k+hqq`2)-i-D9e?Y zMWXk??5*wxoK-Rc(S=#}i+9(3@m}Q%yLe1ccA)V^z)ykKvt%nS+Q}8-UqGk)1y%R7 zM}Fy1%$GvH>a)95lXiI27nbDtXkB&Ru2g4vRh>i7symo{urB{M%lzO2)>e-K1wLpz zip`ScZw@#@H-~t(hcCANkICkuM+qYBmM{?1wnIgHDwg>Hh-#4y$g80h_9-!{1*L5M z^?KTPk~ILW$57K&9+Kv5@%&GahgwbmvYTRg^+MUk(DatDrKuGD>= z$kM9bkup8syW@@OrUvl&SaQc1wTk1s}8=#tPNffcVhMk&DlXshuL`A&Js5E^h-z$>6_v(FVB4%TR%J?)1cI4~()bt^k=f{5u~UEzIDE!Ff%WJ~?H{MbHrP{q`*vFFfN$w-!YY@7FxIf9;8yro z%==MV>_o7#ShmRRZXK-M->KzuD)@smZ-F>EkHFhoDdWlW?Ua${`A+Kl8CO#FE_nY| z>Khv$rnHy$Z(;?gX+^6cfN3#qHf-NaF%BZ)t(0v72Kr$3VTuI-&$n?B<1yb#nYzTh zld?mw0(K?I{UTe;spVp1fp~($%f;{l9}yf{E`}B;k>L1pF%J8sTKe&JEr%q}!dOJ1_^*|TV*6CR``*fgQ{k;gOjP+-3U##FSaVD zAj|dzSJf@J78gS$;x%|GW{b|Uf}EC)nwXE-YiR`_Flw98!dq?BJVqL3Uy3FJo9+~i z$t9D1fps~i!;0pxyyk_{#>lI*OV%5{YgsggT9!zm3%17BmGxulj<#NCm72o_j+*;; z$mkW*75IJts<3gsLpwGysUV8sq5p!waHkk2|9Psi;bxe&bby=T03)=sQ*0ys9O-NT zQ1KZ;m~QD0g8;IUipGNv_)Z%Pd@)Qu)cnLvh`f#{ZiIZNh$G8tVViJDAE6B0x088m z$GJ^%RYMCZs-2+EHfj~!H_X}EDYh$k1rPDMeZpD^{_N3}H@avdLvg#C+7Fi{P7BU_ zM75r0!Sa9|!jJ8pVi(`d6Nl+*2lJI-4lG;yk6PR|wST+fwv%s`II<85mb#sqaBJpm z-@O`C)+BA8YY*7@d31y?*Ye$J@luL02=6b|@+rMPkq5G+x@U>lwOXF*`ARJ>D48X| za$0a*n6BjzF+X{O#v_n7zwgT#q1J!`$KxL|54O9dACjm8&K%KJ7Oa#hev9#G%D8mRRWtzR=Vz6w#RP(9m)>bWjd&qt`9??N@=lz^rRXq|xzlQuvAA9LGl+$g{!%ft>+7C%&PPAbj2jhtM@}b}E8*w@u;i6=%P( z0le?_!24bgyzg%SZzj62U;w6}4`F5vx<6ABjRk?x#TG_DIyFF46vk5@hG3EDd0bO; ziW!S~tO$yFp$4%pW}T}(AdwKd1uN}9Ms^wd>_BOP@zhQ}iyfJGZYM{+-7QWvCEx~Q zIGDakJmq3o5diG}mY|E?8XJUa@P zBIeDS%mr7tfEK>T`|CBe2xo$DGjZaUuFq&2pw1=Q0Qs(L@3ibSAM?kMKSum9?hlF5tSnq0 zmh7_)_6pE;3Jx5pkcc`Vs1+tG;1Ww|WSH=@9Ri&8!H|Erf>vMcR30;fTcHG?D>zLP z4N!NeD6$FWxXmMN3!jdysxkLUKHnoLXB+%i3~|~e6v1o6hMz3s0AsX#86}J5SC$Dr z_D1ruqbw2;B@C4>FmYsuSlI}C6N68T{Z?cx*r9+H<#AcCELxhRuwX&D+FE`f!H~S& z_m&9`-FH4i8nes^hF`mafSMdz0S|2;2=Rr-HH$5}|H-yYHOYBviT&B};!>OaS1@Y& z5fUK;qKa@jh@tX`;SniHLZlelZYI5^`Urwk!1NIC=D-{BGA+)tTw{+k32enL^62s; zoNd96+EFr&MXak>xFH(BuiU~c=P{2-_UME5>{nswe*C{qR2OCH4sPH4Xd0Mv3qPcb}iU+UPw45o4LRaFl=CLj<(aK~j<0X>?g8<%%Bu^I% zo=}N!DCnqAjwtb8avk+vf_W+?5J?sxpxr`r1=Y0BkCsmJ=pq=X_Z?>->yYfD9uxU? zkBNMosi%fcK+Oc7hOrR8=%~XQZ3f)VxipfA*<0*rMzQnT3X>j!eD7Wf+x-Pnsx7kC zBjOu?`AwnqXMxeIcyEN!ym)Vf(P4@9f{{;4p~TfNB8y-oYv(aU!|fPRu5dKO%mxH6 zrq4!reQOhVeb9r~H+%5kkdzXhg9;@ zTZPEaQYGduJG5O?S-r-gCmheXR+OI|XjKgPOg&zQA(=FBCT7@R`(pkv_g^Ei!#Q5p z+M#5JVslXgB;ApHtHm$Fg0^T>sN{Mip&UA{PChF4Qwq^3axs|n_>wIdSs4A0b5`CzHeH9zMA>CC<1y=>{ZP28&K|(gfW1O&@_?n zn^EP`$y@`qoaIcQ^?0SXtLf8(BaASm7!dg==6vOZML$rq@lqeqc5IVuHEi5iry#`G zr7$tsi?y(eGHz0jK%;{ZQX<*p4Lc;}SOF*s;-V0tM|Z}F^bIQm+5*)ut^t!wBz)Gm zXbMn}<^I1)V##>Wcif!h0Uwp31UPia^66pYCx$!F{>? zlp;2YIKJ)Zz2Vx452VFf_2C23Bn$&ri)f)w;T_e=gi9BaIe>W+l>_L-QO^}%2E%o* zXpKV};vBI$2g=we&0wW*L2W`TXZ`p^eo~sP9VZ-}@Wreyz94Mk`I4}Q=URq+Hhni@MlOSwUCY`ATf(%iVTPR@ymnjds%aIu%Gp zw#L#TjnmcbL`D5cEwr|=R}#+)r?3UPZk$~UU-JqXa<*1|Ns~Bd1jc(JjBSwvjOih@ zJDz|brnv$)G@6DLsNOVgBRz~jJ7s3M8glIhFxX^eSY7wU_#lm|Bz@O3j2KteVrSUN zoFf%nGHs2ai}Fx}+u1!2A%cnGrf-MHBVwN-b}E8JOK%j-u$Ez@FkjtN262+r7T)-b z#@RqJjPiDBRkxL&3q1eZiA-$``n9SKa|YRV#7fFlX}5&}f<<^TD(`aj3A zfY@murRQW}-1RIpi(_pkV^&tS!~f|l-{HkM#elvV{ju30IEe;M%#WWAlVei5IJwohn;$8gQ0)E=(wRG*nA)_3L! zMGHQf&pf~^hywvAl%dx!;54N`!{G@55(<$6gfx)0OeMV67MFAnEEDcPj(nYIx>v(L zqgJ9t!c?a{XmJf93Z=Cqqm{mRlRF^kk;rpKo3(rI>JiRFvo-!;{WgC(3@(o483JQju z%fdqF15dUU(bfEWz{5YP;vvQ_M)q{P6LAbNOs564eqbH(Y~k7w?UPGBWU7okSB#kq zNLG{lY%ndcV)3d%&|EC5D86IA$Mjb$=NPOH?N`=c^0HfRzh}h4cGg{;o|zE$4GD4f zaqea0rHC3>IlWy&ZEjk1@ZxdbUpg73RRmMpZ#q%FOV}pcV)>55icy0Wh8F*XPpeaC zousj{Id+rLR(BGfftw>v3$4o0NoQf zo{+d^{j?uNJ+7aJ?G<5^@M9h>=B8HS&e_JD1JFhR9sz~Pg=T)b86p7 zYe=|ebtl0DRCW@KJhPL4V4x)}YgsLDrB~&fpf^b*65W~Y66$OpOFLn_OJdP>msQAn zso}Q5Ux7lv9JZJ;m+w#d_Uj2>z%Ax2u~n$(hOMJGs3y5Cb~W-Rx*GYD zQ6tX=hv76sZllAH+t5?6P+iqn87GB9!UBe0SO78vy@_{l{<_2h)OVsArcDzT;L}FD z#gt(s7Fc~?fz<~VXmO7W2|tdC5tS)a0CR)|T1J*-Iu;n_nOJi*768U_01XX5tvJN8 z&(-Q-6FgYzEgodst6ai_H~{71VJR+Bu8j&lp7e}yy{w+`To#`56r_>ACC4OA$l#jY z5$}yPkhu1wUY0IYQ+af`*y@AXS}s`rC7Vp+ax58JO=G^)0P>jzkZ&}A)hVZGT%EQW z!0Hq%2e3DAUFyLhbDb$n!J5LV#-{L@ z|4^ndU@Ql2!xWZz{57VqOzY!BU%U1ce&JJ1;a5bQ7*}=;Z3@2}r|@h4{}hHMUw;ZS zfY+G9pM3yJOo&tX`U8kDA%Yn+S|j*woWSp_o4`nG8)op^aRy&mKZD=u&ESD56F%=# z_ngnLv-#NdneZoVi^CdB@;nb=u&H{ku&Ik^0PAB8BSIL_J3s|eKy(G_vZ21C|l0Q=K& z<7$~MRQJl%RIZk}=>T41Du4C?EHUBH;!_SF+*p4o-xeO>l*Z_IlCA$w7V1~az94qk zd_tjFwE2XOQ=z|2CyAX7mvTaB+d+`&O{us8ycqBI)`%mhTWCxqjr=3J>=+P+=h(A3&`Z7IYgiI-r zRjhBb_Q$AXYOL@1sr_Ygl)EXde`hASx)|1sYHjzZ;dFMGr3&WPQvArgc17|JzAVr! zXzt-*7h?y>NoGxJwzU&3X|cg#vxSWn%#u~Y^Ek~ci@-BwEMl-*1j{MpcL1$r6?7$Q zuVp$O4u!eMX7PXC{Cj=r=#v4@u=4Q1LmoaTcNSroM?}AQswYhfZ#2l-8R%2$G>%R5 z$`v|#ZQ&#dt7%!cTidk3VDAlAL`*u-*D^`YGiWWJ%fAQuI&*g8D*_o#^KNNoiXy*K z&7yKSLZUG&bC`jUKnm$Lkm9ff zKsi+J_DOvLsFEzG8XbvHT@X}>k5D~qP~|;B^{7FW_XyQvB~-~<}vau8Z+ zn?e=0em4%P>2;whlk`u7YV+6o)A1+mEQO!Rv+KPKAz8_=byM_rH*bo8uR$Hz4r<^9 zN>A>@K_9N6Z1}+o5U`iK@wH;qvf-uXIajG$kzeM>87!X@d)i&%W4XeBW`UCooaqVJ zb3iG^W|a`44|1pv*<8|OwKB|EH7N3B3L3Rz9;}R=?b8iTF)Rl^B=NwMHYSG3EOH{y z&)IbfNfIt__Ol?8(T2b`nqzL9`s88`GJzUQ`7!^MgB#8w=nGE&q}gI^(R2Xl(eN;| zVyZL&0u`N@BGD`lh$cqLykcy{dr(Z=x8uM4&4v3%z)y7SkQX8Rc+@wpP%U4rXe8vB z3{Uv-Oy-k@qSRW7=5Qll;btlTe)&bBEFfGSf#l$Y&M*vg)GeEDY*N(AubMalp_F?% zt>4}ywS27F+&RQpod>}*#GLxz*2gRLZqX&}jmY3|APx!$;2y&8$`txJAtP+S6BlcH zzFcH{v=u;G0q}D;-6Jx=EkeIlVm-RTEl=Ye4%<*GlYWdMD2g*A>R4SRG9DdSp9!w| z9=8*gEX=WFQ7B~=MS}Xs0s%i!cn7BG^QA; zY~_AX7iN{fczD!VPx5G(%7k-JcqeevBMqFNepn#nhaZj+YA*ZUIZo}(F}z!skXPiE zjH0RJlIUSs*zI)FCEm0(4uc6P`c;!KKq46k44Q$!5CXEv={P~qT-S`#WTCx$Bmo@C zMt3BC50*Rb198XQk~kh2GXdulTrbp9p5Bkj%*u5|mvq~>05ln$7P^eiXGHxfvq{X2YXgD@41u>?+&wG5(yfPpmg{HVA}6C8RWp5*xvZDamp-Tc%Ha4;Yf zZzZ?HK(nFfGZ4ufz(CX+R)=od^_8&dStpQWurkTSVCCvXKbt1o1Q;QC zd;|pLwl(z}a9Pnt!d_+D& z_i=#msjyGy7a50mqRw{xbz%<2i10!PXaBMf7=4#x#W#;O|jnMd7 zFL-+4G>q)gro!%3+wl=qfGDj}JB6cCWy_|R2W{BlcIip1Wrt1`Xx?IF`-%u z_f>0Qg=(!uDvd}ets+sR#Mahn7_54y>+|LFa8fH7tanx0G2V9)B+?eJM^%bi%gHQn zt=MhcQMT5~H6pE*A%nFRA>LYBFI!s=2MlFtv0N76>(pBeRZ@#td8x%jDve0Bn8@`l zhOWyBn;N{uSlR4?BX?U2bDk8Q2)>k}7Ms0*;7f68F~0niKEeB#T8#aa-a+kZiqeic>{eLt=EV9r_}W#@G1@HUg5wi-K>ca7M0IIYP?W0CEs9r-P@O zPjGsC{UHPCh-#njq1Mg*l2w6b@V&51J0XgBc1WkhKY^3eScEWxf)i?stim4qk!Ve> zuLOPE1D1t?d|-_8H7iHZCQ?A=8i!M*6>J?d04)DFW;NvtxF7_n=#6}nTljC^XVj?VR9fc2xG;V@u+SK3Z~wVg<{eJ11_)(ORGZ0-8a z^e`I|FD)g9J7i~5sr%Em*bMBuV}vx;YhUaEi`^0upVZyFE)owne>- zgnH(VeaKlsG60G*WU$@7hh$7*jd)OImbQy@UUp5^z)M&J+KLz*B`k&Irw-V`RUn*_ zOzjxxNz&L>lL?chNh`2bIao=bAk8eB%wTguUyzp^q%D#L%T`r%MXk`WRjv8eNQmWW zNd=smMcS3?h`nYjkT96cey*KlmF?EyL}Ww^!P(r(iikQ9a%XMpK`ksOUfKq1W{^1E zWf^9m7POkeV^yLla=zHt;Cx^Lpsgk&KuVtg%me~C=#;;36=_RQX>*^;JfC*Ugd7#2; z9qENf!xp4E)Zbi=%Y)^ZvfPB&>sprK`-?t5-`}Uz^iVGM<5reF6LJXN(UzoQ$ri0Y zWXT4{5V(2h+!T+YI4l}HPV{RjPHn<=YPTHhQ?neBSd8CSpY$dUpzUFPYpLD8-ko8; zEjrX60A|vzmf-5D(+c(0%ORwKHR^sqKX|Bhoa=D#L|{6DBgtNQ+6XDD7i5nvIgr~t zXhN;^Z9Mwap&0THvowh{t_Vu~aB? zi_>vrZsoI7NrnZjBQJAAs#cqv`QY}Gdeu&Tf zZqw;s>AXdM|6lgrKFqG`EbQHTpEEOO=8U8xX)KK;+1}?^NhU^))gl}L4xVi(iIWJ> zeXh8VpEfb3_0yY<+&*>?xxV*0(Ijz*!J^ob42By(7(+~Oc^pVdz)q|bXr0!ffhLe9 zZgC;KO)r6%BtT3;a(};f?S1CVheir<`Ug++arWM8uf0Cr^{#ilU+Z1Y)TBRv=w1r5 zpyEIjB2c7c~B~cNfth#j0`ubN%L$^d4i0(7cKJ8nv*CmqoA?79&ammlS)f2^S%0JibWMvXB(-KtsHi5 z#(ZwArV!K~kg-_+T9O1}T}nEjMT|G2U8{AZIV{9X%E2qPzgkpC04YaorE}xuC3McC zxKAR`uv_xpI%0^CYBbGIX>q)>Phs!n7=ajF}Z#UB?o^|)Gr;l44W3tfg$rFJG z40uc&BRfzvoK`WHSjEjUGIiu(SeA8WU5@@t z9kc;pAQKA=TrshjI=bP+#Nte-6%&i8quM>racJhsr8Iark47iX$b16X(W`&;69?Wc z@i8DI-dGgT%nQUp@vNB_@Oi`OGdjgO%cqzJy@z@aniDe!C<93CR`MB44CVLX4DuYT z%fwiZFk6}vF{hS-hHoQJa3vf&=S+<06%%S%Wy85crh4vZ>TvF4F?XixxdZQMLCfY& z7IPa>xf5sCZ$W-LS;|QQ zD8v#AvrDvHnO%NlcH=D=$>U-29N<9YvgAT!^o`N57 zrJx2i=A`qMZ&WU*dx>2@7(0v@4(Pzy`dSPFx3ZdbRy^%QdJc2h5A*htvn z4s!GCeM(XFiOY9Q+;_> zvg}llVbza*-^AYW1f^RByRkLQ@g@DfnZP0a7p51lbszdfxto4n!AHFKCSF`>zf9Z1 zyUS1aJ$;0trcC1v8_)YMikkaZF>Lvj1Qli6Mj1_$^-HeuqZ=o(yj8Tv#tGVln2$k` zQxqL5q;{?t8bd*VyIu?^>0#jHd2@-%+c6)^01onU$7Jv*0}ir8jS&wAc}Ti0-oRlp zB`yYvJj~VE;$e54Egs5JJe)tuPq{$Y&o51+AHsg4+!gC;AH_>*=>YBau1LO-6X;<~ zaN&kMgsSo)A@Q!w6WKH;KhsPcrlN~DQbiXZth@Ng`d!4J7e03*T~sqeM^YDMREAyL zGTKE^iZ`i?obBMl*V@GmO&2#T?;>IW&BT!;x`=~Gbn$H6#V6PA;qD`}*Q@@2y= z#^E^4C^~a^lSYvf36{FJ?YZe&N_)LBW&WO5rqbW{3jTew zSMYD2SMcv!yfSE4du7mG?3F>|kd_E`72(mrPnhWlp%YV(axY5|=$Fi%G!^^9sVF=D zt->I%c9&YU!MEAF7~)Gb2&So80yr~&J0K$)$C7dC0{q)xrXF}!#>nszph|`poaDSB zA{rU+BO!y8B5n-&C3QS6{1rqC3pN=wGe@1V1vbqAi!=GMI2o<95Zm9UtwapzpX4|^ zo7RaEoMHpwZ_LN%ZPG5I6{KBua!|#$j8FNkC7<=rY67F+tgB` z3XGMhfdm$?cb4#ww`H{JL2px&&g3H58uV_7@-5x1qJb|i_t&Jayn2KNI(sgW20D9^ z-7nsj`^s-=@_+M4ehJDh^Gi_D?v<4P@0EYQ$-j3bzchApO=Abe2$hY#APVD6vLcl} zKF!2hnH-7H{Z(&1Om@s&Ykg$mSoO$SuS^`P&aCyy#Ied^SJf5E&6;oQ%$kijR|B42 zvjNyQICYRYJi!vpDtblvO{Z8yJ1*h7%01GapK#D}n3j&jN42jkE1T3D(nsxlk#z2M!-LZ_Q zqk~|39*o^C4Qr@1iTu#m=q3O|Qc?ZG=D33f04jBAg^`-R)JIy12#s zppA%;Km+dE2Qt#|ldy3cxZw##ud5n^>(nV^N)O$FTMNG>ULY~ST0z@mOBX6X0c7W+ z?+P4rEy82oJ4p6LH>25BSU>zEFj~r%asj@=W)au`icjZ!%k@*CLXP&vk7YvJ%7#4!NhB5*)(1XH@>c(k-g2ApgoBwg{-E8-^2>V zsJn)W259db@pe^5Dv*c#F9sFHJ|4Y6?ch-gYSiKemz<^Uu)$Hci{!~+gV}c*K|I6Z zBaPSm>ARQra}ienV;)2*sKG>J1NuYt7ty5eeQDjd8T!T; z)%)aW7=$(;t$6?~a__HVvv0c^dp+}pPWEmaw5s;&UxsLNd3ibd7p5QzkV|z9lFL?? z3CkT}p(aTIO`}HgASIHHhyluuX}h_h97EgKI?UyBKlG7jAN}bM{3Iv;T+gGy>+kaC z_={WfDf9l6d2jvpk(8O0GcwnYrQ?J?965~vh;H?XD4BMAN1*2w9n9>YI^Me5Qq~^v zp#enfd-kZSn1Oc|y)OiZ(?Tb+l)GH0bCYK9Cze8_W@U6#b1|B|X9I#uZHXPhsVzgK zK2s>9`@uuraebIDC-Cuir2lVv^BuJhR1CQp2wu0$&2?r$D+_ev-|x|e@20jg+H zD<{D7qW9O~Qqjz-2Ma~Y)P&Rk>@~}?oQWzQj9=Pm_Vu#Rg(i!v;Tk}zLF_!IFLwoq zAyO^n=G6m2nqes5XaI49lL-*>*|R8-#}L_7BL77T5x%DgKff^8hy>5E-a1oo@lbFs z9pu+(6XDQJB$$_pFi$GZP%e5=3gc!L2Qf%i3r(o6XOV<4x$b~F*)N}`7gIs}vuN00 z7s>k~xqaI6U@jpUr;AHT-b*r`Nl{V@x}hjwO8UOQnL&2Xl=NxNjFQtM(s1ZiIEhfT z31(&%o0f)kQ) zoO6R*$)f{#F^90j%fKkF=6z<$i<l^cTg7+bRhwll|QHSC;(sVS2pWXr(u;K-2 zY6O<2rY6abzOLUX zjuVhuk`lZ3aW-PiChcgKdVy0i@qQbd}E-Fl|s1Qpr)`Q+hcCbXJ5sDex)zkGP}v0cHYqDf5l2^@(!fqz!)P>!Do~QtLYqhI0YK7}1V*GrYs^Lp(Cs za~iZ%P^j#S?}la)B4l|qJnPR%o2Xch*sGsE^gK$y>%^nu*@{3}G}9x5lBJQ#c%p1g zTXI@CbP`Sr7j_$#T*IZ}@p^Z>j?RRmezc16VlRt4m~buv&afJQDuFtJabH0YhYJPu z{^g+FyByTltN``C8q}UVeJ)U=5IrZTQKp^~)O+IH*8|iCL1k1!>p&Zn<@GtCO&rY8 zS??i_<>o{Y_B0d$Hq25Av+~bVov?c6&S(ZIF5P#v8{S~=(ScJ4FN+xlj?1(Xp$tDx z{f=gA=hd!T23r^4^~o^n9=ts)ec@t@)>TG*OJY*eSsH=1@M|tf@J1Xv zf;zeXLFz?$EEv@FQ}Is^=uXtH3wABX2d~VIRFxy-ki;e6LDtZv^2Cr zJDc4UG=??PZ6~LAa!<*~Y=-lIZ;mpoCT$R)j6b?UtjEr$CEGSv_FB3C&^~*ree&0(E zc9zRD>@1f~!u6RxR=lu>l)^nkl^GmZ97H>YpOa+Ro*C*8?B{lOqN?El&f{Eq)Vn>H z!9D3&P0q=FG9)^OIB|8o78B^q7KfA8Z2$7q;+T5VP|#>`_)yR2+D@(4_o2)Bc|9*k ziWBwuKsgTKP}4}SF#HFrteqS7gxve|8$}YqF-)er?cM%}_Qh(#{odsLnXrnoWOQ|~ zcP#)CgBdnc9tHP`ODe@35s0^xav~l8$Tq(TN3c%CcHs z_-^6>>5Gl=O>!X;fpC4WZ1l!kF%lUhoY7$d>5@X!Zr_FbgYR@v@tw%H)#NyqVJ5!Q zuf=yF@rZZIMd;mjm%DLVqWS3zSp*W=)W%GM{Yjsv66apM-I5oFN*2;|4RH;G0Wfmt zNvtnyidtHqRf1!&!iCBR=gzQ6{g+PSmWuHv`R`(Hr@!HE6E*7WPQkHUQzEgc`GoJI ztcX{S7TK~aMxSU0ai$yqKnmF`DD{+6^bP-)-|XtG-ntiGA0+|AZTeu*N(yzA)Vt(%A1kiIrR&)Dv*y)jx*c) z&i1FX71Q0&iAD7Uze^LI1Sz`n=8*I}CVD(x&tvfh2`8&oPz-&`({t;pyj_i>eBHqZ z>;oB+hPUUN&CW)6WQ@)XV0K$4Z}%iocXwJQf;`OW$Qe|s zCQHsyW_C@K;2JW>1Wp`qM ziWXh22jIoVY@hYOgEntK_Z{Sk*J#yYXYqO~Qd?@*pCISjX$CINp?3Bd1HcnorD)U` zoy5g5h{`5Z@$`zrN2~zbzm@60sox=|4#6o<%NA>acn()$Ks_!sm@4}*X*khBt;6MJ z-kdV;XBveSg~B9>F1XB3SOx`ueJVOBZI9`mTrIGY{q?s?W!K4S5VIkji`oZ2(Um*!MHI;T*O=C0E$%k`8}XWAqU zv3Or%9``2ZaX)&xG}G+MQtE;>~O$H~9un&lovwi6t692SZ#L9T2ol&F~q7fHzSG0RbH3W_(($2CvNzq`1hV1(_h*#aUUd(%(;EOrv6Ozigt`4>z_bIIe zrfeYu)%}GnoowGBV6Q1DQIj8IM84q=_NTz(CTc!BZG}lvWyKl~yfh~`` zHClHPln|EKqNcDkY+K<;xkbnuL%!4%f%9Y4d?&b3t0f>w#VNXLy+|W)cbl2Iv9`lB zgBRQ{9s)(Rd--BW;YG!ZQ4t4>oLQ2`TEUdhC1%mh08)KKAMuvOgs0sub_vX zp545w^#>-0ki_Q{s?_1Tp;NueV5FUzIpGbGnbJ_L%%BQ9^+(96QxRd$bwQH=g%IZw44GDliG(a2lDu1i5T?l;oG( zP<2>_=N7c!P~r539IfCygvPAUi00F%O{Lc_ReDWSddfz+9y-el)pFY6fNxJ7>SR`({nHN5-TAtd zgXh(iP9J3}zY5dkMg3l@Xr(D$3%CJ4VCk{f!QY0cyNu~@KH$uK(Kv015jK^F|f z_8`D=nPX0K*$o|FRLZp8?n=z9yBp{jL$feogk8VT`YFo7vG7RL6CY<3MtF3kc=FE5gww}X)>KD6~P872BwJnC{@y8OIZ;iC?&o7^DU-Ld#Z*G1DY6J}8#&zqq?`3FkC5c=wwR$Y)ZBHBLV`R&y&+?QAXjhPG)adq@7HpHgs z3PDYaY#indQS}Kr8r$r6df;L5mMNLFzxv2Cb^V=%-Y;ED!e~3n>N5|n(~iIVN>=@M zI=HMIb(QvwnrE>e2ZQuq^91ImzPVzCNE7^y5CeSWpv{o?C@_r^SvqTEA!^@IAaZnN z-svcGdW|oZ6*>gFQA21y#y`${u_sG+GX&R%TwGlc!hu$hZ-`K9Hnh7t4vFvm{KfqS zigX8x8xW#|=+I}{`Iy$Er|zBvIvSRuXsf256?u2cBIPgb#y)7?_H5vc8&Y8xuguES zPT+QBcGyLWNI>z*A`W5My1F3T2g{m&qxhMD$Yb+amdM1gI02}@r*^+6xVbXxL|ME9 zlWf)WKtk%=f>3f{-D;4dmBwi}2xJ5k(|{FhzievmSw!z|QN0BYq#0IEdzM!pOE~!7 z;DD>?X!TXr#~}+%y=Jeh-);#Ao?(DO**YfLtpO9EubftcWff5P4#jreD%5^9t{4H! z*b1-@`uKDMHf@pfUDt$@pSC|b@oGHd6jKZzQ&TJ(DkHjJ*ptk7tu zTZ=}gG5`3l6V|VHmf#xJX!#4y8B7PRn@s5*6ELd9M~FARh1?K}iZS2;%Qgjbp1sR1 z18Vj+B&TczsdC^md08WU!PnXP#Rkpj(E`qE0ZdyKom5LPt_OxCh)_xZ~ z=968t#X4-nTv67Q_}B?GGOZqk(Kw`N1aajiL2mv@+e2^(b^=RAtm@@t_ZO737>}=& zZK&B7V6v>JyL;8oy?@#KZb)OAgunB{dG!b2Y*5;m;SOt2br-7JZ(}`eA7x~UqYg5; zyg=buF O;%dHw@6MzRh%|gTJk^@yH9y-u;T(gaCk(c#ax^V${pmO+x<{05zCt5 zP%J}}%D3w^mPO|}lo33DWktJUv2aGx;?gFqzxq3IhO1w`x)Sg~AW;l>K(Crw28D}~ z>rn==S^nXW1;E?hF&$ZaXUSxzjI$y@G1OM3Y zdJnJ5>phToJ%<8#=fQiqR0O)oi1CJpP4G+2fVE&%fc;oXsp-#P9LUKrf>gm;@toMB zAYxcT64o+wGIgLfbYp}siG_0K%89gmp>!gB1x#O>NQ8WoVM#NI833G@ztyXuj%c6eJ9^?X&Z7OoBC}H+20K8*&YC`Rc`5>EAgtYa0*6nU0m-*}(xPZEZXQp{Sq~9yKzN?*-tM_zbhj{g# zeqStD<8RE$jn{Q1TkWZAYHBLyzkiB!8U9WT@7BH6C?p+*zp3e0-d(O1*n`GUZteap>f$ecW^5WY_AA4A7umvHOlK z$o2IVMA5t&uX!?+?f5_?1s`C4h25(jdWuF=5W3#eto2|fBd|*<=gsWPjylY=I;+m; z=FdPY#zy76A7cj$Ock@S#p=onQc@REi|N@kAAV|r9=4d!jup?hyNShdW+nN`sXuwD z^{Vtt1kLLBD-oNjFWo;`?E-PC<1QWfdk$v&S-kT_)z6hhddTK~bpC-ey%Hv_I!<{u z(1uNCT|r#k)6r`6g(6E##&|FpVB_o3mXxvTG@&zTg=}P6&_TVRA22}G*?T4z7Ou=9 z{4OkIorMY4>FeDkaTt)ghkK&r&zV&9UjOa+i%f{SE98k%Zf+v??v%S6=6?P#_kd_X ztiH2VVfh~7HI9|KItv&+k{I#gSas&J9oZ^95F??SJoF6-9PE^p0G(S;r zZ=rf>jjRx-g5epzD(^5HT&B`xI$bta*~=Bu2rYX5B%mpamk~vCta_7htTIB!p&bSE zs1N}E)gLV5W6{$F)lYovC$6fl3>H5vLg<}=|M0!BF{%~@ zND42H4w%&t&JGyMNP&xYGADzWq59zw^22TfFVNTO&c8wuA$D-};9sce8{zIJs%Nqg z=RW?Xy!ton{EYfs1N-6AF^x)GwRX~l*OAoQ`g^?)6BxnveT%Q!9`0sejFAH??Sahg zltvaqAFKnHzCpStrA?nx1VHgaP4k*}u;0dA$(@15RBs#qhnkJ+L(N>QnTs`Z-g2s$ zXKKElZsGn(Oge5JvEd}ra>LuP@ zOU_dfm}Te$rJIJqfHVOn*E2)z8Dc3+0l0HgA;m|-qBVR_M~>Z1#e}d=UKQkuR`I$H z)#@?;Cm@I!LqY6N0%9)b2QisOLCoVQh$bf&kUsH&Wd{zn} z89F>DG#I?P^wK(9PC5(0VR?d^VUfBAKJ?_1*DzggpfsqWe4AwMvCnoODmCT0W%G14 zfC?Q#^#Xr|wK)ikRzXD^RS=1%>KE`ouF#{-4agDac5XO4n)AqdIggCyykWhZH;m?d^?Es9J(}~T^>W^n zWCTQu!&l`u%WU)m!dL^sE9K@jK7MId%$I6H=s#oWVs~?y!yDWjI*HLl)=n0*n?nrK zQzorC;e|4v>Y*5zyIOix5#;z#gd?4#*a$+EQk#4|@^#xn9E|nMfMoWt&*t9D4qW4A%?nLJjRV2zatC5C zH>S7)k;R*>UTShJxqo+Z$>)B0*24M0^)a#ADYosd}#` zPP)4Juusp4IOW!-{kl~|Tuq{5vKA5+ALzw~`#4aQqi&%zP)GbpBu7NlG|2DG{aikt zK<#A~UqNo-^L+&I-06k@?62ts&V@TYe06suu-4)`va>m@i;Nwn4zFc%h`-4I0*#Ao zZmcX=d$+iF3@&m*v4^hA=!Fb@)3_UPXcepU&1HQElJ8z(3t_RS3)$*%%@zVc5T+=E zm4zd2n?klGBefx-d1oO27raOz8M10~^izWWY9rL3hrgn@i9k)&#VUZ&+1-YZD3-U| z`l!sv!0W@*$mPgj>eaI4sxh_Hlo@VttYwDj<@F7NDZy<5XrAE3!wCG9H|DZPcM}(KLTbzjZL;EM z%4~3k?JKjJg(iwu+YK1+v2bpI<7u=uI^<4O7c)VSPTtNt+jYV#P5r;GF7AjToh7fX z3S{^S@$01`Tu$utFOA!NpYXsgw8i32pY}R>+5F_oJ-v);F`V~@ysv7TWKt-es6QLF|g*>vzlN3TWvEOVe-X` zM5Mz!du3MT{j8X$LipVCZ4AVBhZUVwyK%jU#xd>msL6*d{90Wvp3724x=zPyXh+xU zZJf^qe9H{&TKCLa=v^)LA>k?Z1^KaNo~${p&pNnn<%)f&a>c$> zxnf_ce5KeI=dsNu>Cc_{FbOkB`kPJCUk~Z87WK4vP9p`f zAxvQ;wi!h9XDBIAK*N12)?S*&l1hV+|~N3@ik0_3k9q|w2Ie?qkO$m?AshenWVq-gIJ^(0WpuGAm(uyh6tk|cA z+*%-3>^m2T75mNwV#U6%4~P}})&a3%-#Q@vYQ?_0Bn&Eso=`)?OoFAq?%B6~Wbt2p z@i!kl8)Dxw+3u0Q>aZ!Irl=P#+s(%(hvBf+79uEeeIeq{Juea2@DVHm`gOB}%4)@B zf086t$rQ#lE09lc1YnjY!NN%lvn<0OTYK)zlYVP4htR-YL{QrZuRjaIDp4d(Mv20` z-$RLFsSwz7c?MoxPkU1KgWRR;^NDcawoM-DXtINUf*IOMx~I6v9ztwf3U%JIM9vVP26i6#&R zHndu|vnekU-kv8ab%)#TBpaFBa8YhQu^%?ED7SIFo$Ezhk8z#hdMi|q)*%KZ$}&11 zLQ4fTk|!rRNv+ZfnIU3{K(ZiLTZEB1B1xmFA@|+|{W9QCD3_ujkINAb_0A5+E8-Kc zB`Z#9Nlom149bW(vfA&+FO7ept!JV_q3Qm&0*P^WPAL4BI1wa!E=idNGN2G;JO`Er zDHP%z&s`irLzl#Z7)oS<;rFxY`(1n=G#+}_d>`KR@jWq8>hH0n>_>{{a!nu9Gg4ww zd!!>mKkspITSa>J_UXay*%kc2@ygYtgH5g|<{3JuUCCAghMBvANlw}g$sTM#BjPr( zIL2TO-5n7$O*u5cpC5;3R^>r&X~dCmPqs=GjA}aH~167EpJpS)+M#5ha=cXwwm?a4{$gH{u>7qOdCd@ zDFiptgX`&WT#17(J{vYt)bg%_e)&Wji$o5UQR|Bnt~XB2VVE=@oR5H0D&Jmk(3D8O@nb%1oj9;1;Gb* zvJE$;&s01_NOR)|*()WR)P)UnL2jT!lW8wg);pJXqp+jFP>EMg_Oal{=}QcY1j&uR zL>WLC7bk#KvS<@KlLG{Lo*^Eqp=gfdcslml%_loI$|B`HkA4H9W8(aX_(yRmWkl{9 zk)!@-a}%zmW`K#T9t`l`N{)ihufw%G7p0AeCb`o%w4uwTvOl^&sf@LFL@JBM4W+WC zzhA3V_FR@a(sk)q8oTKF=g(_5d&hrTM}GRjzgMjzKb^;J_U82js5=*N(3U-VC9TW~`Zw^@;_i7NBaonaZlhZWgvOr*9CWBtUg*0ZO`&>}FEjBtW4m zTqQsSi5%L^n4nF~(8nbKsxuS zp&OC_6-FKQ(a>5dlIcmz5!~HM0qVK4n*|H848$Nw17ZcJbAfnhH(LY5Nq}O-Sp&o? z1gPf_#6!E;+8`d<&DI9-S1Uk0@i(;q^=Wl2?B+r&WqnNMGaYPTmq!IE`TXnN`O$a& z#XCOw&X2zF#j@^N*I?w;&dS__crc1G{8I;}{^0U!h}U!Ar8>aM=VE%;AUcPW&4arm$q2&T4aq9P9g6a4Gl!lWUaHJrSlmoRxbA`2 zx?>rb8DCgn`gAxbboS~H%Sh|JIAk*JIxki;zp6L$=Mi)nru7BgAKdty3%cQjfS?;P z&Y}V@!b1qU*pXNYAS}srrpjJH7ljXZFj*tgGKIi6*4Y(w;abV0pqsKU7jy}!uw2mH zk_25W8B73K#8rYWY&ivr_o?Vrf-cgrf-aPZe244;f^KwfJwdl;#;;M(E!Z7=Wp+&M zKYqsSJ*dV(P9#d=%3VQE___I}L2GAMIZh6~ak6kSH)^9pU0@4-w6aWK~@8^&I47l}wB% zoQF(|XI$atm(Pab!*FCV^0CYgWm-?o0g`3l07WVjBg=7@WMZY`S|%obhnN%Jcalu( zsgNNP_eN#n=6hx0_`aBrILy=&8i^t7QiNavn36G#dpfGoLxOll!J(ePm69j48`@Vl zvZ^X15%+W}D`M`C_XQ{72zOLANcrq%CVWn^EQXMToh%V3WF=X5mW%JQ7UTPI znNN`h4kBA4%BB6ce1O$g;i}|PugVN_vciUx8XQhzehnr9EKzKv$RnxbL#bo~;%L?- zE&u|)RB^Px{npbUBL!#_uDOyZaBm!Tu6?$0DWcyuH2qFTo1@j5=NkbcrO2zzuM3)9 zp8_9mpw)FAXtjAf1%7jY*OSd-f*nqe2&Fr4Sn*_YcBC{$)^V+`4g_7Y33SN{`x{_* znVW+xC*tcgU`XM0(KSLaUK>wopkw~58ln@b*tDgi_L!*$>V#JFY}r_aZp}f8Av16z zpJA)_h+D^s4@xef#CLiE%2}T4iOjT5V-=u}DLWjiD7lVWbO@&hEWy$bh^S*VTA*V! zTA*V!THvy=N^{}H0M{TLJaS_iF_7$UH)3g4T=EBM)w!4;>iBBGo4tiy{gUC(`n!N6IOV z6p3>kB6Jd&*!E9gDo)=!&FS0vkJvEmH+ZJ&RKgD$Fvzaqad;o--e|xgnE*}!j79?% zi9~OMEP5*LCIk{Aqgg$T;NY^P!zv?=nIw~PIjc85*yJH)n5rhD6&ZT2i`8@85?Z6A z=RyNS3z1kaMoDzBIxR?vN1UMXQbL02ZaE3oa`=*`v_&l6T_*w6CB&IeI;5oG0;p=Z zP;|{$$F24o)mBH<)+Ea1^>cpsOYne7{##0x!mRm!$Ma*CIbew}p zZjMQ2aARM)(?iXuK+;&n2{@y#<&x6_j~qU-((i!)nPwvB z87=0f@qhqg9&}2Iv*#rCP4D+uXpNmFMIb`#VZm(lQf{@#e*`+R0CVceaCc{M1 z$SUdfq}6ySQe5ZcYvio?H@$fWq;@3B&5;F{{$bd6vyA#sd}hgqBI$0h8HMiVZ>9Si zQCa0QWG!voXD&or_acTi{8`F#`8M|SZ3GnBwz|XYgs#bxO`wLzp3PZ6GK=itIawH8 z1rcyW7Z_?Q7pd^jX!`%P>H?q3Qbzzwe}==IWsT-GDr1%VT1F4e?K9`~%=q=+Uq`ce z=T+4@n#J`!Gv2hGV)350){4ak-@*+hp5d1B3G7zuJLK1j#bB?$;hFIb&x~()W+(=; zZin%Bg<|nJbbk4t>zVP`n`;X3gzFfKU?`@lPyEb-Z)Qs)MtP;hMVN~4>u-e$(c8sm zzVemFzY?As#dYNV^8fRPXMgy^D6>>Ve&{ED_0N9wi@*8FYhSDyM(=(!D)=xiet~V7 zH!asHKC(CoDXK~Hg=-auZv3m(uD$iz6_FBDlZG3=A<;dagJo{D8~*{9|3;GcjeMMH_ zt%0G`WVDxf`hyv|`Y-C|ydpWNQTc3*YUfkY6t%Xa4hXTn{_>ITbEChkcL3CGHnG-? zs4xkvt+aiYjxH-V05n=mOk(ieOq>xdCgmW9$l&todLEXvm?`^mEoL}(80e9&&aJql zA$am28i-e@v?zMH785;)ic9jH8G7v?C6Lc}E_iA?Tv)neLpx&LF=f45Z|duzUg}Z6 zm-pvMk;bXcp=h|r^MXl#JNjIQm|L`|f;X>KA?Nk`8P#!)ZhumxIjZ9f;}1H{+C?bzkt&rM^`tsZ8k2OK!Wnv9>o{vs zT1{qBVoviqRG^yosHgS;Y68BZo?NZtOnyJ;X>(#EuX6qg?5Y)&o?-$l&gJ~mC^|uy zB}Hd=b=BX`rtiFZCRHpoVHGf!`vHcaF9?HXsUKRfi1ER2U@DO~(r) zUJ(>u?>Loom7+{d99lA06R5{fi8<8#2A=9~$GfXljG429es4UXDob71rW5X7LHbwk zf-17do%#-3n>L+Jnn%sMX}^k=#`K{>SP1(sC{85~jkzj6G~i&^3`%&Y zkfyc6e?LLhZ6eX6J$TkFVSglDlSI>}<4Z#QkhPv;p;rg=cSMlu(9_-?CmO`GJSHa7 z>fuSJC^M5bUxa1Wg_~O(+J#eeJ(!+BTHD{J??btR9@;pH?h6W(j(5Ye$$oD~?No>Q zqiJ_&ofFv*ZY*Z*d2d%wWedGOXQ5icv$W45xtejzZuZZ*ZI3pz7L$(r6RPAw%2hrK{hY&SBm$T-(cS z9?OcinR+0iU!z!}c^-Ih>Lj|tcFFlH>bgK$pK$+7^AqB}nXG&nACaB!QPR;Cb~lBq zfSM{@CV7RD%2(;AxZ#nz$=V?ysr7QUe+YL}c(k3mn{%JEhFm~=}p^YNID7JhAg@0i5-%%k)#DKSy* zrc($rPL}Pw2HoK#!DffYHO7IEz_Hm~^{Rq?Y?O0%l1ch4K4*D9a z3!Wj1%vD`C{3H_)E-w|Jhr3KzT>#ah@n4u4$_Jm(uc@3yRXfgXped}c^7+pBswPDFZkYKq1k{e@4H?ZSV z2qb(HXZys5t0By~0_FC^(x`{8Y(t%W3FL74f*b*xSv@G|KVatT_A^L651YPvlrXt-P+?sK4R`GsmcBG>SRw0SbLpyYQxjqc z1?V1>FkI%`dyNx^b4Qfk&4cqV4tR!fk2%Fzh;Y~4?r)dH-`DDEL&s_ zgdS?Kcya449$1jh8q4s`f&vn;cs1bznT>7b0d`1xN0tGxXAY(KUAMieJ#P%WvJ*!C z4pBA3pfqu1HqV3{hov`e7H7qOTZV`X7LwN;;X7*L1lLcv!13x6|DiP+7nX%1s8x!$ z^V@%uRlmsIAgEW0xT9kMjkun#^Y4P~!`fv$Pb52158_BX-XCj8G9=jH?N_xINFL+D zjGvAuhy@L@BiZ$~kneaiVPNSAqlwKsW5#G{)6hv98YMRIZJ8{%5*~7zUroSs(Z)87 zztS>Nc>*LVrid?0c~G||Vx=}gLE`WmTG75TyGwnD`vtc5Hvlmyb^2R(B3t%h z2|f{va^qwt>kx{x)9DbAu8o-4IurdB_397W)tLf#2NvwzJdQ_6yLy6@1e=trfz4qR zmTi&r-6(04S|2tTBF_)j&+Mv?XSdt?p567}yC+>suHbD?PW|Bg>C@1|{l$BIXX?h& zr;VKQ9q^g^i-#h0KS~+jM!*11u7;7Nm?!FD;y@)xAxTdbLDo3!41RSh9Ot4RhJ(Y0 z$*mJa_yByQaI?=vWVnO(I*OtEQMtl)ANO*#;oUFd?ihC*yXIeahYmLL#jWwhCYK*s z=U|6#A&mlf``UQBfp2fFkK{&C0I#oGY8qf7C?j|NxS(~sJG~#>k?;b@JuGug;R3?B=K(GTOdm7l2QFFm>YczBcqPA<<|#SOyn3fuDj-=8s=I0! z6&CAoIq4nvrFXuQ(N$j&!|SdeK#QB1Niot}bUO11^7nUgyo)pe(>N1waous=_jMcR zl@rmCIPi&0uV7L#V$7#NfQ={BjKu_vv2uzIlp7tlP{mdL-df#cXL(V@v z2FWl#e;=Q03`um}UlX>33T{505rUDcS516!{+*lf3fL~sL_P@;DV<7uL5fHP36elV zYfNq8R6$&>yOU@B7`94^!lL=MDC66+w{nd&Y>ApfX=-YIO+unMC?YFv=)U;H>$R=k zH&Oh3MBH%HZ%NLAukCMkRWaq}!NoBOa{js>E?(KiOV&36LHz!pK;NTh2hog@IxVpx=3?DB;A@Q(d`hTO4d?mH|2+u|V3 z4K!mzxx?L!QL4vJk~=n=knQ5~V*I_Ne*_>i+f2%K5jiMMr(>}g1r3LJstVYuW{MB+ zuS{o|Vw0{Nk6oPNwcVy+s*HE+m-$@|zbEd4(P>xr z6bk`3zt8LeidXO3I=5bv?mOz-nFgj$Ysos8?t3nA*Qfg#mFtJn{jB`V;dH-CF6KzO zF9qHW4XW1^l`{7NN~W%nzvdDX6(BT;k7cH`ubuHqB{EfNM$Vi_483EN}1-UX9I zM_f8nCr4<)a^B4ju>>$W?$hM~a?eT})A9@)62f0v2H*$SEj(z(_~s(wVC@G7hxwo6Hs}e6j_R7~v|9}fCGe?Kl$akp z*2jifH=_O}!xJO~3l-B~iKCi;qpA%C+ffhaZO0C^vKCP=D}g2@oFD;M2FxPIJtQ!~ z0nA7^O#;xBg-xH_Pr}w3{E_4BBmnOimq<86LNj2I@E{4yml(-Nc!-3HgZ+ue_vWXA z1Tp|Q8@(NsJQ)ej^P?3_VTPiXgy4km*8-n=`w2#)nW++(+U z&S=oTcjr*K{%##H%jeZ;k3`z@BJKHg+QX6d{F0bg3;k}%si-IWJIh^a?|0#zy745A zxR)~AIO1N0A8Y@zvSeQN%d)RaYrh;oar=Yva+dx6<>iL{cB~8r!$+Z`bQKZwy9jv^ zMj!GpThh?&?v?kL)u@V#RdKN@E>^|Gs<>Dc7pvl8Ra`E|66K89%jNls=dJP*bvLat zP6lt4eHBQpa-gcIRbH<7yH#?o-X1Q`)1A3hvVE-NvP-Q_tGrajP^-KQ6%rx65Tk2H zw2!Y zbDv>{tFAwjT-8)eu;?>O=o`7AKcsk<`8Mv_DL-krA6o)<)0!INjw$1=N76ui_5^yz zo>>HN?*N|8K->ZM>#2)S)K*ALhWBwSLOFrIt*+uIOuU~lqyh>_?>YI64h7edRE=T2 zNZRnYopRC0ZbXq;k44|6qX_^kRiVI57~y|?22~FNcdB~qz%Rf2P1n{e&fMnN)cdj# zs}Cv0vO|O3+k&|P7L|_Mj(FHRz~BlkyVQq$DE_$M7SGNHLmEN^FXIF_Pq*9Th4tW6 zTGL=B?haEAR8o$2P@Xh{MnNt!(8D_4&eM0R3Jinx;!kr0Q-k#x_BT}pk>T)Vt8zaVRlx^Z>UK>$v(#5t z6$aASU=qPOs0v_M6?$*>eGRJ;hY?*8DkCOiqQn3wcom`JDQ)H%3e8hQ0;33RX+Qy( zAP7&@5;GAcob5SfX#9hmqM40EXODI@GRHI2WJH+Yn?j{R=9x5Xu_F5YPqgzLZ;+Nh_L=+5;eva&(ku-anNfI4ACAy;*3#vFuC~{xj_Fq*Dk~Fq+I1-mRuX; zf=jxAiuClrt?t?tIARtxG998OHQYRI@&rfA+)?iIkk|MSm49mNI2Kxub|pV$Xe2i) zyto(_Ss|)4#%(D;o|DY!myQe|1?EwaeT?BZ)wc5mjqJ#`kFhM7Y-5o!lBvLg#x2ML zoej)`soH|ZEeM-(q*{>1M6~@DG!X@Lqo9@rX^|kzi&a=39HOZjIy?fJR6k~wGgY(5 zxOqKyvbIkqYl~WYQj^s(@@8F@W$B@Y)zdq=Kib0b+Ea~9%n_pO6l_7P-gsL@i2wOz ztKpBds=v83R>NRrstCiAl&C>rS*>cF>aC$SRPYPemkykZ$blNUEw-^rLU{d2yEC}y zF?x(E7FHf+(gQ=Tp~^sd+{~s#7z`;m=6Obej`0+y&^Iz7@>vRP2bAy;P}{)XKC5pl zKZ^H$vyZ{%`#4?{?X-x&@HF|injcxgeJivADyYm9#%^pf4lV0!(4W8_Y8Z30p}PWI zMmdHp0);17x2n8`&11PDI3NJZP1;%0R2PJ)_L;mfg>%3w1433l2!(A8XL`Xr7GMD* zj^hJmr8x-6QM29DJni(Rx17ZsUB?cNfrKB@h`t^@;I`vZD4rziwt!1G&O5CxbF_fl z86W`60?%rgrNhX9vAkGhV)vGroL~%uN4fGrJrHRoE3|+*;vRQtMn{9|FQHAkF z$m-ec(P=n#Gs!*CX?>RHbWFJ+_Bmw<2^15c9uhN!A3&S&V>eqksRYJh5tS&|M27_6 zu~ftZo(72+ijM(e-7zRg_a3q)+)d~gjls{(*O+XQCx$JSArqZE+_)KlK)D|t2j#X% z1DZ31nUc6C%l_$}?9-T+UG6;f678Q!yl4q8%DWPm8s2$q0Z(maJ5L@L%u@#;r|_9b z^*(2=Fg&`#@QBP!FM003E$}?+YT?||pETyFl+=ioq|T8VAq#;bse+r--K3(iR1ah7 zOiC@I1O^SMAW9%Ox-{AnNF@e;ln|-2Q39!3B9*ZBm?;m>rQTs)0yl9SxN(_D`;^@_4y_h2$&0XF znP-3-xpoEIcwGWFp63$WO1`PvEaBIuDtc{dwAn>MA1YGQGQ()Zg2!qUkZ0utWb_(O zE%LHZr(V}fQmn6}MhR*0p@a!nI$&Clol6oWq{RnJv;;}n$U+7Bni@UqB@or9H4BIW zZi$ZowRma+A~4uhA+Z~QLvt+mymVFNm2^RXSneKj+emuB_|P&iBS}YgsP3Cqc2dEg zM2voZtQb4qaV{v0wPHck<(s3GP|6Msg35R#LuS`X?hFW;ydrn|{Z4o2N4g>})HnCa zq&$A|?gQK3^Sk?XKu+@zLKxgjESq#m$5&WQ?mSonOy|yEssPs84kV7T!p9BP66J)d zMP0jw+jzZ44%%#$f$Avl1zuk#?2?T9uo4CyO24M&E4 za>^wn_JPl}zvWt5JQ+9P$?4tWN&TVe5CRqoZ+2`zi=;#nq;jG6SZFtQ*!D;P zbd`IOj>PzcBsy=nl%NQgnJ!bMWq5#n4t7!wpd(P^M-!yTkMwZ@#u~| zZ|uvQ{}5r?jS-Oc4#YC|IpO= zLM}i0(RDWVJ^Z5TDl4iD|4=C=R`3|Q2CToaZ*jeieNX*Ry=~{7yH;)N!&2_SsppFr z7Ig3%8~eVovF{rj`ylgw=Qj2|^tPHpe8fG#ILF4GEw@eFx}?-t#Q1rb$E6K>t(!u} zVWhCw)^{px>ubFhnyEP39KQ3`$!amLY1xJE+S>&AlhSg!%&l%Q^O>jmbeUVbFU^Yi z6+6ssE!|*ttHQ8Z2eIvp#I(JP=)k0|*hcq58;bgLwC5s@bA&0XPlmbEuvTz@i*Ad` zy<=}!I`t)l*c?G2`Df=afo>54@Uodpg}@P#(rgS%*$)PvYxemR(c^bp7^BKG>e(II~#aOd6&q@*VQstpoV%wCN{A zxnqgzWz&yLDQ|8^gUQ8!M=9Zs0sMMw=t5f(tVxRFJQD$I?x6S-)z?_gDXQ-=?s_LQ z5iw#oUfr5D`Gm`S1pCqSsqCSh7Z`_55L=~IToeSz5m2d<09`#HJOxHvP8H*Y>PlX0 zO$^dSa9Z_#EnkMxlq?il2UHsFVo0o1Ke^h7T(ve+SBof1*$}oFMvs6ih1ktw+?3)~L`YHM zjJ*voSD*zf*iwuO9+qNU@NiTABA`lqIRYLNJv#|bvmAcpY;ucE5mp1wrYzX;*n4JH zpSKv&BmiLsqeJ2VU5%0LZxkp6#(+AORGm8dRV_<3AI+kGB3Dz^uB4Wl!N8Wu>|riZ zd0M6?G=ZT?^~rElaWaiEPHd*~$kW#i(up^YL&Wy3M<%%_03)E56zD3-aZN~Cb4~03 zRfsx-V64)bmd5>*F4FKWa46(h2TY;eskM&`s=6s5GKA2tjW#j_&l^FP6z0gT^hRPY z0#hxGk3)4sb0SlUcSNpvGMgtwpZeYGydkPuD?(JE(7_uduuubz$6_0z3K}eMmBHAw zdnl;WLmE99iMup%a(ytzRe|f7oDEW37wb)(QZvUmj_XSx1osmD17+rzoA)@=p&o$% z>+m2y@iQi1NV~$y_&>rM`81(m1e}ggaXOtKOGQK==Bq-y$^pQ<$+^s&<@*>eEd!yG zIL9u_YzdiHMv@B@o=X_5EED4Yvgqo}Q3^MbT#B=fn5^_uN0N*0Riyxm~13jByyd_ge))pF-D(jukDXDWN+i z?0Fh}l{+Nv^XG_K{s{1+4o!`_$9RM?j;Ap!7Eo)=UXD150hALe$nanerJG^ePqA#G zrVkB1W>wyhCp4I3^L0>PHLGYFZVA<^8!0_vVGC_XLLY}Tk88;RDNrVxkT`K2{;qDvn;z2CQb&Ri0K*=zz>biK2o_1~|YI z?sj8);)3EcLXmMhhhmEh3X||1<#rEa&t)22?Pzc^G)NJeABLrzI5A)!A!CCGuO1`L zw>U8vx1$(phr!9%n1*@;T0=O_*q^w8m!zSEiP&UhMsaG4t}Q@{cwJrAc*ccPa*@?Y zXD;Q~x}fx|;ei(JY;?&)4@?f!M}u0466%n}YwHkDu2Zhg+6T!M(?O(6S{m9VdT~)( z0@7!vy9TDh%Z!Ga5T2Q{Nq!-k8{h%)id-Gc7oSU!Fn z?Ixj7&~Eb8JwF^GU{-w|KP2o8bHx|(LD8OX&6h1oPTNnSibzv^)@O&t&@zek71tWh z?Hh5eDF*ola4X76C)44WG**UF63nPf$ux>Im5moHSwP(ylYpSXZL zzmsK3Z!X|VloJ3yY+xzKT6j9rv$W3LxO5MAwZUfgy7<9j{Efu1!zY7V3~0a z&UwaUWlb^oU#FUOM`-ijLp%CIJj|0*9wepNcXm&n&R)5vlTMe%^+i$v1kdJWoWsJc zQ)e7(sutlogYNYHN6gK4J2M#|28V2qpvHIHY9xwJTD} zsXNs#Jdsr&%&U9RH9q5D$4~x9{n`I%ZOMZYK&NV}JcvOc;#|>l=i|~C z)W(fnVRLAb>#QzXmLYM7S8)SgWmRhMujkco{$(pQ_{mN&l_E^0wI$BX&8o#W-&wMC zuUag6pWD&b!BO0|kAlJ7x59x<{tFit5k* zG>g1H0&>)Y3dIPr0Hm2s7>Arx(gfOk{A$rClPEsMmAf9JaD*$HL=JOl)pVw< zVLtlnH|N#o*{eNlxKxw#WgX;`JE4JNi5@Pp`4S;*uJ|-F)9aIH6_}k&9On>|2NFd+ zgU-SL5`c3|wdokj+j0VuUQNBeY<+(qUQ#sEHC$Z6yypd> zWMKdo?LB-v3yKJUU2s7%X>*2?efe5Fk$4%lxHc4t5j;!LPw|~t@sau}{Pl=+JW58| z@sU6<)*IY!TEAQqyNkrqwkda5~Vu&pXYjEB`p@K@u>L{)_Da6(q#JU z66hZ3^ko*@p=)+f0O4AF5>f!Isc9MDq&df5w$oRsf9|m?s_o3z0b-#P{8WkLiH8CTCk7o|(5(rBpk7Bci zQ{cz|;M5%mG36g6IDb_D7A_LjgBQkkEFa2XakC;odtMIb0*A8h#8*}HSJ{dGmggND ze9=iDkqc^cgDP5l)VG&M)hxAd2n?c17JNmL?EZMtSs|;d;X2hfqz0NU{bEkZWU3;; z&yI&yt;0Aeo87wGo!c)7rQV5t3!^h+-2SW(JA_Gn1G$u;Uk>IcCjIbry0~bTzdT(FP=%v zWg7i5mk#P=E^Vw1T(bVfP!-f#dH;FQqW*Mip7CZsg6@zyDWazey`etD>`ar`yHQUk zTl9TuV{ldnsJQv2KB2ln6^M5oJsRv#Lx~?S5#^N=bmzrs6wr^MNjy2&6?ZLMhe=K@ zQrdm+#vibKVvcs`OpHFKuX0G$C)Ev%O-~ba`ewV-^JaJr*(@=r$oZsZ@+$uGyiRAsCgh(&iZc&)n! zts8d^c2mq4x3Ae*dfSeq-Btd2oOc!m&#zjy4d$xpTNVZ{ET3P_)#;`_Unb>>g_vys z(P%qa`9iY51dtf@mCyInGID`1cT)kb_e`5?_vc@6I*z1d#?ltBpEgj;|8>x*_&itI z{bkNV+uBP>dl$;xmYW7EHqgzVzK;nJ2~NdzzldDvTY3n9+=b6IILmD(DLs=)T0W2tOZ{}&2i-+zKiA+P zija;qobh_STy#=-PUHLsA*kRjq2xT<{-YhZ(PM3Jm-Uo)86IoJ@G3n0my27}me zW*BU+r4vwHq7yM~GJpmLOrr^$W2N;Yig_lFW++Yzwrz3lb2%(}%3|mY_KWB+Er&`r zYfB-*)BFmDJWiH5I+%|32qixeM)83VqPG)wC#Ph$i?Bi^e|txjflAKw?!I7Y^MMvi z*;At(m;gS_w69g=@Wv9@N`MWP($y>@2)K~ zbR7&jm5P^E8UYI8oSM%{7>|K6wvgO0GR_Vrt}`?m3(J@qJLVuKXb8Jhj3A}=wkVLN z6kgrW<$3oF>8r#)#5OrR3ljgp^mLSQH%R;gO>?N-JwtXk9`HP^F>ug^eAEQwHG^X3 zz?Mo8?z`{*-F*|FoV-`lAvOlyuqM7x9e@3=dL|ll8$GiMap?Vx|cNm|Q#k{G{ipwa^gb5SGCmOSEr%)n#y+n->0eG(;6^cGYLqx0s&GL%iJ*~rv~Wwx z7UgO+>@4F)fpLPEkXrg2d?;KvSuV67kaglHDWTRE(S+}-yp z>J5Qp-b4MCu(~oktcVd3yw&@x+Rz*?-%w0v-OMIty^By+k?&Iz|D5@xIvRxrVisM# z|8{~&F7O5x26vS^UqTKPNG^fwPX6L`&0E0M)F5Y-YRIF8D(};6>Q>^cU-jWR5^T!6 z`#sDc#uT}{$K@%tO!}Ts#x!;2#L$W-O@!cZ$O!=w{kS6iyF8*)1;(_<2%lXK^epPX*-D{ z|KmGDBJG{nsg~ZJvV-~FouP*3(?%WeFDKM%KKWn9tKWN9-rH7vfxF-Q4Bh8%*4sX+ zviRfYQGRvjABG$~&HKgU)mO3}coT(EMzWqY7emt_?vy_#s=lPn2{(jH;A8K+I z>_T`WhK{u}e<(7)dnvO!+FNUuduEH}o^7(CK;_Tv$%L}z2R|MkJh}7%%9=GZe)7k` zqUq|>OF7S1^e566Us(F$TxFk{iP3mEjYi|jzqok(IxTSVC+q#xT7z>kzPzXTGP~~h z+WAgIzPH!;s&F~@ zRKLdM-|wg%`jb}g$sN_d+f=*)_4DD)OwN&wf+?sYW*me<+c9Gr=!+KC@+oMu)NV) zKb30z7`bp&7_GHCH(cJA2txHt07Ys*acO3+o$>znp$H4Iah{B4$p{HPe~F(WBkbz= zGu{(`zJQGHB_p!PvJzjgMz14FKkI$aRkYS^ek=LDDl!Z8miFgeV>G`(z5Zh`FixI{ z+XfPt#V@s3l35($7S%IcU6vjAI8nx6caFbu=ccqF-UZ^+eQ;85ATOW)RSUL>Y#+Rq z=Qk}bo^HLu9Y(M1Kk&_Fg$F!v^gnKR?DT=(*m~9bkg84}_t6&I5-V@5=KFhSq&n&j(e~UgHBFovjh_lx=<0DVk z>W3-l@iMy)RlE9jS6c>IsTdZfec}7z=prr z{2eDxANWPW3i1wyU2yOhLGk42Q;fLWvy9&3;|s`L%^Q-RNhzX74B`n;4UFu=MP=O| zY8Ck%4f9YltB=8I*066?AOD#L|2m-4YQRYsAMO1Ol^MkWj9z62J{3wv^2|mL{F-&~iMAC|Goo(`LbAv;n?JV;%KRHs} zNB{V)w~bc!ho5--t?@jp?)UoNeEg38v}L|7IclrZ&NfXLR(Ekz-Nj4Qjnw9Jo^WOZ z&{NT4B_RKjQXm5K{$K}sv5l=PFEqV;Q>&A{ZXW8+#hayWM7{vVkfF@5BII{i&jW+( z;G1ro{u@yA@dplO@#mRq&!kuR!Rx+l?7#l6-}Cd=K441zK$#uFZ8C`yCG) ze8HugKJ~V<|J&nd9ys%B-B;zr{fzQ*3zd7%A9w)JzvE@!e&TH(`Zwf1_TT^AA3d90 zL4G;ugTL~{fBr+g&2PH)frJ0Y!~g!s_k7Q9`yx9-Szp*#%p5Q7NUKjb$uy4*HZMby zKZ{|Yu1AeAcknGweDI&`{oYSfSo9#0XRm_dRLM8TMO0@W7eD_T^)|{hdoW6-6O^2s;p> zy5rlH`dLHLn(@=TXJ=qr!m+d0KJfOsHRV|U;9sx=-Auo3x=5gDA85{cW{wR$CNW{qR%#l0{X;vz|vSEQx;*p2B@3TC#A}} zlv4yIG!U9EXUInht$q|~aGpDLq%n`R5X&Y=z22=XwpfkAY!Y`@NSmz`ItLWqJV zQY>p{2y0*^zO_UKTkGr+i&;cikPFHzK$4heDJL#TdQvp`oB<2{cGT_UrJ#jDxK^ZF zrZ!rmrHPx!NKyAWV;1n~8dH$%2NymCi2_d7f;hpYl-sIV=3ZcKUC*u6KY`9QUHz)3 z)}VM#Q;<_@9jp&6kKmF}I)j$a!fhk75VFBQXh}~4K&y1X$hvh^4Es2JaQ*s zN5>Os1c}BMYI>2#V%hmFT17uzQBMu2aTrF%sxv6PCQ>_X76MPSpvuI(#l^c4yzN#f-z6M;P{f%RL~pKU)$>!x>F@ED7ZewUNg#BJp024yWb*Srxq1LMjT zpF5xPQo2nUNmglf-&(W^yt-r!mhr@{e<5=OoBO3!xVt<$ur)-u_Eys*q;u#uY@_U+kgVSg8|h0z{L2#@}Z zye)k3g$W#wg2CiJ^RvG;pfNSG+PxiSra?Ry=)};#)d2H@ult#w*#9?MJ^-ijGasDY z_nqJK(QAWkVd_J-;ih124*t$JpSb69m;3~IzWfh<@RAQ6`K4f}ii028`QwlO`agOL z>EHGFPk-rOzUH-j%ilrvb5xS={I%|HDUswg=hJF9pAq3?$RH2pjT{yTrPzO}S>${f zi>zs@VUe5Bdc3(&3Y6t-pQ-Zn{g6=|<%@@zMk^U*jIE?$j1M-vZ*v35JXa;7-0(2d zXeDCZa();vwGtoPX9a}+rRw~)XuNZ|mbgDrgfH-Nq3t^>#&MYRCX0T>PM2RGuMC@u z@PX%n+`a#}gT$h`^!4md9e{Pp;FrCgVZj{F3ezE0DCPKB*js=+lT}ji59c9p5-8epEV`w8R97>7-hGmDn_x7BB>&KRDo@&iUx(x@+L|Y zoR1DuqgpBftxlz316kRQnMQyyU{qGgY`HQUl_)22tB_`eb@GWI%1NwaEcw31=<%%j z(*2X&&lmZGigpZJ5C=#OdbnK!91$@Ju*HXU2P$+mo)|4v^@eH1TFQy;SBLWl?wMmS zR1-k3x6sFM5}3k=1ZN?ol5@wBbJ?Jc8z|M4@SZ4oRnCKnE!SFXHq(Rl%dn6r0AnZ9 z!xyy}j!&<`K*vI?%`pUx@tsEp?6!h~!WLpzrYp>~9A$)>N++ z8JsAm$k3rW;h6)-z`Z|&I18o>r>L&o)@d*YX}&xWP-r#k@wY7=e@mk^f9BddAE%&h z_YXK>#8Lk+T3>#*?{*)?OX%(v!? z`EpZ$E$Jc3O-IZ8dgKmfO7#-4=y-oq%-?d;LZ9))_H}45<+m}UrQTY#4db+Gb48ia92*lidnkSH(P|2M6{S_X5xvShCC3L_t5$zPPdw%# zW=(1b4(=2p6T##pLEY*y)ua?2-R{%6vU`l=ANt)m^^|VJ`ph{?HlEFruR}7mlIHvJ zyXo*mpEZ2xLwiFtz3K|r;ZDe+6Qk`7xC(-iMk5Nh7pk*4U2>SCBdud)i(MnFqoVeP z${p}{pD)ILc?!)gplj zLaqi+2t?KU;~i*qm{yQKMjj15pq~_A41D#XfUkpUw-OkMe^w7c)1}t1ONucoyQH8q z(j|9}+Tv)Pi^$dukPED;YxG7M4#waW<%|cN98e*V2FT%QI$^fD{aK*mM1O{!Y>a`g zK9C))zV%fbD2TcdZZT*ciZ@_b5Bww8YV~cm{Qu0oe~esNcHdXsO>#&!XNJ3)UC$0j z*vFP+%}5*$f6UIV+MCr>H=CTEA)CG3P0p?ip;6uSnk;s8Rk5m?Y_6@Hk$1IOB(bf) zP8`b;EXzOEcD#TP1c-vz(IO6l{9ywI;sAo902{}#16VKwBY+iH*5>m)_uluTs$O+> zRgIjLhF$Nzd(S!d+;h)4_uO;udsO}b>m(C+RyyU=%A)X6|3kMJ)#sL;=Y9_t^Wtkj zT0w{O{TUuHBd^b(rQcDnSb&2~2dSUan(O>OqUqCKP7hfoUEvNuTH)UITF3jG%`AIa@5lY79=m#|Fb z-zx3CaPh=T{(mpL^x~-(UU=c9Q+l30IrGv>XI`3m>7^6uFHK?B3(vjq((FsrLGetL z|CiFu=g*w`AsGMq%sa$4zH$ECNh9Br<%oL+E}|Y@I9-~Wo;mT#$y3Z_I*kHCJkNb5 z`@pw$-J8F|J!$8-7T!Jmv8mEIA|&o%zEnELwIC^km%@WJf|@hr*6`o^7a0BL%BS1# z?Dya)SLu@THzoZ~3n-rZv@#T!*k@r9ft*i&N8I_ve`13j&9=c5eR|==`vi?Xy>Q~& zELqQ+c2e6_+y!8BdpmAJ`NR|Y{s>hw&HW;HL!V>>a~KdWJQrc$lVDdowS$@vgMfW<$0K=bSHjzjK z=foCkDDu#)Ru9<5j&u6ZEEKuwB{7=Gr}pSHVuYNwIamJqKlRPiyL@MjzXy+{fzcu| zD`f)Ks7O9^C&qfb0kf`tch<)!P#u&Cog!fxc3(iX&k6`5KoQSp&cUoR;yIGbIKY)D zjCF(}EfK@}=jQklj%Ej4iU}5eiJTeD_0wqKcceY-_v}S$Y60U}_2Mjjq>HDaIy!s) zU%fJS7PUKf4&K`>*t^hAM1wAg`_KdD-?y*GNh6cZ`8>TdI(R8M=&FSewPy#BZf;yW z57W*EbXjE4EY>)h!WKlOQ2tL}L2ZChIn%R_e+dQ|ijL4c&&#RkdBk$+oTUYx{z-7? z1IA+8$xp1opmSz(#f&eOK94+}i9UsZ!`O3tV9x7Ya|N&}vg-H%E=B1@dRD^r{E)KE zrY=qaS?h8ao17~#44QR{l;H)L8kMwDga}QQ&*FKUJH?2)GW>!QIRNxEtw}uegt1cd zR^3#FEb~rD!e^p$?{W>hIP^Rg|9Q4L;D}>$iF*@Xz%QW<8P_Uh*?YoRqY|1D$AC{7 z$8)Y;6zVw^GC&%k7hr|Im+^&JK0Z)lZlI$WMXKY=p8xX~UYVVJ&mZo=r`0vP<+GU- zKO6)$K)|G4$>g(cDxbw}T~S<)x6VD1-D0&m``=BMrh#34iJ{FaYWKveGrKRGHEn(J z)N`lL=tJt3BnEGtPXQ`~2~>E7{jc7d)-{&{UwtnBs{Gue^1)-kYLd|PXv$3G;I`MM z3c+44es!f(*y?KjRX;HV9Em8>5lPw1Cra?|8`vcom@Ek^`HBWSNA1b75(L@`&#E*1fY$^$?y343VchLSw7pC;{aiO*EgIlpLt(v zVcM~aAze1xo|@7U>Z55}LO}}&Ro^@D7)=40iYAlYA(N{|Z5Mnbupdn?&rMyhm6cQk z)M`n?sYhg3Z&mRJ=oX<61ijGe;v;=&WcF|Uk(o~t%bV8vLR*1nSYMoxy1NAWslPY( z8M8=bJ~vbT)92-!{?gpk-@Eu3*dpS*J^Ez%7kMYe^yki({|vX-$Rd660@Xjc#7AI& z^qH_;{JkHPzLEL;WpTM2(VW5U+w6bhv72BtcN6Si{;N{?Kl|t8z%qa4W-gTf z&tIM@|Hi*y$5Q^z)YgUa4E03P8O01ffw*gL2&G@X^oV6GlY8n{=cfE(w^Z5!sjcrX z5e=APZF@2M?kdl=ub1#DepOSzV}cfc)#_Ut^V! zRMVwvXLMxaO!*&8KSJ5lbnZpxtzub2tKTheC%;Rj9i4%l`Y**x>=r3cSRv_bDc_mj z_$$_j_#ghm@~>t4!`RYa^dc)glr0_%3)dGfo))3}Q4wM>Q~qK7hh{%VZJ?5^9LejA z&VBddD+`>5qS7gbN|C@9zY(2cQb(_R>rd*tXA2+w`G5J_Gan%i_T%e6_a)wu|79Rp zpUp;}`Oe%7#u%MPAqnA7u9-tN_S`9SnyW1PF554gC$2_(&6}E+qEmDb-r7b3Zrf)b zmCx*1k>yL6P3L00@;@)#y!a`cA|#XJe`-E)+hCYEpc&HPC!~I z>C&f3>Q++Nm}NH;i0$M1CynYb4Ca5z&#pSBK4U%&h1$dF5`X< zv*7$A3;}F8N9(hkK^Eh=ObBLZMFVp#?DF?tly0i*)?;`J+!sASl)uD-C@$9!&%FSH zfy??$BFfcl{Qbv4N?DLbEFX;k%qHiZcWLmPJ2fiQ5cYy>@(bnD+F+OTJugD_y|Vb?R z8GAHH{I`r$XvUm^U#IVI$VYS8W*8`K($Gl6#ZLLDeK%U(s8E=UF+dEsrVCfGm(R9L;7(z(5IIU1 zaOi%aMKz0VceD|TdI{nx?Y#N8{6Ce58~}qYcy)?-j1(fE{D+r?0*%fh{%1|U`AW|{ zDz1lgN9WsGNZ>e@WhaCM!4)2*CrCX4`J`^U;^$}g=Vpi=cD@^Zf`t(Kq~$3mwNmtG z`zu=eahDcU+w5aHV<0~jom9E%l;0@-q(HuV!PWfKu1NUgqv(Z4k2LOBs2=0wZpKvV zvw4Z$*K!nMXB4w$smc*r{W`;<)ieVqA2}m(^5W?kL`;hIIW62yF~l5Z(Fk*a77gw^ zKShNs@vdAVr_pD;CGpJR`4W+IjS2mL6>O$s|D~W%#xJ5;q-eN#U#qiH`4|2MCfX`Q zvx;sZJ?|Q(gcKx6_?ZEP_#LXVWtLWDmaziI4<#sgw18%~%V*xB_opz1Ga`Cg%0g=) z$)4As(JaER>m3}2oE>*ubBY@=7msFbOcAhbhXF_2@aQbFaTc*~Rmn{_@&uEk^A{i} z<&5hb43>q{*|W30hm_D2Z!Jzb<`LeJBG&rgZ26Oq%0y$GkbDYR`;j5;=mKg2VaTAFt=%jBR(Gi5E%$|zFsr>Zl0=i~#H=YS2~tc=i$kIF4Av2H*}3qQ}!v;KGbXQ()nJbthACogii2D1=6`;XrFIW23F$J4){u+tPB znOT_nhHAsz6RSys??Ko`?&-_6>zxu42$}gt0Q&nsD1Flag#wlqAPu`zze$JgKVMpK zWmmra9a#0B{u><~icV;$<^le6fcL%9H|Nlw60P#j{~PVJl)qP!Gfo~B8)D!6*2PnT zCBjcLA<+n@zdQHbw^(9*4~Jp*yYP#oo#?r5U4#*(XxeSxo%;OD%hT_afByGyKNPld zAQj{QxC-jX8YH?38pMsn@t%2e% z*OA$1q1Rv6mf`C&FMktme>XRH-|QW|>4m8<41s?ixlw|4#weQRwaKNn7sW3(^!)qb zH@^9sO6HvXZ>QLvMb3VeuAQJ3v;R@~SN{o9dWz#xugDVG%Gqs2DP?$yt%<3NQ`G#+ z=w37yIWTWezvceCN--OltbHZo(Mjwh8vtDPN~ci(RQyp_kqcD8Bw;H5{a4EW<16RC zujm-!#Yx3i=fop^ynK^shL&Q$lFcuzS=n7=*{gdBwdM8_E{VjFpSYZike-BC9RQH3 zfL!~5)3Xh0L^mkC?Xs0h=YK~T817H`xBiSajq!inkMsYM%cW+^|MOo|siIq`ZZ!q4 z!1B+l@-WqyOXH=SDf+@($&AUA-MBVwEnHo#4^SK!EUNiEM&Mv3J`@Ss-=5N+({s~W zaKSVZ^8QZQ%3k}#JNj%0jkCMUY%))uD3@mMFpjnZq?||#RJpYr97fwh^_1dxaEU*9 z1D9kwfvi6gj~TbWM}TT~_AgDB*yfNI$N>Z`#I@Z++@gdtGyP8a+kaZ@;Q!^|k|6XU zG2Y*#z037t$J!F-dBZ(QA59Tb2MtfBp0IPK0DE~_QAQg6`pjK;!H;*S_`R81Ax|c0 z2*JEQ_oV!NYZ$;JaLY3ulG43?@PnW3MLc6IKKZ2ly93)N;8TDn0O-W+Gbm+cB}|!x zhYnHB!uK@WxPSf3k50`#SNf6Ck4){(p5Wivlcn>Y2trw=znny{NODPM5H)H3fs>&r zvFsC{l~B*BMKm>gs&xKezfzk03sYnhF&A0vOfeOSy(?l3D7$4!e<-x^(y_;>i!-h+ z)0Uyvbeco6*f~fBkHNu{Sej)IP~%5AGDXQ8UAVHMl$IH=O4XjVcFx_&7m#Coegvoj^UFvwT$&;P%# z%*IrekZEejW}didAwS(bSDun=Ivy~N?i?(bSZ>={l}kgFjHMYr4E@-P4Psq_DqaFhzHd#t;e&~I7rj)j)A-Hfh;dkIGbqEJZ= zHL)Mlc*X)V|L6{VF_58&G%9l4n1!f4SfzPBb<<^s=tFK%Y4)!x*^KT&N!J zA5DK=Ng+D;S`_f>iewd)Dc{k4(VSlf@MYQ7Y5T-tG&B3N-YlF)%Smw5l^>-Kq_XHB zGf(Grs48MS#Btd8a+!SaDPKk6CBb}~KfVc7z>5L-(b?Ho=(`3FMk1cHhZy|7-)9@( zdeJMV*-tYMtg?-q8~fQcPwWXs&<2z`h#%CNd@-r_F$gU5v_pr55f4gA0;j{Qk;_Vt zntpsC3$i6cFqlS1$T{I+(wU7G@jrM4b^u4qInt!GcVksvMlNRHkniIU!2d?+ZE?!Y zYIh^)?0Qvy76)9Lcdk4a&g!c%b8=pVS5#Zrj{ zgnLiWU=}v(wvCf$GC?s8%qf^6!G;q+M{x-)ECToMJ1{4$hUSPAF2e7s0!W$=3iOAh zmCj?feF3JAyF{lRm%m@)$q-S4brSzrSJZ9&)>(1iHN6uh&{6*N|6OWfiC)U%(hHGe zvn?S>gjmNln$t4Z7hyPcWwK}9aic!1h`;XxLSQ3~uPBLwR*`1l#Rg9pEfT2irEsf9 z9*i--&lD?T$eD%K5HDczVFMW=R7ZqEbd* zx=L>7l5(qMPG?4qBJbujIyH)3k{Uy3od$P~Bg5%f0c)g2rx9VVNEJ=dJW+?3AX$ZK zQm9dpku$wIqXTNT)u8HW2ki;2r>uuNbW(!k7;pTN&q>L7lL^_*>DgbJ5?4_npMxfv zpczGx6}{z(&d)ic7IYJl$e^3l0wu_e5KQkWQh3Esq#)?3IV`sQRw!HHA}4RY35we{ zF=~U_a>(DFo&CEfn5&GkG#F7ZX)q|_$rH)1R|SF^g8wQR@S<2X(Ep*n&8G9x%#>qk zOc6t^h()W%NwP)yfy&*%OV(&QCb-5H=7IcZM1i+o$FI5jbwr_@F&q;wkb$t=pqKx zLJqIYmS=1uh;BT7-mzR(6q$c*8e4<*e@#E(sBDFyHLF2?F&06yfX0t(#R=m2~cooiiY#b%6P4KFyN8=Y;t8%$!2sT!uW9eLXADr$!; z*^Z9aWR$-uQg1Spf*Sbg17QZ%zUdOrmP?>i{2q83mEhcdBoO%T_~kH zSkGv0Qe$pux%fBMDZ*2v1lZGCvpaj69Qo~w$H7-E2T5Abb_rEfAmXd zh+(jKd$Kyn?mU9?O`b$r6QN)2_DDdD-mu?xowu<=@ZVywJTk6-Fxz4DNyaylK{#&vE@-iH3|6Fi@}*YcSaYmNF>+u%;r41Yem9 z0yc&Ss8KuxRG**)N864D`4}hDd4Go9DESxg=z)(}LKOnnDn_G@at=MkFfKFL{E_TQ z2ywBw4?%U#vnFNrXa3Mjvp!gCXT)c`N@J+SC({I6g(Cf?bqpJrA<)m^jzm194|Jg*ehWDXdK1;Dv9#mV#m#&3JY zMATfrwY38|qT&Ar7XN9sLgN5Zg4&%9;Jh@yiH;x^^EZFRZwUOl{Scl1^{<>+`0(?< z{yY5m=vTF?azc+(CGCRy8e5OczxB8O*S~$TBLe>JulQd5C*j9O(d-<%A;etSDw@+> zOUfKNTmH6T;8ff@<&WG?`Y*dTa|d&W2)s{5aTzdgluAsF=UGEczY{vg%{k>?{FO5n zvO(O`U)`rjGw}?&p<5;O8{H-!gca+bB{0o>gwNw@b6}6osL_m5==N0<_&7wfy0q9Bgja1 zG_$NjWHG-C71g=1x(KF86PZt#+6h5 z{fbXn+m`!!dhuVBBUtreBoyi@;55| zz2wfoSGi>~=JGHB&7+f-!0&J3_nF5)9qsj%Bf=iDHXBctUy~Pe026e`LOf!d@wvwc z1jbqzn4zLFnV!>$%QN$+{2C5l`FEh`H;hHpwij#Sj95Y%l|RQU9aJ7 zKcD69q|+NZ$0pQ~aY#`N=ZITG#Tf!MlG|vF zq{I1-86zE*Zv??)t*Fcrb)g+`nZZz7WJ|8kbJG&FA80A!BDTo6{9TEkN!?9--OVDf zVL{=SEZTo|s|tb{w)dhvG`wa@rKJVedjs4~uzEX6p)IK00tB*DRdwXP!C7V*;>A)Z zeKP&vY(6%91`U#}Y6g_CkpZQt46!iv1L;fl=!n;$3#6|UNJhfejtL@#tbe%+x zPM6P@Us6gbpVGW}!CO(qdu1R_DGQ#OC%FR{gS*&M6I=tZEC7uO| z4{}}|XV}JPWyU#b^jxsn44F-J<)Uj`FwL0(A&C89ST$njqZ0mDvity*Ek7*x0ymH4 z2Vx;X!Nt@cK8Gvd`eXd(9-Pmriutt;S-)G0CPMO$=GM+++*(cV)UA~RXINj2NDukE zI2Oi5cQ6DWe8%<3EvXnBxTxitoHWThAXp{5Y)e^lgqa^W!X@VjQwuSYKOC|9E+2-4 z$}}71RQTa17vYv1TWK=FBafNu8pA1*96{&Xq>^9;k(@8bCH|b2mY1_LarLT|Vfn{7 zG4J#yzxC_Fqw<@!hGyY%{t=;o=`xoA~Vlp1mlwx$P)YglqF&OdW_63oU6;G|pB%ajv;%U%1zbNh?o-E!Rm&7{h zc4|tsn$VI#Du%LuMqMY-VZJL}RM8^2Tv87-F+hy3n%F}5WrrnB85e>8Fq9xH8)u6buHc zTI!hUy{a0&iyWu|RZaOoRSiuuWlOG6QkfPreszS@^I%?pH_OBAeJSc5Q|+m1y073ObIhYe@uZ-q0TfzsC|C!v=q2mIVo^wh4TtrRy#98*!a%P z5SpYj#KlvcXEN&~leT@5>3k>|BZR_B<|!wcUM{(W3%TTkD_fV6OIOug2tF1fxirV6 zBz-1zCl^At&1m&T!vr4>ZWd zutCHd%lH;9w0S~9$ILO`0;?oW;z5Xo1l`;pDQ}B2=;L~6XjAJvsUMx{_ZQ*(gLB+~ zL%(bn8I#2Ng)w&LEby?2Fu6TETpcYz6b*-i^j?~Dj>X6*)0g?pKkrhkEM6qy$33?NC znL4-VOi3m^;`6IWCKr{GHI>zv^v$LQ``wyX(*UzxE4j%{E6QJDQypI03pS{rPCcP%s5Jwl1@8Z?pV@$#bC=_hR$#AC@T>?pcy)i z4x9?Ep4;4UuAc2KDYifsXM}J_1ENPXB+%#nNLTQE;LlQHCaiW8$dmVqnqx-^dC7RM zAhHw6>DB?82?U|bAEjFde4Hk19h_k6KtX!YPi3vMw39gYD)!MkQWsGc`oFNi!j0GF z9bZpp0%(Cnz{Bjbt={QQGNVyYc(Aa61=h4%U?H!t#(S_xg4t)TKoRZc!BV?RpS4FL z`>Yj=cxh`a^Np3L>8uP&1fLKiq~i$Wjk0$o9(bj107-YqZ$Nh@b8@Elf?+jZVfOaV5@KbNh}8C z=P*(y$im56j8wl;#ZBUp2%xs$8ob;j_T4wLVw1R(GXR$2l9|NH`c7;`zgdx_No)7o zifQX4*k8r)1?O5|Wh+c&L#9KeI$1{_dL$krDW!p!RW|J7u&Q_S@$yU%Yyco)D z67w7;v0li6nzGk;$X2*nYc@++wa!*ZuAQyGez*y3A|W9_d`{cC!42+ULm@4YH552V zh9U)=4Ehlbg+a_1iUAN2szB|u4274mAX0RDphyu?G%@Kj6kep@Sg!Nl+~y30$(SJ+ zE@KvKlMbJomerL%5}q&=UdH$WDOcy3jD?qxTo=XQY_xm)k&K}@wu}uh6o?5jX`Zr| zF*-I-#whoOA}3=Ou}yppKPc#3Kg%;BXNIC*=#UaOl5$y{l{fRAC<1gxVkl@gIEJ8LKi2KSi>RHio*0;h4Y=m?5UAp={+u_M!OCUkv) zyGlXgWoCl(L2o7)t6(Nb49u7b3*s7rbTI@f$0`0`Qf=vh^|V4;9%=WSCuMfp^21nr zdX}VbhUj~Cghutt>~Q=^_5hvlHeFU1*sfs`lztjj+hu=&^FVZDp^To1=P>GGMLjM|B9nezBSKn)`K034vBd*y)P< z^_Gs(S=kqq0&Ty(_%;`(a@vrQfpPCBy+vD~Y#q@BPA})E$Gw5;)FU9oYxP{ii8!;b zn6ORH1Wrw~9AA4m3FbFSq_zS|zc?kt9MP|t`4XO39!sER1{}rXVJFeF;WhiOr&-C{ zO+7m25NY61>QlRR#EM7oQdZWuLFsh19A~gRlP%EHea=-pkuBF;R<@lcAsc%L10T!7 zKa$#fY&VnDo#CaTBHfY<35|eA3{JS#G>`z;A30s8{cFBOm{k0Xp;twDg#6LjAO85W zKL`zHx>TS}y_EcVIr;T!0HtwxTzpHc zt^(spd0hO_9Eh9*M1t{I#M^lORXb{;-NyIip@Wf=c<;#>!V6{})y+nKPpzFsl-5U) zsmdj>YT%W(<wxO!2;V|!_UEVRNcs2vseLJh>3f@lG2Feu(hCLr7r6RD z_KXL;@@GdiC%6SnR5Q5tn}i-x6;Nr+x?7xZ;#kcz%z1-Op0%7|@d9#SjODx|ppF{) zh1>(mooOrSke7;HoPI|D#M^0jJB{Nh-h$0|%fGl9+WDRmBOML|%>kVbKPJvL0*QPV169ogEw5kFrk|+rw;^mZ$WN1bQXlC+P z{xP|wdYEtunK1IZFWO20&7!<7gQw+zi752hQOeTnDahh1;Q7*z@MBj;znwaCC4$6%O`}Ioueq3*EtCThaN&z~cVs8<(Zr2)d9$HTcb%1{(ZpDqb+pctL%|;LI z!S7ZN7McgQ;^rQ$jLPieYWhaq54Bbg7MqPH@xh(A^DtAm(XLe*59)DG@p|iF+>Voa zFrueq^QMF z$Lhga?Ln=&(5#w(+^==^EA`sfjQxxI^*T`CC)L)s8JGF_O0`;UcWc{-hDPYM*F{Vm zRa&ijZQF{XMjTh8Zd1skN6lKJ8|^h!_i|K?cPjgJ(db`vpS5CDjc?Y*#UW6KV_?|3 z?Pk3WD=Ur4gSb6E&v4$|>U1mH^;mD?gRVNoV7$@Xd83Uy#8ItLjYZ$!)@f-$!w=d` zdi*4Aci_T&)Oz@=Q`_!@0*&C6gCD!{g@a2`w_S6*+iu5|ZtTlTJpfh#@RegUf8!^k zD7x~MD+i@Fu6*SuuY85yZ(KR}$twrIFFmDSJ^e2=8|qVKySplyJKZ2TrF|5{g9apa z9yZ(EQe{j3t{!x5JZn_;=+os+vra$PyA{gUw@qd)x0;>qLc3Y1u0E`EjK?&2PlCbU ztT2T#n_Wm#Jru0PPnz}pZXBL(KvSi$ojfBwaW%YLZPz+`NaA)Vxbb%QMXx%j7GX|$ zqKDdEs~+#61*PPS=+!6H#d=L8oqDqs->&V|MD3cJLGRkby5^AkdAsRkUr!I?+JlGP z(q84@z5Tt`yY8vhcv9=sw(9W*m3rNmJ*?Ds{LgL2?z=lXOqx=s8@IyGxcfee)B3Yf zX+vJA)>-G@&CO~|U-q}VB^ozk{wDlxH@D+X=QeEj!wBVH-mi2^JM||2?$hPB-`dou zR%`p6q+Oi`8_oUghih?*aqY-ptlM}lcVnlJ7n}PHUi6RnqRH#cT0_c1W9<2yLT@>$ zR#ruqp;>wYe>)|yVdQ(TpI;2S#_ght_)#Bof zJ5ocdl}<`u@@gIRRF8A-B*8SYGMI8l?HG#ix4hkLwmYTrg9r9&wNmp>4<5MRSaf*;CLO=to}IZNveeMR9YAIcXos{ya}Qk%IVZ< zJKnB!VtZq~3&ywHg_9-p{_dngaE-jXnB?_B&~veKWAoDtO@8 z%DqKF-uD}USIemHHiChg?Pp}q%N4JU+VSPRn2F^@C9dKGJisvYRClT@AhM@i4cw?k zt!r{DEichrY&Lh1rPWHivS*X&4r7IfQSUGjD-T?iUN7XPf0K1VLYesj;UO{Gu7DBf zDOo*08@ZPZZ&J&*@AF6wB&z=9ffG{qw3mI5s5$$&h!sVpH5;Lgq4$P>VcT`(pdS1J zkK$pa6^GWwQTMRjM9{jiW>>jUU2eqq8*D)h$RAYd(RQE(y9CS* zDsdo)m1Z}J8_oR(52HPxzv&&`=t-r%A9o^D)RS5j>$U>|rb_f$r?%%Eo!0~CMCweH z;5XG`k!hXjl)RQR{RSNw?+Vc{@5!VXC$IakS?xsCX4HVF&VEZOH;T)Pi%Ykc*2){p zcUK~)i0?1mzPq@*@zu@6cgricmT;v|7{HYefWeiRnd%MCdGdl?En&B83{}_7P4nC~2SBbut;`T*Zo7G}UB0BY++FLOL zANxW``=GLmZpGroZ80hPD8O!BFywfz(&;6PJm#+&2|NQ#N#Zdqf^Vy`z578MPuX6q zC!%F`u)l(v?FPC3rK#!u;&gf@EO2%$#g?h!jB2I;VQTH;T(z{aFe?3s^%kdXywOSI zaL^lXhn%sYrV;O-5*qw!>}I>UmsIrFQ{o+?nQK+3OI*0^hn05eO|6eQZ$86e--#O! z-n8ie&rQN-8PPNs{=5dhVjPwVlMxL&DjZ5h0UR_f5NS6b!$gAt(S zxz~|5O^3Z?+iIDW=Lm3jn6kKem?oojzfn7QbG37iKX))Iqd*M(M|yU;Pb=-%0HaYP z?JO8aAhHnTN=vIG93!_Pv3`t>#za8#0~wFoxFc>UVe~I<_bz-#=!YSI1qvPE_84GH zUE+)IdvZ{-@tH9IZ#&1#(OP}L>aH_EBJ-=)$#p)r2%a3++**2aVACb}psYS;WQRJo7^icb5~_Q@zN(jTDkfNSGBP{8n|9@S&*d~nJ(YORksotp?ARsReki% z0N!{O77dewxN&QJ44{4TK`e_6i?7A)5h&~^jQvxsk7vUW7! z1;XLtl5j*;bp&1nux}C^-}AANR;?AY#UH=9da%9H!t5>7iQKO?M?%nN_2jN-17t$r z776N0&c*|qwMk(^W(00#!DNS=q?X+gz~xs4+s+i-+Gn(VTy$)hKAxCWmzZwLEv8*7nORtuvujHWfb7W_9L^&d;I8rc8Z(#Is$De zj4j)OM;*SozP&X*I3L;=futek)|M$FfGp~z*4iV08$w~~5U^kWhLKclyy6v&B3^WWQLro{=O3Suo$j&1>ZUnXl zF7&KgvI~o4{FQbm_R+qN2L~Ax?7>w>$I-`;F+pwjukydVU)$bQP~3TN`gOauH3C13 z)&U5{g_~Cj+riiRW<74m2-k*XT6lYp8ekW{Kqlxu5ckajs4FRZrn>~4cZ77LMy zE}A>-eY0IN-$x~0dnHBtts6CxISoi4n+YC>O8h2rh_??an-BI;rkj=R$NRJ*MZZf^ za^QflPxAK@WxqpvawwqGZpwaSSW?*`wLr;`95k^PArFegXQ#Qs-f9r+ZhKV~sT7 zeSxf7J^Cb2_ZXPy#{O2EN`oYL*(5@xjYcMSK1v4T2>5*j@E5B69Y$f?PZGr-<7mmUB<`iN!&mf&1Z=2Qm3QXS!VL=3qsvj3c2$|zR)S=ApBX>zS^i}nh|j)M zhPfll0LHG8Yk+QXtVzjaf^FyFtZy6X3z>XCtM0eZT^3pZAjOEF+hY>8wI`1e&#=}Y z{a#BIv8`u}6xP~zQ_6w#9O<1_?xk3s)^&1y2)cFRUK;F+nOR7MihSQn=3L3}Mo!}b6>^+B_ZuG!ASa=K{k ze2Tu+S!l__+_#bS1?%OW0@cuba7@V5>M6`yEJbxoTZ)ZyT%}_{a#Xm__6akD5>&g- z7tba2@+Qf7&eUE~f^+8C?>_ey4@d+qX*#&gb*GFnP<#TV%Qr5y_B#(Zm3ds!5vslT zR=fGM`w)VF;6uwLr|A0%uz`25L)6U%jd>&(c>S#bW!HPlG6xu)Cl!+^j$gwzRMf@D zRjTRnMRLpujzvn%Ah|{kS~of5c+9li%=T2Rv0dMD>*c}&VXSmM+MnQtkQO3Hf$ejeOnp>C(oVubOF+1k6SL>Q(KRsHSV*}5RM7!1`-u28R?bx8QollN)Y{bN;wCz0(E6o5+1d`D;IdIukzi#5R6OQJ+(B91*E0dk=|7yJqt6T17PK^TA&fyYLYSIItreWzA+XPk7fa))&K zV}l*2`y9QKfwlguv3+bvgFDL#O6iBkhBnk2A|L|555pf#! z=|ke}75-mtr`CJPv{1CM+^}1QZdCSkVU3+d&X-V!)i+lMWvb*0xDZ2I1ZqwkPLWsb zS48X)D*H@Gumrkm;=W?`+m-q{hje*Ue!xv2>_Eh|y6S03Y)V(Z;F9iDNS>3$a&Rhi zRGo@iAomox<+^*F=uN8*CHVqdg~LPLND^w`k!4GgQ~c_OM`{W$)K4Ec6z-4kLzoK- z_y+Rw2AtZbn$hDo5W=B-VH#MTIkHbvQ)q^O9h6cBzQVA0XQxE)n!_0-oh45;QaXzC z(WvjHm?XBO8zwfIZPx!qr}v4Px#RgdyRXCX;rKow8BWpb6hGo-XZeLmoz`MlfgR>c zdU;fyj#efpNwcg8u(e@d=2%aq{`cP97Mdi~J0ERVv{U9bJltHk(*#JFr(|31hyY={rzDFyP!}|Y17?94P3B<~8o(?;J#e$HjsYHKU?-*N@x`PlfBG;f_J;@4XSYzzotXD8{U)Cj zgwBt3v`Hcy#ri2@w> zo~b&hyc0vVZ2}E?yWg-Dgygs66A+mkm8K zJoeXYjMx6QvEfVYw`#c`l`e6Bhwe9fz{zjK154=2lljL4H?yOOx7?`KP|MsJmsdjA z)ZLD>o?URlW;>1C-DYwRO!gr;KcVFz91EsXr(D>=tr5hFQ@DMK_xMUKp>Z&*tP(q> zeoG-|fZ)^Y>RuHSC^4bk- zJU{O=tPL`wt@_*W#BXT>p4|m5+`{;@ z2H?TTX!G-E$0|EkB%B<~NB#%Iu^Sz=bUj~3*E*8U=d)!h^*uCXRKd^JOp~|}3jjW1 z^`u&|*m^ZhrC^^@UGcUmTn(twB)vipFwflgWI1a(Ne+Elf)i}l=vh7}8(Fm~x8U8E zy9b88=^1>i?A*{ix)e1V^=Hf+BrrE~oSH&Kd36F%ua_80GgzkW?4qOGjI-IP`(@U2_80u!QV<1S-BnP4N~qXT zJdE+l-MPtZXG+yI>qUVgT~E=kPA}L1B@I-Eqc~a(U5*yjD5OMjnIqG^T8d(2YoV+K z3PwO4TXPLA)@nT3Z&)gk%jJs8>+ARKEN!mb-CSN--dHZ*-n@H%Y3(-KtXy7I^sWz| zmQCEcrZe30^9YWvC&}dIbmpb_q=v{@VXbQK3F1aO6||lWdS-BKQe`#gT`?9tx|17a z)1{fAHbq;#9IZK(>$vF=a2IGr>@rDL*dkzFX_+Y4g{+C-z4m%|JwO`G@MNfUWL!e2 zA4HA)y)Cvvx%8F(bA=!Rs4&YwsV*{LL*aB<+{KC@u@>@+N;Y6|_YqHX)V$w+bv{aK zAWD!yi~x*BX?$g9V^^;EK6*Dt2|enxyK*q4>$*;!c2SS;1rAm*K zC5S!dmmjW;yV%sdcHW;`_FD;x)f~c15&i8g3Xy`)Bvmt+cD|3wXIs)Wc7WE(fNSrZ zSzC5@^aWle_4X|l!&eQJ@GV&CNVQ;0bTv`*6BcR)?8E9#gJ{%Ryi<4ii#7xmrp6b2 zm6eu{!_UvJv~I*CRdYus*li!>OLm#>3WkXp`Nub+|G=)=Jy6vlt$vme*ccQUL-3DL zqwv=6=oC^iu=c1Fkjqlg@9<_+$O*UoZDxi2Np4RY8&kTh8iFjXG$uZ5tL2_aR15KC zD~*Y7p*276@(wM3q!49Ky)m&`5}(q+n(g6edn=BKcl7`{kL?ze=0Ra!bG63Ac!N9A zxkXZW%51>5YsFamYEBNbzs;6KNDJl0cKuNa8Q5@gbdi0>ieUQ~1m#v zK1zIdze`MD2y4EZ)EJ1$DOM>3Eb(*bvWX*-XyT*7s$gg=j%=ayWa*Jj@DNi6Q8V0 zcDCGZHg#CX2Y3o87~X75nrs1a7zNo%W8&-WOh}R*fe-ynN2M*X4FlDA_U)(`yk_MF zk@@+MXly4<3P-)a>X^7!51uHZmU;*2w_FN|7}91;YP4!_VHbCuS0M?#701LYkHdW+ zs1RdXWmH^5aW?O6>6VjzBhQ4{F8S zIlSqZw5>lzqWuLt%1>bbxsXi*>W+y$i8dGFOlpjYNsQ#im37Xb7vjp)853J3NLYw1 zQ)f(Ui+f2#&z({)#MxJKOw3Z;e*f2PiYrL0RcIjvg)JsPNwNkWian_{CPq8!sk601 z`zWLoKG2P+2peD3-R_>odoW_M2O+|`>Kyg zgRG;!ZQ0h^EFH<^xl>W@Mj<7`8cl#6x2#&e;Zi+@lhIRmOzakG^jRmlB=JI46t)p-QkMf~!y1K@6g3!=4)Y-&yBvYT z#$!O;31D{#KQd%T!QWSVObSf(6@SE{a5xTWHzrl$G;-l1oBrM&(_Z%V@ItB%X*VWS ztRDy73{Xf;QG+q*Fuy$g3P&OOo_b?q)p~DD*(GgvVL>6<-il-5y|s@W^Ph|JUy~?A zJ)rKG*e!`uVOLGicS+D3Vmt@bodkA23oHriC=~S9AC-zEcCLKEex~PMkBVb3XqAo% zF$4pBG|C;tm%}>TXih4}|rxQtu^xQXMD)_p$cD4*yN62ZMo)Nq^qk$}BPqCtqQU2~dJ= z?YW(BC>j0LCqRR-`KXNOtvn|Fd@fI6-}BYR#3@%Vci+z%7x^|Dg~$u)k4i-mHdj6> zRPPGND!SDcmpAV7u*A8c!k!JRJthT;_xnqY3-M;^jEPNiGn?OHnPcq46rwI_FabK! zwclX`X^9A zW#V*xe;#+MExva6QansQYS9fC4`B zbY%QJb;rc+FFq_}wtqh+7NumfuG9zPxRa55+PDy5f7LN@=YtP}FZwH_<|vIPN?+d{ zgGVH-uif}mh2*kf6ofisVzb?V0ILvRuGW|srMG%7UMoaAsPdTjrNpwgycOc^tvDuL zIY8;>RSL1@t4#o>CVh=N=-b6JUpUihW8&oEu7{OYF*5&tOe}WfW-ZqJr`6&3`f84e z*`FuH#V_t-rp}ny{55EW;^NzPrWg*N;T?BEPMg$FvR^;$HZ;9NIkbBD0kT%v?2vG zyes6zks*Anl=?X^Cbd0K#-vz-Wfwyh@-C?{DkelE$0gHWh;$|PYw$s?Q@@O z$4(~|3Q-r-AD0TBbEICc?Q`$so}HH{rebjYF{uz+!!QnILT|+h;AQI0H%)2?b=o$?!nbZrGWsa>1KVTc&~%Hs85-p|}TCo&f&b4%MLq^wpjK1(`jnL-F_2 zod9<6|4_7{(xmX=6&($yuQ(=NsUhS$+}}W;vRxU9zo@~ObV!7?3>k_$TWL&uJ!wE2 z2mY?{AyzVHs*(m{(xI$ke+#j@v*dmu1^rdW#Lf4Cn){7v=Xx>Dw91&cLMCISi6_QA zWY>ov9Z+{n>=GQ)Pjbt?T*%>kwJ~uf_*RM$X6lTIO-3(0kHl49g`MoHIV$FXNGKc? zo_8AZ^l{7B5qm<-Q8Cwg?ltSj*jr;%OumnOQ~72;%EGE+;?|OOnFH)kZWQ87tBi?D zW4WwwULmTa#+aDIQ9kYvKOiSWccO&zY%*7NGt;H$k7m76eMoP9-hFL?18?ptRI7ZU z;!B03P7cMtm%jRsT7DdT%z~ak-*TsNlq8)UOf6@1xMAop9SOq6O{s0yYlWTqD$dBL7~-<4-m-&4FvL~Vkr$^|1gR9*!hQg8J%yY zn+hfVaDI)C{A1z|gjpu5=E-r{lWjYKG-aEQhk8ujBwiYe7#)Q8V(xklcaXer?2poT z()8(rlF?6GioQ@hh5N`#+f1689&TOx+}p<>Ye3^M=_|TAh)mgT+l}wlArv01`Is~o zj?OU3hBX?Ko+EVnt>QsFQtL4(?CX4w;9UR05CV_Vcue|^z=OAkPAI| zj|-6{HO9t7`26}1GAjHLWN5$^D!ns^a^-4m_x88HO9uYnB-;;MVGBMCQfn8eJf}P#%!fA z@$nIQeerh)vZTh?m`oWSjxJkmOq_OR?l6qmN@L=4H!&z3Y$!veoL!|c@!i_jVRQf8 z?eKZ?A*c)Lk4c3o8s>n%uzm>szM5lV)hq};SihA2jfEwG$J31l#)h9s1 z(b4B>P5`stv>i0?nGs8BO#ox|2BB~p;34P-H<)p9}c0Vzv`H{@f5=i97E9NYK@6eIYdXn*;8)(=x!E1eq{g0H9Es91X=U*QsgL70o{j*2}K|2m|*3Z=O!W8#uIGe1CT zu$mZU3`AZ16X#c1jt%O+r}oGYMx``ALkFLtA4K2L+D(kA0rx&Ad;Un26}BCfy0A(Z zd>=&-T}Np(CPms4QU;rDO-OD67{nt_OF{insmRHMU~?B(5jTqKj*8v)DNNpFjANy- zJy1jntB#7hS6dPO8i;ssy-~3`9=fftezzn0c2o>SuwD76P(AzQfiAS{P8_A14UyBn znqy*?R?T{;_lMvfQ1@p`@$I{d?{Ah@Zr!_GUfcW`|9pFSWhwI*UVk*a;p zOPjaW%J-KyzFJy6SiZ5evZ0^xQhA+!@7%k+vAlXaG!3A>k_W}(!d?EkQ|6zg6@$5Y zcYSGdd1Ye>;2X<#S2kDImhLYveL&0d`bJW%e1B=Jd~0cQ^)7XxXz6Adl%=@5^3~0E zm(zMnU)fk%xv_L(^Y-$c<&AaPe`WFZy&FrL@6*{kU|3w=yt#Jw&SrUWWBLA){@h)o z+S<}ad3lA$#iiR|5+#)0gSMpM=0x)Y(OPgQ5x3sprM7_nkw{I`6 zi~4mqL&2S;^>;TH?ryvr3T~_knkS?eCyo}s@_|bqZE7jvm6M!j@Jte`5$Vm)ieYo_Qz`lC=K8zkRhn$9E#JBYEdRK^%*=6e z?@Lzhu25~Uyt;nxHa|>|{OsZ}kpNHNVtMghitjJMA*SQzBD}ptfuAm=*t*U0jq<9= zyMK1vxbeZ=wHuP4mGzA^#DB>if+)M*QFP<(J2k2cCcz4SF0WC+FR;9tu?B(#)F?O z0b{#eYjFwT{QMr5N4B4BKB>h|zu0-mWp-aGe4T{a52?p0_Xt3S*4n8zE5m@$_zRmu zDjfEHp9)vsJ_N$>3IcKc+94o@SFq0j9?ou8t<$Z}&u>*awe3wp35;Vt*SVPEo!SFQ z$#7)#X5&FIh-Bo4SF1Mnx9ahiN?#DNqAqq2t}R%@LKuc}{4=0M9uz-~7?ghcH6 zrR(WC3ez*GY59OtcP^i?q)FtzBs)K^Q)Ov$U*l=BUA>O=Ryr4d!o`~Q80KX^P1g!& zO3RCAx>gd#YoNM!-Tl6rn4-;%yUzGt<+Z7V`T0tLZ9bJfVW(vSK|in{YOj$1;wLnyKvJ&4gD z-S)Gnx%DXCCJjp0;KbZ38SU-!dMl1Pt%q?tz7%a&TAlqmKen0&Qa`w{d?O?Qa2XV7 z($@TZyYg(i(&^4e8xL!pXv^Zu{OELRXtwwu-rg7Km!i&Yt<_Q|9`DEPXT4C2+A(2p zU2eNxX^jBIk5-!#qr?fsG%Jacer&~}yi?oTuXCcbdNE2ycqb;Hz81r=Zs)bv)nc1@ z!T{Fz?on;K)~(amn>tu;(FR77dA@HSFh`x&RI|DtYq(MSQsmKIvkLp8cD%!Iuzu=X zjuz|9PW+}PF9JSb^3^+Tm@k(&acyGfzBxW0z5Ukve#kpftw9%b8$H1FaWno@uu0X+ z(K^DxK-cTF4&|L_ulC@f2?dC|mrLbtB+hiBW&``=1c;tC_bJ(lx)0-MtKF8@Tx&zk#4z1qW&O4Nv-()C<} z1f7@t;~*<>^9cO&%xE_1&!WzLt7R9;!oO&l)8+N3g&c{x4$Q4S!mKy8pFxfzSVPlj zcB5^^hdwbpF@v#Rt0yb>gnngVAge-uZcoZq_RgUh6<#M-gUCsfO^`{3E6iH}^ZR6`h4R z=&q7buhOW7Nh%(?)|ZdshuH+M-l;z|xmk%EBTUAwMyb(kyupmH+Xzkm)E-{@Jp?g%zg{)YdQ%%m_2$zz>bQD! zgtvp-N*$E4CgkX?#vfHVO!b~TFIZM~Kv8uIe`wc@vfuil%VM{!q4hhYc~u#xTuW7xtFw3@ii zcrUFM>k>_Vrp0WVW++JH6O;47f?}q0h9rrvT?WCp zgW3;DZGOAC2j#KWVCjm?7Y1$RCcBqpZ*UUXz)kb^2xl0@Y6b^!@S09-HToH6Py;7F z!AQfOeu~L@`VcoDtG6J%z29h{7c;HtaQ2(^$AOVgvcNrPwd&6->~|a}TFu__UgW(7 z`jy$`80hW|nvd=^b{oy7UhhWTXRY{h>0U!i1j&Q5KhCR_OVO3A>jetmq}ti~i23;R zA#e48G_SzaKN|!SU72swctLRFba2^>Y29Q=Vv-UqGHMS5PZ~}|!M8Ns7v^)~ zOI-?|*#umx85#koE7-d$Mc5*@jan8YaGhql2 zcYO{T>Snw7wYXu))yL6t#pETBfmwSJPaHBLLVWK|A4B!_2w-y9uLMyzz&C zC6%A0C#-@$p01=L{PDndA09`~pii|j8h;?nnN}i~S(fBUi^lmVMDv-|e))yMBS%ZY zgo@TEcv=L$B7M+61)=_WKKg&L=taL0O$Zo74q=EG55BgIPOfUTZoxhg7n@@QQ7CB{ z&BPjAjP!btu6D|hAnfi3?OK;O73+6rl%mRxLU{_QcxO|!*6^8Ld;JoN0`gDyTMybU zhT=Wr1R;^Wm{nX&>!E;_6_7<~oRM&d_ZwN%+e|DuuLLjULD@3JoEKRd+>0C~p5EhO za^y3L$3PUiJhVqnBq0`YSuEeay-;3!-@MQ*I?`aJU#p9oLTstK2`kD;1e{f@51U?n z`;DzfeJPv2+og4oBkLZUCaaGDivJeMhA8fDI`$9^?Vq0d|LX_ zK*M#S*YJ_wVEI(FMKto|7MJls%bc&*FGuATe(nLQUB?b!^?*)9SW{kJ6|>-SiEI=R zfP0x^|9s>ErOx5Z%|jbDbCO*Ze49Nfu#DS;#}l}qw+ijG84w^=MfV-OrV=3djwARkdk2SRmAW(_@D!$a(=%ssh&!K;O|9eNL;m7C4>9a-F(ORGaUp=Wx+pPC2? z{{=m`dLS@&YSmRmj_2oN0wdS2i@|v`#KLP`-i-xx$YPN72r>9DqwD%q2a|v}^kV`H zQf5~!mtJeIntvVAGOKw-3cZIX@4J71GFv-D*jbV=vx2w|+2;vW!2H_POZ?yKCC#Bb zwmn3QGrV`}@2p~ApT$K~nTHC=u~)=GI&IMdkyT@r30WiN)M17(dU5smAPm(g?Rz%J zBT0j)21Vt)a&Y_L7o%mS4g6!ty}>~fK|{U%4BU)b7kO4RS004hQrl6)iT$#qVIz+H)}3NsG-Z;72xiYdk;cS| z7S&ptF0Y~6?gG616kp|Vs7xj3(B@MH0%nj@ERZO|JY`zEHwWvN( zG9PW27ahM5_F9IKS@3ye9|N8*vxlgNyX%yHIu;%aBKd~*T5QhIwfyAvp}P4r3T4r! z{-}q>((h0x3>3C+D=ySUY#1xRHsB@O4&k+5#A4+L{a{vI7-c<#f&XYUfDoydiXF;E ztN!89kyFE&V5gi`?TKvF*xAKU?6dQO>=GR_7XvL*Ysm7j|Knvvz6$}4ty&#rbFt)> z^UCqowuuWPvZ7+!$(5NKh8gYPT)m;K0PD5w2{2u{M*}cUJ8fun!)7B49|3iQR8=%s znYP2shlPUt7njj0BpMLemuHzVGenMH{q}yFtzl#;T{XCvsRwUMq4}`1xwU$4(@jhpU9!6}h!DRI7lgMX-z*#8&v!80dopXC-O394LKo2tw#>7s zJ3r5|iydkgJ9AqzAv{^>>J7v*1-eRzut`gMCVAXW<~TV&ioRxosmbJ)4_b-Zghf~z zYQ_tBZo?=9!xK#-lf*$TS9yh9Mum!VV&mM!l$S05OAd&965F|n!LxQ)Gx?#~Udgpu zVszvCYVZG%8R8;Z8z&78xOglb{Ik@9(!^R;HlR<=Ab(!*B>;+ zCU5*$=n#suMH~*lRHyl&*)a?gM-c%a;#RmYuf(Z9IQzD5GfH2%3YVDbj<2Hg$V09< zmW*hBO#N7JSi72Cb2&CnGK&G2z@)f4KBWxF^``4$DbN2Ux0hqX@HDPlLWa$mD{P#y zbKPx{Zy+zh#v+LKEha33eFg4vmHNRp@2_|kYrP{ArEDb5oP5Jxyx@5?)T$b9ySQ9XCu30XG zgh^HRi(=Jja5(GYnXNuPu`()QP%&-sG8zNi7%k_R>pspGhh~9 zi(83{xm&qJ40%(TMGJM1T1&|#>(x=-d42| z;TXDP))4Zrm9-6?Qw5G93vHNh=>rDQQ-!bbv0aD+;+4Mj#9jRn?d&&P#zuJC6Xu#% zl9pTcDD^16B>t=zGoU)qO+OcY}oj<*E3k`MH1Wgk>2DPVewE>5qE*=?Iawp zdAk)eu@sc`(d!HXUq)Oty!7fk%0&LtcY}ia4r88DD9a$ubdTO$EIB0|nX?tGxuY|d z9vE=jdfItyY%}1Jb)x-7x+53mA*}0=&lv6R65-;=%<&+ExMJ?WaU?hBwI8d#j#1^8 z{yEDrs|vZF-od|ow%28hmXxS0y+s` zvI^_iuzQYVctShB8cxU6l)dq$OfE}tuDdXzd@u{3EipCJ{+E}|F) zMKWlwZ(!(?;v57zrn}1W?M;-OIEUFYl(g$0D(Kq>Z95Q9TDf{9J)ivfr>=C_6FLmI zx|41D1rmEL$>Qo&4_jCJFepbLV)gwaRCb2~d-sNp{$knSltGlWD!n&R1?WHBke#(1+&9(~ERoDF5)y>T;fKBhV+}^sXT0y4V z_#ebo^FtD93W}lH*UPpaFh8y$!KM!}oqHK5~6!r^}k6P0dTcl>+GR(w|iO*comwVgM21=!odMWSAoFF2?J0;0@L}D z3`T~%VbY{U2-VIGR>w?4crB2ca&JGe z;9yWmp+bI=u3y{CPSdMQb=OR@H9l6`Ygck@`)0UP1jnKZ7L3qJLYZL;A7V^>psV;j z*)#P^rK)3OHMEdr3|HqQ(?<%#)+;20#m+-2rQ_3MACobcQ1^RGjHV`=xnY89VVHFK zJ<6!Vqf`ypj!-v9TR+m!d4L!>sa$7DGMGZ8P$afyBbq7W`d%cH5rM?{HAwDL0BNJ* zSGiuI8_ez5;Ali}x^8^LfQ%@1MXIU>MPuNP*X?)cuhT94SG%+98dO+ zqnoEJ)TDOuHnV)`?Lx}5zBhr;{9tD$eD90UU_dAGRVA9qoHoYq07iD8|Jc`aRWe{^}_;F5y%h{ z&Z^m5agRTl=%#F?9uN8YP!IVS5LQP=4#)D2@G;P)?9aQM+S^H;6b1YOBbgF5Qt8{| z6(g|F9ALij*lgh!_gi+nG>bj;zhS~Gx~rMecZqB;@3WCW&Y7e$Uq(@407g0|+19qNuw^Xcc;q?e!6wh2cU>1}JvTwM=oS z+-q4 z6_YNcMK((_GtHcja8sYZ12uIUhQ8JE1m5~v{>(|sER6!ys^q*$!iicWJjg5(LM7-+ zA#t$egGzl@*EwaXCVkO%Kw3E=InfV0xaDC4(efd)> zt;EI7v8V^6wMuEbcEz_d2mcriuYL|{lofuQHiKvhegC|Nmvrgc;@-8NN@a6-Z!fOa z82E6HUQZ5DT5~{!tFR}_*!-USHQ~+-roGMe3ysoOAuDVH--n(_-}SZ54ej-}2M{ns zFb|{mI@+rbV?Vr9435|!^yn&5lZNbq&RN{MdMzB;kZn#z66SLh6ImgI6Dl*^SG(;E z)m!HcH-;vLI#gl&uN_hc$VsrtH+$QC#PaI(dmQ2Q8~$;ct9K1n`zHP(mS$t1_W%Fb zdlNVvtM~E$nlZ*OvTqfIWQ&^TnZ;PbV^{V)(b&em3}dI7kSJ=BLKH=oqEtjBCVQ4h z%D!YNi6|6B{_pF#&pppQ&pb1u&)4Vs|NZ{2|9Q=O&N-?IjC<*X0k$OY!rB9&O|@bG|al2 zJhj1@RL(l!?TWGRH8^nH8LP89@V)dswPxL6ImLQMi{4VohaN`QKXO^W_^PJ!r(nrk z)!dir{Vmg;ym}sx?iVqqqOV!>15JB^**~wDsiruMN>@un10GWvHq>7p>$~3PaPON+FZ`s%mwoQVRiPv*Y|bG<+eVA5N}O~f8T{bKBJ6J?|Ds+ z`2S#FGV|)OZi>&qt1Gstev-oc>SWz}ZQuTsZdJD@f9t_aR-UDE-maaMBj-9RnJNcd zX|;#?%T0ZbfhAumo{gVn56|hyA18mhsNK+dqg;{B9eF$7Y^KQVEOM5(qZ;s%Htuyy z9Ln3wGSrH3mUur->9|48Zi1ekr=B1LD5o7&1AN%h*&J6?M$R#gHgi2uH%HEMS$Dlr zRRYNL>@Sgb?CLAdc#oj9Dm!b7#w4B8>eqS9reE4&R^T@w%V$r-)A7V;c@$rzmBWQ zqx_ufy}`BapoCHW#d_%{(R=4zo8G(xqxT@b7~$VHU6ARPknWMv52sJnJEEB_$tq^i z^RSJ1_{upsToJzFH1euGxiM?ez^A|lBgQ;3-r9a*JhfCOPlknVOx<;cb?+C?T+uB~ zsu?9-pDGH`kS#bkBuK<2m~=MK*q#xs2fHKe+aS|Abysc5?ZEmDMsskJcKg=2Nw)}& zxqMn?bLOXI*VAyA%iX+A9q$K3^^M_}>;2yU&VgFn9{!zaw7JUkpIJv)zi0q)5$ z^rBq0o^~N~pHWe^t{Lwv)FW+mYk)J?_BGhP4=&BX*c~$y^VYTfmQ)q9`><{WZ9QtB z@A(%!5@aO{ToUWOc)_zGzUAJyp)0aY?><9%=o`4xZmlS)qMQ2+id%QDqBkg{@m41x zG9vY=nAHYdWW%f{w$i$J{(y_u`Ii!9L%6{yEg! zztjfk@6x`WQeU)BQ_FlO5pEjp_7$djNKN>=a#q?pzCW*QFz*pe=hw})dC1UIN7kU& zJ1%GIA|uUyHNC$;>KqbSyJ1{=D@}88g$}u^_$k<4(hi`W+V~%`W9@S3s$^fDu#cr9 zxi2$8mq~(mSwv=Vd}?n|TX%Oy)$bp#kL-D0&dP3%y=v30L;9uJC3JVYj24s0q39bO zJ-ta&pa+!MAUpVKbH(y2roIeBcj8ob3q8eiL^JREPwTStOg(9cjEjsM5YLN9%^1e( zx1ZFrqZNr6^nS;V9W{MzinXo)IMzA#>)NoUy?m2Xe|h)HykG3{$-Rd{<~a`Q#m4p$ zv3u=3lnPv=&vhlHF;0IZYc3qQquN<-Pe|3UH&wo6z?_Kmt&5&Ie0|jJB}EawqBQa- zpWK?Dp51%0hi}QjuKy-G|C{XiZ)z~ETvhmjnzc1(&v%>BEI=(vBXGNr=q4fq1D(c> zCZn9DX;oTxO~}~N?V>ny=kBV`&hdn2#@?Lmz^|_zdKhk>476$3S|_gG`G7mxa+~JB zv|;PCBf(K~MA~E1^cpUEw~^RXXSTlsSDG`Ubfs=R;;q9&zUfL#`@9FK=?bH~hw%D) zncv=pj&mfK@fi&pe@AKHZ5O?EdHp+2IRZAJ_0V|zGLnB;R75&+?+VVjQ)Y+Tku)cR zvxpeqDT{7}%#TUw`tGh8Sg-Z4ZvJibp2k?G4F2Z<0kpZ^q-TMR6M2F*-Ps5GbLSb8 ze@$)|`{O>`ppl7(NKV+C&OL7*%pP7UNP>bmV)y>@Mw-*CMqaV!8}trTG^=?emkSb` zc|Ta#STBsFKGf|$|D!ll9G;0{Tkj`OJ&6rC544^@chr!XVd@&FKU4)&^tseK{u1jp zwN^tNH1Tei>o(;XNnW!$G~Q8SZ^yhQb?bRAWTqKs{Utk*PYjqVJZZ`TUq92+VGQh{ zvG>JpvoEH|TT2FeBh#RN>pDtz^S)-@UgxpKIUkPXVk6IV4$bKLS!4v?kxhMWTZh2< zdZN91vUfqc6caO38PLDz7-h+lX;;L%psM0zrw5Appj8nJd?0=k-%N^q=bNI6iIn%PY zHypK??^anwE{C17WzM=hJ?vYQy*94c*4^uPU*BO}B(NMsGKTu2Vfqs5@`6+Gkka%UIq`n7xn#&S93Sb&1_^?B;eQ@~zQ<-gBB} zU3tsJ2=5VI){{8aJ`!$_dKq3Xm(d{{2N)Yy>@e^9 zwwZO_i^zK3m-WEhn(G+v8(AFd*KKm_j$mn;U8!$s-zMj-2wjlYB)?5AV-merVsDc- zx64{$oNe>N7w;wVuKBlXp}Au$?}0X+x2XfJD60zlIQMqBt(uVTd*`=pR3ZZScHgFk zy8}6oyiLws(LK0$Ib_f%bEbH^M#L4PAERzFXqbL)TVK_4yBxdSzBer0!r66Z$1{Pp z(^2+dJ2ur#?4EdE1e0hT&)%;7L`IsalW~Q&X;Hhq*J4sH&sp8zLjG-X?~2q77(dkef^?3r^c}X`So80HLJl-FT`}JGleN&7 zLs>KNHaT`jIksNbp3Pecw@uuhmb)Xk8fLv&_rEaUvBL&-@bYnh!%lY$Ybht``eFv} z9o(E@-R?b9w6$qTy~Qo-(Yd9=T6d)V0zh4^x4+%2Oy-kc|ApP3JKA>cz4_(8P=hO? z+YnxNdt1*@T;|1(dfDzaEk#}cX1$v77JRnuUX{tuX)XuFsTYcF`Rvo>()Eb*tJ`^M zRW?g{y*XOwy~YPHjbv?MlpHdSu=1LtRzUJwKD$ z9q(f;{!iD`$4@6iCE_L!1+~EyqZ?uCBA|8Q$R0ayRgpaK?^Ezq!{yk(C2Hl4;p68+ z*sxna99quP{m{k@FM4%IFB_)2+u2)pM1YFD1<@Hjxum7BT)a&fO5;)+>$P!v#b)5r z7P-7d?RXR5fcVrBwoX-B@qyWq`fIaO>Z+0|w(ebZ+!yYOOmmaA&x~7PsvA};=K#p`GQL=b=%UkKT1;)U8h}?ZJOR`>tP9cYN@Yp>aRZxaPci7&K1kR z@@X=CTYIxX-ls>~>1{donV{C^G)z+x<1F#HbopHR`wDCk#S-$@ba~rpdGfY2)+{eS z#i|Yan(u6-XucZK(YlPAwy9^`Ii{AIfUeC=|eKBu#& zYELk~<-k2@?HaXCcPpEB!p1dh(!7qRNnBhrepadK>@6cXl)KEFx6L{S#%aiXtKGW~ z8(@z^ed*}abVpmi((syYZXk^J477d_&_S%y! zWbdm$TgSv%e?5EFch{}sod1CqX9kne6-YPjh;AS(tIc?T_+gAYuj4bf&R~4pmhCMz+dOH&rbYL+bXe=G zFP_~qLc>G!P7?8)B3a0r^v(;h?lAEdO_~`R-rO$ok5yY`8k}i6&!A@u${re=JtRkH zh-Ax=EjTns2&;+bI9{I&GAoD1)|3u5t3a@K8ml}Ew;Ja%u|6=W`8+1pd*U@;z{G`2 zT!ff)EeMC%xL-CnIJ>qaC?s1*Ht%X0ES@v7Lc{;gt#e;1_icAvE^A=D@4Qdl(t2OH z=lk$bx*6||YSh!-iY7X@hVE1sy4j3sqTe2m@6jqgkp~jEpUxf0hTWP4-tYMivA2aB zxKZLgrm#hgoAimOZ{4EnYi_hx#l_9A)(`q-KjEy^QepFE|KuOgwad5;Sg7^tJ(U3q z)zW*zW!m-FUDbQM%`b~XtqI$X`)Jsjm}Z!}h5a`j?pU9dJ_?c6DE+u+SqXPEr?-kp ztwaw~ZmC_Fn*^#QG9tAW`#9%TYPtn8Z*6XU@WHzQ(_yuL1vaDWn9%M>?~as?s-EM} z!Z}CG-qyQ2%}g!E>&v$x$;e$5OV2t}N$1eo7wP`TH<4X#d;L*$XWP;o1E(uYd)%F- z*cHixUycXs^p!}y3eB3s-o~sss++3dZ>xuJK3iA1W2h_+x}#hz>NZU~3#@Bn>G!J6 zdbpRVZd2_OBd%A{(rfF_?f=Gk+HM3sc29eBKTHb@x_?SI&yTk}nWJijdr4KJE4I4CGMG<$Y-jUhR*v6l=D4w0bj;(29JXt<{q z>qt$JBuFtxt(`k|JSBzm1e>lRI$xRzZOK(1xBz8$L{uZ_b#UEcQPuva^8omTtTFEQ=k zLn5{PKYFFK{|`Iy%)6oCrFjm90S(QrL&~uRgPKhk)@-4{3@ir(*||9L5sKacS#Kxy zknnl-O4YNSnDAa`__APal_9lO*L3XNPSsRt>W0Y`X>D2cN>7tM z-BRUlcgtaYy7yCYV1-DY53Az;83`3edtYmzI~DG_w-xk`E}m^PS+fs{@6oPn|6%+> z>f5xMS2-nGADy6P>kFo-&C&`uQcW19x2kh@N;kB@vdMju1`oHNt+i!>wA{!)xqfTk-YGG%u#mR=Xo^_47o2Z}2oLlDFrP z_8pRGUo4V#*!AAow0exb-u|0LnDH|3))dj8kMDCEjwbk)u0HkbP|_u=uMtW$%c27A zH4pgV62HE1GqRtec7}^IX{A|I#`+QHGcJC0F>Yz~%($fyW>J&%P+f}^z!xM;ncL<4?YcYPq~rIi)VZI!E*UlJi3-)S){0o8>AdJptyifcH{Zy04gylg}{>`AYpNdMW*VWc*k+~j= z#_~5Zb3KN`(wmpLo}QI?+qX4yJ%+&2yO_D2o~e2L6`PxBf7xwVdbKmx8({18&Rnmj zt(Tm+UJqMuHF~k#&(}Pdw{fi}W{#RqaI{ zjYE%1&a)3n@oC@4FD3qw3Lh4iGc^~YhTFKd#lUQn=>Tu%|h@{3d@^%^}lTJuiRvJ1h5o7$;$!r%FV&b~5IA1G)HKKPkCpm&9Ct zT~013Ay0IDS;FrAQJ$R@FY^k;$<*4tC29XnDVNw(LPK4$tzBXHYH^~BInhP>O-YeE zH#U@=y*5bBGl%7|@fGET;TvUP@z6Wq&Z;*TXU68p~pOEN#tI5;9Z>z^ zH!4cPzW1d2*sC&nd3z~Z_$Nte+)k>0e?S&Zh?O$;ZI|z#A0Zvv+$VDHr}A5_yXDTW zkI7uuP3d`0Uzydut1SJyp*;2UekmQlO5A5A%a7~2$c2qNrGHFL>0E2C6gj$2I#fR@ zM`uryJ*CS_`H5%bM2Dubd7E3pP8N~lPi~i@DJ|quiA7TE_~Y_m!6+GDpqq?u6eL$( zd|Z|-e_HPO`FCmbNL|U->sxvE$bNZ0u8#EW`nBXLzd*j7wL(G{{w|$HJT3FrkC(1B zCdu=OBjtlB9c9qIFQoFq?s9qEcA5Ij1u6SwFKN52zHB=XBjp$Gk@a1tN`bFNNJ!a2 zQlPO@Q^w( zwX<917G5oDPUn=VuKVTBp;aX!dvUpgtHY0m^_EJ%c94eeCd<&Dg5`_v%gCQkE|h_d zhREC^7v#n13uVR2f5;)DX=&T4f>h~| zA_Mm46L%xGJlbDsv;W@vQidXtbp`PDKxg2ju=a3e%qWU2@JA9Kocde*2 z?)RjWDEFDX)~AAO-mz4c6>1~NC;G~y1CyoFkQNfMV6BYEF*a&TsiknM%#uhOA%;8Y2D_~QlA{_d9~W@k=mR_A9axORa=-nUXN zzI&H6k6$c%zI;c*Yvq;4NA8sSt__zlFNDbCqC;f!!qzfq;0d|#i^%LpI>^R@tK{9D zpULoDyX2eT67u11m1WATFJ;5B5i+sSLHV=uJlULdS(aXWNRFI)U21h&BfF0dkmN1* zO2tE;$o%`OiG1+7ENlIWe9}HdDpXz}k0w1O2Xicv;qT^=F^|0^MG91u!>cOGU#D-# z?MxI{{Pv_al-$4J_MtE3 zy`o>pwzr>=u)dw-!L~)EoV1mv3tf~Sa!iy$;XULv&s2GC?NK>+qoVY?{}UNAIZCo$ z`bR!p_onpj+gu*0xLBHR>?oD5u91BmXUgR*ugV=wr%K6c3uQt3I4M-?LrIE#Rd$pN zlEFtN%2!7}k#$|JNYnWI5|pE#Oj*8EK1$gwE!#Gdd;ZQNuMXKD^FymkO6_O~Jv>H^ z*WV${D*PqiZ`&$oE_q~ZkE1fX$9_4m)+GyOY>*Kh_DY|Vo8;obg7R6l8q%Ox18F-f zPWF6pMFvjWEK48kEP3jkm*O?+NY{=I(e#<_Rode&HnnT9O=KOu-&s|HTLgF!5`PFB#N?OW^kM5A6pOul* zPj-=^`=6IP3RjY6ishE4dQO+13Poh@=;3nX##(7t|AHJ~-+k^tL3!b`Pi5nb>*88m zPJSD>L8fntk^PI?$%@4*W!H{8Qebjr8Pq;XDz%#|v%Wql-*A`SZ%u=YlqqLL;E$-a{Ol5Uo)Q^8Qe%J7e68& z6njfbRcauQUD_uHM$eQt+oVYIiGNAE(Ccz~)cZ2Ibd1C%#z zW=qRE7Rao~4`s=|Jklq7BZ>d$qC7omkxXhbL#}-jBc-N&EMvw!A~ScDlG<|*%i)G? z<%glwq}MNXXTl}1gM zd|jWDicQ8yQl-13?z#dpscf>0tT9;@Z#*TZ4~>zH)z(Yd%V*`!Ud(}M>m+{u1M=`I zAIcYF!(~Cs!&2@@cj@!P5qW+3owB&XtJ3@H@{;rX3aK}@q%@nkO%ld+m#4~DdD$Z)k4SzGJ_TQzhc`t5Ot~Zp+ z+mbZ1!BxFn*rnx;k<~Rn{_cxaiEEdhkYDoVqC8u!9GqI_3`d?blz-t8sy1rrd3j%G zcqxZLE;Z0Ap1~NPlvBNhi)TA}`Uc~D#D%@rF1`P9T9+~TPua8k(aD2P;=*@e9HRdu zr(Q?(UQMNJo$BPnAMrhTRqp-gefOL9Vkk#T`dfE_0tLh~?m%dG9y_PHG{^HX!XR3- zj<~R1n)P0vwOZ@#J7wophZbEUE*H4965(=3Mn%U|iLL6XQ@39I2IARxkjv)v?-0)~ zB(hsS`g@ii3Ju?$qxI0LL;0LlT%UnG2Wgdhwz+(n_v|Y!uKUQ5UAy%e?sCP%#U=Lc zGaxQimGdu=rRZ)&Hzl2Z6>R(Sv}IZY)xV1Fxj^~}-FO*tdj0b62hy(^7nd-o4-Yr< znPa>4^}X%sfPNF;!^*z)>nBiq4jbsb7U?uFeV7!e4!5(8L2;axcS~EF)&Di7J{^x5 z9|TDQW=2D31dZVlNZS@Zr}ng&<5H<+U3R^O6(J8T6^c+ z4*Y4|8d@+`+J<)E^xd9(2Y3w9`sOR#!v_R(u5+S1{%qf4P5(MNd_PWlYXfeKNje!C z9;s{a%MS*5TQ!b232R+??~~Rr$>i6PSBd65DOmoQeIyHTI@#T@AJo-8)HJ?Gd=;54 z{IHLLBp;}}{zI1g%ETHj8oN&9wR|+O`YnUL`c~O=WKGDcul=C13&^yyUlYetrcGW- zT0?E}8b%r$tz!~tyS=KLGs4o*demPD@{1k%tBt%Za@F@3{dq>-oBVasYM=XKRzy%g zhmdQ#wh`~9Ow%8e-fz;gNuMIEKF5*PaFM*){z6{$uM?|nEIzf}DfGF8@n7C$+2$wK z5Mkuqjl8CjH$t8SI%bm`aWd%+$W*R%K8L=>ADQ?o;0~fl$4NKk+uGTiqcsgbBd+a=Zw8pdKJ@d}8TGqp3M&9p^ z@_7`}8e-A+99PQ;nOL@TSVkMmk!m^b7c4hsV)>lIvcIuh?X6QSLq5s4wO=?a-!hh0 zy>*@o4L_N!UM8mJ9H#q?X)OA&4Ao8YI;8hTTLWMZv5UM)G_OGyekW{-W24ylHpp~? zVCU6W3uCK8qWJ+PA8YcHP2OI7Z=1XhgzB#~dF`I&51G8SS@RdkYtRj%=JUo_ZPmO^ zm50dNWlczHD8I_m?Q3*39|d+<1e4qaZioc+JK5Ok#zXT9jjiSru+^!y6Pd=%t5}n~ zAh8DhKgamj$$!lFQuzWSSD!TiUxdy81Zyw#SU9Y$aCTF+JTs$a0GRbGZz!)~J=LtZ7CSO5Eowav;I(i&{J?gc7+ zYAx&@*y&bY+t}FnC`p;WzK%r~N%%YPOm5fBTF zpbKbSC97F+6B8$zcsa4Q^Ce;pwLi1;em3&m#9Gn;x!o3LeV*hiq2Ub!mF&PmTcNeL zuWl`kIvOL>)vzMz6((JfbP8$DalCyWW_K*#=hjAFE7Z;vBk$iim1`9vaG~)OV!Jv1 z_G+skv+^#~q0QTgA8nEj&NVi_; zCylP=bxW|>l(UiXE=-NRyZ$!TuKzvC_v2G-!ymTly=wC1$g4#2I$1Q<5VFQv|FtbU zkZaJgD4a(F7aXLDRz%p3TzB=hJeIVMm$qNWr5<(IZ69drABlf$&n#2F<|lv#O;&TY*_hEB*;w;6erc=Hb5qmgSJuM(@?$40NV zwt@U*@)~HmcLSrb^KkY%%9oltDtRp39VXv|yh=2$%R}S+pvyyp=Ii0GK5)7v4b?ee zDRTReRppI16-)UiH2hM~bV??%`)aX{r2^XG0j3r`K-GMb$?Hjkt*;v^Et_RpsGCIX z^@rqD{w0bWz(wHwRrEIz1QAvXR7k7}p73-aRsDJ>u~s zkIxZaRC}Zv+Dcux+EN`D&vHsn2I+Wdu`XkqGdS{^(0T3TFI1>=OVfKu@1|Ur>1xs% z4wKgtU)x5@g6dgiT9xK2kynZ4L)Kesx;CW{XT zsbDNZK>+d3*DsMS2{lRcWlnwu!w-v2|3gE>%y1Gp{nmzg%sTH(CC506(N@ zT9@kCv3;!h9c9{`Y~1;wVJUW+cav9%o$qGy7tN#?Yx25wYnybdU~eH#;lqmmRrl;G3AbD_hcn;YF)bw+M?=PBcN zq_LT2Y&7p#{!)(cRY4QfJ*FwdTR}&418N!{Al5GAdemy3mTSHSd6j5>H|Xf<1RI20 z%U?G7xiRL{QlXHZ>64Z#K znrictNNck_sA;t$jk%U-{v~6s`AO*NI@5xaO)Xnwbk&FEj~QLfuK>G?#hO~>wTU(8 zC0x~SMP4PE_aslt5&p-cr!cb@oE^u0#fX`6U~TFP#$A8oE`o9$$tC19{@TQsjNU!X z%)~%%g6hI_O{3e6GHpstVhv-Be1OU8D676sB5jW|Z>M!g)W?ga9`&JRTGw^;2dZQD zCuAEtXVCf=VWaUe6W`t3@^!=b%8j1Ztv)(12Fg~_>R;=zx2|?t+ff@I8nlm^??hfD znpa<4@Y#s8#(I#Va*cH+jY8M9n{E6|K~MdxHGVWd6EtYLF^AQUz@yLvw2sBb=7jN~ z{ZJn_OY(2SRMOO&u#-JM!eOBG4u=si5=Oyj7z1PBNq7pL zh9r0f#=&@)0MEiicn&7PWOyE4fGIE)UWAt*8D55I@Crf8g{{M_y+dCx3Cw!gYRJ6&kZO#YitwFASMvy*b(j7@(B&|W?2XJIBmrA57gDw}H2mf}t z*mEbN<)Y=8Ef?F~j&-?cT9=D0%PPLr<&vQv>Uszwzyz@K z_y{zQGi;+-KL1CQ)Ao$UOXpuS<@WrFAzcLmjhFT%ma?jl(R%-XM1TK>V_%K_Rfig& zLDymJmpw)gBd-be82x{t&;Pa$Ixc&^50YApLv8Rt9jFWSpguGJ-7XGeyQtf^M~HV| zqv7(tAZbW>BhdX#W8z2PQD_29p&2xX7SIw}L2GCOZJ`~shYs)RaiGcXRu!vuI1Cc<+t2`0ny@B&PMsqiAa1j+C+OoLZoI=l+6!3>xQv*2}@4Rb)3 z!zU~Ud+d9V)}Uivk2d;`eKh4QkZaJ`*@rjq_a@v*AO5Ffsr4rv43fFjHxG0S-y(h+ z=EDMb2NuF2SPV-mKADp(D=uKvY1=v+N* z#tX6ccMRuvjl@omWi+fN{V7VHfsT2hcKoDwpK5cgNZIGe*T5IB7S@5*^9XucPdQ=@ zYH?is65H#9%9nHgn}W@kupTzRM%V>YEI0nbz2RH#I;S`((?Z-2w9|Ilz(BCBd`*Dtb{D{p@aK_kf!bZnz z9`Py4H559`H44hl!Y@XzV0%mNEPA;q*N}3AU#KWQ4?0JFCB6U`;WzjlF2QBE0)N1t za22k>U+_0vha2z@+yvn+!XOBSY!Cvx$VGUmoaBHo$O*Y19CE`QkO%TYKFALRpdb{2 z!cYW?LNT}#?t;6aIFx{U;9e*RrJyw22W8-XC=2DFJXC;+@BmbT%J3jO1QFl@H$*}d zL_-Wzfmo;t)u1}mfQO+b)PmZe^KvC)u0e-HFUjlj40H^igkBQMLYHF`(u++xlJpAF z8Z`Fc*Irh2NY@2jR=U0Tx68`j#$>dtv^=wAW!u}aE-Ovzva)4a#kabwvhs7Q<<4bQ zk9O9F2B1O5+&R7tkvD?>>G(FrM-ce03%A|G(@<$MMWbe$Qsy+JNo{ z+Y+~f_Rs+ygO2bxbb`+C1jIoX=nCDSJM@5f=n1``H}rwN&=2~<02l~^AOQx$5YT;w ztAlT!p+D==oPhg`8@g|x-MY^>P5Llt4H_rn%kIli(!)UeqRa8$_QhWIx6+s4)G-1^ zf(C8hDAIOYMw1=`f!d<=jHT>J$Y@;cwqz7Ph3(Uj1R8YwRM)Ow*N7mBk^>1^IM%6jyg7w#F?7`KQ_>|#YiL0{1KpWW z2j8=ZRi_$udb^;8+Gm60b>y?*KOL|C-!9{^o5Q%i0dM}lG`_lwo3M=MQvW=73*LtL zumIkHg|G+~!xDHG-h-vE4Bm$iU^#pUAHm140#?E&unJbgr|=nk4r|~GSPSbQ1-^v! zumLv0CfE#HU@LqD+h9BFfSvF)?1J6!4eWt$VK00K-@`uG4+r2N9D>7e1dhTnI1WF+ z2{;L-;57UQKfxLJ8P38la1PGHuW$h_!f)_9T!PDR1)R(H5AuJ)Rk#L!!QXHlZoofq z6NE>jgCH2PK?r0AUY032APjOsE(nL*a0ldpypRv_LjfoVg`hAL0bR$(vX1LL5t{B! zI*K`<+oRV=YtZeGuKWJmqj|`R;-eVc33tKWP#j9YJ)l0f;79Li)AS@R$1`;I%>cPc>p>iuH1?*Z&8L1l2Z??Lhpfwn8U zqtz}=7bG2vtp;tY_AvtNZI{!B_EE!f^j)Og5D8Hb4KYv!VxcOi|0nQok4FR23rt=6 ziL0Sg9cqC0IsxTslSsVV=;b?SwdrAWv|qeODNVn$O|?MB=ymKg=(5v3`7gsx##e3h z)t3kS`&Y;K3VS?rUyF^ey2e+%0KV!QUn8>cb=ml8V0<+U;H#1GwLJ@8wa;7Q)!6uY zB!I6+jjvLjGVkM9d^JJ0DKrCJMhmdfWi*0#DCHXF5H~k^Er_)|#ZkV7@|LE&l_@{( zD4+8y$EV2KfcN;6xE-{I4)7RsgvX&1bcQD&4!S^B=my=P2gE~9=mou@5A=n8&>sfC zKo|rGFc^kFA`FFLFdRm}NEij9VGN9gC*di08uS{Wwm*sVGcXQxE*9%-jg4L#(K|w& zbJ4ywI3C>zpy65KiSQgug30hayZ{SWcO%U88kreJa1lXhs;^@?!h_Z6JQ6W8QJDp=!)%xXZ-8psEqasmT$pF%YJ42y z0&gLB8|K3TtI(5loEE)9W+5yx!g&aDEhe+X2vQKFw&*yS@psrYUjL2fR8e~mmclZ4 zA3lKP@F9EzAHxb*37^0!SPh@TXYe_!fiGY!tb-Kz64t{8*a(|oGi-sa@D*%>?XUxO z!q>11cEdNY2fl^9@Ev>)`(QsD01cPv$3fDE;4mBkyC1sUy`BBAx8qsGc0U5?+5K>q z>9(K?b6nT;F~r&@4SRnNlB4wJ7#xQm9DO@M`Xro!)9@qw1ZUu9I19hPIXDl$!Uebp zzrpWt2`;4l+t!)1%4!o&$40|m;-ZX6dGsq0 zS0KKdxHy!6d!VB6H5fbl*dX_1%kBYVS1Ev9Wn(wZVW;&v=S{jaHV=V@1XD)@d2O4E z*uQOVWZI|Ajye__yGUaf6~Hdq*!}3RJ8tY^j9rxgcCp5;NStphie0hBqN=g07Qn8$ zv8(N{Yhmna7`ul9*wr+4PdMx*8M|7>u66)BkFgu?uuCy^b&Orz0Cx3^-9m@mRbyA* z*fj`X*U;GQb=XDxVU0^8W7jx<-6O{Cs>80gv3u0mH3?wX)Yuj6;#&^$j9oKh*F1n- z3u9N!VYlDdwKR6E0@$@ScJao}bNM{`r8Y?0hKgsxuk7R6kx@Z==m3vVuz-Tlj$|Gu zvqH5xkx@Zscmm=m*sEGy$aE!hicG_9WK_@{dO$pAnD-}dnIYW^dP5)R3;jS>@egR8 zt`5n>Gtu>|xPa^alxj0Kk|{fYj0y(AAfTC&0E0op5aL9XFRSHHGTQVB7qJ{hMg_xR z1kiLD38O&6XyP#_uRu9;EE(<2Ml!GFdywK6x^^%sR?;~9gzZ&`z zzm3j(&}EoFnTAQo7a(iOrtcl&V;W`lVfJFm7n<@#rhK)dd@JRPP5Ba2e$7#ShVpk! z`Fo~3s+-S$*k82OlrJ;oLmcJhDSzLTe_+Z#aFoxad^z$D;UoAMR=`U51XjUn_!K^a z&tVOG0c&9$q`;T39yWlE-FfQJvD5T-q^D4ihReho(b)u>VGC@9uV5Q&haIpJzJ^_} z8@_=(p#C1{?psE=NuM#ki~k)Y-=eb@z5`uOLnv39hQx&^*HFXgeUHvQ(DK(E<(*9V ze##D*^39I&v8MbWWrs}p6-W6T$`2zy0!KmHabFLs?$wkXLv|c~Fl8-G*%^xi{}FxyEniK!&RY##u3MY*GnDBr`DbGPUGiCE8u}aEUySa# z0J`UqX&pPMLk}%9ea58K#}s`0ip~YNXmoSLv+mxs+Oy_Hko<=Hcen(XLBm!fze4^G z_|wSu8u?Z7*WfQB&y8FUgZ?J3{kl%<->)0UbbE0(^=r`WM4-zG9gMGkjIWykdZ0n?QP9e(#!FqI(r@I;GULT`=aGKjv@Hc zanZvv4Q2kZ#wEL{KQuu7IZXYP@Mj+$_BM85#x7?7JKk&PZPNr}r|oM?x)Zh<<{2OQ zonq~K?f^dSFh1UK*zGrVd5m4&0CxG1>G*$*ora8-WhLfWesl|fwlA@lHLhygg0u$x zABJ8qmn&7LBJx6Je)b^Nc~ua5?L#4A|K(TM_@0TKJ$`eHT@hnfG=N<(WZI6^rX3me zLD!W#(Y*`ob-Ge-9;q_xd<}YkH)X}41l$AnLP;nErQtp(1NTE&CZKy-r=ONah?Tg~S#@0_eo>NI-;SU4_QSSZ6P!e1JG+_m+%qtbo%xA*FzYblE zlZU7#0$kvRNYH9uq&i&;{fU=*D`S&K97TCF#6T6JyVK|{AwFz$djthbEaki%UaCQL zr~wZHZ!MNuP#Zi@2kJsSs1FUGAvA)<@CZB#O`s`g`zrRa+E;+M1$F5V{Ym{AbZ9yt z^9_+#%#$_2(hU3N&;nXQD`*XEpe?k6_Rs+ygO2bxbb`+C1jIoX=nCDSJ7|c&zfRL0 zhkPn8;=EM-n6JaO}gW)g& zM#3l<4P#&|JPA*MhGhKf_&-fv$3KbKfBc_8rsI^WuhkzNr)bg|GMYCdLxN=-cH?0J zJPQ-yIhX{K;rSdK>pvG3Uit+xQ(!8*2%1-3G9;t8U=oTiBbWxxSktc=Mja=op+ac5fQHxdH6v z8M_${yOP#8b_@ON^vcO1W4GU7mu&178@nX|?A|qY ze>m*68oT$5-O>Pd%Zy#Ve!e*`p;rIiH+CNcuv>2IDm(0AjopXF?xO&99~-;I4!Z^?PiQyq54jooL)?sGr8HRQiAcFP@h#d28VvewwG z^Rv_CmtyR8IP6*&yDyF1`T%wtj9qYl-*T8_>^2&^O#$pS8@mz?yA)%$#n^2PVE2`= ztM9P8YV5WdyX^t&b{M+^hh0RNH7+}i-PZx^b{V@j9d^Bq-EL#|O#r(+#_n^6-8^IW zt+Cr1!0tO^chF(C-`IU`?Dhq)+i&b{7(36!m&3xV9YE^OL1c$O!(n27jvzbAc5TJ9 zu<%@tLeFjl1snpgH7`<-$1bpi$*&l5Td*I&o0a$G3YKHka2$Ss6L1nv!D;vreu6Xb zGn|EA;2fNXU*Q5=gx}zIxCEEs3j6_o!d18if5G2y9d5usa1->qg+XwYU$L}J!KAZ6 z2xNy)$N^!H6LLW~~!5OZ0y{Q`X(8>BF3(0 z0J~zwu8G4g#n|0x?CuI+cQ-N}i{992(3biiKdC%-ZmZA5jjs{`eBEPwZOFn`2jlBr z$kDf@qdOm866F~O}%B&(dAZ-*ty(v{L3R# zyB*ls$7gzHKn3I#A>A(nxVBGABkr)q=mGT9e>f6DH3QhyGImQHcB_qDZDZ#NU{}Z3ZE@ILG~rP%0J}EEu9L&Awy|q#?AiseYj5ll9Cjm(T?b?LSOB|@ z$aK5)9CjKq+HP&cmy31rar7gJqaYe$pbEr7C*$k1!V^NBe0bz9Me*neBm)%cq4@D*s=yx92aW_)!I;H!u6^-mVQE*oF* z##he(zIqv7?Gt@{4AidL1*|^yHop1<@YUD&T9JjXDaKbn40AFK`udlN3)yDXG()fBRfUl>Gud>54@8dklJONaBJ(~@Fuo=mU(W~d z^@8#BN*2C$8(&k5uc-liy=Z)ejLf`U#fw;de98Dq4&du$<7;3RzIq#9(~PfI0{EJ4 zeC^D_*9zn7RpaZm0KR4zU-ym5ypK}U>f=n~YgPbXuNz-Ov+&i#_?m5e%?aS^4dZKX z7QSX0UvC;;a|8IAXM8<4I`clBGQQq2zTOVtYrgUITo%3}ido~e!1#J6fUkwd*O@GQ zjWxa&8DEP7_*!Co)gP02AGaD`?;2n41@N`h_?nl6uR?cPeOzXIy&u5W2gcW*S@`N= zd@VP=J`CXNBjc;%*v$L56kmFr^D+7v9p|htzE(MW1v)mlYTC6DeLXh$gxLSsWR>xC z*OQsItKMDKc&#?RJ`LdOGvn*YEPN#!U!NOaYXbQC!ua|w3txwgueHY4x&XdXjIZdY zGVf#gyRANcX?(2@;A?~NH7yHYLyfPE#@D6*zBU_Qm$UGdVtj2ezP1MN^_B6}@afF^ zn7g>u$8E;f_5i+i7+shj>!9&f^qI{2 zxY+nQWPBYC;OmI-H7W~VmyNHZ#@Dd`zK$DTyRz_A=AK~r0o@az*E}kW^Zf+9gR+yz zPr+&U5q^R*@H3o+U*H^^hhO0WT!i1?cen(X;R^f#f5KI`27kfda2;;IKX4QDYlcA( z4A~$AvV&eT>O=dqoehaM(moAmh(jsQ0b2HgqYwI|UKsM6pilPYBG$0u-e5jY%r!H( z1M)y#$OrkM02G8mP#B6pQ78s?!d-AT6o(RU58MkSp%j#c`=AWm4`rbol!ppX5gvd_ zP#GQsy>_bYdWducxWEmOp#ADH-g@Jxu2Z#1YtRu$!A9e&rLF6(Dp%Qq2>;te(Y9#F zpdL@smto=0h4Ec)sRFT36{!p1+;`#&>Gr6TWAOEp#wYy9pQ241fAgth=VTB6}mxp z=mGK26M8{!=mWYGwOxHl_k;d000x4#e~V)&zUNqqld$n$iYm)sWN)inm*ODEs4gAr z70j*#bOyr^NQ9v<42Hu97zv|bG>n0<@FYA1PeT$s1LI&kTxYD*?*!7%!bH%uJl6#4 z>i-XBeDv8DeaEnlkA1agsm^wN&X1ro|2b?YfwK=f-sSM6HX5RMSI%T~o`)A;3QUC; z;U!3hmth)s*D`E1XubOWTxb0%?~T7#(47vig4Xwh)`wifB;wbQ&w!bxe5j*b^=2V| z9kkur_m@naDU{7dJ_l63#K`v}e*@W@p!KaouDTlZT|je@&ogC5wJy{5@@0bME#z;T zvdCwxGWAiIbUw;8{RcM1No&w}KKctlgX+9PdZEepAis$8Vo=+r`0?5X1qBCZ%f>Si zq1m&Cgyaay9vYl2M+grYeH9iSvjpvT;XSp2W$-?H02-DPe+VDJ$Dn!e?8dmj3NkC< z6IcbSDY!^Mo=?eq2A{(kgvs0Z!R!k%YhfLN;;Z=8y6z+`*lMUjycgZ?;Ct8y`$2si0M$=4`kvi8SPln~9)iPg z1dhTnI1UNyISaoS;ckSv&XGB91Q!v6 zruzCiEWEpBG{lw*mS0IgaNB^e-d70)N1ta1~Vl8mRtWyUR(t z!ouf={Dt^$xDGeqAGitnG2tKx1|98?=d3kr%uil!qeE0b!66 zazQxchC3h+ILq?-mE|L!9|}N0CQ^FG{do@kLKT9gGV%wZIg{`q z;s|ho8zLbJq9F#VfbJdDE|zpvs0O;F-KKsCx~11Ie(0RGxAfkp9QC-6&;r})*wlcB zLECf++XXBK4GEOjM6S!LmMJeW$+w(pBhxSwJ&)0=WAqvrJ!)FIf7Ak_HvTqF}r#*_42Sor1=P0(u! z8aIRHCa*FLDHVgI1?iU13R*)O&;{6*SO;r9owOJDMfBStZx0>dG3W@Y|2VPg?{etp zdmvakA@2-NnDUg#zQK({rXd!+E=I4b(YuMB+H2@Q+zokm=wZrhJnvhGBPowZ9s)g0 z`Dn`Rm8};t4fD{`$E*Asj2)dHYqD~FElIRC0v~_`2l1i0>WePS^LEG~p@k@{lFT*r=1*XHR@EXj3nJ^1p zhuJU(-hek@F3f|s;BC-0YCZEwFMxMI=S$A1zUN~uPVu$3B)WmxtB)=(#C8!Zh9&SW zXqbe}d!(1bGSCfk6a4E~lp@xkK6N>0oTPP_L&7zr-^WJh&y3@hAq`<1Z!Jgu zA$$ZMgC35mdZA8m~9?k8{+2)$~n|;q3Z5kY0`Lr|=nk4(ea!Ye=jA zFJLWbe~x6~Z!vc3&`p6aVLhlnm2V)e{x-rUP=9}A;qNMTo6+3@Tj48Ee=6TbTK#Q@ z9iaY-zUUk8K>dw7igYD(G;|=|WpsBN-C2(Ek(7Ufd=GqU z%6B=+XHvcw`FHTWDGz?h=YKWj`;hO41ExIMQNEw@gUAoTVN>4Uly~9O+HFH0bt8zwe_FVOzk_rh(6;ILjiYVaW(~1!Yi#mTruF9|&JWJ|3y?1eS&dC0 zbnN;Ilh*pxe-Y9}!LEOxC?Zkr(Z-~AqZ3N`{gi9S9ci5! zl_g&e%0mTE--pq+Pl;-vR}uLGPzfr-gP?7Bh*SREHYyFw}%vP#Zi@2kJsS zs1FUGA?W;0c+IyB)UWO7QnKf_wr@gIusnk9qoC`FO%w7Ok|}RWx*0Tw7SIw}frdGh zwM4{EP-q~i>0j?^F?i>{7o0%@&R(=VH}`r3%B19p!=M`ORs*sma7L%D{l z#E(gA>kOG`?Qbt*qd~1MV&mWUsOVtnicL4L`>nD1D2fja9nk4cc@Kz( zp3n<)Y#%Z@>Q{aF``6Fn_C~i4=sMe%xF7U~0Wc5-K>`ehA&>||VHgaD5ik-)!Dtu* zW8q173Z8}}cm~G7c$fgs!bEruCc$KQ9$tVcFcn^emmnElhH3B$OovzDHJAZ2VHUg& zvtbUr0dK-wmqGd5VhAiWmWfi8~+W?9FX-HCO*IOSL_UC`HH zZ*zK+SBb9so6$=!E^YnqCE zU2r!PhZ1m4Zr&yFXIS{_A%|-O%e_cSg3h>7#HHarC8e*Ud#6nf52GyYkJPb9V7Ssk0)PcHC59&h$Xb6psfCKo|rGFc^kFA`FFLFdRm}NEij9VGN9gC*di08j|1{7zg8F0z3;7;W?ND zli_)I0j9uIcoANLWYE#kzP(I(8oUD2;Z=AIX249C1+T+w(Al%tF?+6NvK@K>y~{PN z*`u-l7|y}p|Hc^l&z{Wkw>pM8cG{=R#!lVI8Ev zm#`i-z(&{vn_&xVg|A>6Y=<4N6TXIBup7RCJ@75;h40{d*a!RJ033uvprfXJK1})u z9ED?W9DaZka1u_zY4{Oz#ub|F+g`w>q{u zrrOuc##HOnF+Br6!&&$R&M^~rKbtfB`OxcigXKJuUqNT$1>%eUPcL__lRy-OaeOi( z>M#x}Zn!Hdu5rbEokA-^L9NDE`v7z{6edO+TOYvE2e7cD(}Kcx(82}x1^-`y39%ql z-sG2i=H_rsWN?oMJR*Z9JmUqgc*8qB@QE*cBMZaj`w>i7D1i^9C__1H_~D=e zE&`}T6{-)D_)RJ8=g(5k?of(Srzj(T9F$r|sqKv_yfO zwnJW;`Wl-5_HKZB|Ixc*c2lvvQ_plSg?gsH6I~G5SMj(i8a#Y7&9%AV8s05IV3YhUq+)y) b{>P9!vK<~b;vF;l{4_Ibc-O>MYR&us!hnrq literal 0 HcmV?d00001 diff --git a/packages/physics-physx/package.json b/packages/physics-physx/package.json index b6715f440a..792808eb67 100644 --- a/packages/physics-physx/package.json +++ b/packages/physics-physx/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/physics-physx", - "version": "0.5.6", + "version": "0.6.0-alpha.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,7 +14,10 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.5.6", - "@oasis-engine/math": "0.5.6" + "@oasis-engine/design": "0.6.0-alpha.1", + "@oasis-engine/math": "0.6.0-alpha.1" + }, + "publishConfig": { + "access": "public" } } diff --git a/packages/physics-physx/src/PhysXCollider.ts b/packages/physics-physx/src/PhysXCollider.ts index d5dc8f3966..4b9088636f 100644 --- a/packages/physics-physx/src/PhysXCollider.ts +++ b/packages/physics-physx/src/PhysXCollider.ts @@ -25,7 +25,7 @@ export abstract class PhysXCollider implements ICollider { * {@inheritDoc ICollider.removeShape } */ removeShape(shape: PhysXColliderShape): void { - this._pxActor.detachShape(shape._pxShape); + this._pxActor.detachShape(shape._pxShape, true); } /** diff --git a/packages/physics-physx/src/PhysXPhysics.ts b/packages/physics-physx/src/PhysXPhysics.ts index d0b6218a7a..8190a00bd3 100644 --- a/packages/physics-physx/src/PhysXPhysics.ts +++ b/packages/physics-physx/src/PhysXPhysics.ts @@ -62,9 +62,9 @@ export class PhysXPhysics { } if (runtimeMode == PhysXRuntimeMode.JavaScript) { - script.src = "https://lg-2fw0hhsc-1256786476.cos.ap-shanghai.myqcloud.com/phy/physx.release.js"; + script.src = "https://gw.alipayobjects.com/os/lib/oasis-engine/physics-physx/0.6.0-alpha.1/dist/physx.release.js"; } else if (runtimeMode == PhysXRuntimeMode.WebAssembly) { - script.src = "https://lg-2fw0hhsc-1256786476.cos.ap-shanghai.myqcloud.com/phy/physx.release.js"; + script.src = "https://gw.alipayobjects.com/os/lib/oasis-engine/physics-physx/0.6.0-alpha.1/dist/physx.release.js"; } }); diff --git a/packages/rhi-webgl/package.json b/packages/rhi-webgl/package.json index 348b825c29..4f4e1e5699 100755 --- a/packages/rhi-webgl/package.json +++ b/packages/rhi-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/rhi-webgl", - "version": "0.5.7", + "version": "0.6.0-alpha.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,10 +14,10 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.5.7", - "@oasis-engine/math": "0.5.7" + "@oasis-engine/core": "0.6.0-alpha.1", + "@oasis-engine/math": "0.6.0-alpha.1" }, "devDependencies": { - "@oasis-engine/design": "0.5.7" + "@oasis-engine/design": "0.6.0-alpha.1" } } diff --git a/packages/rhi-webgl/src/WebGLRenderer.ts b/packages/rhi-webgl/src/WebGLRenderer.ts index 357b22b5d2..28c57acffa 100644 --- a/packages/rhi-webgl/src/WebGLRenderer.ts +++ b/packages/rhi-webgl/src/WebGLRenderer.ts @@ -70,8 +70,8 @@ export class WebGLRenderer implements IHardwareRenderer { private _activeTextures: GLTexture[] = new Array(32); // cache value - private _lastViewport: Vector4 = new Vector4(undefined, undefined, undefined, undefined); - private _lastClearColor: Color = new Color(undefined, undefined, undefined, undefined); + private _lastViewport: Vector4 = new Vector4(null, null, null, null); + private _lastClearColor: Color = new Color(null, null, null, null); get isWebGL2() { return this._isWebGL2; diff --git a/packages/stats/package.json b/packages/stats/package.json index cb5ea18a34..90f962b2f5 100755 --- a/packages/stats/package.json +++ b/packages/stats/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/stats", - "version": "0.5.7", + "version": "0.6.0-alpha.1", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.5.7" + "oasis-engine": "0.6.0-alpha.1" } } From 28455a80a615cc19e474ba1e34b8b45778479534 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 15 Nov 2021 12:35:05 +0800 Subject: [PATCH 08/91] feat(text): opt code --- packages/core/src/2d/text/TextUtils.ts | 47 +++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 04556d87a6..b3914015e4 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -1,3 +1,4 @@ +import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; import { TextRenderer } from "./TextRenderer"; interface TextContext { @@ -166,8 +167,21 @@ export class TextUtils { } private static _wordWrap(textRenderer: TextRenderer, fontStr: string): Array { + const { width, height, horizontalOverflow, verticalOverflow } = textRenderer; + const isWrap = horizontalOverflow === TextHorizontalOverflow.Wrap; + + // + if (isWrap && width === 0) { + return []; + } + if (verticalOverflow === TextVerticalOverflow.Truncate && height === 0) { + return []; + } + const { context } = TextUtils.textContext(); - const { text, width, height, horizontalOverflow, verticalOverflow } = textRenderer; + const { sprite, text } = textRenderer; + const { pixelsPerUnit } = sprite; + const widthInPixel = width * pixelsPerUnit; const output: Array = []; context.font = fontStr; const textArr = text.split("\n"); @@ -175,10 +189,35 @@ export class TextUtils { for (let i = 0, l = textArr.length; i < l; ++i) { const curText = textArr[i]; const curWidth = Math.ceil(context.measureText(curText).width); - if (curWidth < width) { - output.push(curText); + if (isWrap) { + if (curWidth <= widthInPixel) { + output.push(curText); + } else { + let chars = ''; + let charsWidth = 0; + for (let j = 0, l = curText.length; i < l; ++j) { + const curChar = curText[i]; + const curCharWidth = Math.ceil(context.measureText(curChar).width); + if (charsWidth + curCharWidth > widthInPixel) { + // The width of text renderer is shorter than cur char. + if (charsWidth === 0) { + output.push(curChar); + } else { + output.push(chars); + chars = curChar; + charsWidth = curCharWidth; + } + } else { + chars += curChar; + charsWidth += curCharWidth; + } + } + if (charsWidth > 0) { + output.push(chars); + } + } } else { - + output.push(curText); } } From 99dde83fb59a0c12eec863a185887f24b91dc6d6 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 15 Nov 2021 12:37:39 +0800 Subject: [PATCH 09/91] feat(text): modify version --- packages/design/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/design/package.json b/packages/design/package.json index 47e859e582..31326acac3 100755 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -13,6 +13,6 @@ ], "types": "types/index.d.ts", "dependencies": { - "@oasis-engine/math": "0.5.7" + "@oasis-engine/math": "0.6.0-alpha.1" } } From 80d3fa84f4227f5059c1dbe05900e1c19c3a699c Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 16 Nov 2021 11:30:59 +0800 Subject: [PATCH 10/91] feat(text): fix conflicts --- packages/controls/package.json | 4 ---- packages/core/package.json | 4 ---- packages/core/src/lighting/AmbientLight.ts | 3 --- 3 files changed, 11 deletions(-) diff --git a/packages/controls/package.json b/packages/controls/package.json index 204f26ac22..736ddb7645 100644 --- a/packages/controls/package.json +++ b/packages/controls/package.json @@ -1,10 +1,6 @@ { "name": "@oasis-engine/controls", -<<<<<<< HEAD - "version": "0.6.0-alpha.1", -======= "version": "0.6.0-alpha.3", ->>>>>>> 23f58d7f554c12e833bdf7f02a40259e775c22b2 "license": "MIT", "scripts": { "b:types": "tsc", diff --git a/packages/core/package.json b/packages/core/package.json index e0d94f3893..e9a5762372 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,10 +1,6 @@ { "name": "@oasis-engine/core", -<<<<<<< HEAD - "version": "0.6.0-alpha.1", -======= "version": "0.6.0-alpha.3", ->>>>>>> 23f58d7f554c12e833bdf7f02a40259e775c22b2 "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", diff --git a/packages/core/src/lighting/AmbientLight.ts b/packages/core/src/lighting/AmbientLight.ts index 6a650ce7ed..3d085a71a2 100644 --- a/packages/core/src/lighting/AmbientLight.ts +++ b/packages/core/src/lighting/AmbientLight.ts @@ -166,10 +166,7 @@ export class AmbientLight { this.diffuseIntensity = this._diffuseIntensity; this.specularTexture = this._specularReflection; this.specularIntensity = this._specularIntensity; -<<<<<<< HEAD -======= this.specularTextureDecodeRGBM = this._specularTextureDecodeRGBM; ->>>>>>> 23f58d7f554c12e833bdf7f02a40259e775c22b2 } private _preComputeSH(sh: SphericalHarmonics3, out: Float32Array): Float32Array { From 9a30dbed3dc73700389eed3d44cea2d0cad03524 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 16 Nov 2021 11:40:13 +0800 Subject: [PATCH 11/91] feat: text (#586) * feat(text):add text --- packages/core/src/2d/enums/TextAlignment.ts | 17 ++ packages/core/src/2d/enums/TextOverflow.ts | 15 ++ packages/core/src/2d/index.ts | 3 + packages/core/src/2d/text/TextRenderer.ts | 249 ++++++++++++++++++++ packages/core/src/2d/text/TextUtils.ts | 226 ++++++++++++++++++ packages/core/src/2d/text/index.ts | 1 + packages/core/src/animation/Animator.ts | 1 - packages/design/package.json | 2 +- packages/oasis-engine/src/index.ts | 2 + 9 files changed, 514 insertions(+), 2 deletions(-) create mode 100644 packages/core/src/2d/enums/TextAlignment.ts create mode 100644 packages/core/src/2d/enums/TextOverflow.ts create mode 100644 packages/core/src/2d/text/TextRenderer.ts create mode 100644 packages/core/src/2d/text/TextUtils.ts create mode 100644 packages/core/src/2d/text/index.ts diff --git a/packages/core/src/2d/enums/TextAlignment.ts b/packages/core/src/2d/enums/TextAlignment.ts new file mode 100644 index 0000000000..876d058c3a --- /dev/null +++ b/packages/core/src/2d/enums/TextAlignment.ts @@ -0,0 +1,17 @@ +/** + * Text horizontal alignment. + */ +export enum TextHorizontalAlignment { + Left = 0, + Center = 1, + Right = 2 +} + +/** + * Text vertical alignment. + */ +export enum TextVerticalAlignment { + Top = 0, + Center = 1, + Bottom = 2 +} diff --git a/packages/core/src/2d/enums/TextOverflow.ts b/packages/core/src/2d/enums/TextOverflow.ts new file mode 100644 index 0000000000..669310d997 --- /dev/null +++ b/packages/core/src/2d/enums/TextOverflow.ts @@ -0,0 +1,15 @@ +/** + * Text horizontal overflow. + */ +export enum TextHorizontalOverflow { + Overflow = 0, + Wrap = 1 +} + +/** + * Text vertical overflow. + */ +export enum TextVerticalOverflow { + Overflow = 0, + Truncate = 1 +} diff --git a/packages/core/src/2d/index.ts b/packages/core/src/2d/index.ts index 31ba3b30bd..c28c7dd43f 100644 --- a/packages/core/src/2d/index.ts +++ b/packages/core/src/2d/index.ts @@ -1,4 +1,7 @@ export { SpriteMaskInteraction } from "./enums/SpriteMaskInteraction"; export { SpriteMaskLayer } from "./enums/SpriteMaskLayer"; +export { TextHorizontalAlignment, TextVerticalAlignment } from "./enums/TextAlignment"; +export { TextHorizontalOverflow, TextVerticalOverflow } from "./enums/TextOverflow"; export { SpriteAtlas } from "./atlas/SpriteAtlas"; export * from "./sprite/index"; +export * from "./text/index"; \ No newline at end of file diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts new file mode 100644 index 0000000000..664dc51744 --- /dev/null +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -0,0 +1,249 @@ +import { BoundingBox } from "@oasis-engine/math"; +import { Camera } from "../../Camera"; +import { assignmentClone, ignoreClone } from "../../clone/CloneManager"; +import { Entity } from "../../Entity"; +import { Texture2D } from "../../texture"; +import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; +import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; +import { Sprite, SpriteRenderer } from "../sprite"; +import { TextUtils } from "./TextUtils"; + +export class TextRenderer extends SpriteRenderer { + @assignmentClone + private _text: string = ""; + @assignmentClone + private _width: number = 0; + @assignmentClone + private _height: number = 0; + @assignmentClone + private _fontName: string = "Arial"; + @assignmentClone + private _fontSize: number = 24; + @assignmentClone + private _lineHeight: number = 1; + @assignmentClone + private _isBold: boolean = false; + @assignmentClone + private _isItalic: boolean = false; + @assignmentClone + private _horizontalAlignment: TextHorizontalAlignment = TextHorizontalAlignment.Center; + @assignmentClone + private _verticalAlignment: TextVerticalAlignment = TextVerticalAlignment.Center; + @assignmentClone + private _horizontalOverflow: TextHorizontalOverflow = TextHorizontalOverflow.Wrap; + @assignmentClone + private _verticalOverflow: TextVerticalOverflow = TextVerticalOverflow.Truncate; + @ignoreClone + private _styleDirtyFlag: boolean = true; + + /** + * + */ + get text(): string { + return this._text; + } + + set text(value: string) { + value = value || ""; + if (this._text !== value) { + this._text = value; + this._styleDirtyFlag = true; + } + } + + get width(): number { + return this._width; + } + + set width(value: number) { + if (this._width !== value) { + this._width = value; + this._styleDirtyFlag = true; + } + } + + get height(): number { + return this._height; + } + + set height(value: number) { + if (this._height !== value) { + this._height = value; + this._styleDirtyFlag = true; + } + } + + get fontName(): string { + return this._fontName; + } + + set fontName(value: string) { + value = value || "Arial"; + if (this._fontName !== value) { + this._fontName = value; + this._styleDirtyFlag = true; + } + } + + get fontSize(): number { + return this._fontSize; + } + + set fontSize(value: number) { + if (this._fontSize !== value) { + this._fontSize = value; + this._styleDirtyFlag = true; + } + } + + get lineHeight(): number { + return this._lineHeight; + } + + set lineHeight(value: number) { + if (this._lineHeight !== value) { + this._lineHeight = value; + this._styleDirtyFlag = true; + } + } + + get isBold(): boolean { + return this._isBold; + } + + set isBold(value: boolean) { + if (this._isBold !== value) { + this._isBold = value; + this._styleDirtyFlag = true; + } + } + + get isItalic(): boolean { + return this._isItalic; + } + + set isItalic(value: boolean) { + if (this._isItalic !== value) { + this._isItalic = value; + this._styleDirtyFlag = true; + } + } + + get horizontalAlignment(): TextHorizontalAlignment { + return this._horizontalAlignment; + } + + set horizontalAlignment(value: TextHorizontalAlignment) { + if (this._horizontalAlignment !== value) { + this._horizontalAlignment = value; + this._styleDirtyFlag = true; + } + } + + get verticalAlignment(): TextVerticalAlignment { + return this._verticalAlignment; + } + + set verticalAlignment(value: TextVerticalAlignment) { + if (this._verticalAlignment !== value) { + this._verticalAlignment = value; + this._styleDirtyFlag = true; + } + } + + get horizontalOverflow(): TextHorizontalOverflow { + return this._horizontalOverflow; + } + + set horizontalOverflow(value: TextHorizontalOverflow) { + if (this._horizontalOverflow !== value) { + this._horizontalOverflow = value; + this._styleDirtyFlag = true; + } + } + + get verticalOverflow(): TextVerticalOverflow { + return this._verticalOverflow; + } + + set verticalOverflow(value: TextVerticalOverflow) { + if (this._verticalOverflow !== value) { + this._verticalOverflow = value; + this._styleDirtyFlag = true; + } + } + + constructor(entity: Entity) { + super(entity); + + // const canvas = this._canvas = document.createElement("canvas"); + // this._context = canvas.getContext("2d"); + // canvas.width = canvas.height = 1; + + this.sprite = new Sprite(this.engine); + } + + /** + * @internal + */ + _render(camera: Camera): void { + if (this._styleDirtyFlag) { + this._updateText(); + this._styleDirtyFlag = false; + } + + super._render(camera); + } + + /** + * @override + */ + protected _updateBounds(worldBounds: BoundingBox): void { + const sprite = this.sprite; + if (sprite) { + if (this._customLocalBounds && this._customRootEntity) { + const worldMatrix = this._customRootEntity.transform.worldMatrix; + BoundingBox.transform(this._customLocalBounds, worldMatrix, worldBounds); + } else { + const localBounds = sprite.bounds; + const worldMatrix = this._entity.transform.worldMatrix; + BoundingBox.transform(localBounds, worldMatrix, worldBounds); + } + } else { + worldBounds.min.setValue(0, 0, 0); + worldBounds.max.setValue(0, 0, 0); + } + } + + private _getFontString() { + let str = ""; + if (this.isBold) { + str += "bold "; + } + if (this.isItalic) { + str += "italic "; + } + str += `${this._fontSize}px ${this._fontName}`; + return str; + } + + private _updateText() { + const fontStr = this._getFontString(); + TextUtils.measureText(TextUtils.textContext(), this, fontStr); + this._updateTexture(); + } + + private _updateTexture() { + const textContext = TextUtils.textContext(); + const { canvas, context } = textContext; + const trimData = TextUtils.trimCanvas(textContext); + const { width, height } = trimData; + canvas.width = width; + canvas.height = height; + context.putImageData(trimData.data, 0, 0); + const texture = new Texture2D(this.engine, width, height); + texture.setImageSource(canvas); + texture.generateMipmaps(); + this.sprite.texture = texture; + } +} diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts new file mode 100644 index 0000000000..b3914015e4 --- /dev/null +++ b/packages/core/src/2d/text/TextUtils.ts @@ -0,0 +1,226 @@ +import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; +import { TextRenderer } from "./TextRenderer"; + +interface TextContext { + canvas: HTMLCanvasElement; + context: CanvasRenderingContext2D; +} + +export class TextUtils { + public static TEST_STRING = "qpjÉÅ"; + public static TEST_BASELINE = "M"; + public static HEIGHT_MULTIPLIER = 2; + public static BASELINE_MULTIPLIER = 1.4; + + public static fontSizes: { [font: string]: number } = {}; + private static _textContext: TextContext = null; + + public static textContext(): TextContext { + if (!TextUtils._textContext) { + const canvas = document.createElement("canvas"); + TextUtils._textContext = { + canvas: canvas, + context: canvas.getContext("2d") + }; + } + + return TextUtils._textContext; + } + + public static measureFont(textContext: TextContext, font: string): number { + const { fontSizes } = TextUtils; + if (fontSizes[font]) { + return fontSizes[font]; + } + + const { canvas, context } = textContext; + context.font = font; + const testStr = TextUtils.TEST_STRING; + const width = Math.ceil(context.measureText(testStr).width); + let baseline = Math.ceil(context.measureText(TextUtils.TEST_BASELINE).width); + const height = baseline * TextUtils.HEIGHT_MULTIPLIER; + baseline = Math.floor(TextUtils.BASELINE_MULTIPLIER * baseline); + + canvas.width = width; + canvas.height = height; + + context.font = font; + context.fillStyle = "#000"; + context.clearRect(0, 0, width, height); + context.textBaseline = "alphabetic"; + context.fillStyle = "#f00"; + context.fillText(testStr, 0, baseline); + + const imgData = context.getImageData(0, 0, width, height).data; + const lineDataCount = width * 4; + let flag = false; + let i = 0; + let startIndex = 0; + + for (i = 0; i < baseline; ++i) { + startIndex = i * lineDataCount; + for (let j = 0; j < lineDataCount; j += 4) { + if (imgData[startIndex + j] !== 0) { + flag = true; + break; + } + } + if (flag) { + break; + } + } + + const ascent = baseline - i; + flag = false; + + for (i = height - 1; i >= baseline; --i) { + startIndex = i * lineDataCount; + for (let j = 0; j < lineDataCount; j += 4) { + if (imgData[startIndex + j] !== 255) { + flag = true; + break; + } + } + if (flag) { + break; + } + } + + const descent = i - baseline + 1; + const fontSize = ascent + descent; + TextUtils.fontSizes[font] = fontSize; + return fontSize; + } + + public static measureText(textContext: TextContext, textRenderer: TextRenderer, fontStr: string): void { + const fontSize = TextUtils.measureFont(textContext, fontStr); + // const wrappedTexts = TextUtils._wordWrap(textRenderer, fontStr); + const { text } = textRenderer; + const { canvas, context } = textContext; + context.font = fontStr; + const width = Math.ceil(context.measureText(text || "").width); + canvas.width = width; + canvas.height = fontSize; + context.font = fontStr; + context.clearRect(0, 0, width, fontSize); + context.textBaseline = "top"; + context.fillStyle = '#fff'; + context.fillText(text, 0, 0); + } + + public static trimCanvas(textContext: TextContext): { width: number; height: number; data?: ImageData } { + // https://gist.github.com/remy/784508 + + const { canvas, context } = textContext; + let { width, height } = canvas; + + const imageData = context.getImageData(0, 0, width, height).data; + const len = imageData.length; + + let top = -1; + let bottom = -1; + let left = -1; + let right = -1; + let data = null; + let x; + let y; + + for (let i = 0; i < len; i += 4) { + if (imageData[i + 3] !== 0) { + const idx = i / 4; + x = idx % width; + y = ~~(idx / width); + + if (top === -1) { + top = y; + } + + if (left === -1 || x < left) { + left = x; + } + + if (right === null || x > right) { + right = x; + } + + if (bottom === null || y > bottom) { + bottom = y; + } + } + } + + if (top !== -1) { + top = Math.max(0, top - 1); + bottom = Math.min(height - 1, bottom + 1); + left = Math.max(0, left - 1); + right = Math.min(width - 1, right + 1); + width = right - left + 1; + height = bottom - top + 1; + data = context.getImageData(left, top, width, height); + } + + return { + width, + height, + data + }; + } + + private static _wordWrap(textRenderer: TextRenderer, fontStr: string): Array { + const { width, height, horizontalOverflow, verticalOverflow } = textRenderer; + const isWrap = horizontalOverflow === TextHorizontalOverflow.Wrap; + + // + if (isWrap && width === 0) { + return []; + } + if (verticalOverflow === TextVerticalOverflow.Truncate && height === 0) { + return []; + } + + const { context } = TextUtils.textContext(); + const { sprite, text } = textRenderer; + const { pixelsPerUnit } = sprite; + const widthInPixel = width * pixelsPerUnit; + const output: Array = []; + context.font = fontStr; + const textArr = text.split("\n"); + + for (let i = 0, l = textArr.length; i < l; ++i) { + const curText = textArr[i]; + const curWidth = Math.ceil(context.measureText(curText).width); + if (isWrap) { + if (curWidth <= widthInPixel) { + output.push(curText); + } else { + let chars = ''; + let charsWidth = 0; + for (let j = 0, l = curText.length; i < l; ++j) { + const curChar = curText[i]; + const curCharWidth = Math.ceil(context.measureText(curChar).width); + if (charsWidth + curCharWidth > widthInPixel) { + // The width of text renderer is shorter than cur char. + if (charsWidth === 0) { + output.push(curChar); + } else { + output.push(chars); + chars = curChar; + charsWidth = curCharWidth; + } + } else { + chars += curChar; + charsWidth += curCharWidth; + } + } + if (charsWidth > 0) { + output.push(chars); + } + } + } else { + output.push(curText); + } + } + + return output; + } +} diff --git a/packages/core/src/2d/text/index.ts b/packages/core/src/2d/text/index.ts new file mode 100644 index 0000000000..9db4e3da5d --- /dev/null +++ b/packages/core/src/2d/text/index.ts @@ -0,0 +1 @@ +export { TextRenderer } from "./TextRenderer"; \ No newline at end of file diff --git a/packages/core/src/animation/Animator.ts b/packages/core/src/animation/Animator.ts index d85700ba56..3b2021740d 100644 --- a/packages/core/src/animation/Animator.ts +++ b/packages/core/src/animation/Animator.ts @@ -519,7 +519,6 @@ export class Animator extends Component { let crossWeight = destPlayData.frameTime / (destState._getDuration() * layerData.crossFadeTransition.duration); crossWeight >= 1.0 && (crossWeight = 1.0); - srcPlayData.update(); destPlayData.update(); diff --git a/packages/design/package.json b/packages/design/package.json index 5451b38a5a..8c30228c60 100755 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -13,6 +13,6 @@ ], "types": "types/index.d.ts", "dependencies": { - "@oasis-engine/math": "0.5.2" + "@oasis-engine/math": "0.6.0-alpha.3" } } diff --git a/packages/oasis-engine/src/index.ts b/packages/oasis-engine/src/index.ts index 9da430151f..4fcf81b3af 100644 --- a/packages/oasis-engine/src/index.ts +++ b/packages/oasis-engine/src/index.ts @@ -11,6 +11,7 @@ import { PointLight, SpriteRenderer, SpriteMask, + TextRenderer, Animator, StaticCollider, DynamicCollider @@ -21,6 +22,7 @@ Parser.registerComponents("o3", { GLTFModel, SpriteRenderer, SpriteMask, + TextRenderer, PointLight, AmbientLight, DirectLight, From dbd84ad6a8c404526c8344dfa1530b1c81d41cb3 Mon Sep 17 00:00:00 2001 From: GuoLei Date: Tue, 16 Nov 2021 18:51:29 +0800 Subject: [PATCH 12/91] Dev/0.6 plus (#590) * fix: the bug that inputmanager cannot be obtained --- packages/core/src/Engine.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/core/src/Engine.ts b/packages/core/src/Engine.ts index f4224dc001..e6925f881e 100644 --- a/packages/core/src/Engine.ts +++ b/packages/core/src/Engine.ts @@ -48,6 +48,7 @@ export class Engine extends EventDispatcher { /** Physics manager of Engine. */ readonly physicsManager: PhysicsManager; + readonly inputManager: InputManager; _componentsManager: ComponentsManager = new ComponentsManager(); _hardwareRenderer: IHardwareRenderer; @@ -72,8 +73,6 @@ export class Engine extends EventDispatcher { /** @internal */ _spriteMaskManager: SpriteMaskManager; /** @internal */ - _inputManager: InputManager; - /** @internal */ _macroCollection: ShaderMacroCollection = new ShaderMacroCollection(); protected _canvas: Canvas; @@ -196,7 +195,7 @@ export class Engine extends EventDispatcher { this._spriteDefaultMaterial = this._createSpriteMaterial(); this._spriteMaskDefaultMaterial = this._createSpriteMaskMaterial(); - this._inputManager = new InputManager(this); + this.inputManager = new InputManager(this); const whitePixel = new Uint8Array([255, 255, 255, 255]); @@ -278,7 +277,7 @@ export class Engine extends EventDispatcher { this.physicsManager._update(deltaTime / 1000.0); componentsManager.callColliderOnLateUpdate(); } - this._inputManager._update(); + this.inputManager._update(); componentsManager.callScriptOnUpdate(deltaTime); componentsManager.callAnimationUpdate(deltaTime); componentsManager.callScriptOnLateUpdate(deltaTime); @@ -308,7 +307,7 @@ export class Engine extends EventDispatcher { if (this._sceneManager) { this._whiteTexture2D.destroy(true); this._whiteTextureCube.destroy(true); - this._inputManager._destroy(); + this.inputManager._destroy(); this.trigger(new Event("shutdown", this)); engineFeatureManager.callFeatureMethod(this, "shutdown", [this]); From 1f1b45cc693787b1edc718a3d25467962ef5259a Mon Sep 17 00:00:00 2001 From: GuoLei Date: Fri, 19 Nov 2021 17:04:13 +0800 Subject: [PATCH 13/91] Merge latest main (#596) * fix: dependencies package version (#588) * Fix: the bug that inputmanager cannot be obtained (#589) * fix: the bug that inputmanager cannot be obtained * fix: package.json (#591) * fix: the bug that inputmanager cannot be obtained (#592) * fix: the bug that inputmanager cannot be obtained * v0.6.0 * v0.6.1 * Change Dependency for Physics (#594) * build: physics use oasis-engine dependency Co-authored-by: AZhan Co-authored-by: yangfengzzz Co-authored-by: Hu Song --- lerna.json | 2 +- packages/controls/package.json | 4 ++-- packages/core/package.json | 6 +++--- packages/core/src/index.ts | 1 + packages/core/src/input/index.ts | 3 +++ packages/core/src/input/pointer/PointerManager.ts | 2 +- packages/design/package.json | 4 ++-- packages/draco/package.json | 4 ++-- packages/framebuffer-picker/package.json | 4 ++-- packages/loader/package.json | 10 +++++----- packages/math/package.json | 5 +++-- packages/oasis-engine/package.json | 10 +++++----- packages/physics-lite/package.json | 7 ++++--- packages/physics-lite/src/LiteCollider.ts | 2 +- packages/physics-lite/src/LiteDynamicCollider.ts | 2 +- packages/physics-lite/src/LiteHitResult.ts | 2 +- packages/physics-lite/src/LitePhysics.ts | 2 +- packages/physics-lite/src/LitePhysicsManager.ts | 2 +- packages/physics-lite/src/LiteStaticCollider.ts | 2 +- packages/physics-lite/src/LiteTransform.ts | 2 +- .../physics-lite/src/shape/LiteBoxColliderShape.ts | 2 +- packages/physics-lite/src/shape/LiteColliderShape.ts | 2 +- .../physics-lite/src/shape/LiteSphereColliderShape.ts | 2 +- packages/physics-physx/package.json | 7 ++++--- packages/physics-physx/src/PhysXCollider.ts | 2 +- packages/physics-physx/src/PhysXDynamicCollider.ts | 2 +- packages/physics-physx/src/PhysXPhysics.ts | 2 +- packages/physics-physx/src/PhysXPhysicsManager.ts | 2 +- packages/physics-physx/src/PhysXStaticCollider.ts | 2 +- .../physics-physx/src/shape/PhysXBoxColliderShape.ts | 2 +- .../src/shape/PhysXCapsuleColliderShape.ts | 2 +- packages/physics-physx/src/shape/PhysXColliderShape.ts | 2 +- .../physics-physx/src/shape/PhysXPlaneColliderShape.ts | 2 +- .../src/shape/PhysXSphereColliderShape.ts | 2 +- packages/rhi-webgl/package.json | 8 ++++---- packages/stats/package.json | 4 ++-- 36 files changed, 64 insertions(+), 57 deletions(-) create mode 100644 packages/core/src/input/index.ts diff --git a/lerna.json b/lerna.json index faaf62dc8c..391dc81690 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "npmClient": "npm", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "bootstrap": { "hoist": true }, diff --git a/packages/controls/package.json b/packages/controls/package.json index 736ddb7645..d6a33a001e 100644 --- a/packages/controls/package.json +++ b/packages/controls/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/controls", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "scripts": { "b:types": "tsc", @@ -15,6 +15,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.0-alpha.3" + "oasis-engine": "0.6.1" } } diff --git a/packages/core/package.json b/packages/core/package.json index e9a5762372..eac1e4c42b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/core", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/math": "0.6.0-alpha.3" + "@oasis-engine/math": "0.6.1" }, "devDependencies": { - "@oasis-engine/design": "0.6.0-alpha.3" + "@oasis-engine/design": "0.6.1" } } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 6c36b57f9f..11bd6d0b2e 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -42,6 +42,7 @@ export { Background } from "./Background"; export { BackgroundMode } from "./enums/BackgroundMode"; export { CameraClearFlags } from "./enums/CameraClearFlags"; export { ColorSpace } from "./enums/ColorSpace"; +export * from "./input/index"; export * from "./lighting/index"; export * from "./material/index"; export * from "./texture/index"; diff --git a/packages/core/src/input/index.ts b/packages/core/src/input/index.ts new file mode 100644 index 0000000000..3fe77badb5 --- /dev/null +++ b/packages/core/src/input/index.ts @@ -0,0 +1,3 @@ +export { PointerPhase } from "./enums/PointerPhase"; +export { Pointer } from "./pointer/Pointer"; +export { InputManager } from "./InputManager"; diff --git a/packages/core/src/input/pointer/PointerManager.ts b/packages/core/src/input/pointer/PointerManager.ts index 0def097e52..aabb2f55f1 100644 --- a/packages/core/src/input/pointer/PointerManager.ts +++ b/packages/core/src/input/pointer/PointerManager.ts @@ -128,7 +128,7 @@ export class PointerManager { return -1; } - public _addPointer(pointerId: number, x: number, y: number, phase: PointerPhase): void { + private _addPointer(pointerId: number, x: number, y: number, phase: PointerPhase): void { const { _pointers: pointers } = this; const lastCount = pointers.length; if (lastCount === 0 || this._multiPointerEnabled) { diff --git a/packages/design/package.json b/packages/design/package.json index 8c30228c60..75ca1ef052 100755 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/design", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -13,6 +13,6 @@ ], "types": "types/index.d.ts", "dependencies": { - "@oasis-engine/math": "0.6.0-alpha.3" + "@oasis-engine/math": "0.6.1" } } diff --git a/packages/draco/package.json b/packages/draco/package.json index 4e32ea9805..e219c6990b 100644 --- a/packages/draco/package.json +++ b/packages/draco/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/draco", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "scripts": { "b:types": "tsc" @@ -13,6 +13,6 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.0-alpha.3" + "@oasis-engine/core": "0.6.1" } } diff --git a/packages/framebuffer-picker/package.json b/packages/framebuffer-picker/package.json index f2827ae0ce..502911c8d1 100755 --- a/packages/framebuffer-picker/package.json +++ b/packages/framebuffer-picker/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/framebuffer-picker", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.0-alpha.3" + "oasis-engine": "0.6.1" } } diff --git a/packages/loader/package.json b/packages/loader/package.json index 623ee39fa9..c9e9e3f316 100755 --- a/packages/loader/package.json +++ b/packages/loader/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/loader", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "types": "types/index.d.ts", "scripts": { @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.0-alpha.3", - "@oasis-engine/draco": "0.6.0-alpha.3", - "@oasis-engine/math": "0.6.0-alpha.3", - "@oasis-engine/rhi-webgl": "0.6.0-alpha.3" + "@oasis-engine/core": "0.6.1", + "@oasis-engine/draco": "0.6.1", + "@oasis-engine/math": "0.6.1", + "@oasis-engine/rhi-webgl": "0.6.1" } } diff --git a/packages/math/package.json b/packages/math/package.json index 06612b8c01..538ee44e37 100755 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -1,9 +1,10 @@ { "name": "@oasis-engine/math", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", + "browser": "dist/browser.js", "debug": "src/index.ts", "types": "types/index.d.ts", "scripts": { @@ -14,6 +15,6 @@ "types/**/*" ], "devDependencies": { - "@oasis-engine/design": "0.6.0-alpha.3" + "@oasis-engine/design": "0.6.1" } } diff --git a/packages/oasis-engine/package.json b/packages/oasis-engine/package.json index d97af7dc9b..6f7e418647 100755 --- a/packages/oasis-engine/package.json +++ b/packages/oasis-engine/package.json @@ -1,6 +1,6 @@ { "name": "oasis-engine", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.0-alpha.3", - "@oasis-engine/loader": "0.6.0-alpha.3", - "@oasis-engine/math": "0.6.0-alpha.3", - "@oasis-engine/rhi-webgl": "0.6.0-alpha.3" + "@oasis-engine/core": "0.6.1", + "@oasis-engine/loader": "0.6.1", + "@oasis-engine/math": "0.6.1", + "@oasis-engine/rhi-webgl": "0.6.1" } } diff --git a/packages/physics-lite/package.json b/packages/physics-lite/package.json index 26ab18f9a5..66ad1de8d6 100644 --- a/packages/physics-lite/package.json +++ b/packages/physics-lite/package.json @@ -1,10 +1,11 @@ { "name": "@oasis-engine/physics-lite", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", "debug": "src/index.ts", + "browser": "dist/browser.js", "types": "types/index.d.ts", "scripts": { "b:types": "tsc" @@ -14,8 +15,8 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.6.0-alpha.3", - "@oasis-engine/math": "0.6.0-alpha.3" + "@oasis-engine/design": "0.6.1", + "oasis-engine": "0.6.1" }, "publishConfig": { "access": "public" diff --git a/packages/physics-lite/src/LiteCollider.ts b/packages/physics-lite/src/LiteCollider.ts index 8406b4f951..91df43add7 100644 --- a/packages/physics-lite/src/LiteCollider.ts +++ b/packages/physics-lite/src/LiteCollider.ts @@ -1,5 +1,5 @@ import { ICollider } from "@oasis-engine/design"; -import { Quaternion, Ray, Vector3 } from "@oasis-engine/math"; +import { Quaternion, Ray, Vector3 } from "oasis-engine"; import { LiteHitResult } from "./LiteHitResult"; import { LiteColliderShape } from "./shape/LiteColliderShape"; import { LiteTransform } from "./LiteTransform"; diff --git a/packages/physics-lite/src/LiteDynamicCollider.ts b/packages/physics-lite/src/LiteDynamicCollider.ts index aab2992146..787171ef1c 100644 --- a/packages/physics-lite/src/LiteDynamicCollider.ts +++ b/packages/physics-lite/src/LiteDynamicCollider.ts @@ -1,6 +1,6 @@ import { LiteCollider } from "./LiteCollider"; import { IDynamicCollider } from "@oasis-engine/design"; -import { Quaternion, Vector3 } from "@oasis-engine/math"; +import { Quaternion, Vector3 } from "oasis-engine"; /** * A dynamic collider can act with self-defined movement or physical force diff --git a/packages/physics-lite/src/LiteHitResult.ts b/packages/physics-lite/src/LiteHitResult.ts index 89f0d8ec46..dd4609119d 100644 --- a/packages/physics-lite/src/LiteHitResult.ts +++ b/packages/physics-lite/src/LiteHitResult.ts @@ -1,4 +1,4 @@ -import { Vector3 } from "@oasis-engine/math"; +import { Vector3 } from "oasis-engine"; /** * Structure used to get information back from a raycast or a sweep. diff --git a/packages/physics-lite/src/LitePhysics.ts b/packages/physics-lite/src/LitePhysics.ts index c74301c9d9..6ff494a6c6 100644 --- a/packages/physics-lite/src/LitePhysics.ts +++ b/packages/physics-lite/src/LitePhysics.ts @@ -10,7 +10,7 @@ import { IPlaneColliderShape } from "@oasis-engine/design"; import { StaticInterfaceImplement } from "./StaticInterfaceImplement"; -import { Quaternion, Vector3 } from "@oasis-engine/math"; +import { Quaternion, Vector3 } from "oasis-engine"; import { LiteStaticCollider } from "./LiteStaticCollider"; import { LitePhysicsMaterial } from "./LitePhysicsMaterial"; import { LiteBoxColliderShape } from "./shape/LiteBoxColliderShape"; diff --git a/packages/physics-lite/src/LitePhysicsManager.ts b/packages/physics-lite/src/LitePhysicsManager.ts index 6c501d5e5c..f0ace2454f 100644 --- a/packages/physics-lite/src/LitePhysicsManager.ts +++ b/packages/physics-lite/src/LitePhysicsManager.ts @@ -1,5 +1,5 @@ import { IPhysicsManager } from "@oasis-engine/design"; -import { BoundingBox, BoundingSphere, Ray, Vector3, CollisionUtil } from "@oasis-engine/math"; +import { BoundingBox, BoundingSphere, Ray, Vector3, CollisionUtil } from "oasis-engine"; import { LiteCollider } from "./LiteCollider"; import { LiteHitResult } from "./LiteHitResult"; import { LiteBoxColliderShape } from "./shape/LiteBoxColliderShape"; diff --git a/packages/physics-lite/src/LiteStaticCollider.ts b/packages/physics-lite/src/LiteStaticCollider.ts index 4d6475b7ee..06ceef6f0a 100644 --- a/packages/physics-lite/src/LiteStaticCollider.ts +++ b/packages/physics-lite/src/LiteStaticCollider.ts @@ -1,6 +1,6 @@ import { IStaticCollider } from "@oasis-engine/design"; import { LiteCollider } from "./LiteCollider"; -import { Quaternion, Vector3 } from "@oasis-engine/math"; +import { Quaternion, Vector3 } from "oasis-engine"; /** * A static collider component that will not move. diff --git a/packages/physics-lite/src/LiteTransform.ts b/packages/physics-lite/src/LiteTransform.ts index 40ca3fb0f5..11fd85c619 100644 --- a/packages/physics-lite/src/LiteTransform.ts +++ b/packages/physics-lite/src/LiteTransform.ts @@ -1,4 +1,4 @@ -import { MathUtil, Matrix, Quaternion, Vector3 } from "@oasis-engine/math"; +import { MathUtil, Matrix, Quaternion, Vector3 } from "oasis-engine"; import { LiteUpdateFlagManager } from "./LiteUpdateFlagManager"; import { LiteUpdateFlag } from "./LiteUpdateFlag"; import { LiteColliderShape } from "./shape/LiteColliderShape"; diff --git a/packages/physics-lite/src/shape/LiteBoxColliderShape.ts b/packages/physics-lite/src/shape/LiteBoxColliderShape.ts index ce0d8faa0d..0d080c8285 100644 --- a/packages/physics-lite/src/shape/LiteBoxColliderShape.ts +++ b/packages/physics-lite/src/shape/LiteBoxColliderShape.ts @@ -1,5 +1,5 @@ import { IBoxColliderShape } from "@oasis-engine/design"; -import { BoundingBox, Ray, Vector3 } from "@oasis-engine/math"; +import { BoundingBox, Ray, Vector3 } from "oasis-engine"; import { LiteColliderShape } from "./LiteColliderShape"; import { LiteHitResult } from "../LiteHitResult"; import { LitePhysicsMaterial } from "../LitePhysicsMaterial"; diff --git a/packages/physics-lite/src/shape/LiteColliderShape.ts b/packages/physics-lite/src/shape/LiteColliderShape.ts index c70b1c179b..b65ec01f6f 100644 --- a/packages/physics-lite/src/shape/LiteColliderShape.ts +++ b/packages/physics-lite/src/shape/LiteColliderShape.ts @@ -1,5 +1,5 @@ import { IColliderShape, IPhysicsMaterial } from "@oasis-engine/design"; -import { Matrix, Ray, Vector3 } from "@oasis-engine/math"; +import { Matrix, Ray, Vector3 } from "oasis-engine"; import { LiteHitResult } from "../LiteHitResult"; import { LiteTransform } from "../LiteTransform"; import { LiteCollider } from "../LiteCollider"; diff --git a/packages/physics-lite/src/shape/LiteSphereColliderShape.ts b/packages/physics-lite/src/shape/LiteSphereColliderShape.ts index eea634d039..64ecef805e 100644 --- a/packages/physics-lite/src/shape/LiteSphereColliderShape.ts +++ b/packages/physics-lite/src/shape/LiteSphereColliderShape.ts @@ -1,6 +1,6 @@ import { ISphereColliderShape } from "@oasis-engine/design"; import { LiteColliderShape } from "./LiteColliderShape"; -import { BoundingSphere, Quaternion, Ray, Vector3 } from "@oasis-engine/math"; +import { BoundingSphere, Quaternion, Ray, Vector3 } from "oasis-engine"; import { LiteHitResult } from "../LiteHitResult"; import { LitePhysicsMaterial } from "../LitePhysicsMaterial"; diff --git a/packages/physics-physx/package.json b/packages/physics-physx/package.json index dda86eaa23..0bd73be62b 100644 --- a/packages/physics-physx/package.json +++ b/packages/physics-physx/package.json @@ -1,10 +1,11 @@ { "name": "@oasis-engine/physics-physx", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", "debug": "src/index.ts", + "browser": "dist/browser.js", "types": "types/index.d.ts", "scripts": { "b:types": "tsc" @@ -14,8 +15,8 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.6.0-alpha.3", - "@oasis-engine/math": "0.6.0-alpha.3" + "@oasis-engine/design": "0.6.1", + "oasis-engine": "0.6.1" }, "publishConfig": { "access": "public" diff --git a/packages/physics-physx/src/PhysXCollider.ts b/packages/physics-physx/src/PhysXCollider.ts index 4b9088636f..c84362fdcc 100644 --- a/packages/physics-physx/src/PhysXCollider.ts +++ b/packages/physics-physx/src/PhysXCollider.ts @@ -1,5 +1,5 @@ import { ICollider } from "@oasis-engine/design"; -import { Quaternion, Vector3 } from "@oasis-engine/math"; +import { Quaternion, Vector3 } from "oasis-engine"; import { PhysXColliderShape } from "./shape/PhysXColliderShape"; /** diff --git a/packages/physics-physx/src/PhysXDynamicCollider.ts b/packages/physics-physx/src/PhysXDynamicCollider.ts index fe81239c24..2522e229d5 100644 --- a/packages/physics-physx/src/PhysXDynamicCollider.ts +++ b/packages/physics-physx/src/PhysXDynamicCollider.ts @@ -1,5 +1,5 @@ import { PhysXPhysics } from "./PhysXPhysics"; -import { Quaternion, Vector3 } from "@oasis-engine/math"; +import { Quaternion, Vector3 } from "oasis-engine"; import { IDynamicCollider } from "@oasis-engine/design"; import { PhysXCollider } from "./PhysXCollider"; diff --git a/packages/physics-physx/src/PhysXPhysics.ts b/packages/physics-physx/src/PhysXPhysics.ts index 8190a00bd3..74be99bd90 100644 --- a/packages/physics-physx/src/PhysXPhysics.ts +++ b/packages/physics-physx/src/PhysXPhysics.ts @@ -17,7 +17,7 @@ import { PhysXCapsuleColliderShape } from "./shape/PhysXCapsuleColliderShape"; import { PhysXDynamicCollider } from "./PhysXDynamicCollider"; import { PhysXStaticCollider } from "./PhysXStaticCollider"; import { StaticInterfaceImplement } from "./StaticInterfaceImplement"; -import { Quaternion, Vector3 } from "@oasis-engine/math"; +import { Quaternion, Vector3 } from "oasis-engine"; import { PhysXPlaneColliderShape } from "./shape/PhysXPlaneColliderShape"; import { PhysXRuntimeMode } from "./enum/PhysXRuntimeMode"; diff --git a/packages/physics-physx/src/PhysXPhysicsManager.ts b/packages/physics-physx/src/PhysXPhysicsManager.ts index 938652a2a7..013f981adc 100644 --- a/packages/physics-physx/src/PhysXPhysicsManager.ts +++ b/packages/physics-physx/src/PhysXPhysicsManager.ts @@ -1,5 +1,5 @@ import { PhysXPhysics } from "./PhysXPhysics"; -import { Ray, Vector3 } from "@oasis-engine/math"; +import { Ray, Vector3 } from "oasis-engine"; import { IPhysicsManager } from "@oasis-engine/design"; import { PhysXCollider } from "./PhysXCollider"; import { DisorderedArray } from "./DisorderedArray"; diff --git a/packages/physics-physx/src/PhysXStaticCollider.ts b/packages/physics-physx/src/PhysXStaticCollider.ts index 94ff4f0d1e..f4df71f600 100644 --- a/packages/physics-physx/src/PhysXStaticCollider.ts +++ b/packages/physics-physx/src/PhysXStaticCollider.ts @@ -1,7 +1,7 @@ import { PhysXPhysics } from "./PhysXPhysics"; import { IStaticCollider } from "@oasis-engine/design"; import { PhysXCollider } from "./PhysXCollider"; -import { Quaternion, Vector3 } from "@oasis-engine/math"; +import { Quaternion, Vector3 } from "oasis-engine"; /** * A static collider component that will not move. diff --git a/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts b/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts index a29f6d526c..65cb0c0d8f 100644 --- a/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts @@ -1,5 +1,5 @@ import { IBoxColliderShape } from "@oasis-engine/design"; -import { Vector3 } from "@oasis-engine/math"; +import { Vector3 } from "oasis-engine"; import { PhysXPhysics } from "../PhysXPhysics"; import { PhysXColliderShape } from "./PhysXColliderShape"; import { PhysXPhysicsMaterial } from "../PhysXPhysicsMaterial"; diff --git a/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts b/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts index 7cdb565cb1..b3e373b831 100644 --- a/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts @@ -2,7 +2,7 @@ import { PhysXPhysics } from "../PhysXPhysics"; import { ICapsuleColliderShape } from "@oasis-engine/design"; import { PhysXColliderShape } from "./PhysXColliderShape"; import { PhysXPhysicsMaterial } from "../PhysXPhysicsMaterial"; -import { Vector3 } from "@oasis-engine/math"; +import { Vector3 } from "oasis-engine"; /** * Capsule collider shape in PhysX. diff --git a/packages/physics-physx/src/shape/PhysXColliderShape.ts b/packages/physics-physx/src/shape/PhysXColliderShape.ts index eede1b639a..d72b3f9e82 100644 --- a/packages/physics-physx/src/shape/PhysXColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXColliderShape.ts @@ -1,5 +1,5 @@ import { IColliderShape } from "@oasis-engine/design"; -import { Quaternion, Vector3 } from "@oasis-engine/math"; +import { Quaternion, Vector3 } from "oasis-engine"; import { PhysXPhysicsMaterial } from "../PhysXPhysicsMaterial"; import { PhysXPhysics } from "../PhysXPhysics"; diff --git a/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts b/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts index 9ff1bd4740..9dd59e8e3c 100644 --- a/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts @@ -2,7 +2,7 @@ import { PhysXColliderShape } from "./PhysXColliderShape"; import { IPlaneColliderShape } from "@oasis-engine/design"; import { PhysXPhysicsMaterial } from "../PhysXPhysicsMaterial"; import { PhysXPhysics } from "../PhysXPhysics"; -import { Quaternion, Vector3 } from "@oasis-engine/math"; +import { Quaternion, Vector3 } from "oasis-engine"; /** * Plane collider shape in PhysX. diff --git a/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts b/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts index 5902bf7cd5..71a4c2a32f 100644 --- a/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts @@ -2,7 +2,7 @@ import { PhysXPhysics } from "../PhysXPhysics"; import { ISphereColliderShape } from "@oasis-engine/design"; import { PhysXColliderShape } from "./PhysXColliderShape"; import { PhysXPhysicsMaterial } from "../PhysXPhysicsMaterial"; -import { Vector3 } from "@oasis-engine/math"; +import { Vector3 } from "oasis-engine"; /** * Sphere collider shape in PhysX. diff --git a/packages/rhi-webgl/package.json b/packages/rhi-webgl/package.json index 4805aac6fe..8bf282faf2 100755 --- a/packages/rhi-webgl/package.json +++ b/packages/rhi-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/rhi-webgl", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,10 +14,10 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.0-alpha.3", - "@oasis-engine/math": "0.6.0-alpha.3" + "@oasis-engine/core": "0.6.1", + "@oasis-engine/math": "0.6.1" }, "devDependencies": { - "@oasis-engine/design": "0.6.0-alpha.3" + "@oasis-engine/design": "0.6.1" } } diff --git a/packages/stats/package.json b/packages/stats/package.json index 99ad05927e..2afe3e4f7b 100755 --- a/packages/stats/package.json +++ b/packages/stats/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/stats", - "version": "0.6.0-alpha.3", + "version": "0.6.1", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.0-alpha.3" + "oasis-engine": "0.6.1" } } From 1337de8b4209ec13bcff127c1e468cf89ae52dff Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 22 Nov 2021 17:28:02 +0800 Subject: [PATCH 14/91] feat(text): text renderer handle text is empty (#597) --- packages/core/src/2d/text/TextRenderer.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 664dc51744..b69ffbd9d5 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -187,6 +187,11 @@ export class TextRenderer extends SpriteRenderer { * @internal */ _render(camera: Camera): void { + if (this._text === '') { + this.sprite.texture = null; + return ; + } + if (this._styleDirtyFlag) { this._updateText(); this._styleDirtyFlag = false; From df6ef223b7dda775bcc811151d537fa05859e4a1 Mon Sep 17 00:00:00 2001 From: zhuxudong Date: Wed, 24 Nov 2021 18:21:47 +0800 Subject: [PATCH 15/91] Plus/ibl rotation (#599) * feat: add ibl rotation * feat: use matrix instead Co-authored-by: shensi.zxd --- packages/core/src/lighting/AmbientLight.ts | 15 ++++++++++++++- .../core/src/shaderlib/light_frag_define.glsl | 1 + .../core/src/shaderlib/pbr/ibl_frag_define.glsl | 3 ++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/core/src/lighting/AmbientLight.ts b/packages/core/src/lighting/AmbientLight.ts index 3d085a71a2..0b812e3cee 100644 --- a/packages/core/src/lighting/AmbientLight.ts +++ b/packages/core/src/lighting/AmbientLight.ts @@ -1,4 +1,4 @@ -import { Color, SphericalHarmonics3 } from "@oasis-engine/math"; +import { Color, Matrix, SphericalHarmonics3 } from "@oasis-engine/math"; import { Scene } from "../Scene"; import { Shader } from "../shader"; import { ShaderMacro } from "../shader/ShaderMacro"; @@ -32,6 +32,17 @@ export class AmbientLight { private _shArray: Float32Array = new Float32Array(27); private _scene: Scene; private _specularTextureDecodeRGBM: boolean = false; + private _rotationMatrix: Matrix = new Matrix(); + + set rotationMatrix(value: Matrix) { + if (this._rotationMatrix !== value) { + value.cloneTo(this._rotationMatrix); + } + + if (!this._scene) return; + + this._scene.shaderData.setMatrix("u_envMapLight.modelMatrix", this._rotationMatrix); + } /** * Whether to decode from specularTexture with RGBM format. @@ -167,6 +178,8 @@ export class AmbientLight { this.specularTexture = this._specularReflection; this.specularIntensity = this._specularIntensity; this.specularTextureDecodeRGBM = this._specularTextureDecodeRGBM; + // this.rotation = this._rotation; + this.rotationMatrix = this._rotationMatrix; } private _preComputeSH(sh: SphericalHarmonics3, out: Float32Array): Float32Array { diff --git a/packages/core/src/shaderlib/light_frag_define.glsl b/packages/core/src/shaderlib/light_frag_define.glsl index 0ad68848fb..a7a7fc6ec5 100644 --- a/packages/core/src/shaderlib/light_frag_define.glsl +++ b/packages/core/src/shaderlib/light_frag_define.glsl @@ -55,6 +55,7 @@ struct EnvMapLight { float mipMapLevel; float diffuseIntensity; float specularIntensity; + mat4 modelMatrix; }; diff --git a/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl b/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl index 1a4a3ff8ff..052155c398 100644 --- a/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl +++ b/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl @@ -51,7 +51,8 @@ vec3 getLightProbeRadiance(GeometricContext geometry, float roughness, int maxMI #else vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal ); - + reflectVec = mat3(u_envMapLight.modelMatrix) * reflectVec; + float specularMIPLevel = getSpecularMIPLevel(roughness, maxMIPLevel ); #ifdef HAS_TEX_LOD From d56ed3db099c3e9aeda29c1e1427b912c43ff0f3 Mon Sep 17 00:00:00 2001 From: yangfengzzz Date: Wed, 1 Dec 2021 17:08:03 +0800 Subject: [PATCH 16/91] fix: stop use collison detection i n lite package (#606) --- packages/physics-lite/src/LitePhysicsManager.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/physics-lite/src/LitePhysicsManager.ts b/packages/physics-lite/src/LitePhysicsManager.ts index f0ace2454f..4d3b1542b8 100644 --- a/packages/physics-lite/src/LitePhysicsManager.ts +++ b/packages/physics-lite/src/LitePhysicsManager.ts @@ -89,11 +89,11 @@ export class LitePhysicsManager implements IPhysicsManager { * {@inheritDoc IPhysicsManager.update } */ update(deltaTime: number): void { - let colliders = this._colliders; - for (let i = 0, len = colliders.length; i < len; i++) { - this._collisionDetection(deltaTime, colliders[i]); - } - this._fireEvent(); + // let colliders = this._colliders; + // for (let i = 0, len = colliders.length; i < len; i++) { + // this._collisionDetection(deltaTime, colliders[i]); + // } + // this._fireEvent(); } /** From 565c59dc14635b6e10031180ba0af4325b7dcda0 Mon Sep 17 00:00:00 2001 From: GuoLei Date: Tue, 7 Dec 2021 16:36:06 +0800 Subject: [PATCH 17/91] Merge latest `main` to `dev/0.6-plus` (#612) * fix: dependencies package version (#588) * Fix: the bug that inputmanager cannot be obtained (#589) * fix: the bug that inputmanager cannot be obtained * fix: package.json (#591) * fix: the bug that inputmanager cannot be obtained (#592) * fix: the bug that inputmanager cannot be obtained * v0.6.0 * v0.6.1 * Change Dependency for Physics (#594) * build: physics use oasis-engine dependency * v0.6.2 * fix: use canvas as control precision (#601) Co-authored-by: shensi.zxd * v0.6.3 * fix: `worldToViewportPoint()` bug (#603) * fix: raycast bug, global and local transform misused (#602) * fix: set trilinear filter mode by default (#610) Co-authored-by: shensi.zxd * fix: add transparent channel (#611) Co-authored-by: shensi.zxd * optimization viewportToWorldPoint and screenToWorldPoint (#604) * fix: `worldToViewportPoint()` bug * fix: `screenToViewportPoint()` bug * refactor: opt `viewportToWorldPoint` and `screenToWorldPoint` * fix: front face bug * refactor: revert code * refactor: revert code Co-authored-by: AZhan Co-authored-by: yangfengzzz Co-authored-by: Hu Song Co-authored-by: zhuxudong Co-authored-by: shensi.zxd --- lerna.json | 2 +- packages/controls/package.json | 4 ++-- packages/controls/src/OrbitControl.ts | 18 ++++++------------ packages/core/package.json | 6 +++--- .../src/RenderPipeline/BasicRenderPipeline.ts | 4 ++-- .../core/src/RenderPipeline/RenderQueue.ts | 3 ++- .../core/src/RenderPipeline/SpriteBatcher.ts | 2 +- .../src/RenderPipeline/SpriteMaskBatcher.ts | 2 +- packages/core/src/Transform.ts | 11 +++++++++++ packages/core/src/shader/state/RasterState.ts | 17 ++++++++++++++--- packages/core/src/shader/state/RenderState.ts | 8 +++++--- packages/core/src/shaderlib/pbr/pbr_frag.glsl | 2 +- .../src/shaderlib/pbr/pbr_frag_define.glsl | 1 + .../core/src/shaderlib/pbr/pbr_helper.glsl | 1 + packages/design/package.json | 4 ++-- packages/draco/package.json | 4 ++-- packages/framebuffer-picker/package.json | 4 ++-- packages/loader/package.json | 10 +++++----- packages/loader/src/EnvLoader.ts | 4 +++- packages/math/package.json | 4 ++-- packages/math/src/Matrix.ts | 6 +++--- packages/oasis-engine/package.json | 10 +++++----- packages/physics-lite/package.json | 6 +++--- .../src/shape/LiteBoxColliderShape.ts | 4 ++-- .../src/shape/LiteSphereColliderShape.ts | 5 ++--- packages/physics-physx/package.json | 6 +++--- packages/rhi-webgl/package.json | 8 ++++---- packages/stats/package.json | 4 ++-- 28 files changed, 91 insertions(+), 69 deletions(-) diff --git a/lerna.json b/lerna.json index 391dc81690..8a53ff4a6b 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "npmClient": "npm", - "version": "0.6.1", + "version": "0.6.3", "bootstrap": { "hoist": true }, diff --git a/packages/controls/package.json b/packages/controls/package.json index d6a33a001e..b7ec52939d 100644 --- a/packages/controls/package.json +++ b/packages/controls/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/controls", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "scripts": { "b:types": "tsc", @@ -15,6 +15,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.1" + "oasis-engine": "0.6.3" } } diff --git a/packages/controls/src/OrbitControl.ts b/packages/controls/src/OrbitControl.ts index b319a898da..e68e0fe2aa 100644 --- a/packages/controls/src/OrbitControl.ts +++ b/packages/controls/src/OrbitControl.ts @@ -399,8 +399,6 @@ export class OrbitControl extends Script { * @param deltaY - The amount of translation from the screen distance in the y direction */ pan(deltaX: number, deltaY: number) { - const element = this.domElement === document ? this.domElement.body : (this.domElement as HTMLElement); - // perspective only const position: Vector3 = this.camera.position; position.cloneTo(this._vPan); @@ -409,8 +407,8 @@ export class OrbitControl extends Script { targetDistance *= (this.fov / 2) * (Math.PI / 180); - this.panLeft(-2 * deltaX * (targetDistance / element.clientHeight), this.camera.transform.worldMatrix); - this.panUp(2 * deltaY * (targetDistance / element.clientHeight), this.camera.transform.worldMatrix); + this.panLeft(-2 * deltaX * (targetDistance / this.mainElement.clientHeight), this.camera.transform.worldMatrix); + this.panUp(2 * deltaY * (targetDistance / this.mainElement.clientHeight), this.camera.transform.worldMatrix); } /** @@ -457,10 +455,8 @@ export class OrbitControl extends Script { this._rotateEnd.setValue(event.clientX, event.clientY); Vector2.subtract(this._rotateEnd, this._rotateStart, this._rotateDelta); - const element = this.domElement === document ? document.body : (this.domElement as HTMLElement); - - this.rotateLeft(2 * Math.PI * (this._rotateDelta.x / element.clientWidth) * this.rotateSpeed); - this.rotateUp(2 * Math.PI * (this._rotateDelta.y / element.clientHeight) * this.rotateSpeed); + this.rotateLeft(2 * Math.PI * (this._rotateDelta.x / this.mainElement.clientWidth) * this.rotateSpeed); + this.rotateUp(2 * Math.PI * (this._rotateDelta.y / this.mainElement.clientHeight) * this.rotateSpeed); this._rotateEnd.cloneTo(this._rotateStart); } @@ -557,10 +553,8 @@ export class OrbitControl extends Script { this._rotateEnd.setValue(event.touches[0].pageX, event.touches[0].pageY); Vector2.subtract(this._rotateEnd, this._rotateStart, this._rotateDelta); - const element = this.domElement === document ? this.domElement.body : (this.domElement as HTMLElement); - - this.rotateLeft(((2 * Math.PI * this._rotateDelta.x) / element.clientWidth) * this.rotateSpeed); - this.rotateUp(((2 * Math.PI * this._rotateDelta.y) / element.clientHeight) * this.rotateSpeed); + this.rotateLeft(((2 * Math.PI * this._rotateDelta.x) / this.mainElement.clientWidth) * this.rotateSpeed); + this.rotateUp(((2 * Math.PI * this._rotateDelta.y) / this.mainElement.clientHeight) * this.rotateSpeed); this._rotateEnd.cloneTo(this._rotateStart); } diff --git a/packages/core/package.json b/packages/core/package.json index eac1e4c42b..f0f7a413db 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/core", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/math": "0.6.1" + "@oasis-engine/math": "0.6.3" }, "devDependencies": { - "@oasis-engine/design": "0.6.1" + "@oasis-engine/design": "0.6.3" } } diff --git a/packages/core/src/RenderPipeline/BasicRenderPipeline.ts b/packages/core/src/RenderPipeline/BasicRenderPipeline.ts index 345c14740f..b58ded5e26 100644 --- a/packages/core/src/RenderPipeline/BasicRenderPipeline.ts +++ b/packages/core/src/RenderPipeline/BasicRenderPipeline.ts @@ -229,7 +229,7 @@ export class BasicRenderPipeline { program.uploadAll(program.materialUniformBlock, _backgroundTextureMaterial.shaderData); program.uploadUngroupTextures(); - _backgroundTextureMaterial.renderState._apply(engine); + _backgroundTextureMaterial.renderState._apply(engine, false); rhi.drawPrimitive(mesh, mesh.subMesh, program); } @@ -263,7 +263,7 @@ export class BasicRenderPipeline { program.uploadAll(program.materialUniformBlock, shaderData); program.uploadUngroupTextures(); - renderState._apply(engine); + renderState._apply(engine, false); rhi.drawPrimitive(mesh, mesh.subMesh, program); } } diff --git a/packages/core/src/RenderPipeline/RenderQueue.ts b/packages/core/src/RenderPipeline/RenderQueue.ts index f07ac02cbd..fedfadf825 100644 --- a/packages/core/src/RenderPipeline/RenderQueue.ts +++ b/packages/core/src/RenderPipeline/RenderQueue.ts @@ -137,7 +137,8 @@ export class RenderQueue { program.uploadUngroupTextures(); } } - material.renderState._apply(camera.engine); + material.renderState._apply(camera.engine,element.component.entity.transform._isFrontFaceInvert()); + rhi.drawPrimitive(element.mesh, element.subMesh, program); } else { const spriteElement = item; diff --git a/packages/core/src/RenderPipeline/SpriteBatcher.ts b/packages/core/src/RenderPipeline/SpriteBatcher.ts index 828ecc8657..c382bfbca0 100644 --- a/packages/core/src/RenderPipeline/SpriteBatcher.ts +++ b/packages/core/src/RenderPipeline/SpriteBatcher.ts @@ -113,7 +113,7 @@ export class SpriteBatcher extends Basic2DBatcher { program.uploadAll(program.rendererUniformBlock, renderer.shaderData); program.uploadAll(program.materialUniformBlock, material.shaderData); - material.renderState._apply(engine); + material.renderState._apply(engine,false); engine._hardwareRenderer.drawPrimitive(mesh, subMesh, program); diff --git a/packages/core/src/RenderPipeline/SpriteMaskBatcher.ts b/packages/core/src/RenderPipeline/SpriteMaskBatcher.ts index 2c95387d82..4236e6533c 100644 --- a/packages/core/src/RenderPipeline/SpriteMaskBatcher.ts +++ b/packages/core/src/RenderPipeline/SpriteMaskBatcher.ts @@ -93,7 +93,7 @@ export class SpriteMaskBatcher extends Basic2DBatcher { program.uploadAll(program.rendererUniformBlock, renderer.shaderData); program.uploadAll(program.materialUniformBlock, material.shaderData); - material.renderState._apply(engine); + material.renderState._apply(engine, false); engine._hardwareRenderer.drawPrimitive(mesh, subMesh, program); } diff --git a/packages/core/src/Transform.ts b/packages/core/src/Transform.ts index 8ed7b43983..757a4fa0dc 100644 --- a/packages/core/src/Transform.ts +++ b/packages/core/src/Transform.ts @@ -518,6 +518,17 @@ export class Transform extends Component { this._updateAllWorldFlag(); } + /** + * @internal + */ + _isFrontFaceInvert(): boolean { + const scale = this.lossyWorldScale; + let isInvert = scale.x < 0; + scale.y < 0 && (isInvert = !isInvert); + scale.z < 0 && (isInvert = !isInvert); + return isInvert; + } + /** * Get worldMatrix: Will trigger the worldMatrix update of itself and all parent entities. * Get worldPosition: Will trigger the worldMatrix, local position update of itself and the worldMatrix update of all parent entities. diff --git a/packages/core/src/shader/state/RasterState.ts b/packages/core/src/shader/state/RasterState.ts index b17345459e..4c53588a2e 100644 --- a/packages/core/src/shader/state/RasterState.ts +++ b/packages/core/src/shader/state/RasterState.ts @@ -15,15 +15,17 @@ export class RasterState { /** @internal */ _cullFaceEnable: boolean = true; + /** @internal */ + _frontFaceInvert: boolean = false; /** * @internal */ - _apply(hardwareRenderer: IHardwareRenderer, lastRenderState: RenderState): void { - this._platformApply(hardwareRenderer, lastRenderState.rasterState); + _apply(hardwareRenderer: IHardwareRenderer, lastRenderState: RenderState, frontFaceInvert: boolean): void { + this._platformApply(hardwareRenderer, lastRenderState.rasterState, frontFaceInvert); } - private _platformApply(rhi: IHardwareRenderer, lastState: RasterState): void { + private _platformApply(rhi: IHardwareRenderer, lastState: RasterState, frontFaceInvert: boolean): void { const gl = rhi.gl; const { cullMode, depthBias, slopeScaledDepthBias } = this; @@ -49,6 +51,15 @@ export class RasterState { } } + if (frontFaceInvert !== lastState._frontFaceInvert) { + if (frontFaceInvert) { + gl.frontFace(gl.CW); + } else { + gl.frontFace(gl.CCW); + } + lastState._frontFaceInvert == frontFaceInvert; + } + // apply polygonOffset. if (depthBias !== lastState.depthBias || slopeScaledDepthBias !== lastState.slopeScaledDepthBias) { if (depthBias !== 0 || slopeScaledDepthBias !== 0) { diff --git a/packages/core/src/shader/state/RenderState.ts b/packages/core/src/shader/state/RenderState.ts index 00044705e0..127d25235a 100644 --- a/packages/core/src/shader/state/RenderState.ts +++ b/packages/core/src/shader/state/RenderState.ts @@ -17,13 +17,15 @@ export class RenderState { /** Raster state. */ readonly rasterState: RasterState = new RasterState(); - /** @internal */ - _apply(engine: Engine): void { + /** + * @internal + */ + _apply(engine: Engine, frontFaceInvert: boolean): void { const hardwareRenderer = engine._hardwareRenderer; const lastRenderState = engine._lastRenderState; this.blendState._apply(hardwareRenderer, lastRenderState); this.depthState._apply(hardwareRenderer, lastRenderState); this.stencilState._apply(hardwareRenderer, lastRenderState); - this.rasterState._apply(hardwareRenderer, lastRenderState); + this.rasterState._apply(hardwareRenderer, lastRenderState, frontFaceInvert); } } diff --git a/packages/core/src/shaderlib/pbr/pbr_frag.glsl b/packages/core/src/shaderlib/pbr/pbr_frag.glsl index 5391c69dc8..be129ebba1 100644 --- a/packages/core/src/shaderlib/pbr/pbr_frag.glsl +++ b/packages/core/src/shaderlib/pbr/pbr_frag.glsl @@ -50,7 +50,7 @@ vec3 totalRadiance = reflectedLight.directDiffuse + reflectedLight.indirectSpecular + emissiveRadiance; -vec4 targetColor =vec4(totalRadiance, u_baseColor.a); +vec4 targetColor =vec4(totalRadiance, material.opacity); #ifndef OASIS_COLORSPACE_GAMMA targetColor = linearToGamma(targetColor); #endif diff --git a/packages/core/src/shaderlib/pbr/pbr_frag_define.glsl b/packages/core/src/shaderlib/pbr/pbr_frag_define.glsl index 58f94996ff..6ddb7d742c 100644 --- a/packages/core/src/shaderlib/pbr/pbr_frag_define.glsl +++ b/packages/core/src/shaderlib/pbr/pbr_frag_define.glsl @@ -52,4 +52,5 @@ struct PhysicalMaterial { vec3 diffuseColor; float roughness; vec3 specularColor; + float opacity; }; diff --git a/packages/core/src/shaderlib/pbr/pbr_helper.glsl b/packages/core/src/shaderlib/pbr/pbr_helper.glsl index accb425dae..5d626fbc8f 100644 --- a/packages/core/src/shaderlib/pbr/pbr_helper.glsl +++ b/packages/core/src/shaderlib/pbr/pbr_helper.glsl @@ -67,6 +67,7 @@ PhysicalMaterial getPhysicalMaterial( material.roughness = clamp( 1.0 - glossiness, 0.04, 1.0 ); #endif + material.opacity = diffuseColor.a; return material; } diff --git a/packages/design/package.json b/packages/design/package.json index 75ca1ef052..d4f76f7fd7 100755 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/design", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -13,6 +13,6 @@ ], "types": "types/index.d.ts", "dependencies": { - "@oasis-engine/math": "0.6.1" + "@oasis-engine/math": "0.6.3" } } diff --git a/packages/draco/package.json b/packages/draco/package.json index e219c6990b..bf468e3bd2 100644 --- a/packages/draco/package.json +++ b/packages/draco/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/draco", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "scripts": { "b:types": "tsc" @@ -13,6 +13,6 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.1" + "@oasis-engine/core": "0.6.3" } } diff --git a/packages/framebuffer-picker/package.json b/packages/framebuffer-picker/package.json index 502911c8d1..319d61e351 100755 --- a/packages/framebuffer-picker/package.json +++ b/packages/framebuffer-picker/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/framebuffer-picker", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.1" + "oasis-engine": "0.6.3" } } diff --git a/packages/loader/package.json b/packages/loader/package.json index c9e9e3f316..ceeb933e10 100755 --- a/packages/loader/package.json +++ b/packages/loader/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/loader", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "types": "types/index.d.ts", "scripts": { @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.1", - "@oasis-engine/draco": "0.6.1", - "@oasis-engine/math": "0.6.1", - "@oasis-engine/rhi-webgl": "0.6.1" + "@oasis-engine/core": "0.6.3", + "@oasis-engine/draco": "0.6.3", + "@oasis-engine/math": "0.6.3", + "@oasis-engine/rhi-webgl": "0.6.3" } } diff --git a/packages/loader/src/EnvLoader.ts b/packages/loader/src/EnvLoader.ts index 317d1f2a39..054717c3c1 100644 --- a/packages/loader/src/EnvLoader.ts +++ b/packages/loader/src/EnvLoader.ts @@ -8,7 +8,8 @@ import { resourceLoader, ResourceManager, TextureCubeFace, - TextureCubeMap + TextureCubeMap, + TextureFilterMode } from "@oasis-engine/core"; import { SphericalHarmonics3 } from "@oasis-engine/math"; @@ -27,6 +28,7 @@ class EnvLoader extends Loader { const size = new Uint16Array(arraybuffer, shByteLength, 1)?.[0]; const texture = new TextureCubeMap(resourceManager.engine, size); + texture.filterMode = TextureFilterMode.Trilinear; const mipmapCount = texture.mipmapCount; let offset = shByteLength + 2; diff --git a/packages/math/package.json b/packages/math/package.json index 538ee44e37..d60b7d259b 100755 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/math", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,6 +15,6 @@ "types/**/*" ], "devDependencies": { - "@oasis-engine/design": "0.6.1" + "@oasis-engine/design": "0.6.3" } } diff --git a/packages/math/src/Matrix.ts b/packages/math/src/Matrix.ts index f4e9b88db7..0ae87e3559 100644 --- a/packages/math/src/Matrix.ts +++ b/packages/math/src/Matrix.ts @@ -517,15 +517,15 @@ export class Matrix implements IClone { /** * Calculate a perspective projection matrix. - * @param fovy - Field of view in the y direction, in radians + * @param fovY - Field of view in the y direction, in radians * @param aspect - Aspect ratio, defined as view space width divided by height * @param near - The depth of the near plane * @param far - The depth of the far plane * @param out - The calculated perspective projection matrix */ - static perspective(fovy: number, aspect: number, near: number, far: number, out: Matrix): void { + static perspective(fovY: number, aspect: number, near: number, far: number, out: Matrix): void { const oe = out.elements; - const f = 1.0 / Math.tan(fovy / 2); + const f = 1.0 / Math.tan(fovY / 2); const nf = 1 / (near - far); oe[0] = f / aspect; diff --git a/packages/oasis-engine/package.json b/packages/oasis-engine/package.json index 6f7e418647..56aa6ccc77 100755 --- a/packages/oasis-engine/package.json +++ b/packages/oasis-engine/package.json @@ -1,6 +1,6 @@ { "name": "oasis-engine", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.1", - "@oasis-engine/loader": "0.6.1", - "@oasis-engine/math": "0.6.1", - "@oasis-engine/rhi-webgl": "0.6.1" + "@oasis-engine/core": "0.6.3", + "@oasis-engine/loader": "0.6.3", + "@oasis-engine/math": "0.6.3", + "@oasis-engine/rhi-webgl": "0.6.3" } } diff --git a/packages/physics-lite/package.json b/packages/physics-lite/package.json index 66ad1de8d6..9b66506e9e 100644 --- a/packages/physics-lite/package.json +++ b/packages/physics-lite/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/physics-lite", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,8 +15,8 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.6.1", - "oasis-engine": "0.6.1" + "@oasis-engine/design": "0.6.3", + "oasis-engine": "0.6.3" }, "publishConfig": { "access": "public" diff --git a/packages/physics-lite/src/shape/LiteBoxColliderShape.ts b/packages/physics-lite/src/shape/LiteBoxColliderShape.ts index 0d080c8285..92fcfaaf5a 100644 --- a/packages/physics-lite/src/shape/LiteBoxColliderShape.ts +++ b/packages/physics-lite/src/shape/LiteBoxColliderShape.ts @@ -59,8 +59,8 @@ export class LiteBoxColliderShape extends LiteColliderShape implements IBoxColli const localRay = this._getLocalRay(ray); const boundingBox = LiteBoxColliderShape._tempBox; - this._boxMin.cloneTo(boundingBox.min); - this._boxMax.cloneTo(boundingBox.max); + boundingBox.min.setValue(-this._halfSize.x, -this._halfSize.y, -this._halfSize.z); + boundingBox.max.setValue(this._halfSize.x, this._halfSize.y, this._halfSize.z); const rayDistance = localRay.intersectBox(boundingBox); if (rayDistance !== -1) { this._updateHitResult(localRay, rayDistance, hit, ray.origin); diff --git a/packages/physics-lite/src/shape/LiteSphereColliderShape.ts b/packages/physics-lite/src/shape/LiteSphereColliderShape.ts index 64ecef805e..81ea65fb74 100644 --- a/packages/physics-lite/src/shape/LiteSphereColliderShape.ts +++ b/packages/physics-lite/src/shape/LiteSphereColliderShape.ts @@ -47,10 +47,9 @@ export class LiteSphereColliderShape extends LiteColliderShape implements ISpher * @internal */ _raycast(ray: Ray, hit: LiteHitResult): boolean { - const transform = this._transform; const boundingSphere = LiteSphereColliderShape._tempSphere; - Vector3.transformCoordinate(this._transform.position, transform.worldMatrix, boundingSphere.center); - LiteSphereColliderShape._tempSphere.radius = this.worldRadius; + Vector3.transformCoordinate(this._transform.position, this._collider._transform.worldMatrix, boundingSphere.center); + boundingSphere.radius = this.worldRadius; const rayDistance = ray.intersectSphere(boundingSphere); if (rayDistance !== -1) { diff --git a/packages/physics-physx/package.json b/packages/physics-physx/package.json index 0bd73be62b..7321dfaed6 100644 --- a/packages/physics-physx/package.json +++ b/packages/physics-physx/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/physics-physx", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,8 +15,8 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.6.1", - "oasis-engine": "0.6.1" + "@oasis-engine/design": "0.6.3", + "oasis-engine": "0.6.3" }, "publishConfig": { "access": "public" diff --git a/packages/rhi-webgl/package.json b/packages/rhi-webgl/package.json index 8bf282faf2..e7e00da820 100755 --- a/packages/rhi-webgl/package.json +++ b/packages/rhi-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/rhi-webgl", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,10 +14,10 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.1", - "@oasis-engine/math": "0.6.1" + "@oasis-engine/core": "0.6.3", + "@oasis-engine/math": "0.6.3" }, "devDependencies": { - "@oasis-engine/design": "0.6.1" + "@oasis-engine/design": "0.6.3" } } diff --git a/packages/stats/package.json b/packages/stats/package.json index 2afe3e4f7b..c0958d875b 100755 --- a/packages/stats/package.json +++ b/packages/stats/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/stats", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.1" + "oasis-engine": "0.6.3" } } From 338512b8170a6223db54b7093788d5c63f6965ba Mon Sep 17 00:00:00 2001 From: GuoLei Date: Tue, 7 Dec 2021 18:12:52 +0800 Subject: [PATCH 18/91] fix: front face bug (#613) --- packages/core/src/RenderPipeline/RenderQueue.ts | 2 +- packages/core/src/shader/state/RasterState.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/RenderPipeline/RenderQueue.ts b/packages/core/src/RenderPipeline/RenderQueue.ts index fedfadf825..8c23ba65c8 100644 --- a/packages/core/src/RenderPipeline/RenderQueue.ts +++ b/packages/core/src/RenderPipeline/RenderQueue.ts @@ -137,7 +137,7 @@ export class RenderQueue { program.uploadUngroupTextures(); } } - material.renderState._apply(camera.engine,element.component.entity.transform._isFrontFaceInvert()); + material.renderState._apply(camera.engine, renderer.entity.transform._isFrontFaceInvert()); rhi.drawPrimitive(element.mesh, element.subMesh, program); } else { diff --git a/packages/core/src/shader/state/RasterState.ts b/packages/core/src/shader/state/RasterState.ts index 4c53588a2e..04672267f4 100644 --- a/packages/core/src/shader/state/RasterState.ts +++ b/packages/core/src/shader/state/RasterState.ts @@ -57,7 +57,7 @@ export class RasterState { } else { gl.frontFace(gl.CCW); } - lastState._frontFaceInvert == frontFaceInvert; + lastState._frontFaceInvert = frontFaceInvert; } // apply polygonOffset. From b3f5503b2cc988a7856e830f011545d9ce056206 Mon Sep 17 00:00:00 2001 From: Hu Song Date: Fri, 31 Dec 2021 14:58:10 +0800 Subject: [PATCH 19/91] Fix Reject Error (#624) * fix: cache promise is not clear --- packages/core/src/asset/ResourceManager.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/core/src/asset/ResourceManager.ts b/packages/core/src/asset/ResourceManager.ts index d2fc8bb984..4769b3dd2a 100644 --- a/packages/core/src/asset/ResourceManager.ts +++ b/packages/core/src/asset/ResourceManager.ts @@ -207,9 +207,11 @@ export class ResourceManager { promise .then((res) => { if (loader.useCache) this._addAsset(url, res); - delete this._loadingPromises[url]; }) - .catch(() => {}); + .catch((err: Error) => Promise.reject(err)) + .finally(() => { + delete this._loadingPromises[url]; + }); return promise; } } From 9a248873764f96021e836e65cd0982579682958f Mon Sep 17 00:00:00 2001 From: Hu Song Date: Fri, 31 Dec 2021 18:03:25 +0800 Subject: [PATCH 20/91] Fix iOS not support promise.finally (#626) * refactor: return promise reject --- packages/core/src/asset/ResourceManager.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/asset/ResourceManager.ts b/packages/core/src/asset/ResourceManager.ts index 4769b3dd2a..97e32e1a00 100644 --- a/packages/core/src/asset/ResourceManager.ts +++ b/packages/core/src/asset/ResourceManager.ts @@ -208,9 +208,9 @@ export class ResourceManager { .then((res) => { if (loader.useCache) this._addAsset(url, res); }) - .catch((err: Error) => Promise.reject(err)) - .finally(() => { + .catch((err: Error) => { delete this._loadingPromises[url]; + return Promise.reject(err); }); return promise; } From 422fa160782d0b6e673e666a0f88d8988834ceb3 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 31 Dec 2021 18:04:34 +0800 Subject: [PATCH 21/91] feat: adapt text for paladin (#625) * feat(text): text renderer handle text is empty * feat(text): adapter for paladin Co-authored-by: chengkong.zxx --- packages/core/src/2d/text/TextRenderer.ts | 18 +++++++++++++++++- packages/core/src/2d/text/TextUtils.ts | 3 +++ .../core/src/shaderlib/extra/sprite.fs.glsl | 9 +++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index b69ffbd9d5..59b5f11a6f 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -9,6 +9,8 @@ import { Sprite, SpriteRenderer } from "../sprite"; import { TextUtils } from "./TextUtils"; export class TextRenderer extends SpriteRenderer { + static needPremultiplyAlpha: boolean = false; + @assignmentClone private _text: string = ""; @assignmentClone @@ -197,6 +199,12 @@ export class TextRenderer extends SpriteRenderer { this._styleDirtyFlag = false; } + if (TextRenderer.needPremultiplyAlpha) { + this.shaderData.enableMacro("NEED_PREMULTIPLY_ALPHA"); + } else { + this.shaderData.disableMacro("NEED_PREMULTIPLY_ALPHA"); + } + super._render(camera); } @@ -241,13 +249,21 @@ export class TextRenderer extends SpriteRenderer { private _updateTexture() { const textContext = TextUtils.textContext(); const { canvas, context } = textContext; + if (canvas.width === 0 || canvas.height === 0) { + this.sprite.texture = null; + return ; + } const trimData = TextUtils.trimCanvas(textContext); const { width, height } = trimData; canvas.width = width; canvas.height = height; context.putImageData(trimData.data, 0, 0); const texture = new Texture2D(this.engine, width, height); - texture.setImageSource(canvas); + if (TextRenderer.needPremultiplyAlpha) { + texture.setImageSource(canvas, 0, false, true); + } else { + texture.setImageSource(canvas); + } texture.generateMipmaps(); this.sprite.texture = texture; } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index b3914015e4..c6d2c102c0 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -99,6 +99,9 @@ export class TextUtils { const { canvas, context } = textContext; context.font = fontStr; const width = Math.ceil(context.measureText(text || "").width); + if (width === 0) { + return ; + } canvas.width = width; canvas.height = fontSize; context.font = fontStr; diff --git a/packages/core/src/shaderlib/extra/sprite.fs.glsl b/packages/core/src/shaderlib/extra/sprite.fs.glsl index ef44cf80eb..a632267798 100644 --- a/packages/core/src/shaderlib/extra/sprite.fs.glsl +++ b/packages/core/src/shaderlib/extra/sprite.fs.glsl @@ -15,5 +15,14 @@ void main() #else vec4 baseColor = texture2D(u_spriteTexture, v_uv); #endif + + #ifdef NEED_PREMULTIPLY_ALPHA + if (baseColor.a <= 0.0) { + gl_FragColor = baseColor * v_color; + } else { + gl_FragColor = vec4(baseColor.rgb/baseColor.a, baseColor.a) * v_color; + } + #else gl_FragColor = baseColor * v_color; + #endif } From 041f94b977cc67f1cc57fa2fa3b2e437270504f2 Mon Sep 17 00:00:00 2001 From: GuoLei Date: Wed, 5 Jan 2022 17:02:41 +0800 Subject: [PATCH 22/91] fix `entity` and `glTF` destroy bug (#629) * fix: front face bug * fix: glTF or Entity destroy cache bug --- packages/core/src/Engine.ts | 3 +-- packages/core/src/Entity.ts | 3 +++ .../src/RenderPipeline/BasicRenderPipeline.ts | 4 ++-- .../core/src/RenderPipeline/RenderQueue.ts | 8 ++++---- packages/core/src/Scene.ts | 9 --------- packages/core/src/asset/RefObject.ts | 14 ++------------ packages/core/src/asset/ResourceManager.ts | 17 ++++++++--------- packages/core/src/base/EngineObject.ts | 19 ++++++++++++++++++- packages/core/src/base/EventDispatcher.ts | 5 ++--- packages/core/src/shader/ShaderProgram.ts | 2 +- packages/loader/src/scene-loader/Oasis.ts | 6 ++++-- 11 files changed, 45 insertions(+), 45 deletions(-) diff --git a/packages/core/src/Engine.ts b/packages/core/src/Engine.ts index e6925f881e..61bd5d8b05 100644 --- a/packages/core/src/Engine.ts +++ b/packages/core/src/Engine.ts @@ -11,7 +11,6 @@ import { FeatureManager } from "./FeatureManager"; import { InputManager } from "./input/InputManager"; import { RenderQueueType } from "./material/enums/RenderQueueType"; import { Material } from "./material/Material"; -import { ModelMesh, PrimitiveMesh } from "./mesh"; import { PhysicsManager } from "./physics"; import { IHardwareRenderer } from "./renderingHardwareInterface/IHardwareRenderer"; import { ClassPool } from "./RenderPipeline/ClassPool"; @@ -179,7 +178,7 @@ export class Engine extends EventDispatcher { * @param physics - native physics Engine */ constructor(canvas: Canvas, hardwareRenderer: IHardwareRenderer, physics?: IPhysics, settings?: EngineSettings) { - super(null); + super(); this._hardwareRenderer = hardwareRenderer; this._hardwareRenderer.init(canvas); if (physics) { diff --git a/packages/core/src/Entity.ts b/packages/core/src/Entity.ts index d1ce9d3530..e43315d68d 100644 --- a/packages/core/src/Entity.ts +++ b/packages/core/src/Entity.ts @@ -340,6 +340,9 @@ export class Entity extends EngineObject { * Destroy self. */ destroy(): void { + if (this._destroyed) return; + + super.destroy(); const abilityArray = this._components; for (let i = abilityArray.length - 1; i >= 0; i--) { abilityArray[i].destroy(); diff --git a/packages/core/src/RenderPipeline/BasicRenderPipeline.ts b/packages/core/src/RenderPipeline/BasicRenderPipeline.ts index b58ded5e26..327ec60758 100644 --- a/packages/core/src/RenderPipeline/BasicRenderPipeline.ts +++ b/packages/core/src/RenderPipeline/BasicRenderPipeline.ts @@ -227,7 +227,7 @@ export class BasicRenderPipeline { const program = _backgroundTextureMaterial.shader._getShaderProgram(engine, Shader._compileMacros); program.bind(); program.uploadAll(program.materialUniformBlock, _backgroundTextureMaterial.shaderData); - program.uploadUngroupTextures(); + program.uploadUnGroupTextures(); _backgroundTextureMaterial.renderState._apply(engine, false); rhi.drawPrimitive(mesh, mesh.subMesh, program); @@ -261,7 +261,7 @@ export class BasicRenderPipeline { program.bind(); program.groupingOtherUniformBlock(); program.uploadAll(program.materialUniformBlock, shaderData); - program.uploadUngroupTextures(); + program.uploadUnGroupTextures(); renderState._apply(engine, false); rhi.drawPrimitive(mesh, mesh.subMesh, program); diff --git a/packages/core/src/RenderPipeline/RenderQueue.ts b/packages/core/src/RenderPipeline/RenderQueue.ts index 8c23ba65c8..beb204a213 100644 --- a/packages/core/src/RenderPipeline/RenderQueue.ts +++ b/packages/core/src/RenderPipeline/RenderQueue.ts @@ -104,8 +104,8 @@ export class RenderQueue { program.uploadAll(program.cameraUniformBlock, cameraData); program.uploadAll(program.rendererUniformBlock, rendererData); program.uploadAll(program.materialUniformBlock, materialData); - // Ungroup textures should upload default value, texture uint maybe change by logic of texture bind. - program.uploadUngroupTextures(); + // UnGroup textures should upload default value, texture uint maybe change by logic of texture bind. + program.uploadUnGroupTextures(); program._uploadCamera = camera; program._uploadRenderer = renderer; program._uploadMaterial = material; @@ -132,9 +132,9 @@ export class RenderQueue { program.uploadTextures(program.materialUniformBlock, materialData); } - // We only consider switchProgram case, because ungroup texture's value is always default. + // We only consider switchProgram case, because UnGroup texture's value is always default. if (switchProgram) { - program.uploadUngroupTextures(); + program.uploadUnGroupTextures(); } } material.renderState._apply(camera.engine, renderer.entity.transform._isFrontFaceInvert()); diff --git a/packages/core/src/Scene.ts b/packages/core/src/Scene.ts index ab9e072410..2fc7e09b58 100644 --- a/packages/core/src/Scene.ts +++ b/packages/core/src/Scene.ts @@ -33,7 +33,6 @@ export class Scene extends EngineObject { /** @internal */ _globalShaderMacro: ShaderMacroCollection = new ShaderMacroCollection(); - private _destroyed: boolean = false; private _rootEntities: Entity[] = []; private _ambientLight: AmbientLight; @@ -72,13 +71,6 @@ export class Scene extends EngineObject { return this._rootEntities; } - /** - * Whether it's destroyed. - */ - get destroyed(): boolean { - return this._destroyed; - } - /** * Create scene. * @param engine - Engine @@ -218,7 +210,6 @@ export class Scene extends EngineObject { this._activeCameras.length = 0; (Scene.sceneFeatureManager as any)._objects = []; this.shaderData._addRefCount(-1); - this._destroyed = true; } /** diff --git a/packages/core/src/asset/RefObject.ts b/packages/core/src/asset/RefObject.ts index 0b8ab6319d..4d370930cf 100644 --- a/packages/core/src/asset/RefObject.ts +++ b/packages/core/src/asset/RefObject.ts @@ -10,7 +10,6 @@ export abstract class RefObject extends EngineObject implements IRefObject { isGCIgnored: boolean = false; private _refCount: number = 0; - private _destroyed: boolean = false; /** * Counted by valid references. @@ -19,13 +18,6 @@ export abstract class RefObject extends EngineObject implements IRefObject { return this._refCount; } - /** - * Whether it has been destroyed. - */ - get destroyed(): boolean { - return this._destroyed; - } - protected constructor(engine: Engine) { super(engine); engine.resourceManager._addRefObject(this.instanceId, this); @@ -43,7 +35,7 @@ export abstract class RefObject extends EngineObject implements IRefObject { // resourceManager maybe null,because engine has destroyed. // TODO:the right way to fix this is to ensure destroy all when call engine.destroy,thus don't need to add this project. if (resourceManager) { - resourceManager._deleteAsset(this); + super.destroy(); resourceManager._deleteRefObject(this.instanceId); } @@ -53,7 +45,7 @@ export abstract class RefObject extends EngineObject implements IRefObject { } this._engine = null; this._onDestroy(); - this._destroyed = true; + return true; } @@ -66,7 +58,6 @@ export abstract class RefObject extends EngineObject implements IRefObject { /** * @internal - * Add reference resource. */ _addRefCount(value: number): void { this._refCount += value; @@ -74,7 +65,6 @@ export abstract class RefObject extends EngineObject implements IRefObject { /** * @internal - * Remove reference resource. */ _addToResourceManager(path: string): void { this._engine.resourceManager._addAsset(path, this); diff --git a/packages/core/src/asset/ResourceManager.ts b/packages/core/src/asset/ResourceManager.ts index 97e32e1a00..13b27a1a57 100644 --- a/packages/core/src/asset/ResourceManager.ts +++ b/packages/core/src/asset/ResourceManager.ts @@ -1,10 +1,9 @@ +import { Engine, EngineObject } from ".."; +import { ObjectValues } from "../base/Util"; import { AssetPromise } from "./AssetPromise"; +import { Loader } from "./Loader"; import { LoadItem } from "./LoadItem"; import { RefObject } from "./RefObject"; -import { Engine } from ".."; -import { Loader } from "./Loader"; -import { AssetType } from "./AssetType"; -import { ObjectValues } from "../base/Util"; /** * ResourceManager @@ -17,10 +16,10 @@ export class ResourceManager { /** * @internal */ - static _addLoader(type: string, loader: Loader, extnames: string[]) { + static _addLoader(type: string, loader: Loader, extNames: string[]) { this._loaders[type] = loader; - for (let i = 0, len = extnames.length; i < len; i++) { - this._extTypeMapping[extnames[i]] = type; + for (let i = 0, len = extNames.length; i < len; i++) { + this._extTypeMapping[extNames[i]] = type; } } @@ -145,7 +144,7 @@ export class ResourceManager { /** * @internal */ - _addAsset(path: string, asset: RefObject): void { + _addAsset(path: string, asset: EngineObject): void { this._assetPool[asset.instanceId] = path; this._assetUrlPool[path] = asset; } @@ -153,7 +152,7 @@ export class ResourceManager { /** * @internal */ - _deleteAsset(asset: RefObject): void { + _deleteAsset(asset: EngineObject): void { const id = asset.instanceId; const path = this._assetPool[id]; if (path) { diff --git a/packages/core/src/base/EngineObject.ts b/packages/core/src/base/EngineObject.ts index 44891784fc..7736f010e6 100644 --- a/packages/core/src/base/EngineObject.ts +++ b/packages/core/src/base/EngineObject.ts @@ -11,9 +11,9 @@ export abstract class EngineObject { @ignoreClone readonly instanceId: number = ++EngineObject._instanceIdCounter; - /** Engine to which the object belongs. */ @ignoreClone protected _engine: Engine; + protected _destroyed: boolean = false; /** * Get the engine which the object belongs. @@ -22,7 +22,24 @@ export abstract class EngineObject { return this._engine; } + /** + * Whether it has been destroyed. + */ + get destroyed(): boolean { + return this._destroyed; + } + constructor(engine: Engine) { this._engine = engine; } + + /** + * Destroy self. + */ + destroy(): void { + if (this._destroyed) return; + + this._engine.resourceManager?._deleteAsset(this); + this._destroyed = true; + } } diff --git a/packages/core/src/base/EventDispatcher.ts b/packages/core/src/base/EventDispatcher.ts index 0cc14a3482..e8329e7f9c 100644 --- a/packages/core/src/base/EventDispatcher.ts +++ b/packages/core/src/base/EventDispatcher.ts @@ -1,11 +1,10 @@ -import { EngineObject } from "./EngineObject"; -import { Event } from "./Event"; import { ignoreClone } from "../clone/CloneManager"; +import { Event } from "./Event"; /** * EventDispatcher, which can be inherited as a base class. */ -export class EventDispatcher extends EngineObject { +export class EventDispatcher { @ignoreClone private _evts = Object.create(null); private _evtCount = 0; diff --git a/packages/core/src/shader/ShaderProgram.ts b/packages/core/src/shader/ShaderProgram.ts index 0b6f06f210..df644d65a2 100644 --- a/packages/core/src/shader/ShaderProgram.ts +++ b/packages/core/src/shader/ShaderProgram.ts @@ -136,7 +136,7 @@ export class ShaderProgram { /** * Upload ungroup texture shader data in shader uniform block. */ - uploadUngroupTextures(): void { + uploadUnGroupTextures(): void { const textureUniforms = this.otherUniformBlock.textureUniforms; // textureUniforms property maybe null if ShaderUniformBlock not contain any texture. if (textureUniforms) { diff --git a/packages/loader/src/scene-loader/Oasis.ts b/packages/loader/src/scene-loader/Oasis.ts index ea4d120f09..61c306c668 100644 --- a/packages/loader/src/scene-loader/Oasis.ts +++ b/packages/loader/src/scene-loader/Oasis.ts @@ -1,4 +1,4 @@ -import { EventDispatcher, ObjectValues } from "@oasis-engine/core"; +import { Engine, EventDispatcher, ObjectValues } from "@oasis-engine/core"; import { AbilityManager } from "./AbilityManager"; import { NodeManager } from "./NodeManager"; import { SceneManager } from "./SceneManager"; @@ -15,9 +15,11 @@ export class Oasis extends EventDispatcher { private schema: Schema; public timeout: number; private oasis = this; + public engine: Engine; private constructor(private _options: Options, public readonly pluginManager: PluginManager) { - super(_options.engine); + super(); + this.engine = _options.engine; this.schema = _options.config; this.timeout = _options.timeout; _options.scripts = _options.scripts ?? {}; From d37b4c7141152067e720d3fed90500ab4bf18653 Mon Sep 17 00:00:00 2001 From: AZhan Date: Fri, 7 Jan 2022 17:40:44 +0800 Subject: [PATCH 23/91] fixBug:No exception is thrown after the atlas fails to load (#631) Co-authored-by: zhanyingwei@zyw --- .../loader/src/scene-loader/resources/SpriteAtlasResource.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts b/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts index 10e04b4079..f7c82b8ad8 100644 --- a/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts +++ b/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts @@ -8,7 +8,7 @@ export class SpriteAtlasResource extends SchemaResource { static defaultAtlas: SpriteAtlas; load(resourceManager: ResourceManager, assetConfig: AssetConfig): Promise { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { this.setMeta(); if (assetConfig.source) { resourceManager @@ -33,6 +33,8 @@ export class SpriteAtlasResource extends SchemaResource { schemaResourceManager.resourceIdMap.set(spriteResource, "" + assetID); } resolve(this); + }).catch((e) => { + reject(e); }); } else { if (!SpriteAtlasResource.defaultAtlas) { From 7a6885b1853babdf7926e64786e0c4b62032d869 Mon Sep 17 00:00:00 2001 From: "chengkong.zxx" Date: Mon, 10 Jan 2022 18:04:57 +0800 Subject: [PATCH 24/91] feat(text): chagne TextRenderer base class change to Renderer --- packages/core/src/2d/text/TextRenderer.ts | 216 ++++++++++++++++++---- packages/core/src/2d/text/TextUtils.ts | 20 +- 2 files changed, 198 insertions(+), 38 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 59b5f11a6f..37410d0ccc 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -1,16 +1,34 @@ -import { BoundingBox } from "@oasis-engine/math"; +import { BoundingBox, Color, Vector3 } from "@oasis-engine/math"; +import { Sprite, SpriteMaskInteraction, SpriteMaskLayer } from ".."; +import { CompareFunction, Renderer, Shader, UpdateFlag } from "../.."; import { Camera } from "../../Camera"; -import { assignmentClone, ignoreClone } from "../../clone/CloneManager"; +import { assignmentClone, deepClone, ignoreClone } from "../../clone/CloneManager"; import { Entity } from "../../Entity"; +import { ShaderProperty } from "../../shader/ShaderProperty"; import { Texture2D } from "../../texture"; import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; -import { Sprite, SpriteRenderer } from "../sprite"; import { TextUtils } from "./TextUtils"; -export class TextRenderer extends SpriteRenderer { +export class TextRenderer extends Renderer { static needPremultiplyAlpha: boolean = false; + private static _textureProperty: ShaderProperty = Shader.getPropertyByName("u_spriteTexture"); + private static _tempVec3: Vector3 = new Vector3(); + + /** @internal temp solution. */ + @ignoreClone + _customLocalBounds: BoundingBox = null; + /** @internal temp solution. */ + @ignoreClone + _customRootEntity: Entity = null; + + @assignmentClone + private _sprite: Sprite = null; + @deepClone + private _positions: Vector3[] = [new Vector3(), new Vector3(), new Vector3(), new Vector3()]; + @deepClone + private _color: Color = new Color(1, 1, 1, 1); @assignmentClone private _text: string = ""; @assignmentClone @@ -32,11 +50,32 @@ export class TextRenderer extends SpriteRenderer { @assignmentClone private _verticalAlignment: TextVerticalAlignment = TextVerticalAlignment.Center; @assignmentClone - private _horizontalOverflow: TextHorizontalOverflow = TextHorizontalOverflow.Wrap; + private _horizontalOverflow: TextHorizontalOverflow = TextHorizontalOverflow.Overflow; @assignmentClone - private _verticalOverflow: TextVerticalOverflow = TextVerticalOverflow.Truncate; + private _verticalOverflow: TextVerticalOverflow = TextVerticalOverflow.Overflow; + // @ignoreClone + // private _styleDirtyFlag: boolean = true; + @ignoreClone + private _dirtyFlag: number = DirtyFlag.All; @ignoreClone - private _styleDirtyFlag: boolean = true; + private _isWorldMatrixDirty: UpdateFlag; + @assignmentClone + private _maskInteraction: SpriteMaskInteraction = SpriteMaskInteraction.None; + @assignmentClone + private _maskLayer: number = SpriteMaskLayer.Layer0; + + /** + * Rendering color for the text. + */ + get color(): Color { + return this._color; + } + + set color(value: Color) { + if (this._color !== value) { + value.cloneTo(this._color); + } + } /** * @@ -49,7 +88,7 @@ export class TextRenderer extends SpriteRenderer { value = value || ""; if (this._text !== value) { this._text = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -60,7 +99,7 @@ export class TextRenderer extends SpriteRenderer { set width(value: number) { if (this._width !== value) { this._width = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -71,7 +110,7 @@ export class TextRenderer extends SpriteRenderer { set height(value: number) { if (this._height !== value) { this._height = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -83,7 +122,7 @@ export class TextRenderer extends SpriteRenderer { value = value || "Arial"; if (this._fontName !== value) { this._fontName = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -94,7 +133,7 @@ export class TextRenderer extends SpriteRenderer { set fontSize(value: number) { if (this._fontSize !== value) { this._fontSize = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -105,7 +144,7 @@ export class TextRenderer extends SpriteRenderer { set lineHeight(value: number) { if (this._lineHeight !== value) { this._lineHeight = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -116,7 +155,7 @@ export class TextRenderer extends SpriteRenderer { set isBold(value: boolean) { if (this._isBold !== value) { this._isBold = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -127,7 +166,7 @@ export class TextRenderer extends SpriteRenderer { set isItalic(value: boolean) { if (this._isItalic !== value) { this._isItalic = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -138,7 +177,7 @@ export class TextRenderer extends SpriteRenderer { set horizontalAlignment(value: TextHorizontalAlignment) { if (this._horizontalAlignment !== value) { this._horizontalAlignment = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -149,7 +188,7 @@ export class TextRenderer extends SpriteRenderer { set verticalAlignment(value: TextVerticalAlignment) { if (this._verticalAlignment !== value) { this._verticalAlignment = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -160,7 +199,7 @@ export class TextRenderer extends SpriteRenderer { set horizontalOverflow(value: TextHorizontalOverflow) { if (this._horizontalOverflow !== value) { this._horizontalOverflow = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -171,18 +210,40 @@ export class TextRenderer extends SpriteRenderer { set verticalOverflow(value: TextVerticalOverflow) { if (this._verticalOverflow !== value) { this._verticalOverflow = value; - this._styleDirtyFlag = true; + this._setDirtyFlagTrue(DirtyFlag.Style); } } - constructor(entity: Entity) { - super(entity); + /** + * Interacts with the masks. + */ + get maskInteraction(): SpriteMaskInteraction { + return this._maskInteraction; + } - // const canvas = this._canvas = document.createElement("canvas"); - // this._context = canvas.getContext("2d"); - // canvas.width = canvas.height = 1; + set maskInteraction(value: SpriteMaskInteraction) { + if (this._maskInteraction !== value) { + this._maskInteraction = value; + this._setDirtyFlagTrue(DirtyFlag.MaskInteraction); + } + } - this.sprite = new Sprite(this.engine); + /** + * The mask layer the sprite renderer belongs to. + */ + get maskLayer(): number { + return this._maskLayer; + } + + set maskLayer(value: number) { + this._maskLayer = value; + } + + constructor(entity: Entity) { + super(entity); + this._isWorldMatrixDirty = entity.transform.registerWorldChangeFlag(); + this.setMaterial(this._engine._spriteDefaultMaterial); + this._sprite = new Sprite(this.engine); } /** @@ -190,13 +251,13 @@ export class TextRenderer extends SpriteRenderer { */ _render(camera: Camera): void { if (this._text === '') { - this.sprite.texture = null; + this._sprite.texture = null; return ; } - if (this._styleDirtyFlag) { + if (this._isContainDirtyFlag(DirtyFlag.Style)) { this._updateText(); - this._styleDirtyFlag = false; + this._setDirtyFlagFalse(DirtyFlag.Style); } if (TextRenderer.needPremultiplyAlpha) { @@ -205,14 +266,70 @@ export class TextRenderer extends SpriteRenderer { this.shaderData.disableMacro("NEED_PREMULTIPLY_ALPHA"); } - super._render(camera); + const { _sprite: sprite } = this; + const { texture } = sprite; + if (!texture) { + return; + } + + const { _positions } = this; + const { transform } = this.entity; + + // Update sprite data. + const localDirty = sprite._updateMeshData(); + if (this._isWorldMatrixDirty.flag || localDirty) { + const localPositions = sprite._positions; + const localVertexPos = TextRenderer._tempVec3; + const worldMatrix = transform.worldMatrix; + + for (let i = 0, n = _positions.length; i < n; i++) { + const curVertexPos = localPositions[i]; + localVertexPos.setValue(curVertexPos.x, curVertexPos.y, 0); + Vector3.transformToVec3(localVertexPos, worldMatrix, _positions[i]); + } + + this._isWorldMatrixDirty.flag = false; + } + + if (this._isContainDirtyFlag(DirtyFlag.MaskInteraction)) { + this._updateStencilState(); + this._setDirtyFlagFalse(DirtyFlag.MaskInteraction); + } + + this.shaderData.setTexture(TextRenderer._textureProperty, texture); + const material = this.getMaterial(); + + const spriteElementPool = this._engine._spriteElementPool; + const spriteElement = spriteElementPool.getFromPool(); + spriteElement.setValue(this, _positions, sprite._uv, sprite._triangles, this.color, material, camera); + camera._renderPipeline.pushPrimitive(spriteElement); + } + + /** + * @internal + */ + _onDestroy(): void { + this._isWorldMatrixDirty.destroy(); + super._onDestroy(); + } + + private _isContainDirtyFlag(type: number): boolean { + return (this._dirtyFlag & type) != 0; + } + + private _setDirtyFlagTrue(type: number): void { + this._dirtyFlag |= type; + } + + private _setDirtyFlagFalse(type: number): void { + this._dirtyFlag &= ~type; } /** * @override */ protected _updateBounds(worldBounds: BoundingBox): void { - const sprite = this.sprite; + const sprite = this._sprite; if (sprite) { if (this._customLocalBounds && this._customRootEntity) { const worldMatrix = this._customRootEntity.transform.worldMatrix; @@ -241,6 +358,11 @@ export class TextRenderer extends SpriteRenderer { } private _updateText() { + if (this._text === "") { + this._sprite.texture = null; + return ; + } + const fontStr = this._getFontString(); TextUtils.measureText(TextUtils.textContext(), this, fontStr); this._updateTexture(); @@ -250,7 +372,7 @@ export class TextRenderer extends SpriteRenderer { const textContext = TextUtils.textContext(); const { canvas, context } = textContext; if (canvas.width === 0 || canvas.height === 0) { - this.sprite.texture = null; + this._sprite.texture = null; return ; } const trimData = TextUtils.trimCanvas(textContext); @@ -265,6 +387,36 @@ export class TextRenderer extends SpriteRenderer { texture.setImageSource(canvas); } texture.generateMipmaps(); - this.sprite.texture = texture; + this._sprite.texture = texture; } + + private _updateStencilState(): void { + // Update stencil. + const material = this.getInstanceMaterial(); + const stencilState = material.renderState.stencilState; + const maskInteraction = this._maskInteraction; + + if (maskInteraction === SpriteMaskInteraction.None) { + stencilState.enabled = false; + stencilState.writeMask = 0xff; + stencilState.referenceValue = 0; + stencilState.compareFunctionFront = stencilState.compareFunctionBack = CompareFunction.Always; + } else { + stencilState.enabled = true; + stencilState.writeMask = 0x00; + stencilState.referenceValue = 1; + const compare = + maskInteraction === SpriteMaskInteraction.VisibleInsideMask + ? CompareFunction.LessEqual + : CompareFunction.Greater; + stencilState.compareFunctionFront = compare; + stencilState.compareFunctionBack = compare; + } + } +} + +enum DirtyFlag { + Style = 0x1, + MaskInteraction = 0x2, + All = 0x3, } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index c6d2c102c0..a011e437fd 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -27,6 +27,12 @@ export class TextUtils { return TextUtils._textContext; } + /** + * measure the font. + * @param textContext - text context includes gl context and canvas + * @param font - the string of the font + * @returns the font size + */ public static measureFont(textContext: TextContext, font: string): number { const { fontSizes } = TextUtils; if (fontSizes[font]) { @@ -95,13 +101,11 @@ export class TextUtils { public static measureText(textContext: TextContext, textRenderer: TextRenderer, fontStr: string): void { const fontSize = TextUtils.measureFont(textContext, fontStr); // const wrappedTexts = TextUtils._wordWrap(textRenderer, fontStr); + const { text } = textRenderer; const { canvas, context } = textContext; context.font = fontStr; const width = Math.ceil(context.measureText(text || "").width); - if (width === 0) { - return ; - } canvas.width = width; canvas.height = fontSize; context.font = fontStr; @@ -111,6 +115,11 @@ export class TextUtils { context.fillText(text, 0, 0); } + /** + * Trim canvas. + * @param textContext - text context includes gl context and canvas + * @returns the width and height after trim, and the image data + */ public static trimCanvas(textContext: TextContext): { width: number; height: number; data?: ImageData } { // https://gist.github.com/remy/784508 @@ -173,7 +182,6 @@ export class TextUtils { const { width, height, horizontalOverflow, verticalOverflow } = textRenderer; const isWrap = horizontalOverflow === TextHorizontalOverflow.Wrap; - // if (isWrap && width === 0) { return []; } @@ -187,7 +195,7 @@ export class TextUtils { const widthInPixel = width * pixelsPerUnit; const output: Array = []; context.font = fontStr; - const textArr = text.split("\n"); + const textArr = text.split(/(?:\r\n|\r|\n)/); for (let i = 0, l = textArr.length; i < l; ++i) { const curText = textArr[i]; @@ -202,7 +210,7 @@ export class TextUtils { const curChar = curText[i]; const curCharWidth = Math.ceil(context.measureText(curChar).width); if (charsWidth + curCharWidth > widthInPixel) { - // The width of text renderer is shorter than cur char. + // The width of text renderer is shorter than current char. if (charsWidth === 0) { output.push(curChar); } else { From 9d27c442d5983ef3680ae4564964bf99d493fc05 Mon Sep 17 00:00:00 2001 From: "chengkong.zxx" Date: Wed, 12 Jan 2022 16:27:18 +0800 Subject: [PATCH 25/91] feat(text): text first version --- packages/core/src/2d/text/TextRenderer.ts | 134 ++++++++++++++++------ packages/core/src/2d/text/TextUtils.ts | 82 +++++++++---- 2 files changed, 159 insertions(+), 57 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 37410d0ccc..12c3d78044 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -1,4 +1,4 @@ -import { BoundingBox, Color, Vector3 } from "@oasis-engine/math"; +import { BoundingBox, Color, Vector2, Vector3 } from "@oasis-engine/math"; import { Sprite, SpriteMaskInteraction, SpriteMaskLayer } from ".."; import { CompareFunction, Renderer, Shader, UpdateFlag } from "../.."; import { Camera } from "../../Camera"; @@ -14,6 +14,7 @@ export class TextRenderer extends Renderer { static needPremultiplyAlpha: boolean = false; private static _textureProperty: ShaderProperty = Shader.getPropertyByName("u_spriteTexture"); + private static _tempVec2: Vector2 = new Vector2(); private static _tempVec3: Vector3 = new Vector3(); /** @internal temp solution. */ @@ -40,7 +41,7 @@ export class TextRenderer extends Renderer { @assignmentClone private _fontSize: number = 24; @assignmentClone - private _lineHeight: number = 1; + private _lineSpace: number = 1; @assignmentClone private _isBold: boolean = false; @assignmentClone @@ -53,8 +54,6 @@ export class TextRenderer extends Renderer { private _horizontalOverflow: TextHorizontalOverflow = TextHorizontalOverflow.Overflow; @assignmentClone private _verticalOverflow: TextVerticalOverflow = TextVerticalOverflow.Overflow; - // @ignoreClone - // private _styleDirtyFlag: boolean = true; @ignoreClone private _dirtyFlag: number = DirtyFlag.All; @ignoreClone @@ -65,9 +64,9 @@ export class TextRenderer extends Renderer { private _maskLayer: number = SpriteMaskLayer.Layer0; /** - * Rendering color for the text. + * Rendering color for the TextRenderer. */ - get color(): Color { + get color(): Color { return this._color; } @@ -137,13 +136,13 @@ export class TextRenderer extends Renderer { } } - get lineHeight(): number { - return this._lineHeight; + get lineSpace(): number { + return this._lineSpace; } - set lineHeight(value: number) { - if (this._lineHeight !== value) { - this._lineHeight = value; + set lineSpace(value: number) { + if (this._lineSpace !== value) { + this._lineSpace = value; this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -217,7 +216,7 @@ export class TextRenderer extends Renderer { /** * Interacts with the masks. */ - get maskInteraction(): SpriteMaskInteraction { + get maskInteraction(): SpriteMaskInteraction { return this._maskInteraction; } @@ -250,9 +249,9 @@ export class TextRenderer extends Renderer { * @internal */ _render(camera: Camera): void { - if (this._text === '') { + if (this._text === "") { this._sprite.texture = null; - return ; + return; } if (this._isContainDirtyFlag(DirtyFlag.Style)) { @@ -281,7 +280,7 @@ export class TextRenderer extends Renderer { const localPositions = sprite._positions; const localVertexPos = TextRenderer._tempVec3; const worldMatrix = transform.worldMatrix; - + for (let i = 0, n = _positions.length; i < n; i++) { const curVertexPos = localPositions[i]; localVertexPos.setValue(curVertexPos.x, curVertexPos.y, 0); @@ -308,23 +307,11 @@ export class TextRenderer extends Renderer { /** * @internal */ - _onDestroy(): void { + _onDestroy(): void { this._isWorldMatrixDirty.destroy(); super._onDestroy(); } - private _isContainDirtyFlag(type: number): boolean { - return (this._dirtyFlag & type) != 0; - } - - private _setDirtyFlagTrue(type: number): void { - this._dirtyFlag |= type; - } - - private _setDirtyFlagFalse(type: number): void { - this._dirtyFlag &= ~type; - } - /** * @override */ @@ -345,6 +332,18 @@ export class TextRenderer extends Renderer { } } + private _isContainDirtyFlag(type: number): boolean { + return (this._dirtyFlag & type) != 0; + } + + private _setDirtyFlagTrue(type: number): void { + this._dirtyFlag |= type; + } + + private _setDirtyFlagFalse(type: number): void { + this._dirtyFlag &= ~type; + } + private _getFontString() { let str = ""; if (this.isBold) { @@ -360,26 +359,57 @@ export class TextRenderer extends Renderer { private _updateText() { if (this._text === "") { this._sprite.texture = null; - return ; + return; } + const textContext = TextUtils.textContext(); + const { canvas, context } = textContext; const fontStr = this._getFontString(); - TextUtils.measureText(TextUtils.textContext(), this, fontStr); + const textMetrics = TextUtils.measureText(textContext, this, fontStr); + const { width, height } = textMetrics; + if (width === 0 || height === 0) { + this._sprite.texture = null; + return; + } + + // reset canvas's width and height. + canvas.width = width; + canvas.height = height; + // clear canvas. + context.font = fontStr; + context.clearRect(0, 0, width, height); + // set canvas font info. + context.textBaseline = "top"; + context.fillStyle = "#fff"; + + // draw lines. + const { lines, lineHeight, lineWidths } = textMetrics; + for (let i = 0, l = lines.length; i < l; ++i) { + const lineWidth = lineWidths[i]; + const pos = TextRenderer._tempVec2; + this._calculateLinePosition(width, height, lineWidth, lineHeight, i, l, pos); + const { x, y } = pos; + if (y + lineHeight >= 0 && y < height) { + context.fillText(lines[i], x, y); + } + } + this._updateTexture(); } private _updateTexture() { const textContext = TextUtils.textContext(); const { canvas, context } = textContext; - if (canvas.width === 0 || canvas.height === 0) { + const trimData = TextUtils.trimCanvas(textContext); + const { data } = trimData; + if (!data) { this._sprite.texture = null; - return ; + return; } - const trimData = TextUtils.trimCanvas(textContext); const { width, height } = trimData; canvas.width = width; canvas.height = height; - context.putImageData(trimData.data, 0, 0); + context.putImageData(data, 0, 0); const texture = new Texture2D(this.engine, width, height); if (TextRenderer.needPremultiplyAlpha) { texture.setImageSource(canvas, 0, false, true); @@ -390,6 +420,40 @@ export class TextRenderer extends Renderer { this._sprite.texture = texture; } + private _calculateLinePosition( + width: number, + height: number, + lineWidth: number, + lineHeight: number, + index: number, + length: number, + out: Vector2 + ) { + switch(this._verticalAlignment) { + case TextVerticalAlignment.Top: + out.y = index * lineHeight; + break; + case TextVerticalAlignment.Bottom: + out.y = height - (length - index) * lineHeight; + break; + default: + out.y = 0.5 * height - 0.5 * length * lineHeight + index * lineHeight; + break; + } + + switch(this._horizontalAlignment) { + case TextHorizontalAlignment.Left: + out.x = 0; + break; + case TextHorizontalAlignment.Right: + out.x = width - lineWidth; + break; + default: + out.x = (width - lineWidth) * 0.5; + break; + } + } + private _updateStencilState(): void { // Update stencil. const material = this.getInstanceMaterial(); @@ -418,5 +482,5 @@ export class TextRenderer extends Renderer { enum DirtyFlag { Style = 0x1, MaskInteraction = 0x2, - All = 0x3, + All = 0x3 } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index a011e437fd..83a4a57488 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -1,16 +1,28 @@ import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; import { TextRenderer } from "./TextRenderer"; -interface TextContext { +export interface TextContext { canvas: HTMLCanvasElement; context: CanvasRenderingContext2D; } +export interface TextMetrics { + width: number; + height: number; + lines: Array; + lineWidths: Array; + maxLineWidth: number; + lineHeight: number; + fontSize: number; +} + export class TextUtils { public static TEST_STRING = "qpjÉÅ"; public static TEST_BASELINE = "M"; public static HEIGHT_MULTIPLIER = 2; public static BASELINE_MULTIPLIER = 1.4; + public static MAX_WIDTH = 2048; + public static MAX_HEIGHT = 2048; public static fontSizes: { [font: string]: number } = {}; private static _textContext: TextContext = null; @@ -98,21 +110,45 @@ export class TextUtils { return fontSize; } - public static measureText(textContext: TextContext, textRenderer: TextRenderer, fontStr: string): void { + public static measureText(textContext: TextContext, textRenderer: TextRenderer, fontStr: string): TextMetrics { const fontSize = TextUtils.measureFont(textContext, fontStr); - // const wrappedTexts = TextUtils._wordWrap(textRenderer, fontStr); + const textMetrics: TextMetrics = { + width: 0, + height: 0, + lines: TextUtils._wordWrap(textRenderer, fontStr), + lineWidths: [], + maxLineWidth: 0, + lineHeight: fontSize + textRenderer.lineSpace, + fontSize + }; + const { context } = textContext; + const { lines } = textMetrics; + if (lines.length === 0) { + return textMetrics; + } - const { text } = textRenderer; - const { canvas, context } = textContext; - context.font = fontStr; - const width = Math.ceil(context.measureText(text || "").width); - canvas.width = width; - canvas.height = fontSize; context.font = fontStr; - context.clearRect(0, 0, width, fontSize); - context.textBaseline = "top"; - context.fillStyle = '#fff'; - context.fillText(text, 0, 0); + const { lineWidths } = textMetrics; + const linesLen = lines.length; + let maxLineWidth = 0; + for (let i = 0; i < linesLen; ++i) { + const width = Math.ceil(context.measureText(lines[i]).width); + if (width > maxLineWidth) { + maxLineWidth = width; + } + lineWidths.push(width); + } + textMetrics.maxLineWidth = maxLineWidth; + + // reset width and height. + textMetrics.width = Math.min(maxLineWidth, TextUtils.MAX_WIDTH); + let height = textRenderer.height; + if (textRenderer.verticalOverflow === TextVerticalOverflow.Overflow) { + height = Math.min(textMetrics.lineHeight * linesLen, TextUtils.MAX_HEIGHT); + } + textMetrics.height = height; + + return textMetrics; } /** @@ -182,17 +218,17 @@ export class TextUtils { const { width, height, horizontalOverflow, verticalOverflow } = textRenderer; const isWrap = horizontalOverflow === TextHorizontalOverflow.Wrap; - if (isWrap && width === 0) { + if (isWrap && width <= 0) { return []; } - if (verticalOverflow === TextVerticalOverflow.Truncate && height === 0) { + if (verticalOverflow === TextVerticalOverflow.Truncate && height <= 0) { return []; } const { context } = TextUtils.textContext(); - const { sprite, text } = textRenderer; - const { pixelsPerUnit } = sprite; - const widthInPixel = width * pixelsPerUnit; + const { MAX_WIDTH } = TextUtils; + const { text } = textRenderer; + const widthInPixel = width * 128; const output: Array = []; context.font = fontStr; const textArr = text.split(/(?:\r\n|\r|\n)/); @@ -200,16 +236,18 @@ export class TextUtils { for (let i = 0, l = textArr.length; i < l; ++i) { const curText = textArr[i]; const curWidth = Math.ceil(context.measureText(curText).width); - if (isWrap) { - if (curWidth <= widthInPixel) { + const needWrap = isWrap || curWidth > MAX_WIDTH; + const wrapWidth = Math.min(widthInPixel, MAX_WIDTH); + if (needWrap) { + if (curWidth <= wrapWidth) { output.push(curText); } else { - let chars = ''; + let chars = ""; let charsWidth = 0; for (let j = 0, l = curText.length; i < l; ++j) { const curChar = curText[i]; const curCharWidth = Math.ceil(context.measureText(curChar).width); - if (charsWidth + curCharWidth > widthInPixel) { + if (charsWidth + curCharWidth > wrapWidth) { // The width of text renderer is shorter than current char. if (charsWidth === 0) { output.push(curChar); From 1fcf71dd35c13ffc07b79b5b60beae945f2bc2d2 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Wed, 12 Jan 2022 16:27:18 +0800 Subject: [PATCH 26/91] feat(text): text first version --- packages/core/src/2d/text/TextRenderer.ts | 134 ++++++++++++++++------ packages/core/src/2d/text/TextUtils.ts | 82 +++++++++---- 2 files changed, 159 insertions(+), 57 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 37410d0ccc..12c3d78044 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -1,4 +1,4 @@ -import { BoundingBox, Color, Vector3 } from "@oasis-engine/math"; +import { BoundingBox, Color, Vector2, Vector3 } from "@oasis-engine/math"; import { Sprite, SpriteMaskInteraction, SpriteMaskLayer } from ".."; import { CompareFunction, Renderer, Shader, UpdateFlag } from "../.."; import { Camera } from "../../Camera"; @@ -14,6 +14,7 @@ export class TextRenderer extends Renderer { static needPremultiplyAlpha: boolean = false; private static _textureProperty: ShaderProperty = Shader.getPropertyByName("u_spriteTexture"); + private static _tempVec2: Vector2 = new Vector2(); private static _tempVec3: Vector3 = new Vector3(); /** @internal temp solution. */ @@ -40,7 +41,7 @@ export class TextRenderer extends Renderer { @assignmentClone private _fontSize: number = 24; @assignmentClone - private _lineHeight: number = 1; + private _lineSpace: number = 1; @assignmentClone private _isBold: boolean = false; @assignmentClone @@ -53,8 +54,6 @@ export class TextRenderer extends Renderer { private _horizontalOverflow: TextHorizontalOverflow = TextHorizontalOverflow.Overflow; @assignmentClone private _verticalOverflow: TextVerticalOverflow = TextVerticalOverflow.Overflow; - // @ignoreClone - // private _styleDirtyFlag: boolean = true; @ignoreClone private _dirtyFlag: number = DirtyFlag.All; @ignoreClone @@ -65,9 +64,9 @@ export class TextRenderer extends Renderer { private _maskLayer: number = SpriteMaskLayer.Layer0; /** - * Rendering color for the text. + * Rendering color for the TextRenderer. */ - get color(): Color { + get color(): Color { return this._color; } @@ -137,13 +136,13 @@ export class TextRenderer extends Renderer { } } - get lineHeight(): number { - return this._lineHeight; + get lineSpace(): number { + return this._lineSpace; } - set lineHeight(value: number) { - if (this._lineHeight !== value) { - this._lineHeight = value; + set lineSpace(value: number) { + if (this._lineSpace !== value) { + this._lineSpace = value; this._setDirtyFlagTrue(DirtyFlag.Style); } } @@ -217,7 +216,7 @@ export class TextRenderer extends Renderer { /** * Interacts with the masks. */ - get maskInteraction(): SpriteMaskInteraction { + get maskInteraction(): SpriteMaskInteraction { return this._maskInteraction; } @@ -250,9 +249,9 @@ export class TextRenderer extends Renderer { * @internal */ _render(camera: Camera): void { - if (this._text === '') { + if (this._text === "") { this._sprite.texture = null; - return ; + return; } if (this._isContainDirtyFlag(DirtyFlag.Style)) { @@ -281,7 +280,7 @@ export class TextRenderer extends Renderer { const localPositions = sprite._positions; const localVertexPos = TextRenderer._tempVec3; const worldMatrix = transform.worldMatrix; - + for (let i = 0, n = _positions.length; i < n; i++) { const curVertexPos = localPositions[i]; localVertexPos.setValue(curVertexPos.x, curVertexPos.y, 0); @@ -308,23 +307,11 @@ export class TextRenderer extends Renderer { /** * @internal */ - _onDestroy(): void { + _onDestroy(): void { this._isWorldMatrixDirty.destroy(); super._onDestroy(); } - private _isContainDirtyFlag(type: number): boolean { - return (this._dirtyFlag & type) != 0; - } - - private _setDirtyFlagTrue(type: number): void { - this._dirtyFlag |= type; - } - - private _setDirtyFlagFalse(type: number): void { - this._dirtyFlag &= ~type; - } - /** * @override */ @@ -345,6 +332,18 @@ export class TextRenderer extends Renderer { } } + private _isContainDirtyFlag(type: number): boolean { + return (this._dirtyFlag & type) != 0; + } + + private _setDirtyFlagTrue(type: number): void { + this._dirtyFlag |= type; + } + + private _setDirtyFlagFalse(type: number): void { + this._dirtyFlag &= ~type; + } + private _getFontString() { let str = ""; if (this.isBold) { @@ -360,26 +359,57 @@ export class TextRenderer extends Renderer { private _updateText() { if (this._text === "") { this._sprite.texture = null; - return ; + return; } + const textContext = TextUtils.textContext(); + const { canvas, context } = textContext; const fontStr = this._getFontString(); - TextUtils.measureText(TextUtils.textContext(), this, fontStr); + const textMetrics = TextUtils.measureText(textContext, this, fontStr); + const { width, height } = textMetrics; + if (width === 0 || height === 0) { + this._sprite.texture = null; + return; + } + + // reset canvas's width and height. + canvas.width = width; + canvas.height = height; + // clear canvas. + context.font = fontStr; + context.clearRect(0, 0, width, height); + // set canvas font info. + context.textBaseline = "top"; + context.fillStyle = "#fff"; + + // draw lines. + const { lines, lineHeight, lineWidths } = textMetrics; + for (let i = 0, l = lines.length; i < l; ++i) { + const lineWidth = lineWidths[i]; + const pos = TextRenderer._tempVec2; + this._calculateLinePosition(width, height, lineWidth, lineHeight, i, l, pos); + const { x, y } = pos; + if (y + lineHeight >= 0 && y < height) { + context.fillText(lines[i], x, y); + } + } + this._updateTexture(); } private _updateTexture() { const textContext = TextUtils.textContext(); const { canvas, context } = textContext; - if (canvas.width === 0 || canvas.height === 0) { + const trimData = TextUtils.trimCanvas(textContext); + const { data } = trimData; + if (!data) { this._sprite.texture = null; - return ; + return; } - const trimData = TextUtils.trimCanvas(textContext); const { width, height } = trimData; canvas.width = width; canvas.height = height; - context.putImageData(trimData.data, 0, 0); + context.putImageData(data, 0, 0); const texture = new Texture2D(this.engine, width, height); if (TextRenderer.needPremultiplyAlpha) { texture.setImageSource(canvas, 0, false, true); @@ -390,6 +420,40 @@ export class TextRenderer extends Renderer { this._sprite.texture = texture; } + private _calculateLinePosition( + width: number, + height: number, + lineWidth: number, + lineHeight: number, + index: number, + length: number, + out: Vector2 + ) { + switch(this._verticalAlignment) { + case TextVerticalAlignment.Top: + out.y = index * lineHeight; + break; + case TextVerticalAlignment.Bottom: + out.y = height - (length - index) * lineHeight; + break; + default: + out.y = 0.5 * height - 0.5 * length * lineHeight + index * lineHeight; + break; + } + + switch(this._horizontalAlignment) { + case TextHorizontalAlignment.Left: + out.x = 0; + break; + case TextHorizontalAlignment.Right: + out.x = width - lineWidth; + break; + default: + out.x = (width - lineWidth) * 0.5; + break; + } + } + private _updateStencilState(): void { // Update stencil. const material = this.getInstanceMaterial(); @@ -418,5 +482,5 @@ export class TextRenderer extends Renderer { enum DirtyFlag { Style = 0x1, MaskInteraction = 0x2, - All = 0x3, + All = 0x3 } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index a011e437fd..83a4a57488 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -1,16 +1,28 @@ import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; import { TextRenderer } from "./TextRenderer"; -interface TextContext { +export interface TextContext { canvas: HTMLCanvasElement; context: CanvasRenderingContext2D; } +export interface TextMetrics { + width: number; + height: number; + lines: Array; + lineWidths: Array; + maxLineWidth: number; + lineHeight: number; + fontSize: number; +} + export class TextUtils { public static TEST_STRING = "qpjÉÅ"; public static TEST_BASELINE = "M"; public static HEIGHT_MULTIPLIER = 2; public static BASELINE_MULTIPLIER = 1.4; + public static MAX_WIDTH = 2048; + public static MAX_HEIGHT = 2048; public static fontSizes: { [font: string]: number } = {}; private static _textContext: TextContext = null; @@ -98,21 +110,45 @@ export class TextUtils { return fontSize; } - public static measureText(textContext: TextContext, textRenderer: TextRenderer, fontStr: string): void { + public static measureText(textContext: TextContext, textRenderer: TextRenderer, fontStr: string): TextMetrics { const fontSize = TextUtils.measureFont(textContext, fontStr); - // const wrappedTexts = TextUtils._wordWrap(textRenderer, fontStr); + const textMetrics: TextMetrics = { + width: 0, + height: 0, + lines: TextUtils._wordWrap(textRenderer, fontStr), + lineWidths: [], + maxLineWidth: 0, + lineHeight: fontSize + textRenderer.lineSpace, + fontSize + }; + const { context } = textContext; + const { lines } = textMetrics; + if (lines.length === 0) { + return textMetrics; + } - const { text } = textRenderer; - const { canvas, context } = textContext; - context.font = fontStr; - const width = Math.ceil(context.measureText(text || "").width); - canvas.width = width; - canvas.height = fontSize; context.font = fontStr; - context.clearRect(0, 0, width, fontSize); - context.textBaseline = "top"; - context.fillStyle = '#fff'; - context.fillText(text, 0, 0); + const { lineWidths } = textMetrics; + const linesLen = lines.length; + let maxLineWidth = 0; + for (let i = 0; i < linesLen; ++i) { + const width = Math.ceil(context.measureText(lines[i]).width); + if (width > maxLineWidth) { + maxLineWidth = width; + } + lineWidths.push(width); + } + textMetrics.maxLineWidth = maxLineWidth; + + // reset width and height. + textMetrics.width = Math.min(maxLineWidth, TextUtils.MAX_WIDTH); + let height = textRenderer.height; + if (textRenderer.verticalOverflow === TextVerticalOverflow.Overflow) { + height = Math.min(textMetrics.lineHeight * linesLen, TextUtils.MAX_HEIGHT); + } + textMetrics.height = height; + + return textMetrics; } /** @@ -182,17 +218,17 @@ export class TextUtils { const { width, height, horizontalOverflow, verticalOverflow } = textRenderer; const isWrap = horizontalOverflow === TextHorizontalOverflow.Wrap; - if (isWrap && width === 0) { + if (isWrap && width <= 0) { return []; } - if (verticalOverflow === TextVerticalOverflow.Truncate && height === 0) { + if (verticalOverflow === TextVerticalOverflow.Truncate && height <= 0) { return []; } const { context } = TextUtils.textContext(); - const { sprite, text } = textRenderer; - const { pixelsPerUnit } = sprite; - const widthInPixel = width * pixelsPerUnit; + const { MAX_WIDTH } = TextUtils; + const { text } = textRenderer; + const widthInPixel = width * 128; const output: Array = []; context.font = fontStr; const textArr = text.split(/(?:\r\n|\r|\n)/); @@ -200,16 +236,18 @@ export class TextUtils { for (let i = 0, l = textArr.length; i < l; ++i) { const curText = textArr[i]; const curWidth = Math.ceil(context.measureText(curText).width); - if (isWrap) { - if (curWidth <= widthInPixel) { + const needWrap = isWrap || curWidth > MAX_WIDTH; + const wrapWidth = Math.min(widthInPixel, MAX_WIDTH); + if (needWrap) { + if (curWidth <= wrapWidth) { output.push(curText); } else { - let chars = ''; + let chars = ""; let charsWidth = 0; for (let j = 0, l = curText.length; i < l; ++j) { const curChar = curText[i]; const curCharWidth = Math.ceil(context.measureText(curChar).width); - if (charsWidth + curCharWidth > widthInPixel) { + if (charsWidth + curCharWidth > wrapWidth) { // The width of text renderer is shorter than current char. if (charsWidth === 0) { output.push(curChar); From eb8a2e6ec7b1f4932326aea0528a767ed25cd09f Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 13 Jan 2022 12:04:34 +0800 Subject: [PATCH 27/91] fix(text): wrap width not avalid --- packages/core/src/2d/text/TextUtils.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 83a4a57488..164eea4922 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -23,6 +23,7 @@ export class TextUtils { public static BASELINE_MULTIPLIER = 1.4; public static MAX_WIDTH = 2048; public static MAX_HEIGHT = 2048; + public static PIXELS_PER_UNIT = 128; public static fontSizes: { [font: string]: number } = {}; private static _textContext: TextContext = null; @@ -142,7 +143,7 @@ export class TextUtils { // reset width and height. textMetrics.width = Math.min(maxLineWidth, TextUtils.MAX_WIDTH); - let height = textRenderer.height; + let height = textRenderer.height * TextUtils.PIXELS_PER_UNIT; if (textRenderer.verticalOverflow === TextVerticalOverflow.Overflow) { height = Math.min(textMetrics.lineHeight * linesLen, TextUtils.MAX_HEIGHT); } @@ -228,7 +229,7 @@ export class TextUtils { const { context } = TextUtils.textContext(); const { MAX_WIDTH } = TextUtils; const { text } = textRenderer; - const widthInPixel = width * 128; + const widthInPixel = width * TextUtils.PIXELS_PER_UNIT; const output: Array = []; context.font = fontStr; const textArr = text.split(/(?:\r\n|\r|\n)/); @@ -244,8 +245,8 @@ export class TextUtils { } else { let chars = ""; let charsWidth = 0; - for (let j = 0, l = curText.length; i < l; ++j) { - const curChar = curText[i]; + for (let j = 0, l = curText.length; j < l; ++j) { + const curChar = curText[j]; const curCharWidth = Math.ceil(context.measureText(curChar).width); if (charsWidth + curCharWidth > wrapWidth) { // The width of text renderer is shorter than current char. From 2ad5d8a40067849c012b9f8a108c4c7c76e5b0a0 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 13 Jan 2022 16:36:39 +0800 Subject: [PATCH 28/91] feat(text): opt code --- packages/core/src/2d/text/TextRenderer.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 12c3d78044..4100ba540d 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -33,15 +33,15 @@ export class TextRenderer extends Renderer { @assignmentClone private _text: string = ""; @assignmentClone - private _width: number = 0; + private _width: number = 0; // 3d space in unit @assignmentClone - private _height: number = 0; + private _height: number = 0; // 3d space in unit @assignmentClone private _fontName: string = "Arial"; @assignmentClone private _fontSize: number = 24; @assignmentClone - private _lineSpace: number = 1; + private _lineSpace: number = 1; // pixel in unit @assignmentClone private _isBold: boolean = false; @assignmentClone @@ -317,7 +317,7 @@ export class TextRenderer extends Renderer { */ protected _updateBounds(worldBounds: BoundingBox): void { const sprite = this._sprite; - if (sprite) { + if (sprite && sprite.texture) { if (this._customLocalBounds && this._customRootEntity) { const worldMatrix = this._customRootEntity.transform.worldMatrix; BoundingBox.transform(this._customLocalBounds, worldMatrix, worldBounds); From 7053a4dc8c191fc42c96ce3dda7339aa5c8534eb Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 17 Jan 2022 14:50:56 +0800 Subject: [PATCH 29/91] feat(text): opt code --- packages/core/src/2d/enums/TextAlignment.ts | 10 ++++- packages/core/src/2d/enums/TextOverflow.ts | 8 +++- packages/core/src/2d/text/TextRenderer.ts | 3 +- packages/core/src/2d/text/TextUtils.ts | 43 ++++++++++----------- 4 files changed, 37 insertions(+), 27 deletions(-) diff --git a/packages/core/src/2d/enums/TextAlignment.ts b/packages/core/src/2d/enums/TextAlignment.ts index 876d058c3a..fae82dd3d1 100644 --- a/packages/core/src/2d/enums/TextAlignment.ts +++ b/packages/core/src/2d/enums/TextAlignment.ts @@ -1,17 +1,23 @@ /** - * Text horizontal alignment. + * The horizontal alignment of the text. */ export enum TextHorizontalAlignment { + /** Align left horizontally */ Left = 0, + /** Align center horizontally */ Center = 1, + /** Align right horizontally */ Right = 2 } /** - * Text vertical alignment. + * The vertical alignment of the text. */ export enum TextVerticalAlignment { + /** Align top vertically */ Top = 0, + /** Align center vertically */ Center = 1, + /** Align bottom vertically */ Bottom = 2 } diff --git a/packages/core/src/2d/enums/TextOverflow.ts b/packages/core/src/2d/enums/TextOverflow.ts index 669310d997..ff207aa918 100644 --- a/packages/core/src/2d/enums/TextOverflow.ts +++ b/packages/core/src/2d/enums/TextOverflow.ts @@ -1,15 +1,19 @@ /** - * Text horizontal overflow. + * The way to handle the situation where the text is too wide to fit in the width. */ export enum TextHorizontalOverflow { + /** Overflow when the text is too wide */ Overflow = 0, + /** wrap with width when the text is too wide */ Wrap = 1 } /** - * Text vertical overflow. + * The way to handle the situation where wrapped text is too tall to fit in the height. */ export enum TextVerticalOverflow { + /** Overflow when the text is too tall */ Overflow = 0, + /** Truncate with height when the text is too tall */ Truncate = 1 } diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 4100ba540d..e47987c37c 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -390,7 +390,8 @@ export class TextRenderer extends Renderer { this._calculateLinePosition(width, height, lineWidth, lineHeight, i, l, pos); const { x, y } = pos; if (y + lineHeight >= 0 && y < height) { - context.fillText(lines[i], x, y); + // +1, for chrome. + context.fillText(lines[i], x, y + 1); } } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 164eea4922..766bfe95ad 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -17,15 +17,14 @@ export interface TextMetrics { } export class TextUtils { - public static TEST_STRING = "qpjÉÅ"; - public static TEST_BASELINE = "M"; - public static HEIGHT_MULTIPLIER = 2; - public static BASELINE_MULTIPLIER = 1.4; - public static MAX_WIDTH = 2048; - public static MAX_HEIGHT = 2048; - public static PIXELS_PER_UNIT = 128; - - public static fontSizes: { [font: string]: number } = {}; + private static _testString = "qpjÉÅ"; + private static _testBaseline = "M"; + private static _heightMultiplier = 2; + private static _baselineMultiplier = 1.4; + private static _maxWidth = 2048; + private static _maxHeight = 2048; + private static _pixelsPerUnit = 128; + private static _fontSizes: { [font: string]: number } = {}; private static _textContext: TextContext = null; public static textContext(): TextContext { @@ -47,18 +46,18 @@ export class TextUtils { * @returns the font size */ public static measureFont(textContext: TextContext, font: string): number { - const { fontSizes } = TextUtils; + const { _fontSizes: fontSizes } = TextUtils; if (fontSizes[font]) { return fontSizes[font]; } const { canvas, context } = textContext; context.font = font; - const testStr = TextUtils.TEST_STRING; + const testStr = TextUtils._testString; const width = Math.ceil(context.measureText(testStr).width); - let baseline = Math.ceil(context.measureText(TextUtils.TEST_BASELINE).width); - const height = baseline * TextUtils.HEIGHT_MULTIPLIER; - baseline = Math.floor(TextUtils.BASELINE_MULTIPLIER * baseline); + let baseline = Math.ceil(context.measureText(TextUtils._testBaseline).width); + const height = baseline * TextUtils._heightMultiplier; + baseline = Math.floor(TextUtils._baselineMultiplier * baseline); canvas.width = width; canvas.height = height; @@ -107,7 +106,7 @@ export class TextUtils { const descent = i - baseline + 1; const fontSize = ascent + descent; - TextUtils.fontSizes[font] = fontSize; + TextUtils._fontSizes[font] = fontSize; return fontSize; } @@ -142,10 +141,10 @@ export class TextUtils { textMetrics.maxLineWidth = maxLineWidth; // reset width and height. - textMetrics.width = Math.min(maxLineWidth, TextUtils.MAX_WIDTH); - let height = textRenderer.height * TextUtils.PIXELS_PER_UNIT; + textMetrics.width = Math.min(maxLineWidth, TextUtils._maxWidth); + let height = textRenderer.height * TextUtils._pixelsPerUnit; if (textRenderer.verticalOverflow === TextVerticalOverflow.Overflow) { - height = Math.min(textMetrics.lineHeight * linesLen, TextUtils.MAX_HEIGHT); + height = Math.min(textMetrics.lineHeight * linesLen, TextUtils._maxHeight); } textMetrics.height = height; @@ -227,9 +226,9 @@ export class TextUtils { } const { context } = TextUtils.textContext(); - const { MAX_WIDTH } = TextUtils; + const { _maxWidth: maxWidth } = TextUtils; const { text } = textRenderer; - const widthInPixel = width * TextUtils.PIXELS_PER_UNIT; + const widthInPixel = width * TextUtils._pixelsPerUnit; const output: Array = []; context.font = fontStr; const textArr = text.split(/(?:\r\n|\r|\n)/); @@ -237,8 +236,8 @@ export class TextUtils { for (let i = 0, l = textArr.length; i < l; ++i) { const curText = textArr[i]; const curWidth = Math.ceil(context.measureText(curText).width); - const needWrap = isWrap || curWidth > MAX_WIDTH; - const wrapWidth = Math.min(widthInPixel, MAX_WIDTH); + const needWrap = isWrap || curWidth > maxWidth; + const wrapWidth = Math.min(widthInPixel, maxWidth); if (needWrap) { if (curWidth <= wrapWidth) { output.push(curText); From 712898579b1bbc9b28c9e0b35c2a63fbe5aed224 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 18 Jan 2022 16:59:24 +0800 Subject: [PATCH 30/91] feat(text): add dynamic atlas --- .../2d/dynamic-atlas/DynamicAtlasManager.ts | 91 +++++++++++++++++++ .../2d/dynamic-atlas/DynamicSpriteAtlas.ts | 20 ++++ packages/core/src/2d/dynamic-atlas/types.ts | 7 ++ packages/core/src/2d/index.ts | 3 +- packages/core/src/2d/sprite/Sprite.ts | 52 +++++++---- packages/core/src/2d/sprite/SpriteRenderer.ts | 10 +- packages/core/src/2d/text/TextRenderer.ts | 51 ++++++----- packages/core/src/Engine.ts | 10 +- 8 files changed, 199 insertions(+), 45 deletions(-) create mode 100644 packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts create mode 100644 packages/core/src/2d/dynamic-atlas/DynamicSpriteAtlas.ts create mode 100644 packages/core/src/2d/dynamic-atlas/types.ts diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts new file mode 100644 index 0000000000..905533df5d --- /dev/null +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts @@ -0,0 +1,91 @@ +import { Sprite } from "../sprite/Sprite"; +import { Engine } from "../../Engine"; +import { DynamicSpriteAtlas } from "./DynamicSpriteAtlas"; +import { DynamicSprite } from "./types"; + +/** + * Dynamic atlas manager for text. + */ +export class DynamicAtlasManager { + private _enabled: boolean = false; + private _maxAtlasCount: number = 2; + private _textureSize: number = 2048; + private _atlases: Array = []; + private _atlasIndex: number = -1; + + /** + * Indicates whether the manager is enabled. + */ + get enabled(): boolean { + return this._enabled; + } + + set enabled(val: boolean) { + if (this._enabled !== val) { + this._enabled = val; + this.reset(); + } + } + + /** + * Indicates how many atlases should be created. + */ + get maxAtlasCount(): number { + return this._maxAtlasCount; + } + + set maxAtlasCount(val: number) { + this._maxAtlasCount = val; + } + + /** + * Indicates the size of the texture. + */ + get textureSize(): number { + return this._textureSize; + } + + set textureSize(val: number) { + this._textureSize = Math.min(val, 2048); + } + + /** + * @internal + */ + constructor(public readonly engine: Engine) {} + + public addSprite(sprite: Sprite, imageSource: TexImageSource): DynamicSprite | null { + if (!this._enabled || this._atlasIndex >= this._maxAtlasCount) { + return null; + } + + const texture = sprite.texture; + const id = texture.instanceId; + let atlas = this._atlases[this._atlasIndex]; + if (!atlas) { + atlas = this._createAtlas(); + } + + const dynamicSprite = atlas.addSprite(sprite, imageSource); + if (!dynamicSprite) { + if (this._atlasIndex + 1 >= this._maxAtlasCount) { + this._atlasIndex = this._maxAtlasCount; + return null; + } + atlas = this._createAtlas(); + return atlas.addSprite(sprite, imageSource); + } + + return dynamicSprite; + } + + public reset() {} + + private _createAtlas(): DynamicSpriteAtlas { + this._atlasIndex++; + const { _textureSize } = this; + const atlas = new DynamicSpriteAtlas(this.engine, _textureSize, _textureSize); + this._atlases.push(atlas); + return atlas; + } +} diff --git a/packages/core/src/2d/dynamic-atlas/DynamicSpriteAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicSpriteAtlas.ts new file mode 100644 index 0000000000..84f6ae43c2 --- /dev/null +++ b/packages/core/src/2d/dynamic-atlas/DynamicSpriteAtlas.ts @@ -0,0 +1,20 @@ +import { Engine } from "../../Engine"; +import { Texture2D } from "../../texture/Texture2D"; +import { Sprite } from "../sprite/Sprite"; +import { DynamicSprite } from "./types"; + +export class DynamicSpriteAtlas { + private _texture: Texture2D; + private _width: number; + private _height: number; + + constructor(engine: Engine, width: number, height: number) { + this._width = width; + this._height = height; + this._texture = new Texture2D(engine, width, height); + } + + public addSprite(sprite: Sprite, imageSource: TexImageSource): DynamicSprite | null { + + } +} diff --git a/packages/core/src/2d/dynamic-atlas/types.ts b/packages/core/src/2d/dynamic-atlas/types.ts new file mode 100644 index 0000000000..d9d886e64d --- /dev/null +++ b/packages/core/src/2d/dynamic-atlas/types.ts @@ -0,0 +1,7 @@ +import { Vector2 } from "@oasis-engine/math"; +import { Texture2D } from "../../texture/Texture2D"; + +export interface DynamicSprite { + _uv: Array, + texture: Texture2D +} diff --git a/packages/core/src/2d/index.ts b/packages/core/src/2d/index.ts index c28c7dd43f..ff9ab0843a 100644 --- a/packages/core/src/2d/index.ts +++ b/packages/core/src/2d/index.ts @@ -3,5 +3,6 @@ export { SpriteMaskLayer } from "./enums/SpriteMaskLayer"; export { TextHorizontalAlignment, TextVerticalAlignment } from "./enums/TextAlignment"; export { TextHorizontalOverflow, TextVerticalOverflow } from "./enums/TextOverflow"; export { SpriteAtlas } from "./atlas/SpriteAtlas"; +export { DynamicAtlasManager } from "./dynamic-atlas/DynamicAtlasManager"; export * from "./sprite/index"; -export * from "./text/index"; \ No newline at end of file +export * from "./text/index"; diff --git a/packages/core/src/2d/sprite/Sprite.ts b/packages/core/src/2d/sprite/Sprite.ts index 1454680535..d355c22850 100644 --- a/packages/core/src/2d/sprite/Sprite.ts +++ b/packages/core/src/2d/sprite/Sprite.ts @@ -2,6 +2,8 @@ import { BoundingBox, MathUtil, Rect, Vector2, Vector4 } from "@oasis-engine/mat import { RefObject } from "../../asset/RefObject"; import { Engine } from "../../Engine"; import { Texture2D } from "../../texture/Texture2D"; +import { UpdateFlag } from "../../UpdateFlag"; +import { UpdateFlagManager } from "../../UpdateFlagManager"; /** * 2D sprite. @@ -31,6 +33,7 @@ export class Sprite extends RefObject { private _atlasRegion: Rect = new Rect(0, 0, 1, 1); private _atlasRegionOffset: Vector4 = new Vector4(0, 0, 0, 0); private _dirtyFlag: DirtyFlag = DirtyFlag.all; + private _updateFlagManager: UpdateFlagManager = new UpdateFlagManager(); /** * The reference to the used texture. @@ -146,26 +149,6 @@ export class Sprite extends RefObject { } } - /** - * Clone. - * @returns Cloned sprite - */ - clone(): Sprite { - const cloneSprite = new Sprite( - this._engine, - this._texture, - this._region, - this._pivot, - this._pixelsPerUnit, - this.name - ); - cloneSprite._assetID = this._assetID; - cloneSprite._atlasRotated = this._atlasRotated; - this._atlasRegion.cloneTo(cloneSprite._atlasRegion); - this._atlasRegionOffset.cloneTo(cloneSprite._atlasRegionOffset); - return cloneSprite; - } - /** * Constructor a Sprite. * @param engine - Engine to which the sprite belongs @@ -195,6 +178,34 @@ export class Sprite extends RefObject { this._triangles = Sprite._rectangleTriangles; } + /** + * Clone. + * @returns Cloned sprite + */ + clone(): Sprite { + const cloneSprite = new Sprite( + this._engine, + this._texture, + this._region, + this._pivot, + this._pixelsPerUnit, + this.name + ); + cloneSprite._assetID = this._assetID; + cloneSprite._atlasRotated = this._atlasRotated; + this._atlasRegion.cloneTo(cloneSprite._atlasRegion); + this._atlasRegionOffset.cloneTo(cloneSprite._atlasRegionOffset); + return cloneSprite; + } + + /** + * Register update flag, update flag will be true if the sprite changes. + * @returns Update flag + */ + registerUpdateFlag(): UpdateFlag { + return this._updateFlagManager.register(); + } + /** * @override */ @@ -365,6 +376,7 @@ export class Sprite extends RefObject { private _setDirtyFlagTrue(type: number): void { this._dirtyFlag |= type; + this._updateFlagManager.distribute(); } private _setDirtyFlagFalse(type: number): void { diff --git a/packages/core/src/2d/sprite/SpriteRenderer.ts b/packages/core/src/2d/sprite/SpriteRenderer.ts index 045c1672f1..b8200e7960 100644 --- a/packages/core/src/2d/sprite/SpriteRenderer.ts +++ b/packages/core/src/2d/sprite/SpriteRenderer.ts @@ -43,6 +43,8 @@ export class SpriteRenderer extends Renderer { private _dirtyFlag: number = DirtyFlag.All; @ignoreClone private _isWorldMatrixDirty: UpdateFlag; + @ignoreClone + private _spriteDirty: UpdateFlag; @assignmentClone private _maskInteraction: SpriteMaskInteraction = SpriteMaskInteraction.None; @assignmentClone @@ -59,6 +61,9 @@ export class SpriteRenderer extends Renderer { if (this._sprite !== value) { this._sprite = value; this._setDirtyFlagTrue(DirtyFlag.Sprite); + if (value) { + this._spriteDirty = value.registerUpdateFlag(); + } } } @@ -154,9 +159,9 @@ export class SpriteRenderer extends Renderer { const { transform } = this.entity; // Update sprite data. - const localDirty = sprite._updateMeshData(); + sprite._updateMeshData(); - if (this._isWorldMatrixDirty.flag || localDirty || this._isContainDirtyFlag(DirtyFlag.Sprite)) { + if (this._isWorldMatrixDirty.flag || this._spriteDirty.flag || this._isContainDirtyFlag(DirtyFlag.Sprite)) { const localPositions = sprite._positions; const localVertexPos = SpriteRenderer._tempVec3; const worldMatrix = transform.worldMatrix; @@ -171,6 +176,7 @@ export class SpriteRenderer extends Renderer { this._setDirtyFlagFalse(DirtyFlag.Flip); this._setDirtyFlagFalse(DirtyFlag.Sprite); this._isWorldMatrixDirty.flag = false; + this._spriteDirty.flag = false; this._cacheFlipX = flipX; this._cacheFlipY = flipY; } else if (this._isContainDirtyFlag(DirtyFlag.Flip)) { diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index e47987c37c..a9bf8a3f83 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -6,6 +6,7 @@ import { assignmentClone, deepClone, ignoreClone } from "../../clone/CloneManage import { Entity } from "../../Entity"; import { ShaderProperty } from "../../shader/ShaderProperty"; import { Texture2D } from "../../texture"; +import { DynamicSprite } from "../dynamic-atlas/types"; import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; import { TextUtils } from "./TextUtils"; @@ -26,6 +27,8 @@ export class TextRenderer extends Renderer { @assignmentClone private _sprite: Sprite = null; + @assignmentClone + private _dynamicSprite: DynamicSprite = null; @deepClone private _positions: Vector3[] = [new Vector3(), new Vector3(), new Vector3(), new Vector3()]; @deepClone @@ -271,22 +274,9 @@ export class TextRenderer extends Renderer { return; } - const { _positions } = this; - const { transform } = this.entity; - // Update sprite data. - const localDirty = sprite._updateMeshData(); - if (this._isWorldMatrixDirty.flag || localDirty) { - const localPositions = sprite._positions; - const localVertexPos = TextRenderer._tempVec3; - const worldMatrix = transform.worldMatrix; - - for (let i = 0, n = _positions.length; i < n; i++) { - const curVertexPos = localPositions[i]; - localVertexPos.setValue(curVertexPos.x, curVertexPos.y, 0); - Vector3.transformToVec3(localVertexPos, worldMatrix, _positions[i]); - } - + if (this._isWorldMatrixDirty.flag) { + this._updatePosition(); this._isWorldMatrixDirty.flag = false; } @@ -295,12 +285,13 @@ export class TextRenderer extends Renderer { this._setDirtyFlagFalse(DirtyFlag.MaskInteraction); } - this.shaderData.setTexture(TextRenderer._textureProperty, texture); - const material = this.getMaterial(); - const spriteElementPool = this._engine._spriteElementPool; const spriteElement = spriteElementPool.getFromPool(); - spriteElement.setValue(this, _positions, sprite._uv, sprite._triangles, this.color, material, camera); + const { _dynamicSprite } = this; + const uploadTexture = _dynamicSprite ? _dynamicSprite.texture : texture; + const uv = _dynamicSprite ? _dynamicSprite._uv : sprite._uv; + this.shaderData.setTexture(TextRenderer._textureProperty, uploadTexture); + spriteElement.setValue(this, this._positions, uv, sprite._triangles, this.color, this.getMaterial(), camera); camera._renderPipeline.pushPrimitive(spriteElement); } @@ -403,8 +394,9 @@ export class TextRenderer extends Renderer { const { canvas, context } = textContext; const trimData = TextUtils.trimCanvas(textContext); const { data } = trimData; + const { _sprite } = this; if (!data) { - this._sprite.texture = null; + _sprite.texture = null; return; } const { width, height } = trimData; @@ -418,7 +410,11 @@ export class TextRenderer extends Renderer { texture.setImageSource(canvas); } texture.generateMipmaps(); - this._sprite.texture = texture; + _sprite.texture = texture; + _sprite._updateMeshData(); + this._updatePosition(); + + this._dynamicSprite = this.engine.dynamicAtlasManager.addSprite(_sprite, canvas); } private _calculateLinePosition( @@ -478,6 +474,19 @@ export class TextRenderer extends Renderer { stencilState.compareFunctionBack = compare; } } + + private _updatePosition() { + const localPositions = this._sprite._positions; + const localVertexPos = TextRenderer._tempVec3; + const worldMatrix = this.entity.transform.worldMatrix; + + const { _positions } = this; + for (let i = 0, n = _positions.length; i < n; i++) { + const curVertexPos = localPositions[i]; + localVertexPos.setValue(curVertexPos.x, curVertexPos.y, 0); + Vector3.transformToVec3(localVertexPos, worldMatrix, _positions[i]); + } + } } enum DirtyFlag { diff --git a/packages/core/src/Engine.ts b/packages/core/src/Engine.ts index 61bd5d8b05..9999590ccc 100644 --- a/packages/core/src/Engine.ts +++ b/packages/core/src/Engine.ts @@ -1,5 +1,5 @@ import { IPhysics } from "@oasis-engine/design"; -import { ColorSpace } from "."; +import { ColorSpace, DynamicAtlasManager } from "."; import { ResourceManager } from "./asset/ResourceManager"; import { Event, EventDispatcher, Logger, Time } from "./base"; import { Canvas } from "./Canvas"; @@ -79,6 +79,7 @@ export class Engine extends EventDispatcher { private _settings: EngineSettings = {}; private _resourceManager: ResourceManager = new ResourceManager(this); private _sceneManager: SceneManager = new SceneManager(this); + private _dynamicAtlasManager: DynamicAtlasManager = new DynamicAtlasManager(this); private _vSyncCount: number = 1; private _targetFrameRate: number = 60; private _time: Time = new Time(); @@ -129,6 +130,13 @@ export class Engine extends EventDispatcher { return this._sceneManager; } + /** + * Get the dynamic atlas manager. + */ + get dynamicAtlasManager(): DynamicAtlasManager { + return this._dynamicAtlasManager; + } + /** * Get the Time class. */ From a6caa94c5efbdb8ee53c1b00d9f5a569ebc8840e Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 18 Jan 2022 18:20:21 +0800 Subject: [PATCH 31/91] feat(text): temp code --- .../core/src/2d/dynamic-atlas/DynamicAtlas.ts | 62 +++++++++++++++++++ .../2d/dynamic-atlas/DynamicAtlasManager.ts | 20 +++--- .../2d/dynamic-atlas/DynamicSpriteAtlas.ts | 20 ------ 3 files changed, 75 insertions(+), 27 deletions(-) create mode 100644 packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts delete mode 100644 packages/core/src/2d/dynamic-atlas/DynamicSpriteAtlas.ts diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts new file mode 100644 index 0000000000..7842fb033c --- /dev/null +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts @@ -0,0 +1,62 @@ +import { Vector2 } from "@oasis-engine/math"; +import { Engine } from "../../Engine"; +import { Texture2D } from "../../texture/Texture2D"; +import { Sprite } from "../sprite/Sprite"; +import { DynamicSprite } from "./types"; + +/** + * Dynamic atlas for text. + */ +export class DynamicAtlas { + private _texture: Texture2D; + private _width: number; + private _height: number; + + private _space: number = 1; + private _curX: number = 1; + private _curY: number = 1; + private _nextY: number = 1; + + constructor(engine: Engine, width: number, height: number) { + this._width = width; + this._height = height; + this._texture = new Texture2D(engine, width, height); + } + + public destroy() { + + } + + public addSprite(sprite: Sprite, imageSource: TexImageSource): DynamicSprite | null { + const { _space: space, _texture: texture } = this; + const { width, height } = imageSource; + + const endX = this._curX + width + space; + if (endX >= this._width) { + this._curX = space; + this._curY = this._nextY + space; + } + + const endY = this._curY + height + space; + if (endY > this._nextY) { + this._nextY = endY; + } + + if (this._nextY >= this._height) { + return null; + } + + texture.setImageSource(imageSource, 0, false, false, this._curX, this._curY); + const dynamicSprite: DynamicSprite = { + _uv: [ + new Vector2(this._curX / this._width, this._curY / this._height), + new Vector2(this._curX + width / this._width, this._curY / this._height), + new Vector2(this._curX + width / this._width, this._curY + height / this._height), + new Vector2(this._curX / this._width, this._curY + height / this._height) + ], + texture + } + this._curX = endX + space; + return dynamicSprite; + } +} diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts index 905533df5d..fc8a17c755 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts @@ -1,6 +1,6 @@ import { Sprite } from "../sprite/Sprite"; import { Engine } from "../../Engine"; -import { DynamicSpriteAtlas } from "./DynamicSpriteAtlas"; +import { DynamicAtlas } from "./DynamicAtlas"; import { DynamicSprite } from "./types"; /** @@ -10,7 +10,7 @@ export class DynamicAtlasManager { private _enabled: boolean = false; private _maxAtlasCount: number = 2; private _textureSize: number = 2048; - private _atlases: Array = []; + private _atlases: Array = []; private _atlasIndex: number = -1; /** @@ -59,8 +59,6 @@ export class DynamicAtlasManager { return null; } - const texture = sprite.texture; - const id = texture.instanceId; let atlas = this._atlases[this._atlasIndex]; if (!atlas) { atlas = this._createAtlas(); @@ -79,12 +77,20 @@ export class DynamicAtlasManager { return dynamicSprite; } - public reset() {} + public reset() { + const { _atlases } = this; + for (let i = 0, l = _atlases.length; i < l; ++i) { + _atlases[i].destroy(); + } + + _atlases.length = 0; + this._atlasIndex = -1; + } - private _createAtlas(): DynamicSpriteAtlas { + private _createAtlas(): DynamicAtlas { this._atlasIndex++; const { _textureSize } = this; - const atlas = new DynamicSpriteAtlas(this.engine, _textureSize, _textureSize); + const atlas = new DynamicAtlas(this.engine, _textureSize, _textureSize); this._atlases.push(atlas); return atlas; } diff --git a/packages/core/src/2d/dynamic-atlas/DynamicSpriteAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicSpriteAtlas.ts deleted file mode 100644 index 84f6ae43c2..0000000000 --- a/packages/core/src/2d/dynamic-atlas/DynamicSpriteAtlas.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Engine } from "../../Engine"; -import { Texture2D } from "../../texture/Texture2D"; -import { Sprite } from "../sprite/Sprite"; -import { DynamicSprite } from "./types"; - -export class DynamicSpriteAtlas { - private _texture: Texture2D; - private _width: number; - private _height: number; - - constructor(engine: Engine, width: number, height: number) { - this._width = width; - this._height = height; - this._texture = new Texture2D(engine, width, height); - } - - public addSprite(sprite: Sprite, imageSource: TexImageSource): DynamicSprite | null { - - } -} From a91c1d40ed36509dc5b46bf86483e4998f3a2d2d Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 18 Jan 2022 19:03:00 +0800 Subject: [PATCH 32/91] feat(text): dynamic atlas first version --- packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts | 14 ++++++++++---- packages/core/src/2d/text/TextRenderer.ts | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts index 7842fb033c..20d48aec4d 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts @@ -47,12 +47,18 @@ export class DynamicAtlas { } texture.setImageSource(imageSource, 0, false, false, this._curX, this._curY); + + const { _width, _height } = this; + const l = this._curX / _width; + const r = (this._curX + width) / _width; + const t = this._curY / _height; + const b = (this._curY + height) / _height; const dynamicSprite: DynamicSprite = { _uv: [ - new Vector2(this._curX / this._width, this._curY / this._height), - new Vector2(this._curX + width / this._width, this._curY / this._height), - new Vector2(this._curX + width / this._width, this._curY + height / this._height), - new Vector2(this._curX / this._width, this._curY + height / this._height) + new Vector2(l, t), + new Vector2(r, t), + new Vector2(r, b), + new Vector2(l, b) ], texture } diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index a9bf8a3f83..0edd690631 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -58,7 +58,7 @@ export class TextRenderer extends Renderer { @assignmentClone private _verticalOverflow: TextVerticalOverflow = TextVerticalOverflow.Overflow; @ignoreClone - private _dirtyFlag: number = DirtyFlag.All; + private _dirtyFlag: number = DirtyFlag.Style; @ignoreClone private _isWorldMatrixDirty: UpdateFlag; @assignmentClone @@ -244,8 +244,8 @@ export class TextRenderer extends Renderer { constructor(entity: Entity) { super(entity); this._isWorldMatrixDirty = entity.transform.registerWorldChangeFlag(); - this.setMaterial(this._engine._spriteDefaultMaterial); this._sprite = new Sprite(this.engine); + this.setMaterial(this._engine._spriteDefaultMaterial); } /** From d3e4ed962ab21f18c16009c4a2260a4c77f74c49 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Wed, 19 Jan 2022 11:00:16 +0800 Subject: [PATCH 33/91] feat(text): opt code for addSprite --- .../core/src/2d/dynamic-atlas/DynamicAtlas.ts | 31 +++++++------------ .../2d/dynamic-atlas/DynamicAtlasManager.ts | 16 +++++----- packages/core/src/2d/dynamic-atlas/types.ts | 7 ----- packages/core/src/2d/text/TextRenderer.ts | 26 +++++++++------- 4 files changed, 35 insertions(+), 45 deletions(-) delete mode 100644 packages/core/src/2d/dynamic-atlas/types.ts diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts index 20d48aec4d..ce3cc03f64 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts @@ -1,13 +1,14 @@ -import { Vector2 } from "@oasis-engine/math"; +import { Rect } from "@oasis-engine/math"; import { Engine } from "../../Engine"; import { Texture2D } from "../../texture/Texture2D"; import { Sprite } from "../sprite/Sprite"; -import { DynamicSprite } from "./types"; /** * Dynamic atlas for text. */ export class DynamicAtlas { + private static _rect: Rect = new Rect(); + private _texture: Texture2D; private _width: number; private _height: number; @@ -24,10 +25,10 @@ export class DynamicAtlas { } public destroy() { - + this._texture.destroy(); } - public addSprite(sprite: Sprite, imageSource: TexImageSource): DynamicSprite | null { + public addSprite(sprite: Sprite, imageSource: TexImageSource): boolean { const { _space: space, _texture: texture } = this; const { width, height } = imageSource; @@ -43,26 +44,18 @@ export class DynamicAtlas { } if (this._nextY >= this._height) { - return null; + return false; } texture.setImageSource(imageSource, 0, false, false, this._curX, this._curY); const { _width, _height } = this; - const l = this._curX / _width; - const r = (this._curX + width) / _width; - const t = this._curY / _height; - const b = (this._curY + height) / _height; - const dynamicSprite: DynamicSprite = { - _uv: [ - new Vector2(l, t), - new Vector2(r, t), - new Vector2(r, b), - new Vector2(l, b) - ], - texture - } + const rect = DynamicAtlas._rect; + rect.setValue(this._curX / _width, this._curY / _height, width / _width, height / _height); + sprite.atlasRegion = rect; + sprite.texture = texture; this._curX = endX + space; - return dynamicSprite; + + return true; } } diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts index fc8a17c755..aec14e9423 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts @@ -1,7 +1,6 @@ import { Sprite } from "../sprite/Sprite"; import { Engine } from "../../Engine"; import { DynamicAtlas } from "./DynamicAtlas"; -import { DynamicSprite } from "./types"; /** * Dynamic atlas manager for text. @@ -54,9 +53,9 @@ export class DynamicAtlasManager { */ constructor(public readonly engine: Engine) {} - public addSprite(sprite: Sprite, imageSource: TexImageSource): DynamicSprite | null { + public addSprite(sprite: Sprite, imageSource: TexImageSource): boolean { if (!this._enabled || this._atlasIndex >= this._maxAtlasCount) { - return null; + return false; } let atlas = this._atlases[this._atlasIndex]; @@ -64,17 +63,20 @@ export class DynamicAtlasManager { atlas = this._createAtlas(); } - const dynamicSprite = atlas.addSprite(sprite, imageSource); - if (!dynamicSprite) { + if (!atlas.addSprite(sprite, imageSource)) { if (this._atlasIndex + 1 >= this._maxAtlasCount) { this._atlasIndex = this._maxAtlasCount; - return null; + return false; } atlas = this._createAtlas(); return atlas.addSprite(sprite, imageSource); } - return dynamicSprite; + return true; + } + + public removeSprite() { + } public reset() { diff --git a/packages/core/src/2d/dynamic-atlas/types.ts b/packages/core/src/2d/dynamic-atlas/types.ts deleted file mode 100644 index d9d886e64d..0000000000 --- a/packages/core/src/2d/dynamic-atlas/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Vector2 } from "@oasis-engine/math"; -import { Texture2D } from "../../texture/Texture2D"; - -export interface DynamicSprite { - _uv: Array, - texture: Texture2D -} diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 0edd690631..cd98c94109 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -6,7 +6,6 @@ import { assignmentClone, deepClone, ignoreClone } from "../../clone/CloneManage import { Entity } from "../../Entity"; import { ShaderProperty } from "../../shader/ShaderProperty"; import { Texture2D } from "../../texture"; -import { DynamicSprite } from "../dynamic-atlas/types"; import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; import { TextUtils } from "./TextUtils"; @@ -27,8 +26,6 @@ export class TextRenderer extends Renderer { @assignmentClone private _sprite: Sprite = null; - @assignmentClone - private _dynamicSprite: DynamicSprite = null; @deepClone private _positions: Vector3[] = [new Vector3(), new Vector3(), new Vector3(), new Vector3()]; @deepClone @@ -287,11 +284,16 @@ export class TextRenderer extends Renderer { const spriteElementPool = this._engine._spriteElementPool; const spriteElement = spriteElementPool.getFromPool(); - const { _dynamicSprite } = this; - const uploadTexture = _dynamicSprite ? _dynamicSprite.texture : texture; - const uv = _dynamicSprite ? _dynamicSprite._uv : sprite._uv; - this.shaderData.setTexture(TextRenderer._textureProperty, uploadTexture); - spriteElement.setValue(this, this._positions, uv, sprite._triangles, this.color, this.getMaterial(), camera); + this.shaderData.setTexture(TextRenderer._textureProperty, texture); + spriteElement.setValue( + this, + this._positions, + sprite._uv, + sprite._triangles, + this.color, + this.getMaterial(), + camera + ); camera._renderPipeline.pushPrimitive(spriteElement); } @@ -411,10 +413,10 @@ export class TextRenderer extends Renderer { } texture.generateMipmaps(); _sprite.texture = texture; + + this.engine.dynamicAtlasManager.addSprite(_sprite, canvas); _sprite._updateMeshData(); this._updatePosition(); - - this._dynamicSprite = this.engine.dynamicAtlasManager.addSprite(_sprite, canvas); } private _calculateLinePosition( @@ -426,7 +428,7 @@ export class TextRenderer extends Renderer { length: number, out: Vector2 ) { - switch(this._verticalAlignment) { + switch (this._verticalAlignment) { case TextVerticalAlignment.Top: out.y = index * lineHeight; break; @@ -438,7 +440,7 @@ export class TextRenderer extends Renderer { break; } - switch(this._horizontalAlignment) { + switch (this._horizontalAlignment) { case TextHorizontalAlignment.Left: out.x = 0; break; From 916abb05a238083a805cb9edeb6c8467f916723f Mon Sep 17 00:00:00 2001 From: singlecoder Date: Wed, 19 Jan 2022 19:52:33 +0800 Subject: [PATCH 34/91] feat(text): opt memory for text renderer --- .../core/src/2d/dynamic-atlas/DynamicAtlas.ts | 26 +++++++++++++++ .../2d/dynamic-atlas/DynamicAtlasManager.ts | 32 ++++++++++++------- packages/core/src/2d/dynamic-atlas/types.ts | 12 +++++++ packages/core/src/2d/text/TextRenderer.ts | 27 ++++++++++++---- 4 files changed, 80 insertions(+), 17 deletions(-) create mode 100644 packages/core/src/2d/dynamic-atlas/types.ts diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts index ce3cc03f64..a935f110d4 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts @@ -2,6 +2,7 @@ import { Rect } from "@oasis-engine/math"; import { Engine } from "../../Engine"; import { Texture2D } from "../../texture/Texture2D"; import { Sprite } from "../sprite/Sprite"; +import { OriginTextureObj, OriginTextureRectObj } from "./types"; /** * Dynamic atlas for text. @@ -18,13 +19,18 @@ export class DynamicAtlas { private _curY: number = 1; private _nextY: number = 1; + private _originTextures: OriginTextureObj = {}; + private _originTextureInfos: OriginTextureRectObj = {}; + constructor(engine: Engine, width: number, height: number) { this._width = width; this._height = height; this._texture = new Texture2D(engine, width, height); + this._texture._addRefCount(1); } public destroy() { + this._texture._addRefCount(-1); this._texture.destroy(); } @@ -52,10 +58,30 @@ export class DynamicAtlas { const { _width, _height } = this; const rect = DynamicAtlas._rect; rect.setValue(this._curX / _width, this._curY / _height, width / _width, height / _height); + // Cache origin texture. + const originTexture = sprite.texture; + this._originTextures[sprite.instanceId] = originTexture; + this._originTextureInfos[originTexture.instanceId] = rect.clone(); + // Update atlas texture. sprite.atlasRegion = rect; sprite.texture = texture; this._curX = endX + space; return true; } + + public removeSprite(sprite: Sprite) { + const id = sprite.instanceId; + const { _originTextures } = this; + const texture = _originTextures[id]; + if (texture) { + delete this._originTextureInfos[texture.instanceId] + texture.destroy(); + } + delete _originTextures[id]; + } + + public getOriginTextureById(id: number): Texture2D | null { + return this._originTextures[id] || null; + } } diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts index aec14e9423..492dd90733 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts @@ -1,6 +1,7 @@ import { Sprite } from "../sprite/Sprite"; import { Engine } from "../../Engine"; import { DynamicAtlas } from "./DynamicAtlas"; +import { Texture2D } from "../../texture/Texture2D"; /** * Dynamic atlas manager for text. @@ -53,9 +54,9 @@ export class DynamicAtlasManager { */ constructor(public readonly engine: Engine) {} - public addSprite(sprite: Sprite, imageSource: TexImageSource): boolean { + public addSprite(sprite: Sprite, imageSource: TexImageSource): Texture2D | null { if (!this._enabled || this._atlasIndex >= this._maxAtlasCount) { - return false; + return null; } let atlas = this._atlases[this._atlasIndex]; @@ -63,20 +64,29 @@ export class DynamicAtlasManager { atlas = this._createAtlas(); } - if (!atlas.addSprite(sprite, imageSource)) { - if (this._atlasIndex + 1 >= this._maxAtlasCount) { - this._atlasIndex = this._maxAtlasCount; - return false; - } - atlas = this._createAtlas(); - return atlas.addSprite(sprite, imageSource); + const oldTexture = atlas.getOriginTextureById(sprite.instanceId); + if (atlas.addSprite(sprite, imageSource)) { + return oldTexture || null; + } + + if (this._atlasIndex + 1 >= this._maxAtlasCount) { + this._atlasIndex = this._maxAtlasCount; + return null; } - return true; + atlas = this._createAtlas(); + atlas.addSprite(sprite, imageSource); + return null; } - public removeSprite() { + public removeSprite(sprite: Sprite) { + if (!this._enabled || !sprite) return ; + const { _atlases } = this; + for (let i = 0, l = _atlases.length; i < l; ++i) { + const atlas = _atlases[i]; + atlas.removeSprite(sprite); + } } public reset() { diff --git a/packages/core/src/2d/dynamic-atlas/types.ts b/packages/core/src/2d/dynamic-atlas/types.ts new file mode 100644 index 0000000000..cefd8b5c73 --- /dev/null +++ b/packages/core/src/2d/dynamic-atlas/types.ts @@ -0,0 +1,12 @@ +import { Rect } from "@oasis-engine/math"; +import { Texture2D } from "../../texture/Texture2D"; + +export interface OriginTextureObj { + /** The instance id for sprite. */ + [id: number]: Texture2D +} + +export interface OriginTextureRectObj { + /** The instance id for texture. */ + [id: number]: Rect +} diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index cd98c94109..be94ef03e7 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -250,7 +250,7 @@ export class TextRenderer extends Renderer { */ _render(camera: Camera): void { if (this._text === "") { - this._sprite.texture = null; + this._clearTexture(); return; } @@ -284,7 +284,6 @@ export class TextRenderer extends Renderer { const spriteElementPool = this._engine._spriteElementPool; const spriteElement = spriteElementPool.getFromPool(); - this.shaderData.setTexture(TextRenderer._textureProperty, texture); spriteElement.setValue( this, this._positions, @@ -351,7 +350,7 @@ export class TextRenderer extends Renderer { private _updateText() { if (this._text === "") { - this._sprite.texture = null; + this._clearTexture(); return; } @@ -361,7 +360,7 @@ export class TextRenderer extends Renderer { const textMetrics = TextUtils.measureText(textContext, this, fontStr); const { width, height } = textMetrics; if (width === 0 || height === 0) { - this._sprite.texture = null; + this._clearTexture(); return; } @@ -398,9 +397,10 @@ export class TextRenderer extends Renderer { const { data } = trimData; const { _sprite } = this; if (!data) { - _sprite.texture = null; + this._clearTexture(); return; } + const { width, height } = trimData; canvas.width = width; canvas.height = height; @@ -412,9 +412,11 @@ export class TextRenderer extends Renderer { texture.setImageSource(canvas); } texture.generateMipmaps(); - _sprite.texture = texture; + this._clearTexture(); + _sprite.texture = texture; this.engine.dynamicAtlasManager.addSprite(_sprite, canvas); + this.shaderData.setTexture(TextRenderer._textureProperty, _sprite.texture); _sprite._updateMeshData(); this._updatePosition(); } @@ -489,6 +491,19 @@ export class TextRenderer extends Renderer { Vector3.transformToVec3(localVertexPos, worldMatrix, _positions[i]); } } + + private _clearTexture() { + const { _sprite } = this; + // Remove sprite from dynamic atlas. + this.engine.dynamicAtlasManager.removeSprite(_sprite); + // Destroy current texture. + const texture = _sprite.texture; + _sprite.texture = null; + if (texture) { + this.shaderData.setTexture(TextRenderer._textureProperty, null); + texture.destroy(); + } + } } enum DirtyFlag { From c88417f55f0780d75ee79aa36f6da5833f1ee62b Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 21 Jan 2022 11:48:24 +0800 Subject: [PATCH 35/91] feat(text): opt code --- .../core/src/2d/dynamic-atlas/DynamicAtlas.ts | 61 +++++++++++++------ packages/core/src/2d/dynamic-atlas/types.ts | 15 +++-- packages/core/src/2d/text/TextRenderer.ts | 8 +-- 3 files changed, 57 insertions(+), 27 deletions(-) diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts index a935f110d4..e13d1f2172 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts @@ -2,13 +2,13 @@ import { Rect } from "@oasis-engine/math"; import { Engine } from "../../Engine"; import { Texture2D } from "../../texture/Texture2D"; import { Sprite } from "../sprite/Sprite"; -import { OriginTextureObj, OriginTextureRectObj } from "./types"; +import { OriginInfo, OriginInfoObj } from "./types"; /** * Dynamic atlas for text. */ export class DynamicAtlas { - private static _rect: Rect = new Rect(); + private static _region: Rect = new Rect(); private _texture: Texture2D; private _width: number; @@ -19,8 +19,7 @@ export class DynamicAtlas { private _curY: number = 1; private _nextY: number = 1; - private _originTextures: OriginTextureObj = {}; - private _originTextureInfos: OriginTextureRectObj = {}; + private _originInfos: OriginInfoObj = {}; constructor(engine: Engine, width: number, height: number) { this._width = width; @@ -30,8 +29,18 @@ export class DynamicAtlas { } public destroy() { - this._texture._addRefCount(-1); - this._texture.destroy(); + const { _originInfos } = this; + const ids = Object.keys(_originInfos); + for (let i = 0, l = ids.length; i < l; ++i) { + const id = ids[i]; + const info = _originInfos[id]; + const originSprite = info.sprite; + originSprite.texture = info.texture; + originSprite.atlasRegion = info.atlasRegion; + delete _originInfos[id]; + } + + this._texture.destroy(true); } public addSprite(sprite: Sprite, imageSource: TexImageSource): boolean { @@ -56,14 +65,28 @@ export class DynamicAtlas { texture.setImageSource(imageSource, 0, false, false, this._curX, this._curY); const { _width, _height } = this; - const rect = DynamicAtlas._rect; - rect.setValue(this._curX / _width, this._curY / _height, width / _width, height / _height); + const region = DynamicAtlas._region; + region.setValue(this._curX / _width, this._curY / _height, width / _width, height / _height); + // Cache origin texture. const originTexture = sprite.texture; - this._originTextures[sprite.instanceId] = originTexture; - this._originTextureInfos[originTexture.instanceId] = rect.clone(); + const id = sprite.instanceId; + const { _originInfos } = this; + const originInfo = _originInfos[id]; + if (originInfo) { + originInfo.sprite = sprite; + originInfo.texture = originTexture; + originInfo.atlasRegion = sprite.atlasRegion.clone(); + } else { + _originInfos[id] = { + sprite: sprite, + texture: originTexture, + atlasRegion: sprite.atlasRegion.clone() + }; + } + // Update atlas texture. - sprite.atlasRegion = rect; + sprite.atlasRegion = region; sprite.texture = texture; this._curX = endX + space; @@ -72,16 +95,20 @@ export class DynamicAtlas { public removeSprite(sprite: Sprite) { const id = sprite.instanceId; - const { _originTextures } = this; - const texture = _originTextures[id]; - if (texture) { - delete this._originTextureInfos[texture.instanceId] + const { _originInfos } = this; + const info = _originInfos[id]; + if (info) { + const texture = info.texture; texture.destroy(); } - delete _originTextures[id]; + delete _originInfos[id]; } public getOriginTextureById(id: number): Texture2D | null { - return this._originTextures[id] || null; + const info = this._originInfos[id]; + if (info) { + return info.texture; + } + return null; } } diff --git a/packages/core/src/2d/dynamic-atlas/types.ts b/packages/core/src/2d/dynamic-atlas/types.ts index cefd8b5c73..493614a8bf 100644 --- a/packages/core/src/2d/dynamic-atlas/types.ts +++ b/packages/core/src/2d/dynamic-atlas/types.ts @@ -1,12 +1,15 @@ import { Rect } from "@oasis-engine/math"; +import { Sprite } from "../sprite"; import { Texture2D } from "../../texture/Texture2D"; -export interface OriginTextureObj { - /** The instance id for sprite. */ - [id: number]: Texture2D +export interface OriginInfo { + sprite: Sprite; + texture: Texture2D; + atlasRegion: Rect; } -export interface OriginTextureRectObj { - /** The instance id for texture. */ - [id: number]: Rect +export interface OriginInfoObj { + /** The instance id for sprite. */ + [id: number]: OriginInfo } + diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index be94ef03e7..63c28c86aa 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -272,7 +272,8 @@ export class TextRenderer extends Renderer { } // Update sprite data. - if (this._isWorldMatrixDirty.flag) { + const localDirty = sprite._updateMeshData(); + if (this._isWorldMatrixDirty.flag || localDirty) { this._updatePosition(); this._isWorldMatrixDirty.flag = false; } @@ -282,6 +283,7 @@ export class TextRenderer extends Renderer { this._setDirtyFlagFalse(DirtyFlag.MaskInteraction); } + this.shaderData.setTexture(TextRenderer._textureProperty, texture); const spriteElementPool = this._engine._spriteElementPool; const spriteElement = spriteElementPool.getFromPool(); spriteElement.setValue( @@ -300,6 +302,7 @@ export class TextRenderer extends Renderer { * @internal */ _onDestroy(): void { + this.engine.dynamicAtlasManager.removeSprite(this._sprite); this._isWorldMatrixDirty.destroy(); super._onDestroy(); } @@ -416,9 +419,6 @@ export class TextRenderer extends Renderer { this._clearTexture(); _sprite.texture = texture; this.engine.dynamicAtlasManager.addSprite(_sprite, canvas); - this.shaderData.setTexture(TextRenderer._textureProperty, _sprite.texture); - _sprite._updateMeshData(); - this._updatePosition(); } private _calculateLinePosition( From 840c998ce2bd3046afa2bad4a4f08d5515f32a11 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 25 Jan 2022 15:11:37 +0800 Subject: [PATCH 36/91] feat(text): opt code --- packages/core/src/2d/text/TextRenderer.ts | 63 +++++++++++++++++------ packages/core/src/2d/text/TextUtils.ts | 28 ++++++++-- 2 files changed, 72 insertions(+), 19 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 63c28c86aa..19f01e250f 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -77,7 +77,7 @@ export class TextRenderer extends Renderer { } /** - * + * Rendering string for the TextRenderer. */ get text(): string { return this._text; @@ -91,6 +91,9 @@ export class TextRenderer extends Renderer { } } + /** + * The width of the TextRenderer (in 3D world coordinates). + */ get width(): number { return this._width; } @@ -102,6 +105,9 @@ export class TextRenderer extends Renderer { } } + /** + * The height of the TextRenderer (in 3D world coordinates). + */ get height(): number { return this._height; } @@ -113,6 +119,9 @@ export class TextRenderer extends Renderer { } } + /** + * The font name of the TextRenderer. + */ get fontName(): string { return this._fontName; } @@ -125,6 +134,9 @@ export class TextRenderer extends Renderer { } } + /** + * The font size of the TextRenderer. + */ get fontSize(): number { return this._fontSize; } @@ -136,6 +148,9 @@ export class TextRenderer extends Renderer { } } + /** + * The space between two lines (in pixels). + */ get lineSpace(): number { return this._lineSpace; } @@ -147,66 +162,84 @@ export class TextRenderer extends Renderer { } } - get isBold(): boolean { + /** + * The text is bold. + */ + get bold(): boolean { return this._isBold; } - set isBold(value: boolean) { + set bold(value: boolean) { if (this._isBold !== value) { this._isBold = value; this._setDirtyFlagTrue(DirtyFlag.Style); } } - get isItalic(): boolean { + /** + * The text is italic. + */ + get italic(): boolean { return this._isItalic; } - set isItalic(value: boolean) { + set italic(value: boolean) { if (this._isItalic !== value) { this._isItalic = value; this._setDirtyFlagTrue(DirtyFlag.Style); } } - get horizontalAlignment(): TextHorizontalAlignment { + /** + * The horizontal alignment. + */ + get hAlign(): TextHorizontalAlignment { return this._horizontalAlignment; } - set horizontalAlignment(value: TextHorizontalAlignment) { + set hAlign(value: TextHorizontalAlignment) { if (this._horizontalAlignment !== value) { this._horizontalAlignment = value; this._setDirtyFlagTrue(DirtyFlag.Style); } } - get verticalAlignment(): TextVerticalAlignment { + /** + * The vertical alignment. + */ + get vAlign(): TextVerticalAlignment { return this._verticalAlignment; } - set verticalAlignment(value: TextVerticalAlignment) { + set vAlign(value: TextVerticalAlignment) { if (this._verticalAlignment !== value) { this._verticalAlignment = value; this._setDirtyFlagTrue(DirtyFlag.Style); } } - get horizontalOverflow(): TextHorizontalOverflow { + /** + * The horizontal overflow. + */ + get hOverflow(): TextHorizontalOverflow { return this._horizontalOverflow; } - set horizontalOverflow(value: TextHorizontalOverflow) { + set hOverflow(value: TextHorizontalOverflow) { if (this._horizontalOverflow !== value) { this._horizontalOverflow = value; this._setDirtyFlagTrue(DirtyFlag.Style); } } - get verticalOverflow(): TextVerticalOverflow { + /** + * The vertical overflow. + */ + get vOverflow(): TextVerticalOverflow { return this._verticalOverflow; } - set verticalOverflow(value: TextVerticalOverflow) { + set vOverflow(value: TextVerticalOverflow) { if (this._verticalOverflow !== value) { this._verticalOverflow = value; this._setDirtyFlagTrue(DirtyFlag.Style); @@ -341,10 +374,10 @@ export class TextRenderer extends Renderer { private _getFontString() { let str = ""; - if (this.isBold) { + if (this.bold) { str += "bold "; } - if (this.isItalic) { + if (this.italic) { str += "italic "; } str += `${this._fontSize}px ${this._fontName}`; diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 766bfe95ad..921b6840ef 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -1,11 +1,17 @@ import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; import { TextRenderer } from "./TextRenderer"; +/** + * TextContext. + */ export interface TextContext { canvas: HTMLCanvasElement; context: CanvasRenderingContext2D; } +/** + * TextMetrics. + */ export interface TextMetrics { width: number; height: number; @@ -16,6 +22,9 @@ export interface TextMetrics { fontSize: number; } +/** + * TextUtils includes some helper function for text. + */ export class TextUtils { private static _testString = "qpjÉÅ"; private static _testBaseline = "M"; @@ -27,6 +36,10 @@ export class TextUtils { private static _fontSizes: { [font: string]: number } = {}; private static _textContext: TextContext = null; + /** + * The instance function to get an object includes 2d context and canvas. + * @returns the TextContext object + */ public static textContext(): TextContext { if (!TextUtils._textContext) { const canvas = document.createElement("canvas"); @@ -40,8 +53,8 @@ export class TextUtils { } /** - * measure the font. - * @param textContext - text context includes gl context and canvas + * Measure the font. + * @param textContext - text context includes 2d context and canvas * @param font - the string of the font * @returns the font size */ @@ -110,6 +123,13 @@ export class TextUtils { return fontSize; } + /** + * Measure the text. + * @param textContext - text context includes 2d context and canvas + * @param textRenderer - the text renderer + * @param fontStr - the string of font + * @returns the TextMetrics object + */ public static measureText(textContext: TextContext, textRenderer: TextRenderer, fontStr: string): TextMetrics { const fontSize = TextUtils.measureFont(textContext, fontStr); const textMetrics: TextMetrics = { @@ -143,7 +163,7 @@ export class TextUtils { // reset width and height. textMetrics.width = Math.min(maxLineWidth, TextUtils._maxWidth); let height = textRenderer.height * TextUtils._pixelsPerUnit; - if (textRenderer.verticalOverflow === TextVerticalOverflow.Overflow) { + if (textRenderer.vOverflow === TextVerticalOverflow.Overflow) { height = Math.min(textMetrics.lineHeight * linesLen, TextUtils._maxHeight); } textMetrics.height = height; @@ -215,7 +235,7 @@ export class TextUtils { } private static _wordWrap(textRenderer: TextRenderer, fontStr: string): Array { - const { width, height, horizontalOverflow, verticalOverflow } = textRenderer; + const { width, height, hOverflow: horizontalOverflow, vOverflow: verticalOverflow } = textRenderer; const isWrap = horizontalOverflow === TextHorizontalOverflow.Wrap; if (isWrap && width <= 0) { From 09fe2fe04bb3f47b2810e32584b25edcc2e6f641 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 25 Jan 2022 15:26:35 +0800 Subject: [PATCH 37/91] feat(text): opt code --- .../core/src/2d/dynamic-atlas/DynamicAtlas.ts | 18 ++++++++++++++++++ .../2d/dynamic-atlas/DynamicAtlasManager.ts | 17 +++++++++++++++-- packages/core/src/2d/dynamic-atlas/types.ts | 6 ++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts index e13d1f2172..d2c635b419 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts @@ -28,6 +28,9 @@ export class DynamicAtlas { this._texture._addRefCount(1); } + /** + * Destroy atlas, it will release the texture. + */ public destroy() { const { _originInfos } = this; const ids = Object.keys(_originInfos); @@ -43,6 +46,12 @@ export class DynamicAtlas { this._texture.destroy(true); } + /** + * Add a sprite. + * @param sprite - the sprite to add + * @param imageSource - The source of texture + * @returns true if add sprite success, otherwise false + */ public addSprite(sprite: Sprite, imageSource: TexImageSource): boolean { const { _space: space, _texture: texture } = this; const { width, height } = imageSource; @@ -93,6 +102,10 @@ export class DynamicAtlas { return true; } + /** + * Remove a sprite. + * @param sprite - the sprite to remove + */ public removeSprite(sprite: Sprite) { const id = sprite.instanceId; const { _originInfos } = this; @@ -104,6 +117,11 @@ export class DynamicAtlas { delete _originInfos[id]; } + /** + * The origin texture before batch for the sprite. + * @param id - the id of the sprite + * @returns the origin texture before batch if have, otherwise null + */ public getOriginTextureById(id: number): Texture2D | null { const info = this._originInfos[id]; if (info) { diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts index 492dd90733..49db518029 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts @@ -54,6 +54,12 @@ export class DynamicAtlasManager { */ constructor(public readonly engine: Engine) {} + /** + * Add a sprite to atlas. + * @param sprite - the sprite to add + * @param imageSource - The source of texture + * @returns the origin texture before batch if have, otherwise null + */ public addSprite(sprite: Sprite, imageSource: TexImageSource): Texture2D | null { if (!this._enabled || this._atlasIndex >= this._maxAtlasCount) { return null; @@ -64,9 +70,9 @@ export class DynamicAtlasManager { atlas = this._createAtlas(); } - const oldTexture = atlas.getOriginTextureById(sprite.instanceId); + const originTexture = atlas.getOriginTextureById(sprite.instanceId); if (atlas.addSprite(sprite, imageSource)) { - return oldTexture || null; + return originTexture || null; } if (this._atlasIndex + 1 >= this._maxAtlasCount) { @@ -79,6 +85,10 @@ export class DynamicAtlasManager { return null; } + /** + * Remove a sprite from atlas. + * @param sprite - the sprite to remove + */ public removeSprite(sprite: Sprite) { if (!this._enabled || !sprite) return ; @@ -89,6 +99,9 @@ export class DynamicAtlasManager { } } + /** + * Reset all atlases. + */ public reset() { const { _atlases } = this; for (let i = 0, l = _atlases.length; i < l; ++i) { diff --git a/packages/core/src/2d/dynamic-atlas/types.ts b/packages/core/src/2d/dynamic-atlas/types.ts index 493614a8bf..b5b19c93fa 100644 --- a/packages/core/src/2d/dynamic-atlas/types.ts +++ b/packages/core/src/2d/dynamic-atlas/types.ts @@ -2,12 +2,18 @@ import { Rect } from "@oasis-engine/math"; import { Sprite } from "../sprite"; import { Texture2D } from "../../texture/Texture2D"; +/** + * The origin info includes sprite texture and altasRegion before batch. + */ export interface OriginInfo { sprite: Sprite; texture: Texture2D; atlasRegion: Rect; } +/** + * The origin info object to record all origin info. + */ export interface OriginInfoObj { /** The instance id for sprite. */ [id: number]: OriginInfo From 7969a6bb24f048559e21d55d44c18aa578005f61 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 25 Jan 2022 15:31:47 +0800 Subject: [PATCH 38/91] feat(text): opt code --- packages/core/src/2d/text/TextRenderer.ts | 16 ++++++++-------- packages/core/src/2d/text/TextUtils.ts | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 19f01e250f..267fb76e90 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -193,11 +193,11 @@ export class TextRenderer extends Renderer { /** * The horizontal alignment. */ - get hAlign(): TextHorizontalAlignment { + get horizontalAlignment(): TextHorizontalAlignment { return this._horizontalAlignment; } - set hAlign(value: TextHorizontalAlignment) { + set horizontalAlignment(value: TextHorizontalAlignment) { if (this._horizontalAlignment !== value) { this._horizontalAlignment = value; this._setDirtyFlagTrue(DirtyFlag.Style); @@ -207,11 +207,11 @@ export class TextRenderer extends Renderer { /** * The vertical alignment. */ - get vAlign(): TextVerticalAlignment { + get verticalAlignment(): TextVerticalAlignment { return this._verticalAlignment; } - set vAlign(value: TextVerticalAlignment) { + set verticalAlignment(value: TextVerticalAlignment) { if (this._verticalAlignment !== value) { this._verticalAlignment = value; this._setDirtyFlagTrue(DirtyFlag.Style); @@ -221,11 +221,11 @@ export class TextRenderer extends Renderer { /** * The horizontal overflow. */ - get hOverflow(): TextHorizontalOverflow { + get horizontalOverflow(): TextHorizontalOverflow { return this._horizontalOverflow; } - set hOverflow(value: TextHorizontalOverflow) { + set horizontalOverflow(value: TextHorizontalOverflow) { if (this._horizontalOverflow !== value) { this._horizontalOverflow = value; this._setDirtyFlagTrue(DirtyFlag.Style); @@ -235,11 +235,11 @@ export class TextRenderer extends Renderer { /** * The vertical overflow. */ - get vOverflow(): TextVerticalOverflow { + get verticalOverflow(): TextVerticalOverflow { return this._verticalOverflow; } - set vOverflow(value: TextVerticalOverflow) { + set verticalOverflow(value: TextVerticalOverflow) { if (this._verticalOverflow !== value) { this._verticalOverflow = value; this._setDirtyFlagTrue(DirtyFlag.Style); diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 921b6840ef..8a1498fd22 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -163,7 +163,7 @@ export class TextUtils { // reset width and height. textMetrics.width = Math.min(maxLineWidth, TextUtils._maxWidth); let height = textRenderer.height * TextUtils._pixelsPerUnit; - if (textRenderer.vOverflow === TextVerticalOverflow.Overflow) { + if (textRenderer.verticalOverflow === TextVerticalOverflow.Overflow) { height = Math.min(textMetrics.lineHeight * linesLen, TextUtils._maxHeight); } textMetrics.height = height; @@ -235,7 +235,7 @@ export class TextUtils { } private static _wordWrap(textRenderer: TextRenderer, fontStr: string): Array { - const { width, height, hOverflow: horizontalOverflow, vOverflow: verticalOverflow } = textRenderer; + const { width, height, horizontalOverflow, verticalOverflow } = textRenderer; const isWrap = horizontalOverflow === TextHorizontalOverflow.Wrap; if (isWrap && width <= 0) { From a90938a9bd6a490131bdda5c70f0d7f7f7a0c8d7 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 11 Feb 2022 16:51:02 +0800 Subject: [PATCH 39/91] feat(text): opt code --- packages/core/src/2d/text/TextRenderer.ts | 7 +------ packages/core/src/2d/text/TextUtils.ts | 6 +++--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 267fb76e90..e7c9c9ee29 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -385,11 +385,6 @@ export class TextRenderer extends Renderer { } private _updateText() { - if (this._text === "") { - this._clearTexture(); - return; - } - const textContext = TextUtils.textContext(); const { canvas, context } = textContext; const fontStr = this._getFontString(); @@ -431,7 +426,6 @@ export class TextRenderer extends Renderer { const { canvas, context } = textContext; const trimData = TextUtils.trimCanvas(textContext); const { data } = trimData; - const { _sprite } = this; if (!data) { this._clearTexture(); return; @@ -450,6 +444,7 @@ export class TextRenderer extends Renderer { texture.generateMipmaps(); this._clearTexture(); + const { _sprite } = this; _sprite.texture = texture; this.engine.dynamicAtlasManager.addSprite(_sprite, canvas); } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 8a1498fd22..b3c63ed645 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -107,7 +107,7 @@ export class TextUtils { for (i = height - 1; i >= baseline; --i) { startIndex = i * lineDataCount; for (let j = 0; j < lineDataCount; j += 4) { - if (imgData[startIndex + j] !== 255) { + if (imgData[startIndex + j] !== 0) { flag = true; break; } @@ -143,13 +143,13 @@ export class TextUtils { }; const { context } = textContext; const { lines } = textMetrics; - if (lines.length === 0) { + const linesLen = lines.length; + if (linesLen === 0) { return textMetrics; } context.font = fontStr; const { lineWidths } = textMetrics; - const linesLen = lines.length; let maxLineWidth = 0; for (let i = 0; i < linesLen; ++i) { const width = Math.ceil(context.measureText(lines[i]).width); From 6ef0499333867e1aa292f85bd62a911394ed3c99 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 11 Feb 2022 17:07:43 +0800 Subject: [PATCH 40/91] feat(text): fix texture mipmap error --- packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts index d2c635b419..0b8c1c1f5d 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts @@ -72,6 +72,7 @@ export class DynamicAtlas { } texture.setImageSource(imageSource, 0, false, false, this._curX, this._curY); + texture.generateMipmaps(); const { _width, _height } = this; const region = DynamicAtlas._region; From 2eccca9302c04acb18e96739b631ab7d447c0902 Mon Sep 17 00:00:00 2001 From: zhuxudong Date: Thu, 17 Feb 2022 16:15:38 +0800 Subject: [PATCH 41/91] fix: normal attributer is need in unlit (#637) * fix: normal attributer is need in unlit --- .../core/src/shaderlib/blendShape_vert.glsl | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/core/src/shaderlib/blendShape_vert.glsl b/packages/core/src/shaderlib/blendShape_vert.glsl index bf83659c8d..237371e07d 100644 --- a/packages/core/src/shaderlib/blendShape_vert.glsl +++ b/packages/core/src/shaderlib/blendShape_vert.glsl @@ -7,18 +7,20 @@ position.xyz += POSITION_BS2 * u_blendShapeWeights[2]; position.xyz += POSITION_BS3 * u_blendShapeWeights[3]; - #if defined( O3_HAS_NORMAL ) && defined( OASIS_BLENDSHAPE_NORMAL ) - normal.xyz += NORMAL_BS0 * u_blendShapeWeights[0]; - normal.xyz += NORMAL_BS1 * u_blendShapeWeights[1]; - normal.xyz += NORMAL_BS2 * u_blendShapeWeights[2]; - normal.xyz += NORMAL_BS3 * u_blendShapeWeights[3]; - #endif + #ifndef OMIT_NORMAL + #if defined( O3_HAS_NORMAL ) && defined( OASIS_BLENDSHAPE_NORMAL ) + normal.xyz += NORMAL_BS0 * u_blendShapeWeights[0]; + normal.xyz += NORMAL_BS1 * u_blendShapeWeights[1]; + normal.xyz += NORMAL_BS2 * u_blendShapeWeights[2]; + normal.xyz += NORMAL_BS3 * u_blendShapeWeights[3]; + #endif - #if defined( O3_HAS_TANGENT ) && defined( O3_NORMAL_TEXTURE ) && defined(OASIS_BLENDSHAPE_TANGENT) - tangent.xyz += TANGENT_BS0 * u_blendShapeWeights[0]; - tangent.xyz += TANGENT_BS1 * u_blendShapeWeights[1]; - tangent.xyz += TANGENT_BS2 * u_blendShapeWeights[2]; - tangent.xyz += TANGENT_BS3 * u_blendShapeWeights[3]; + #if defined( O3_HAS_TANGENT ) && defined( O3_NORMAL_TEXTURE ) && defined(OASIS_BLENDSHAPE_TANGENT) + tangent.xyz += TANGENT_BS0 * u_blendShapeWeights[0]; + tangent.xyz += TANGENT_BS1 * u_blendShapeWeights[1]; + tangent.xyz += TANGENT_BS2 * u_blendShapeWeights[2]; + tangent.xyz += TANGENT_BS3 * u_blendShapeWeights[3]; + #endif #endif #endif -#endif \ No newline at end of file +#endif From b28c936db920b19e3a665a461929c6f3c1777dea Mon Sep 17 00:00:00 2001 From: yangfengzzz Date: Thu, 17 Feb 2022 17:17:11 +0800 Subject: [PATCH 42/91] fix: physx bug (#651) * fix: physx bug * fix: opt collider shape scale --- .../core/src/physics/shape/CapsuleColliderShape.ts | 1 + .../src/shape/PhysXBoxColliderShape.ts | 4 +++- .../src/shape/PhysXCapsuleColliderShape.ts | 6 ++++-- .../physics-physx/src/shape/PhysXColliderShape.ts | 14 ++++++++------ .../src/shape/PhysXPlaneColliderShape.ts | 9 ++++++--- .../src/shape/PhysXSphereColliderShape.ts | 4 +++- 6 files changed, 25 insertions(+), 13 deletions(-) diff --git a/packages/core/src/physics/shape/CapsuleColliderShape.ts b/packages/core/src/physics/shape/CapsuleColliderShape.ts index ee34e86f09..0fb253d570 100644 --- a/packages/core/src/physics/shape/CapsuleColliderShape.ts +++ b/packages/core/src/physics/shape/CapsuleColliderShape.ts @@ -53,5 +53,6 @@ export class CapsuleColliderShape extends ColliderShape { this._height, this._material._nativeMaterial ); + (this._nativeShape).setUpAxis(ColliderShapeUpAxis.Y); } } diff --git a/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts b/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts index 65cb0c0d8f..08b430e622 100644 --- a/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts @@ -28,7 +28,7 @@ export class PhysXBoxColliderShape extends PhysXColliderShape implements IBoxCol this._halfSize.z * this._scale.z ); this._allocShape(material); - this._setLocalPose(); + this._setLocalPose(this._scale); this.setUniqueID(uniqueID); } @@ -46,6 +46,8 @@ export class PhysXBoxColliderShape extends PhysXColliderShape implements IBoxCol * {@inheritDoc IColliderShape.setWorldScale } */ setWorldScale(scale: Vector3): void { + this._setLocalPose(this._scale); + scale.cloneTo(this._scale); Vector3.multiply(this._halfSize, this._scale, PhysXBoxColliderShape._tempHalfExtents); this._pxGeometry.halfExtents = PhysXBoxColliderShape._tempHalfExtents; diff --git a/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts b/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts index b3e373b831..46fbce4e49 100644 --- a/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts @@ -27,7 +27,7 @@ export class PhysXCapsuleColliderShape extends PhysXColliderShape implements ICa this._pxGeometry = new PhysXPhysics._physX.PxCapsuleGeometry(this._radius, this._halfHeight); this._allocShape(material); - this._setLocalPose(); + this._setLocalPose(this._scale); this.setUniqueID(uniqueID); } @@ -85,13 +85,15 @@ export class PhysXCapsuleColliderShape extends PhysXColliderShape implements ICa this._rotation.setValue(0, PhysXColliderShape.halfSqrt, 0, PhysXColliderShape.halfSqrt); break; } - this._setLocalPose(); + this._setLocalPose(this._scale); } /** * {@inheritDoc IColliderShape.setWorldScale } */ setWorldScale(scale: Vector3): void { + this._setLocalPose(this._scale); + switch (this._upAxis) { case ColliderShapeUpAxis.X: this._pxGeometry.radius = this._radius * Math.max(scale.y, scale.z); diff --git a/packages/physics-physx/src/shape/PhysXColliderShape.ts b/packages/physics-physx/src/shape/PhysXColliderShape.ts index d72b3f9e82..0ae06697e6 100644 --- a/packages/physics-physx/src/shape/PhysXColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXColliderShape.ts @@ -21,11 +21,11 @@ export enum ShapeFlag { export abstract class PhysXColliderShape implements IColliderShape { static readonly halfSqrt: number = 0.70710678118655; static transform = { - translation: null, + translation: new Vector3(), rotation: null }; protected _position: Vector3 = new Vector3(); - protected _rotation: Quaternion = new Quaternion(0, 0, PhysXColliderShape.halfSqrt, PhysXColliderShape.halfSqrt); + protected _rotation: Quaternion = new Quaternion(); protected _scale: Vector3 = new Vector3(1, 1, 1); private _shapeFlags: ShapeFlag = ShapeFlag.SCENE_QUERY_SHAPE | ShapeFlag.SIMULATION_SHAPE; @@ -42,8 +42,10 @@ export abstract class PhysXColliderShape implements IColliderShape { * {@inheritDoc IColliderShape.setPosition } */ setPosition(value: Vector3): void { - value.cloneTo(this._position); - this._setLocalPose(); + if (value !== this._position) { + value.cloneTo(this._position); + } + this._setLocalPose(this._scale); } /** @@ -92,9 +94,9 @@ export abstract class PhysXColliderShape implements IColliderShape { this._pxShape.setFlags(new PhysXPhysics._physX.PxShapeFlags(this._shapeFlags)); } - protected _setLocalPose(): void { + protected _setLocalPose(scale: Vector3): void { const transform = PhysXColliderShape.transform; - transform.translation = this._position; + Vector3.multiply(this._position, scale, transform.translation); transform.rotation = this._rotation; this._pxShape.setLocalPose(PhysXColliderShape.transform); } diff --git a/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts b/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts index 9dd59e8e3c..5c78fba4a3 100644 --- a/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts @@ -15,10 +15,11 @@ export class PhysXPlaneColliderShape extends PhysXColliderShape implements IPlan */ constructor(uniqueID: number, material: PhysXPhysicsMaterial) { super(); + this._rotation.setValue(0, 0, PhysXColliderShape.halfSqrt, PhysXColliderShape.halfSqrt); this._pxGeometry = new PhysXPhysics._physX.PxPlaneGeometry(); this._allocShape(material); - this._setLocalPose(); + this._setLocalPose(this._scale); this.setUniqueID(uniqueID); } @@ -29,11 +30,13 @@ export class PhysXPlaneColliderShape extends PhysXColliderShape implements IPlan Quaternion.rotationYawPitchRoll(value.x, value.y, value.z, this._rotation); Quaternion.rotateZ(this._rotation, Math.PI * 0.5, this._rotation); this._rotation.normalize(); - this._setLocalPose(); + this._setLocalPose(this._scale); } /** * {@inheritDoc IColliderShape.setWorldScale } */ - setWorldScale(scale: Vector3): void {} + setWorldScale(scale: Vector3): void { + this._setLocalPose(this._scale); + } } diff --git a/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts b/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts index 71a4c2a32f..28df217123 100644 --- a/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts @@ -24,7 +24,7 @@ export class PhysXSphereColliderShape extends PhysXColliderShape implements ISph this._pxGeometry = new PhysXPhysics._physX.PxSphereGeometry(this._radius * this._maxScale); this._allocShape(material); - this._setLocalPose(); + this._setLocalPose(this._scale); this.setUniqueID(uniqueID); } @@ -41,6 +41,8 @@ export class PhysXSphereColliderShape extends PhysXColliderShape implements ISph * {@inheritDoc IColliderShape.setWorldScale } */ setWorldScale(scale: Vector3): void { + this._setLocalPose(this._scale); + this._maxScale = Math.max(scale.x, Math.max(scale.x, scale.y)); this._pxGeometry.radius = this._radius * this._maxScale; this._pxShape.setGeometry(this._pxGeometry); From 55ce80f450093eb81cecd3b2b466b3a17820b054 Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Thu, 17 Feb 2022 17:19:34 +0800 Subject: [PATCH 43/91] v0.6.7 --- lerna.json | 2 +- packages/controls/package.json | 4 ++-- packages/core/package.json | 6 +++--- packages/design/package.json | 4 ++-- packages/draco/package.json | 4 ++-- packages/framebuffer-picker/package.json | 4 ++-- packages/loader/package.json | 10 +++++----- packages/math/package.json | 4 ++-- packages/oasis-engine/package.json | 10 +++++----- packages/physics-lite/package.json | 6 +++--- packages/physics-physx/package.json | 6 +++--- packages/rhi-webgl/package.json | 8 ++++---- packages/stats/package.json | 4 ++-- 13 files changed, 36 insertions(+), 36 deletions(-) diff --git a/lerna.json b/lerna.json index 4933ed73f2..763bae7337 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "npmClient": "npm", - "version": "0.6.6", + "version": "0.6.7", "bootstrap": { "hoist": true }, diff --git a/packages/controls/package.json b/packages/controls/package.json index 3d582e29c6..efdd499dc0 100644 --- a/packages/controls/package.json +++ b/packages/controls/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/controls", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "scripts": { "b:types": "tsc", @@ -15,6 +15,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.6" + "oasis-engine": "0.6.7" } } diff --git a/packages/core/package.json b/packages/core/package.json index 2e57b9dcce..2f99225e40 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/core", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/math": "0.6.6" + "@oasis-engine/math": "0.6.7" }, "devDependencies": { - "@oasis-engine/design": "0.6.6" + "@oasis-engine/design": "0.6.7" } } diff --git a/packages/design/package.json b/packages/design/package.json index 6a45186d1b..2bc5d084d3 100755 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/design", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -13,6 +13,6 @@ ], "types": "types/index.d.ts", "dependencies": { - "@oasis-engine/math": "0.6.6" + "@oasis-engine/math": "0.6.7" } } diff --git a/packages/draco/package.json b/packages/draco/package.json index 059c0c8bee..0090b77d8c 100644 --- a/packages/draco/package.json +++ b/packages/draco/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/draco", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "scripts": { "b:types": "tsc" @@ -13,6 +13,6 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.6" + "@oasis-engine/core": "0.6.7" } } diff --git a/packages/framebuffer-picker/package.json b/packages/framebuffer-picker/package.json index e5fe2aa33e..a3a3e6e55a 100755 --- a/packages/framebuffer-picker/package.json +++ b/packages/framebuffer-picker/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/framebuffer-picker", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.6" + "oasis-engine": "0.6.7" } } diff --git a/packages/loader/package.json b/packages/loader/package.json index e11b75ea09..1944f80c69 100755 --- a/packages/loader/package.json +++ b/packages/loader/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/loader", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "types": "types/index.d.ts", "scripts": { @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.6", - "@oasis-engine/draco": "0.6.6", - "@oasis-engine/math": "0.6.6", - "@oasis-engine/rhi-webgl": "0.6.6" + "@oasis-engine/core": "0.6.7", + "@oasis-engine/draco": "0.6.7", + "@oasis-engine/math": "0.6.7", + "@oasis-engine/rhi-webgl": "0.6.7" } } diff --git a/packages/math/package.json b/packages/math/package.json index 317b2c213f..9ac1dc026b 100755 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/math", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,6 +15,6 @@ "types/**/*" ], "devDependencies": { - "@oasis-engine/design": "0.6.6" + "@oasis-engine/design": "0.6.7" } } diff --git a/packages/oasis-engine/package.json b/packages/oasis-engine/package.json index d5e8f6749c..0430451b8a 100755 --- a/packages/oasis-engine/package.json +++ b/packages/oasis-engine/package.json @@ -1,6 +1,6 @@ { "name": "oasis-engine", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.6", - "@oasis-engine/loader": "0.6.6", - "@oasis-engine/math": "0.6.6", - "@oasis-engine/rhi-webgl": "0.6.6" + "@oasis-engine/core": "0.6.7", + "@oasis-engine/loader": "0.6.7", + "@oasis-engine/math": "0.6.7", + "@oasis-engine/rhi-webgl": "0.6.7" } } diff --git a/packages/physics-lite/package.json b/packages/physics-lite/package.json index 58ef5691be..51e510c5a8 100644 --- a/packages/physics-lite/package.json +++ b/packages/physics-lite/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/physics-lite", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,8 +15,8 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.6.6", - "oasis-engine": "0.6.6" + "@oasis-engine/design": "0.6.7", + "oasis-engine": "0.6.7" }, "publishConfig": { "access": "public" diff --git a/packages/physics-physx/package.json b/packages/physics-physx/package.json index d6f08f35ff..16bf9504ce 100644 --- a/packages/physics-physx/package.json +++ b/packages/physics-physx/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/physics-physx", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,8 +15,8 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.6.6", - "oasis-engine": "0.6.6" + "@oasis-engine/design": "0.6.7", + "oasis-engine": "0.6.7" }, "publishConfig": { "access": "public" diff --git a/packages/rhi-webgl/package.json b/packages/rhi-webgl/package.json index d82564fbe7..69d21f3d80 100755 --- a/packages/rhi-webgl/package.json +++ b/packages/rhi-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/rhi-webgl", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,10 +14,10 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.6", - "@oasis-engine/math": "0.6.6" + "@oasis-engine/core": "0.6.7", + "@oasis-engine/math": "0.6.7" }, "devDependencies": { - "@oasis-engine/design": "0.6.6" + "@oasis-engine/design": "0.6.7" } } diff --git a/packages/stats/package.json b/packages/stats/package.json index e8bae0d2d9..ed2a98c9ec 100755 --- a/packages/stats/package.json +++ b/packages/stats/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/stats", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.6" + "oasis-engine": "0.6.7" } } From a704854601f9b2a153f008296cd001c6e85fd21c Mon Sep 17 00:00:00 2001 From: Hu Song Date: Wed, 2 Mar 2022 15:15:57 +0800 Subject: [PATCH 44/91] fix: get pixel buffer use mip level should right shift (#656) Co-authored-by: gz65555 --- packages/core/src/texture/Texture2D.ts | 4 ++-- packages/core/src/texture/TextureCubeMap.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/src/texture/Texture2D.ts b/packages/core/src/texture/Texture2D.ts index 4585145fa0..0057e5a028 100644 --- a/packages/core/src/texture/Texture2D.ts +++ b/packages/core/src/texture/Texture2D.ts @@ -143,8 +143,8 @@ export class Texture2D extends Texture { (this._platformTexture as IPlatformTexture2D).getPixelBuffer( 0, 0, - this._width, - this._height, + this._width >> xOrMipLevelOrOut, + this._height >> xOrMipLevelOrOut, xOrMipLevelOrOut, yOrMipLevel ); diff --git a/packages/core/src/texture/TextureCubeMap.ts b/packages/core/src/texture/TextureCubeMap.ts index 19cd803f73..9a5ff00a88 100644 --- a/packages/core/src/texture/TextureCubeMap.ts +++ b/packages/core/src/texture/TextureCubeMap.ts @@ -168,8 +168,8 @@ export class TextureCubeMap extends Texture { face, 0, 0, - this._width, - this._height, + this._width >> xOrMipLevelOrOut, + this._height >> xOrMipLevelOrOut, xOrMipLevelOrOut, yOrMipLevel ); From 070e621e49e806a69f6de5efc72e963c852cdac5 Mon Sep 17 00:00:00 2001 From: luzhuang <364439895@qq.com> Date: Wed, 2 Mar 2022 15:21:30 +0800 Subject: [PATCH 45/91] Update AnimatorState.ts (#657) fix: fix comment --- packages/core/src/animation/AnimatorState.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/animation/AnimatorState.ts b/packages/core/src/animation/AnimatorState.ts index 04bfd3ef6c..7dd7d20abf 100644 --- a/packages/core/src/animation/AnimatorState.ts +++ b/packages/core/src/animation/AnimatorState.ts @@ -55,7 +55,7 @@ export class AnimatorState { } /** - * The start time of the clip, the range is 0 to 1, default is 1. + * The end time of the clip, the range is 0 to 1, default is 1. */ get clipEndTime() { return this._clipEndTime; From ffe530c68919751f2b438800124c64f01d419299 Mon Sep 17 00:00:00 2001 From: Bob <768442443@qq.com> Date: Wed, 2 Mar 2022 15:28:35 +0800 Subject: [PATCH 46/91] Rename `ability` to `component`. (#608) --- packages/core/src/ComponentsDependencies.ts | 4 ++-- packages/core/src/Entity.ts | 6 +++--- packages/core/src/lighting/KHR_lights.ts | 14 +++++++------- packages/core/src/shadow/ShadowFeature.ts | 14 +++++++------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/core/src/ComponentsDependencies.ts b/packages/core/src/ComponentsDependencies.ts index 51ef0c0b35..dd24d813f4 100644 --- a/packages/core/src/ComponentsDependencies.ts +++ b/packages/core/src/ComponentsDependencies.ts @@ -70,8 +70,8 @@ export class ComponentsDependencies { private constructor() {} } -export function dependencies(...abilityClass: ComponentConstructor[]) { +export function dependencies(...componentClass: ComponentConstructor[]) { return function (target: T): void { - abilityClass.forEach((ability) => ComponentsDependencies.register(target, ability)); + componentClass.forEach((component) => ComponentsDependencies.register(target, component)); }; } diff --git a/packages/core/src/Entity.ts b/packages/core/src/Entity.ts index e43315d68d..e289f0ed66 100644 --- a/packages/core/src/Entity.ts +++ b/packages/core/src/Entity.ts @@ -343,9 +343,9 @@ export class Entity extends EngineObject { if (this._destroyed) return; super.destroy(); - const abilityArray = this._components; - for (let i = abilityArray.length - 1; i >= 0; i--) { - abilityArray[i].destroy(); + const components = this._components; + for (let i = components.length - 1; i >= 0; i--) { + components[i].destroy(); } this._components.length = 0; diff --git a/packages/core/src/lighting/KHR_lights.ts b/packages/core/src/lighting/KHR_lights.ts index 30ff8dc5fe..5b4927d085 100644 --- a/packages/core/src/lighting/KHR_lights.ts +++ b/packages/core/src/lighting/KHR_lights.ts @@ -11,25 +11,25 @@ class KHR_lights { for (let i = 0; i < lights.length; i++) { const { name, type, spot } = lights[i]; let { color, intensity } = lights[i]; - let ability; + let component; let props; color = color ? color : [1, 1, 1]; intensity = intensity === undefined ? 1 : intensity; switch (type) { case "ambient": - ability = AmbientLight; + component = AmbientLight; props = { name, color, intensity }; break; case "directional": - ability = DirectLight; + component = DirectLight; props = { name, color, intensity }; break; case "point": - ability = PointLight; + component = PointLight; props = { name, color, intensity }; break; case "spot": - ability = SpotLight; + component = SpotLight; props = { name, color, intensity, angle: spot.outerConeAngle }; break; default: @@ -37,8 +37,8 @@ class KHR_lights { break; } - if (ability) { - results[i] = { ability, props }; + if (component) { + results[i] = { component, props }; } } return results; diff --git a/packages/core/src/shadow/ShadowFeature.ts b/packages/core/src/shadow/ShadowFeature.ts index 41b919990b..96b3079559 100644 --- a/packages/core/src/shadow/ShadowFeature.ts +++ b/packages/core/src/shadow/ShadowFeature.ts @@ -90,20 +90,20 @@ export class ShadowFeature extends SceneFeature { const items = renderQueue.items; for (let i = 0, len = items.length; i < len; i++) { const item = items[i]; - const ability: Component = item.component; + const component: Component = item.component; - const receiveShadow = (ability as any).recieveShadow; - const castShadow = (ability as any).castShadow; + const receiveShadow = (component as any).recieveShadow; + const castShadow = (component as any).castShadow; if (receiveShadow === true) { - ability.entity.layer |= Layer.Layer30; //SHADOW; + component.entity.layer |= Layer.Layer30; //SHADOW; } else if (receiveShadow === false) { - ability.entity.layer &= ~Layer.Layer30; //SHADOW; + component.entity.layer &= ~Layer.Layer30; //SHADOW; } if (castShadow === true) { - ability.entity.layer |= Layer.Layer31; //SHADOW_MAP; + component.entity.layer |= Layer.Layer31; //SHADOW_MAP; } else if (castShadow === false) { - ability.entity.layer &= ~Layer.Layer31; //SHADOW_MAP; + component.entity.layer &= ~Layer.Layer31; //SHADOW_MAP; } } } From bec99aac8e50ddf00f378c413057a46420ac9a96 Mon Sep 17 00:00:00 2001 From: zhuxudong Date: Wed, 2 Mar 2022 16:08:26 +0800 Subject: [PATCH 47/91] fix: resize max uniform vector count (#660) * fix: resize max uniform vector count Co-authored-by: shensi.zxd --- packages/core/src/mesh/SkinnedMeshRenderer.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/core/src/mesh/SkinnedMeshRenderer.ts b/packages/core/src/mesh/SkinnedMeshRenderer.ts index 225e583b31..1469e4ff06 100644 --- a/packages/core/src/mesh/SkinnedMeshRenderer.ts +++ b/packages/core/src/mesh/SkinnedMeshRenderer.ts @@ -123,23 +123,24 @@ export class SkinnedMeshRenderer extends MeshRenderer { const rhi = this.entity.engine._hardwareRenderer; if (!rhi) return; const maxAttribUniformVec4 = rhi.renderStates.getParameter(rhi.gl.MAX_VERTEX_UNIFORM_VECTORS); - const maxJoints = Math.floor((maxAttribUniformVec4 - 20) / 4); + const maxJoints = Math.floor((maxAttribUniformVec4 - 30) / 4); const shaderData = this.shaderData; - const jointCount = this.jointNodes?.length; + const jointCount = jointNodes.length; + if (jointCount) { shaderData.enableMacro("O3_HAS_SKIN"); shaderData.setInt(SkinnedMeshRenderer._jointCountProperty, jointCount); - if (joints.length > maxJoints) { + if (jointCount > maxJoints) { if (rhi.canIUseMoreJoints) { this._useJointTexture = true; } else { Logger.error( - `component's joints count(${joints}) greater than device's MAX_VERTEX_UNIFORM_VECTORS number ${maxAttribUniformVec4}, and don't support jointTexture in this device. suggest joint count less than ${maxJoints}.`, + `component's joints count(${jointCount}) greater than device's MAX_VERTEX_UNIFORM_VECTORS number ${maxAttribUniformVec4}, and don't support jointTexture in this device. suggest joint count less than ${maxJoints}.`, this ); } } else { - const maxJoints = Math.max(SkinnedMeshRenderer._maxJoints, joints.length); + const maxJoints = Math.max(SkinnedMeshRenderer._maxJoints, jointCount); SkinnedMeshRenderer._maxJoints = maxJoints; shaderData.disableMacro("O3_USE_JOINT_TEXTURE"); shaderData.enableMacro("O3_JOINTS_NUM", maxJoints.toString()); From 42ab0bba4a20c3d0e22a600bccb88b7facb00c25 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 8 Mar 2022 11:42:45 +0800 Subject: [PATCH 48/91] feat(text): fix when text change but position not update --- packages/core/src/2d/text/TextRenderer.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index e7c9c9ee29..c59ed002de 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -287,29 +287,31 @@ export class TextRenderer extends Renderer { return; } - if (this._isContainDirtyFlag(DirtyFlag.Style)) { - this._updateText(); - this._setDirtyFlagFalse(DirtyFlag.Style); - } - if (TextRenderer.needPremultiplyAlpha) { this.shaderData.enableMacro("NEED_PREMULTIPLY_ALPHA"); } else { this.shaderData.disableMacro("NEED_PREMULTIPLY_ALPHA"); } + const isStyleDirty = this._isContainDirtyFlag(DirtyFlag.Style); + if (isStyleDirty) { + this._updateText(); + } + const { _sprite: sprite } = this; const { texture } = sprite; if (!texture) { + this._setDirtyFlagFalse(DirtyFlag.Style); return; } // Update sprite data. - const localDirty = sprite._updateMeshData(); - if (this._isWorldMatrixDirty.flag || localDirty) { + sprite._updateMesh(); + if (this._isWorldMatrixDirty.flag || isStyleDirty) { this._updatePosition(); this._isWorldMatrixDirty.flag = false; } + this._setDirtyFlagFalse(DirtyFlag.Style); if (this._isContainDirtyFlag(DirtyFlag.MaskInteraction)) { this._updateStencilState(); From ce9575b5b0659ea3ddfbd9316dc61377e8f3fb29 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 10 Mar 2022 10:49:09 +0800 Subject: [PATCH 49/91] feat(text): fix conflicts --- packages/core/src/Entity.ts | 1 + packages/core/src/animation/Animator.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/core/src/Entity.ts b/packages/core/src/Entity.ts index 3a363d56a6..9deef27765 100644 --- a/packages/core/src/Entity.ts +++ b/packages/core/src/Entity.ts @@ -341,6 +341,7 @@ export class Entity extends EngineObject { */ destroy(): void { if (this._destroyed) return; + super.destroy(); const components = this._components; for (let i = components.length - 1; i >= 0; i--) { diff --git a/packages/core/src/animation/Animator.ts b/packages/core/src/animation/Animator.ts index 55cd728b4e..d482ff9923 100644 --- a/packages/core/src/animation/Animator.ts +++ b/packages/core/src/animation/Animator.ts @@ -519,6 +519,7 @@ export class Animator extends Component { let crossWeight = destPlayData.frameTime / (destState._getDuration() * layerData.crossFadeTransition.duration); crossWeight >= 1.0 && (crossWeight = 1.0); + srcPlayData.update(); destPlayData.update(); From 85d98710bd87fbda7e87305cdeef32400321f449 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 10 Mar 2022 10:54:40 +0800 Subject: [PATCH 50/91] feat(text): fix conflicts --- .../src/scene-loader/resources/SpriteAtlasResource.ts | 6 ++---- packages/physics-lite/src/LitePhysicsManager.ts | 10 +++++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts b/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts index f7c82b8ad8..b456d5ed37 100644 --- a/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts +++ b/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts @@ -8,7 +8,7 @@ export class SpriteAtlasResource extends SchemaResource { static defaultAtlas: SpriteAtlas; load(resourceManager: ResourceManager, assetConfig: AssetConfig): Promise { - return new Promise((resolve, reject) => { + return new Promise((resolve) => { this.setMeta(); if (assetConfig.source) { resourceManager @@ -33,9 +33,7 @@ export class SpriteAtlasResource extends SchemaResource { schemaResourceManager.resourceIdMap.set(spriteResource, "" + assetID); } resolve(this); - }).catch((e) => { - reject(e); - }); + }) } else { if (!SpriteAtlasResource.defaultAtlas) { SpriteAtlasResource.defaultAtlas = new SpriteAtlas(resourceManager.engine); diff --git a/packages/physics-lite/src/LitePhysicsManager.ts b/packages/physics-lite/src/LitePhysicsManager.ts index 0a0a13e985..bc23dfdd0b 100644 --- a/packages/physics-lite/src/LitePhysicsManager.ts +++ b/packages/physics-lite/src/LitePhysicsManager.ts @@ -89,11 +89,11 @@ export class LitePhysicsManager implements IPhysicsManager { * {@inheritDoc IPhysicsManager.update } */ update(deltaTime: number): void { - // let colliders = this._colliders; - // for (let i = 0, len = colliders.length; i < len; i++) { - // this._collisionDetection(deltaTime, colliders[i]); - // } - // this._fireEvent(); + let colliders = this._colliders; + for (let i = 0, len = colliders.length; i < len; i++) { + this._collisionDetection(deltaTime, colliders[i]); + } + this._fireEvent(); } /** From 709e3e9028aa616e93735bc218ae5a209f019e54 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 10 Mar 2022 10:55:19 +0800 Subject: [PATCH 51/91] feat(text): fix conflicts --- .../loader/src/scene-loader/resources/SpriteAtlasResource.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts b/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts index b456d5ed37..10e04b4079 100644 --- a/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts +++ b/packages/loader/src/scene-loader/resources/SpriteAtlasResource.ts @@ -33,7 +33,7 @@ export class SpriteAtlasResource extends SchemaResource { schemaResourceManager.resourceIdMap.set(spriteResource, "" + assetID); } resolve(this); - }) + }); } else { if (!SpriteAtlasResource.defaultAtlas) { SpriteAtlasResource.defaultAtlas = new SpriteAtlas(resourceManager.engine); From 120a86fff86b6f2f7792e3e6c14f69a335cc20d1 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 10 Mar 2022 10:58:24 +0800 Subject: [PATCH 52/91] feat(text): fix conflicts --- packages/core/src/shaderlib/light_frag_define.glsl | 1 - packages/core/src/shaderlib/pbr/ibl_frag_define.glsl | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/core/src/shaderlib/light_frag_define.glsl b/packages/core/src/shaderlib/light_frag_define.glsl index a7a7fc6ec5..0ad68848fb 100644 --- a/packages/core/src/shaderlib/light_frag_define.glsl +++ b/packages/core/src/shaderlib/light_frag_define.glsl @@ -55,7 +55,6 @@ struct EnvMapLight { float mipMapLevel; float diffuseIntensity; float specularIntensity; - mat4 modelMatrix; }; diff --git a/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl b/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl index 052155c398..1a4a3ff8ff 100644 --- a/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl +++ b/packages/core/src/shaderlib/pbr/ibl_frag_define.glsl @@ -51,8 +51,7 @@ vec3 getLightProbeRadiance(GeometricContext geometry, float roughness, int maxMI #else vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal ); - reflectVec = mat3(u_envMapLight.modelMatrix) * reflectVec; - + float specularMIPLevel = getSpecularMIPLevel(roughness, maxMIPLevel ); #ifdef HAS_TEX_LOD From 793dc2bcc88a23aff060953eca095df3b8ffa44f Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 10 Mar 2022 11:01:45 +0800 Subject: [PATCH 53/91] feat(text): fix conflicts --- packages/core/src/lighting/AmbientLight.ts | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/packages/core/src/lighting/AmbientLight.ts b/packages/core/src/lighting/AmbientLight.ts index 0b812e3cee..3d085a71a2 100644 --- a/packages/core/src/lighting/AmbientLight.ts +++ b/packages/core/src/lighting/AmbientLight.ts @@ -1,4 +1,4 @@ -import { Color, Matrix, SphericalHarmonics3 } from "@oasis-engine/math"; +import { Color, SphericalHarmonics3 } from "@oasis-engine/math"; import { Scene } from "../Scene"; import { Shader } from "../shader"; import { ShaderMacro } from "../shader/ShaderMacro"; @@ -32,17 +32,6 @@ export class AmbientLight { private _shArray: Float32Array = new Float32Array(27); private _scene: Scene; private _specularTextureDecodeRGBM: boolean = false; - private _rotationMatrix: Matrix = new Matrix(); - - set rotationMatrix(value: Matrix) { - if (this._rotationMatrix !== value) { - value.cloneTo(this._rotationMatrix); - } - - if (!this._scene) return; - - this._scene.shaderData.setMatrix("u_envMapLight.modelMatrix", this._rotationMatrix); - } /** * Whether to decode from specularTexture with RGBM format. @@ -178,8 +167,6 @@ export class AmbientLight { this.specularTexture = this._specularReflection; this.specularIntensity = this._specularIntensity; this.specularTextureDecodeRGBM = this._specularTextureDecodeRGBM; - // this.rotation = this._rotation; - this.rotationMatrix = this._rotationMatrix; } private _preComputeSH(sh: SphericalHarmonics3, out: Float32Array): Float32Array { From 7ddd1ece265f5bdbb418b52d5d00b800c0095cab Mon Sep 17 00:00:00 2001 From: singlecoder Date: Wed, 16 Mar 2022 19:12:32 +0800 Subject: [PATCH 54/91] feat(text): opt code --- .../2d/dynamic-atlas/DynamicAtlasManager.ts | 21 +++---------------- packages/core/src/2d/text/TextRenderer.ts | 6 +++--- packages/core/src/2d/text/TextUtils.ts | 5 +++-- 3 files changed, 9 insertions(+), 23 deletions(-) diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts index 49db518029..bd4ce2a57a 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts @@ -7,26 +7,11 @@ import { Texture2D } from "../../texture/Texture2D"; * Dynamic atlas manager for text. */ export class DynamicAtlasManager { - private _enabled: boolean = false; private _maxAtlasCount: number = 2; - private _textureSize: number = 2048; + private _textureSize: number = 1024; private _atlases: Array = []; private _atlasIndex: number = -1; - /** - * Indicates whether the manager is enabled. - */ - get enabled(): boolean { - return this._enabled; - } - - set enabled(val: boolean) { - if (this._enabled !== val) { - this._enabled = val; - this.reset(); - } - } - /** * Indicates how many atlases should be created. */ @@ -61,7 +46,7 @@ export class DynamicAtlasManager { * @returns the origin texture before batch if have, otherwise null */ public addSprite(sprite: Sprite, imageSource: TexImageSource): Texture2D | null { - if (!this._enabled || this._atlasIndex >= this._maxAtlasCount) { + if (this._atlasIndex >= this._maxAtlasCount) { return null; } @@ -90,7 +75,7 @@ export class DynamicAtlasManager { * @param sprite - the sprite to remove */ public removeSprite(sprite: Sprite) { - if (!this._enabled || !sprite) return ; + if (!sprite) return ; const { _atlases } = this; for (let i = 0, l = _atlases.length; i < l; ++i) { diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index c59ed002de..9a38aff145 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -33,15 +33,15 @@ export class TextRenderer extends Renderer { @assignmentClone private _text: string = ""; @assignmentClone - private _width: number = 0; // 3d space in unit + private _width: number = 0; @assignmentClone - private _height: number = 0; // 3d space in unit + private _height: number = 0; @assignmentClone private _fontName: string = "Arial"; @assignmentClone private _fontSize: number = 24; @assignmentClone - private _lineSpace: number = 1; // pixel in unit + private _lineSpace: number = 0; @assignmentClone private _isBold: boolean = false; @assignmentClone diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index b3c63ed645..70078dd9a1 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -131,6 +131,7 @@ export class TextUtils { * @returns the TextMetrics object */ public static measureText(textContext: TextContext, textRenderer: TextRenderer, fontStr: string): TextMetrics { + const { _pixelsPerUnit } = TextUtils; const fontSize = TextUtils.measureFont(textContext, fontStr); const textMetrics: TextMetrics = { width: 0, @@ -138,7 +139,7 @@ export class TextUtils { lines: TextUtils._wordWrap(textRenderer, fontStr), lineWidths: [], maxLineWidth: 0, - lineHeight: fontSize + textRenderer.lineSpace, + lineHeight: fontSize + textRenderer.lineSpace * _pixelsPerUnit, fontSize }; const { context } = textContext; @@ -162,7 +163,7 @@ export class TextUtils { // reset width and height. textMetrics.width = Math.min(maxLineWidth, TextUtils._maxWidth); - let height = textRenderer.height * TextUtils._pixelsPerUnit; + let height = textRenderer.height * _pixelsPerUnit; if (textRenderer.verticalOverflow === TextVerticalOverflow.Overflow) { height = Math.min(textMetrics.lineHeight * linesLen, TextUtils._maxHeight); } From 7797e47fd9efa73e5a6ba4d171c47e94bcb4ae5c Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 18 Mar 2022 11:51:22 +0800 Subject: [PATCH 55/91] feat(text): move dynamic atlas manager to internal --- .../{DynamicAtlas.ts => DynamicTextAtlas.ts} | 4 ++-- ...micAtlasManager.ts => DynamicTextAtlasManager.ts} | 10 +++++----- packages/core/src/2d/index.ts | 2 +- packages/core/src/2d/text/TextRenderer.ts | 6 +++--- packages/core/src/Engine.ts | 12 +++--------- 5 files changed, 14 insertions(+), 20 deletions(-) rename packages/core/src/2d/dynamic-atlas/{DynamicAtlas.ts => DynamicTextAtlas.ts} (97%) rename packages/core/src/2d/dynamic-atlas/{DynamicAtlasManager.ts => DynamicTextAtlasManager.ts} (89%) diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts similarity index 97% rename from packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts rename to packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts index 0b8c1c1f5d..7dd728635b 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlas.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts @@ -7,7 +7,7 @@ import { OriginInfo, OriginInfoObj } from "./types"; /** * Dynamic atlas for text. */ -export class DynamicAtlas { +export class DynamicTextAtlas { private static _region: Rect = new Rect(); private _texture: Texture2D; @@ -75,7 +75,7 @@ export class DynamicAtlas { texture.generateMipmaps(); const { _width, _height } = this; - const region = DynamicAtlas._region; + const region = DynamicTextAtlas._region; region.setValue(this._curX / _width, this._curY / _height, width / _width, height / _height); // Cache origin texture. diff --git a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts similarity index 89% rename from packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts rename to packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts index bd4ce2a57a..910b1ae517 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicAtlasManager.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts @@ -1,15 +1,15 @@ import { Sprite } from "../sprite/Sprite"; import { Engine } from "../../Engine"; -import { DynamicAtlas } from "./DynamicAtlas"; +import { DynamicTextAtlas } from "./DynamicTextAtlas"; import { Texture2D } from "../../texture/Texture2D"; /** * Dynamic atlas manager for text. */ -export class DynamicAtlasManager { +export class DynamicTextAtlasManager { private _maxAtlasCount: number = 2; private _textureSize: number = 1024; - private _atlases: Array = []; + private _atlases: Array = []; private _atlasIndex: number = -1; /** @@ -97,10 +97,10 @@ export class DynamicAtlasManager { this._atlasIndex = -1; } - private _createAtlas(): DynamicAtlas { + private _createAtlas(): DynamicTextAtlas { this._atlasIndex++; const { _textureSize } = this; - const atlas = new DynamicAtlas(this.engine, _textureSize, _textureSize); + const atlas = new DynamicTextAtlas(this.engine, _textureSize, _textureSize); this._atlases.push(atlas); return atlas; } diff --git a/packages/core/src/2d/index.ts b/packages/core/src/2d/index.ts index ff9ab0843a..457effc9a3 100644 --- a/packages/core/src/2d/index.ts +++ b/packages/core/src/2d/index.ts @@ -3,6 +3,6 @@ export { SpriteMaskLayer } from "./enums/SpriteMaskLayer"; export { TextHorizontalAlignment, TextVerticalAlignment } from "./enums/TextAlignment"; export { TextHorizontalOverflow, TextVerticalOverflow } from "./enums/TextOverflow"; export { SpriteAtlas } from "./atlas/SpriteAtlas"; -export { DynamicAtlasManager } from "./dynamic-atlas/DynamicAtlasManager"; +export { DynamicTextAtlasManager } from "./dynamic-atlas/DynamicTextAtlasManager"; export * from "./sprite/index"; export * from "./text/index"; diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 9a38aff145..f0745abf44 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -337,7 +337,7 @@ export class TextRenderer extends Renderer { * @internal */ _onDestroy(): void { - this.engine.dynamicAtlasManager.removeSprite(this._sprite); + this.engine._dynamicTextAtlasManager.removeSprite(this._sprite); this._isWorldMatrixDirty.destroy(); super._onDestroy(); } @@ -448,7 +448,7 @@ export class TextRenderer extends Renderer { this._clearTexture(); const { _sprite } = this; _sprite.texture = texture; - this.engine.dynamicAtlasManager.addSprite(_sprite, canvas); + this.engine._dynamicTextAtlasManager.addSprite(_sprite, canvas); } private _calculateLinePosition( @@ -525,7 +525,7 @@ export class TextRenderer extends Renderer { private _clearTexture() { const { _sprite } = this; // Remove sprite from dynamic atlas. - this.engine.dynamicAtlasManager.removeSprite(_sprite); + this.engine._dynamicTextAtlasManager.removeSprite(_sprite); // Destroy current texture. const texture = _sprite.texture; _sprite.texture = null; diff --git a/packages/core/src/Engine.ts b/packages/core/src/Engine.ts index 9c80bae6a8..f19cae6a87 100644 --- a/packages/core/src/Engine.ts +++ b/packages/core/src/Engine.ts @@ -1,5 +1,5 @@ import { IPhysics } from "@oasis-engine/design"; -import { ColorSpace, DynamicAtlasManager } from "."; +import { ColorSpace, DynamicTextAtlasManager } from "."; import { ResourceManager } from "./asset/ResourceManager"; import { Event, EventDispatcher, Logger, Time } from "./base"; import { Canvas } from "./Canvas"; @@ -73,13 +73,14 @@ export class Engine extends EventDispatcher { _spriteMaskManager: SpriteMaskManager; /** @internal */ _macroCollection: ShaderMacroCollection = new ShaderMacroCollection(); + /** @internal */ + _dynamicTextAtlasManager: DynamicTextAtlasManager = new DynamicTextAtlasManager(this); protected _canvas: Canvas; private _settings: EngineSettings = {}; private _resourceManager: ResourceManager = new ResourceManager(this); private _sceneManager: SceneManager = new SceneManager(this); - private _dynamicAtlasManager: DynamicAtlasManager = new DynamicAtlasManager(this); private _vSyncCount: number = 1; private _targetFrameRate: number = 60; private _time: Time = new Time(); @@ -130,13 +131,6 @@ export class Engine extends EventDispatcher { return this._sceneManager; } - /** - * Get the dynamic atlas manager. - */ - get dynamicAtlasManager(): DynamicAtlasManager { - return this._dynamicAtlasManager; - } - /** * Get the Time class. */ From a117250485244bdceb0fb10fdbe5fede7d9bd818 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 18 Mar 2022 12:15:49 +0800 Subject: [PATCH 56/91] feat(text): opt code --- .../src/2d/dynamic-atlas/DynamicTextAtlas.ts | 17 ++++++++------- packages/core/src/2d/dynamic-atlas/types.ts | 21 ------------------- 2 files changed, 10 insertions(+), 28 deletions(-) delete mode 100644 packages/core/src/2d/dynamic-atlas/types.ts diff --git a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts index 7dd728635b..4cfb528e4f 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts @@ -2,7 +2,6 @@ import { Rect } from "@oasis-engine/math"; import { Engine } from "../../Engine"; import { Texture2D } from "../../texture/Texture2D"; import { Sprite } from "../sprite/Sprite"; -import { OriginInfo, OriginInfoObj } from "./types"; /** * Dynamic atlas for text. @@ -19,7 +18,7 @@ export class DynamicTextAtlas { private _curY: number = 1; private _nextY: number = 1; - private _originInfos: OriginInfoObj = {}; + private _originInfos: Record = {}; constructor(engine: Engine, width: number, height: number) { this._width = width; @@ -33,16 +32,13 @@ export class DynamicTextAtlas { */ public destroy() { const { _originInfos } = this; - const ids = Object.keys(_originInfos); - for (let i = 0, l = ids.length; i < l; ++i) { - const id = ids[i]; - const info = _originInfos[id]; + for (let id in _originInfos) { + const info = _originInfos[id]; const originSprite = info.sprite; originSprite.texture = info.texture; originSprite.atlasRegion = info.atlasRegion; delete _originInfos[id]; } - this._texture.destroy(true); } @@ -131,3 +127,10 @@ export class DynamicTextAtlas { return null; } } + +interface OriginInfo { + sprite: Sprite; + texture: Texture2D; + atlasRegion: Rect; +} + diff --git a/packages/core/src/2d/dynamic-atlas/types.ts b/packages/core/src/2d/dynamic-atlas/types.ts deleted file mode 100644 index b5b19c93fa..0000000000 --- a/packages/core/src/2d/dynamic-atlas/types.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Rect } from "@oasis-engine/math"; -import { Sprite } from "../sprite"; -import { Texture2D } from "../../texture/Texture2D"; - -/** - * The origin info includes sprite texture and altasRegion before batch. - */ -export interface OriginInfo { - sprite: Sprite; - texture: Texture2D; - atlasRegion: Rect; -} - -/** - * The origin info object to record all origin info. - */ -export interface OriginInfoObj { - /** The instance id for sprite. */ - [id: number]: OriginInfo -} - From a5eca02b4252c436a9dcbf10ea4f202eb450c5f2 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 18 Mar 2022 12:20:21 +0800 Subject: [PATCH 57/91] feat(text): delete pre multiple --- packages/core/src/2d/text/TextRenderer.ts | 14 +------------- packages/core/src/shaderlib/extra/sprite.fs.glsl | 8 -------- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index f0745abf44..8a6d8f69df 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -11,8 +11,6 @@ import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverf import { TextUtils } from "./TextUtils"; export class TextRenderer extends Renderer { - static needPremultiplyAlpha: boolean = false; - private static _textureProperty: ShaderProperty = Shader.getPropertyByName("u_spriteTexture"); private static _tempVec2: Vector2 = new Vector2(); private static _tempVec3: Vector3 = new Vector3(); @@ -287,12 +285,6 @@ export class TextRenderer extends Renderer { return; } - if (TextRenderer.needPremultiplyAlpha) { - this.shaderData.enableMacro("NEED_PREMULTIPLY_ALPHA"); - } else { - this.shaderData.disableMacro("NEED_PREMULTIPLY_ALPHA"); - } - const isStyleDirty = this._isContainDirtyFlag(DirtyFlag.Style); if (isStyleDirty) { this._updateText(); @@ -438,11 +430,7 @@ export class TextRenderer extends Renderer { canvas.height = height; context.putImageData(data, 0, 0); const texture = new Texture2D(this.engine, width, height); - if (TextRenderer.needPremultiplyAlpha) { - texture.setImageSource(canvas, 0, false, true); - } else { - texture.setImageSource(canvas); - } + texture.setImageSource(canvas); texture.generateMipmaps(); this._clearTexture(); diff --git a/packages/core/src/shaderlib/extra/sprite.fs.glsl b/packages/core/src/shaderlib/extra/sprite.fs.glsl index a632267798..97e9d80dbd 100644 --- a/packages/core/src/shaderlib/extra/sprite.fs.glsl +++ b/packages/core/src/shaderlib/extra/sprite.fs.glsl @@ -16,13 +16,5 @@ void main() vec4 baseColor = texture2D(u_spriteTexture, v_uv); #endif - #ifdef NEED_PREMULTIPLY_ALPHA - if (baseColor.a <= 0.0) { - gl_FragColor = baseColor * v_color; - } else { - gl_FragColor = vec4(baseColor.rgb/baseColor.a, baseColor.a) * v_color; - } - #else gl_FragColor = baseColor * v_color; - #endif } From 6ef9176fff42f873d143104bb041baaf8f361acf Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 18 Mar 2022 12:22:42 +0800 Subject: [PATCH 58/91] feat(text): delete line --- packages/core/src/shaderlib/extra/sprite.fs.glsl | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core/src/shaderlib/extra/sprite.fs.glsl b/packages/core/src/shaderlib/extra/sprite.fs.glsl index 97e9d80dbd..ef44cf80eb 100644 --- a/packages/core/src/shaderlib/extra/sprite.fs.glsl +++ b/packages/core/src/shaderlib/extra/sprite.fs.glsl @@ -15,6 +15,5 @@ void main() #else vec4 baseColor = texture2D(u_spriteTexture, v_uv); #endif - gl_FragColor = baseColor * v_color; } From bbb5c9e9fca1832959d3d8c5d8200ee2005dd192 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 18 Mar 2022 17:43:53 +0800 Subject: [PATCH 59/91] feat(text): opt code, opt property name from lineSpace to lineSpacing --- packages/core/src/2d/text/TextRenderer.ts | 14 +++++++------- packages/core/src/2d/text/TextUtils.ts | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 8a6d8f69df..b584adf630 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -39,7 +39,7 @@ export class TextRenderer extends Renderer { @assignmentClone private _fontSize: number = 24; @assignmentClone - private _lineSpace: number = 0; + private _lineSpacing: number = 0; @assignmentClone private _isBold: boolean = false; @assignmentClone @@ -75,7 +75,7 @@ export class TextRenderer extends Renderer { } /** - * Rendering string for the TextRenderer. + * Rendering string for the Text. */ get text(): string { return this._text; @@ -149,13 +149,13 @@ export class TextRenderer extends Renderer { /** * The space between two lines (in pixels). */ - get lineSpace(): number { - return this._lineSpace; + get lineSpacing(): number { + return this._lineSpacing; } - set lineSpace(value: number) { - if (this._lineSpace !== value) { - this._lineSpace = value; + set lineSpacing(value: number) { + if (this._lineSpacing !== value) { + this._lineSpacing = value; this._setDirtyFlagTrue(DirtyFlag.Style); } } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 70078dd9a1..81bbfbe04b 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -139,7 +139,7 @@ export class TextUtils { lines: TextUtils._wordWrap(textRenderer, fontStr), lineWidths: [], maxLineWidth: 0, - lineHeight: fontSize + textRenderer.lineSpace * _pixelsPerUnit, + lineHeight: fontSize + textRenderer.lineSpacing * _pixelsPerUnit, fontSize }; const { context } = textContext; From 0383302419da2d60e478bedc9e288191954ccf22 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 18 Mar 2022 19:22:45 +0800 Subject: [PATCH 60/91] feat(text): add text style --- packages/core/src/2d/text/TextRenderer.ts | 109 +++++++++------------- packages/core/src/2d/text/TextStyle.ts | 63 +++++++++++++ 2 files changed, 107 insertions(+), 65 deletions(-) create mode 100644 packages/core/src/2d/text/TextStyle.ts diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index b584adf630..3645317a6c 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -8,6 +8,7 @@ import { ShaderProperty } from "../../shader/ShaderProperty"; import { Texture2D } from "../../texture"; import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; +import { TextStyle } from "./TextStyle"; import { TextUtils } from "./TextUtils"; export class TextRenderer extends Renderer { @@ -37,14 +38,8 @@ export class TextRenderer extends Renderer { @assignmentClone private _fontName: string = "Arial"; @assignmentClone - private _fontSize: number = 24; - @assignmentClone private _lineSpacing: number = 0; @assignmentClone - private _isBold: boolean = false; - @assignmentClone - private _isItalic: boolean = false; - @assignmentClone private _horizontalAlignment: TextHorizontalAlignment = TextHorizontalAlignment.Center; @assignmentClone private _verticalAlignment: TextVerticalAlignment = TextVerticalAlignment.Center; @@ -52,8 +47,12 @@ export class TextRenderer extends Renderer { private _horizontalOverflow: TextHorizontalOverflow = TextHorizontalOverflow.Overflow; @assignmentClone private _verticalOverflow: TextVerticalOverflow = TextVerticalOverflow.Overflow; + @assignmentClone + private _style: TextStyle = null; + @ignoreClone + private _dirtyFlag: number = DirtyFlag.Property; @ignoreClone - private _dirtyFlag: number = DirtyFlag.Style; + private _styleDirty: UpdateFlag; @ignoreClone private _isWorldMatrixDirty: UpdateFlag; @assignmentClone @@ -85,7 +84,7 @@ export class TextRenderer extends Renderer { value = value || ""; if (this._text !== value) { this._text = value; - this._setDirtyFlagTrue(DirtyFlag.Style); + this._setDirtyFlagTrue(DirtyFlag.Property); } } @@ -99,7 +98,7 @@ export class TextRenderer extends Renderer { set width(value: number) { if (this._width !== value) { this._width = value; - this._setDirtyFlagTrue(DirtyFlag.Style); + this._setDirtyFlagTrue(DirtyFlag.Property); } } @@ -113,7 +112,7 @@ export class TextRenderer extends Renderer { set height(value: number) { if (this._height !== value) { this._height = value; - this._setDirtyFlagTrue(DirtyFlag.Style); + this._setDirtyFlagTrue(DirtyFlag.Property); } } @@ -128,21 +127,7 @@ export class TextRenderer extends Renderer { value = value || "Arial"; if (this._fontName !== value) { this._fontName = value; - this._setDirtyFlagTrue(DirtyFlag.Style); - } - } - - /** - * The font size of the TextRenderer. - */ - get fontSize(): number { - return this._fontSize; - } - - set fontSize(value: number) { - if (this._fontSize !== value) { - this._fontSize = value; - this._setDirtyFlagTrue(DirtyFlag.Style); + this._setDirtyFlagTrue(DirtyFlag.Property); } } @@ -156,35 +141,7 @@ export class TextRenderer extends Renderer { set lineSpacing(value: number) { if (this._lineSpacing !== value) { this._lineSpacing = value; - this._setDirtyFlagTrue(DirtyFlag.Style); - } - } - - /** - * The text is bold. - */ - get bold(): boolean { - return this._isBold; - } - - set bold(value: boolean) { - if (this._isBold !== value) { - this._isBold = value; - this._setDirtyFlagTrue(DirtyFlag.Style); - } - } - - /** - * The text is italic. - */ - get italic(): boolean { - return this._isItalic; - } - - set italic(value: boolean) { - if (this._isItalic !== value) { - this._isItalic = value; - this._setDirtyFlagTrue(DirtyFlag.Style); + this._setDirtyFlagTrue(DirtyFlag.Property); } } @@ -198,7 +155,7 @@ export class TextRenderer extends Renderer { set horizontalAlignment(value: TextHorizontalAlignment) { if (this._horizontalAlignment !== value) { this._horizontalAlignment = value; - this._setDirtyFlagTrue(DirtyFlag.Style); + this._setDirtyFlagTrue(DirtyFlag.Property); } } @@ -212,7 +169,7 @@ export class TextRenderer extends Renderer { set verticalAlignment(value: TextVerticalAlignment) { if (this._verticalAlignment !== value) { this._verticalAlignment = value; - this._setDirtyFlagTrue(DirtyFlag.Style); + this._setDirtyFlagTrue(DirtyFlag.Property); } } @@ -226,7 +183,7 @@ export class TextRenderer extends Renderer { set horizontalOverflow(value: TextHorizontalOverflow) { if (this._horizontalOverflow !== value) { this._horizontalOverflow = value; - this._setDirtyFlagTrue(DirtyFlag.Style); + this._setDirtyFlagTrue(DirtyFlag.Property); } } @@ -240,7 +197,24 @@ export class TextRenderer extends Renderer { set verticalOverflow(value: TextVerticalOverflow) { if (this._verticalOverflow !== value) { this._verticalOverflow = value; - this._setDirtyFlagTrue(DirtyFlag.Style); + this._setDirtyFlagTrue(DirtyFlag.Property); + } + } + + /** + * The text style. + */ + get style(): TextStyle { + return this._style; + } + + set style(value: TextStyle) { + if (this._style !== value) { + this._styleDirty && this._styleDirty.destroy(); + this._style = value; + if (value) { + this._styleDirty = value._registerUpdateFlag(); + } } } @@ -273,6 +247,7 @@ export class TextRenderer extends Renderer { super(entity); this._isWorldMatrixDirty = entity.transform.registerWorldChangeFlag(); this._sprite = new Sprite(this.engine); + this.style = new TextStyle(); this.setMaterial(this._engine._spriteDefaultMaterial); } @@ -285,7 +260,7 @@ export class TextRenderer extends Renderer { return; } - const isStyleDirty = this._isContainDirtyFlag(DirtyFlag.Style); + const isStyleDirty = this._isContainDirtyFlag(DirtyFlag.Property) || this._styleDirty.flag; if (isStyleDirty) { this._updateText(); } @@ -293,7 +268,8 @@ export class TextRenderer extends Renderer { const { _sprite: sprite } = this; const { texture } = sprite; if (!texture) { - this._setDirtyFlagFalse(DirtyFlag.Style); + this._setDirtyFlagFalse(DirtyFlag.Property); + this._styleDirty.flag = false; return; } @@ -303,7 +279,8 @@ export class TextRenderer extends Renderer { this._updatePosition(); this._isWorldMatrixDirty.flag = false; } - this._setDirtyFlagFalse(DirtyFlag.Style); + this._setDirtyFlagFalse(DirtyFlag.Property); + this._styleDirty.flag = false; if (this._isContainDirtyFlag(DirtyFlag.MaskInteraction)) { this._updateStencilState(); @@ -331,6 +308,7 @@ export class TextRenderer extends Renderer { _onDestroy(): void { this.engine._dynamicTextAtlasManager.removeSprite(this._sprite); this._isWorldMatrixDirty.destroy(); + this._styleDirty && this._styleDirty.destroy(); super._onDestroy(); } @@ -367,14 +345,15 @@ export class TextRenderer extends Renderer { } private _getFontString() { + const { style } = this; let str = ""; - if (this.bold) { + if (style.bold) { str += "bold "; } - if (this.italic) { + if (style.italic) { str += "italic "; } - str += `${this._fontSize}px ${this._fontName}`; + str += `${style.fontSize}px ${this._fontName}`; return str; } @@ -525,7 +504,7 @@ export class TextRenderer extends Renderer { } enum DirtyFlag { - Style = 0x1, + Property = 0x1, MaskInteraction = 0x2, All = 0x3 } diff --git a/packages/core/src/2d/text/TextStyle.ts b/packages/core/src/2d/text/TextStyle.ts new file mode 100644 index 0000000000..3c8f3d5c98 --- /dev/null +++ b/packages/core/src/2d/text/TextStyle.ts @@ -0,0 +1,63 @@ +import { assignmentClone } from "../../clone/CloneManager"; +import { UpdateFlag } from "../../UpdateFlag"; +import { UpdateFlagManager } from "../../UpdateFlagManager"; + +export class TextStyle { + @assignmentClone + private _fontSize: number = 24; + @assignmentClone + private _isBold: boolean = false; + @assignmentClone + private _isItalic: boolean = false; + + private _updateFlagManager: UpdateFlagManager = new UpdateFlagManager(); + + /** + * The font size of the TextRenderer. + */ + get fontSize(): number { + return this._fontSize; + } + + set fontSize(value: number) { + if (this._fontSize !== value) { + this._fontSize = value; + this._updateFlagManager.distribute(); + } + } + + /** + * The text is bold. + */ + get bold(): boolean { + return this._isBold; + } + + set bold(value: boolean) { + if (this._isBold !== value) { + this._isBold = value; + this._updateFlagManager.distribute(); + } + } + + /** + * The text is italic. + */ + get italic(): boolean { + return this._isItalic; + } + + set italic(value: boolean) { + if (this._isItalic !== value) { + this._isItalic = value; + this._updateFlagManager.distribute(); + } + } + + /** + * @internal + */ + _registerUpdateFlag(): UpdateFlag { + return this._updateFlagManager.register(); + } +} From 01585cae3f1309c87ccc06a1698e9d8718684a81 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 21 Mar 2022 19:28:26 +0800 Subject: [PATCH 61/91] feat(text): add Font asset, and change fontName to font --- packages/core/src/2d/text/Font.ts | 50 +++++++++++++++++++++++ packages/core/src/2d/text/TextRenderer.ts | 38 ++++++++++------- packages/core/src/2d/text/index.ts | 3 +- 3 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 packages/core/src/2d/text/Font.ts diff --git a/packages/core/src/2d/text/Font.ts b/packages/core/src/2d/text/Font.ts new file mode 100644 index 0000000000..329815adc6 --- /dev/null +++ b/packages/core/src/2d/text/Font.ts @@ -0,0 +1,50 @@ +import { RefObject } from "../../asset/RefObject" +import { assignmentClone } from "../../clone/CloneManager"; +import { Engine } from "../../Engine"; +import { UpdateFlag } from "../../UpdateFlag"; +import { UpdateFlagManager } from "../../UpdateFlagManager"; + +export class Font extends RefObject { + @assignmentClone + private _fontName: string = "Arial"; + + private _updateFlagManager: UpdateFlagManager = new UpdateFlagManager(); + + /** + * The font name of the TextRenderer. + */ + get fontName(): string { + return this._fontName; + } + + set fontName(value: string) { + value = value || "Arial"; + if (this._fontName !== value) { + this._fontName = value; + this._updateFlagManager.distribute(); + } + } + + /** + * Create a material instance. + * @param engine - Engine to which the material belongs + * @param shader - Shader used by the material + */ + constructor(engine: Engine, name: string = "") { + super(engine); + this._fontName = name || "Arial"; + } + + /** + * @internal + */ + _registerUpdateFlag(): UpdateFlag { + return this._updateFlagManager.register(); + } + + /** + * @override + */ + protected _onDestroy(): void {} +} + diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 3645317a6c..1cbeb32375 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -8,6 +8,7 @@ import { ShaderProperty } from "../../shader/ShaderProperty"; import { Texture2D } from "../../texture"; import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; +import { Font } from "./Font"; import { TextStyle } from "./TextStyle"; import { TextUtils } from "./TextUtils"; @@ -36,7 +37,7 @@ export class TextRenderer extends Renderer { @assignmentClone private _height: number = 0; @assignmentClone - private _fontName: string = "Arial"; + private _font: Font = null; @assignmentClone private _lineSpacing: number = 0; @assignmentClone @@ -54,6 +55,8 @@ export class TextRenderer extends Renderer { @ignoreClone private _styleDirty: UpdateFlag; @ignoreClone + private _fontDirty: UpdateFlag; + @ignoreClone private _isWorldMatrixDirty: UpdateFlag; @assignmentClone private _maskInteraction: SpriteMaskInteraction = SpriteMaskInteraction.None; @@ -119,15 +122,17 @@ export class TextRenderer extends Renderer { /** * The font name of the TextRenderer. */ - get fontName(): string { - return this._fontName; + get font(): Font { + return this._font; } - set fontName(value: string) { - value = value || "Arial"; - if (this._fontName !== value) { - this._fontName = value; - this._setDirtyFlagTrue(DirtyFlag.Property); + set font(value: Font) { + if (this._font !== value) { + this._fontDirty && this._fontDirty.destroy(); + this._font = value; + if (value) { + this._fontDirty = value._registerUpdateFlag(); + } } } @@ -248,6 +253,7 @@ export class TextRenderer extends Renderer { this._isWorldMatrixDirty = entity.transform.registerWorldChangeFlag(); this._sprite = new Sprite(this.engine); this.style = new TextStyle(); + this.font = new Font(entity.engine); this.setMaterial(this._engine._spriteDefaultMaterial); } @@ -260,8 +266,9 @@ export class TextRenderer extends Renderer { return; } - const isStyleDirty = this._isContainDirtyFlag(DirtyFlag.Property) || this._styleDirty.flag; - if (isStyleDirty) { + const { _styleDirty, _fontDirty } = this; + const isDirty = this._isContainDirtyFlag(DirtyFlag.Property) || _styleDirty.flag || _fontDirty.flag; + if (isDirty) { this._updateText(); } @@ -269,18 +276,20 @@ export class TextRenderer extends Renderer { const { texture } = sprite; if (!texture) { this._setDirtyFlagFalse(DirtyFlag.Property); - this._styleDirty.flag = false; + _styleDirty.flag = false; + _fontDirty.flag = false; return; } // Update sprite data. sprite._updateMesh(); - if (this._isWorldMatrixDirty.flag || isStyleDirty) { + if (this._isWorldMatrixDirty.flag || isDirty) { this._updatePosition(); this._isWorldMatrixDirty.flag = false; } this._setDirtyFlagFalse(DirtyFlag.Property); - this._styleDirty.flag = false; + _styleDirty.flag = false; + _fontDirty.flag = false; if (this._isContainDirtyFlag(DirtyFlag.MaskInteraction)) { this._updateStencilState(); @@ -309,6 +318,7 @@ export class TextRenderer extends Renderer { this.engine._dynamicTextAtlasManager.removeSprite(this._sprite); this._isWorldMatrixDirty.destroy(); this._styleDirty && this._styleDirty.destroy(); + this._fontDirty && this._fontDirty.destroy(); super._onDestroy(); } @@ -353,7 +363,7 @@ export class TextRenderer extends Renderer { if (style.italic) { str += "italic "; } - str += `${style.fontSize}px ${this._fontName}`; + str += `${style.fontSize}px ${this._font.fontName}`; return str; } diff --git a/packages/core/src/2d/text/index.ts b/packages/core/src/2d/text/index.ts index 9db4e3da5d..a2f6d22030 100644 --- a/packages/core/src/2d/text/index.ts +++ b/packages/core/src/2d/text/index.ts @@ -1 +1,2 @@ -export { TextRenderer } from "./TextRenderer"; \ No newline at end of file +export { Font } from "./Font"; +export { TextRenderer } from "./TextRenderer"; From 5c5e6eb35a2ede4cd265cafc0fa77df24e72a5e4 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 21 Mar 2022 20:07:30 +0800 Subject: [PATCH 62/91] feat(text): opt api change _horizontalOverflow to _enableWarpping --- packages/core/src/2d/enums/TextOverflow.ts | 10 ---------- packages/core/src/2d/index.ts | 2 +- packages/core/src/2d/text/TextRenderer.ts | 16 ++++++++-------- packages/core/src/2d/text/TextUtils.ts | 9 ++++----- 4 files changed, 13 insertions(+), 24 deletions(-) diff --git a/packages/core/src/2d/enums/TextOverflow.ts b/packages/core/src/2d/enums/TextOverflow.ts index ff207aa918..1ed1c38ea4 100644 --- a/packages/core/src/2d/enums/TextOverflow.ts +++ b/packages/core/src/2d/enums/TextOverflow.ts @@ -1,13 +1,3 @@ -/** - * The way to handle the situation where the text is too wide to fit in the width. - */ -export enum TextHorizontalOverflow { - /** Overflow when the text is too wide */ - Overflow = 0, - /** wrap with width when the text is too wide */ - Wrap = 1 -} - /** * The way to handle the situation where wrapped text is too tall to fit in the height. */ diff --git a/packages/core/src/2d/index.ts b/packages/core/src/2d/index.ts index 457effc9a3..b80b6dfc5b 100644 --- a/packages/core/src/2d/index.ts +++ b/packages/core/src/2d/index.ts @@ -1,7 +1,7 @@ export { SpriteMaskInteraction } from "./enums/SpriteMaskInteraction"; export { SpriteMaskLayer } from "./enums/SpriteMaskLayer"; export { TextHorizontalAlignment, TextVerticalAlignment } from "./enums/TextAlignment"; -export { TextHorizontalOverflow, TextVerticalOverflow } from "./enums/TextOverflow"; +export { TextVerticalOverflow } from "./enums/TextOverflow"; export { SpriteAtlas } from "./atlas/SpriteAtlas"; export { DynamicTextAtlasManager } from "./dynamic-atlas/DynamicTextAtlasManager"; export * from "./sprite/index"; diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 1cbeb32375..62d1249738 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -7,7 +7,7 @@ import { Entity } from "../../Entity"; import { ShaderProperty } from "../../shader/ShaderProperty"; import { Texture2D } from "../../texture"; import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; -import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; +import { TextVerticalOverflow } from "../enums/TextOverflow"; import { Font } from "./Font"; import { TextStyle } from "./TextStyle"; import { TextUtils } from "./TextUtils"; @@ -45,7 +45,7 @@ export class TextRenderer extends Renderer { @assignmentClone private _verticalAlignment: TextVerticalAlignment = TextVerticalAlignment.Center; @assignmentClone - private _horizontalOverflow: TextHorizontalOverflow = TextHorizontalOverflow.Overflow; + private _enableWarpping: boolean = false; @assignmentClone private _verticalOverflow: TextVerticalOverflow = TextVerticalOverflow.Overflow; @assignmentClone @@ -179,15 +179,15 @@ export class TextRenderer extends Renderer { } /** - * The horizontal overflow. + * Whether wrap text to next line when exceeds the width of the container. */ - get horizontalOverflow(): TextHorizontalOverflow { - return this._horizontalOverflow; + get enableWarpping(): boolean { + return this._enableWarpping; } - set horizontalOverflow(value: TextHorizontalOverflow) { - if (this._horizontalOverflow !== value) { - this._horizontalOverflow = value; + set enableWarpping(value: boolean) { + if (this._enableWarpping !== value) { + this._enableWarpping = value; this._setDirtyFlagTrue(DirtyFlag.Property); } } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 81bbfbe04b..741c68afb1 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -1,4 +1,4 @@ -import { TextHorizontalOverflow, TextVerticalOverflow } from "../enums/TextOverflow"; +import { TextVerticalOverflow } from "../enums/TextOverflow"; import { TextRenderer } from "./TextRenderer"; /** @@ -236,10 +236,9 @@ export class TextUtils { } private static _wordWrap(textRenderer: TextRenderer, fontStr: string): Array { - const { width, height, horizontalOverflow, verticalOverflow } = textRenderer; - const isWrap = horizontalOverflow === TextHorizontalOverflow.Wrap; + const { width, height, enableWarpping, verticalOverflow } = textRenderer; - if (isWrap && width <= 0) { + if (enableWarpping && width <= 0) { return []; } if (verticalOverflow === TextVerticalOverflow.Truncate && height <= 0) { @@ -257,7 +256,7 @@ export class TextUtils { for (let i = 0, l = textArr.length; i < l; ++i) { const curText = textArr[i]; const curWidth = Math.ceil(context.measureText(curText).width); - const needWrap = isWrap || curWidth > maxWidth; + const needWrap = enableWarpping || curWidth > maxWidth; const wrapWidth = Math.min(widthInPixel, maxWidth); if (needWrap) { if (curWidth <= wrapWidth) { From 697be15095c80d7304b7a616992deb0f16e71acb Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 21 Mar 2022 20:23:11 +0800 Subject: [PATCH 63/91] feat(text): rename overflow and wrap --- packages/core/src/2d/enums/TextOverflow.ts | 2 +- packages/core/src/2d/index.ts | 2 +- packages/core/src/2d/text/TextRenderer.ts | 16 ++++++++-------- packages/core/src/2d/text/TextUtils.ts | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/core/src/2d/enums/TextOverflow.ts b/packages/core/src/2d/enums/TextOverflow.ts index 1ed1c38ea4..adef863f1f 100644 --- a/packages/core/src/2d/enums/TextOverflow.ts +++ b/packages/core/src/2d/enums/TextOverflow.ts @@ -1,7 +1,7 @@ /** * The way to handle the situation where wrapped text is too tall to fit in the height. */ -export enum TextVerticalOverflow { +export enum OverflowMode { /** Overflow when the text is too tall */ Overflow = 0, /** Truncate with height when the text is too tall */ diff --git a/packages/core/src/2d/index.ts b/packages/core/src/2d/index.ts index b80b6dfc5b..4296c505a9 100644 --- a/packages/core/src/2d/index.ts +++ b/packages/core/src/2d/index.ts @@ -1,7 +1,7 @@ export { SpriteMaskInteraction } from "./enums/SpriteMaskInteraction"; export { SpriteMaskLayer } from "./enums/SpriteMaskLayer"; export { TextHorizontalAlignment, TextVerticalAlignment } from "./enums/TextAlignment"; -export { TextVerticalOverflow } from "./enums/TextOverflow"; +export { OverflowMode } from "./enums/TextOverflow"; export { SpriteAtlas } from "./atlas/SpriteAtlas"; export { DynamicTextAtlasManager } from "./dynamic-atlas/DynamicTextAtlasManager"; export * from "./sprite/index"; diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 62d1249738..e5d33e9dde 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -7,7 +7,7 @@ import { Entity } from "../../Entity"; import { ShaderProperty } from "../../shader/ShaderProperty"; import { Texture2D } from "../../texture"; import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; -import { TextVerticalOverflow } from "../enums/TextOverflow"; +import { OverflowMode } from "../enums/TextOverflow"; import { Font } from "./Font"; import { TextStyle } from "./TextStyle"; import { TextUtils } from "./TextUtils"; @@ -47,7 +47,7 @@ export class TextRenderer extends Renderer { @assignmentClone private _enableWarpping: boolean = false; @assignmentClone - private _verticalOverflow: TextVerticalOverflow = TextVerticalOverflow.Overflow; + private _overflowMode: OverflowMode = OverflowMode.Overflow; @assignmentClone private _style: TextStyle = null; @ignoreClone @@ -193,15 +193,15 @@ export class TextRenderer extends Renderer { } /** - * The vertical overflow. + * The overflow mode. */ - get verticalOverflow(): TextVerticalOverflow { - return this._verticalOverflow; + get overflowMode(): OverflowMode { + return this._overflowMode; } - set verticalOverflow(value: TextVerticalOverflow) { - if (this._verticalOverflow !== value) { - this._verticalOverflow = value; + set overflowMode(value: OverflowMode) { + if (this._overflowMode !== value) { + this._overflowMode = value; this._setDirtyFlagTrue(DirtyFlag.Property); } } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 741c68afb1..847ba3454a 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -1,4 +1,4 @@ -import { TextVerticalOverflow } from "../enums/TextOverflow"; +import { OverflowMode } from "../enums/TextOverflow"; import { TextRenderer } from "./TextRenderer"; /** @@ -164,7 +164,7 @@ export class TextUtils { // reset width and height. textMetrics.width = Math.min(maxLineWidth, TextUtils._maxWidth); let height = textRenderer.height * _pixelsPerUnit; - if (textRenderer.verticalOverflow === TextVerticalOverflow.Overflow) { + if (textRenderer.overflowMode === OverflowMode.Overflow) { height = Math.min(textMetrics.lineHeight * linesLen, TextUtils._maxHeight); } textMetrics.height = height; @@ -236,12 +236,12 @@ export class TextUtils { } private static _wordWrap(textRenderer: TextRenderer, fontStr: string): Array { - const { width, height, enableWarpping, verticalOverflow } = textRenderer; + const { width, height, enableWarpping, overflowMode } = textRenderer; if (enableWarpping && width <= 0) { return []; } - if (verticalOverflow === TextVerticalOverflow.Truncate && height <= 0) { + if (overflowMode === OverflowMode.Truncate && height <= 0) { return []; } From 6ee9989fcbc8b17af8b1efe696783de19aa4f078 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Wed, 23 Mar 2022 16:00:33 +0800 Subject: [PATCH 64/91] feat(text): opt recomment --- packages/core/src/2d/text/TextRenderer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index e5d33e9dde..9a1368d9f4 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -64,7 +64,7 @@ export class TextRenderer extends Renderer { private _maskLayer: number = SpriteMaskLayer.Layer0; /** - * Rendering color for the TextRenderer. + * Rendering color for the Text. */ get color(): Color { return this._color; From 12dc4dfb1713c52ce14cae1cf54279968635b6aa Mon Sep 17 00:00:00 2001 From: singlecoder Date: Wed, 23 Mar 2022 16:15:49 +0800 Subject: [PATCH 65/91] feat(text): spelling error correction --- packages/core/src/2d/text/TextRenderer.ts | 12 ++++++------ packages/core/src/2d/text/TextUtils.ts | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 9a1368d9f4..d1a64c7322 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -45,7 +45,7 @@ export class TextRenderer extends Renderer { @assignmentClone private _verticalAlignment: TextVerticalAlignment = TextVerticalAlignment.Center; @assignmentClone - private _enableWarpping: boolean = false; + private _enableWrapping: boolean = false; @assignmentClone private _overflowMode: OverflowMode = OverflowMode.Overflow; @assignmentClone @@ -181,13 +181,13 @@ export class TextRenderer extends Renderer { /** * Whether wrap text to next line when exceeds the width of the container. */ - get enableWarpping(): boolean { - return this._enableWarpping; + get enableWrapping(): boolean { + return this._enableWrapping; } - set enableWarpping(value: boolean) { - if (this._enableWarpping !== value) { - this._enableWarpping = value; + set enableWrapping(value: boolean) { + if (this._enableWrapping !== value) { + this._enableWrapping = value; this._setDirtyFlagTrue(DirtyFlag.Property); } } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 847ba3454a..04f173ed0e 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -236,9 +236,9 @@ export class TextUtils { } private static _wordWrap(textRenderer: TextRenderer, fontStr: string): Array { - const { width, height, enableWarpping, overflowMode } = textRenderer; + const { width, height, enableWrapping, overflowMode } = textRenderer; - if (enableWarpping && width <= 0) { + if (enableWrapping && width <= 0) { return []; } if (overflowMode === OverflowMode.Truncate && height <= 0) { @@ -256,7 +256,7 @@ export class TextUtils { for (let i = 0, l = textArr.length; i < l; ++i) { const curText = textArr[i]; const curWidth = Math.ceil(context.measureText(curText).width); - const needWrap = enableWarpping || curWidth > maxWidth; + const needWrap = enableWrapping || curWidth > maxWidth; const wrapWidth = Math.min(widthInPixel, maxWidth); if (needWrap) { if (curWidth <= wrapWidth) { From 03e3d1099d5508da0be26e24726ef11f6521924c Mon Sep 17 00:00:00 2001 From: singlecoder Date: Wed, 23 Mar 2022 17:57:51 +0800 Subject: [PATCH 66/91] feat(text): opt font style --- packages/core/src/2d/enums/FontStyle.ts | 11 ++++ packages/core/src/2d/index.ts | 1 + packages/core/src/2d/text/TextRenderer.ts | 71 +++++++++++++---------- packages/core/src/2d/text/TextStyle.ts | 63 -------------------- 4 files changed, 51 insertions(+), 95 deletions(-) create mode 100644 packages/core/src/2d/enums/FontStyle.ts delete mode 100644 packages/core/src/2d/text/TextStyle.ts diff --git a/packages/core/src/2d/enums/FontStyle.ts b/packages/core/src/2d/enums/FontStyle.ts new file mode 100644 index 0000000000..08048cb5e9 --- /dev/null +++ b/packages/core/src/2d/enums/FontStyle.ts @@ -0,0 +1,11 @@ +/** + * The style of the font. + */ +export enum FontStyle { + /** Set font without style */ + None = 0x0, + /** Set font bold */ + Bold = 0x1, + /** Set font italic */ + Italic = 0x2 +} diff --git a/packages/core/src/2d/index.ts b/packages/core/src/2d/index.ts index 4296c505a9..eb412eaa8b 100644 --- a/packages/core/src/2d/index.ts +++ b/packages/core/src/2d/index.ts @@ -2,6 +2,7 @@ export { SpriteMaskInteraction } from "./enums/SpriteMaskInteraction"; export { SpriteMaskLayer } from "./enums/SpriteMaskLayer"; export { TextHorizontalAlignment, TextVerticalAlignment } from "./enums/TextAlignment"; export { OverflowMode } from "./enums/TextOverflow"; +export { FontStyle } from "./enums/FontStyle"; export { SpriteAtlas } from "./atlas/SpriteAtlas"; export { DynamicTextAtlasManager } from "./dynamic-atlas/DynamicTextAtlasManager"; export * from "./sprite/index"; diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index d1a64c7322..f3521064a3 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -6,10 +6,10 @@ import { assignmentClone, deepClone, ignoreClone } from "../../clone/CloneManage import { Entity } from "../../Entity"; import { ShaderProperty } from "../../shader/ShaderProperty"; import { Texture2D } from "../../texture"; +import { FontStyle } from "../enums/FontStyle"; import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; import { OverflowMode } from "../enums/TextOverflow"; import { Font } from "./Font"; -import { TextStyle } from "./TextStyle"; import { TextUtils } from "./TextUtils"; export class TextRenderer extends Renderer { @@ -39,6 +39,10 @@ export class TextRenderer extends Renderer { @assignmentClone private _font: Font = null; @assignmentClone + private _fontSize: number = 24; + @assignmentClone + private _fontStyle: number = FontStyle.None; + @assignmentClone private _lineSpacing: number = 0; @assignmentClone private _horizontalAlignment: TextHorizontalAlignment = TextHorizontalAlignment.Center; @@ -48,13 +52,9 @@ export class TextRenderer extends Renderer { private _enableWrapping: boolean = false; @assignmentClone private _overflowMode: OverflowMode = OverflowMode.Overflow; - @assignmentClone - private _style: TextStyle = null; @ignoreClone private _dirtyFlag: number = DirtyFlag.Property; @ignoreClone - private _styleDirty: UpdateFlag; - @ignoreClone private _fontDirty: UpdateFlag; @ignoreClone private _isWorldMatrixDirty: UpdateFlag; @@ -136,6 +136,34 @@ export class TextRenderer extends Renderer { } } + /** + * The font size of the Text. + */ + get fontSize(): number { + return this._fontSize; + } + + set fontSize(value: number) { + if (this._fontSize !== value) { + this._fontSize = value; + this._setDirtyFlagTrue(DirtyFlag.Property); + } + } + + /** + * The style of the font. + */ + get fontStyle(): number { + return this._fontStyle; + } + + set fontStyle(value: number) { + if (this.fontStyle !== value) { + this._fontStyle = value; + this._setDirtyFlagTrue(DirtyFlag.Property); + } + } + /** * The space between two lines (in pixels). */ @@ -206,23 +234,6 @@ export class TextRenderer extends Renderer { } } - /** - * The text style. - */ - get style(): TextStyle { - return this._style; - } - - set style(value: TextStyle) { - if (this._style !== value) { - this._styleDirty && this._styleDirty.destroy(); - this._style = value; - if (value) { - this._styleDirty = value._registerUpdateFlag(); - } - } - } - /** * Interacts with the masks. */ @@ -252,7 +263,6 @@ export class TextRenderer extends Renderer { super(entity); this._isWorldMatrixDirty = entity.transform.registerWorldChangeFlag(); this._sprite = new Sprite(this.engine); - this.style = new TextStyle(); this.font = new Font(entity.engine); this.setMaterial(this._engine._spriteDefaultMaterial); } @@ -266,8 +276,8 @@ export class TextRenderer extends Renderer { return; } - const { _styleDirty, _fontDirty } = this; - const isDirty = this._isContainDirtyFlag(DirtyFlag.Property) || _styleDirty.flag || _fontDirty.flag; + const { _fontDirty } = this; + const isDirty = this._isContainDirtyFlag(DirtyFlag.Property) || _fontDirty.flag; if (isDirty) { this._updateText(); } @@ -276,7 +286,6 @@ export class TextRenderer extends Renderer { const { texture } = sprite; if (!texture) { this._setDirtyFlagFalse(DirtyFlag.Property); - _styleDirty.flag = false; _fontDirty.flag = false; return; } @@ -288,7 +297,6 @@ export class TextRenderer extends Renderer { this._isWorldMatrixDirty.flag = false; } this._setDirtyFlagFalse(DirtyFlag.Property); - _styleDirty.flag = false; _fontDirty.flag = false; if (this._isContainDirtyFlag(DirtyFlag.MaskInteraction)) { @@ -317,7 +325,6 @@ export class TextRenderer extends Renderer { _onDestroy(): void { this.engine._dynamicTextAtlasManager.removeSprite(this._sprite); this._isWorldMatrixDirty.destroy(); - this._styleDirty && this._styleDirty.destroy(); this._fontDirty && this._fontDirty.destroy(); super._onDestroy(); } @@ -355,15 +362,15 @@ export class TextRenderer extends Renderer { } private _getFontString() { - const { style } = this; + const { _fontStyle: style } = this; let str = ""; - if (style.bold) { + if (style & FontStyle.Bold) { str += "bold "; } - if (style.italic) { + if (style & FontStyle.Italic) { str += "italic "; } - str += `${style.fontSize}px ${this._font.fontName}`; + str += `${this.fontSize}px ${this._font.fontName}`; return str; } diff --git a/packages/core/src/2d/text/TextStyle.ts b/packages/core/src/2d/text/TextStyle.ts deleted file mode 100644 index 3c8f3d5c98..0000000000 --- a/packages/core/src/2d/text/TextStyle.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { assignmentClone } from "../../clone/CloneManager"; -import { UpdateFlag } from "../../UpdateFlag"; -import { UpdateFlagManager } from "../../UpdateFlagManager"; - -export class TextStyle { - @assignmentClone - private _fontSize: number = 24; - @assignmentClone - private _isBold: boolean = false; - @assignmentClone - private _isItalic: boolean = false; - - private _updateFlagManager: UpdateFlagManager = new UpdateFlagManager(); - - /** - * The font size of the TextRenderer. - */ - get fontSize(): number { - return this._fontSize; - } - - set fontSize(value: number) { - if (this._fontSize !== value) { - this._fontSize = value; - this._updateFlagManager.distribute(); - } - } - - /** - * The text is bold. - */ - get bold(): boolean { - return this._isBold; - } - - set bold(value: boolean) { - if (this._isBold !== value) { - this._isBold = value; - this._updateFlagManager.distribute(); - } - } - - /** - * The text is italic. - */ - get italic(): boolean { - return this._isItalic; - } - - set italic(value: boolean) { - if (this._isItalic !== value) { - this._isItalic = value; - this._updateFlagManager.distribute(); - } - } - - /** - * @internal - */ - _registerUpdateFlag(): UpdateFlag { - return this._updateFlagManager.register(); - } -} From 52c655234056f422aa45eeabf5357b0a0a4606f6 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Wed, 23 Mar 2022 18:49:46 +0800 Subject: [PATCH 67/91] feat(text): opt code --- packages/core/src/2d/text/TextRenderer.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index f3521064a3..0058dd1762 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -41,7 +41,7 @@ export class TextRenderer extends Renderer { @assignmentClone private _fontSize: number = 24; @assignmentClone - private _fontStyle: number = FontStyle.None; + private _fontStyle: FontStyle = FontStyle.None; @assignmentClone private _lineSpacing: number = 0; @assignmentClone @@ -153,11 +153,11 @@ export class TextRenderer extends Renderer { /** * The style of the font. */ - get fontStyle(): number { + get fontStyle(): FontStyle { return this._fontStyle; } - set fontStyle(value: number) { + set fontStyle(value: FontStyle) { if (this.fontStyle !== value) { this._fontStyle = value; this._setDirtyFlagTrue(DirtyFlag.Property); @@ -361,6 +361,13 @@ export class TextRenderer extends Renderer { this._dirtyFlag &= ~type; } + /** + * @internal + */ + _cloneTo(target: TextRenderer): void { + target.font = this._font; + } + private _getFontString() { const { _fontStyle: style } = this; let str = ""; From a06182f572d0279de4afaad20efb1f7168480166 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 24 Mar 2022 10:36:53 +0800 Subject: [PATCH 68/91] feat(text): close export dynamic text atlas manager --- packages/core/src/2d/index.ts | 1 - packages/core/src/Engine.ts | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/2d/index.ts b/packages/core/src/2d/index.ts index eb412eaa8b..f58f66ada7 100644 --- a/packages/core/src/2d/index.ts +++ b/packages/core/src/2d/index.ts @@ -4,6 +4,5 @@ export { TextHorizontalAlignment, TextVerticalAlignment } from "./enums/TextAlig export { OverflowMode } from "./enums/TextOverflow"; export { FontStyle } from "./enums/FontStyle"; export { SpriteAtlas } from "./atlas/SpriteAtlas"; -export { DynamicTextAtlasManager } from "./dynamic-atlas/DynamicTextAtlasManager"; export * from "./sprite/index"; export * from "./text/index"; diff --git a/packages/core/src/Engine.ts b/packages/core/src/Engine.ts index f19cae6a87..8304eec2b2 100644 --- a/packages/core/src/Engine.ts +++ b/packages/core/src/Engine.ts @@ -1,5 +1,6 @@ import { IPhysics } from "@oasis-engine/design"; -import { ColorSpace, DynamicTextAtlasManager } from "."; +import { ColorSpace } from "."; +import { DynamicTextAtlasManager } from "./2d/dynamic-atlas/DynamicTextAtlasManager"; import { ResourceManager } from "./asset/ResourceManager"; import { Event, EventDispatcher, Logger, Time } from "./base"; import { Canvas } from "./Canvas"; From c2945fb560f82c7016fee6b51b7ddd3e2ff44ab9 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 24 Mar 2022 10:42:13 +0800 Subject: [PATCH 69/91] feat(text): opt property name for Font --- packages/core/src/2d/text/Font.ts | 14 +++++++------- packages/core/src/2d/text/TextRenderer.ts | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/core/src/2d/text/Font.ts b/packages/core/src/2d/text/Font.ts index 329815adc6..301ec5dc35 100644 --- a/packages/core/src/2d/text/Font.ts +++ b/packages/core/src/2d/text/Font.ts @@ -6,21 +6,21 @@ import { UpdateFlagManager } from "../../UpdateFlagManager"; export class Font extends RefObject { @assignmentClone - private _fontName: string = "Arial"; + private _name: string = "Arial"; private _updateFlagManager: UpdateFlagManager = new UpdateFlagManager(); /** * The font name of the TextRenderer. */ - get fontName(): string { - return this._fontName; + get name(): string { + return this._name; } - set fontName(value: string) { + set name(value: string) { value = value || "Arial"; - if (this._fontName !== value) { - this._fontName = value; + if (this._name !== value) { + this._name = value; this._updateFlagManager.distribute(); } } @@ -32,7 +32,7 @@ export class Font extends RefObject { */ constructor(engine: Engine, name: string = "") { super(engine); - this._fontName = name || "Arial"; + this._name = name || "Arial"; } /** diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 0058dd1762..181e3cef36 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -377,7 +377,7 @@ export class TextRenderer extends Renderer { if (style & FontStyle.Italic) { str += "italic "; } - str += `${this.fontSize}px ${this._font.fontName}`; + str += `${this.fontSize}px ${this._font.name}`; return str; } From 33fc8ebc98e9198bd237436a79ab8ee3327f9899 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 24 Mar 2022 10:48:02 +0800 Subject: [PATCH 70/91] feat(text): opt recommend --- packages/core/src/2d/text/Font.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/src/2d/text/Font.ts b/packages/core/src/2d/text/Font.ts index 301ec5dc35..8e9fbcd3b2 100644 --- a/packages/core/src/2d/text/Font.ts +++ b/packages/core/src/2d/text/Font.ts @@ -11,7 +11,7 @@ export class Font extends RefObject { private _updateFlagManager: UpdateFlagManager = new UpdateFlagManager(); /** - * The font name of the TextRenderer. + * The name of the font. */ get name(): string { return this._name; @@ -26,9 +26,9 @@ export class Font extends RefObject { } /** - * Create a material instance. + * Create a font instance. * @param engine - Engine to which the material belongs - * @param shader - Shader used by the material + * @param name - The name of font */ constructor(engine: Engine, name: string = "") { super(engine); From 423a22bfb729a37769086db432b437b4bbe884b3 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 24 Mar 2022 10:52:27 +0800 Subject: [PATCH 71/91] feat(text): opt comment --- packages/core/src/2d/text/Font.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/core/src/2d/text/Font.ts b/packages/core/src/2d/text/Font.ts index 8e9fbcd3b2..9a49d15cb2 100644 --- a/packages/core/src/2d/text/Font.ts +++ b/packages/core/src/2d/text/Font.ts @@ -4,6 +4,9 @@ import { Engine } from "../../Engine"; import { UpdateFlag } from "../../UpdateFlag"; import { UpdateFlagManager } from "../../UpdateFlagManager"; +/** + * Font. + */ export class Font extends RefObject { @assignmentClone private _name: string = "Arial"; @@ -27,7 +30,7 @@ export class Font extends RefObject { /** * Create a font instance. - * @param engine - Engine to which the material belongs + * @param engine - Engine to which the font belongs * @param name - The name of font */ constructor(engine: Engine, name: string = "") { From 5b871c22d47f2c58689e4739dd96a42d25267e9e Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 24 Mar 2022 13:57:42 +0800 Subject: [PATCH 72/91] feat(text): opt dynamic atlas for text --- .../src/2d/dynamic-atlas/DynamicTextAtlas.ts | 63 ++++--------------- .../dynamic-atlas/DynamicTextAtlasManager.ts | 46 ++++++++++---- packages/core/src/2d/text/TextRenderer.ts | 9 +-- 3 files changed, 46 insertions(+), 72 deletions(-) diff --git a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts index 4cfb528e4f..d627d2e40f 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts @@ -18,7 +18,7 @@ export class DynamicTextAtlas { private _curY: number = 1; private _nextY: number = 1; - private _originInfos: Record = {}; + private _sprites: Record = {}; constructor(engine: Engine, width: number, height: number) { this._width = width; @@ -31,14 +31,7 @@ export class DynamicTextAtlas { * Destroy atlas, it will release the texture. */ public destroy() { - const { _originInfos } = this; - for (let id in _originInfos) { - const info = _originInfos[id]; - const originSprite = info.sprite; - originSprite.texture = info.texture; - originSprite.atlasRegion = info.atlasRegion; - delete _originInfos[id]; - } + this._sprites = {}; this._texture.destroy(true); } @@ -74,23 +67,8 @@ export class DynamicTextAtlas { const region = DynamicTextAtlas._region; region.setValue(this._curX / _width, this._curY / _height, width / _width, height / _height); - // Cache origin texture. - const originTexture = sprite.texture; - const id = sprite.instanceId; - const { _originInfos } = this; - const originInfo = _originInfos[id]; - if (originInfo) { - originInfo.sprite = sprite; - originInfo.texture = originTexture; - originInfo.atlasRegion = sprite.atlasRegion.clone(); - } else { - _originInfos[id] = { - sprite: sprite, - texture: originTexture, - atlasRegion: sprite.atlasRegion.clone() - }; - } - + // destroy origin texture. + sprite.texture.destroy(); // Update atlas texture. sprite.atlasRegion = region; sprite.texture = texture; @@ -102,35 +80,16 @@ export class DynamicTextAtlas { /** * Remove a sprite. * @param sprite - the sprite to remove + * @returns true if remove sprite success, otherwise false */ - public removeSprite(sprite: Sprite) { + public removeSprite(sprite: Sprite): boolean { const id = sprite.instanceId; - const { _originInfos } = this; - const info = _originInfos[id]; - if (info) { - const texture = info.texture; - texture.destroy(); + const { _sprites } = this; + if (_sprites[id]) { + delete _sprites[id]; + return true; } - delete _originInfos[id]; + return false; } - - /** - * The origin texture before batch for the sprite. - * @param id - the id of the sprite - * @returns the origin texture before batch if have, otherwise null - */ - public getOriginTextureById(id: number): Texture2D | null { - const info = this._originInfos[id]; - if (info) { - return info.texture; - } - return null; - } -} - -interface OriginInfo { - sprite: Sprite; - texture: Texture2D; - atlasRegion: Rect; } diff --git a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts index 910b1ae517..1fadd77896 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts @@ -11,6 +11,7 @@ export class DynamicTextAtlasManager { private _textureSize: number = 1024; private _atlases: Array = []; private _atlasIndex: number = -1; + private _spritesInAtlasIndex: Record = {}; /** * Indicates how many atlases should be created. @@ -43,45 +44,63 @@ export class DynamicTextAtlasManager { * Add a sprite to atlas. * @param sprite - the sprite to add * @param imageSource - The source of texture - * @returns the origin texture before batch if have, otherwise null + * @returns true if add sprite success, otherwise false */ - public addSprite(sprite: Sprite, imageSource: TexImageSource): Texture2D | null { + public addSprite(sprite: Sprite, imageSource: TexImageSource): boolean { if (this._atlasIndex >= this._maxAtlasCount) { - return null; + return false; } - let atlas = this._atlases[this._atlasIndex]; + // Remove sprite if the sprite has been add. + const { _spritesInAtlasIndex, _atlases } = this; + const id = sprite.instanceId; + const atlasIndex = _spritesInAtlasIndex[id]; + if (atlasIndex) { + _atlases[atlasIndex].removeSprite(sprite); + delete _spritesInAtlasIndex[id]; + } + + let atlas = _atlases[this._atlasIndex]; if (!atlas) { atlas = this._createAtlas(); } - const originTexture = atlas.getOriginTextureById(sprite.instanceId); if (atlas.addSprite(sprite, imageSource)) { - return originTexture || null; + _spritesInAtlasIndex[id] = this._atlasIndex; + return true; } if (this._atlasIndex + 1 >= this._maxAtlasCount) { this._atlasIndex = this._maxAtlasCount; - return null; + return false; } atlas = this._createAtlas(); - atlas.addSprite(sprite, imageSource); - return null; + if (atlas.addSprite(sprite, imageSource)) { + _spritesInAtlasIndex[id] = this._atlasIndex; + return true; + } + return false; } /** * Remove a sprite from atlas. * @param sprite - the sprite to remove + * @returns true if remove sprite success, otherwise false */ - public removeSprite(sprite: Sprite) { - if (!sprite) return ; + public removeSprite(sprite: Sprite): boolean { + if (!sprite) return false; const { _atlases } = this; - for (let i = 0, l = _atlases.length; i < l; ++i) { + for (let i = _atlases.length - 1; i >= 0; --i) { const atlas = _atlases[i]; - atlas.removeSprite(sprite); + if(atlas.removeSprite(sprite)) { + delete this._spritesInAtlasIndex[i]; + return true; + } } + + return false; } /** @@ -95,6 +114,7 @@ export class DynamicTextAtlasManager { _atlases.length = 0; this._atlasIndex = -1; + this._spritesInAtlasIndex = {}; } private _createAtlas(): DynamicTextAtlas { diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 181e3cef36..9feddbc646 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -517,13 +517,8 @@ export class TextRenderer extends Renderer { const { _sprite } = this; // Remove sprite from dynamic atlas. this.engine._dynamicTextAtlasManager.removeSprite(_sprite); - // Destroy current texture. - const texture = _sprite.texture; - _sprite.texture = null; - if (texture) { - this.shaderData.setTexture(TextRenderer._textureProperty, null); - texture.destroy(); - } + this.shaderData.setTexture(TextRenderer._textureProperty, null); + _sprite.atlasRegion = _sprite.region; } } From f4c66c77e22209233a59b4b9c7ed66f27a9def23 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 24 Mar 2022 14:06:13 +0800 Subject: [PATCH 73/91] feat(text): delete invalid import --- packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts index 1fadd77896..7f14ecad04 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts @@ -1,7 +1,6 @@ import { Sprite } from "../sprite/Sprite"; import { Engine } from "../../Engine"; import { DynamicTextAtlas } from "./DynamicTextAtlas"; -import { Texture2D } from "../../texture/Texture2D"; /** * Dynamic atlas manager for text. From 0483562df9a4ac7f38c5a82400d80fae55f4f497 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 24 Mar 2022 16:46:23 +0800 Subject: [PATCH 74/91] feat(text): opt code --- packages/core/src/2d/text/Font.ts | 3 -- packages/core/src/2d/text/TextRenderer.ts | 39 ++++++++++------------- packages/core/src/2d/text/TextUtils.ts | 24 +++++++------- 3 files changed, 29 insertions(+), 37 deletions(-) diff --git a/packages/core/src/2d/text/Font.ts b/packages/core/src/2d/text/Font.ts index 9a49d15cb2..facf21e7e4 100644 --- a/packages/core/src/2d/text/Font.ts +++ b/packages/core/src/2d/text/Font.ts @@ -1,5 +1,4 @@ import { RefObject } from "../../asset/RefObject" -import { assignmentClone } from "../../clone/CloneManager"; import { Engine } from "../../Engine"; import { UpdateFlag } from "../../UpdateFlag"; import { UpdateFlagManager } from "../../UpdateFlagManager"; @@ -8,9 +7,7 @@ import { UpdateFlagManager } from "../../UpdateFlagManager"; * Font. */ export class Font extends RefObject { - @assignmentClone private _name: string = "Arial"; - private _updateFlagManager: UpdateFlagManager = new UpdateFlagManager(); /** diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 9feddbc646..9da2bad8cb 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -120,7 +120,7 @@ export class TextRenderer extends Renderer { } /** - * The font name of the TextRenderer. + * The font of the Text. */ get font(): Font { return this._font; @@ -329,6 +329,13 @@ export class TextRenderer extends Renderer { super._onDestroy(); } + /** + * @internal + */ + _cloneTo(target: TextRenderer): void { + target.font = this._font; + } + /** * @override */ @@ -361,30 +368,18 @@ export class TextRenderer extends Renderer { this._dirtyFlag &= ~type; } - /** - * @internal - */ - _cloneTo(target: TextRenderer): void { - target.font = this._font; - } - - private _getFontString() { + private _getNativeFontString(): string { const { _fontStyle: style } = this; - let str = ""; - if (style & FontStyle.Bold) { - str += "bold "; - } - if (style & FontStyle.Italic) { - str += "italic "; - } + let str = style & FontStyle.Bold ? "bold" : ""; + style & FontStyle.Italic && (str += "italic "); str += `${this.fontSize}px ${this._font.name}`; return str; } - private _updateText() { + private _updateText(): void { const textContext = TextUtils.textContext(); const { canvas, context } = textContext; - const fontStr = this._getFontString(); + const fontStr = this._getNativeFontString(); const textMetrics = TextUtils.measureText(textContext, this, fontStr); const { width, height } = textMetrics; if (width === 0 || height === 0) { @@ -418,7 +413,7 @@ export class TextRenderer extends Renderer { this._updateTexture(); } - private _updateTexture() { + private _updateTexture(): void { const textContext = TextUtils.textContext(); const { canvas, context } = textContext; const trimData = TextUtils.trimCanvas(textContext); @@ -450,7 +445,7 @@ export class TextRenderer extends Renderer { index: number, length: number, out: Vector2 - ) { + ): void { switch (this._verticalAlignment) { case TextVerticalAlignment.Top: out.y = index * lineHeight; @@ -500,7 +495,7 @@ export class TextRenderer extends Renderer { } } - private _updatePosition() { + private _updatePosition(): void { const localPositions = this._sprite._positions; const localVertexPos = TextRenderer._tempVec3; const worldMatrix = this.entity.transform.worldMatrix; @@ -513,7 +508,7 @@ export class TextRenderer extends Renderer { } } - private _clearTexture() { + private _clearTexture(): void { const { _sprite } = this; // Remove sprite from dynamic atlas. this.engine._dynamicTextAtlasManager.removeSprite(_sprite); diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 04f173ed0e..3e507d3d3a 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -26,14 +26,14 @@ export interface TextMetrics { * TextUtils includes some helper function for text. */ export class TextUtils { - private static _testString = "qpjÉÅ"; - private static _testBaseline = "M"; - private static _heightMultiplier = 2; - private static _baselineMultiplier = 1.4; - private static _maxWidth = 2048; - private static _maxHeight = 2048; - private static _pixelsPerUnit = 128; - private static _fontSizes: { [font: string]: number } = {}; + private static _testString: string = "qpjÉÅ"; + private static _testBaseline: string = "M"; + private static _heightMultiplier: number = 2; + private static _baselineMultiplier: number = 1.4; + private static _maxWidth: number = 2048; + private static _maxHeight: number = 2048; + private static _pixelsPerUnit: number = 128; + private static _fontSizeCache: Record = {}; private static _textContext: TextContext = null; /** @@ -59,9 +59,9 @@ export class TextUtils { * @returns the font size */ public static measureFont(textContext: TextContext, font: string): number { - const { _fontSizes: fontSizes } = TextUtils; - if (fontSizes[font]) { - return fontSizes[font]; + const { _fontSizeCache: fontSizeCache } = TextUtils; + if (fontSizeCache[font]) { + return fontSizeCache[font]; } const { canvas, context } = textContext; @@ -119,7 +119,7 @@ export class TextUtils { const descent = i - baseline + 1; const fontSize = ascent + descent; - TextUtils._fontSizes[font] = fontSize; + TextUtils._fontSizeCache[font] = fontSize; return fontSize; } From 9fc8888b3d5d73bf555c8873d0cafe48d098aed7 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 24 Mar 2022 17:14:07 +0800 Subject: [PATCH 75/91] feat(text): opt code --- packages/core/src/2d/text/TextUtils.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 3e507d3d3a..f253681b05 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -26,7 +26,8 @@ export interface TextMetrics { * TextUtils includes some helper function for text. */ export class TextUtils { - private static _testString: string = "qpjÉÅ"; + /** These characters are all tall to help calculate the height required for text. */ + private static _testString: string = "|ÉqÅ"; private static _testBaseline: string = "M"; private static _heightMultiplier: number = 2; private static _baselineMultiplier: number = 1.4; @@ -70,7 +71,7 @@ export class TextUtils { const width = Math.ceil(context.measureText(testStr).width); let baseline = Math.ceil(context.measureText(TextUtils._testBaseline).width); const height = baseline * TextUtils._heightMultiplier; - baseline = Math.floor(TextUtils._baselineMultiplier * baseline); + baseline = TextUtils._baselineMultiplier * baseline | 0; canvas.width = width; canvas.height = height; From 3669896acb6e340c507c1dd7eb8c526a03d7bb31 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 24 Mar 2022 19:36:16 +0800 Subject: [PATCH 76/91] feat(text): add generic font families --- packages/core/src/2d/text/TextRenderer.ts | 7 ++++++- packages/core/src/2d/text/TextUtils.ts | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 9da2bad8cb..e0b8d83b21 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -372,7 +372,12 @@ export class TextRenderer extends Renderer { const { _fontStyle: style } = this; let str = style & FontStyle.Bold ? "bold" : ""; style & FontStyle.Italic && (str += "italic "); - str += `${this.fontSize}px ${this._font.name}`; + // Check if font already contains strings + let fontFamily = this._font.name; + if (!(/([\"\'])[^\'\"]+\1/).test(fontFamily) && TextUtils._genericFontFamilies.indexOf(fontFamily) == -1) { + fontFamily = `"${fontFamily}"`; + } + str += `${this.fontSize}px ${fontFamily}`; return str; } diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index f253681b05..2ef05a688f 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -26,6 +26,18 @@ export interface TextMetrics { * TextUtils includes some helper function for text. */ export class TextUtils { + /** @internal */ + static _genericFontFamilies: Array = [ + "serif", + "sans-serif", + "monospace", + "cursive", + "fantasy", + "system-ui", + "math", + "emoji", + "fangsong" + ]; /** These characters are all tall to help calculate the height required for text. */ private static _testString: string = "|ÉqÅ"; private static _testBaseline: string = "M"; From f2f839f3922d2650ffbfef027ba8ec2dc11816a5 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 24 Mar 2022 20:20:36 +0800 Subject: [PATCH 77/91] feat(text): remove TextRenderer from TextUtils --- packages/core/src/2d/text/TextRenderer.ts | 21 +++++- packages/core/src/2d/text/TextUtils.ts | 91 ++++++++++++----------- 2 files changed, 64 insertions(+), 48 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index e0b8d83b21..ce4b8944f7 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -370,11 +370,11 @@ export class TextRenderer extends Renderer { private _getNativeFontString(): string { const { _fontStyle: style } = this; - let str = style & FontStyle.Bold ? "bold" : ""; + let str = style & FontStyle.Bold ? "bold " : ""; style & FontStyle.Italic && (str += "italic "); // Check if font already contains strings let fontFamily = this._font.name; - if (!(/([\"\'])[^\'\"]+\1/).test(fontFamily) && TextUtils._genericFontFamilies.indexOf(fontFamily) == -1) { + if (!/([\"\'])[^\'\"]+\1/.test(fontFamily) && TextUtils._genericFontFamilies.indexOf(fontFamily) == -1) { fontFamily = `"${fontFamily}"`; } str += `${this.fontSize}px ${fontFamily}`; @@ -382,10 +382,25 @@ export class TextRenderer extends Renderer { } private _updateText(): void { + const { width: originWidth, height: originHeight, enableWrapping, overflowMode } = this; + if ((enableWrapping && originWidth <= 0) || (overflowMode === OverflowMode.Truncate && originHeight <= 0)) { + this._clearTexture(); + return; + } + const textContext = TextUtils.textContext(); const { canvas, context } = textContext; const fontStr = this._getNativeFontString(); - const textMetrics = TextUtils.measureText(textContext, this, fontStr); + const textMetrics = TextUtils.measureText( + textContext, + this.text, + originWidth, + originHeight, + this.lineSpacing, + enableWrapping, + overflowMode, + fontStr + ); const { width, height } = textMetrics; if (width === 0 || height === 0) { this._clearTexture(); diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 2ef05a688f..c02770245d 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -1,5 +1,4 @@ import { OverflowMode } from "../enums/TextOverflow"; -import { TextRenderer } from "./TextRenderer"; /** * TextContext. @@ -73,8 +72,9 @@ export class TextUtils { */ public static measureFont(textContext: TextContext, font: string): number { const { _fontSizeCache: fontSizeCache } = TextUtils; - if (fontSizeCache[font]) { - return fontSizeCache[font]; + let fontSize = fontSizeCache[font]; + if (fontSize) { + return fontSize; } const { canvas, context } = textContext; @@ -83,7 +83,7 @@ export class TextUtils { const width = Math.ceil(context.measureText(testStr).width); let baseline = Math.ceil(context.measureText(TextUtils._testBaseline).width); const height = baseline * TextUtils._heightMultiplier; - baseline = TextUtils._baselineMultiplier * baseline | 0; + baseline = (TextUtils._baselineMultiplier * baseline) | 0; canvas.width = width; canvas.height = height; @@ -131,39 +131,42 @@ export class TextUtils { } const descent = i - baseline + 1; - const fontSize = ascent + descent; - TextUtils._fontSizeCache[font] = fontSize; + fontSize = ascent + descent; + fontSizeCache[font] = fontSize; return fontSize; } /** * Measure the text. * @param textContext - text context includes 2d context and canvas - * @param textRenderer - the text renderer - * @param fontStr - the string of font + * @param text - rendering string + * @param originWidth - the width of the TextRenderer + * @param originHeight - the height of the TextRenderer + * @param lineSpacing - the space between two lines + * @param enableWrapping - whether wrap text to next line when exceeds the width of the container + * @param overflowMode - the overflow mode + * @param fontStr * @returns the TextMetrics object */ - public static measureText(textContext: TextContext, textRenderer: TextRenderer, fontStr: string): TextMetrics { + public static measureText( + textContext: TextContext, + text: string, + originWidth: number, + originHeight: number, + lineSpacing: number, + enableWrapping: boolean, + overflowMode: OverflowMode, + fontStr: string + ): TextMetrics { const { _pixelsPerUnit } = TextUtils; const fontSize = TextUtils.measureFont(textContext, fontStr); - const textMetrics: TextMetrics = { - width: 0, - height: 0, - lines: TextUtils._wordWrap(textRenderer, fontStr), - lineWidths: [], - maxLineWidth: 0, - lineHeight: fontSize + textRenderer.lineSpacing * _pixelsPerUnit, - fontSize - }; const { context } = textContext; - const { lines } = textMetrics; - const linesLen = lines.length; - if (linesLen === 0) { - return textMetrics; - } - context.font = fontStr; - const { lineWidths } = textMetrics; + const lines = TextUtils._wordWrap(text, originWidth, enableWrapping, fontStr); + const linesLen = lines.length; + const lineWidths = new Array(); + const lineHeight = fontSize + lineSpacing * _pixelsPerUnit; + // Calculate max width of all lines. let maxLineWidth = 0; for (let i = 0; i < linesLen; ++i) { const width = Math.ceil(context.measureText(lines[i]).width); @@ -172,17 +175,25 @@ export class TextUtils { } lineWidths.push(width); } - textMetrics.maxLineWidth = maxLineWidth; + maxLineWidth = maxLineWidth; - // reset width and height. - textMetrics.width = Math.min(maxLineWidth, TextUtils._maxWidth); - let height = textRenderer.height * _pixelsPerUnit; - if (textRenderer.overflowMode === OverflowMode.Overflow) { - height = Math.min(textMetrics.lineHeight * linesLen, TextUtils._maxHeight); + // Reset width and height. + const width = Math.min(maxLineWidth, TextUtils._maxWidth); + let height = originHeight * _pixelsPerUnit; + if (overflowMode === OverflowMode.Overflow) { + height = Math.min(lineHeight * linesLen, TextUtils._maxHeight); } - textMetrics.height = height; + height = height; - return textMetrics; + return { + width, + height, + lines, + lineWidths, + maxLineWidth, + lineHeight, + fontSize + }; } /** @@ -248,21 +259,11 @@ export class TextUtils { }; } - private static _wordWrap(textRenderer: TextRenderer, fontStr: string): Array { - const { width, height, enableWrapping, overflowMode } = textRenderer; - - if (enableWrapping && width <= 0) { - return []; - } - if (overflowMode === OverflowMode.Truncate && height <= 0) { - return []; - } - + private static _wordWrap(text: string, width: number, enableWrapping: boolean, fontStr: string): Array { const { context } = TextUtils.textContext(); const { _maxWidth: maxWidth } = TextUtils; - const { text } = textRenderer; const widthInPixel = width * TextUtils._pixelsPerUnit; - const output: Array = []; + const output = new Array(); context.font = fontStr; const textArr = text.split(/(?:\r\n|\r|\n)/); From 177db10d641043ec7328466a6515ff5601a2bf1d Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 25 Mar 2022 15:13:27 +0800 Subject: [PATCH 78/91] feat(text): opt code --- packages/core/src/2d/text/TextRenderer.ts | 9 +++---- packages/core/src/2d/text/TextUtils.ts | 32 +++++++++++++---------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index ce4b8944f7..f28a4e9e5d 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -388,11 +388,9 @@ export class TextRenderer extends Renderer { return; } - const textContext = TextUtils.textContext(); - const { canvas, context } = textContext; + const { canvas, context } = TextUtils.textContext(); const fontStr = this._getNativeFontString(); const textMetrics = TextUtils.measureText( - textContext, this.text, originWidth, originHeight, @@ -434,9 +432,8 @@ export class TextRenderer extends Renderer { } private _updateTexture(): void { - const textContext = TextUtils.textContext(); - const { canvas, context } = textContext; - const trimData = TextUtils.trimCanvas(textContext); + const { canvas, context } = TextUtils.textContext(); + const trimData = TextUtils.trimCanvas(); const { data } = trimData; if (!data) { this._clearTexture(); diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index c02770245d..709198636b 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -54,11 +54,17 @@ export class TextUtils { */ public static textContext(): TextContext { if (!TextUtils._textContext) { - const canvas = document.createElement("canvas"); - TextUtils._textContext = { - canvas: canvas, - context: canvas.getContext("2d") - }; + let canvas = new OffscreenCanvas(0, 0); + if (canvas) { + const context = canvas.getContext("2d"); + if (context && context.measureText) { + TextUtils._textContext = { canvas, context }; + return TextUtils._textContext; + } + } + + canvas = document.createElement("canvas"); + TextUtils._textContext = { canvas, context: canvas.getContext("2d") }; } return TextUtils._textContext; @@ -66,18 +72,17 @@ export class TextUtils { /** * Measure the font. - * @param textContext - text context includes 2d context and canvas * @param font - the string of the font * @returns the font size */ - public static measureFont(textContext: TextContext, font: string): number { + public static measureFont(font: string): number { const { _fontSizeCache: fontSizeCache } = TextUtils; let fontSize = fontSizeCache[font]; if (fontSize) { return fontSize; } - const { canvas, context } = textContext; + const { canvas, context } = TextUtils.textContext(); context.font = font; const testStr = TextUtils._testString; const width = Math.ceil(context.measureText(testStr).width); @@ -138,7 +143,6 @@ export class TextUtils { /** * Measure the text. - * @param textContext - text context includes 2d context and canvas * @param text - rendering string * @param originWidth - the width of the TextRenderer * @param originHeight - the height of the TextRenderer @@ -149,7 +153,6 @@ export class TextUtils { * @returns the TextMetrics object */ public static measureText( - textContext: TextContext, text: string, originWidth: number, originHeight: number, @@ -159,7 +162,8 @@ export class TextUtils { fontStr: string ): TextMetrics { const { _pixelsPerUnit } = TextUtils; - const fontSize = TextUtils.measureFont(textContext, fontStr); + const fontSize = TextUtils.measureFont(fontStr); + const textContext = TextUtils.textContext(); const { context } = textContext; context.font = fontStr; const lines = TextUtils._wordWrap(text, originWidth, enableWrapping, fontStr); @@ -198,13 +202,12 @@ export class TextUtils { /** * Trim canvas. - * @param textContext - text context includes gl context and canvas * @returns the width and height after trim, and the image data */ - public static trimCanvas(textContext: TextContext): { width: number; height: number; data?: ImageData } { + public static trimCanvas(): { width: number; height: number; data?: ImageData } { // https://gist.github.com/remy/784508 - const { canvas, context } = textContext; + const { canvas, context } = TextUtils.textContext(); let { width, height } = canvas; const imageData = context.getImageData(0, 0, width, height).data; @@ -307,3 +310,4 @@ export class TextUtils { return output; } } + From ee84f2090e48a5dd97e7e3c58b1f0bbe230cb5a4 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 25 Mar 2022 15:39:11 +0800 Subject: [PATCH 79/91] feat(text): opt code --- .../core/src/2d/dynamic-atlas/DynamicTextAtlas.ts | 2 +- .../src/2d/dynamic-atlas/DynamicTextAtlasManager.ts | 8 ++++---- packages/core/src/2d/text/TextRenderer.ts | 13 +++++++------ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts index d627d2e40f..0eaaeb5ebf 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts @@ -68,7 +68,7 @@ export class DynamicTextAtlas { region.setValue(this._curX / _width, this._curY / _height, width / _width, height / _height); // destroy origin texture. - sprite.texture.destroy(); + sprite.texture && sprite.texture.destroy(); // Update atlas texture. sprite.atlasRegion = region; sprite.texture = texture; diff --git a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts index 7f14ecad04..fe5bc3688f 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts @@ -46,10 +46,6 @@ export class DynamicTextAtlasManager { * @returns true if add sprite success, otherwise false */ public addSprite(sprite: Sprite, imageSource: TexImageSource): boolean { - if (this._atlasIndex >= this._maxAtlasCount) { - return false; - } - // Remove sprite if the sprite has been add. const { _spritesInAtlasIndex, _atlases } = this; const id = sprite.instanceId; @@ -59,6 +55,10 @@ export class DynamicTextAtlasManager { delete _spritesInAtlasIndex[id]; } + if (this._atlasIndex >= this._maxAtlasCount) { + return false; + } + let atlas = _atlases[this._atlasIndex]; if (!atlas) { atlas = this._createAtlas(); diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index f28a4e9e5d..c020d133b1 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -444,14 +444,15 @@ export class TextRenderer extends Renderer { canvas.width = width; canvas.height = height; context.putImageData(data, 0, 0); - const texture = new Texture2D(this.engine, width, height); - texture.setImageSource(canvas); - texture.generateMipmaps(); - this._clearTexture(); const { _sprite } = this; - _sprite.texture = texture; - this.engine._dynamicTextAtlasManager.addSprite(_sprite, canvas); + // If add fail, set texture for sprite. + if (!this.engine._dynamicTextAtlasManager.addSprite(_sprite, canvas)) { + const texture = new Texture2D(this.engine, width, height); + texture.setImageSource(canvas); + texture.generateMipmaps(); + _sprite.texture = texture; + } } private _calculateLinePosition( From d28476731c88e64c9b3a2a045ead2700d224281c Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 25 Mar 2022 17:08:35 +0800 Subject: [PATCH 80/91] feat(text): opt code --- packages/core/src/2d/text/TextRenderer.ts | 45 ++++++++--------------- 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index c020d133b1..6ac51b4bd6 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -271,40 +271,34 @@ export class TextRenderer extends Renderer { * @internal */ _render(camera: Camera): void { - if (this._text === "") { + if ( + this._text === "" || + (this.enableWrapping && this.width <= 0) || + (this.overflowMode === OverflowMode.Truncate && this.height <= 0) + ) { this._clearTexture(); return; } - const { _fontDirty } = this; - const isDirty = this._isContainDirtyFlag(DirtyFlag.Property) || _fontDirty.flag; - if (isDirty) { + const { _fontDirty: fontDirty, _sprite: sprite } = this; + const isTextureDirty = this._isContainDirtyFlag(DirtyFlag.Property) || fontDirty.flag; + if (isTextureDirty) { this._updateText(); - } - - const { _sprite: sprite } = this; - const { texture } = sprite; - if (!texture) { this._setDirtyFlagFalse(DirtyFlag.Property); - _fontDirty.flag = false; - return; + fontDirty.flag = false; } - // Update sprite data. - sprite._updateMesh(); - if (this._isWorldMatrixDirty.flag || isDirty) { + if (this._isWorldMatrixDirty.flag || isTextureDirty) { this._updatePosition(); this._isWorldMatrixDirty.flag = false; } - this._setDirtyFlagFalse(DirtyFlag.Property); - _fontDirty.flag = false; if (this._isContainDirtyFlag(DirtyFlag.MaskInteraction)) { this._updateStencilState(); this._setDirtyFlagFalse(DirtyFlag.MaskInteraction); } - this.shaderData.setTexture(TextRenderer._textureProperty, texture); + this.shaderData.setTexture(TextRenderer._textureProperty, sprite.texture); const spriteElementPool = this._engine._spriteElementPool; const spriteElement = spriteElementPool.getFromPool(); spriteElement.setValue( @@ -383,10 +377,6 @@ export class TextRenderer extends Renderer { private _updateText(): void { const { width: originWidth, height: originHeight, enableWrapping, overflowMode } = this; - if ((enableWrapping && originWidth <= 0) || (overflowMode === OverflowMode.Truncate && originHeight <= 0)) { - this._clearTexture(); - return; - } const { canvas, context } = TextUtils.textContext(); const fontStr = this._getNativeFontString(); @@ -400,11 +390,6 @@ export class TextRenderer extends Renderer { fontStr ); const { width, height } = textMetrics; - if (width === 0 || height === 0) { - this._clearTexture(); - return; - } - // reset canvas's width and height. canvas.width = width; canvas.height = height; @@ -445,14 +430,16 @@ export class TextRenderer extends Renderer { canvas.height = height; context.putImageData(data, 0, 0); this._clearTexture(); - const { _sprite } = this; + const { _sprite: sprite } = this; // If add fail, set texture for sprite. - if (!this.engine._dynamicTextAtlasManager.addSprite(_sprite, canvas)) { + if (!this.engine._dynamicTextAtlasManager.addSprite(sprite, canvas)) { const texture = new Texture2D(this.engine, width, height); texture.setImageSource(canvas); texture.generateMipmaps(); - _sprite.texture = texture; + sprite.texture = texture; } + // Update sprite data. + sprite._updateMesh(); } private _calculateLinePosition( From 8a1baf71af88e4780fe189115c5f7422e3688827 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 25 Mar 2022 18:41:44 +0800 Subject: [PATCH 81/91] feat(text): opt code --- package.json | 1 + packages/core/src/2d/text/TextRenderer.ts | 72 +------------ packages/core/src/2d/text/TextUtils.ts | 124 +++++++++++++++++++--- 3 files changed, 115 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index b258d61238..c530883295 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@rollup/plugin-node-resolve": "^11.0.1", "@rollup/plugin-replace": "^2.3.4", "@types/jest": "^26.0.20", + "@types/offscreencanvas": "^2019.6.4", "@typescript-eslint/eslint-plugin": "^4.12.0", "@typescript-eslint/parser": "^4.12.0", "babel-jest": "^26.6.3", diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 6ac51b4bd6..c515e28514 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -377,8 +377,6 @@ export class TextRenderer extends Renderer { private _updateText(): void { const { width: originWidth, height: originHeight, enableWrapping, overflowMode } = this; - - const { canvas, context } = TextUtils.textContext(); const fontStr = this._getNativeFontString(); const textMetrics = TextUtils.measureText( this.text, @@ -389,46 +387,14 @@ export class TextRenderer extends Renderer { overflowMode, fontStr ); - const { width, height } = textMetrics; - // reset canvas's width and height. - canvas.width = width; - canvas.height = height; - // clear canvas. - context.font = fontStr; - context.clearRect(0, 0, width, height); - // set canvas font info. - context.textBaseline = "top"; - context.fillStyle = "#fff"; - - // draw lines. - const { lines, lineHeight, lineWidths } = textMetrics; - for (let i = 0, l = lines.length; i < l; ++i) { - const lineWidth = lineWidths[i]; - const pos = TextRenderer._tempVec2; - this._calculateLinePosition(width, height, lineWidth, lineHeight, i, l, pos); - const { x, y } = pos; - if (y + lineHeight >= 0 && y < height) { - // +1, for chrome. - context.fillText(lines[i], x, y + 1); - } - } - + TextUtils.updateText(textMetrics, fontStr, this.horizontalAlignment, this.verticalAlignment); this._updateTexture(); } private _updateTexture(): void { - const { canvas, context } = TextUtils.textContext(); const trimData = TextUtils.trimCanvas(); - const { data } = trimData; - if (!data) { - this._clearTexture(); - return; - } - const { width, height } = trimData; - canvas.width = width; - canvas.height = height; - context.putImageData(data, 0, 0); + const canvas = TextUtils.updateCanvas(width, height, trimData.data); this._clearTexture(); const { _sprite: sprite } = this; // If add fail, set texture for sprite. @@ -442,40 +408,6 @@ export class TextRenderer extends Renderer { sprite._updateMesh(); } - private _calculateLinePosition( - width: number, - height: number, - lineWidth: number, - lineHeight: number, - index: number, - length: number, - out: Vector2 - ): void { - switch (this._verticalAlignment) { - case TextVerticalAlignment.Top: - out.y = index * lineHeight; - break; - case TextVerticalAlignment.Bottom: - out.y = height - (length - index) * lineHeight; - break; - default: - out.y = 0.5 * height - 0.5 * length * lineHeight + index * lineHeight; - break; - } - - switch (this._horizontalAlignment) { - case TextHorizontalAlignment.Left: - out.x = 0; - break; - case TextHorizontalAlignment.Right: - out.x = width - lineWidth; - break; - default: - out.x = (width - lineWidth) * 0.5; - break; - } - } - private _updateStencilState(): void { // Update stencil. const material = this.getInstanceMaterial(); diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 709198636b..1db4e241e5 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -1,11 +1,13 @@ +import { Vector2 } from "@oasis-engine/math"; +import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; import { OverflowMode } from "../enums/TextOverflow"; /** * TextContext. */ export interface TextContext { - canvas: HTMLCanvasElement; - context: CanvasRenderingContext2D; + canvas: HTMLCanvasElement | OffscreenCanvas; + context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D; } /** @@ -47,6 +49,7 @@ export class TextUtils { private static _pixelsPerUnit: number = 128; private static _fontSizeCache: Record = {}; private static _textContext: TextContext = null; + private static _tempVec2: Vector2 = new Vector2(); /** * The instance function to get an object includes 2d context and canvas. @@ -54,17 +57,17 @@ export class TextUtils { */ public static textContext(): TextContext { if (!TextUtils._textContext) { - let canvas = new OffscreenCanvas(0, 0); - if (canvas) { - const context = canvas.getContext("2d"); + const offscreenCanvas = new OffscreenCanvas(0, 0); + if (offscreenCanvas) { + const context = offscreenCanvas.getContext("2d"); if (context && context.measureText) { - TextUtils._textContext = { canvas, context }; + TextUtils._textContext = { canvas: offscreenCanvas, context }; return TextUtils._textContext; } } - canvas = document.createElement("canvas"); - TextUtils._textContext = { canvas, context: canvas.getContext("2d") }; + const canvas = document.createElement("canvas"); + TextUtils._textContext = { canvas, context: offscreenCanvas.getContext("2d") }; } return TextUtils._textContext; @@ -149,7 +152,7 @@ export class TextUtils { * @param lineSpacing - the space between two lines * @param enableWrapping - whether wrap text to next line when exceeds the width of the container * @param overflowMode - the overflow mode - * @param fontStr + * @param fontStr - the font string * @returns the TextMetrics object */ public static measureText( @@ -179,7 +182,6 @@ export class TextUtils { } lineWidths.push(width); } - maxLineWidth = maxLineWidth; // Reset width and height. const width = Math.min(maxLineWidth, TextUtils._maxWidth); @@ -187,7 +189,6 @@ export class TextUtils { if (overflowMode === OverflowMode.Overflow) { height = Math.min(lineHeight * linesLen, TextUtils._maxHeight); } - height = height; return { width, @@ -262,6 +263,70 @@ export class TextUtils { }; } + /** + * Update text. + * @param textMetrics - the text metrics object + * @param fontStr - the font string + * @param horizontalAlignment - the horizontal alignment + * @param verticalAlignment - the vertical alignment + */ + public static updateText( + textMetrics: TextMetrics, + fontStr: string, + horizontalAlignment: TextHorizontalAlignment, + verticalAlignment: TextVerticalAlignment + ): void { + const { canvas, context } = TextUtils.textContext(); + const { width, height } = textMetrics; + // reset canvas's width and height. + canvas.width = width; + canvas.height = height; + // clear canvas. + context.font = fontStr; + context.clearRect(0, 0, width, height); + // set canvas font info. + context.textBaseline = "top"; + context.fillStyle = "#fff"; + + // draw lines. + const { lines, lineHeight, lineWidths } = textMetrics; + for (let i = 0, l = lines.length; i < l; ++i) { + const lineWidth = lineWidths[i]; + const pos = TextUtils._tempVec2; + TextUtils._calculateLinePosition( + width, + height, + lineWidth, + lineHeight, + i, + l, + horizontalAlignment, + verticalAlignment, + pos + ); + const { x, y } = pos; + if (y + lineHeight >= 0 && y < height) { + // +1, for chrome. + context.fillText(lines[i], x, y + 1); + } + } + } + + /** + * Update canvas with the data. + * @param width - the new width of canvas + * @param height - the new height of canvas + * @param data - the new data of canvas + * @returns the canvas after update + */ + public static updateCanvas(width: number, height: number, data: ImageData): HTMLCanvasElement | OffscreenCanvas { + const { canvas, context } = TextUtils.textContext(); + canvas.width = width; + canvas.height = height; + context.putImageData(data, 0, 0); + return canvas; + } + private static _wordWrap(text: string, width: number, enableWrapping: boolean, fontStr: string): Array { const { context } = TextUtils.textContext(); const { _maxWidth: maxWidth } = TextUtils; @@ -309,5 +374,40 @@ export class TextUtils { return output; } -} + private static _calculateLinePosition( + width: number, + height: number, + lineWidth: number, + lineHeight: number, + index: number, + length: number, + horizontalAlignment: TextHorizontalAlignment, + verticalAlignment: TextVerticalAlignment, + out: Vector2 + ): void { + switch (verticalAlignment) { + case TextVerticalAlignment.Top: + out.y = index * lineHeight; + break; + case TextVerticalAlignment.Bottom: + out.y = height - (length - index) * lineHeight; + break; + default: + out.y = 0.5 * height - 0.5 * length * lineHeight + index * lineHeight; + break; + } + + switch (horizontalAlignment) { + case TextHorizontalAlignment.Left: + out.x = 0; + break; + case TextHorizontalAlignment.Right: + out.x = width - lineWidth; + break; + default: + out.x = (width - lineWidth) * 0.5; + break; + } + } +} From 33f89ab466c7cd93d928f8a4d2edaa5af20f3845 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Fri, 25 Mar 2022 18:54:17 +0800 Subject: [PATCH 82/91] feat(text): fix type error --- packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts | 2 +- packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts | 2 +- .../core/src/renderingHardwareInterface/IPlatformTexture2D.ts | 2 +- packages/core/src/texture/Texture2D.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts index 0eaaeb5ebf..2c89a13c37 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlas.ts @@ -41,7 +41,7 @@ export class DynamicTextAtlas { * @param imageSource - The source of texture * @returns true if add sprite success, otherwise false */ - public addSprite(sprite: Sprite, imageSource: TexImageSource): boolean { + public addSprite(sprite: Sprite, imageSource: TexImageSource | OffscreenCanvas): boolean { const { _space: space, _texture: texture } = this; const { width, height } = imageSource; diff --git a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts index fe5bc3688f..0032ac87c1 100644 --- a/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts +++ b/packages/core/src/2d/dynamic-atlas/DynamicTextAtlasManager.ts @@ -45,7 +45,7 @@ export class DynamicTextAtlasManager { * @param imageSource - The source of texture * @returns true if add sprite success, otherwise false */ - public addSprite(sprite: Sprite, imageSource: TexImageSource): boolean { + public addSprite(sprite: Sprite, imageSource: TexImageSource | OffscreenCanvas): boolean { // Remove sprite if the sprite has been add. const { _spritesInAtlasIndex, _atlases } = this; const id = sprite.instanceId; diff --git a/packages/core/src/renderingHardwareInterface/IPlatformTexture2D.ts b/packages/core/src/renderingHardwareInterface/IPlatformTexture2D.ts index 5b1227283f..688af87a15 100644 --- a/packages/core/src/renderingHardwareInterface/IPlatformTexture2D.ts +++ b/packages/core/src/renderingHardwareInterface/IPlatformTexture2D.ts @@ -33,7 +33,7 @@ export interface IPlatformTexture2D extends IPlatformTexture { * @param y - Y coordinate of area start */ setImageSource( - imageSource: TexImageSource, + imageSource: TexImageSource | OffscreenCanvas, mipLevel?: number, flipY?: boolean, premultiplyAlpha?: boolean, diff --git a/packages/core/src/texture/Texture2D.ts b/packages/core/src/texture/Texture2D.ts index 0057e5a028..50386aafce 100644 --- a/packages/core/src/texture/Texture2D.ts +++ b/packages/core/src/texture/Texture2D.ts @@ -77,7 +77,7 @@ export class Texture2D extends Texture { * @param y - Y coordinate of area start */ setImageSource( - imageSource: TexImageSource, + imageSource: TexImageSource | OffscreenCanvas, mipLevel: number = 0, flipY: boolean = false, premultiplyAlpha: boolean = false, From b3cbdd42376ff2833c6676a8b0bc79fbc8c4364e Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 28 Mar 2022 11:41:25 +0800 Subject: [PATCH 83/91] feat(text): opt code for Font --- packages/core/src/2d/text/Font.ts | 37 +++++++++++------------ packages/core/src/2d/text/TextRenderer.ts | 18 +++-------- 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/packages/core/src/2d/text/Font.ts b/packages/core/src/2d/text/Font.ts index facf21e7e4..237ef867b5 100644 --- a/packages/core/src/2d/text/Font.ts +++ b/packages/core/src/2d/text/Font.ts @@ -1,47 +1,44 @@ import { RefObject } from "../../asset/RefObject" import { Engine } from "../../Engine"; -import { UpdateFlag } from "../../UpdateFlag"; -import { UpdateFlagManager } from "../../UpdateFlagManager"; /** * Font. */ export class Font extends RefObject { + private static _fontMap: Record = {}; + + /** + * Create a font. + * @param engine - Engine to which the font belongs + * @param fontName - The name of font. + */ + static create(engine: Engine, fontName: string = "Arial"): Font{ + const fontMap = Font._fontMap; + if (fontMap[fontName]) { + return fontMap[fontName]; + } + return (fontMap[fontName] = new Font(engine, fontName)); + } + private _name: string = "Arial"; - private _updateFlagManager: UpdateFlagManager = new UpdateFlagManager(); /** - * The name of the font. + * The name of the font object. */ get name(): string { return this._name; } - set name(value: string) { - value = value || "Arial"; - if (this._name !== value) { - this._name = value; - this._updateFlagManager.distribute(); - } - } - /** * Create a font instance. * @param engine - Engine to which the font belongs * @param name - The name of font */ - constructor(engine: Engine, name: string = "") { + private constructor(engine: Engine, name: string = "") { super(engine); this._name = name || "Arial"; } - /** - * @internal - */ - _registerUpdateFlag(): UpdateFlag { - return this._updateFlagManager.register(); - } - /** * @override */ diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index c515e28514..40644a3aaa 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -1,4 +1,4 @@ -import { BoundingBox, Color, Vector2, Vector3 } from "@oasis-engine/math"; +import { BoundingBox, Color, Vector3 } from "@oasis-engine/math"; import { Sprite, SpriteMaskInteraction, SpriteMaskLayer } from ".."; import { CompareFunction, Renderer, Shader, UpdateFlag } from "../.."; import { Camera } from "../../Camera"; @@ -14,7 +14,6 @@ import { TextUtils } from "./TextUtils"; export class TextRenderer extends Renderer { private static _textureProperty: ShaderProperty = Shader.getPropertyByName("u_spriteTexture"); - private static _tempVec2: Vector2 = new Vector2(); private static _tempVec3: Vector3 = new Vector3(); /** @internal temp solution. */ @@ -55,8 +54,6 @@ export class TextRenderer extends Renderer { @ignoreClone private _dirtyFlag: number = DirtyFlag.Property; @ignoreClone - private _fontDirty: UpdateFlag; - @ignoreClone private _isWorldMatrixDirty: UpdateFlag; @assignmentClone private _maskInteraction: SpriteMaskInteraction = SpriteMaskInteraction.None; @@ -128,11 +125,8 @@ export class TextRenderer extends Renderer { set font(value: Font) { if (this._font !== value) { - this._fontDirty && this._fontDirty.destroy(); this._font = value; - if (value) { - this._fontDirty = value._registerUpdateFlag(); - } + this._setDirtyFlagTrue(DirtyFlag.Property); } } @@ -263,7 +257,7 @@ export class TextRenderer extends Renderer { super(entity); this._isWorldMatrixDirty = entity.transform.registerWorldChangeFlag(); this._sprite = new Sprite(this.engine); - this.font = new Font(entity.engine); + this.font = Font.create(entity.engine); this.setMaterial(this._engine._spriteDefaultMaterial); } @@ -280,12 +274,11 @@ export class TextRenderer extends Renderer { return; } - const { _fontDirty: fontDirty, _sprite: sprite } = this; - const isTextureDirty = this._isContainDirtyFlag(DirtyFlag.Property) || fontDirty.flag; + const { _sprite: sprite } = this; + const isTextureDirty = this._isContainDirtyFlag(DirtyFlag.Property); if (isTextureDirty) { this._updateText(); this._setDirtyFlagFalse(DirtyFlag.Property); - fontDirty.flag = false; } if (this._isWorldMatrixDirty.flag || isTextureDirty) { @@ -319,7 +312,6 @@ export class TextRenderer extends Renderer { _onDestroy(): void { this.engine._dynamicTextAtlasManager.removeSprite(this._sprite); this._isWorldMatrixDirty.destroy(); - this._fontDirty && this._fontDirty.destroy(); super._onDestroy(); } From 10f548d99d7d293bd17a54a2ac9636be239d023c Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 28 Mar 2022 14:43:52 +0800 Subject: [PATCH 84/91] feat(text): opt code for create font --- packages/core/src/2d/text/Font.ts | 8 ++++---- packages/core/src/2d/text/TextRenderer.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/core/src/2d/text/Font.ts b/packages/core/src/2d/text/Font.ts index 237ef867b5..e76b3cdbe1 100644 --- a/packages/core/src/2d/text/Font.ts +++ b/packages/core/src/2d/text/Font.ts @@ -8,11 +8,11 @@ export class Font extends RefObject { private static _fontMap: Record = {}; /** - * Create a font. + * Create a font from OS. * @param engine - Engine to which the font belongs * @param fontName - The name of font. */ - static create(engine: Engine, fontName: string = "Arial"): Font{ + static createFromOS(engine: Engine, fontName: string = ""): Font{ const fontMap = Font._fontMap; if (fontMap[fontName]) { return fontMap[fontName]; @@ -20,7 +20,7 @@ export class Font extends RefObject { return (fontMap[fontName] = new Font(engine, fontName)); } - private _name: string = "Arial"; + private _name: string = ""; /** * The name of the font object. @@ -36,7 +36,7 @@ export class Font extends RefObject { */ private constructor(engine: Engine, name: string = "") { super(engine); - this._name = name || "Arial"; + this._name = name; } /** diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 40644a3aaa..bec86cefc8 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -257,7 +257,7 @@ export class TextRenderer extends Renderer { super(entity); this._isWorldMatrixDirty = entity.transform.registerWorldChangeFlag(); this._sprite = new Sprite(this.engine); - this.font = Font.create(entity.engine); + this.font = Font.createFromOS(entity.engine); this.setMaterial(this._engine._spriteDefaultMaterial); } From 4f5bd7dc6cb8d518f2675cf5a160ee4243458ff9 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 28 Mar 2022 14:56:17 +0800 Subject: [PATCH 85/91] feat(text): opt code --- packages/core/src/2d/text/Font.ts | 3 ++- packages/core/src/2d/text/TextRenderer.ts | 3 +++ packages/core/src/2d/text/TextUtils.ts | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/core/src/2d/text/Font.ts b/packages/core/src/2d/text/Font.ts index e76b3cdbe1..76fcb0f8e0 100644 --- a/packages/core/src/2d/text/Font.ts +++ b/packages/core/src/2d/text/Font.ts @@ -10,7 +10,8 @@ export class Font extends RefObject { /** * Create a font from OS. * @param engine - Engine to which the font belongs - * @param fontName - The name of font. + * @param fontName - The name of font + * @returns The font object has been create */ static createFromOS(engine: Engine, fontName: string = ""): Font{ const fontMap = Font._fontMap; diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index bec86cefc8..519ff0ae75 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -12,6 +12,9 @@ import { OverflowMode } from "../enums/TextOverflow"; import { Font } from "./Font"; import { TextUtils } from "./TextUtils"; +/** + * Renders a text for 2D graphics. + */ export class TextRenderer extends Renderer { private static _textureProperty: ShaderProperty = Shader.getPropertyByName("u_spriteTexture"); private static _tempVec3: Vector3 = new Vector3(); diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 1db4e241e5..88204e5971 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -3,6 +3,7 @@ import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAli import { OverflowMode } from "../enums/TextOverflow"; /** + * @internal * TextContext. */ export interface TextContext { @@ -11,6 +12,7 @@ export interface TextContext { } /** + * @internal * TextMetrics. */ export interface TextMetrics { @@ -24,10 +26,10 @@ export interface TextMetrics { } /** + * @internal * TextUtils includes some helper function for text. */ export class TextUtils { - /** @internal */ static _genericFontFamilies: Array = [ "serif", "sans-serif", From 197f3f2967b3cb3e0a13320dff437c4bc85eb5ae Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 28 Mar 2022 16:02:20 +0800 Subject: [PATCH 86/91] feat(text): opt code --- packages/core/src/2d/text/Font.ts | 19 ++++----- packages/core/src/2d/text/TextRenderer.ts | 15 +------ packages/core/src/2d/text/TextUtils.ts | 49 +++++++++++++++-------- 3 files changed, 42 insertions(+), 41 deletions(-) diff --git a/packages/core/src/2d/text/Font.ts b/packages/core/src/2d/text/Font.ts index 76fcb0f8e0..f56e36b27a 100644 --- a/packages/core/src/2d/text/Font.ts +++ b/packages/core/src/2d/text/Font.ts @@ -1,4 +1,4 @@ -import { RefObject } from "../../asset/RefObject" +import { RefObject } from "../../asset/RefObject"; import { Engine } from "../../Engine"; /** @@ -13,12 +13,15 @@ export class Font extends RefObject { * @param fontName - The name of font * @returns The font object has been create */ - static createFromOS(engine: Engine, fontName: string = ""): Font{ + static createFromOS(engine: Engine, fontName: string = ""): Font { const fontMap = Font._fontMap; - if (fontMap[fontName]) { - return fontMap[fontName]; + let font = fontMap[fontName]; + if (font) { + return font; } - return (fontMap[fontName] = new Font(engine, fontName)); + font = new Font(engine, fontName); + fontMap[fontName] = font; + return font; } private _name: string = ""; @@ -30,11 +33,6 @@ export class Font extends RefObject { return this._name; } - /** - * Create a font instance. - * @param engine - Engine to which the font belongs - * @param name - The name of font - */ private constructor(engine: Engine, name: string = "") { super(engine); this._name = name; @@ -45,4 +43,3 @@ export class Font extends RefObject { */ protected _onDestroy(): void {} } - diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 519ff0ae75..0a99fe52dd 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -357,22 +357,9 @@ export class TextRenderer extends Renderer { this._dirtyFlag &= ~type; } - private _getNativeFontString(): string { - const { _fontStyle: style } = this; - let str = style & FontStyle.Bold ? "bold " : ""; - style & FontStyle.Italic && (str += "italic "); - // Check if font already contains strings - let fontFamily = this._font.name; - if (!/([\"\'])[^\'\"]+\1/.test(fontFamily) && TextUtils._genericFontFamilies.indexOf(fontFamily) == -1) { - fontFamily = `"${fontFamily}"`; - } - str += `${this.fontSize}px ${fontFamily}`; - return str; - } - private _updateText(): void { const { width: originWidth, height: originHeight, enableWrapping, overflowMode } = this; - const fontStr = this._getNativeFontString(); + const fontStr = TextUtils.getNativeFontString(this._font.name, this._fontSize, this._fontStyle); const textMetrics = TextUtils.measureText( this.text, originWidth, diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 88204e5971..e005969c6a 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -1,4 +1,5 @@ import { Vector2 } from "@oasis-engine/math"; +import { FontStyle } from "../enums/FontStyle"; import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment"; import { OverflowMode } from "../enums/TextOverflow"; @@ -58,21 +59,19 @@ export class TextUtils { * @returns the TextContext object */ public static textContext(): TextContext { - if (!TextUtils._textContext) { - const offscreenCanvas = new OffscreenCanvas(0, 0); - if (offscreenCanvas) { - const context = offscreenCanvas.getContext("2d"); - if (context && context.measureText) { - TextUtils._textContext = { canvas: offscreenCanvas, context }; - return TextUtils._textContext; - } + let { _textContext: textContext } = TextUtils; + if (!textContext) { + let canvas: HTMLCanvasElement | OffscreenCanvas; + try { + canvas = new OffscreenCanvas(0, 0); + } catch { + canvas = document.createElement("canvas"); } - - const canvas = document.createElement("canvas"); - TextUtils._textContext = { canvas, context: offscreenCanvas.getContext("2d") }; + const context = canvas.getContext("2d"); + textContext = { canvas, context }; + TextUtils._textContext = textContext; } - - return TextUtils._textContext; + return textContext; } /** @@ -265,6 +264,24 @@ export class TextUtils { }; } + /** + * Get native font string. + * @param fontName - The font name + * @param fontSize - The font size + * @param style - The font style + * @returns The native font string + */ + public static getNativeFontString(fontName: string, fontSize: number, style: FontStyle): string { + let str = style & FontStyle.Bold ? "bold " : ""; + style & FontStyle.Italic && (str += "italic "); + // Check if font already contains strings + if (!/([\"\'])[^\'\"]+\1/.test(fontName) && TextUtils._genericFontFamilies.indexOf(fontName) == -1) { + fontName = `"${fontName}"`; + } + str += `${fontSize}px ${fontName}`; + return str; + } + /** * Update text. * @param textMetrics - the text metrics object @@ -287,11 +304,12 @@ export class TextUtils { context.font = fontStr; context.clearRect(0, 0, width, height); // set canvas font info. - context.textBaseline = "top"; + context.textBaseline = "middle"; context.fillStyle = "#fff"; // draw lines. const { lines, lineHeight, lineWidths } = textMetrics; + const halfLineHeight = lineHeight * 0.5; for (let i = 0, l = lines.length; i < l; ++i) { const lineWidth = lineWidths[i]; const pos = TextUtils._tempVec2; @@ -308,8 +326,7 @@ export class TextUtils { ); const { x, y } = pos; if (y + lineHeight >= 0 && y < height) { - // +1, for chrome. - context.fillText(lines[i], x, y + 1); + context.fillText(lines[i], x, y + halfLineHeight); } } } From 67a127dbf8a74aa885cdffeeffaac537617c3006 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 28 Mar 2022 16:11:35 +0800 Subject: [PATCH 87/91] feat(text): opt code --- packages/core/src/2d/text/TextUtils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index e005969c6a..ec337597e3 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -237,11 +237,11 @@ export class TextUtils { left = x; } - if (right === null || x > right) { + if (right === -1 || x > right) { right = x; } - if (bottom === null || y > bottom) { + if (bottom === -1 || y > bottom) { bottom = y; } } From cc7edb25fa4258f18c1b53f49a41a665fef34c00 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 28 Mar 2022 16:20:45 +0800 Subject: [PATCH 88/91] feat(text): opt code --- packages/core/src/2d/text/TextUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index ec337597e3..ae324b7d7c 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -350,6 +350,7 @@ export class TextUtils { const { context } = TextUtils.textContext(); const { _maxWidth: maxWidth } = TextUtils; const widthInPixel = width * TextUtils._pixelsPerUnit; + const wrapWidth = Math.min(widthInPixel, maxWidth); const output = new Array(); context.font = fontStr; const textArr = text.split(/(?:\r\n|\r|\n)/); @@ -358,7 +359,6 @@ export class TextUtils { const curText = textArr[i]; const curWidth = Math.ceil(context.measureText(curText).width); const needWrap = enableWrapping || curWidth > maxWidth; - const wrapWidth = Math.min(widthInPixel, maxWidth); if (needWrap) { if (curWidth <= wrapWidth) { output.push(curText); From f8c22d489acbf0959c398aeadf567892b9832ef5 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 28 Mar 2022 18:05:57 +0800 Subject: [PATCH 89/91] feat(text): opt code --- packages/core/src/2d/text/TextUtils.ts | 120 ++++++++++++------------- 1 file changed, 57 insertions(+), 63 deletions(-) diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index ae324b7d7c..4d45de795f 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -21,9 +21,7 @@ export interface TextMetrics { height: number; lines: Array; lineWidths: Array; - maxLineWidth: number; lineHeight: number; - fontSize: number; } /** @@ -43,8 +41,8 @@ export class TextUtils { "fangsong" ]; /** These characters are all tall to help calculate the height required for text. */ - private static _testString: string = "|ÉqÅ"; - private static _testBaseline: string = "M"; + private static _measureString: string = "|ÉqÅ"; + private static _measureBaseline: string = "M"; private static _heightMultiplier: number = 2; private static _baselineMultiplier: number = 1.4; private static _maxWidth: number = 2048; @@ -63,7 +61,7 @@ export class TextUtils { if (!textContext) { let canvas: HTMLCanvasElement | OffscreenCanvas; try { - canvas = new OffscreenCanvas(0, 0); + canvas = new OffscreenCanvas(0, 0); } catch { canvas = document.createElement("canvas"); } @@ -88,9 +86,9 @@ export class TextUtils { const { canvas, context } = TextUtils.textContext(); context.font = font; - const testStr = TextUtils._testString; - const width = Math.ceil(context.measureText(testStr).width); - let baseline = Math.ceil(context.measureText(TextUtils._testBaseline).width); + const measureString = TextUtils._measureString; + const width = Math.ceil(context.measureText(measureString).width); + let baseline = Math.ceil(context.measureText(TextUtils._measureBaseline).width); const height = baseline * TextUtils._heightMultiplier; baseline = (TextUtils._baselineMultiplier * baseline) | 0; @@ -102,39 +100,39 @@ export class TextUtils { context.clearRect(0, 0, width, height); context.textBaseline = "alphabetic"; context.fillStyle = "#f00"; - context.fillText(testStr, 0, baseline); + context.fillText(measureString, 0, baseline); const imgData = context.getImageData(0, 0, width, height).data; const lineDataCount = width * 4; - let flag = false; + let stop = false; let i = 0; - let startIndex = 0; + let offset = 0; for (i = 0; i < baseline; ++i) { - startIndex = i * lineDataCount; + offset = i * lineDataCount; for (let j = 0; j < lineDataCount; j += 4) { - if (imgData[startIndex + j] !== 0) { - flag = true; + if (imgData[offset + j] !== 0) { + stop = true; break; } } - if (flag) { + if (stop) { break; } } const ascent = baseline - i; - flag = false; + stop = false; for (i = height - 1; i >= baseline; --i) { - startIndex = i * lineDataCount; + offset = i * lineDataCount; for (let j = 0; j < lineDataCount; j += 4) { - if (imgData[startIndex + j] !== 0) { - flag = true; + if (imgData[offset + j] !== 0) { + stop = true; break; } } - if (flag) { + if (stop) { break; } } @@ -153,7 +151,7 @@ export class TextUtils { * @param lineSpacing - the space between two lines * @param enableWrapping - whether wrap text to next line when exceeds the width of the container * @param overflowMode - the overflow mode - * @param fontStr - the font string + * @param fontString - the font string * @returns the TextMetrics object */ public static measureText( @@ -163,32 +161,30 @@ export class TextUtils { lineSpacing: number, enableWrapping: boolean, overflowMode: OverflowMode, - fontStr: string + fontString: string ): TextMetrics { const { _pixelsPerUnit } = TextUtils; - const fontSize = TextUtils.measureFont(fontStr); - const textContext = TextUtils.textContext(); - const { context } = textContext; - context.font = fontStr; - const lines = TextUtils._wordWrap(text, originWidth, enableWrapping, fontStr); - const linesLen = lines.length; + const fontSize = TextUtils.measureFont(fontString); + const context = TextUtils.textContext().context; + const lines = TextUtils._wordWrap(text, originWidth, enableWrapping, fontString); + const lineCount = lines.length; const lineWidths = new Array(); const lineHeight = fontSize + lineSpacing * _pixelsPerUnit; + context.font = fontString; // Calculate max width of all lines. - let maxLineWidth = 0; - for (let i = 0; i < linesLen; ++i) { - const width = Math.ceil(context.measureText(lines[i]).width); - if (width > maxLineWidth) { - maxLineWidth = width; + let width = 0; + for (let i = 0; i < lineCount; ++i) { + const lineWidth = Math.ceil(context.measureText(lines[i]).width); + if (lineWidth > width) { + width = lineWidth; } - lineWidths.push(width); + lineWidths.push(lineWidth); } // Reset width and height. - const width = Math.min(maxLineWidth, TextUtils._maxWidth); let height = originHeight * _pixelsPerUnit; if (overflowMode === OverflowMode.Overflow) { - height = Math.min(lineHeight * linesLen, TextUtils._maxHeight); + height = Math.min(lineHeight * lineCount, TextUtils._maxHeight); } return { @@ -196,9 +192,7 @@ export class TextUtils { height, lines, lineWidths, - maxLineWidth, - lineHeight, - fontSize + lineHeight }; } @@ -346,52 +340,52 @@ export class TextUtils { return canvas; } - private static _wordWrap(text: string, width: number, enableWrapping: boolean, fontStr: string): Array { + private static _wordWrap(text: string, width: number, enableWrapping: boolean, fontString: string): Array { const { context } = TextUtils.textContext(); const { _maxWidth: maxWidth } = TextUtils; const widthInPixel = width * TextUtils._pixelsPerUnit; const wrapWidth = Math.min(widthInPixel, maxWidth); - const output = new Array(); - context.font = fontStr; - const textArr = text.split(/(?:\r\n|\r|\n)/); - - for (let i = 0, l = textArr.length; i < l; ++i) { - const curText = textArr[i]; - const curWidth = Math.ceil(context.measureText(curText).width); - const needWrap = enableWrapping || curWidth > maxWidth; + const wrappedSubTexts = new Array(); + const subTexts = text.split(/(?:\r\n|\r|\n)/); + context.font = fontString; + + for (let i = 0, n = subTexts.length; i < n; ++i) { + const subText = subTexts[i]; + const subWidth = Math.ceil(context.measureText(subText).width); + const needWrap = enableWrapping || subWidth > maxWidth; if (needWrap) { - if (curWidth <= wrapWidth) { - output.push(curText); + if (subWidth <= wrapWidth) { + wrappedSubTexts.push(subText); } else { let chars = ""; let charsWidth = 0; - for (let j = 0, l = curText.length; j < l; ++j) { - const curChar = curText[j]; - const curCharWidth = Math.ceil(context.measureText(curChar).width); - if (charsWidth + curCharWidth > wrapWidth) { + for (let j = 0, m = subText.length; j < m; ++j) { + const char = subText[j]; + const charWidth = Math.ceil(context.measureText(char).width); + if (charsWidth + charWidth > wrapWidth) { // The width of text renderer is shorter than current char. if (charsWidth === 0) { - output.push(curChar); + wrappedSubTexts.push(char); } else { - output.push(chars); - chars = curChar; - charsWidth = curCharWidth; + wrappedSubTexts.push(chars); + chars = char; + charsWidth = charWidth; } } else { - chars += curChar; - charsWidth += curCharWidth; + chars += char; + charsWidth += charWidth; } } if (charsWidth > 0) { - output.push(chars); + wrappedSubTexts.push(chars); } } } else { - output.push(curText); + wrappedSubTexts.push(subText); } } - return output; + return wrappedSubTexts; } private static _calculateLinePosition( From 0aea6d092f2471a0535ddfdf10d09c29987aff1f Mon Sep 17 00:00:00 2001 From: singlecoder Date: Mon, 28 Mar 2022 18:55:48 +0800 Subject: [PATCH 90/91] feat(text): opt code --- packages/core/src/2d/text/TextRenderer.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/core/src/2d/text/TextRenderer.ts b/packages/core/src/2d/text/TextRenderer.ts index 0a99fe52dd..2a08e9da34 100644 --- a/packages/core/src/2d/text/TextRenderer.ts +++ b/packages/core/src/2d/text/TextRenderer.ts @@ -258,10 +258,11 @@ export class TextRenderer extends Renderer { constructor(entity: Entity) { super(entity); + const { engine } = this; this._isWorldMatrixDirty = entity.transform.registerWorldChangeFlag(); - this._sprite = new Sprite(this.engine); - this.font = Font.createFromOS(entity.engine); - this.setMaterial(this._engine._spriteDefaultMaterial); + this._sprite = new Sprite(engine); + this.font = Font.createFromOS(engine); + this.setMaterial(engine._spriteDefaultMaterial); } /** From fc4434c89b4ce7223af4d59678c50d66778d521f Mon Sep 17 00:00:00 2001 From: singlecoder Date: Tue, 29 Mar 2022 10:41:51 +0800 Subject: [PATCH 91/91] feat(text): opt code for trimCanvas --- packages/core/src/2d/text/TextUtils.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/src/2d/text/TextUtils.ts b/packages/core/src/2d/text/TextUtils.ts index 4d45de795f..a3592aea97 100644 --- a/packages/core/src/2d/text/TextUtils.ts +++ b/packages/core/src/2d/text/TextUtils.ts @@ -211,7 +211,7 @@ export class TextUtils { let top = -1; let bottom = -1; - let left = -1; + let left = width; let right = -1; let data = null; let x; @@ -227,15 +227,15 @@ export class TextUtils { top = y; } - if (left === -1 || x < left) { + if (x < left) { left = x; } - if (right === -1 || x > right) { + if (x > right) { right = x; } - if (bottom === -1 || y > bottom) { + if (y > bottom) { bottom = y; } }