Commit 959e376c authored by wangjianfeng.yz's avatar wangjianfeng.yz

2.0.69

parent 0033ceb1
/**
* @module annieUI
*/
namespace annieUI {
/**
* 滚动视图,有些时候你的内容超过了一屏,需要上下或者左右滑动来查看内容,这个时候,你就应该用它了
* @class annieUI.Scroller
* @public
* @extends annie.AObject
* @since 3.1.0
*/
export class Scroller extends annie.EventDispatcher {
//Event
/**
* annieUI.Scroller 组件滑动到开始位置事件
* @event annie.Event.ON_SCROLL_ING
* @since 3.1.0
*/
/**
* annieUI.Scroller 组件滑动到开始位置事件
* @event annie.Event.ON_SCROLL_TO_HEAD
* @since 3.1.5
*/
/**
* annieUI.Scroller 组件停止滑动事件
* @event annie.Event.ON_SCROLL_STOP
* @since 3.1.5
*/
/**
* annieUI.Scroller 组件开始滑动事件
* @event annie.Event.ON_SCROLL_START
* @since 3.1.5
*/
/**
* annieUI.Scroller 组件滑动到结束位置事件
* @event annie.Event.ON_SCROLL_TO_END
* @since 3.1.5
*/
protected _container: annie.DisplayObject;
/**
* 是否纵向滚动
* @property isScrollY
* @type {boolean}
* @public
* @since 3.1.5
* @default true;
*/
public isScrollY: boolean = true;
/**
* 是否横向滚动
* @property isScrollX
* @type {boolean}
* @since 3.1.5
* @public
* @default true;
*/
public isScrollX: boolean = true;
/**
* 是否松开鼠标后让其自由缓冲滑动
* @property isMomentum
* @type {boolean}
* @since 3.1.5
* @public
* @default true;
*/
public isMomentum: boolean = true;
/**
* 是否滑到边界后有回弹效果
* @property isBounce
* @type {boolean}
* @since 3.1.5
* @public
* @default true;
*/
public isBounce: boolean = true;
/**
* 回弹的动效时长,单位:ms
* @property bounceTime
* @type {number}
* @public
* @since 3.1.5
* @default 300
*/
public bounceTime: number = 300;
/**
* 是否需要横向纵向保护,有些时候你想纵向滑动,但鼠标也轻微的左右飘了,如果不lock刚好左右滑动也被允许的话,则左右也会滑动,横向滑动则相反。
* 如果想鼠标不那么灵敏的话,可以加上一把锁,这样左右滑的时候上下不会滑,上下滑的时候左右不会滑
* @property isLocked
* @type {boolean}
* @public
* @since 3.1.5
* @default 300
*/
public isLocked: boolean = true;
/**
* 锁的像素范围
* @property lockDis
* @type {number}
* @since 3.1.5
* @public
* @default 5
*/
public lockDis: number = 5;
/**
* 当前滑动的x坐标 更改此参数则需要调用resetPosition()方法生效
* @property curX
* @type {number}
* @since 3.1.5
* @default 0
*/
public get curX(): number {
return this._curX;
}
protected _curX: number = 0;
/**
* 当前滑动的y坐标 更改此参数则需要调用resetPosition()方法生效
* @property curY
* @type {number}
* @since 3.1.5
* @default 0
*/
public get curY(): number {
return this._curY;
}
protected _curY: number = 0;
/**
* 当前显示范围的宽
* @property viewWidth
* @type {number}
* @since 3.1.5
* @default 0
* @readonly
*/
public get viewWidth(): number {
return this._viewWidth;
}
public _viewWidth: number = 0;
/**
* 当前显示范围的高
* @property viewHeight
* @type {number}
* @since 3.1.5
* @default 0
* @readonly
*/
public get viewHeight(): number {
return this._viewHeight;
}
public _viewHeight: number = 0;
/**
* 当前横向的滑动范围
* @property scrollWidth
* @type {number}
* @since 3.1.5
* @default 0
* @readonly
*/
public get scrollWidth(): number {
return this._scrollWidth;
}
public _scrollWidth: number = 0;
/**
* 当前纵向的滑动范围
* @property scrollHeight
* @type {number}
* @since 3.1.5
* @default 0
* @readonly
*/
public get scrollHeight(): number {
return this._scrollHeight;
}
public _scrollHeight: number = 0;
/**
* 是否正在滑动中
* @property isRunning
* @type {boolean}
* @since 3.1.5
* @default false
*/
public isRunning: boolean;
private startX: number = 0;
private startY: number = 0;
private maxScrollX: number = 0;
private maxScrollY: number = 0;
private endTime: number = 0;
private mouseStatus: number = 0;
private distX: number = 0;
private distY: number = 0;
private startTime: number = 0;
private pointX: number = 0;
private pointY: number = 0;
/**
* 滑动衰减系数,值越大衰减越快
* @property deceleration
* @type {number}
* @public
* @since 3.2.1
* @default 0.0006
*/
public deceleration: number = 0.0006;
private destTime: number = 0;
private destX: number = 0;
private destY: number = 0;
public duration: number = 0;
private easingFn: Function;
/**
* 初始化
* @method Scroller
* @param {annie.MovieClip} container
* @param {number} viewWidth
* @param {number} viewHeight
* @param {number} scrollWidth
* @param {number} scrollHeight
*/
constructor(container: annie.DisplayObject, viewWidth: number, viewHeight: number, scrollWidth: number, scrollHeight: number) {
super();
let s = this;
s._instanceType = "annieUI.Scroller";
s._mouseEvent = s.onMouseEvent.bind(s);
s._enterFrame = s.onEnterFrame.bind(s);
s.init(container, viewWidth, viewHeight, scrollWidth, scrollHeight);
}
/**
* 初始化,也可以反复调用此方法重用scroller
* @method init
* @param {annie.MovieClip} container
* @param {number} viewWidth
* @param {number} viewHeight
* @param {number} scrollWidth
* @param {number} scrollHeight
* @public
* @since 3.1.5
*/
public init(container: annie.DisplayObject, viewWidth: number, viewHeight: number, scrollWidth: number, scrollHeight: number) {
let s = this;
if (s._container && s._container != container) {
//移除
s._container.removeEventListener(annie.MouseEvent.MOUSE_DOWN, s._mouseEvent, false);
s._container.removeEventListener(annie.MouseEvent.MOUSE_MOVE, s._mouseEvent, false);
s._container.removeEventListener(annie.MouseEvent.MOUSE_UP, s._mouseEvent, false);
//这里不要加false
s._container.removeEventListener(annie.MouseEvent.MOUSE_OUT, s._mouseEvent);
s._container.removeEventListener(annie.Event.ENTER_FRAME, s._enterFrame);
}
if (s._container != container) {
s._container = container;
container.addEventListener(annie.MouseEvent.MOUSE_DOWN, s._mouseEvent, false);
container.addEventListener(annie.MouseEvent.MOUSE_MOVE, s._mouseEvent, false);
container.addEventListener(annie.MouseEvent.MOUSE_UP, s._mouseEvent, false);
//这里不要加false
container.addEventListener(annie.MouseEvent.MOUSE_OUT, s._mouseEvent);
container.addEventListener(annie.Event.ENTER_FRAME, s._enterFrame);
}
s.isRunning = false;
s.endTime = 0;
s.setViewWHAndScrollWH(viewWidth, viewHeight, scrollWidth, scrollHeight);
}
/**
* 当更改了viewWidth,viewHeight其中一个或两个同时也更改了scrollWidth,scrollHeight其中的一个或者两个
* 需要调用此方法重置,如果只是单方面更改了viewWidth,viewHeight其中一个或两个,则可以调用setViewWH()
* 如果只是更改了scrollWidth,scrollHeight其中的一个或者两个,则可以调用setScrollWH()
* @method setViewWHAndScrollWH
* @public
* @since 3.1.5
* @param {number} viewWidth
* @param {number} viewHeight
* @param {number} scrollWidth
* @param {number} scrollHeight
*/
public setViewWHAndScrollWH(viewWidth: number, viewHeight: number, scrollWidth: number, scrollHeight: number): void {
let s = this;
s._viewHeight = viewHeight;
s._viewWidth = viewWidth;
s._scrollWidth = scrollWidth;
s._scrollHeight = scrollHeight;
s._updateViewAndScroll();
}
/**
* 当更改了viewWidth,viewHeight其中一个或两个,需要调用此方法重置.
* @method setViewWH
* @public
* @since 3.1.5
* @param {number} viewWidth
* @param {number} viewHeight
*/
public setViewWH(viewWidth: number, viewHeight: number) {
let s = this;
s._viewHeight = viewHeight;
s._viewWidth = viewWidth;
s._updateViewAndScroll();
}
/**
* 当更改了scrollWidth,scrollHeight其中的一个或者两个,需要调用此方法重置.
* @method setScrollWH
* @public
* @since 3.1.5
* @param {number} scrollWidth
* @param {number} scrollHeight
*/
public setScrollWH(scrollWidth: number, scrollHeight: number) {
let s = this;
s._scrollWidth = scrollWidth;
s._scrollHeight = scrollHeight;
s._updateViewAndScroll();
}
public _updateViewAndScroll() {
let s = this;
s.maxScrollX = s.viewWidth - s.scrollWidth;
s.maxScrollY = s.viewHeight - s.scrollHeight;
if (s.maxScrollX > 0) {
s.maxScrollX = 0;
}
if (s.maxScrollY > 0) {
s.maxScrollY = 0;
}
if (!s.isScrollX) {
s.maxScrollX = 0;
s._scrollWidth = s.viewWidth;
}
if (!s.isScrollY) {
s.maxScrollY = 0;
s._scrollHeight = s.viewHeight;
}
s.resetPosition(200);
}
private _mouseEvent: Function = null;
private _enterFrame: Function = null;
protected onEnterFrame(e: annie.Event){
let s = this;
if (s.isRunning) {
let now = Date.now(),
newX:number, newY:number,
easing:number;
if (now >= s.destTime) {
s.isRunning = false;
s._translate(s.destX, s.destY);
if (!s.resetPosition(s.bounceTime)) {
s.dispatchEvent(annie.Event.ON_SCROLL_STOP);
//有可能内容区域没有滑动区域宽,这两个事件会同时触发,既滑到了头也滑到了尾,所以两个if不用else连接起来
if (s._curX == 0 && s._curY == 0) {
s.dispatchEvent(annie.Event.ON_SCROLL_TO_HEAD);
}
if (s._curX == s.maxScrollX && s._curY == s.maxScrollY) {
s.dispatchEvent(annie.Event.ON_SCROLL_TO_END);
}
}
} else {
now = (now - s.startTime) / s.duration;
easing = s.easingFn(now);
newX = (s.destX - s.startX) * easing + s.startX;
newY = (s.destY - s.startY) * easing + s.startY;
s._translate(newX, newY);
}
}
}
private onMouseEvent(e: annie.MouseEvent): void {
let s = this;
if (e.type == annie.MouseEvent.MOUSE_DOWN) {
s.isRunning = false;
s.mouseStatus = 1;
s.distX = 0;
s.distY = 0;
s.startTime = Date.now();
s.startX = s._curX;
s.startY = s._curY;
s.pointX = e.localX;
s.pointY = e.localY;
} else if (e.type == annie.MouseEvent.MOUSE_MOVE) {
if (s.mouseStatus < 1) {
return;
}
let deltaX = e.localX - s.pointX,
deltaY = e.localY - s.pointY,
timestamp = Date.now(),
newX:number, newY:number,
absDistX:number, absDistY:number;
s.pointX = e.localX;
s.pointY = e.localY;
s.distX += deltaX;
s.distY += deltaY;
absDistX = Math.abs(s.distX);
absDistY = Math.abs(s.distY);
if (timestamp - s.endTime > 300 && (absDistX < 10 && absDistY < 10)) {
return;
}
if (s.isLocked) {
if (absDistX > absDistY + s.lockDis) {
deltaY = 0;
} else if (absDistY >= absDistX + s.lockDis) {
deltaX = 0;
}
}
deltaX = s.isScrollX ? deltaX : 0;
deltaY = s.isScrollY ? deltaY : 0;
newX = s._curX + deltaX;
newY = s._curY + deltaY;
if (newX > 0 || newX < s.maxScrollX) {
newX = s.isBounce ? s._curX + deltaX / 3 : newX > 0 ? 0 : s.maxScrollX;
}
if (newY > 0 || newY < s.maxScrollY) {
newY = s.isBounce ? s._curY + deltaY / 3 : newY > 0 ? 0 : s.maxScrollY;
}
if (s.mouseStatus == 1) {
s.dispatchEvent(annie.Event.ON_SCROLL_START);
}
s.mouseStatus = 2;
s._translate(newX, newY);
if (timestamp - s.startTime > 300) {
s.startTime = timestamp;
s.startX = s._curX;
s.startY = s._curY;
}
} else {
s.endTime = Date.now();
let momentumX: any,
momentumY: any,
duration: number = s.endTime - s.startTime,
newX: number = s._curX,
newY: number = s._curY,
time: number = 0,
easing: Function = null;
if (s.resetPosition(s.bounceTime)) {
s.mouseStatus = 0;
return;
}
if (s.mouseStatus != 2) {
s.mouseStatus = 0;
return;
}
s.mouseStatus = 0;
s.scrollTo(newX, newY);
if (s.isMomentum && duration < 300) {
momentumX = s.isScrollX ? Scroller.toMomentum(s._curX, s.startX, duration, s.maxScrollX, s.isBounce ? s.viewWidth / 2 : 0, s.deceleration) : {
destination: newX,
duration: 0
};
momentumY = s.isScrollY ? Scroller.toMomentum(s._curY, s.startY, duration, s.maxScrollY, s.isBounce ? s.viewHeight / 2 : 0, s.deceleration) : {
destination: newY,
duration: 0
};
newX = momentumX.destination;
newY = momentumY.destination;
time = Math.max(momentumX.duration, momentumY.duration);
}
if (newX != s._curX || newY != s._curY) {
if (newX > 0 || newX < s.maxScrollX || newY > 0 || newY < s.maxScrollY) {
easing = annie.Tween.quadraticOut;
}
s.scrollTo(newX, newY, time, easing);
return;
}
s.dispatchEvent(annie.Event.ON_SCROLL_STOP);
}
}
public destroy(): void {
let s = this;
if (s._container) {
s._container.removeEventListener(annie.MouseEvent.MOUSE_MOVE, s._mouseEvent, false);
s._container.removeEventListener(annie.MouseEvent.MOUSE_DOWN, s._mouseEvent, false);
s._container.removeEventListener(annie.MouseEvent.MOUSE_UP, s._mouseEvent, false);
s._container.removeEventListener(annie.MouseEvent.MOUSE_OUT, s._mouseEvent);
s._container.removeEventListener(annie.Event.ENTER_FRAME, s._enterFrame);
}
s._container = null;
s.easingFn = null;
super.destroy();
}
public resetPosition(time: number = 0): boolean {
let s = this;
let x = s._curX,
y = s._curY;
time = time || 0;
if (!s.isScrollX || s._curX > 0) {
x = 0;
} else if (s._curX < s.maxScrollX) {
x = s.maxScrollX;
}
if (!s.isScrollY || s._curY > 0) {
y = 0;
} else if (s._curY < s.maxScrollY) {
y = s.maxScrollY;
}
if (x == s._curX && y == s._curY) {
return false;
}
s.scrollTo(x, y, time, null);
return true;
}
/**
* 从设置的x,y坐标滑过来。 注意x y位置是负数,想想为什么
* @method scrollBy
* @param {number} x 从哪个x坐标滑过来
* @param {number} y 从哪个y坐标滑过来
* @param {number} time 滑动时长 ms,0的话没效果直接跳
* @param {Function} easing annie.Tween中指定的缓存方法
* @public
* @since 3.1.5
*/
public scrollBy(x: number, y: number, time: number = 0, easing: Function = null) {
let s = this;
x = s._curX + x;
y = s._curY + y;
time = time || 0;
s.scrollTo(x, y, time, easing);
}
/**
* 滑动到设置的x,y坐标。 注意x y位置是负数,想想为什么
* @method scrollTo
* @param {number} x 要滑去的x坐标
* @param {number} y 要滑去的y坐标
* @param {number} time 滑动时长 ms,0的话没效果直接跳
* @param {Function} easing annie.Tween中指定的缓存方法
* @public
* @since 3.1.5
*/
public scrollTo(x: number, y: number, time: number = 0, easing: Function = null) {
let s = this;
if(isNaN(x)||isNaN(y)) {
return;
}
if (!time) {
s._translate(x, y);
} else {
easing = easing || annie.Tween.circularOut;
s.startX = s._curX;
s.startY = s._curY;
s.startTime = Date.now();
s.destTime = s.startTime + time;
s.destX = x;
s.destY = y;
s.duration = time;
s.easingFn = easing;
s.isRunning = true;
}
}
public _translate(x: number, y: number) {
let s = this;
if(this.isScrollX) {
s._curX = x;
}
if(this.isScrollY){
s._curY = y;
}
s.dispatchEvent(annie.Event.ON_SCROLL_ING, {posX: s._curX, posY: s._curY});
}
private static toMomentum(current: number, start: number, time: number, lowerMargin: number, wrapperSize: number, deceleration: number) {
let distance = current - start,
speed = Math.abs(distance) / time,
destination:number,
duration:number;
deceleration = deceleration === undefined ? 0.0006 : deceleration;
destination = current + (speed * speed) / (2 * deceleration) * (distance < 0 ? -1 : 1);
duration = speed / deceleration;
if (destination < lowerMargin) {
destination = wrapperSize ? lowerMargin - (wrapperSize / 2.5 * (speed / 8)) : lowerMargin;
distance = Math.abs(destination - current);
duration = distance / speed;
} else if (destination > 0) {
destination = wrapperSize ? wrapperSize / 2.5 * (speed / 8) : 0;
distance = Math.abs(current) + destination;
duration = distance / speed;
}
return {
destination: destination,
duration: duration
};
};
}
}
\ No newline at end of file
import { EventDispatcher } from '../core/EventDispatcher';
import { TOUCH } from '../constants';
import { Quaternion } from '../math/Quaternion';
import { Vector2 } from '../math/Vector2';
import { Vector3 } from '../math/Vector3';
import { Spherical } from '../math/Spherical';
export class OrbitControls {
enabled = true
enableDamping = true
dampingFactor = 0.25
userZoom = true
userZoomSpeed = 1.0
userRotate = true
userRotateSpeed = 1.0
autoRotate = false
autoRotateSpeed = 2.0
//最小旋转角
minPolarAngle = 0
//最大旋转角
maxPolarAngle = Math.PI
minDistance = 0
maxDistance = Infinity
enablePitch = true
constructor(camera) {
this.camera = camera
//相机目标点
var center = this.center = new Vector3();
// this.userPan = true;
// this.userPanSpeed = 2.0;
var EPS = 0.000001;
var PIXELS_PER_ROUND = 1800;
var rotateStart = new Vector2();
var rotateEnd = new Vector2();
var rotateDelta = new Vector2();
var phiDelta = 0;
var thetaDelta = 0;
var scale = 1;
function getAutoRotationAngle() {
return 2 * Math.PI / 60 / 60 * this.autoRotateSpeed;
}
function getZoomScale() {
return Math.pow(0.95, this.userZoomSpeed);
}
function rotateLeft(angle = getAutoRotationAngle()) {
thetaDelta -= angle;
};
function rotateUp(angle = getAutoRotationAngle()) {
phiDelta -= angle;
};
function zoomIn(zoomScale = getZoomScale()) {
scale /= zoomScale;
};
function zoomOut(zoomScale = getZoomScale()) {
scale *= zoomScale;
};
this.update = () => {
if (
Math.abs(thetaDelta) < 0.0001 &&
Math.abs(phiDelta) < 0.0001 &&
Math.abs(scale - 1) < 0.0001 &&
!this.autoRotate
) {
return
}
var position = this.camera.position;
var offset = position.clone().sub(center);
var theta = Math.atan2(offset.x, offset.z);
var phi = Math.atan2(Math.sqrt(offset.x * offset.x + offset.z * offset.z), offset.y);
if (this.autoRotate) rotateLeft();
theta += thetaDelta;
phi += phiDelta;
phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, phi));
phi = Math.max(EPS, Math.min(Math.PI - EPS, phi));
var radius = offset.length() * scale;
// restrict radius to be between desired limits
radius = Math.max(this.minDistance, Math.min(this.maxDistance, radius));
offset.x = radius * Math.sin(phi) * Math.sin(theta);
offset.y = radius * Math.cos(phi);
offset.z = radius * Math.sin(phi) * Math.cos(theta);
//相机位置
position.copy(center).add(offset);
//相机目标点
this.camera.lookAt(center.x, center.y, center.z);
//恢复
if (this.enableDamping) {
thetaDelta *= (1 - this.dampingFactor);
phiDelta *= (1 - this.dampingFactor);
} else {
thetaDelta = 0;
phiDelta = 0;
}
scale = 1;
// if (lastPosition.distanceTo(this.object.position) > 0) {
// this.dispatchEvent(changeEvent);
// lastPosition.copy(this.object.position);
// }
};
//记录两个手指唯一标识
let fingles = [];
//距离
let deltaDis = 0;
this.onTouchStart = (e) => {
if (!this.enabled) return;
//每个处理
for (var i = 0; i < e.changedTouches.length; i++) {
let { x, y, identifier } = e.changedTouches[i];
fingles.push({ x, y, id: identifier })
if (fingles.length >= 2) {
let f1 = fingles[fingles.length - 1];
let f2 = fingles[fingles.length - 2];
deltaDis = Math.sqrt(Math.pow(f1.x - f2.x, 2) + Math.pow(f1.y - f2.y, 2));
}
rotateStart.set(e.changedTouches[0].x, e.changedTouches[0].y);
}
}
this.onTouchMove = (e) => {
if (!this.enabled) return
if (!fingles.length) return;
for (var i = 0; i < e.changedTouches.length; i++) {
if (!e.changedTouches[i]) continue;
let { x, y, identifier } = e.changedTouches[i];
if (fingles.length == 1) {
if (!this.userRotate) return;
if (!rotateStart.x && !rotateStart.y) return;
rotateEnd.set(x, y);
rotateDelta.subVectors(rotateEnd, rotateStart);
rotateLeft(2 * Math.PI * rotateDelta.x / PIXELS_PER_ROUND * this.userRotateSpeed);
if (this.enablePitch) rotateUp(2 * Math.PI * rotateDelta.y / PIXELS_PER_ROUND * this.userRotateSpeed);
rotateStart.copy(rotateEnd);
}
//多指,取最后两个
else {
if (this.userZoom === false) return;
var oneF = fingles[fingles.length - 1];
var twoF = fingles[fingles.length - 2];
if (identifier == oneF.id) {
oneF.x = x
oneF.y = y
} else if (identifier == twoF.id) {
twoF.x = x
twoF.y = y
} else {
continue
}
var cDelta = Math.sqrt(Math.pow(oneF.x - twoF.x, 2) + Math.pow(oneF.y - twoF.y, 2));
if (cDelta - deltaDis > 0) {
zoomOut(Math.pow(0.95, cfg.userZoomSpeed / 3));//手势的执行太快了
} else {
zoomIn(Math.pow(0.95, cfg.userZoomSpeed / 3));
}
deltaDis = cDelta;
}
}
this.update();
}
this.onTouchEnd = (e) => {//淘宝有bug,全部移除先
fingles.length = 0;
}
}
}
var bufferView;
var base64ReverseLookup = new Uint8Array(123/*'z'+1*/);
for (var i = 25; i >= 0; --i) {
base64ReverseLookup[48+i] = 52+i; // '0-9'
base64ReverseLookup[65+i] = i; // 'A-Z'
base64ReverseLookup[97+i] = 26+i; // 'a-z'
}
base64ReverseLookup[43] = 62; // '+'
base64ReverseLookup[47] = 63; // '/'
/** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */
function base64DecodeToExistingUint8Array(uint8Array, offset, b64) {
var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '=');
for (; i < bLength; i += 4) {
b1 = base64ReverseLookup[b64.charCodeAt(i+1)];
b2 = base64ReverseLookup[b64.charCodeAt(i+2)];
uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4;
if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2;
if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)];
}
}
function initActiveSegments(imports) {
base64DecodeToExistingUint8Array(bufferView, 1024, "EGQAAA==");
}
var scratchBuffer = new ArrayBuffer(16);
var i32ScratchView = new Int32Array(scratchBuffer);
var f32ScratchView = new Float32Array(scratchBuffer);
var f64ScratchView = new Float64Array(scratchBuffer);
function wasm2js_scratch_store_i32(index, value) {
i32ScratchView[index] = value;
}
function wasm2js_scratch_load_f32() {
return f32ScratchView[2];
}
function asmFunc(env) {
var buffer = new ArrayBuffer(65536);
var HEAP8 = new Int8Array(buffer);
var HEAP16 = new Int16Array(buffer);
var HEAP32 = new Int32Array(buffer);
var HEAPU8 = new Uint8Array(buffer);
var HEAPU16 = new Uint16Array(buffer);
var HEAPU32 = new Uint32Array(buffer);
var HEAPF32 = new Float32Array(buffer);
var HEAPF64 = new Float64Array(buffer);
var Math_imul = Math.imul;
var Math_fround = Math.fround;
var Math_abs = Math.abs;
var Math_clz32 = Math.clz32;
var Math_min = Math.min;
var Math_max = Math.max;
var Math_floor = Math.floor;
var Math_ceil = Math.ceil;
var Math_trunc = Math.trunc;
var Math_sqrt = Math.sqrt;
var abort = env.abort;
var nan = NaN;
var infinity = Infinity;
var global$0 = 25616;
function $0() {
}
function $1($0_1, $1_1, $2_1, $3_1, $4_1) {
$0_1 = $0_1 | 0;
$1_1 = $1_1 | 0;
$2_1 = $2_1 | 0;
$3_1 = $3_1 | 0;
$4_1 = $4_1 | 0;
var $19 = 0, $18 = 0, $20 = 0, $6_1 = 0, i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, $59 = 0, $8_1 = 0, $16 = 0, $17 = 0, $10 = 0, $11 = 0, $7_1 = 0, $15 = 0, $60 = 0, $61 = 0, $5_1 = 0, $14 = 0, $9_1 = 0, $12 = 0, $13 = 0, $112 = 0, $128 = 0, $143 = 0, $157 = 0, $173 = 0, $188 = 0, $203 = 0, $217 = 0, $233 = 0, $248 = 0, $263 = 0, $277 = 0, $293 = 0, $308 = 0, $323 = 0, $329 = 0, $337 = 0, $352 = 0, $367 = 0, $383 = 0, $397 = 0, $413 = 0, $427 = 0, $443 = 0, $457 = 0, $473 = 0, $487 = 0, $503 = 0, $517 = 0, $533 = 0, $547 = 0, $563 = 0, $569 = 0, $577 = 0, $587 = 0, $592 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0;
$5_1 = global$0 - 8704 | 0;
global$0 = $5_1;
$6_1 = -2;
label$1 : {
if (($2_1 + 1 | 0) >>> 0 > $4_1 >>> 0) {
break label$1
}
$6_1 = -1;
if ((HEAPU8[$3_1 >> 0] | 0 | 0) != (160 | 0)) {
break label$1
}
$7_1 = $3_1 + $4_1 | 0;
$8_1 = $8($5_1 | 0, $7_1 - $2_1 | 0 | 0, $2_1 | 0) | 0;
$6_1 = ((8192 >>> 0) / ($2_1 >>> 0) | 0) & 16368 | 0;
$9_1 = $6_1 >>> 0 < 256 >>> 0 ? $6_1 : 256;
$4_1 = $3_1 + 1 | 0;
$10 = 0;
label$2 : {
label$3 : while (1) {
if ($10 >>> 0 >= $1_1 >>> 0) {
break label$2
}
$11 = ($10 + $9_1 | 0) >>> 0 < $1_1 >>> 0 ? $9_1 : $1_1 - $10 | 0;
label$4 : {
label$5 : {
if (!$2_1) {
break label$5
}
$6_1 = $11 + 15 | 0;
$12 = $6_1 & -16 | 0;
$13 = (($6_1 >>> 4 | 0) + 3 | 0) >>> 2 | 0;
$14 = $8_1 + 256 | 0;
$15 = 0;
$16 = $4_1;
label$6 : while (1) {
label$7 : {
if (($7_1 - $16 | 0) >>> 0 >= $13 >>> 0) {
break label$7
}
$4_1 = 0;
break label$4;
}
$4_1 = $16 + $13 | 0;
label$8 : {
if (!$12) {
break label$8
}
$17 = 0;
$3_1 = 0;
label$9 : while (1) {
label$10 : {
if (($7_1 - $4_1 | 0) >>> 0 >= 24 >>> 0) {
break label$10
}
$4_1 = 0;
break label$4;
}
$6_1 = ($8_1 + 8448 | 0) + $3_1 | 0;
label$11 : {
label$12 : {
switch (((HEAPU8[($16 + ($3_1 >>> 6 | 0) | 0) >> 0] | 0) >>> ($17 & 6 | 0) | 0) & 3 | 0 | 0) {
default:
i64toi32_i32$1 = $6_1;
i64toi32_i32$0 = 0;
HEAP32[$6_1 >> 2] = 0;
HEAP32[($6_1 + 4 | 0) >> 2] = i64toi32_i32$0;
i64toi32_i32$1 = $6_1 + 8 | 0;
i64toi32_i32$0 = 0;
HEAP32[i64toi32_i32$1 >> 2] = 0;
HEAP32[(i64toi32_i32$1 + 4 | 0) >> 2] = i64toi32_i32$0;
break label$11;
case 1:
$18 = HEAPU8[$4_1 >> 0] | 0;
$19 = $18 >>> 6 | 0;
$112 = $19;
$19 = ($19 | 0) == (3 | 0);
HEAP8[$6_1 >> 0] = (wasm2js_i32$0 = HEAPU8[($4_1 + 4 | 0) >> 0] | 0, wasm2js_i32$1 = $112, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = ($4_1 + 4 | 0) + $19 | 0;
$20 = ($18 >>> 4 | 0) & 3 | 0;
$128 = $20;
$20 = ($20 | 0) == (3 | 0);
HEAP8[($6_1 + 1 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $128, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = $19 + $20 | 0;
$20 = ($18 >>> 2 | 0) & 3 | 0;
$143 = $20;
$20 = ($20 | 0) == (3 | 0);
HEAP8[($6_1 + 2 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $143, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = $19 + $20 | 0;
$18 = $18 & 3 | 0;
$157 = $18;
$18 = ($18 | 0) == (3 | 0);
HEAP8[($6_1 + 3 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $157, wasm2js_i32$2 = $18, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = $19 + $18 | 0;
$18 = HEAPU8[($4_1 + 1 | 0) >> 0] | 0;
$20 = $18 >>> 6 | 0;
$173 = $20;
$20 = ($20 | 0) == (3 | 0);
HEAP8[($6_1 + 4 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $173, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = $19 + $20 | 0;
$20 = ($18 >>> 4 | 0) & 3 | 0;
$188 = $20;
$20 = ($20 | 0) == (3 | 0);
HEAP8[($6_1 + 5 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $188, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = $19 + $20 | 0;
$20 = ($18 >>> 2 | 0) & 3 | 0;
$203 = $20;
$20 = ($20 | 0) == (3 | 0);
HEAP8[($6_1 + 6 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $203, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = $19 + $20 | 0;
$18 = $18 & 3 | 0;
$217 = $18;
$18 = ($18 | 0) == (3 | 0);
HEAP8[($6_1 + 7 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $217, wasm2js_i32$2 = $18, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = $19 + $18 | 0;
$18 = HEAPU8[($4_1 + 2 | 0) >> 0] | 0;
$20 = $18 >>> 6 | 0;
$233 = $20;
$20 = ($20 | 0) == (3 | 0);
HEAP8[($6_1 + 8 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $233, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = $19 + $20 | 0;
$20 = ($18 >>> 4 | 0) & 3 | 0;
$248 = $20;
$20 = ($20 | 0) == (3 | 0);
HEAP8[($6_1 + 9 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $248, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = $19 + $20 | 0;
$20 = ($18 >>> 2 | 0) & 3 | 0;
$263 = $20;
$20 = ($20 | 0) == (3 | 0);
HEAP8[($6_1 + 10 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $263, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = $19 + $20 | 0;
$18 = $18 & 3 | 0;
$277 = $18;
$18 = ($18 | 0) == (3 | 0);
HEAP8[($6_1 + 11 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $277, wasm2js_i32$2 = $18, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $19 + $18 | 0;
$4_1 = HEAPU8[($4_1 + 3 | 0) >> 0] | 0;
$19 = $4_1 >>> 6 | 0;
$293 = $19;
$19 = ($19 | 0) == (3 | 0);
HEAP8[($6_1 + 12 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $293, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $19 | 0;
$19 = ($4_1 >>> 4 | 0) & 3 | 0;
$308 = $19;
$19 = ($19 | 0) == (3 | 0);
HEAP8[($6_1 + 13 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $308, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $19 | 0;
$19 = ($4_1 >>> 2 | 0) & 3 | 0;
$323 = $19;
$19 = ($19 | 0) == (3 | 0);
HEAP8[($6_1 + 14 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $323, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$329 = $6_1 + 15 | 0;
$6_1 = $18 + $19 | 0;
$4_1 = $4_1 & 3 | 0;
$337 = $4_1;
$4_1 = ($4_1 | 0) == (3 | 0);
HEAP8[$329 >> 0] = (wasm2js_i32$0 = HEAPU8[$6_1 >> 0] | 0, wasm2js_i32$1 = $337, wasm2js_i32$2 = $4_1, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$4_1 = $6_1 + $4_1 | 0;
break label$11;
case 2:
$18 = HEAPU8[$4_1 >> 0] | 0;
$19 = $18 >>> 4 | 0;
$352 = $19;
$19 = ($19 | 0) == (15 | 0);
HEAP8[$6_1 >> 0] = (wasm2js_i32$0 = HEAPU8[($4_1 + 8 | 0) >> 0] | 0, wasm2js_i32$1 = $352, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$19 = ($4_1 + 8 | 0) + $19 | 0;
$18 = $18 & 15 | 0;
$367 = $18;
$18 = ($18 | 0) == (15 | 0);
HEAP8[($6_1 + 1 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$19 >> 0] | 0, wasm2js_i32$1 = $367, wasm2js_i32$2 = $18, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $19 + $18 | 0;
$19 = HEAPU8[($4_1 + 1 | 0) >> 0] | 0;
$20 = $19 >>> 4 | 0;
$383 = $20;
$20 = ($20 | 0) == (15 | 0);
HEAP8[($6_1 + 2 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $383, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $20 | 0;
$19 = $19 & 15 | 0;
$397 = $19;
$19 = ($19 | 0) == (15 | 0);
HEAP8[($6_1 + 3 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $397, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $19 | 0;
$19 = HEAPU8[($4_1 + 2 | 0) >> 0] | 0;
$20 = $19 >>> 4 | 0;
$413 = $20;
$20 = ($20 | 0) == (15 | 0);
HEAP8[($6_1 + 4 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $413, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $20 | 0;
$19 = $19 & 15 | 0;
$427 = $19;
$19 = ($19 | 0) == (15 | 0);
HEAP8[($6_1 + 5 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $427, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $19 | 0;
$19 = HEAPU8[($4_1 + 3 | 0) >> 0] | 0;
$20 = $19 >>> 4 | 0;
$443 = $20;
$20 = ($20 | 0) == (15 | 0);
HEAP8[($6_1 + 6 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $443, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $20 | 0;
$19 = $19 & 15 | 0;
$457 = $19;
$19 = ($19 | 0) == (15 | 0);
HEAP8[($6_1 + 7 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $457, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $19 | 0;
$19 = HEAPU8[($4_1 + 4 | 0) >> 0] | 0;
$20 = $19 >>> 4 | 0;
$473 = $20;
$20 = ($20 | 0) == (15 | 0);
HEAP8[($6_1 + 8 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $473, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $20 | 0;
$19 = $19 & 15 | 0;
$487 = $19;
$19 = ($19 | 0) == (15 | 0);
HEAP8[($6_1 + 9 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $487, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $19 | 0;
$19 = HEAPU8[($4_1 + 5 | 0) >> 0] | 0;
$20 = $19 >>> 4 | 0;
$503 = $20;
$20 = ($20 | 0) == (15 | 0);
HEAP8[($6_1 + 10 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $503, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $20 | 0;
$19 = $19 & 15 | 0;
$517 = $19;
$19 = ($19 | 0) == (15 | 0);
HEAP8[($6_1 + 11 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $517, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $19 | 0;
$19 = HEAPU8[($4_1 + 6 | 0) >> 0] | 0;
$20 = $19 >>> 4 | 0;
$533 = $20;
$20 = ($20 | 0) == (15 | 0);
HEAP8[($6_1 + 12 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $533, wasm2js_i32$2 = $20, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $20 | 0;
$19 = $19 & 15 | 0;
$547 = $19;
$19 = ($19 | 0) == (15 | 0);
HEAP8[($6_1 + 13 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $547, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = $18 + $19 | 0;
$4_1 = HEAPU8[($4_1 + 7 | 0) >> 0] | 0;
$19 = $4_1 >>> 4 | 0;
$563 = $19;
$19 = ($19 | 0) == (15 | 0);
HEAP8[($6_1 + 14 | 0) >> 0] = (wasm2js_i32$0 = HEAPU8[$18 >> 0] | 0, wasm2js_i32$1 = $563, wasm2js_i32$2 = $19, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$569 = $6_1 + 15 | 0;
$6_1 = $18 + $19 | 0;
$4_1 = $4_1 & 15 | 0;
$577 = $4_1;
$4_1 = ($4_1 | 0) == (15 | 0);
HEAP8[$569 >> 0] = (wasm2js_i32$0 = HEAPU8[$6_1 >> 0] | 0, wasm2js_i32$1 = $577, wasm2js_i32$2 = $4_1, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$4_1 = $6_1 + $4_1 | 0;
break label$11;
case 3:
break label$12;
};
}
i64toi32_i32$0 = HEAPU8[$4_1 >> 0] | 0 | ((HEAPU8[($4_1 + 1 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[($4_1 + 2 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[($4_1 + 3 | 0) >> 0] | 0) << 24 | 0) | 0) | 0;
i64toi32_i32$1 = HEAPU8[($4_1 + 4 | 0) >> 0] | 0 | ((HEAPU8[($4_1 + 5 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[($4_1 + 6 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[($4_1 + 7 | 0) >> 0] | 0) << 24 | 0) | 0) | 0;
$587 = i64toi32_i32$0;
i64toi32_i32$0 = $6_1;
$60 = $587;
HEAP8[$6_1 >> 0] = $60;
HEAP8[($6_1 + 1 | 0) >> 0] = $60 >>> 8 | 0;
HEAP8[($6_1 + 2 | 0) >> 0] = $60 >>> 16 | 0;
HEAP8[($6_1 + 3 | 0) >> 0] = $60 >>> 24 | 0;
HEAP8[($6_1 + 4 | 0) >> 0] = i64toi32_i32$1;
HEAP8[($6_1 + 5 | 0) >> 0] = i64toi32_i32$1 >>> 8 | 0;
HEAP8[($6_1 + 6 | 0) >> 0] = i64toi32_i32$1 >>> 16 | 0;
HEAP8[($6_1 + 7 | 0) >> 0] = i64toi32_i32$1 >>> 24 | 0;
$59 = $4_1 + 8 | 0;
i64toi32_i32$1 = HEAPU8[$59 >> 0] | 0 | ((HEAPU8[($59 + 1 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[($59 + 2 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[($59 + 3 | 0) >> 0] | 0) << 24 | 0) | 0) | 0;
i64toi32_i32$0 = HEAPU8[($59 + 4 | 0) >> 0] | 0 | ((HEAPU8[($59 + 5 | 0) >> 0] | 0) << 8 | 0) | 0 | ((HEAPU8[($59 + 6 | 0) >> 0] | 0) << 16 | 0 | ((HEAPU8[($59 + 7 | 0) >> 0] | 0) << 24 | 0) | 0) | 0;
$592 = i64toi32_i32$1;
i64toi32_i32$1 = $6_1 + 8 | 0;
$61 = $592;
HEAP8[i64toi32_i32$1 >> 0] = $61;
HEAP8[(i64toi32_i32$1 + 1 | 0) >> 0] = $61 >>> 8 | 0;
HEAP8[(i64toi32_i32$1 + 2 | 0) >> 0] = $61 >>> 16 | 0;
HEAP8[(i64toi32_i32$1 + 3 | 0) >> 0] = $61 >>> 24 | 0;
HEAP8[(i64toi32_i32$1 + 4 | 0) >> 0] = i64toi32_i32$0;
HEAP8[(i64toi32_i32$1 + 5 | 0) >> 0] = i64toi32_i32$0 >>> 8 | 0;
HEAP8[(i64toi32_i32$1 + 6 | 0) >> 0] = i64toi32_i32$0 >>> 16 | 0;
HEAP8[(i64toi32_i32$1 + 7 | 0) >> 0] = i64toi32_i32$0 >>> 24 | 0;
$4_1 = $4_1 + 16 | 0;
}
$17 = $17 + 2 | 0;
$3_1 = $3_1 + 16 | 0;
if ($3_1 >>> 0 < $12 >>> 0) {
continue label$9
}
break label$9;
};
}
label$16 : {
if ($4_1) {
break label$16
}
$4_1 = 0;
break label$4;
}
label$17 : {
if (!$11) {
break label$17
}
$17 = HEAPU8[($8_1 + $15 | 0) >> 0] | 0;
$6_1 = 0;
$3_1 = $14;
label$18 : while (1) {
$16 = HEAPU8[(($8_1 + 8448 | 0) + $6_1 | 0) >> 0] | 0;
$17 = (($16 >>> 1 | 0) ^ (0 - ($16 & 1 | 0) | 0) | 0) + $17 | 0;
HEAP8[$3_1 >> 0] = $17;
$3_1 = $3_1 + $2_1 | 0;
$6_1 = $6_1 + 1 | 0;
if (($6_1 | 0) != ($11 | 0)) {
continue label$18
}
break label$18;
};
}
$14 = $14 + 1 | 0;
$16 = $4_1;
$15 = $15 + 1 | 0;
if (($15 | 0) != ($2_1 | 0)) {
continue label$6
}
break label$6;
};
}
$8($0_1 + Math_imul($10, $2_1) | 0 | 0, $8_1 + 256 | 0 | 0, Math_imul($11, $2_1) | 0) | 0;
$8($8_1 | 0, ($8_1 + 256 | 0) + Math_imul($11 + -1 | 0, $2_1) | 0 | 0, $2_1 | 0) | 0;
}
$10 = ($4_1 ? $11 : 0) + $10 | 0;
if ($4_1) {
continue label$3
}
break label$3;
};
$6_1 = -2;
break label$1;
}
$6_1 = ($7_1 - $4_1 | 0 | 0) == (($2_1 >>> 0 > 32 >>> 0 ? $2_1 : 32) | 0) ? 0 : -3;
}
global$0 = $5_1 + 8704 | 0;
return $6_1 | 0;
}
function $2($0_1, $1_1, $2_1, $3_1, $4_1) {
$0_1 = $0_1 | 0;
$1_1 = $1_1 | 0;
$2_1 = $2_1 | 0;
$3_1 = $3_1 | 0;
$4_1 = $4_1 | 0;
var $7_1 = 0, $11 = 0, $15 = 0, $19 = 0, $5_1 = 0, $16 = 0, $6_1 = 0, i64toi32_i32$1 = 0, $20 = 0, $13 = 0, $17 = 0, $9_1 = 0, i64toi32_i32$0 = 0, $18 = 0, $8_1 = 0, $10 = 0, $14 = 0, $12 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0;
$5_1 = global$0 - 192 | 0;
global$0 = $5_1;
$6_1 = -2;
label$1 : {
$7_1 = ($1_1 >>> 0) / (3 >>> 0) | 0;
if (($7_1 + 17 | 0) >>> 0 > $4_1 >>> 0) {
break label$1
}
$6_1 = -1;
$8_1 = HEAPU8[$3_1 >> 0] | 0;
if (($8_1 & 240 | 0 | 0) != (224 | 0)) {
break label$1
}
$9_1 = $8_1 & 15 | 0;
if ($9_1 >>> 0 > 1 >>> 0) {
break label$1
}
$9($5_1 + 64 | 0 | 0, 255 | 0, 128 | 0) | 0;
i64toi32_i32$1 = $5_1 + 56 | 0;
i64toi32_i32$0 = -1;
HEAP32[i64toi32_i32$1 >> 2] = -1;
HEAP32[(i64toi32_i32$1 + 4 | 0) >> 2] = i64toi32_i32$0;
i64toi32_i32$1 = $5_1 + 48 | 0;
i64toi32_i32$0 = -1;
HEAP32[i64toi32_i32$1 >> 2] = -1;
HEAP32[(i64toi32_i32$1 + 4 | 0) >> 2] = i64toi32_i32$0;
i64toi32_i32$1 = $5_1 + 40 | 0;
i64toi32_i32$0 = -1;
HEAP32[i64toi32_i32$1 >> 2] = -1;
HEAP32[(i64toi32_i32$1 + 4 | 0) >> 2] = i64toi32_i32$0;
i64toi32_i32$1 = $5_1 + 32 | 0;
i64toi32_i32$0 = -1;
HEAP32[i64toi32_i32$1 >> 2] = -1;
HEAP32[(i64toi32_i32$1 + 4 | 0) >> 2] = i64toi32_i32$0;
i64toi32_i32$1 = $5_1 + 24 | 0;
i64toi32_i32$0 = -1;
HEAP32[i64toi32_i32$1 >> 2] = -1;
HEAP32[(i64toi32_i32$1 + 4 | 0) >> 2] = i64toi32_i32$0;
i64toi32_i32$1 = $5_1 + 16 | 0;
i64toi32_i32$0 = -1;
HEAP32[i64toi32_i32$1 >> 2] = -1;
HEAP32[(i64toi32_i32$1 + 4 | 0) >> 2] = i64toi32_i32$0;
i64toi32_i32$1 = $5_1;
i64toi32_i32$0 = -1;
HEAP32[($5_1 + 8 | 0) >> 2] = -1;
HEAP32[($5_1 + 12 | 0) >> 2] = i64toi32_i32$0;
i64toi32_i32$1 = $5_1;
i64toi32_i32$0 = -1;
HEAP32[$5_1 >> 2] = -1;
HEAP32[($5_1 + 4 | 0) >> 2] = i64toi32_i32$0;
$10 = ($3_1 + $4_1 | 0) + -16 | 0;
$8_1 = $3_1 + 1 | 0;
$11 = $8_1 + $7_1 | 0;
label$2 : {
if (!$1_1) {
break label$2
}
$12 = ($9_1 | 0) == (1 | 0) ? 13 : 15;
$3_1 = $0_1;
$9_1 = 0;
$13 = 0;
$14 = 0;
$4_1 = 0;
$6_1 = 0;
label$3 : while (1) {
label$4 : {
if ($11 >>> 0 <= $10 >>> 0) {
break label$4
}
$6_1 = -2;
break label$1;
}
label$5 : {
label$6 : {
$7_1 = HEAPU8[$8_1 >> 0] | 0;
if ($7_1 >>> 0 > 239 >>> 0) {
break label$6
}
$15 = ($5_1 + 64 | 0) + ((((($7_1 >>> 4 | 0) ^ -1 | 0) + $6_1 | 0) & 15 | 0) << 3 | 0) | 0;
$16 = HEAP32[($15 + 4 | 0) >> 2] | 0;
$17 = HEAP32[$15 >> 2] | 0;
label$7 : {
$15 = $7_1 & 15 | 0;
if ($15 >>> 0 >= $12 >>> 0) {
break label$7
}
$7_1 = (wasm2js_i32$0 = HEAP32[($5_1 + (((($7_1 ^ -1 | 0) + $4_1 | 0) & 15 | 0) << 2 | 0) | 0) >> 2] | 0, wasm2js_i32$1 = $9_1, wasm2js_i32$2 = $15, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$15 = !$15;
label$8 : {
label$9 : {
if (($2_1 | 0) != (2 | 0)) {
break label$9
}
HEAP16[$0_1 >> 1] = $17;
HEAP16[($0_1 + 4 | 0) >> 1] = $7_1;
HEAP16[($0_1 + 2 | 0) >> 1] = $16;
break label$8;
}
HEAP32[$3_1 >> 2] = $17;
HEAP32[($3_1 + 8 | 0) >> 2] = $7_1;
HEAP32[($3_1 + 4 | 0) >> 2] = $16;
}
$9_1 = $9_1 + $15 | 0;
$18 = ($5_1 + 64 | 0) + ($6_1 << 3 | 0) | 0;
HEAP32[$18 >> 2] = $7_1;
HEAP32[($18 + 4 | 0) >> 2] = $16;
HEAP32[($5_1 + ($4_1 << 2 | 0) | 0) >> 2] = $7_1;
$6_1 = ($6_1 + 1 | 0) & 15 | 0;
$16 = ($5_1 + 64 | 0) + ($6_1 << 3 | 0) | 0;
HEAP32[$16 >> 2] = $17;
HEAP32[($16 + 4 | 0) >> 2] = $7_1;
$4_1 = $4_1 + $15 | 0;
$6_1 = $6_1 + 1 | 0;
break label$5;
}
label$10 : {
label$11 : {
if (($15 | 0) == (15 | 0)) {
break label$11
}
$13 = (($13 + $15 | 0) + ($15 ^ -4 | 0) | 0) + 1 | 0;
break label$10;
}
$15 = HEAP8[$11 >> 0] | 0;
$7_1 = $15 & 255 | 0;
label$12 : {
label$13 : {
if (($15 | 0) <= (-1 | 0)) {
break label$13
}
$11 = $11 + 1 | 0;
break label$12;
}
$15 = HEAP8[($11 + 1 | 0) >> 0] | 0;
$7_1 = ($15 & 127 | 0) << 7 | 0 | ($7_1 & 127 | 0) | 0;
label$14 : {
if (($15 | 0) <= (-1 | 0)) {
break label$14
}
$11 = $11 + 2 | 0;
break label$12;
}
$15 = HEAP8[($11 + 2 | 0) >> 0] | 0;
$7_1 = ($15 & 127 | 0) << 14 | 0 | $7_1 | 0;
label$15 : {
if (($15 | 0) <= (-1 | 0)) {
break label$15
}
$11 = $11 + 3 | 0;
break label$12;
}
$15 = HEAP8[($11 + 3 | 0) >> 0] | 0;
$7_1 = ($15 & 127 | 0) << 21 | 0 | $7_1 | 0;
label$16 : {
if (($15 | 0) <= (-1 | 0)) {
break label$16
}
$11 = $11 + 4 | 0;
break label$12;
}
$7_1 = (HEAPU8[($11 + 4 | 0) >> 0] | 0) << 28 | 0 | $7_1 | 0;
$11 = $11 + 5 | 0;
}
$13 = (($7_1 >>> 1 | 0) ^ (0 - ($7_1 & 1 | 0) | 0) | 0) + $13 | 0;
}
label$17 : {
label$18 : {
if (($2_1 | 0) != (2 | 0)) {
break label$18
}
HEAP16[$0_1 >> 1] = $17;
HEAP16[($0_1 + 4 | 0) >> 1] = $13;
HEAP16[($0_1 + 2 | 0) >> 1] = $16;
break label$17;
}
HEAP32[$3_1 >> 2] = $17;
HEAP32[($3_1 + 8 | 0) >> 2] = $13;
HEAP32[($3_1 + 4 | 0) >> 2] = $16;
}
$7_1 = ($5_1 + 64 | 0) + ($6_1 << 3 | 0) | 0;
HEAP32[$7_1 >> 2] = $13;
HEAP32[($7_1 + 4 | 0) >> 2] = $16;
HEAP32[($5_1 + ($4_1 << 2 | 0) | 0) >> 2] = $13;
$6_1 = ($6_1 + 1 | 0) & 15 | 0;
$7_1 = ($5_1 + 64 | 0) + ($6_1 << 3 | 0) | 0;
HEAP32[$7_1 >> 2] = $17;
HEAP32[($7_1 + 4 | 0) >> 2] = $13;
$4_1 = $4_1 + 1 | 0;
$6_1 = $6_1 + 1 | 0;
break label$5;
}
label$19 : {
if ($7_1 >>> 0 > 253 >>> 0) {
break label$19
}
$15 = HEAPU8[($10 + ($7_1 & 15 | 0) | 0) >> 0] | 0;
$16 = $15 >>> 4 | 0;
$17 = $9_1 + 1 | 0;
$7_1 = (wasm2js_i32$0 = HEAP32[($5_1 + ((($4_1 - $16 | 0) & 15 | 0) << 2 | 0) | 0) >> 2] | 0, wasm2js_i32$1 = $17, wasm2js_i32$2 = $16, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$18 = !$16;
$17 = $17 + $18 | 0;
$16 = $15 & 15 | 0;
$15 = (wasm2js_i32$0 = HEAP32[($5_1 + ((($4_1 - $15 | 0) & 15 | 0) << 2 | 0) | 0) >> 2] | 0, wasm2js_i32$1 = $17, wasm2js_i32$2 = $16, wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1);
$16 = !$16;
label$20 : {
label$21 : {
if (($2_1 | 0) != (2 | 0)) {
break label$21
}
HEAP16[$0_1 >> 1] = $9_1;
HEAP16[($0_1 + 4 | 0) >> 1] = $15;
HEAP16[($0_1 + 2 | 0) >> 1] = $7_1;
break label$20;
}
HEAP32[$3_1 >> 2] = $9_1;
HEAP32[($3_1 + 8 | 0) >> 2] = $15;
HEAP32[($3_1 + 4 | 0) >> 2] = $7_1;
}
HEAP32[($5_1 + ($4_1 << 2 | 0) | 0) >> 2] = $9_1;
$19 = ($5_1 + 64 | 0) + ($6_1 << 3 | 0) | 0;
HEAP32[$19 >> 2] = $7_1;
HEAP32[($19 + 4 | 0) >> 2] = $9_1;
$4_1 = $4_1 + 1 | 0;
HEAP32[($5_1 + (($4_1 & 15 | 0) << 2 | 0) | 0) >> 2] = $7_1;
$19 = ($5_1 + 64 | 0) + ((($6_1 + 1 | 0) & 15 | 0) << 3 | 0) | 0;
HEAP32[$19 >> 2] = $15;
HEAP32[($19 + 4 | 0) >> 2] = $7_1;
$4_1 = ($4_1 + $18 | 0) & 15 | 0;
HEAP32[($5_1 + ($4_1 << 2 | 0) | 0) >> 2] = $15;
$6_1 = ($6_1 + 2 | 0) & 15 | 0;
$7_1 = ($5_1 + 64 | 0) + ($6_1 << 3 | 0) | 0;
HEAP32[$7_1 >> 2] = $9_1;
HEAP32[($7_1 + 4 | 0) >> 2] = $15;
$6_1 = $6_1 + 1 | 0;
$4_1 = $4_1 + $16 | 0;
$9_1 = $17 + $16 | 0;
break label$5;
}
$19 = HEAPU8[$11 >> 0] | 0;
$16 = $19 ? $9_1 : 0;
$20 = ($7_1 | 0) == (254 | 0);
$7_1 = $16 + $20 | 0;
$17 = $19 & 15 | 0;
label$22 : {
label$23 : {
$18 = $19 >>> 4 | 0;
if ($18) {
break label$23
}
$15 = $7_1 + 1 | 0;
break label$22;
}
$15 = $7_1;
$7_1 = HEAP32[($5_1 + ((($4_1 - $18 | 0) & 15 | 0) << 2 | 0) | 0) >> 2] | 0;
}
label$24 : {
label$25 : {
if ($17) {
break label$25
}
$9_1 = $15 + 1 | 0;
break label$24;
}
$9_1 = $15;
$15 = HEAP32[($5_1 + ((($4_1 - $19 | 0) & 15 | 0) << 2 | 0) | 0) >> 2] | 0;
}
label$26 : {
label$27 : {
if (!$20) {
break label$27
}
$19 = $11 + 1 | 0;
break label$26;
}
$19 = HEAP8[($11 + 1 | 0) >> 0] | 0;
$16 = $19 & 255 | 0;
label$28 : {
label$29 : {
if (($19 | 0) <= (-1 | 0)) {
break label$29
}
$19 = $11 + 2 | 0;
break label$28;
}
$19 = HEAP8[($11 + 2 | 0) >> 0] | 0;
$16 = ($19 & 127 | 0) << 7 | 0 | ($16 & 127 | 0) | 0;
label$30 : {
if (($19 | 0) <= (-1 | 0)) {
break label$30
}
$19 = $11 + 3 | 0;
break label$28;
}
$19 = HEAP8[($11 + 3 | 0) >> 0] | 0;
$16 = ($19 & 127 | 0) << 14 | 0 | $16 | 0;
label$31 : {
if (($19 | 0) <= (-1 | 0)) {
break label$31
}
$19 = $11 + 4 | 0;
break label$28;
}
$19 = HEAP8[($11 + 4 | 0) >> 0] | 0;
$16 = ($19 & 127 | 0) << 21 | 0 | $16 | 0;
label$32 : {
if (($19 | 0) <= (-1 | 0)) {
break label$32
}
$19 = $11 + 5 | 0;
break label$28;
}
$19 = $11 + 6 | 0;
$16 = (HEAPU8[($11 + 5 | 0) >> 0] | 0) << 28 | 0 | $16 | 0;
}
$13 = (($16 >>> 1 | 0) ^ (0 - ($16 & 1 | 0) | 0) | 0) + $13 | 0;
$16 = $13;
}
label$33 : {
label$34 : {
if (($18 | 0) == (15 | 0)) {
break label$34
}
$20 = $19;
break label$33;
}
$11 = HEAP8[$19 >> 0] | 0;
$7_1 = $11 & 255 | 0;
label$35 : {
label$36 : {
if (($11 | 0) <= (-1 | 0)) {
break label$36
}
$20 = $19 + 1 | 0;
break label$35;
}
$11 = HEAP8[($19 + 1 | 0) >> 0] | 0;
$7_1 = ($11 & 127 | 0) << 7 | 0 | ($7_1 & 127 | 0) | 0;
label$37 : {
if (($11 | 0) <= (-1 | 0)) {
break label$37
}
$20 = $19 + 2 | 0;
break label$35;
}
$11 = HEAP8[($19 + 2 | 0) >> 0] | 0;
$7_1 = ($11 & 127 | 0) << 14 | 0 | $7_1 | 0;
label$38 : {
if (($11 | 0) <= (-1 | 0)) {
break label$38
}
$20 = $19 + 3 | 0;
break label$35;
}
$11 = HEAP8[($19 + 3 | 0) >> 0] | 0;
$7_1 = ($11 & 127 | 0) << 21 | 0 | $7_1 | 0;
label$39 : {
if (($11 | 0) <= (-1 | 0)) {
break label$39
}
$20 = $19 + 4 | 0;
break label$35;
}
$20 = $19 + 5 | 0;
$7_1 = (HEAPU8[($19 + 4 | 0) >> 0] | 0) << 28 | 0 | $7_1 | 0;
}
$13 = (($7_1 >>> 1 | 0) ^ (0 - ($7_1 & 1 | 0) | 0) | 0) + $13 | 0;
$7_1 = $13;
}
label$40 : {
label$41 : {
if (($17 | 0) == (15 | 0)) {
break label$41
}
$11 = $20;
break label$40;
}
$11 = HEAP8[$20 >> 0] | 0;
$15 = $11 & 255 | 0;
label$42 : {
label$43 : {
if (($11 | 0) <= (-1 | 0)) {
break label$43
}
$11 = $20 + 1 | 0;
break label$42;
}
$11 = HEAP8[($20 + 1 | 0) >> 0] | 0;
$15 = ($11 & 127 | 0) << 7 | 0 | ($15 & 127 | 0) | 0;
label$44 : {
if (($11 | 0) <= (-1 | 0)) {
break label$44
}
$11 = $20 + 2 | 0;
break label$42;
}
$11 = HEAP8[($20 + 2 | 0) >> 0] | 0;
$15 = ($11 & 127 | 0) << 14 | 0 | $15 | 0;
label$45 : {
if (($11 | 0) <= (-1 | 0)) {
break label$45
}
$11 = $20 + 3 | 0;
break label$42;
}
$11 = HEAP8[($20 + 3 | 0) >> 0] | 0;
$15 = ($11 & 127 | 0) << 21 | 0 | $15 | 0;
label$46 : {
if (($11 | 0) <= (-1 | 0)) {
break label$46
}
$11 = $20 + 4 | 0;
break label$42;
}
$11 = $20 + 5 | 0;
$15 = (HEAPU8[($20 + 4 | 0) >> 0] | 0) << 28 | 0 | $15 | 0;
}
$13 = (($15 >>> 1 | 0) ^ (0 - ($15 & 1 | 0) | 0) | 0) + $13 | 0;
$15 = $13;
}
label$47 : {
label$48 : {
if (($2_1 | 0) != (2 | 0)) {
break label$48
}
HEAP16[$0_1 >> 1] = $16;
HEAP16[($0_1 + 4 | 0) >> 1] = $15;
HEAP16[($0_1 + 2 | 0) >> 1] = $7_1;
break label$47;
}
HEAP32[$3_1 >> 2] = $16;
HEAP32[($3_1 + 8 | 0) >> 2] = $15;
HEAP32[($3_1 + 4 | 0) >> 2] = $7_1;
}
$19 = ($5_1 + 64 | 0) + ($6_1 << 3 | 0) | 0;
HEAP32[$19 >> 2] = $7_1;
HEAP32[($19 + 4 | 0) >> 2] = $16;
HEAP32[($5_1 + ($4_1 << 2 | 0) | 0) >> 2] = $16;
$19 = ($5_1 + 64 | 0) + ((($6_1 + 1 | 0) & 15 | 0) << 3 | 0) | 0;
HEAP32[$19 >> 2] = $15;
HEAP32[($19 + 4 | 0) >> 2] = $7_1;
$4_1 = $4_1 + 1 | 0;
HEAP32[($5_1 + (($4_1 & 15 | 0) << 2 | 0) | 0) >> 2] = $7_1;
$7_1 = ($5_1 + 64 | 0) + ((($6_1 + 2 | 0) & 15 | 0) << 3 | 0) | 0;
HEAP32[$7_1 >> 2] = $16;
HEAP32[($7_1 + 4 | 0) >> 2] = $15;
$4_1 = $4_1 + (!$18 | ($18 | 0) == (15 | 0) | 0) | 0;
HEAP32[($5_1 + (($4_1 & 15 | 0) << 2 | 0) | 0) >> 2] = $15;
$4_1 = $4_1 + (!$17 | ($17 | 0) == (15 | 0) | 0) | 0;
$6_1 = $6_1 + 3 | 0;
}
$8_1 = $8_1 + 1 | 0;
$0_1 = $0_1 + 6 | 0;
$3_1 = $3_1 + 12 | 0;
$6_1 = $6_1 & 15 | 0;
$4_1 = $4_1 & 15 | 0;
$14 = $14 + 3 | 0;
if ($14 >>> 0 < $1_1 >>> 0) {
continue label$3
}
break label$3;
};
}
$6_1 = ($11 | 0) == ($10 | 0) ? 0 : -3;
}
global$0 = $5_1 + 192 | 0;
return $6_1 | 0;
}
function $3($0_1, $1_1, $2_1, $3_1, $4_1) {
$0_1 = $0_1 | 0;
$1_1 = $1_1 | 0;
$2_1 = $2_1 | 0;
$3_1 = $3_1 | 0;
$4_1 = $4_1 | 0;
var $6_1 = 0, $5_1 = 0, $164 = 0;
$5_1 = global$0 - 16 | 0;
$6_1 = -2;
label$1 : {
if (($1_1 + 5 | 0) >>> 0 > $4_1 >>> 0) {
break label$1
}
$6_1 = -1;
if (((HEAPU8[$3_1 >> 0] | 0) & 254 | 0 | 0) != (208 | 0)) {
break label$1
}
HEAP32[($5_1 + 8 | 0) >> 2] = 0;
HEAP32[($5_1 + 12 | 0) >> 2] = 0;
$6_1 = $3_1 + 1 | 0;
$3_1 = ($3_1 + $4_1 | 0) + -4 | 0;
label$2 : {
if (!$1_1) {
break label$2
}
label$3 : {
if (($2_1 | 0) == (2 | 0)) {
break label$3
}
label$4 : while (1) {
label$5 : {
if ($6_1 >>> 0 < $3_1 >>> 0) {
break label$5
}
return -2 | 0;
}
$2_1 = HEAP8[$6_1 >> 0] | 0;
$4_1 = $2_1 & 255 | 0;
label$6 : {
label$7 : {
if (($2_1 | 0) <= (-1 | 0)) {
break label$7
}
$6_1 = $6_1 + 1 | 0;
break label$6;
}
$2_1 = HEAP8[($6_1 + 1 | 0) >> 0] | 0;
$4_1 = ($2_1 & 127 | 0) << 7 | 0 | ($4_1 & 127 | 0) | 0;
label$8 : {
if (($2_1 | 0) <= (-1 | 0)) {
break label$8
}
$6_1 = $6_1 + 2 | 0;
break label$6;
}
$2_1 = HEAP8[($6_1 + 2 | 0) >> 0] | 0;
$4_1 = ($2_1 & 127 | 0) << 14 | 0 | $4_1 | 0;
label$9 : {
if (($2_1 | 0) <= (-1 | 0)) {
break label$9
}
$6_1 = $6_1 + 3 | 0;
break label$6;
}
$2_1 = HEAP8[($6_1 + 3 | 0) >> 0] | 0;
$4_1 = ($2_1 & 127 | 0) << 21 | 0 | $4_1 | 0;
label$10 : {
if (($2_1 | 0) <= (-1 | 0)) {
break label$10
}
$6_1 = $6_1 + 4 | 0;
break label$6;
}
$4_1 = (HEAPU8[($6_1 + 4 | 0) >> 0] | 0) << 28 | 0 | $4_1 | 0;
$6_1 = $6_1 + 5 | 0;
}
$2_1 = $5_1 + 8 | 0 | (($4_1 & 1 | 0) << 2 | 0) | 0;
$4_1 = (($4_1 >>> 2 | 0) ^ (0 - (($4_1 >>> 1 | 0) & 1 | 0) | 0) | 0) + (HEAP32[$2_1 >> 2] | 0) | 0;
HEAP32[$2_1 >> 2] = $4_1;
HEAP32[$0_1 >> 2] = $4_1;
$0_1 = $0_1 + 4 | 0;
$1_1 = $1_1 + -1 | 0;
if ($1_1) {
continue label$4
}
break label$2;
};
}
label$11 : while (1) {
label$12 : {
if ($6_1 >>> 0 < $3_1 >>> 0) {
break label$12
}
return -2 | 0;
}
$2_1 = HEAP8[$6_1 >> 0] | 0;
$4_1 = $2_1 & 255 | 0;
label$13 : {
label$14 : {
if (($2_1 | 0) <= (-1 | 0)) {
break label$14
}
$6_1 = $6_1 + 1 | 0;
break label$13;
}
$2_1 = HEAP8[($6_1 + 1 | 0) >> 0] | 0;
$4_1 = ($2_1 & 127 | 0) << 7 | 0 | ($4_1 & 127 | 0) | 0;
label$15 : {
if (($2_1 | 0) <= (-1 | 0)) {
break label$15
}
$6_1 = $6_1 + 2 | 0;
break label$13;
}
$2_1 = HEAP8[($6_1 + 2 | 0) >> 0] | 0;
$4_1 = ($2_1 & 127 | 0) << 14 | 0 | $4_1 | 0;
label$16 : {
if (($2_1 | 0) <= (-1 | 0)) {
break label$16
}
$6_1 = $6_1 + 3 | 0;
break label$13;
}
$2_1 = HEAP8[($6_1 + 3 | 0) >> 0] | 0;
$4_1 = ($2_1 & 127 | 0) << 21 | 0 | $4_1 | 0;
label$17 : {
if (($2_1 | 0) <= (-1 | 0)) {
break label$17
}
$6_1 = $6_1 + 4 | 0;
break label$13;
}
$4_1 = (HEAPU8[($6_1 + 4 | 0) >> 0] | 0) << 28 | 0 | $4_1 | 0;
$6_1 = $6_1 + 5 | 0;
}
$164 = ($4_1 >>> 2 | 0) ^ (0 - (($4_1 >>> 1 | 0) & 1 | 0) | 0) | 0;
$4_1 = $5_1 + 8 | 0 | (($4_1 & 1 | 0) << 2 | 0) | 0;
$2_1 = $164 + (HEAP32[$4_1 >> 2] | 0) | 0;
HEAP16[$0_1 >> 1] = $2_1;
HEAP32[$4_1 >> 2] = $2_1;
$0_1 = $0_1 + 2 | 0;
$1_1 = $1_1 + -1 | 0;
if ($1_1) {
continue label$11
}
break label$11;
};
}
$6_1 = ($6_1 | 0) == ($3_1 | 0) ? 0 : -3;
}
return $6_1 | 0;
}
function $4($0_1, $1_1, $2_1) {
$0_1 = $0_1 | 0;
$1_1 = $1_1 | 0;
$2_1 = $2_1 | 0;
var $8_1 = Math_fround(0), $10 = Math_fround(0), $4_1 = Math_fround(0), $7_1 = Math_fround(0), $3_1 = 0, $5_1 = 0, $6_1 = 0, $9_1 = 0, $11 = Math_fround(0);
label$1 : {
label$2 : {
if (($2_1 | 0) != (4 | 0)) {
break label$2
}
if (!$1_1) {
break label$1
}
label$3 : while (1) {
label$4 : {
label$5 : {
$2_1 = $0_1 + 2 | 0;
$3_1 = HEAP8[$0_1 >> 0] | 0;
$4_1 = Math_fround($3_1 | 0);
$5_1 = $0_1 + 1 | 0;
$6_1 = HEAP8[$5_1 >> 0] | 0;
$7_1 = Math_fround($6_1 | 0);
$8_1 = Math_fround(Math_fround(Math_fround(HEAP8[$2_1 >> 0] | 0 | 0) - Math_fround(Math_abs($4_1))) - Math_fround(Math_abs($7_1)));
$9_1 = $8_1 >= Math_fround(0.0);
$10 = $9_1 ? Math_fround(0.0) : $8_1;
$11 = Math_fround(-$10);
$4_1 = Math_fround((($3_1 | 0) > (-1 | 0) ? $10 : $11) + $4_1);
$10 = Math_fround((($6_1 | 0) > (-1 | 0) ? $10 : $11) + $7_1);
$7_1 = Math_fround(Math_fround(127.0) / Math_fround(Math_sqrt(Math_fround(Math_fround($8_1 * $8_1) + Math_fround(Math_fround($4_1 * $4_1) + Math_fround($10 * $10))))));
$8_1 = Math_fround(($9_1 ? Math_fround(.5) : Math_fround(-.5)) + Math_fround($8_1 * $7_1));
if (!(Math_fround(Math_abs($8_1)) < Math_fround(2147483648.0))) {
break label$5
}
$3_1 = ~~$8_1;
break label$4;
}
$3_1 = -2147483648;
}
HEAP8[$2_1 >> 0] = $3_1;
label$6 : {
label$7 : {
$8_1 = Math_fround(($10 >= Math_fround(0.0) ? Math_fround(.5) : Math_fround(-.5)) + Math_fround($10 * $7_1));
if (!(Math_fround(Math_abs($8_1)) < Math_fround(2147483648.0))) {
break label$7
}
$2_1 = ~~$8_1;
break label$6;
}
$2_1 = -2147483648;
}
HEAP8[$5_1 >> 0] = $2_1;
label$8 : {
label$9 : {
$8_1 = Math_fround(($4_1 >= Math_fround(0.0) ? Math_fround(.5) : Math_fround(-.5)) + Math_fround($4_1 * $7_1));
if (!(Math_fround(Math_abs($8_1)) < Math_fround(2147483648.0))) {
break label$9
}
$2_1 = ~~$8_1;
break label$8;
}
$2_1 = -2147483648;
}
HEAP8[$0_1 >> 0] = $2_1;
$0_1 = $0_1 + 4 | 0;
$1_1 = $1_1 + -1 | 0;
if ($1_1) {
continue label$3
}
break label$1;
};
}
if (!$1_1) {
break label$1
}
label$10 : while (1) {
label$11 : {
label$12 : {
$2_1 = $0_1 + 4 | 0;
$3_1 = HEAP16[$0_1 >> 1] | 0;
$4_1 = Math_fround($3_1 | 0);
$5_1 = $0_1 + 2 | 0;
$6_1 = HEAP16[$5_1 >> 1] | 0;
$7_1 = Math_fround($6_1 | 0);
$8_1 = Math_fround(Math_fround(Math_fround(HEAP16[$2_1 >> 1] | 0 | 0) - Math_fround(Math_abs($4_1))) - Math_fround(Math_abs($7_1)));
$9_1 = $8_1 >= Math_fround(0.0);
$10 = $9_1 ? Math_fround(0.0) : $8_1;
$11 = Math_fround(-$10);
$4_1 = Math_fround((($3_1 | 0) > (-1 | 0) ? $10 : $11) + $4_1);
$10 = Math_fround((($6_1 | 0) > (-1 | 0) ? $10 : $11) + $7_1);
$7_1 = Math_fround(Math_fround(32767.0) / Math_fround(Math_sqrt(Math_fround(Math_fround($8_1 * $8_1) + Math_fround(Math_fround($4_1 * $4_1) + Math_fround($10 * $10))))));
$8_1 = Math_fround(($9_1 ? Math_fround(.5) : Math_fround(-.5)) + Math_fround($8_1 * $7_1));
if (!(Math_fround(Math_abs($8_1)) < Math_fround(2147483648.0))) {
break label$12
}
$3_1 = ~~$8_1;
break label$11;
}
$3_1 = -2147483648;
}
HEAP16[$2_1 >> 1] = $3_1;
label$13 : {
label$14 : {
$8_1 = Math_fround(($10 >= Math_fround(0.0) ? Math_fround(.5) : Math_fround(-.5)) + Math_fround($10 * $7_1));
if (!(Math_fround(Math_abs($8_1)) < Math_fround(2147483648.0))) {
break label$14
}
$2_1 = ~~$8_1;
break label$13;
}
$2_1 = -2147483648;
}
HEAP16[$5_1 >> 1] = $2_1;
label$15 : {
label$16 : {
$8_1 = Math_fround(($4_1 >= Math_fround(0.0) ? Math_fround(.5) : Math_fround(-.5)) + Math_fround($4_1 * $7_1));
if (!(Math_fround(Math_abs($8_1)) < Math_fround(2147483648.0))) {
break label$16
}
$2_1 = ~~$8_1;
break label$15;
}
$2_1 = -2147483648;
}
HEAP16[$0_1 >> 1] = $2_1;
$0_1 = $0_1 + 8 | 0;
$1_1 = $1_1 + -1 | 0;
if ($1_1) {
continue label$10
}
break label$10;
};
}
}
function $5($0_1, $1_1, $2_1) {
$0_1 = $0_1 | 0;
$1_1 = $1_1 | 0;
$2_1 = $2_1 | 0;
var $7_1 = Math_fround(0), $6_1 = Math_fround(0), $8_1 = Math_fround(0), $10 = 0, $3_1 = 0, $4_1 = 0, $5_1 = 0, $12 = Math_fround(0), $11 = 0, $9_1 = 0;
label$1 : {
if (!$1_1) {
break label$1
}
$3_1 = 0;
$4_1 = $0_1;
label$2 : while (1) {
label$3 : {
label$4 : {
$5_1 = HEAP16[($4_1 + 6 | 0) >> 1] | 0;
$6_1 = Math_fround(Math_fround(.7071067690849304) / Math_fround($5_1 | 3 | 0 | 0));
$7_1 = Math_fround($6_1 * Math_fround(HEAP16[$4_1 >> 1] | 0 | 0));
$8_1 = Math_fround(Math_fround($7_1 * Math_fround(32767.0)) + ($7_1 >= Math_fround(0.0) ? Math_fround(.5) : Math_fround(-.5)));
if (!(Math_fround(Math_abs($8_1)) < Math_fround(2147483648.0))) {
break label$4
}
$9_1 = ~~$8_1;
break label$3;
}
$9_1 = -2147483648;
}
$10 = HEAP16[($4_1 + 4 | 0) >> 1] | 0;
$11 = HEAP16[($4_1 + 2 | 0) >> 1] | 0;
HEAP16[($0_1 + ((($5_1 + 1 | 0) & 3 | 0 | $3_1 | 0) << 1 | 0) | 0) >> 1] = $9_1;
label$5 : {
label$6 : {
$8_1 = Math_fround($6_1 * Math_fround($11 | 0));
$12 = Math_fround(Math_fround($8_1 * Math_fround(32767.0)) + ($8_1 >= Math_fround(0.0) ? Math_fround(.5) : Math_fround(-.5)));
if (!(Math_fround(Math_abs($12)) < Math_fround(2147483648.0))) {
break label$6
}
$11 = ~~$12;
break label$5;
}
$11 = -2147483648;
}
HEAP16[($0_1 + ((($5_1 + 2 | 0) & 3 | 0 | $3_1 | 0) << 1 | 0) | 0) >> 1] = $11;
label$7 : {
label$8 : {
$6_1 = Math_fround($6_1 * Math_fround($10 | 0));
$12 = Math_fround(Math_fround($6_1 * Math_fround(32767.0)) + ($6_1 >= Math_fround(0.0) ? Math_fround(.5) : Math_fround(-.5)));
if (!(Math_fround(Math_abs($12)) < Math_fround(2147483648.0))) {
break label$8
}
$10 = ~~$12;
break label$7;
}
$10 = -2147483648;
}
HEAP16[($0_1 + ((($5_1 + -1 | 0) & 3 | 0 | $3_1 | 0) << 1 | 0) | 0) >> 1] = $10;
label$9 : {
label$10 : {
$7_1 = Math_fround(Math_fround(Math_fround(Math_fround(1.0) - Math_fround($7_1 * $7_1)) - Math_fround($8_1 * $8_1)) - Math_fround($6_1 * $6_1));
$7_1 = Math_fround(Math_fround(Math_fround(Math_sqrt($7_1 >= Math_fround(0.0) ? $7_1 : Math_fround(0.0))) * Math_fround(32767.0)) + Math_fround(.5));
if (!(Math_fround(Math_abs($7_1)) < Math_fround(2147483648.0))) {
break label$10
}
$10 = ~~$7_1;
break label$9;
}
$10 = -2147483648;
}
HEAP16[($0_1 + (($5_1 & 3 | 0 | $3_1 | 0) << 1 | 0) | 0) >> 1] = $10;
$4_1 = $4_1 + 8 | 0;
$3_1 = $3_1 + 4 | 0;
$1_1 = $1_1 + -1 | 0;
if ($1_1) {
continue label$2
}
break label$2;
};
}
}
function $6($0_1, $1_1, $2_1) {
$0_1 = $0_1 | 0;
$1_1 = $1_1 | 0;
$2_1 = $2_1 | 0;
label$1 : {
$1_1 = Math_imul($2_1 >>> 2 | 0, $1_1);
if (!$1_1) {
break label$1
}
label$2 : while (1) {
$2_1 = HEAP32[$0_1 >> 2] | 0;
HEAPF32[$0_1 >> 2] = Math_fround(Math_fround(($2_1 << 8 | 0) >> 8 | 0 | 0) * (wasm2js_scratch_store_i32(2, (($2_1 >> 24 | 0) << 23 | 0) + 1065353216 | 0), wasm2js_scratch_load_f32()));
$0_1 = $0_1 + 4 | 0;
$1_1 = $1_1 + -1 | 0;
if ($1_1) {
continue label$2
}
break label$2;
};
}
}
function $7($0_1) {
$0_1 = $0_1 | 0;
var $1_1 = 0, $2_1 = 0, $3_1 = 0;
$1_1 = HEAP32[(0 + 1024 | 0) >> 2] | 0;
$0_1 = $1_1 + (($0_1 + 3 | 0) & -4 | 0) | 0;
HEAP32[(0 + 1024 | 0) >> 2] = $0_1;
label$1 : {
label$2 : {
$2_1 = __wasm_memory_size() << 16 | 0;
if ($0_1 >>> 0 <= $2_1 >>> 0) {
break label$2
}
$3_1 = -1;
if ((__wasm_memory_grow((($0_1 - $2_1 | 0) + 65535 | 0) >>> 16 | 0 | 0) | 0) == (-1 | 0)) {
break label$1
}
}
$3_1 = $1_1;
}
return $3_1 | 0;
}
function $8($0_1, $1_1, $2_1) {
$0_1 = $0_1 | 0;
$1_1 = $1_1 | 0;
$2_1 = $2_1 | 0;
var $3_1 = 0;
label$1 : {
label$2 : {
if (!(($1_1 | $0_1 | 0) & 3 | 0)) {
break label$2
}
$3_1 = $0_1;
break label$1;
}
label$3 : {
label$4 : {
if ($2_1 >>> 0 >= 16 >>> 0) {
break label$4
}
$3_1 = $0_1;
break label$3;
}
$3_1 = $0_1;
label$5 : while (1) {
HEAP32[$3_1 >> 2] = HEAP32[$1_1 >> 2] | 0;
HEAP32[($3_1 + 4 | 0) >> 2] = HEAP32[($1_1 + 4 | 0) >> 2] | 0;
HEAP32[($3_1 + 8 | 0) >> 2] = HEAP32[($1_1 + 8 | 0) >> 2] | 0;
HEAP32[($3_1 + 12 | 0) >> 2] = HEAP32[($1_1 + 12 | 0) >> 2] | 0;
$3_1 = $3_1 + 16 | 0;
$1_1 = $1_1 + 16 | 0;
$2_1 = $2_1 + -16 | 0;
if ($2_1 >>> 0 > 15 >>> 0) {
continue label$5
}
break label$5;
};
}
if ($2_1 >>> 0 < 4 >>> 0) {
break label$1
}
label$6 : while (1) {
HEAP32[$3_1 >> 2] = HEAP32[$1_1 >> 2] | 0;
$1_1 = $1_1 + 4 | 0;
$3_1 = $3_1 + 4 | 0;
$2_1 = $2_1 + -4 | 0;
if ($2_1 >>> 0 > 3 >>> 0) {
continue label$6
}
break label$6;
};
}
label$7 : {
if (!$2_1) {
break label$7
}
label$8 : while (1) {
HEAP8[$3_1 >> 0] = HEAPU8[$1_1 >> 0] | 0;
$3_1 = $3_1 + 1 | 0;
$1_1 = $1_1 + 1 | 0;
$2_1 = $2_1 + -1 | 0;
if ($2_1) {
continue label$8
}
break label$8;
};
}
return $0_1 | 0;
}
function $9($0_1, $1_1, $2_1) {
$0_1 = $0_1 | 0;
$1_1 = $1_1 | 0;
$2_1 = $2_1 | 0;
var $3_1 = 0, $4_1 = 0;
label$1 : {
label$2 : {
if (!($0_1 & 3 | 0)) {
break label$2
}
$3_1 = $0_1;
break label$1;
}
$4_1 = Math_imul($1_1 & 255 | 0, 16843009);
label$3 : {
label$4 : {
if ($2_1 >>> 0 >= 16 >>> 0) {
break label$4
}
$3_1 = $0_1;
break label$3;
}
$3_1 = $0_1;
label$5 : while (1) {
HEAP32[$3_1 >> 2] = $4_1;
HEAP32[($3_1 + 12 | 0) >> 2] = $4_1;
HEAP32[($3_1 + 8 | 0) >> 2] = $4_1;
HEAP32[($3_1 + 4 | 0) >> 2] = $4_1;
$3_1 = $3_1 + 16 | 0;
$2_1 = $2_1 + -16 | 0;
if ($2_1 >>> 0 > 15 >>> 0) {
continue label$5
}
break label$5;
};
}
if ($2_1 >>> 0 < 4 >>> 0) {
break label$1
}
label$6 : while (1) {
HEAP32[$3_1 >> 2] = $4_1;
$3_1 = $3_1 + 4 | 0;
$2_1 = $2_1 + -4 | 0;
if ($2_1 >>> 0 > 3 >>> 0) {
continue label$6
}
break label$6;
};
}
label$7 : {
if (!$2_1) {
break label$7
}
label$8 : while (1) {
HEAP8[$3_1 >> 0] = $1_1;
$3_1 = $3_1 + 1 | 0;
$2_1 = $2_1 + -1 | 0;
if ($2_1) {
continue label$8
}
break label$8;
};
}
return $0_1 | 0;
}
bufferView = HEAPU8;
initActiveSegments(env);
function __wasm_memory_size() {
return buffer.byteLength / 65536 | 0;
}
function __wasm_memory_grow(pagesToAdd) {
pagesToAdd = pagesToAdd | 0;
var oldPages = __wasm_memory_size() | 0;
var newPages = oldPages + pagesToAdd | 0;
if ((oldPages < newPages) && (newPages < 65536)) {
var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536));
var newHEAP8 = new Int8Array(newBuffer);
newHEAP8.set(HEAP8);
HEAP8 = new Int8Array(newBuffer);
HEAP16 = new Int16Array(newBuffer);
HEAP32 = new Int32Array(newBuffer);
HEAPU8 = new Uint8Array(newBuffer);
HEAPU16 = new Uint16Array(newBuffer);
HEAPU32 = new Uint32Array(newBuffer);
HEAPF32 = new Float32Array(newBuffer);
HEAPF64 = new Float64Array(newBuffer);
buffer = newBuffer;
bufferView = HEAPU8;
}
return oldPages;
}
return {
"memory": Object.create(Object.prototype, {
"grow": {
"value": __wasm_memory_grow
},
"buffer": {
"get": function () {
return buffer;
}
}
}),
"__wasm_call_ctors": $0,
"meshopt_decodeVertexBuffer": $1,
"meshopt_decodeIndexBuffer": $2,
"meshopt_decodeIndexSequence": $3,
"meshopt_decodeFilterOct": $4,
"meshopt_decodeFilterQuat": $5,
"meshopt_decodeFilterExp": $6,
"sbrk": $7
};
}
var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }
});
export var memory = retasmFunc.memory;
export var __wasm_call_ctors = retasmFunc.__wasm_call_ctors;
export var meshopt_decodeVertexBuffer = retasmFunc.meshopt_decodeVertexBuffer;
export var meshopt_decodeIndexBuffer = retasmFunc.meshopt_decodeIndexBuffer;
export var meshopt_decodeIndexSequence = retasmFunc.meshopt_decodeIndexSequence;
export var meshopt_decodeFilterOct = retasmFunc.meshopt_decodeFilterOct;
export var meshopt_decodeFilterQuat = retasmFunc.meshopt_decodeFilterQuat;
export var meshopt_decodeFilterExp = retasmFunc.meshopt_decodeFilterExp;
export var sbrk = retasmFunc.sbrk;
// This file is part of meshoptimizer library and is distributed under the terms of MIT License.
// Copyright (C) 2016-2020, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
var MeshoptDecoder = (function(path) {
// Built with clang version 11.0.0 (https://github.com/llvm/llvm-project.git 0160ad802e899c2922bc9b29564080c22eb0908c)
// Built from meshoptimizer 0.14
if (typeof WXWebAssembly !== 'object') {
// This module requires WebAssembly to function
return {
supported: false
};
}
var instance;
var readyResolve;
var promise = new Promise(resovle => {
readyResolve = resovle;
});
function setWasmPath(path) {
WXWebAssembly.instantiate(path, {}).then(function(result) {
instance = result.instance;
instance.exports.__wasm_call_ctors();
readyResolve();
});
}
function decode(fun, target, count, size, source, filter) {
var sbrk = instance.exports.sbrk;
var count4 = (count + 3) & ~3; // pad for SIMD filter
var tp = sbrk(count4 * size);
var sp = sbrk(source.length);
var heap = new Uint8Array(instance.exports.memory.buffer);
heap.set(source, sp);
var res = fun(tp, count, size, sp, source.length);
if (res == 0 && filter) {
filter(tp, count4, size);
}
target.set(heap.subarray(tp, tp + count * size));
sbrk(tp - sbrk(0));
if (res != 0) {
throw new Error('Malformed buffer data: ' + res);
}
}
var filters = {
// legacy index-based enums for glTF
0: '',
1: 'meshopt_decodeFilterOct',
2: 'meshopt_decodeFilterQuat',
3: 'meshopt_decodeFilterExp',
// string-based enums for glTF
NONE: '',
OCTAHEDRAL: 'meshopt_decodeFilterOct',
QUATERNION: 'meshopt_decodeFilterQuat',
EXPONENTIAL: 'meshopt_decodeFilterExp'
};
var decoders = {
// legacy index-based enums for glTF
0: 'meshopt_decodeVertexBuffer',
1: 'meshopt_decodeIndexBuffer',
2: 'meshopt_decodeIndexSequence',
// string-based enums for glTF
ATTRIBUTES: 'meshopt_decodeVertexBuffer',
TRIANGLES: 'meshopt_decodeIndexBuffer',
INDICES: 'meshopt_decodeIndexSequence'
};
return {
setWasmPath,
ready: promise,
supported: true,
decodeVertexBuffer: function(target, count, size, source, filter) {
decode(
instance.exports.meshopt_decodeVertexBuffer,
target,
count,
size,
source,
instance.exports[filters[filter]]
);
},
decodeIndexBuffer: function(target, count, size, source) {
decode(
instance.exports.meshopt_decodeIndexBuffer,
target,
count,
size,
source
);
},
decodeIndexSequence: function(target, count, size, source) {
decode(
instance.exports.meshopt_decodeIndexSequence,
target,
count,
size,
source
);
},
decodeGltfBuffer: function(target, count, size, source, mode, filter) {
decode(
instance.exports[decoders[mode]],
target,
count,
size,
source,
instance.exports[filters[filter]]
);
}
};
})();
export { MeshoptDecoder };
// This file is part of meshoptimizer library and is distributed under the terms of MIT License.
// Copyright (C) 2016-2020, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
import * as DECODER from './decoder_base.js';
var MeshoptDecoder = (function () {
'use strict';
var instance = { exports: DECODER };
function decode(fun, target, count, size, source, filter) {
var sbrk = instance.exports.sbrk;
var count4 = (count + 3) & ~3; // pad for SIMD filter
var tp = sbrk(count4 * size);
var sp = sbrk(source.length);
var heap = new Uint8Array(instance.exports.memory.buffer);
heap.set(source, sp);
var res = fun(tp, count, size, sp, source.length);
if (res == 0 && filter) {
filter(tp, count4, size);
}
target.set(heap.subarray(tp, tp + count * size));
sbrk(tp - sbrk(0));
if (res != 0) {
throw new Error('Malformed buffer data: ' + res);
}
}
var filters = {
// legacy index-based enums for glTF
0: '',
1: 'meshopt_decodeFilterOct',
2: 'meshopt_decodeFilterQuat',
3: 'meshopt_decodeFilterExp',
// string-based enums for glTF
NONE: '',
OCTAHEDRAL: 'meshopt_decodeFilterOct',
QUATERNION: 'meshopt_decodeFilterQuat',
EXPONENTIAL: 'meshopt_decodeFilterExp',
};
var decoders = {
// legacy index-based enums for glTF
0: 'meshopt_decodeVertexBuffer',
1: 'meshopt_decodeIndexBuffer',
2: 'meshopt_decodeIndexSequence',
// string-based enums for glTF
ATTRIBUTES: 'meshopt_decodeVertexBuffer',
TRIANGLES: 'meshopt_decodeIndexBuffer',
INDICES: 'meshopt_decodeIndexSequence',
};
return {
ready: Promise.resolve(),
supported: true,
decodeVertexBuffer: function (target, count, size, source, filter) {
decode(
instance.exports.meshopt_decodeVertexBuffer,
target,
count,
size,
source,
instance.exports[filters[filter]],
);
},
decodeIndexBuffer: function (target, count, size, source) {
decode(
instance.exports.meshopt_decodeIndexBuffer,
target,
count,
size,
source,
);
},
decodeIndexSequence: function (target, count, size, source) {
decode(
instance.exports.meshopt_decodeIndexSequence,
target,
count,
size,
source,
);
},
decodeGltfBuffer: function (target, count, size, source, mode, filter) {
decode(
instance.exports[decoders[mode]],
target,
count,
size,
source,
instance.exports[filters[filter]],
);
},
};
})();
export { MeshoptDecoder };
declare namespace FYGE{export const VERSION = "2.0.68"; declare namespace FYGE{export const VERSION = "2.0.69";
export function cos(angle: number): number; export function cos(angle: number): number;
...@@ -8887,12 +8887,14 @@ export interface ScrollEvent extends Event { ...@@ -8887,12 +8887,14 @@ export interface ScrollEvent extends Event {
export class ScrollListItem extends Container { export class ScrollListItem extends Container {
data: any; data: any;
index: number;
/** /**
* 列表滚动时各项item有数据变更时会触发 * 列表滚动时各项item有数据变更时会触发
* @param data 参数会传入data,也可直接使用this.data * @param data 参数会传入data,也可直接使用this.data
* @param index data所在数组的索引
* @protected * @protected
*/ */
onDataChanged(data?: any): void; onDataChanged(data?: any, index?: number): void;
} }
export class ScrollList extends ScrollView { export class ScrollList extends ScrollView {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
export const VERSION = "2.0.68"; export const VERSION = "2.0.69";
export function cos(angle: number): number; export function cos(angle: number): number;
...@@ -8887,12 +8887,14 @@ export interface ScrollEvent extends Event { ...@@ -8887,12 +8887,14 @@ export interface ScrollEvent extends Event {
export class ScrollListItem extends Container { export class ScrollListItem extends Container {
data: any; data: any;
index: number;
/** /**
* 列表滚动时各项item有数据变更时会触发 * 列表滚动时各项item有数据变更时会触发
* @param data 参数会传入data,也可直接使用this.data * @param data 参数会传入data,也可直接使用this.data
* @param index data所在数组的索引
* @protected * @protected
*/ */
onDataChanged(data?: any): void; onDataChanged(data?: any, index?: number): void;
} }
export class ScrollList extends ScrollView { export class ScrollList extends ScrollView {
......
{ {
"name": "fyge", "name": "fyge",
"version": "2.0.68", "version": "2.0.69",
"description": "canvas渲染引擎", "description": "canvas渲染引擎",
"main": "./build/fyge.min.js", "main": "./build/fyge.min.js",
"module": "./build/fyge.esm.js", "module": "./build/fyge.esm.js",
......
...@@ -615,6 +615,13 @@ ...@@ -615,6 +615,13 @@
boneTexture.premultipliedAlpha = false; boneTexture.premultipliedAlpha = false;
SpineAniManager的showAni的callback回调函数去掉参数loop SpineAniManager的showAni的callback回调函数去掉参数loop
2.0.69 ScrollList文件里ScrollListItem添加index属性,并在onDataChanged第二个参数返回
ScrollList里去掉sroll_id,用index代替
getElementsByName到时要处理下 getElementsByName到时要处理下
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* @name VERSION * @name VERSION
* @type {string} * @type {string}
*/ */
export const VERSION = "2.0.68"; export const VERSION = "2.0.69";
/** /**
......
...@@ -11,13 +11,15 @@ import { ScrollView, ScrollEvent } from "./ScrollView"; ...@@ -11,13 +11,15 @@ import { ScrollView, ScrollEvent } from "./ScrollView";
* @since 2.0.0 * @since 2.0.0
*/ */
export class ScrollListItem extends Container { export class ScrollListItem extends Container {
data: any data: any;
index: number;
/** /**
* 列表滚动时各项item有数据变更时会触发 * 列表滚动时各项item有数据变更时会触发
* @param data 参数会传入data,也可直接使用this.data * @param data 参数会传入data,也可直接使用this.data
* @param index data所在数组的索引
* @protected * @protected
*/ */
onDataChanged(data?: any) { onDataChanged(data?: any, index?: number) {
}; };
} }
...@@ -178,21 +180,21 @@ export class ScrollList extends ScrollView { ...@@ -178,21 +180,21 @@ export class ScrollList extends ScrollView {
for (let i = 0; i < s._itemCount; i++) { for (let i = 0; i < s._itemCount; i++) {
let item: ScrollListItem = s._items[i]; let item: ScrollListItem = s._items[i];
if (s._isInit == 1) { if (s._isInit == 1) {
item["sroll_id"] = -1; item.index = -1;
} }
if (item["sroll_id"] !== id) { if (item.index !== id) {
//id在data数组列表内就执行 //id在data数组列表内就执行
if (id < s.data.length) { if (id < s.data.length) {
item.onDataChanged(item.data = s.data[id]); item.index = id;
item.onDataChanged(item.data = s.data[id], id);
item.visible = true; item.visible = true;
//位置 //位置
item[dimension] = Math.floor(id / s._cols) * s._itemRow; item[dimension] = Math.floor(id / s._cols) * s._itemRow;
item[antDimension] = (id % s._cols) * s._itemCol; item[antDimension] = (id % s._cols) * s._itemCol;
item["sroll_id"] = id;
} else { } else {
item.data = null; item.data = null;
item.index = -1;
item.visible = false; item.visible = false;
item["sroll_id"] = -1;
//位置需要刷新吗? //位置需要刷新吗?
} }
} }
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment