diff --git a/sql/mysql.sql b/sql/mysql.sql index 7055edd3..21d7a52e 100644 --- a/sql/mysql.sql +++ b/sql/mysql.sql @@ -5,10 +5,10 @@ create table device ( deviceId varchar(50) not null primary key, - name varchar(50) null, - manufacturer varchar(50) null, - model varchar(50) null, - firmware varchar(50) null, + name varchar(255) null, + manufacturer varchar(255) null, + model varchar(255) null, + firmware varchar(255) null, transport varchar(50) null, streamMode varchar(50) null, online varchar(50) null, @@ -25,7 +25,7 @@ create table device create table device_channel ( channelId varchar(50) not null, - name varchar(50) null, + name varchar(255) null, manufacture varchar(50) null, model varchar(50) null, owner varchar(50) null, @@ -42,7 +42,7 @@ create table device_channel secrecy varchar(50) null, ipAddress varchar(50) null, port int null, - password varchar(50) null, + password varchar(255) null, PTZType int null, status int null, longitude double null, @@ -59,7 +59,7 @@ create table device_channel create table device_mobile_position ( deviceId varchar(50) not null, - deviceName varchar(50) null, + deviceName varchar(255) null, time varchar(50) not null, longitude double not null, latitude double not null, @@ -75,10 +75,10 @@ create table device_mobile_position create table gb_stream ( - app varchar(50) not null, - stream varchar(50) not null, + app varchar(255) not null, + stream varchar(255) not null, gbId varchar(50) not null, - name varchar(50) null, + name varchar(255) null, longitude double null, latitude double null, streamType varchar(50) null, @@ -90,7 +90,7 @@ create table parent_platform ( id int auto_increment, enable int null, - name varchar(50) null, + name varchar(255) null, serverGBId varchar(50) not null, serverGBDomain varchar(50) null, serverIP varchar(50) null, @@ -98,7 +98,7 @@ create table parent_platform deviceGBId varchar(50) not null, deviceIp varchar(50) null, devicePort varchar(50) null, - username varchar(50) null, + username varchar(255) null, password varchar(50) null, expires varchar(50) null, keepTimeout varchar(50) null, @@ -122,21 +122,21 @@ create table platform_gb_channel create table platform_gb_stream ( platformId varchar(50) not null, - app varchar(50) not null, - stream varchar(50) not null, + app varchar(255) not null, + stream varchar(255) not null, primary key (platformId, app, stream) ); create table stream_proxy ( type varchar(50) not null, - app varchar(50) not null, - stream varchar(50) not null, - url varchar(50) null, - src_url varchar(50) null, - dst_url blob null, + app varchar(255) not null, + stream varchar(255) not null, + url varchar(255) null, + src_url varchar(255) null, + dst_url varchar(255) null, timeout_ms int null, - ffmpeg_cmd_key varchar(50) null, + ffmpeg_cmd_key varchar(255) null, rtp_type varchar(50) null, enable_hls bit(1) null, enable_mp4 bit(1) null, @@ -146,8 +146,8 @@ create table stream_proxy create table stream_push ( - app varchar(50) not null, - stream varchar(50) not null, + app varchar(255) not null, + stream varchar(255) not null, totalReaderCount varchar(50) null, originType int null, originTypeStr varchar(50) null, @@ -160,8 +160,8 @@ create table user ( id int auto_increment primary key, - username varchar(50) not null, - password varchar(50) not null, + username varchar(255) not null, + password varchar(255) not null, roleId int not null, create_time varchar(50) not null ); diff --git a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java b/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java index f8b95fca..e5f13ecb 100644 --- a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java +++ b/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java @@ -5,9 +5,11 @@ import java.util.logging.LogManager; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.scheduling.annotation.EnableScheduling; import springfox.documentation.oas.annotations.EnableOpenApi; @SpringBootApplication +@EnableScheduling @EnableOpenApi public class VManageBootstrap extends LogManager { private static String[] args; diff --git a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java index 6d8f45d9..f4e895f0 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java +++ b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java @@ -8,6 +8,8 @@ package com.genersoft.iot.vmp.common; */ public class VideoManagerConstants { + public static final String WVP_SERVER_PREFIX = "VMP_wvp_server"; + public static final String MEDIA_SERVER_PREFIX = "VMP_media_server"; public static final String MEDIA_STREAM_PREFIX = "VMP_media_stream"; diff --git a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java index c99c1cd8..52292a57 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/MediaConfig.java @@ -58,7 +58,7 @@ public class MediaConfig { @Value("${media.rtp.port-range}") private String rtpPortRange; - @Value("${media.record-assist-port}") + @Value("${media.record-assist-port:0}") private Integer recordAssistPort; public String getIp() { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java index 5ea57c15..9e402e1e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java @@ -48,4 +48,16 @@ public class VideoStreamSessionManager { ssrcMap.remove(deviceId + "_" + channelId); streamIdMap.remove(deviceId + "_" + channelId); } + + public ConcurrentHashMap getSessionMap() { + return sessionMap; + } + + public ConcurrentHashMap getSsrcMap() { + return ssrcMap; + } + + public ConcurrentHashMap getStreamIdMap() { + return streamIdMap; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java index ab1d2dd9..ed069f88 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java @@ -34,11 +34,13 @@ public class ZLMRTPServerFactory { if (currentStreams == null) { currentStreams = new HashMap<>(); JSONObject jsonObject = zlmresTfulUtils.listRtpServer(); - JSONArray data = jsonObject.getJSONArray("data"); - if (data != null) { - for (int i = 0; i < data.size(); i++) { - JSONObject dataItem = data.getJSONObject(i); - currentStreams.put(dataItem.getString("stream_id"), dataItem.getInteger("port")); + if (jsonObject != null) { + JSONArray data = jsonObject.getJSONArray("data"); + if (data != null) { + for (int i = 0; i < data.size(); i++) { + JSONObject dataItem = data.getJSONObject(i); + currentStreams.put(dataItem.getString("stream_id"), dataItem.getInteger("port")); + } } } } @@ -73,12 +75,12 @@ public class ZLMRTPServerFactory { result= createRTPServer(streamId); break; default: - logger.error("创建RTP Server 失败: " + jsonObject.getString("msg")); + logger.error("创建RTP Server 失败 {}: " + jsonObject.getString("msg"), newPort); break; } }else { // 检查ZLM状态 - logger.error("创建RTP Server 失败: 请检查ZLM服务"); + logger.error("创建RTP Server 失败 {}: 请检查ZLM服务", newPort); } return result; } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java index f9171c3d..956db144 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java @@ -127,7 +127,7 @@ public class ZLMRunner implements CommandLineRunner { if (responseJSON != null && responseJSON.getInteger("code") == 0) { logger.info("设置zlm成功"); }else { - logger.info("设置zlm失败: " + responseJSON.getString("msg")); + logger.info("设置zlm失败"); } } @@ -155,6 +155,9 @@ public class ZLMRunner implements CommandLineRunner { // 设置为未启用 logger.info("恢复流代理失败,请检查流地址后重新启用" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream()); streamProxyService.stop(streamProxyDto.getApp(), streamProxyDto.getStream()); + }else if (jsonObject.getInteger("code") != 0){ // TODO 将错误信息存入数据库, 前端展示 + logger.info("恢复流代理失败:" + streamProxyDto.getApp() + "/" + streamProxyDto.getStream() + "[ " + JSONObject.toJSONString(jsonObject) + " ]"); + streamProxyService.stop(streamProxyDto.getApp(), streamProxyDto.getStream()); } } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java index 535c7900..172d9803 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java @@ -120,7 +120,6 @@ public class PlayServiceImpl implements IPlayService { zlmresTfulUtils.getSnap(streamUrl, 15, 1, path, fileName); } } - System.out.println(path); } catch (FileNotFoundException e) { e.printStackTrace(); } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java index 0f359458..4297bb2b 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java @@ -1,12 +1,15 @@ package com.genersoft.iot.vmp.vmanager.gb28181.play; +import com.alibaba.fastjson.JSONArray; import com.genersoft.iot.vmp.common.StreamInfo; +import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; +import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult; import com.genersoft.iot.vmp.service.IMediaService; import com.genersoft.iot.vmp.service.IPlayService; @@ -31,6 +34,8 @@ import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import org.springframework.web.context.request.async.DeferredResult; +import java.util.Enumeration; +import java.util.Map; import java.util.UUID; import javax.sip.message.Response; @@ -46,6 +51,9 @@ public class PlayController { @Autowired private SIPCommander cmder; + @Autowired + private VideoStreamSessionManager streamSession; + @Autowired private IVideoManagerStorager storager; @@ -227,6 +235,20 @@ public class PlayController { logger.debug("语音广播API调用"); } Device device = storager.queryVideoDevice(deviceId); + DeferredResult> result = new DeferredResult>(3 * 1000L); + if (device == null) { + resultHolder.put(DeferredResultHolder.CALLBACK_CMD_BROADCAST + deviceId, result); + RequestMessage msg = new RequestMessage(); + msg.setId(DeferredResultHolder.CALLBACK_CMD_BROADCAST + deviceId); + JSONObject json = new JSONObject(); + json.put("DeviceID", deviceId); + json.put("CmdType", "Broadcast"); + json.put("Result", "Failed"); + json.put("Description", "Device 不存在"); + msg.setData(json); + resultHolder.invokeResult(msg); + return result; + } cmder.audioBroadcastCmd(device, event -> { Response response = event.getResponse(); RequestMessage msg = new RequestMessage(); @@ -239,7 +261,7 @@ public class PlayController { msg.setData(json); resultHolder.invokeResult(msg); }); - DeferredResult> result = new DeferredResult>(3 * 1000L); + result.onTimeout(() -> { logger.warn(String.format("语音广播操作超时, 设备未返回应答指令")); RequestMessage msg = new RequestMessage(); @@ -256,5 +278,32 @@ public class PlayController { return result; } + @ApiOperation("获取所有的ssrc") + @GetMapping("/ssrc") + public WVPResult getSSRC() { + if (logger.isDebugEnabled()) { + logger.debug("获取所有的ssrc"); + } + JSONArray objects = new JSONArray(); + for(Map.Entry entry: streamSession.getSsrcMap().entrySet()) { + System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); + JSONObject jsonObject = new JSONObject(); + String[] keyArray = entry.getKey().split("_"); + jsonObject.put("deviceId", keyArray[0]); + jsonObject.put("channelId", keyArray[1]); + jsonObject.put("ssrc", entry.getValue()); + jsonObject.put("streamId", streamSession.getStreamIdMap().get(entry.getKey())); + objects.add(jsonObject); + } + WVPResult result = new WVPResult<>(); + result.setCode(0); + result.setMsg("success"); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("data", objects); + jsonObject.put("count", objects.size()); + result.setData(jsonObject); + return result; + } + } diff --git a/web_src/index.html b/web_src/index.html index 88791758..697e987f 100644 --- a/web_src/index.html +++ b/web_src/index.html @@ -4,10 +4,11 @@ 国标28181 - + + diff --git a/web_src/package-lock.json b/web_src/package-lock.json index b71b322c..11c228f1 100644 --- a/web_src/package-lock.json +++ b/web_src/package-lock.json @@ -1633,7 +1633,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30001146", + "caniuse-db": "1.0.30001244", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" }, @@ -1644,16 +1644,16 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30001146", + "caniuse-db": "1.0.30001244", "electron-to-chromium": "1.3.742" } } } }, "caniuse-db": { - "version": "1.0.30001146", - "resolved": "https://registry.npm.taobao.org/caniuse-db/download/caniuse-db-1.0.30001146.tgz?cache=0&sync_timestamp=1602133173904&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-db%2Fdownload%2Fcaniuse-db-1.0.30001146.tgz", - "integrity": "sha1-poOLhbXEFSLrDXsetgeHFsBQ1q4=", + "version": "1.0.30001244", + "resolved": "https://registry.nlark.com/caniuse-db/download/caniuse-db-1.0.30001244.tgz?cache=0&sync_timestamp=1626154539434&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcaniuse-db%2Fdownload%2Fcaniuse-db-1.0.30001244.tgz", + "integrity": "sha1-pt/zJHNkjfCwrg+Z2YeXrft89Fk=", "dev": true }, "caniuse-lite": { @@ -2241,7 +2241,7 @@ }, "css-loader": { "version": "0.28.11", - "resolved": "https://registry.npm.taobao.org/css-loader/download/css-loader-0.28.11.tgz", + "resolved": "https://registry.nlark.com/css-loader/download/css-loader-0.28.11.tgz?cache=0&sync_timestamp=1621865230592&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-loader%2Fdownload%2Fcss-loader-0.28.11.tgz", "integrity": "sha1-w/mGSnAL4nEbtaJGKyOJsaOS2rc=", "dev": true, "requires": { @@ -2426,7 +2426,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30001146", + "caniuse-db": "1.0.30001244", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -2439,7 +2439,7 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30001146", + "caniuse-db": "1.0.30001244", "electron-to-chromium": "1.3.742" } }, @@ -3548,6 +3548,7 @@ "is-string": "1.0.6", "object-inspect": "1.10.3", "object-keys": "1.1.1", + "object.assign": "4.1.2", "string.prototype.trimend": "1.0.4", "string.prototype.trimstart": "1.0.4", "unbox-primitive": "1.0.1" @@ -5463,9 +5464,9 @@ } }, "math-expression-evaluator": { - "version": "1.2.22", - "resolved": "https://registry.npm.taobao.org/math-expression-evaluator/download/math-expression-evaluator-1.2.22.tgz", - "integrity": "sha1-wU3LPYtNFQ5dzqnGjI2tgDCbDV4=", + "version": "1.3.8", + "resolved": "https://registry.nlark.com/math-expression-evaluator/download/math-expression-evaluator-1.3.8.tgz", + "integrity": "sha1-Mg2jsrwVEvT1D8MCCysc1cjp1Xc=", "dev": true }, "md5.js": { @@ -6161,6 +6162,18 @@ "isobject": "3.0.1" } }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.nlark.com/object.assign/download/object.assign-4.1.2.tgz", + "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=", + "dev": true, + "requires": { + "call-bind": "1.0.2", + "define-properties": "1.1.3", + "has-symbols": "1.0.2", + "object-keys": "1.1.1" + } + }, "object.getownpropertydescriptors": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", @@ -7544,7 +7557,7 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30001146", + "caniuse-db": "1.0.30001244", "electron-to-chromium": "1.3.742" } }, @@ -9198,7 +9211,7 @@ "dev": true, "requires": { "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.22", + "math-expression-evaluator": "1.3.8", "reduce-function-call": "1.0.3" }, "dependencies": { diff --git a/web_src/package.json b/web_src/package.json index 280edc71..69d8b6ab 100644 --- a/web_src/package.json +++ b/web_src/package.json @@ -36,7 +36,7 @@ "babel-preset-stage-2": "^6.22.0", "chalk": "^2.0.1", "copy-webpack-plugin": "^4.6.0", - "css-loader": "^0.28.0", + "css-loader": "^0.28.11", "extract-text-webpack-plugin": "^3.0.0", "file-loader": "^1.1.4", "friendly-errors-webpack-plugin": "^1.6.1", diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue index 548bd2cc..3891ab53 100644 --- a/web_src/src/components/channelList.vue +++ b/web_src/src/components/channelList.vue @@ -154,7 +154,6 @@ export default { }, currentChange: function (val) { var url = `/${this.$router.currentRoute.name}/${this.deviceId}/${this.parentChannelId}/${this.count}/${val}` - console.log(url) this.$router.push(url).then(() => { this.initParam(); this.initData(); @@ -182,7 +181,6 @@ export default { channelType: that.channelType } }).then(function (res) { - console.log(res); that.total = res.data.total; that.deviceChannelList = res.data.list; // 防止出现表格错位 @@ -196,7 +194,6 @@ export default { //通知设备上传媒体流 sendDevicePush: function (itemData) { - console.log(itemData); let deviceId = this.deviceId; this.isLoging = true; let channelId = itemData.channelId; @@ -232,13 +229,11 @@ export default { this.$refs.devicePlayer.openDialog("record", deviceId, channelId, {date: format}) }, stopDevicePush: function (itemData) { - console.log(itemData) var that = this; this.$axios({ method: 'get', url: '/api/play/stop/' + this.deviceId + "/" + itemData.channelId }).then(function (res) { - console.log(JSON.stringify(res)); that.initData(); }).catch(function (error) { if (error.response.status === 402) { // 已经停止过 @@ -273,7 +268,6 @@ export default { }) }, changeSubchannel(itemData) { - console.log(this.$router.currentRoute) this.beforeUrl = this.$router.currentRoute.path; var url = `/${this.$router.currentRoute.name}/${this.$router.currentRoute.params.deviceId}/${itemData.channelId}/${this.$router.currentRoute.params.count}/1` @@ -310,13 +304,11 @@ export default { }); }, search: function () { - console.log(this.searchSrt) this.currentPage = 1; this.total = 0; this.initData(); }, updateChannel: function (row) { - console.log(row) this.$axios({ method: 'post', url: `/api/device/query/channel/update/${this.deviceId}`, diff --git a/web_src/src/components/dialog/devicePlayer.vue b/web_src/src/components/dialog/devicePlayer.vue index 1dfc4610..9653833f 100644 --- a/web_src/src/components/dialog/devicePlayer.vue +++ b/web_src/src/components/dialog/devicePlayer.vue @@ -151,7 +151,8 @@ + + diff --git a/web_src/src/router/index.js b/web_src/src/router/index.js index 05ccaf77..4b0810d3 100644 --- a/web_src/src/router/index.js +++ b/web_src/src/router/index.js @@ -15,7 +15,7 @@ import web from '../components/setting/Web.vue' import sip from '../components/setting/Sip.vue' import media from '../components/setting/Media.vue' -import wasmPlayer from '../components/dialog/easyPlayer.vue' +import wasmPlayer from '../components/dialog/jessibuca.vue' import rtcPlayer from '../components/dialog/rtcPlayer.vue' const originalPush = VueRouter.prototype.push diff --git a/web_src/static/css/font-awesome.min.css b/web_src/static/css/font-awesome.min.css deleted file mode 100644 index 540440ce..00000000 --- a/web_src/static/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/web_src/static/css/iconfont.css b/web_src/static/css/iconfont.css new file mode 100644 index 00000000..972cf6bc --- /dev/null +++ b/web_src/static/css/iconfont.css @@ -0,0 +1,1655 @@ +@font-face { + font-family: "iconfont"; /* Project id 1291092 */ + src: url('iconfont.woff2?t=1626163621710') format('woff2'), + url('iconfont.woff?t=1626163621710') format('woff'), + url('iconfont.ttf?t=1626163621710') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-xiangqing2:before { + content: "\e798"; +} + +.icon-record:before { + content: "\e7a6"; +} + +.icon-audio-mute:before { + content: "\e792"; +} + +.icon-audio-high:before { + content: "\e793"; +} + +.icon-record1:before { + content: "\e7f8"; +} + +.icon-audio-line:before { + content: "\e794"; +} + +.icon-record2:before { + content: "\e795"; +} + +.icon-audio-fill:before { + content: "\e796"; +} + +.icon-PTZ:before { + content: "\e797"; +} + +.icon-camera1196054easyiconnet:before { + content: "\e791"; +} + +.icon-weibiaoti10:before { + content: "\e78f"; +} + +.icon-weibiaoti11:before { + content: "\e790"; +} + +.icon-page-next1:before { + content: "\e69c"; +} + +.icon-page-last1:before { + content: "\e69d"; +} + +.icon-ptz-down1:before { + content: "\e69e"; +} + +.icon-file-search1:before { + content: "\e69f"; +} + +.icon-page-first1:before { + content: "\e6a0"; +} + +.icon-fork1:before { + content: "\e6a1"; +} + +.icon-ptz-middle1:before { + content: "\e6a2"; +} + +.icon-ptz-upright1:before { + content: "\e6a3"; +} + +.icon-ptz-downleft1:before { + content: "\e6a4"; +} + +.icon-window-restore1:before { + content: "\e6a5"; +} + +.icon-plus1:before { + content: "\e6a6"; +} + +.icon-ptz-right1:before { + content: "\e6a7"; +} + +.icon-stop:before { + content: "\e6a8"; +} + +.icon-refresh1:before { + content: "\e6a9"; +} + +.icon-tool-polyline1:before { + content: "\e6aa"; +} + +.icon-tool-point1:before { + content: "\e6ab"; +} + +.icon-minus1:before { + content: "\e6ac"; +} + +.icon-ptz-wiper1:before { + content: "\e6ad"; +} + +.icon-tool-select1:before { + content: "\e6ae"; +} + +.icon-tool-polygon1:before { + content: "\e6af"; +} + +.icon-settings1:before { + content: "\e6b0"; +} + +.icon-search1:before { + content: "\e6b1"; +} + +.icon-ir-vis1:before { + content: "\e6b2"; +} + +.icon-ptz-light1:before { + content: "\e6b3"; +} + +.icon-ptz-up1:before { + content: "\e6b4"; +} + +.icon-ptz-upleft1:before { + content: "\e6b5"; +} + +.icon-temp-stream1:before { + content: "\e6b6"; +} + +.icon-tool-mouse1:before { + content: "\e6b7"; +} + +.icon-zhongyingwenyingwen-01:before { + content: "\e6b8"; +} + +.icon-zhongyingwenyingwen02-01:before { + content: "\e6b9"; +} + +.icon-crop2:before { + content: "\e6ba"; +} + +.icon-expander-down2:before { + content: "\e6bb"; +} + +.icon-window-restore2:before { + content: "\e6bc"; +} + +.icon-file-jpg2:before { + content: "\e6bd"; +} + +.icon-asterisk3:before { + content: "\e6be"; +} + +.icon-ffc2:before { + content: "\e6bf"; +} + +.icon-file-record2:before { + content: "\e6c0"; +} + +.icon-file-stream2:before { + content: "\e6c1"; +} + +.icon-fork2:before { + content: "\e6c2"; +} + +.icon-file-mp42:before { + content: "\e6c3"; +} + +.icon-ir-vis2:before { + content: "\e6c4"; +} + +.icon-file-search2:before { + content: "\e6c5"; +} + +.icon-pause:before { + content: "\e6c6"; +} + +.icon-play1:before { + content: "\e6c7"; +} + +.icon-page-previous2:before { + content: "\e6c8"; +} + +.icon-page-next2:before { + content: "\e6c9"; +} + +.icon-minus2:before { + content: "\e6ca"; +} + +.icon-page-last2:before { + content: "\e6cb"; +} + +.icon-page-first2:before { + content: "\e6cc"; +} + +.icon-ptz-downleft2:before { + content: "\e6cd"; +} + +.icon-ptz-downright2:before { + content: "\e6ce"; +} + +.icon-ptz-middle2:before { + content: "\e6cf"; +} + +.icon-ptz-down2:before { + content: "\e6d0"; +} + +.icon-plus2:before { + content: "\e6d1"; +} + +.icon-ptz-left2:before { + content: "\e6d2"; +} + +.icon-ptz-up2:before { + content: "\e6d3"; +} + +.icon-ptz-right2:before { + content: "\e6d4"; +} + +.icon-ptz-light2:before { + content: "\e6d5"; +} + +.icon-ptz-wiper2:before { + content: "\e6d6"; +} + +.icon-ptz-upright2:before { + content: "\e6d7"; +} + +.icon-search2:before { + content: "\e6d8"; +} + +.icon-refresh2:before { + content: "\e6d9"; +} + +.icon-ptz-upleft2:before { + content: "\e6da"; +} + +.icon-stop1:before { + content: "\e6db"; +} + +.icon-tool-mouse2:before { + content: "\e6dc"; +} + +.icon-settings2:before { + content: "\e6dd"; +} + +.icon-tool-polygon2:before { + content: "\e6de"; +} + +.icon-tool-point2:before { + content: "\e6df"; +} + +.icon-temp-stream2:before { + content: "\e6e0"; +} + +.icon-tool-polyline2:before { + content: "\e6e1"; +} + +.icon-window-maximize2:before { + content: "\e6e2"; +} + +.icon-window-minimize2:before { + content: "\e6e3"; +} + +.icon-tool-select2:before { + content: "\e6e4"; +} + +.icon-video-stream2:before { + content: "\e6e5"; +} + +.icon-bianji1:before { + content: "\e6e6"; +} + +.icon-caidanzhankai1:before { + content: "\e6e7"; +} + +.icon-cha11:before { + content: "\e6e8"; +} + +.icon-caidanshouqi1:before { + content: "\e6e9"; +} + +.icon-zhongyingwen2zhongwen1:before { + content: "\e6ea"; +} + +.icon-bofang011:before { + content: "\e6eb"; +} + +.icon-zuo:before { + content: "\e6ec"; +} + +.icon-baojing1:before { + content: "\e6ed"; +} + +.icon-fuxuankuang-true1:before { + content: "\e6ee"; +} + +.icon-bofang2:before { + content: "\e6ef"; +} + +.icon-baojingshezhi1:before { + content: "\e6f0"; +} + +.icon-jiahao2:before { + content: "\e6f1"; +} + +.icon-huifangxuanzhong1:before { + content: "\e6f2"; +} + +.icon-cewen1:before { + content: "\e6f3"; +} + +.icon-baojingjilu2:before { + content: "\e6f4"; +} + +.icon-danxuan1:before { + content: "\e6f5"; +} + +.icon-pingmufenge1:before { + content: "\e6f6"; +} + +.icon-luxiangguanli1:before { + content: "\e6f7"; +} + +.icon-goukuang:before { + content: "\e6f8"; +} + +.icon-shanchu11:before { + content: "\e6f9"; +} + +.icon-cha02:before { + content: "\e6fa"; +} + +.icon-huifang1:before { + content: "\e6fb"; +} + +.icon-rili1:before { + content: "\e6fc"; +} + +.icon-quanping1:before { + content: "\e6fd"; +} + +.icon-jianhao1:before { + content: "\e6fe"; +} + +.icon-shijian1:before { + content: "\e6ff"; +} + +.icon-shishiyulanxuanzhong1:before { + content: "\e700"; +} + +.icon-shouji1:before { + content: "\e701"; +} + +.icon-shouyexuanzhong1:before { + content: "\e702"; +} + +.icon-luxiang01:before { + content: "\e703"; +} + +.icon-shishiyulan:before { + content: "\e704"; +} + +.icon-quxiao:before { + content: "\e601"; +} + +.icon-sousuo1:before { + content: "\e705"; +} + +.icon-file-record:before { + content: "\e602"; +} + +.icon-shebeiguanli1:before { + content: "\e706"; +} + +.icon-play:before { + content: "\e603"; +} + +.icon-suo1:before { + content: "\e707"; +} + +.icon-file-stream:before { + content: "\e604"; +} + +.icon-tuichudenglu1:before { + content: "\e708"; +} + +.icon-ptz-middle:before { + content: "\e606"; +} + +.icon-wenhao1:before { + content: "\e709"; +} + +.icon-minus:before { + content: "\e607"; +} + +.icon-shezhixuanzhong:before { + content: "\e70a"; +} + +.icon-fork:before { + content: "\e608"; +} + +.icon-shezhiweixuanzhong1:before { + content: "\e70b"; +} + +.icon-ptz-up:before { + content: "\e609"; +} + +.icon-shuju2:before { + content: "\e70c"; +} + +.icon-file-jpg:before { + content: "\e60a"; +} + +.icon-xiazai011:before { + content: "\e70d"; +} + +.icon-ptz-left:before { + content: "\e60b"; +} + +.icon-xiala11:before { + content: "\e70e"; +} + +.icon-ptz-down:before { + content: "\e60c"; +} + +.icon-shuaxin:before { + content: "\e70f"; +} + +.icon-file-search:before { + content: "\e60d"; +} + +.icon-pingmufenge01:before { + content: "\e710"; +} + +.icon-crop:before { + content: "\e60e"; +} + +.icon-yonghu1:before { + content: "\e711"; +} + +.icon-asterisk:before { + content: "\e60f"; +} + +.icon-wenhao01:before { + content: "\e712"; +} + +.icon-expander-down:before { + content: "\e610"; +} + +.icon-you:before { + content: "\e713"; +} + +.icon-ptz-right:before { + content: "\e611"; +} + +.icon-shujuxuanzhong1:before { + content: "\e714"; +} + +.icon-ptz-wiper:before { + content: "\e612"; +} + +.icon-kuangxuan1:before { + content: "\e715"; +} + +.icon-ir-vis:before { + content: "\e613"; +} + +.icon-yonghuguanli1:before { + content: "\e716"; +} + +.icon-ptz-upleft:before { + content: "\e614"; +} + +.icon-zhongyingwenyingwen:before { + content: "\e717"; +} + +.icon-ptz-downright:before { + content: "\e615"; +} + +.icon-xiala2:before { + content: "\e718"; +} + +.icon-search:before { + content: "\e616"; +} + +.icon-luxiang:before { + content: "\e719"; +} + +.icon-ptz-upright:before { + content: "\e617"; +} + +.icon-zanting2:before { + content: "\e71a"; +} + +.icon-ptz-downleft:before { + content: "\e618"; +} + +.icon-kefu:before { + content: "\e71b"; +} + +.icon-tool-point:before { + content: "\e619"; +} + +.icon-jiqiren:before { + content: "\e71c"; +} + +.icon-ptz-light:before { + content: "\e61a"; +} + +.icon-huanliuzhan:before { + content: "\e71d"; +} + +.icon-tool-polyline:before { + content: "\e61b"; +} + +.icon-shouji2:before { + content: "\e71e"; +} + +.icon-file-mp4:before { + content: "\e61c"; +} + +.icon-cangku:before { + content: "\e71f"; +} + +.icon-window-maximize:before { + content: "\e61d"; +} + +.icon-shuaxin11:before { + content: "\e720"; +} + +.icon-page-next:before { + content: "\e61e"; +} + +.icon-weixiu:before { + content: "\e721"; +} + +.icon-ffc:before { + content: "\e61f"; +} + +.icon-biandianzhan:before { + content: "\e722"; +} + +.icon-tool-mouse:before { + content: "\e620"; +} + +.icon-youxiang:before { + content: "\e723"; +} + +.icon-settings:before { + content: "\e621"; +} + +.icon-qq:before { + content: "\e724"; +} + +.icon-page-last:before { + content: "\e622"; +} + +.icon-dianhua01:before { + content: "\e725"; +} + +.icon-window-restore:before { + content: "\e624"; +} + +.icon-fasongyoujian:before { + content: "\e726"; +} + +.icon-tool-select:before { + content: "\e625"; +} + +.icon-gaotieyunhangcopy:before { + content: "\e727"; +} + +.icon-video-stream:before { + content: "\e627"; +} + +.icon-dizhi:before { + content: "\e728"; +} + +.icon-page-first:before { + content: "\e628"; +} + +.icon-anfangbaojingmian:before { + content: "\e729"; +} + +.icon-page-previous:before { + content: "\e629"; +} + +.icon-piliangcaozuo1:before { + content: "\e72a"; +} + +.icon-refresh:before { + content: "\e62a"; +} + +.icon-qiyeguanli1:before { + content: "\e72b"; +} + +.icon-temp-stream:before { + content: "\e62b"; +} + +.icon-luxiangguanli2:before { + content: "\e72c"; +} + +.icon-tool-polygon:before { + content: "\e62c"; +} + +.icon-quanxianguanli1:before { + content: "\e72d"; +} + +.icon-window-minimize:before { + content: "\e62d"; +} + +.icon-shezhi1:before { + content: "\e72e"; +} + +.icon-plus:before { + content: "\e62e"; +} + +.icon-shishi1:before { + content: "\e72f"; +} + +.icon-qiyeguanli:before { + content: "\e62f"; +} + +.icon-shujuquanxian1:before { + content: "\e730"; +} + +.icon-quanxianguanli:before { + content: "\e630"; +} + +.icon-shishiyulanxuanzhong2:before { + content: "\e731"; +} + +.icon-shujuquanxian:before { + content: "\e631"; +} + +.icon-renzheng:before { + content: "\e732"; +} + +.icon--_baojinglianxiren:before { + content: "\e632"; +} + +.icon-shuju3:before { + content: "\e733"; +} + +.icon-yuechi:before { + content: "\e633"; +} + +.icon-shouye1:before { + content: "\e734"; +} + +.icon-xitongguanli:before { + content: "\e634"; +} + +.icon-zuzhi1:before { + content: "\e735"; +} + +.icon-zuzhi:before { + content: "\e635"; +} + +.icon-zuzhiguanli1:before { + content: "\e736"; +} + +.icon-renzheng6:before { + content: "\e636"; +} + +.icon-xitongguanli1:before { + content: "\e737"; +} + +.icon-yonghuguanli01:before { + content: "\e637"; +} + +.icon-yuechi1:before { + content: "\e738"; +} + +.icon-baojingmoban:before { + content: "\e638"; +} + +.icon-baojinglianxiren:before { + content: "\e739"; +} + +.icon-zuzhiguanli:before { + content: "\e639"; +} + +.icon-baojingjilu3:before { + content: "\e73a"; +} + +.icon-yonghuguanli:before { + content: "\e63a"; +} + +.icon-huifangxuanzhong2:before { + content: "\e73b"; +} + +.icon-bumenguanli:before { + content: "\e63b"; +} + +.icon-caiwu1:before { + content: "\e73c"; +} + +.icon-shishi:before { + content: "\e63c"; +} + +.icon-baojingguize1:before { + content: "\e73d"; +} + +.icon-baojing:before { + content: "\e63d"; +} + +.icon-bumenguanli1:before { + content: "\e73e"; +} + +.icon-shezhi:before { + content: "\e63e"; +} + +.icon-baojing2:before { + content: "\e73f"; +} + +.icon-huifangxuanzhong:before { + content: "\e63f"; +} + +.icon-yonghuguanli2:before { + content: "\e740"; +} + +.icon-luxiangguanli:before { + content: "\e640"; +} + +.icon-huifang2:before { + content: "\e741"; +} + +.icon-huifang:before { + content: "\e642"; +} + +.icon-baojingmoban1:before { + content: "\e742"; +} + +.icon-shouye:before { + content: "\e643"; +} + +.icon-dingdanxiangqing1:before { + content: "\e743"; +} + +.icon-shishiyulanxuanzhong:before { + content: "\e644"; +} + +.icon-fapiaoguanli1:before { + content: "\e744"; +} + +.icon-caiwu:before { + content: "\e645"; +} + +.icon-shiyonggaikuang1:before { + content: "\e745"; +} + +.icon-baojingjilu:before { + content: "\e646"; +} + +.icon-zengzhifuwu1:before { + content: "\e746"; +} + +.icon-baojingguize:before { + content: "\e647"; +} + +.icon-yiguanzhu:before { + content: "\e747"; +} + +.icon-shuju:before { + content: "\e648"; +} + +.icon-baojingtuisongshezhi1:before { + content: "\e748"; +} + +.icon-piliangcaozuo:before { + content: "\e649"; +} + +.icon-quxiao1:before { + content: "\e749"; +} + +.icon-suo:before { + content: "\e64a"; +} + +.icon-xiangqing1:before { + content: "\e74a"; +} + +.icon-yonghu:before { + content: "\e64b"; +} + +.icon-xufei1:before { + content: "\e74b"; +} + +.icon-shouji:before { + content: "\e64c"; +} + +.icon-zhifu1:before { + content: "\e74c"; +} + +.icon-tianjiadian:before { + content: "\e64d"; +} + +.icon-kuang:before { + content: "\e74d"; +} + +.icon-tianjiaxian:before { + content: "\e64e"; +} + +.icon-shouzhimingxi:before { + content: "\e74e"; +} + +.icon-tianjiaxuanqu:before { + content: "\e64f"; +} + +.icon-shouzhimingxi1:before { + content: "\e74f"; +} + +.icon-xuanzeduixiang:before { + content: "\e650"; +} + +.icon-daochu:before { + content: "\e750"; +} + +.icon-baojing01:before { + content: "\e651"; +} + +.icon-daochu1:before { + content: "\e751"; +} + +.icon-baojingjilu1:before { + content: "\e652"; +} + +.icon-daping:before { + content: "\e752"; +} + +.icon-baojingshezhi:before { + content: "\e653"; +} + +.icon-shaixuan:before { + content: "\e753"; +} + +.icon-cewen:before { + content: "\e654"; +} + +.icon-zhifu2:before { + content: "\e754"; +} + +.icon-tuichudenglu:before { + content: "\e655"; +} + +.icon-shaixuan1:before { + content: "\e755"; +} + +.icon-shezhiweixuanzhong:before { + content: "\e656"; +} + +.icon-zhifu3:before { + content: "\e756"; +} + +.icon-shezhixuanzhong1:before { + content: "\e657"; +} + +.icon-xia:before { + content: "\e757"; +} + +.icon-shouyexuanzhong:before { + content: "\e658"; +} + +.icon-xia1:before { + content: "\e758"; +} + +.icon-shujuxuanzhong:before { + content: "\e659"; +} + +.icon-yanzhengma:before { + content: "\e759"; +} + +.icon-shuju1:before { + content: "\e65a"; +} + +.icon-tongxunlu:before { + content: "\e75a"; +} + +.icon-bianji:before { + content: "\e65b"; +} + +.icon-yanzhengma1:before { + content: "\e75b"; +} + +.icon-rili:before { + content: "\e65c"; +} + +.icon-tongxunlu1:before { + content: "\e75c"; +} + +.icon-shanchu:before { + content: "\e65d"; +} + +.icon-yingyongbangding:before { + content: "\e75d"; +} + +.icon-jiahao:before { + content: "\e65e"; +} + +.icon-yingyongbangding1:before { + content: "\e75e"; +} + +.icon-wenhao:before { + content: "\e65f"; +} + +.icon-yingyongbangding2:before { + content: "\e75f"; +} + +.icon-zhongyingwen:before { + content: "\e660"; +} + +.icon-dapingzhanshi:before { + content: "\e760"; +} + +.icon-kuangxuan:before { + content: "\e661"; +} + +.icon-jiankong:before { + content: "\e761"; +} + +.icon-cha1:before { + content: "\e662"; +} + +.icon-touxiang:before { + content: "\e762"; +} + +.icon-bofang01:before { + content: "\e663"; +} + +.icon-lou:before { + content: "\e763"; +} + +.icon-caidanzhankai:before { + content: "\e664"; +} + +.icon-jiankong1:before { + content: "\e764"; +} + +.icon-caidanshouqi:before { + content: "\e665"; +} + +.icon-lou1:before { + content: "\e765"; +} + +.icon-danxuan:before { + content: "\e666"; +} + +.icon-dapingzhanshi1:before { + content: "\e766"; +} + +.icon-fuxuankuangxuanzhong:before { + content: "\e667"; +} + +.icon-touxiang1:before { + content: "\e767"; +} + +.icon-fuxuankuang-true:before { + content: "\e668"; +} + +.icon-shebei:before { + content: "\e768"; +} + +.icon-jianhao:before { + content: "\e669"; +} + +.icon-shebeii:before { + content: "\e769"; +} + +.icon-shanchu1:before { + content: "\e66a"; +} + +.icon-bianji11:before { + content: "\e76a"; +} + +.icon-shijian:before { + content: "\e66b"; +} + +.icon-jilu:before { + content: "\e76b"; +} + +.icon-jiahao1:before { + content: "\e66c"; +} + +.icon-yun:before { + content: "\e76c"; +} + +.icon-sousuo:before { + content: "\e66d"; +} + +.icon-baojing3:before { + content: "\e76d"; +} + +.icon-zhongyingwen2zhongwen:before { + content: "\e66e"; +} + +.icon-zhinengyangan:before { + content: "\e76e"; +} + +.icon-xiala:before { + content: "\e66f"; +} + +.icon-yongdiananquan:before { + content: "\e76f"; +} + +.icon-xiala1:before { + content: "\e670"; +} + +.icon-zhinengmensuo:before { + content: "\e770"; +} + +.icon-xiazai01:before { + content: "\e671"; +} + +.icon-xiaokongyujing:before { + content: "\e771"; +} + +.icon-pingmufenge02:before { + content: "\e672"; +} + +.icon-zhinengdianbiao:before { + content: "\e772"; +} + +.icon-shezhi01:before { + content: "\e673"; +} + +.icon-zhinengshuibiao:before { + content: "\e773"; +} + +.icon-zuixiaohuaxi:before { + content: "\e674"; +} + +.icon-shuiyajiance01:before { + content: "\e774"; +} + +.icon-zuidahuaxi:before { + content: "\e675"; +} + +.icon-zhinengzhaoming:before { + content: "\e775"; +} + +.icon-huifuxi:before { + content: "\e676"; +} + +.icon-zhinengmenjin:before { + content: "\e776"; +} + +.icon-guanbixi:before { + content: "\e677"; +} + +.icon-tingchechang:before { + content: "\e777"; +} + +.icon-baocunJPG:before { + content: "\e678"; +} + +.icon-xiala3:before { + content: "\e778"; +} + +.icon-quxian:before { + content: "\e679"; +} + +.icon-zhinengkongtiao:before { + content: "\e779"; +} + +.icon-tingzhiyulan:before { + content: "\e67a"; +} + +.icon-sousuo2:before { + content: "\e77a"; +} + +.icon-wenduliuluzhi:before { + content: "\e67b"; +} + +.icon-shang1:before { + content: "\e77b"; +} + +.icon-shuaxin1:before { + content: "\e67c"; +} + +.icon-1_jingdianchuwuweixuanzhong:before { + content: "\e77c"; +} + +.icon-shangjiantou:before { + content: "\e67d"; +} + +.icon-dianti:before { + content: "\e77d"; +} + +.icon-shang:before { + content: "\e67e"; +} + +.icon-zhuangtai:before { + content: "\e77e"; +} + +.icon-zixun:before { + content: "\e67f"; +} + +.icon-keshi:before { + content: "\e77f"; +} + +.icon-youxiang01:before { + content: "\e680"; +} + +.icon-chongzhijilu:before { + content: "\e780"; +} + +.icon-QQ:before { + content: "\e681"; +} + +.icon-jingshi:before { + content: "\e781"; +} + +.icon-dianhua:before { + content: "\e682"; +} + +.icon-bianji2:before { + content: "\e782"; +} + +.icon-pingmufenge:before { + content: "\e683"; +} + +.icon-fuzhi:before { + content: "\e783"; +} + +.icon-gou:before { + content: "\e684"; +} + +.icon-guanyu:before { + content: "\e784"; +} + +.icon-dingdanxiangqing:before { + content: "\e685"; +} + +.icon-shishiyulan-01:before { + content: "\e785"; +} + +.icon-shiyonggaikuang:before { + content: "\e686"; +} + +.icon-shujuchakan:before { + content: "\e786"; +} + +.icon-fapiaoguanli:before { + content: "\e687"; +} + +.icon-shanchu2:before { + content: "\e787"; +} + +.icon-xiangqing:before { + content: "\e688"; +} + +.icon-xitongpeizhi:before { + content: "\e788"; +} + +.icon-baojingtuisongshezhi:before { + content: "\e689"; +} + +.icon-tezhengwendu:before { + content: "\e789"; +} + +.icon-zhifu:before { + content: "\e68a"; +} + +.icon-quanzhenwendu:before { + content: "\e78a"; +} + +.icon-zengzhifuwu:before { + content: "\e68b"; +} + +.icon-fenxiang:before { + content: "\e78b"; +} + +.icon-xufei:before { + content: "\e68c"; +} + +.icon-fenxiang01:before { + content: "\e78c"; +} + +.icon-asterisk1:before { + content: "\e68d"; +} + +.icon-wenhao2:before { + content: "\e78d"; +} + +.icon-window-maximize1:before { + content: "\e68e"; +} + +.icon-dian:before { + content: "\e78e"; +} + +.icon-crop1:before { + content: "\e68f"; +} + +.icon-asterisk2:before { + content: "\e690"; +} + +.icon-file-record1:before { + content: "\e691"; +} + +.icon-ffc1:before { + content: "\e692"; +} + +.icon-file-mp41:before { + content: "\e693"; +} + +.icon-window-minimize1:before { + content: "\e694"; +} + +.icon-ptz-downright1:before { + content: "\e695"; +} + +.icon-video-stream1:before { + content: "\e696"; +} + +.icon-file-jpg1:before { + content: "\e697"; +} + +.icon-file-stream1:before { + content: "\e698"; +} + +.icon-page-previous1:before { + content: "\e699"; +} + +.icon-expander-down1:before { + content: "\e69a"; +} + +.icon-ptz-left1:before { + content: "\e69b"; +} + +.icon-yinpinwenjian1:before { + content: "\e623"; +} + +.icon-yinpinwenjian2:before { + content: "\e626"; +} + +.icon-xiazaiyinpinwenjian:before { + content: "\e605"; +} + +.icon-yinpinwenjian:before { + content: "\e641"; +} + diff --git a/web_src/static/css/iconfont.woff2 b/web_src/static/css/iconfont.woff2 new file mode 100644 index 00000000..c8d7e3dd Binary files /dev/null and b/web_src/static/css/iconfont.woff2 differ diff --git a/web_src/static/css/login.css b/web_src/static/css/login.css deleted file mode 100755 index 1d236c1a..00000000 --- a/web_src/static/css/login.css +++ /dev/null @@ -1,396 +0,0 @@ - - - - -/*////////////////////////////////////////////////////////////////// -[ FONT ]*/ - -@font-face { - font-family: Poppins-Regular; - src: url('../fonts/poppins/Poppins-Regular.ttf'); -} - -@font-face { - font-family: Poppins-Medium; - src: url('../fonts/poppins/Poppins-Medium.ttf'); -} - -@font-face { - font-family: Poppins-Bold; - src: url('../fonts/poppins/Poppins-Bold.ttf'); -} - -@font-face { - font-family: Poppins-SemiBold; - src: url('../fonts/poppins/Poppins-SemiBold.ttf'); -} - -.limiter { - width: 100%; - margin: 0 auto; - font-family: Poppins-Regular, sans-serif; - -} - -.container-login100 { - width: 100%; - min-height: 100vh; - display: -webkit-box; - display: -webkit-flex; - display: -moz-box; - display: -ms-flexbox; - display: flex; - flex-wrap: wrap; - justify-content: center; - align-items: center; - background: #f2f2f2; -} - -.wrap-login100 { - background: #fff; - border-radius: 10px; - overflow: hidden; - padding: 77px 55px 33px 55px; - - box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1); - -webkit-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1); - -o-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1); - -ms-box-shadow: 0 5px 10px 0px rgba(0, 0, 0, 0.1); -} - - -/*------------------------------------------------------------------ -[ Form ]*/ - -.login100-form { - width: 100%; -} - -.login100-form-title { - display: block; - font-family: Poppins-Bold; - font-size: 30px; - color: #333333; - line-height: 1.2; - text-align: center; - -} -.login100-form-title i { - font-size: 60px; -} - -/*------------------------------------------------------------------ -[ Input ]*/ - -.wrap-input100 { - width: 100%; - position: relative; - border-bottom: 2px solid #adadad; - margin-bottom: 37px; -} - -.input100 { - font-family: Poppins-Regular; - font-size: 15px; - color: #555555; - line-height: 1.2; - - display: block; - width: 100%; - height: 45px; - background: transparent; - padding: 0 5px; - outline: none; - border: none; -} -.input100::-webkit-input-placeholder { color: #adadad;} -.input100:-moz-placeholder { color: #adadad;} -.input100::-moz-placeholder { color: #adadad;} -.input100:-ms-input-placeholder { color: #adadad;} - -/*---------------------------------------------*/ -.focus-input100 { - position: absolute; - display: block; - width: 100%; - height: 100%; - top: 0; - left: 0; - pointer-events: none; - color:transparent; -} - -.focus-input100::before { - content: ""; - display: block; - position: absolute; - bottom: -2px; - left: 0; - width: 0; - height: 2px; - - -webkit-transition: all 0.4s; - -o-transition: all 0.4s; - -moz-transition: all 0.4s; - transition: all 0.4s; - - background: #6a7dfe; - background: -webkit-linear-gradient(left, #21d4fd, #b721ff); - background: -o-linear-gradient(left, #21d4fd, #b721ff); - background: -moz-linear-gradient(left, #21d4fd, #b721ff); - background: linear-gradient(left, #21d4fd, #b721ff); -} - -.focus-input100::after { - font-family: Poppins-Regular; - font-size: 15px; - color: #999999; - line-height: 1.2; - - content: attr(data-placeholder); - display: block; - width: 100%; - position: absolute; - top: 16px; - left: 0px; - padding-left: 5px; - - -webkit-transition: all 0.4s; - -o-transition: all 0.4s; - -moz-transition: all 0.4s; - transition: all 0.4s; -} - -.input100:focus + .focus-input100::after { - top: -15px; -} - -.input100:focus + .focus-input100::before { - width: 100%; -} - -.has-val.input100 + .focus-input100::after { - top: -15px; -} - -.has-val.input100 + .focus-input100::before { - width: 100%; -} - -/*---------------------------------------------*/ -.btn-show-pass { - font-size: 15px; - color: #999999; - - display: -webkit-box; - display: -webkit-flex; - display: -moz-box; - display: -ms-flexbox; - display: flex; - align-items: center; - position: absolute; - height: 100%; - top: 0; - right: 0; - padding-right: 5px; - cursor: pointer; - -webkit-transition: all 0.4s; - -o-transition: all 0.4s; - -moz-transition: all 0.4s; - transition: all 0.4s; -} - -.btn-show-pass:hover { - color: #6a7dfe; - color: -webkit-linear-gradient(left, #21d4fd, #b721ff); - color: -o-linear-gradient(left, #21d4fd, #b721ff); - color: -moz-linear-gradient(left, #21d4fd, #b721ff); - color: linear-gradient(left, #21d4fd, #b721ff); -} - -.btn-show-pass.active { - color: #6a7dfe; - color: -webkit-linear-gradient(left, #21d4fd, #b721ff); - color: -o-linear-gradient(left, #21d4fd, #b721ff); - color: -moz-linear-gradient(left, #21d4fd, #b721ff); - color: linear-gradient(left, #21d4fd, #b721ff); -} - - - -/*------------------------------------------------------------------ -[ Button ]*/ -.container-login100-form-btn { - display: -webkit-box; - display: -webkit-flex; - display: -moz-box; - display: -ms-flexbox; - display: flex; - flex-wrap: wrap; - justify-content: center; - padding-top: 13px; -} - -.wrap-login100-form-btn { - width: 100%; - display: block; - position: relative; - z-index: 1; - border-radius: 25px; - overflow: hidden; - margin: 0 auto; -} - -.login100-form-bgbtn { - position: absolute; - z-index: -1; - width: 300%; - height: 100%; - background: #a64bf4; - background: -webkit-linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff); - background: -o-linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff); - background: -moz-linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff); - background: linear-gradient(right, #21d4fd, #b721ff, #21d4fd, #b721ff); - top: 0; - left: -100%; - - -webkit-transition: all 0.4s; - -o-transition: all 0.4s; - -moz-transition: all 0.4s; - transition: all 0.4s; -} - -.login100-form-btn { - font-family: Poppins-Medium; - font-size: 15px; - color: #fff; - line-height: 1.2; - text-transform: uppercase; - - display: -webkit-box; - display: -webkit-flex; - display: -moz-box; - display: -ms-flexbox; - display: flex; - justify-content: center; - align-items: center; - padding: 0 20px; - width: 100%; - height: 50px; - outline: none !important; - border: none; - background: transparent; -} - -.login100-form-btn:hover { - cursor: pointer; -} - -.wrap-login100-form-btn:hover .login100-form-bgbtn { - left: 0; -} - - -/*------------------------------------------------------------------ -[ Responsive ]*/ - -@media (max-width: 576px) { - .wrap-login100 { - padding: 77px 15px 33px 15px; - } -} - - - -/*------------------------------------------------------------------ -[ Alert validate ]*/ - -.validate-input { - position: relative; -} - -.alert-validate::before { - content: attr(data-validate); - position: absolute; - max-width: 70%; - background-color: #fff; - border: 1px solid #c80000; - border-radius: 2px; - padding: 4px 25px 4px 10px; - top: 50%; - -webkit-transform: translateY(-50%); - -moz-transform: translateY(-50%); - -ms-transform: translateY(-50%); - -o-transform: translateY(-50%); - transform: translateY(-50%); - right: 0px; - pointer-events: none; - - font-family: Poppins-Regular; - color: #c80000; - font-size: 13px; - line-height: 1.4; - text-align: left; - - visibility: hidden; - opacity: 0; - - -webkit-transition: opacity 0.4s; - -o-transition: opacity 0.4s; - -moz-transition: opacity 0.4s; - transition: opacity 0.4s; -} - -.alert-validate::after { - content: "\f06a"; - font-family: FontAwesome; - font-size: 16px; - color: #c80000; - - display: block; - position: absolute; - background-color: #fff; - top: 50%; - -webkit-transform: translateY(-50%); - -moz-transform: translateY(-50%); - -ms-transform: translateY(-50%); - -o-transform: translateY(-50%); - transform: translateY(-50%); - right: 5px; -} - -.alert-validate:hover:before { - visibility: visible; - opacity: 1; -} - -@media (max-width: 992px) { - .alert-validate::before { - visibility: visible; - opacity: 1; - } -} - -/** util **/ -.p-b-26 {padding-bottom: 26px;} -.p-b-48 {padding-bottom: 48px;} -.p-t-115 {padding-top: 115px;} - -/**font**/ -/* .zmdi { - display: inline-block; - font: normal normal normal 14px/1 'Material-Design-Iconic-Font'; - font-size: 14px; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.zmdi-font::before { - content: '\f16a'; -} -.login100-form-title i { - font-size: 60px; -} */ - diff --git a/web_src/static/js/jessibuca/ff.js b/web_src/static/js/jessibuca/ff.js new file mode 100644 index 00000000..164128c7 --- /dev/null +++ b/web_src/static/js/jessibuca/ff.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};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=false;var ENVIRONMENT_IS_WORKER=true;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_PTHREAD=Module["ENVIRONMENT_IS_PTHREAD"]||false;if(ENVIRONMENT_IS_PTHREAD){buffer=Module["buffer"]}var _scriptDir=typeof document!=="undefined"&&document.currentScript?document.currentScript.src:undefined;if(ENVIRONMENT_IS_WORKER){_scriptDir=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;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(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{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{}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(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var str="";while(!(idx>=endIdx)){var u0=heap[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>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;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){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}function UTF16ToString(ptr,maxBytesToRead){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){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){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){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 allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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 INITIAL_MEMORY=Module["INITIAL_MEMORY"]||67108864;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module["wasmMemory"];buffer=Module["buffer"]}else{if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":INITIAL_MEMORY/65536,"shared":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)")}throw Error("bad memory")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;if(!ENVIRONMENT_IS_PTHREAD)__ATINIT__.push({func:function(){___wasm_call_ctors()}});if(ENVIRONMENT_IS_PTHREAD)runtimeInitialized=true;function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){if(ENVIRONMENT_IS_PTHREAD)return;FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;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 addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){assert(!ENVIRONMENT_IS_PTHREAD,"addRunDependency cannot be used in a pthread worker");runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}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)}if(ENVIRONMENT_IS_PTHREAD)console.error("Pthread aborting at "+(new Error).stack);what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var wasmBinaryFile="ff.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"){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)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["da"];wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){removeRunDependency("wasm-instantiate")}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}function receiveInstantiatedSource(output){receiveInstance(output["instance"],output["module"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}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();return{}}var tempDouble;var tempI64;var ASM_CONSTS={155132:function(){throw"Canceled!"},155395:function($0,$1){setTimeout(function(){__emscripten_do_dispatch_to_thread($0,$1)},0)}};function initPthreadsJS(){PThread.initRuntime()}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)}}}var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};function _emscripten_futex_wake(addr,count){if(addr<=0||addr>HEAP8.length||addr&3!=0||count<0)return-28;if(count==0)return 0;if(count>=2147483647)count=Infinity;var mainThreadWaitAddress=Atomics.load(HEAP32,__emscripten_main_thread_futex>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(HEAP32,__emscripten_main_thread_futex>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(HEAP32,addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}Module["_emscripten_futex_wake"]=_emscripten_futex_wake;function killThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in killThread!";HEAP32[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];pthread.worker.terminate();PThread.freeThreadData(pthread);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker),1);pthread.worker.pthread=undefined}function cancelThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cancelThread!";var pthread=PThread.pthreads[pthread_ptr];pthread.worker.postMessage({"cmd":"cancel"})}function cleanupThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cleanupThread!";HEAP32[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];if(pthread){var worker=pthread.worker;PThread.returnWorkerToPool(worker)}}var PThread={unusedWorkers:[],runningWorkers:[],initMainThreadBlock:function(){},initRuntime:function(){var tb=_malloc(228);for(var i=0;i<228/4;++i)HEAPU32[tb/4+i]=0;HEAP32[tb+12>>2]=tb;var headPtr=tb+152;HEAP32[headPtr>>2]=headPtr;var tlsMemory=_malloc(512);for(var i=0;i<128;++i)HEAPU32[tlsMemory/4+i]=0;Atomics.store(HEAPU32,tb+100>>2,tlsMemory);Atomics.store(HEAPU32,tb+40>>2,tb);__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(tb)},initWorker:function(){},pthreads:{},threadExitHandlers:[],setThreadStatus:function(){},runExitHandlers:function(){while(PThread.threadExitHandlers.length>0){PThread.threadExitHandlers.pop()()}if(ENVIRONMENT_IS_PTHREAD&&_pthread_self())___pthread_tsd_run_dtors()},threadExit:function(exitCode){var tb=_pthread_self();if(tb){Atomics.store(HEAPU32,tb+4>>2,exitCode);Atomics.store(HEAPU32,tb+0>>2,1);Atomics.store(HEAPU32,tb+56>>2,1);Atomics.store(HEAPU32,tb+60>>2,0);PThread.runExitHandlers();_emscripten_futex_wake(tb+0,2147483647);__emscripten_thread_init(0,0,0);if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exit"})}}},threadCancel:function(){PThread.runExitHandlers();var tb=_pthread_self();Atomics.store(HEAPU32,tb+4>>2,-1);Atomics.store(HEAPU32,tb+0>>2,1);_emscripten_futex_wake(tb+0,2147483647);__emscripten_thread_init(0,0,0);postMessage({"cmd":"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread&&pthread.worker){PThread.returnWorkerToPool(pthread.worker)}}PThread.pthreads={};for(var i=0;i>2];HEAP32[pthread.threadInfoStruct+100>>2]=0;_free(tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},returnWorkerToPool:function(worker){PThread.runWithoutMainThreadQueuedCalls(function(){delete PThread.pthreads[worker.pthread.threadInfoStruct];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);PThread.freeThreadData(worker.pthread);worker.pthread=undefined})},runWithoutMainThreadQueuedCalls:function(func){HEAP32[__emscripten_allow_main_runtime_queued_calls>>2]=0;try{func()}finally{HEAP32[__emscripten_allow_main_runtime_queued_calls>>2]=1}},receiveObjectTransfer:function(data){},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=function(e){var d=e["data"];var cmd=d["cmd"];if(worker.pthread)PThread.currentProxiedOperationCallerThread=worker.pthread.threadInfoStruct;if(d["targetThread"]&&d["targetThread"]!=_pthread_self()){var thread=PThread.pthreads[d.targetThread];if(thread){thread.worker.postMessage(e.data,d["transferList"])}else{console.error('Internal error! Worker sent a message "'+cmd+'" to target pthread '+d["targetThread"]+", but that thread no longer exists!")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd==="processQueuedMainThreadWork"){_emscripten_main_thread_process_queued_calls()}else if(cmd==="spawnThread"){spawnThread(e.data)}else if(cmd==="cleanupThread"){cleanupThread(d["thread"])}else if(cmd==="killThread"){killThread(d["thread"])}else if(cmd==="cancelThread"){cancelThread(d["thread"])}else if(cmd==="loaded"){worker.loaded=true;if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread();delete worker.runPthread}}else if(cmd==="print"){out("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="printErr"){err("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="alert"){alert("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="exit"){var detached=worker.pthread&&Atomics.load(HEAPU32,worker.pthread.threadInfoStruct+64>>2);if(detached){PThread.returnWorkerToPool(worker)}}else if(cmd==="exitProcess"){try{exit(d["returnCode"])}catch(e){if(e instanceof ExitStatus)return;throw e}}else if(cmd==="cancelDone"){PThread.returnWorkerToPool(worker)}else if(cmd==="objectTransfer"){PThread.receiveObjectTransfer(e.data)}else if(e.data.target==="setimmediate"){worker.postMessage(e.data)}else{err("worker sent an unknown command "+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=function(e){err("pthread sent an error! "+e.filename+":"+e.lineno+": "+e.message)};worker.postMessage({"cmd":"load","urlOrBlob":Module["mainScriptUrlOrBlob"]||_scriptDir,"wasmMemory":wasmMemory,"wasmModule":wasmModule})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile("ff.worker.js");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}if(PThread.unusedWorkers.length>0)return PThread.unusedWorkers.pop();else return null},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,fd,cmd,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,path,flags,varargs);SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};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)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}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")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}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}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}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 simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}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 getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}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){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.indexOf("j")!=-1){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i>2)+i])}return array}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}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;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;i4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>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 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.indexOf("unsigned")!=-1;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_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 __emscripten_notify_thread_queue(targetThreadId,mainThreadId){if(targetThreadId==mainThreadId){postMessage({"cmd":"processQueuedMainThreadWork"})}else if(ENVIRONMENT_IS_PTHREAD){postMessage({"targetThread":targetThreadId,"cmd":"processThreadQueue"})}else{var pthread=PThread.pthreads[targetThreadId];var worker=pthread&&pthread.worker;if(!worker){return}worker.postMessage({"cmd":"processThreadQueue"})}return 1}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}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_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 _clock(){if(_clock.start===undefined)_clock.start=Date.now();return(Date.now()-_clock.start)*(1e6/1e3)|0}function _emscripten_asm_const_int(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_check_blocking_allowed(){if(ENVIRONMENT_IS_WORKER)return;warnOnce("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function _emscripten_conditional_set_current_thread_status(expectedStatus,newStatus){}function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>HEAP8.length||addr&3!=0)return-28;if(!ENVIRONMENT_IS_WEB){var ret=Atomics.wait(HEAP32,addr>>2,val,timeout);if(ret==="timed-out")return-73;if(ret==="not-equal")return-6;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{if(Atomics.load(HEAP32,addr>>2)!=val){return-6}var tNow=performance.now();var tEnd=tNow+timeout;var lastAddr=Atomics.exchange(HEAP32,__emscripten_main_thread_futex>>2,addr);while(1){tNow=performance.now();if(tNow>tEnd){lastAddr=Atomics.exchange(HEAP32,__emscripten_main_thread_futex>>2,0);return-73}lastAddr=Atomics.exchange(HEAP32,__emscripten_main_thread_futex>>2,0);if(lastAddr==0){break}_emscripten_main_thread_process_queued_calls();if(Atomics.load(HEAP32,addr>>2)!=val){return-6}lastAddr=Atomics.exchange(HEAP32,__emscripten_main_thread_futex>>2,addr)}return 0}}function reallyNegative(x){return x<0||x===0&&1/x===-Infinity}function convertI32PairToI53(lo,hi){return(lo>>>0)+hi*4294967296}function convertU32PairToI53(lo,hi){return(lo>>>0)+(hi>>>0)*4294967296}function reSign(value,bits){if(value<=0){return value}var half=bits<=32?Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}function unSign(value,bits){if(value>=0){return value}return bits<=32?2*Math.abs(1<>3];argIndex+=8}else if(type=="i64"){ret=[HEAP32[argIndex>>2],HEAP32[argIndex+4>>2]];argIndex+=8}else{type="i32";ret=HEAP32[argIndex>>2];argIndex+=4}return ret}var ret=[];var curr,next,currArg;while(1){var startTextIndex=textIndex;curr=HEAP8[textIndex>>0];if(curr===0)break;next=HEAP8[textIndex+1>>0];if(curr==37){var flagAlwaysSigned=false;var flagLeftAlign=false;var flagAlternative=false;var flagZeroPad=false;var flagPadSign=false;flagsLoop:while(1){switch(next){case 43:flagAlwaysSigned=true;break;case 45:flagLeftAlign=true;break;case 35:flagAlternative=true;break;case 48:if(flagZeroPad){break flagsLoop}else{flagZeroPad=true;break}case 32:flagPadSign=true;break;default:break flagsLoop}textIndex++;next=HEAP8[textIndex+1>>0]}var width=0;if(next==42){width=getNextArg("i32");textIndex++;next=HEAP8[textIndex+1>>0]}else{while(next>=48&&next<=57){width=width*10+(next-48);textIndex++;next=HEAP8[textIndex+1>>0]}}var precisionSet=false,precision=-1;if(next==46){precision=0;precisionSet=true;textIndex++;next=HEAP8[textIndex+1>>0];if(next==42){precision=getNextArg("i32");textIndex++}else{while(1){var precisionChr=HEAP8[textIndex+1>>0];if(precisionChr<48||precisionChr>57)break;precision=precision*10+(precisionChr-48);textIndex++}}next=HEAP8[textIndex+1>>0]}if(precision<0){precision=6;precisionSet=false}var argSize;switch(String.fromCharCode(next)){case"h":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==104){textIndex++;argSize=1}else{argSize=2}break;case"l":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==108){textIndex++;argSize=8}else{argSize=4}break;case"L":case"q":case"j":argSize=8;break;case"z":case"t":case"I":argSize=4;break;default:argSize=null}if(argSize)textIndex++;next=HEAP8[textIndex+1>>0];switch(String.fromCharCode(next)){case"d":case"i":case"u":case"o":case"x":case"X":case"p":{var signed=next==100||next==105;argSize=argSize||4;currArg=getNextArg("i"+argSize*8);var argText;if(argSize==8){currArg=next==117?convertU32PairToI53(currArg[0],currArg[1]):convertI32PairToI53(currArg[0],currArg[1])}if(argSize<=4){var limit=Math.pow(256,argSize)-1;currArg=(signed?reSign:unSign)(currArg&limit,argSize*8)}var currAbsArg=Math.abs(currArg);var prefix="";if(next==100||next==105){argText=reSign(currArg,8*argSize,1).toString(10)}else if(next==117){argText=unSign(currArg,8*argSize,1).toString(10);currArg=Math.abs(currArg)}else if(next==111){argText=(flagAlternative?"0":"")+currAbsArg.toString(8)}else if(next==120||next==88){prefix=flagAlternative&&currArg!=0?"0x":"";if(currArg<0){currArg=-currArg;argText=(currAbsArg-1).toString(16);var buffer=[];for(var i=0;i=0){if(flagAlwaysSigned){prefix="+"+prefix}else if(flagPadSign){prefix=" "+prefix}}if(argText.charAt(0)=="-"){prefix="-"+prefix;argText=argText.substr(1)}while(prefix.length+argText.lengthexponent&&exponent>=-4){next=(next==103?"f":"F").charCodeAt(0);precision-=exponent+1}else{next=(next==103?"e":"E").charCodeAt(0);precision--}effectivePrecision=Math.min(precision,20)}if(next==101||next==69){argText=currArg.toExponential(effectivePrecision);if(/[eE][-+]\d$/.test(argText)){argText=argText.slice(0,-1)+"0"+argText.slice(-1)}}else if(next==102||next==70){argText=currArg.toFixed(effectivePrecision);if(currArg===0&&reallyNegative(currArg)){argText="-"+argText}}var parts=argText.split("e");if(isGeneral&&!flagAlternative){while(parts[0].length>1&&parts[0].indexOf(".")!=-1&&(parts[0].slice(-1)=="0"||parts[0].slice(-1)==".")){parts[0]=parts[0].slice(0,-1)}}else{if(flagAlternative&&argText.indexOf(".")==-1)parts[0]+=".";while(precision>effectivePrecision++)parts[0]+="0"}argText=parts[0]+(parts.length>1?"e"+parts[1]:"");if(next==69)argText=argText.toUpperCase();if(currArg>=0){if(flagAlwaysSigned){argText="+"+argText}else if(flagPadSign){argText=" "+argText}}}while(argText.length>0])}}else{ret=ret.concat(intArrayFromString("(null)".substr(0,argLength),true))}if(flagLeftAlign){while(argLength0){ret.push(32)}if(!flagLeftAlign)ret.push(getNextArg("i8"));break}case"n":{var ptr=getNextArg("i32*");HEAP32[ptr>>2]=ret.length;break}case"%":{ret.push(curr);break}default:{for(var i=startTextIndex;i>0])}}}textIndex+=2}else{ret.push(curr);textIndex+=1}}return ret}function traverseStack(args){if(!args||!args.callee||!args.callee.name){return[null,"",""]}var funstr=args.callee.toString();var funcname=args.callee.name;var str="(";var first=true;for(var i in args){var a=args[i];if(!first){str+=", "}first=false;if(typeof a==="number"||typeof a==="string"){str+=a}else{str+="("+typeof a+")"}}str+=")";var caller=args.callee.caller;args=caller?caller.arguments:[];if(first)str="";return[args,funcname,str]}function _emscripten_get_callstack_js(flags){var callstack=jsStackTrace();var iThisFunc=callstack.lastIndexOf("_emscripten_log");var iThisFunc2=callstack.lastIndexOf("_emscripten_get_callstack");var iNextLine=callstack.indexOf("\n",Math.max(iThisFunc,iThisFunc2))+1;callstack=callstack.slice(iNextLine);if(flags&32){warnOnce("EM_LOG_DEMANGLE is deprecated; ignoring")}if(flags&8&&typeof emscripten_source_map==="undefined"){warnOnce('Source map information is not available, emscripten_log with EM_LOG_C_STACK will be ignored. Build with "--pre-js $EMSCRIPTEN/src/emscripten-source-map.min.js" linker flag to add source map loading to code.');flags^=8;flags|=16}var stack_args=null;if(flags&128){stack_args=traverseStack(arguments);while(stack_args[1].indexOf("_emscripten_")>=0)stack_args=traverseStack(stack_args[0])}var lines=callstack.split("\n");callstack="";var newFirefoxRe=new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)");var firefoxRe=new RegExp("\\s*(.*?)@(.*):(.*)(:(.*))?");var chromeRe=new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");for(var l in lines){var line=lines[l];var symbolName="";var file="";var lineno=0;var column=0;var parts=chromeRe.exec(line);if(parts&&parts.length==5){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]}else{parts=newFirefoxRe.exec(line);if(!parts)parts=firefoxRe.exec(line);if(parts&&parts.length>=4){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]|0}else{callstack+=line+"\n";continue}}var haveSourceMap=false;if(flags&8){var orig=emscripten_source_map.originalPositionFor({line:lineno,column:column});haveSourceMap=orig&&orig.source;if(haveSourceMap){if(flags&64){orig.source=orig.source.substring(orig.source.replace(/\\/g,"/").lastIndexOf("/")+1)}callstack+=" at "+symbolName+" ("+orig.source+":"+orig.line+":"+orig.column+")\n"}}if(flags&16||!haveSourceMap){if(flags&64){file=file.substring(file.replace(/\\/g,"/").lastIndexOf("/")+1)}callstack+=(haveSourceMap?" = "+symbolName:" at "+symbolName)+" ("+file+":"+lineno+":"+column+")\n"}if(flags&128&&stack_args[0]){if(stack_args[1]==symbolName&&stack_args[2].length>0){callstack=callstack.replace(/\s+$/,"");callstack+=" with values: "+stack_args[1]+stack_args[2]+"\n"}stack_args=traverseStack(stack_args[0])}}callstack=callstack.replace(/\s+$/,"");return callstack}function _emscripten_log_js(flags,str){if(flags&24){str=str.replace(/\s+$/,"");str+=(str.length>0?"\n":"")+_emscripten_get_callstack_js(flags)}if(flags&1){if(flags&4){console.error(str)}else if(flags&2){console.warn(str)}else if(flags&512){console.info(str)}else if(flags&256){console.debug(str)}else{console.log(str)}}else if(flags&6){err(str)}else{out(str)}}function _emscripten_log(flags,format,varargs){var result=formatString(format,varargs);var str=UTF8ArrayToString(result,0);_emscripten_log_js(flags,str)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var serializedNumCallArgs=numCallArgs;var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i>=2;while(ch=HEAPU8[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?HEAPF64[buf++>>1]:HEAP32[buf]);++buf}return readAsmConstArgsArray}function _emscripten_receive_on_main_thread_js(index,numCallArgs,args){_emscripten_receive_on_main_thread_js_callArgs.length=numCallArgs;var b=args>>3;for(var i=0;i=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence>2]=eventTypeId;HEAP32[varargs+4>>2]=eventData;HEAP32[varargs+8>>2]=userData;__emscripten_call_on_thread(0,targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}HEAP32[varargs>>2]=targetCanvasPtr;HEAP32[varargs+4>>2]=width;HEAP32[varargs+8>>2]=height;__emscripten_call_on_thread(0,targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!=="undefined"?document.querySelector(target):undefined);return domElement}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){HEAP32[canvas.canvasSharedPtr>>2]=width;HEAP32[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=HEAP32[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function _emscripten_set_current_thread_status(newStatus){}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);HEAP32[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2;var powerPreference=HEAP32[a+(24>>2)];var contextAttributes={"alpha":!!HEAP32[a+(0>>2)],"depth":!!HEAP32[a+(4>>2)],"stencil":!!HEAP32[a+(8>>2)],"antialias":!!HEAP32[a+(12>>2)],"premultipliedAlpha":!!HEAP32[a+(16>>2)],"preserveDrawingBuffer":!!HEAP32[a+(20>>2)],"powerPreference":__emscripten_webgl_power_preferences[powerPreference],"failIfMajorPerformanceCaveat":!!HEAP32[a+(28>>2)],majorVersion:HEAP32[a+(32>>2)],minorVersion:HEAP32[a+(36>>2)],enableExtensionsByDefault:HEAP32[a+(40>>2)],explicitSwapControl:HEAP32[a+(44>>2)],proxyContextToMainThread:HEAP32[a+(48>>2)],renderViaOffscreenBackBuffer:HEAP32[a+(52>>2)]};var canvas=findCanvasEventTarget(target);if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,__environ,environ_buf);try{var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _environ_sizes_get(penviron_count,penviron_buf_size){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,penviron_count,penviron_buf_size);try{var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,fd);try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_fdstat_get(fd,pbuf){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(7,1,fd,pbuf);try{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4;HEAP8[pbuf>>0]=type;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(8,1,fd,iov,iovcnt,pnum);try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(9,1,fd,offset_low,offset_high,whence,newOffset);try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(10,1,fd,iov,iovcnt,pnum);try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}function _tzset(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(11,1);if(_tzset.called)return;_tzset.called=true;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAP32[__get_timezone()>>2]=stdTimezoneOffset*60;HEAP32[__get_daylight()>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _pthread_cleanup_pop(execute){var routine=PThread.threadExitHandlers.pop();if(execute)routine()}function _pthread_cleanup_push(routine,arg){PThread.threadExitHandlers.push(function(){wasmTable.get(routine)(arg)})}function spawnThread(threadParams){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var worker=PThread.getNewWorker();if(worker.pthread!==undefined)throw"Internal error!";if(!threadParams.pthread_ptr)throw"Internal error, no pthread ptr!";PThread.runningWorkers.push(worker);var tlsMemory=_malloc(128*4);for(var i=0;i<128;++i){HEAP32[tlsMemory+i*4>>2]=0}var stackHigh=threadParams.stackBase+threadParams.stackSize;var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,threadInfoStruct:threadParams.pthread_ptr};var tis=pthread.threadInfoStruct>>2;Atomics.store(HEAPU32,tis+(64>>2),threadParams.detached);Atomics.store(HEAPU32,tis+(100>>2),tlsMemory);Atomics.store(HEAPU32,tis+(40>>2),pthread.threadInfoStruct);Atomics.store(HEAPU32,tis+(80>>2),threadParams.stackSize);Atomics.store(HEAPU32,tis+(76>>2),stackHigh);Atomics.store(HEAPU32,tis+(104>>2),threadParams.stackSize);Atomics.store(HEAPU32,tis+(104+8>>2),stackHigh);Atomics.store(HEAPU32,tis+(104+12>>2),threadParams.detached);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(HEAPU32,tis+(172>>2),global_locale);worker.pthread=pthread;var msg={"cmd":"run","start_routine":threadParams.startRoutine,"arg":threadParams.arg,"threadInfoStruct":threadParams.pthread_ptr,"stackBase":threadParams.stackBase,"stackSize":threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}}function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 6}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 28}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;if(attr&&attr!=-1){stackSize=HEAP32[attr>>2];stackSize+=81920;stackBase=HEAP32[attr+8>>2];detached=HEAP32[attr+12>>2]!==0}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_memalign(16,stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(228);for(var i=0;i<228>>2;++i)HEAPU32[(threadInfoStruct>>2)+i]=0;HEAP32[pthread_ptr>>2]=threadInfoStruct;HEAP32[threadInfoStruct+12>>2]=threadInfoStruct;var headPtr=threadInfoStruct+152;HEAP32[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList)}else{spawnThread(threadParams)}return 0}function __pthread_testcancel_js(){if(!ENVIRONMENT_IS_PTHREAD)return;var tb=_pthread_self();if(!tb)return;var cancelDisabled=Atomics.load(HEAPU32,tb+56>>2);if(cancelDisabled)return;var canceled=Atomics.load(HEAPU32,tb+0>>2);if(canceled==2)throw"Canceled!"}function __emscripten_do_pthread_join(thread,status,block){if(!thread){err("pthread_join attempted on a null thread pointer!");return ERRNO_CODES.ESRCH}if(ENVIRONMENT_IS_PTHREAD&&_pthread_self()==thread){err("PThread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}else if(!ENVIRONMENT_IS_PTHREAD&&_emscripten_main_browser_thread_id()==thread){err("Main thread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}var self=HEAP32[thread+12>>2];if(self!==thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var detached=Atomics.load(HEAPU32,thread+64>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return ERRNO_CODES.EINVAL}if(block){_emscripten_check_blocking_allowed()}for(;;){var threadStatus=Atomics.load(HEAPU32,thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(HEAPU32,thread+4>>2);if(status)HEAP32[status>>2]=threadExitCode;Atomics.store(HEAPU32,thread+64>>2,1);if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({"cmd":"cleanupThread","thread":thread});return 0}if(!block){return ERRNO_CODES.EBUSY}__pthread_testcancel_js();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function _pthread_join(thread,status){return __emscripten_do_pthread_join(thread,status,true)}function _setTempRet0($i){setTempRet0($i|0)}function _sysconf(name){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(12,1,name);switch(name){case 30:return 16384;case 85:var maxHeapSize=HEAPU8.length;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}setErrNo(28);return-1}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var GLctx;var proxiedFunctionTable=[null,___sys_fcntl64,___sys_open,_emscripten_set_canvas_element_size_main_thread,_environ_get,_environ_sizes_get,_fd_close,_fd_fdstat_get,_fd_read,_fd_seek,_fd_write,_tzset,_sysconf];function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"e":___assert_fail,"Q":___sys_fcntl64,"P":___sys_open,"V":__embind_register_bool,"y":__embind_register_class,"q":__embind_register_class_constructor,"m":__embind_register_class_function,"$":__embind_register_class_property,"U":__embind_register_emval,"w":__embind_register_float,"d":__embind_register_integer,"c":__embind_register_memory_view,"x":__embind_register_std_string,"o":__embind_register_std_wstring,"W":__embind_register_void,"I":__emscripten_notify_thread_queue,"J":__emval_as,"i":__emval_call_void_method,"z":__emval_decref,"h":__emval_get_method_caller,"_":__emval_incref,"C":__emval_run_destructors,"R":__emval_take_value,"b":_abort,"Y":_clock,"s":_emscripten_asm_const_int,"M":_emscripten_check_blocking_allowed,"t":_emscripten_conditional_set_current_thread_status,"g":_emscripten_futex_wait,"f":_emscripten_futex_wake,"k":_emscripten_get_now,"j":_emscripten_log,"D":_emscripten_memcpy_big,"F":_emscripten_receive_on_main_thread_js,"E":_emscripten_resize_heap,"G":_emscripten_set_canvas_element_size,"r":_emscripten_set_current_thread_status,"H":_emscripten_webgl_create_context,"N":_environ_get,"O":_environ_sizes_get,"v":_fd_close,"S":_fd_fdstat_get,"T":_fd_read,"A":_fd_seek,"u":_fd_write,"X":_gettimeofday,"B":initPthreadsJS,"a":wasmMemory,"K":_pthread_cleanup_pop,"L":_pthread_cleanup_push,"l":_pthread_create,"p":_pthread_join,"n":_setTempRet0,"Z":_sysconf};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["aa"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ba"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ca"]).apply(null,arguments)};var _strlen=Module["_strlen"]=function(){return(_strlen=Module["_strlen"]=Module["asm"]["ea"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["fa"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["ga"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["ha"]).apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return(_emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=Module["asm"]["ia"]).apply(null,arguments)};var __get_tzname=Module["__get_tzname"]=function(){return(__get_tzname=Module["__get_tzname"]=Module["asm"]["ja"]).apply(null,arguments)};var __get_daylight=Module["__get_daylight"]=function(){return(__get_daylight=Module["__get_daylight"]=Module["asm"]["ka"]).apply(null,arguments)};var __get_timezone=Module["__get_timezone"]=function(){return(__get_timezone=Module["__get_timezone"]=Module["asm"]["la"]).apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return(_pthread_self=Module["_pthread_self"]=Module["asm"]["ma"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return(_emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=Module["asm"]["na"]).apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return(___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=Module["asm"]["oa"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return(_emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=Module["asm"]["pa"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return(_emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=Module["asm"]["qa"]).apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return(_emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=Module["asm"]["ra"]).apply(null,arguments)};var __emscripten_do_dispatch_to_thread=Module["__emscripten_do_dispatch_to_thread"]=function(){return(__emscripten_do_dispatch_to_thread=Module["__emscripten_do_dispatch_to_thread"]=Module["asm"]["sa"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return(_emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=Module["asm"]["ta"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=Module["asm"]["ua"]).apply(null,arguments)};var __emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=function(){return(__emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=Module["asm"]["va"]).apply(null,arguments)};var _emscripten_tls_init=Module["_emscripten_tls_init"]=function(){return(_emscripten_tls_init=Module["_emscripten_tls_init"]=Module["asm"]["wa"]).apply(null,arguments)};var __emscripten_thread_init=Module["__emscripten_thread_init"]=function(){return(__emscripten_thread_init=Module["__emscripten_thread_init"]=Module["asm"]["xa"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["ya"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["za"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["Aa"]).apply(null,arguments)};var _emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=function(){return(_emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=Module["asm"]["Ba"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["Ca"]).apply(null,arguments)};var dynCall_ijiii=Module["dynCall_ijiii"]=function(){return(dynCall_ijiii=Module["dynCall_ijiii"]=Module["asm"]["Da"]).apply(null,arguments)};var dynCall_viiijj=Module["dynCall_viiijj"]=function(){return(dynCall_viiijj=Module["dynCall_viiijj"]=Module["asm"]["Ea"]).apply(null,arguments)};var dynCall_jij=Module["dynCall_jij"]=function(){return(dynCall_jij=Module["dynCall_jij"]=Module["asm"]["Fa"]).apply(null,arguments)};var dynCall_jii=Module["dynCall_jii"]=function(){return(dynCall_jii=Module["dynCall_jii"]=Module["asm"]["Ga"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["Ha"]).apply(null,arguments)};var _ff_h264_cabac_tables=Module["_ff_h264_cabac_tables"]=77706;var __emscripten_allow_main_runtime_queued_calls=Module["__emscripten_allow_main_runtime_queued_calls"]=241152;var __emscripten_main_thread_futex=Module["__emscripten_main_thread_futex"]=1178e3;Module["PThread"]=PThread;Module["PThread"]=PThread;Module["wasmMemory"]=wasmMemory;Module["ExitStatus"]=ExitStatus;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 run(args){args=args||arguments_;if(runDependencies>0){return}if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"loaded"});return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(!implicit){if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exitProcess","returnCode":status});throw new ExitStatus(status)}else{}}if(noExitRuntime){}else{PThread.terminateAllThreads();EXITSTATUS=status;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()()}}if(ENVIRONMENT_IS_PTHREAD){noExitRuntime=false;PThread.initWorker()}run();module.exports=Module; diff --git a/web_src/static/js/jessibuca/ff.wasm b/web_src/static/js/jessibuca/ff.wasm new file mode 100755 index 00000000..837c7044 Binary files /dev/null and b/web_src/static/js/jessibuca/ff.wasm differ diff --git a/web_src/static/js/jessibuca/ff.worker.js b/web_src/static/js/jessibuca/ff.worker.js new file mode 100644 index 00000000..8f909e36 --- /dev/null +++ b/web_src/static/js/jessibuca/ff.worker.js @@ -0,0 +1 @@ +var initializedJS=false;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};function moduleLoaded(){}this.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}moduleLoaded()}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);if(!initializedJS){Module["___embind_register_native_and_builtin_types"]();initializedJS=true}try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["getNoExitRuntime"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}}; diff --git a/web_src/static/js/jessibuca/index.js b/web_src/static/js/jessibuca/index.js new file mode 100644 index 00000000..9d7bb471 --- /dev/null +++ b/web_src/static/js/jessibuca/index.js @@ -0,0 +1,4602 @@ +!function () { + function e(e) { + return e && e.__esModule ? e.default : e + } + + function t(e, t, r) { + Object.defineProperty(e, t, {get: r, enumerable: !0}) + } + + var r, n, o = !1; + + function a() { + return o || (o = !0, n = e => { + var t = ["attribute vec4 vertexPos;", "attribute vec4 texturePos;", "varying vec2 textureCoord;", "void main()", "{", "gl_Position = vertexPos;", "textureCoord = texturePos.xy;", "}"].join("\n"), + r = ["precision highp float;", "varying highp vec2 textureCoord;", "uniform sampler2D ySampler;", "uniform sampler2D uSampler;", "uniform sampler2D vSampler;", "const mat4 YUV2RGB = mat4", "(", "1.1643828125, 0, 1.59602734375, -.87078515625,", "1.1643828125, -.39176171875, -.81296875, .52959375,", "1.1643828125, 2.017234375, 0, -1.081390625,", "0, 0, 0, 1", ");", "void main(void) {", "highp float y = texture2D(ySampler, textureCoord).r;", "highp float u = texture2D(uSampler, textureCoord).r;", "highp float v = texture2D(vSampler, textureCoord).r;", "gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;", "}"].join("\n"), + n = e.createShader(e.VERTEX_SHADER); + e.shaderSource(n, t), e.compileShader(n), e.getShaderParameter(n, e.COMPILE_STATUS) || console.log("Vertex shader failed to compile: " + e.getShaderInfoLog(n)); + var o = e.createShader(e.FRAGMENT_SHADER); + e.shaderSource(o, r), e.compileShader(o), e.getShaderParameter(o, e.COMPILE_STATUS) || console.log("Fragment shader failed to compile: " + e.getShaderInfoLog(o)); + var a = e.createProgram(); + e.attachShader(a, n), e.attachShader(a, o), e.linkProgram(a), e.getProgramParameter(a, e.LINK_STATUS) || console.log("Program failed to compile: " + e.getProgramInfoLog(a)), e.useProgram(a); + var i = e.createBuffer(); + e.bindBuffer(e.ARRAY_BUFFER, i), e.bufferData(e.ARRAY_BUFFER, new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]), e.STATIC_DRAW); + var s = e.getAttribLocation(a, "vertexPos"); + e.enableVertexAttribArray(s), e.vertexAttribPointer(s, 2, e.FLOAT, !1, 0, 0); + var u = e.createBuffer(); + e.bindBuffer(e.ARRAY_BUFFER, u), e.bufferData(e.ARRAY_BUFFER, new Float32Array([1, 0, 0, 0, 1, 1, 0, 1]), e.STATIC_DRAW); + var c = e.getAttribLocation(a, "texturePos"); + + function l(t, r) { + var n = e.createTexture(); + return e.bindTexture(e.TEXTURE_2D, n), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_MAG_FILTER, e.LINEAR), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_MIN_FILTER, e.LINEAR), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_S, e.CLAMP_TO_EDGE), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_T, e.CLAMP_TO_EDGE), e.bindTexture(e.TEXTURE_2D, null), e.uniform1i(e.getUniformLocation(a, t), r), n + } + + e.enableVertexAttribArray(c), e.vertexAttribPointer(c, 2, e.FLOAT, !1, 0, 0); + var d = l("ySampler", 0), f = l("uSampler", 1), p = l("vSampler", 2); + return function (t, r, n, o, a) { + e.viewport(0, 0, t, r), e.activeTexture(e.TEXTURE0), e.bindTexture(e.TEXTURE_2D, d), e.texImage2D(e.TEXTURE_2D, 0, e.LUMINANCE, t, r, 0, e.LUMINANCE, e.UNSIGNED_BYTE, n), e.activeTexture(e.TEXTURE1), e.bindTexture(e.TEXTURE_2D, f), e.texImage2D(e.TEXTURE_2D, 0, e.LUMINANCE, t / 2, r / 2, 0, e.LUMINANCE, e.UNSIGNED_BYTE, o), e.activeTexture(e.TEXTURE2), e.bindTexture(e.TEXTURE_2D, p), e.texImage2D(e.TEXTURE_2D, 0, e.LUMINANCE, t / 2, r / 2, 0, e.LUMINANCE, e.UNSIGNED_BYTE, a), e.drawArrays(e.TRIANGLE_STRIP, 0, 4) + } + }, t(r = {}, "default", (function () { + return n + }))), r + } + + var i, s, u = !1; + + function c() { + i = {}, a(), s = e => { + const t = document.createElement("canvas"); + t.style.position = "absolute", t.style.top = 0, t.style.left = 0, e.$container.appendChild(t), e.$canvasElement = t, e.$container.style.overflow = "hidden", "absolute" !== e.$container.style.position && (e.$container.style.position = "relative"); + if (!e._supportOffscreen()) { + const t = (() => { + const t = e.$canvasElement; + let r = null; + const n = ["webgl", "experimental-webgl", "moz-webgl", "webkit-3d"]; + let o = 0; + for (; !r && o < n.length;) { + const a = n[o]; + try { + let n = {preserveDrawingBuffer: !0}; + e._opt.contextOptions && (n = Object.assign(n, e._opt.contextOptions)), r = t.getContext(a, n) + } catch (e) { + r = null + } + r && "function" == typeof r.getParameter || (r = null), ++o + } + return r + })(); + e._contextGLRender = a().default(t), e._contextGL = t + } + e._destroyContextGL = () => { + e._contextGL && (e._contextGL = null), e._contextGLRender && (e._contextGLRender = null), e._bitmaprenderer && (e._bitmaprenderer = null) + } + }, t(i, "default", (function () { + return s + })) + } + + function l() { + return u || (u = !0, c()), i + } + + var d, f, p, h, m, A, g = !1; + + function v() { + return g || (g = !0, f = { + videoBuffer: .5, + vod: !1, + isResize: !0, + isFullSize: !1, + debug: !1, + timeout: 30, + supportDblclickFullscreen: !1, + showBandwidth: !1, + keepScreenOn: !1, + isNotMute: !1, + hasAudio: !0, + operateBtns: {fullscreen: !1, screenshot: !1, play: !1, audio: !1}, + loadingText: "", + background: "", + decoder: "index.js", + rotate: 0, + forceNoOffscreen: !1 + }, t(d = {}, "DEFAULT_OPTIONS", (function () { + return f + })), p = { + init: "init", + initSize: "initSize", + render: "render", + playAudio: "playAudio", + print: "print", + printErr: "printErr", + initAudioPlanar: "initAudioPlanar", + kBps: "kBps" + }, t(d, "CMD_TYPE", (function () { + return p + })), h = { + close: "close", + play: "play", + setVideoBuffer: "setVideoBuffer", + init: "init" + }, t(d, "POST_MESSAGE", (function () { + return h + })), m = { + fullscreen: "fullscreen", + play: "play", + pause: "pause", + mute: "mute", + load: "load", + videoInfo: "videoInfo", + timeUpdate: "timeUpdate", + audioInfo: "audioInfo", + log: "log", + error: "error", + kBps: "kBps", + timeout: "timeout", + stats: "stats", + performance: "performance", + record: "record", + buffer: "buffer", + videoFrame: "videoFrame", + start: "start", + metadata: "metadata" + }, t(d, "EVEMTS", (function () { + return m + })), A = {empty: "empty", buffering: "buffering", full: "full"}, t(d, "BUFFER_STATUS", (function () { + return A + }))), d + } + + var E, y = !1; + + function w(e) { + e.resume(); + const t = e.createBufferSource(); + t.buffer = e.createBuffer(1, 1, 22050), t.connect(e.destination), t.noteOn ? t.noteOn(0) : t.start(0) + } + + function _(e, t) { + e && (e.style.display = t ? "block" : "none") + } + + function b(e = "") { + const t = e.split(","), r = atob(t[1]), n = t[0].replace("data:", "").replace(";base64", ""); + let o = r.length, a = new Uint8Array(o); + for (; o--;) a[o] = r.charCodeAt(o); + return new File([a], "file", {type: n}) + } + + function k(e, t) { + const r = document.createElement("a"); + r.download = t, r.href = URL.createObjectURL(e), r.click(), URL.revokeObjectURL(e) + } + + function T(e) { + if (null == e || "" === e) return "0 KB/S"; + let t = parseFloat(e); + return t = t.toFixed(2), t + "KB/S" + } + + function D(e) { + let t = 0; + return e >= 24 ? t = 2 : e >= 15 && (t = 1), t + } + + function S(e, t) { + Object.keys(t || {}).forEach((function (r) { + e.style[r] = t[r] + })) + } + + function C() { + let e = document.fullscreenElement || window.webkitFullscreenElement || document.msFullscreenElement; + return void 0 === e && (e = !1), !!e + } + + function O() { + } + + function P() { + return (new Date).getTime() + } + + function x(e) { + Object.keys(e || {}).forEach((t => { + "bgDom" !== t && _(e[t], !1) + })) + } + + function B(e) { + _(e.pauseDom, !0), _(e.screenshotsDom, !0), _(e.fullscreenDom, !0), _(e.quietAudioDom, !0), _(e.textDom, !0), _(e.speedDom, !0), _(e.recordDom, !0), _(e.loadingDom, !1), _(e.playDom, !1), _(e.playBigDom, !1), _(e.bgDom, !1) + } + + function M(e, t) { + let r = v().BUFFER_STATUS.buffering; + return 0 === e ? r = v().BUFFER_STATUS.empty : e >= t && (r = v().BUFFER_STATUS.full), r + } + + function R() { + return y || (y = !0, E = {}, v(), t(E, "audioContextUnlock", (function () { + return w + })), t(E, "$domToggle", (function () { + return _ + })), t(E, "dataURLToFile", (function () { + return b + })), t(E, "downloadImg", (function () { + return k + })), t(E, "bpsSize", (function () { + return T + })), t(E, "fpsStatus", (function () { + return D + })), t(E, "setStyle", (function () { + return S + })), t(E, "checkFull", (function () { + return C + })), t(E, "noop", (function () { + return O + })), t(E, "now", (function () { + return P + })), t(E, "$hideBtns", (function () { + return x + })), t(E, "$initBtns", (function () { + return B + })), t(E, "bufferStatus", (function () { + return M + }))), E + } + + var L, I, F = !1; + + function U() { + return F || (F = !0, L = {}, R(), I = e => { + e._audioContext = new (window.AudioContext || window.webkitAudioContext), e._gainNode = e._audioContext.createGain(), e._audioEnabled = t => { + t ? (R().audioContextUnlock(e._audioContext), e._audioEnabled = t => { + t ? e._audioContext.resume() : e._audioContext.suspend() + }, e._audioContext.resume()) : e._audioContext.suspend() + }, e._audioEnabled(!0), e._mute = () => { + e._audioEnabled(!1), e.quieting = !0 + }, e._cancelMute = () => { + e._audioEnabled(!0), e.quieting = !1 + }, e._audioResume = () => { + e._cancelMute() + }, e._initAudioPlanar = t => { + const r = e._audioContext; + if (!r) return !1; + let n = []; + const o = r.createScriptProcessor(1024, 0, 2); + o.onaudioprocess = function (e) { + if (n.length) { + const r = n.shift(); + for (let n = 0; n < t.channels; n++) { + const t = r[n], o = e.outputBuffer.getChannelData(n); + for (let e = 0; e < 1024; e++) o[e] = t[e] + } + } + }, o.connect(e._gainNode), e._closeAudio = () => { + o.disconnect(e._gainNode), e._gainNode.disconnect(r.destination), delete e._closeAudio, n = [] + }, e._gainNode.connect(r.destination), e._playAudio = e => n.push(e) + }, e._destroyAudioContext = () => { + e._audioContext.close(), e._audioContext = null, e._gainNode = null + } + }, t(L, "default", (function () { + return I + }))), L + } + + var N, j, G = !1; + + function z() { + return G || (G = !0, N = {}, R(), j = e => { + e._resize$2 = () => e.resize(), e._handleVisibilityChange$2 = () => e._handleVisibilityChange(), e._onfullscreenchange$2 = () => e._onfullscreenchange(), e._handleWakeLock$2 = () => e._handleWakeLock(), window.addEventListener("resize", e._resize$2), window.addEventListener("fullscreenchange", e._onfullscreenchange$2), document.addEventListener("visibilitychange", e._handleVisibilityChange$2), document.addEventListener("visibilitychange", e._handleWakeLock$2), window.addEventListener("fullscreenchange", e._handleWakeLock$2), e._opt.supportDblclickFullscreen && e.$canvasElement.addEventListener("dblclick", (() => { + e.fullscreen = !e.fullscreen + }), !1), e._removeEventListener = () => { + window.removeEventListener("resize", e._resize$2), window.removeEventListener("fullscreenchange", e._onfullscreenchange$2), document.removeEventListener("visibilitychange", e._handleWakeLock$2), document.removeEventListener("visibilitychange", e._handleVisibilityChange$2), window.removeEventListener("fullscreenchange", e._handleWakeLock$2) + }, e.$doms.playDom && e.$doms.playDom.addEventListener("click", (t => { + t.stopPropagation(), e._play() + }), !1), e.$doms.playBigDom && e.$doms.playBigDom.addEventListener("click", (t => { + t.stopPropagation(), e._play() + }), !1), e.$doms.pauseDom && e.$doms.pauseDom.addEventListener("click", (t => { + t.stopPropagation(), e._pause() + }), !1), e.$doms.screenshotsDom && e.$doms.screenshotsDom.addEventListener("click", (t => { + t.stopPropagation(); + const r = e._opt.text + "" + R().now(); + e._screenshot(r) + }), !1), e.$doms.fullscreenDom && e.$doms.fullscreenDom.addEventListener("click", (t => { + t.stopPropagation(), e.fullscreen = !0 + }), !1), e.$doms.minScreenDom && e.$doms.minScreenDom.addEventListener("click", (t => { + t.stopPropagation(), e.fullscreen = !1 + }), !1), e.$doms.recordDom && e.$doms.recordDom.addEventListener("click", (t => { + t.stopPropagation(), e.recording = !0 + }), !1), e.$doms.recordingDom && e.$doms.recordingDom.addEventListener("click", (t => { + t.stopPropagation(), e.recording = !1 + }), !1), e.$doms.quietAudioDom && e.$doms.quietAudioDom.addEventListener("click", (t => { + t.stopPropagation(), e._cancelMute() + }), !1), e.$doms.playAudioDom && e.$doms.playAudioDom.addEventListener("click", (t => { + t.stopPropagation(), e._mute() + }), !1), e._enableWakeLock() + }, t(N, "default", (function () { + return j + }))), N + } + + var W, Y, H = !1; + + function $() { + return H || (H = !0, W = {}, R(), z(), Y = e => { + e._showControl = () => { + let t = !1, r = !1; + return Object.keys(e._opt.operateBtns).forEach((t => { + e._opt.operateBtns[t] && (r = !0) + })), (e._opt.showBandwidth || e._opt.text || r) && (t = !0), t + }; + const t = {}, r = document.createDocumentFragment(), n = document.createElement("div"), + o = document.createElement("div"), a = document.createElement("div"), i = document.createElement("div"), + s = document.createElement("div"), u = document.createElement("div"), c = document.createElement("div"), + l = document.createElement("div"), d = document.createElement("div"), f = document.createElement("div"), + p = document.createElement("div"), h = document.createElement("div"), m = document.createElement("div"), + A = document.createElement("div"), g = document.createElement("div"), v = document.createElement("div"), + E = document.createElement("div"), y = document.createElement("div"); + m.innerText = e._opt.loadingText || "", i.innerText = e._opt.text || "", s.innerText = "", u.title = "播放", l.title = "暂停", d.title = "截屏", f.title = "全屏", p.title = "退出全屏", A.title = "静音", g.title = "取消静音", v.title = "录制", E.title = "取消录制"; + let w = {position: "absolute", width: "100%", height: "100%"}; + e._opt.background && (w = Object.assign({}, w, { + backgroundRepeat: "no-repeat", + backgroundPosition: "center", + backgroundSize: "100%", + backgroundImage: "url('" + e._opt.background + "')" + })); + const _ = { + position: "absolute", + width: "100%", + height: "100%", + textAlign: "center", + color: "#fff", + display: "none", + backgroundImage: "url('data:image/gif;base64,R0lGODlhgACAAKIAAP///93d3bu7u5mZmQAA/wAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBQAEACwCAAIAfAB8AAAD/0i63P4wygYqmDjrzbtflvWNZGliYXiubKuloivPLlzReD7al+7/Eh5wSFQIi8hHYBkwHUmD6CD5YTJLz49USuVYraRsZ7vtar7XnQ1Kjpoz6LRHvGlz35O4nEPP2O94EnpNc2sef1OBGIOFMId/inB6jSmPdpGScR19EoiYmZobnBCIiZ95k6KGGp6ni4wvqxilrqBfqo6skLW2YBmjDa28r6Eosp27w8Rov8ekycqoqUHODrTRvXsQwArC2NLF29UM19/LtxO5yJd4Au4CK7DUNxPebG4e7+8n8iv2WmQ66BtoYpo/dvfacBjIkITBE9DGlMvAsOIIZjIUAixliv9ixYZVtLUos5GjwI8gzc3iCGghypQqrbFsme8lwZgLZtIcYfNmTJ34WPTUZw5oRxdD9w0z6iOpO15MgTh1BTTJUKos39jE+o/KS64IFVmsFfYT0aU7capdy7at27dw48qdS7eu3bt480I02vUbX2F/JxYNDImw4GiGE/P9qbhxVpWOI/eFKtlNZbWXuzlmG1mv58+gQ4seTbq06dOoU6vGQZJy0FNlMcV+czhQ7SQmYd8eMhPs5BxVdfcGEtV3buDBXQ+fURxx8oM6MT9P+Fh6dOrH2zavc13u9JXVJb520Vp8dvC76wXMuN5Sepm/1WtkEZHDefnzR9Qvsd9+/wi8+en3X0ntYVcSdAE+UN4zs7ln24CaLagghIxBaGF8kFGoIYV+Ybghh841GIyI5ICIFoklJsigihmimJOLEbLYIYwxSgigiZ+8l2KB+Ml4oo/w8dijjcrouCORKwIpnJIjMnkkksalNeR4fuBIm5UEYImhIlsGCeWNNJphpJdSTlkml1jWeOY6TnaRpppUctcmFW9mGSaZceYopH9zkjnjUe59iR5pdapWaGqHopboaYua1qije67GJ6CuJAAAIfkEBQUABAAsCgACAFcAMAAAA/9Iutz+ML5Ag7w46z0r5WAoSp43nihXVmnrdusrv+s332dt4Tyo9yOBUJD6oQBIQGs4RBlHySSKyczVTtHoidocPUNZaZAr9F5FYbGI3PWdQWn1mi36buLKFJvojsHjLnshdhl4L4IqbxqGh4gahBJ4eY1kiX6LgDN7fBmQEJI4jhieD4yhdJ2KkZk8oiSqEaatqBekDLKztBG2CqBACq4wJRi4PZu1sA2+v8C6EJexrBAD1AOBzsLE0g/V1UvYR9sN3eR6lTLi4+TlY1wz6Qzr8u1t6FkY8vNzZTxaGfn6mAkEGFDgL4LrDDJDyE4hEIbdHB6ESE1iD4oVLfLAqPETIsOODwmCDJlv5MSGJklaS6khAQAh+QQFBQAEACwfAAIAVwAwAAAD/0i63P5LSAGrvTjrNuf+YKh1nWieIumhbFupkivPBEzR+GnnfLj3ooFwwPqdAshAazhEGUXJJIrJ1MGOUamJ2jQ9QVltkCv0XqFh5IncBX01afGYnDqD40u2z76JK/N0bnxweC5sRB9vF34zh4gjg4uMjXobihWTlJUZlw9+fzSHlpGYhTminKSepqebF50NmTyor6qxrLO0L7YLn0ALuhCwCrJAjrUqkrjGrsIkGMW/BMEPJcphLgDaABjUKNEh29vdgTLLIOLpF80s5xrp8ORVONgi8PcZ8zlRJvf40tL8/QPYQ+BAgjgMxkPIQ6E6hgkdjoNIQ+JEijMsasNY0RQix4gKP+YIKXKkwJIFF6JMudFEAgAh+QQFBQAEACw8AAIAQgBCAAAD/kg0PPowykmrna3dzXvNmSeOFqiRaGoyaTuujitv8Gx/661HtSv8gt2jlwIChYtc0XjcEUnMpu4pikpv1I71astytkGh9wJGJk3QrXlcKa+VWjeSPZHP4Rtw+I2OW81DeBZ2fCB+UYCBfWRqiQp0CnqOj4J1jZOQkpOUIYx/m4oxg5cuAaYBO4Qop6c6pKusrDevIrG2rkwptrupXB67vKAbwMHCFcTFxhLIt8oUzLHOE9Cy0hHUrdbX2KjaENzey9Dh08jkz8Tnx83q66bt8PHy8/T19vf4+fr6AP3+/wADAjQmsKDBf6AOKjS4aaHDgZMeSgTQcKLDhBYPEswoA1BBAgAh+QQFBQAEACxOAAoAMABXAAAD7Ei6vPOjyUkrhdDqfXHm4OZ9YSmNpKmiqVqykbuysgvX5o2HcLxzup8oKLQQix0UcqhcVo5ORi+aHFEn02sDeuWqBGCBkbYLh5/NmnldxajX7LbPBK+PH7K6narfO/t+SIBwfINmUYaHf4lghYyOhlqJWgqDlAuAlwyBmpVnnaChoqOkpaanqKmqKgGtrq+wsbA1srW2ry63urasu764Jr/CAb3Du7nGt7TJsqvOz9DR0tPU1TIA2ACl2dyi3N/aneDf4uPklObj6OngWuzt7u/d8fLY9PXr9eFX+vv8+PnYlUsXiqC3c6PmUUgAACH5BAUFAAQALE4AHwAwAFcAAAPpSLrc/m7IAau9bU7MO9GgJ0ZgOI5leoqpumKt+1axPJO1dtO5vuM9yi8TlAyBvSMxqES2mo8cFFKb8kzWqzDL7Xq/4LB4TC6bz1yBes1uu9uzt3zOXtHv8xN+Dx/x/wJ6gHt2g3Rxhm9oi4yNjo+QkZKTCgGWAWaXmmOanZhgnp2goaJdpKGmp55cqqusrZuvsJays6mzn1m4uRAAvgAvuBW/v8GwvcTFxqfIycA3zA/OytCl0tPPO7HD2GLYvt7dYd/ZX99j5+Pi6tPh6+bvXuTuzujxXens9fr7YPn+7egRI9PPHrgpCQAAIfkEBQUABAAsPAA8AEIAQgAAA/lIutz+UI1Jq7026h2x/xUncmD5jehjrlnqSmz8vrE8u7V5z/m5/8CgcEgsGo/IpHLJbDqf0Kh0ShBYBdTXdZsdbb/Yrgb8FUfIYLMDTVYz2G13FV6Wz+lX+x0fdvPzdn9WeoJGAYcBN39EiIiKeEONjTt0kZKHQGyWl4mZdREAoQAcnJhBXBqioqSlT6qqG6WmTK+rsa1NtaGsuEu6o7yXubojsrTEIsa+yMm9SL8osp3PzM2cStDRykfZ2tfUtS/bRd3ewtzV5pLo4eLjQuUp70Hx8t9E9eqO5Oku5/ztdkxi90qPg3x2EMpR6IahGocPCxp8AGtigwQAIfkEBQUABAAsHwBOAFcAMAAAA/9Iutz+MMo36pg4682J/V0ojs1nXmSqSqe5vrDXunEdzq2ta3i+/5DeCUh0CGnF5BGULC4tTeUTFQVONYAs4CfoCkZPjFar83rBx8l4XDObSUL1Ott2d1U4yZwcs5/xSBB7dBMBhgEYfncrTBGDW4WHhomKUY+QEZKSE4qLRY8YmoeUfkmXoaKInJ2fgxmpqqulQKCvqRqsP7WooriVO7u8mhu5NacasMTFMMHCm8qzzM2RvdDRK9PUwxzLKdnaz9y/Kt8SyR3dIuXmtyHpHMcd5+jvWK4i8/TXHff47SLjQvQLkU+fG29rUhQ06IkEG4X/Rryp4mwUxSgLL/7IqFETB8eONT6ChCFy5ItqJomES6kgAQAh+QQFBQAEACwKAE4AVwAwAAAD/0i63A4QuEmrvTi3yLX/4MeNUmieITmibEuppCu3sDrfYG3jPKbHveDktxIaF8TOcZmMLI9NyBPanFKJp4A2IBx4B5lkdqvtfb8+HYpMxp3Pl1qLvXW/vWkli16/3dFxTi58ZRcChwIYf3hWBIRchoiHiotWj5AVkpIXi4xLjxiaiJR/T5ehoomcnZ+EGamqq6VGoK+pGqxCtaiiuJVBu7yaHrk4pxqwxMUzwcKbyrPMzZG90NGDrh/JH8t72dq3IN1jfCHb3L/e5ebh4ukmxyDn6O8g08jt7tf26ybz+m/W9GNXzUQ9fm1Q/APoSWAhhfkMAmpEbRhFKwsvCsmosRIHx444PoKcIXKkjIImjTzjkQAAIfkEBQUABAAsAgA8AEIAQgAAA/VIBNz+8KlJq72Yxs1d/uDVjVxogmQqnaylvkArT7A63/V47/m2/8CgcEgsGo/IpHLJbDqf0Kh0Sj0FroGqDMvVmrjgrDcTBo8v5fCZki6vCW33Oq4+0832O/at3+f7fICBdzsChgJGeoWHhkV0P4yMRG1BkYeOeECWl5hXQ5uNIAOjA1KgiKKko1CnqBmqqk+nIbCkTq20taVNs7m1vKAnurtLvb6wTMbHsUq4wrrFwSzDzcrLtknW16tI2tvERt6pv0fi48jh5h/U6Zs77EXSN/BE8jP09ZFA+PmhP/xvJgAMSGBgQINvEK5ReIZhQ3QEMTBLAAAh+QQFBQAEACwCAB8AMABXAAAD50i6DA4syklre87qTbHn4OaNYSmNqKmiqVqyrcvBsazRpH3jmC7yD98OCBF2iEXjBKmsAJsWHDQKmw571l8my+16v+CweEwum8+hgHrNbrvbtrd8znbR73MVfg838f8BeoB7doN0cYZvaIuMjY6PkJGSk2gClgJml5pjmp2YYJ6dX6GeXaShWaeoVqqlU62ir7CXqbOWrLafsrNctjIDwAMWvC7BwRWtNsbGFKc+y8fNsTrQ0dK3QtXAYtrCYd3eYN3c49/a5NVj5eLn5u3s6e7x8NDo9fbL+Mzy9/T5+tvUzdN3Zp+GBAAh+QQJBQAEACwCAAIAfAB8AAAD/0i63P4wykmrvTjrzbv/YCiOZGmeaKqubOu+cCzPdArcQK2TOL7/nl4PSMwIfcUk5YhUOh3M5nNKiOaoWCuWqt1Ou16l9RpOgsvEMdocXbOZ7nQ7DjzTaeq7zq6P5fszfIASAYUBIYKDDoaGIImKC4ySH3OQEJKYHZWWi5iZG0ecEZ6eHEOio6SfqCaqpaytrpOwJLKztCO2jLi1uoW8Ir6/wCHCxMG2x7muysukzb230M6H09bX2Nna29zd3t/g4cAC5OXm5+jn3Ons7eba7vHt2fL16tj2+QL0+vXw/e7WAUwnrqDBgwgTKlzIsKHDh2gGSBwAccHEixAvaqTYcFCjRoYeNyoM6REhyZIHT4o0qPIjy5YTTcKUmHImx5cwE85cmJPnSYckK66sSAAj0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gwxZJAAA7')", + backgroundRepeat: "no-repeat", + backgroundPosition: "center", + backgroundSize: "40px 40px" + }, b = { + position: "absolute", + width: "100%", + height: "100%", + display: "none", + background: "rgba(0,0,0,0.4)", + backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwEAYAAAAHkiXEAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAByBJREFUeNrlXFlIVV0U3vsaaINmZoX0YAR6y8oGMkKLoMESSjBoUJEoIogoIggigoryIQoKGqi3Roh6TKGBIkNEe6hMgzTNKLPSUlMrNdvrf/juurlP5zpc7znb+r+X755pn7W+Pe+9zpVimIEUKVKJiUIKKWRqKs5OmwZOTBQkSFBUFK5HR+tPt7WBOzpwX3U1jquqwGVleK6iQkoppSQy7a8xEBERLVwIPnsWXF9PrqCxEXzxInjpUrDH47YO0h2hw8JwtG4deN8+8OzZA0vl7Vt/iZZCCtnUhPPt7fp9o0fjvpgYHHu9uD8+Hsdsh52hggTV1uLg2DHwpUvSIz3S093ttE4hB5qSxYuRAc+f910im5vBFy6As7LALORQ7RgzBullZIBPngQ3NPRt1+vXeH7NGtN69u8oERFFRIDPnQMrZe8YZ0huLhwMDzdjb1gYC4zj4uKAeaFIkbpxAwfWvse48FOngp89s7eeS1p2Nlg63vQF7Y8iRWrlSthZXR2wZhAR0dy55gwlIqI5c8AfPtgbeuUKHIqKMi3soP3z1UzwiRP2NbqtDbxsmXuGacK3tOgG/fwJ3rbNtIDO+J2ZiQzp6ND97uzE+RUrHDaAmxprif/+HQasXm1aKKcBPxcsADc1/VEjFClS8+eH7oXcuSpSpJ480V/Y0wPOyjItjNtgofWmiPHuHa7Hxg79RUT0e1Rjxb/X1ASnDw9vf/3S9bl1K/iEFSlSixbZdz7Xr5t2fLgBuuTn2xfUjRsHmVBYGNg6gWpo+FtHNU4DuowYAZ3Ky+11GzOm/4SIiGjDBvuczM52zAHua4iI6OpVcGEheO1a8PCdP/j9CNRyKFKk9u4doBDWCRXXBOcE0GekgVBUhPuSk00LPTAdCwp0+3n0GBER4AFenbQiJ8cdg7dvpwGB5xunT4PHjTMtuL0/qan29q9fH+AB62jnyxe31moGlwFWNDbCzq1bcez+snLffr14odtrMzrCBet6/Pnz7hoabAZY8fgxT5iGRwbs36/b19kJHjnS49+BEkIIMXmy/vjt26YdCA4pKdgHKC2Fo5cvh2xiFBTu3NGPw8Ox/5CW5tG3/hi8VffokRmDQwUeNOTlwc/KSmRIbq67djx9Cm5p+W2akEKmpfnaSt5zZdTXY8+0udmQcg5h0iQwD3MfPgRPn+7UG6GjUjiqrNSver0eVIWEBP85EiSIN7H/dSxZAuY1roMHHRt02OqamOhrgnoN46SQQn76ZFoad8Hj8kOH4D/PZJOSQvYKW11jYnxNkHWK3NFhWhKz8HrB9+7xaCU06fYKIiBBgiIjfRlgHTf/j+NlNMTFgceOHXJSJEgQ9wXCVyOk9AlvLfEDWDT6X+DAAXSiHz8OOSkppJCRkfrJ9vYR+NHaql8wNV42jVevUFJ37kQ8kHX8PlRMmOD/SYIEtbZ69IAkvsATs38dP36ADx8GJyc7IzyD+xbhqxE1Nb4a8PKlfiE+HsOxyEgYZI1A+9tRUADetQtNTF2dU29CJ84Twhkz9KtVVb4+oKxMvxAWxjM101KFBvX1qNmbNkHwNWucFl4HT/QmTvSfIkGCSks9HC2MsxxzyTekp5uWLjh0dYHz88FeL2ry5ctm7LHq2NMD7rXUg6rC0cKM9+/BfQS1hghDXg1VpEjdvasvLpqHf3VWs/P+/QA3Lltm75jz8T7BZQAvn9tscJgWXpEiNWuWvd2bNwcQwONbnq6p0R8oLnYnA7Zs6Vvw7m7Yd/z4gDe5DQH2Xrum29/SwoObfh7cts1egFWrnDU4Lg785g2Ytx4LC2H4zJmmhe3XD5+dsJsD1xhHjgwwgfBwPFBXpydQXe3uFqXzfU9o7ZUSXFRkX/IHMcENGKXgixY27fBwA8TZudO+5dixY4gJ37xpyQVfvEtmpmnHTQMFMiUFevBeL6OkZMg1GQlER4P5wwTGt29g65bmvw/4HShanD+5mjIlxC+cNw/cKxqYw7RDHZY9TOEXXpEiVVurC8+jtJUrnTNAkSK1fDle2NWlG9DeDs7IMC2UM35zU2Mt8Urhel6eywalp+vCMzhM++hRDlo1LeCg/dNGNdy5Wtt4LvEuCv+HodqHCu/e2Y8Cyss5aNW0sAPzh8fx1uEkgyMGHWxqgjM8NhYGWoNSraMnvm6+89aXDHjmap1AMUpKcD9/+D2MAYNzcsD9fRDNsZMcwsedfehiPJFeUhJ4925wWVnfdvFHiDt2gEM/MXT+rwp47UMKKeT27Ti7Zw+YA6UCgbdKKyr8cTVSSCEbG3Ge/5yDwWtD48fjfv6rAl7C6LUeb4uvX8FnzuD5U6ewjP35s9M6uQaUJP4Qgz8E4SbJ2sk5BV5jevAAvHmzqS9/hs0XJxBi1CgOWtVjVnlHKSEB16Oj/wgoE0L8LsFcM169AldV8Q4UjouKULKtNch9/AdsEf6XQYgIsAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wMS0xMlQxMTo1NjowNSswODowMGcMj/QAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDEtMTJUMTE6NTY6MDUrMDg6MDAWUTdIAAAASXRFWHRzdmc6YmFzZS11cmkAZmlsZTovLy9ob21lL2FkbWluL2ljb24tZm9udC90bXAvaWNvbl9wZHMzeWYxNGczYi9ib2Zhbmcuc3Zn11us5wAAAABJRU5ErkJggg==')", + backgroundRepeat: "no-repeat", + backgroundPosition: "center", + backgroundSize: "48px 48px", + cursor: "pointer" + }, k = {position: "absolute", top: 0, height: "100%", display: "flex", alignItems: "center"}, T = { + display: "none", + position: "relative", + fontSize: "13px", + color: "#fff", + lineHeight: "20px", + marginLeft: "5px", + marginRight: "5px", + userSelect: "none" + }, D = { + display: "none", + position: "relative", + width: "16px", + height: "16px", + marginLeft: "8px", + marginRight: "8px", + backgroundRepeat: "no-repeat", + backgroundPosition: "center", + backgroundSize: "100%", + cursor: "pointer" + }; + R().setStyle(y, w), R().setStyle(n, { + height: "38px", + zIndex: 11, + position: "absolute", + left: 0, + bottom: 0, + width: "100%", + background: "rgba(0,0,0)" + }), R().setStyle(h, _), R().setStyle(c, b), R().setStyle(m, { + position: "absolute", + width: "100%", + top: "60%", + textAlign: "center" + }), R().setStyle(o, Object.assign({}, k, {left: 0})), R().setStyle(a, Object.assign({}, k, {right: 0})), R().setStyle(i, T), R().setStyle(s, T), R().setStyle(u, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAARVJREFUSMe9laEOglAUhs+5k9lJFpsJ5QWMJoNGbEY0mEy+gr6GNo0a3SiQCegMRILzGdw4hl+Cd27KxPuXb2zA/91z2YXoGRERkX4fvN3A2QxUiv4dFM3n8jZRBLbbVfd+ubJuF4xjiCyXkksueb1uSKCIZYGLBTEx8ekEoV7PkICeVgs8HiGyXoO2bUigCDM4HoPnM7bI8wwJ6Gk0sEXbLSay30Oo2TQkoGcwgFCSQMhxDAvoETEscDiQkJC4LjMz8+XyZ4HrFYWjEQqHQ1asWGWZfmdFAsVINxuw00HhbvfpydpvxWkKTqdYaRCUfUPJCdzv4Gr1uqfli0tOIAzByUT/iCrL6+84y3Bw+D6ui5Ou+jwA8FnIO++FACgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAEl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvYm9mYW5nLnN2Z8fICi0AAAAASUVORK5CYII=')"})), R().setStyle(l, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAHVJREFUSMftkCESwCAMBEOnCtdXVMKHeC7oInkEeQJXkRoEZWraipxZc8lsQqQZBACAlIS1oqGhhTCdu3oyxyyMcdRf79c5J7SWDBky+z4173rbJvR+VF/e/qwKqIAKqMBDgZyFzAQCoZTpxq7HLDyOrw/9b07l3z4dDnI2IAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMIo/vCcAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDD7YgSbAAAASnRFWHRzdmc6YmFzZS11cmkAZmlsZTovLy9ob21lL2FkbWluL2ljb24tZm9udC90bXAvaWNvbl9nZjcwMHM3YjNmdy96YW50aW5nLnN2ZxqNZJkAAAAASUVORK5CYII=')"})), R().setStyle(d, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAaxJREFUSMfNlLFOAkEQhmevAZMjR6OGRBJKsFBzdkYNpYSaWkopIOFRCBWh1ieA+ALGRgutjK0HzV2H5SX7W/zsmY3cnTEhcZovOzcz9+/s7Ir8d4OGht7fBwAgjvEri2OTl1ffSf0xAMBxRIkS1e3Se3+vcszEMe/6OqmT/aN2m1wsNu/o5YVsNHI7BgA4PCRfXzfXCwKy1RLbcXZG9nrkzc12jvT8nPU/PtatOThgAx8fuS4WyZ0de2e+T87n5OcnuVqRsxl5cpImQDnKUc7DA1fVqpimZCu+vCSjiNH9PlmpJNTQ0INBErfeafZRAakC6FWKfH9nwU7H/l6rGdqCOx3y7c3U+aOARsMMp+1vNskwTLjulB23XJL1epqA9OshIiKeJxAIoug7UyA4OuLi6Ynr52deu+NjOy4MSc9Ln8rMDpTLybBpaOjdXbJUIqdTm8a/t2fn/RSQewR24HicTLmGhnbdzcPquvYtGY3+PIR24UKBUXd35v6Sk4lN47+9NXm/FBAEedfGTjw9JYdDm76fm6+hoS8ujGAxT6L9Im7bTKeurvIEb92+AES1b6x283XSAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABJdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L2NhbWVyYS5zdmeyubWEAAAAAElFTkSuQmCC')"})), R().setStyle(f, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAALZJREFUSMftVbsORUAQVSj8DomChvh3lU5CoSVCQq2RObeYu8XG3deVoHCak81kds7Oaz3vxRcAAMwztOg6vX9d6/3XFQQC+b7iAoFhYE7Tvx9EIFAcy/ftO3MQGAQkCfM4MmeZWyajiLnvmYuCeduMAuSzvRBVYNluFHCssSgFp7Sq9ALKkjnPf9ubRtkDL27HNT3QtsY9cAjsNAVheHIKBOwD2wpxFHDbJpwmaHH2L1iWx+2BDy8RbXXtqbRBAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABTdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L3F1YW5waW5nenVpZGFodWEuc3ZnTBoI7AAAAABJRU5ErkJggg==')"})), R().setStyle(p, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAYJJREFUSMfdVbGKwkAQnQn+geAfWBixUTsVgp3YGKxSWflVNmIjARULwc5KO40ipNHWRgs/wGLniucKa+Jd5ODuuGle5u3szGRmd5bor4iIiMhuB3Sc+HXXBdp2/Lpta7v4dccRJUrUdhtNQIkSVa3C8HwG1uumg34f2OnEB+h0tF1Sv5b+YIsttpZLEhKSdhvscPi8IXFF74GJiYnHY7Cex8zMvFgkbInjmJnv98kqoO30vmhLtaRMB60WtEbDNDudgMUiKiQSzfjOMzFxoQAyCPSfw7/nQZ/PUYnpNGV6OR6BmYzJbzYIoBQCzGaRBDQvJCTdLnTLolg5HN5t6f8V1h/oUT4PrVKJWBotmEzQw+vV3J9Ow851P2/BaoX9Yfh0BrJZYKlk8uUyHOpDeLuBHwzMBJtN2PV6IPUhXK9Nf5cLMAxfluanrmGkRBggtRo03wfq66P/6CsJAnOg+f6rgfZI4BGYiYlHIx048eR6krcnq34kkj1GuVz8+jceo9+SD5A8yGh8CTq7AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABNdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L3p1aXhpYW9odWEuc3ZnoCFr0AAAAABJRU5ErkJggg==')"})), R().setStyle(A, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAR9JREFUSMfVlD0LglAYhe9VkwgNihpsjbYQf4JTS7+iuaGxpcGfJjS0NFRLk2NDi6MogafhJGRIX9yEzvJwrx/nvPd9VYh/F3LkyBuN2g3J1QoAgCQhPe/Hxq5Lo+0WlfJ9dYYAgGaTDAIyy/BUnwcwWJlhcLnZkN2ugIBAuy2kkEL2ep8F73S4kjfFcfn6cMj9KLodrWVBiXyf75tMyOOR+4MBOZ8XLXzorboA5UpnM/J0Ivd7+vX7xX2asqGpVKtFXi5sqWmypXefrfIWAACmU/JwKCoun8hu9zA0uk6u13wgirg+n7+bAcsibbt6SB3n9TQXPxwAwHJJpum7M6BcDDQa0SgMaw9QPkJNIxcLMo4ZcDz+eYDqQFLWbqxKV57EtW1WtMbmAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAwij+8JwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wMS0wOFQxNjo0Mjo1MyswODowMPtiBJsAAABKdEVYdHN2ZzpiYXNlLXVyaQBmaWxlOi8vL2hvbWUvYWRtaW4vaWNvbi1mb250L3RtcC9pY29uX2dmNzAwczdiM2Z3L2ppbmd5aW4uc3ZnIlMYaQAAAABJRU5ErkJggg==')"})), R().setStyle(g, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAU5JREFUSMftkzGKwlAURf9PULBQwULSCKK1bZAgNuoaFFyAC3AdZg0uQCwshWzAShEEO7Gy0soUCu9Occ3An5nMGCfdzGsO7+Xy3/03iVL/lbAAACiVIBCI77O37Vi9QCDZbEqLm03ycEBUAoHk818v7nYpul5Jz4tf8HBKYa1mcjwmbzd8rG8NFIsU7ffk8UjmcjE3XK+RtB4G2PT75GbDeblMttumfjSKMRCGLxsQCKTReE9KIJDJxDw/SmKxiOZWWh+ntrSlre2WXRAorbTSrZapip7X66kbMKtQUFBQCENznsmQ93vqBhh5r8fO85jAcsnIrcce1yV3uxgD8zl5uZgU+dGBVlrp6GbTKRPwffaDAek45Gz2/M0AAJ0OeTol+w0rFYrOZ3K1MhNJEjEAwHF4cBA8Z8B1zcXV6msv+JMR2yaHQ1LrXx/8Z+sNRxsWcwZeb6UAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAEt0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvc2hlbmd5aW4uc3ZnFog1MQAAAABJRU5ErkJggg==')"})), R().setStyle(v, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAPRJREFUSMflVDEOwjAQO0e8gr2sZYVunREbD6ISfAgmkBjpC/hBEQ+AtTWD6QAI0gBlqRfLp+TiXC5n1nXgMUCS5HBoNBqj6IOMMFwuEpsNAABl6d3HihWrOJaBsuRPkGW+c929HAxuYefb6L+R0ZgkMrJYiItCnCT1sl5Y1jwXj0bNniJNJWqujfX7LyrwJh8AYDxWgulU0dPp20IFlxoODm61kpE4VnS9/puBXyPYgH7LbKY3PhwUnUw+NdC4CdW9+71UgyZspwIBB9No3O0klktxUahyx+Pz+lYG0Xzu84lXRqTqwRQAGAzns8R223gUdxZXGcAK5Hp0ClIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6NDI6NTMrMDg6MDCKP7wnAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjQyOjUzKzA4OjAw+2IEmwAAAE50RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fZ2Y3MDBzN2IzZncvbHV6aGlzaGlwaW4uc3Zn5Zd7GQAAAABJRU5ErkJggg==')"})), R().setStyle(E, Object.assign({}, D, {backgroundImage: "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAAAahJREFUSMdjYBjpgBFd4NZK+f+soQYG//T+yzFuUFUl2cApjEWM/758UZvysPDn3127GBkZGBgY/v4l6ICb9xTWsRbp6/9f9W8N44Jz5xgCGI4wfGFiIttrR/5n/3/U3KyR8rj8t0RdHS5lcAv+//yXzzhZTY1ii2FAmsGZocna+maD3GnWY62tNzbJBbDOffLkxie5eJYwa2uYMhaigzb2/zyGguPH/y9mTGKYYGlJUIMiYxDjHCen/4oMDAxznJzg4k8Z/jP+l5LCCAFCQP30Y5dfXVZWDI7/zzIs8PNjNGJ4/7/r+XNKA4rkoNZ4/lj0V9TmzUxJv0J+F+jrM3YyvPq/acsWujmA2oBkB9y4LifLxhoa+teAzYFtwtWr/8sZxBj9fHxo7oCbprJ72MqOHWNgZGBkYFy1isGGoZahTFSU0hAgOhcQnfph4P7/df9T9u1jPMn4nyHmxIn/bAzLGe7GxTHsZyj+f+zpUwYGBmmG6bQsiMr+L/v/rqlJY9Njm9889fW4lGEUxXCHwAomUgH3vxBG8c+f1WWf9P98sns3oaJ4FAAAbtWqHTT84QYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDEtMDhUMTY6MzU6MjMrMDg6MDBLHbvEAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTAxLTA4VDE2OjM1OjIzKzA4OjAwOkADeAAAAE50RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9hZG1pbi9pY29uLWZvbnQvdG1wL2ljb25fcTM1YTFhNHBtY2MvbHV6aGlzaGlwaW4uc3Zn6xlv1QAAAABJRU5ErkJggg==')"})), h.appendChild(m), e._opt.text && (o.appendChild(i), t.textDom = i), e._opt.showBandwidth && (o.appendChild(s), t.speedDom = s), e._opt.operateBtns.record && (a.appendChild(E), a.appendChild(v), t.recordingDom = E, t.recordDom = v), e._opt.operateBtns.screenshot && (a.appendChild(d), t.screenshotsDom = d), e._opt.operateBtns.play && (a.appendChild(u), a.appendChild(l), t.playDom = u, t.pauseDom = l), e._opt.operateBtns.audio && (a.appendChild(g), a.appendChild(A), t.playAudioDom = g, t.quietAudioDom = A), e._opt.operateBtns.fullscreen && (a.appendChild(f), a.appendChild(p), t.fullscreenDom = f, t.minScreenDom = p), n.appendChild(o), n.appendChild(a), r.appendChild(y), t.bgDom = y, r.appendChild(h), t.loadingDom = h, e._showControl() && r.appendChild(n), e._opt.operateBtns.play && (r.appendChild(c), t.playBigDom = c), e.$container.appendChild(r), e.$doms = t, e._removeContainerChild = () => { + for (; e.$container.firstChild;) e.$container.removeChild(e.$container.firstChild) + }, z().default(e), R().$hideBtns(e.$doms), e._opt.isNotMute || e._mute() + }, t(W, "default", (function () { + return Y + }))), W + } + + var V, Q, X = !1; + + function q() { + return X || (X = !0, V = {}, v(), R(), Q = e => { + const t = new Worker(e._opt.decoder); + t.onmessage = r => { + const n = r.data; + switch (n.cmd) { + case v().CMD_TYPE.init: + e.setBufferTime(e._opt.videoBuffer), t.postMessage({ + cmd: v().POST_MESSAGE.init, + opt: JSON.stringify(e._opt), + sampleRate: e._audioContext.sampleRate + }), e._hasLoaded || (e._hasLoaded = !0, e.onLoad(), e._trigger(v().EVEMTS.load)); + break; + case v().CMD_TYPE.initSize: + e.$canvasElement.width = n.w, e.$canvasElement.height = n.h, e.onInitSize(), e._resize(), e._trigger(v().EVEMTS.videoInfo, { + w: n.w, + h: n.h + }), e._trigger(v().EVEMTS.start), e._supportOffscreen() && (e._bitmaprenderer = e.$canvasElement.getContext("bitmaprenderer")); + break; + case v().CMD_TYPE.render: + e.loading && (e.loading = !1, e.playing = !0, e._clearCheckLoading()), e.playing && (e._supportOffscreen() ? e._bitmaprenderer.transferFromImageBitmap(n.buffer) : e._contextGLRender(e.$canvasElement.width, e.$canvasElement.height, n.output[0], n.output[1], n.output[2])), e._trigger(v().EVEMTS.timeUpdate, n.ts), e.onTimeUpdate(n.ts), e._updateStats({ + buf: n.delay, + ts: n.ts + }), e._checkHeart(); + break; + case v().CMD_TYPE.playAudio: + e.playing && !e.quieting && e._playAudio(n.buffer); + break; + case v().CMD_TYPE.print: + e.onLog(n.text), e._trigger(v().EVEMTS.log, n.text); + break; + case v().CMD_TYPE.printErr: + e.onLog(n.text), e._trigger(v().EVEMTS.log, n.text), e.onError(n.text), e._trigger(v().EVEMTS.error, n.text); + break; + case v().CMD_TYPE.initAudioPlanar: + e._initAudioPlanar(n), e._trigger(v().EVEMTS.audioInfo, { + numOfChannels: n.channels, + sampleRate: n.samplerate + }); + break; + case v().CMD_TYPE.kBps: + e.playing && (e.$doms.speedDom && (e.$doms.speedDom.innerText = R().bpsSize(n.kBps)), e._trigger(v().EVEMTS.kBps, n.kBps)); + default: + e[n.cmd] && e[n.cmd](n) + } + }, e._decoderWorker = t + }, t(V, "default", (function () { + return Q + }))), V + } + + var Z, K, J = !1; + + function ee() { + return J || (J = !0, Z = {}, R(), v(), K = e => { + e._loading = !0, e._recording = !1, e._playing = !1, e._audioPlaying = !1, e._quieting = !1, e._fullscreen = !1, e._stats = { + buf: 0, + fps: 0, + abps: "", + vbps: "", + ts: "" + }, e._hasLoaded = !1, e._playUrl = "", e._startBpsTime = "", e._bps = 0, e._checkHeartTimeout = null, e._wakeLock = null, e._contextGL = null, e._contextGLRender = null, e._checkLoadingTimeout = null, e._bitmaprenderer = null, e._isPlayingBeforePageHidden = !1, e._initCheckVariable = () => { + e._startBpsTime = "", e._bps = 0, e._clearCheckHeartTimeout(), e._clearCheckLoading() + }, e._clearCheckHeartTimeout = () => { + e._checkHeartTimeout && (clearTimeout(e._checkHeartTimeout), e._checkHeartTimeout = null) + }, e._startCheckHeartTimeout = () => { + e._checkHeartTimeout = setTimeout((function () { + e._trigger(v().EVEMTS.timeout), e.recording = !1, e.playing = !1, e._close() + }), 1e3 * e._opt.timeout) + }, e._clearCheckLoading = () => { + e._checkLoadingTimeout && (clearTimeout(e._checkLoadingTimeout), e._checkLoadingTimeout = null) + }, e._checkLoading = () => { + e._clearCheckLoading(), e._checkLoadingTimeout = setTimeout((() => { + e._trigger(v().EVEMTS.timeout), e.playing = !1, e._close(), R().$domToggle(e.$doms.loadingDom, !1) + }), 1e3 * e._opt.timeout) + } + }, t(Z, "default", (function () { + return K + }))), Z + } + + var te, re, ne = !1; + + function oe() { + return ne || (ne = !0, te = {}, R(), re = e => { + e.onPlay = R().noop, e.onPause = R().noop, e.onRecord = R().noop, e.onFullscreen = R().noop, e.onMute = R().noop, e.onLoad = R().noop, e.onLog = R().noop, e.onError = R().noop, e.onTimeUpdate = R().noop, e.onInitSize = R().noop + }, t(te, "default", (function () { + return re + }))), te + } + + var ae, ie, se = !1; + + function ue() { + return se || (se = !0, ie = e => { + e._on = (t, r) => { + let n, o, a; + if (!r) return e; + for (n = e.__events || (e.__events = {}), t = t.split(/\s+/); o = t.shift();) a = n[o] || (n[o] = []), a.push(r); + return e + }, e._off = () => { + let t; + return (t = e.__events) ? (delete e.__events, e) : e + }, e._trigger = (t, ...r) => { + function n(e, t) { + if (e) for (let r = 0, n = e.length; r < n; r += 1) e[r](...t) + } + + let o, a, i; + if (!(o = e.__events)) return e; + for (t = t.split(/\s+/); a = t.shift();) (i = o[a]) && (i = i.slice()), n(i, r); + return e + } + }, t(ae = {}, "default", (function () { + return ie + }))), ae + } + + var ce, le, de = !1; + + function fe() { + return de || (de = !0, ce = {}, R(), v(), le = e => { + e._pause = () => { + e._close(), e.loading && R().$domToggle(e.$doms.loadingDom, !1), e.recording = !1, e.playing = !1 + }, e._play = t => { + if (!e._playUrl && !t) return; + let r = !1; + t ? (e._playUrl && (e._close(), r = !0, e.clearView()), e.loading = !0, R().$domToggle(e.$doms.bgDom, !1), e._checkLoading(), e._playUrl = t) : e._playUrl && (e.loading ? (R().$hideBtns(e.$doms), R().$domToggle(e.$doms.fullscreenDom, !0), R().$domToggle(e.$doms.pauseDom, !0), R().$domToggle(e.$doms.loadingDom, !0), e._checkLoading()) : e.playing = !0), e._initCheckVariable(), r ? setTimeout((() => { + e._decoderWorker.postMessage({cmd: v().POST_MESSAGE.play, url: e._playUrl}) + }), 300) : e._decoderWorker.postMessage({cmd: v().POST_MESSAGE.play, url: e._playUrl}) + }, e._screenshot = (t, r, n) => { + t = t || R().now(); + const o = {png: "image/png", jpeg: "image/jpeg", webp: "image/webp"}; + let a = .92; + void 0 !== n && (a = Number(n)); + const i = e.$canvasElement.toDataURL(o[r] || o.png, a); + R().downloadImg(R().dataURLToFile(i), t) + }, e._close = () => { + e._close$2(), e._clearView() + }, e._close$2 = () => { + e._opt.debug && console.log("_close$2-START"), e._closeAudio && e._closeAudio(), e._audioPlayBuffers = [], e._audioPlaying = !1, e._decoderWorker.postMessage({cmd: v().POST_MESSAGE.close}), delete e._playAudio, e._releaseWakeLock(), e._initCheckVariable(), e._opt.debug && console.log("_close$2-END") + }, e._releaseWakeLock = () => { + e._wakeLock && (e._wakeLock.release(), e._wakeLock = null) + }, e._clearView = () => { + e._contextGL && e._contextGL.clear(e._contextGL.COLOR_BUFFER_BIT) + }, e._resize = () => { + const t = e.$container.clientWidth; + let r = e.$container.clientHeight; + e._showControl() && (r -= 38); + const n = e.$canvasElement.width, o = e.$canvasElement.height, a = e._opt.rotate, i = t / n, s = r / o; + let u = i > s ? s : i; + e._opt.isResize || i !== s && (u = i + "," + s), e._opt.isFullResize && (u = i > s ? i : s); + let c = "scale(" + u + ")"; + a && (c += " rotate(" + a + "deg)"), e.$canvasElement.style.transform = c, e.$canvasElement.style.left = (t - n) / 2 + "px", e.$canvasElement.style.top = (r - o) / 2 + "px" + }, e._enableWakeLock = () => { + e._opt.keepScreenOn && "wakeLock" in navigator && navigator.wakeLock.request("screen").then((t => { + e._wakeLock = t + })) + }, e._supportOffscreen = () => !e._opt.forceNoOffscreen && "function" == typeof e.$canvasElement.transferControlToOffscreen, e._checkHeart = () => { + e._clearCheckHeartTimeout(), e._startCheckHeartTimeout() + }, e._updateStats = t => { + t = t || {}, e._startBpsTime || (e._startBpsTime = R().now()); + const r = R().now(); + r - e._startBpsTime < 1e3 ? e._stats.fps += 1 : (e._stats.ts = t.ts, e._stats.buf = t.buf, e._trigger(v().EVEMTS.stats, e._stats), e._trigger(v().EVEMTS.performance, R().fpsStatus(e._stats.fps)), e._trigger(v().EVEMTS.buffer, R().bufferStatus(e._stats.buf, 1e3 * e._opt.videoBuffer)), e._stats.fps = 0, e._startBpsTime = r) + }, e._onfullscreenchange = () => { + (void 0).fullscreen = R().checkFull() + }, e._handleVisibilityChange = () => { + e._opt.debug && console.log(document.visibilityState, e._isPlayingBeforePageHidden), "visible" === document.visibilityState ? e._isPlayingBeforePageHidden && e._play() : (e._isPlayingBeforePageHidden = e.playing, e.playing && e._pause()) + }, e._handleWakeLock = () => { + null !== e._wakeLock && "visible" === document.visibilityState && e._enableWakeLock() + } + }, t(ce, "default", (function () { + return le + }))), ce + } + + var pe, he, me = !1; + + function Ae() { + return me || (me = !0, pe = {}, ee(), oe(), ue(), fe(), he = e => { + ee().default(e), oe().default(e), ue().default(e), fe().default(e) + }, t(pe, "default", (function () { + return he + }))), pe + } + + var ge, ve = !1; + var Ee, ye, we, _e, be, ke, Te, De, Se, Ce, Oe, Pe, xe, Be, Me, Re, Le, Ie, Fe, Ue, Ne, je, Ge, ze, We, Ye, He, $e, + Ve, Qe, Xe, qe, Ze, Ke, Je, et, tt, rt, nt, ot, at, it, st, ut, ct, lt, dt, ft, pt, ht, mt, At, gt, vt, Et, yt, wt, + _t, bt, kt, Tt, Dt, St, Ct, Ot, Pt, xt, Bt, Mt, Rt, Lt, It, Ft, Ut, Nt, jt, Gt, zt, Wt, Yt, Ht, $t, Vt, Qt, Xt, qt, + Zt, Kt, Jt, er, tr, rr, nr, or, ar, ir, sr, ur, cr, lr, dr, fr, pr, hr, mr, Ar, gr, vr, Er, yr, wr, _r, br, kr, Tr, + Dr = !1; + + function Sr(e) { + return Ee.locateFile ? Ee.locateFile(e, Oe) : Oe + e + } + + function Cr(e) { + Cr.shown || (Cr.shown = {}), Cr.shown[e] || (Cr.shown[e] = 1, Me(e)) + } + + function Or(e, t) { + e || Yr("Assertion failed: " + t) + } + + function Pr(e, t, r) { + for (var n = t + r, o = ""; !(t >= n);) { + var a = e[t++]; + if (!a) return o; + if (128 & a) { + var i = 63 & e[t++]; + if (192 != (224 & a)) { + var s = 63 & e[t++]; + if ((a = 224 == (240 & a) ? (15 & a) << 12 | i << 6 | s : (7 & a) << 18 | i << 12 | s << 6 | 63 & e[t++]) < 65536) o += String.fromCharCode(a); else { + var u = a - 65536; + o += String.fromCharCode(55296 | u >> 10, 56320 | 1023 & u) + } + } else o += String.fromCharCode((31 & a) << 6 | i) + } else o += String.fromCharCode(a) + } + return o + } + + function xr(e, t) { + return e ? Pr(We, e, t) : "" + } + + function Br(e, t, r, n) { + if (!(n > 0)) return 0; + for (var o = r, a = r + n - 1, i = 0; i < e.length; ++i) { + var s = e.charCodeAt(i); + if (s >= 55296 && s <= 57343) s = 65536 + ((1023 & s) << 10) | 1023 & e.charCodeAt(++i); + if (s <= 127) { + if (r >= a) break; + t[r++] = s + } else if (s <= 2047) { + if (r + 1 >= a) break; + t[r++] = 192 | s >> 6, t[r++] = 128 | 63 & s + } else if (s <= 65535) { + if (r + 2 >= a) break; + t[r++] = 224 | s >> 12, t[r++] = 128 | s >> 6 & 63, t[r++] = 128 | 63 & s + } else { + if (r + 3 >= a) break; + t[r++] = 240 | s >> 18, t[r++] = 128 | s >> 12 & 63, t[r++] = 128 | s >> 6 & 63, t[r++] = 128 | 63 & s + } + } + return t[r] = 0, r - o + } + + function Mr(e, t, r) { + return Br(e, We, t, r) + } + + function Rr(e) { + for (var t = 0, r = 0; r < e.length; ++r) { + var n = e.charCodeAt(r); + n >= 55296 && n <= 57343 && (n = 65536 + ((1023 & n) << 10) | 1023 & e.charCodeAt(++r)), n <= 127 ? ++t : t += n <= 2047 ? 2 : n <= 65535 ? 3 : 4 + } + return t + } + + function Lr(e, t) { + for (var r = "", n = 0; !(n >= t / 2); ++n) { + var o = Ye[e + 2 * n >> 1]; + if (0 == o) break; + r += String.fromCharCode(o) + } + return r + } + + function Ir(e, t, r) { + if (void 0 === r && (r = 2147483647), r < 2) return 0; + for (var n = t, o = (r -= 2) < 2 * e.length ? r / 2 : e.length, a = 0; a < o; ++a) { + var i = e.charCodeAt(a); + Ye[t >> 1] = i, t += 2 + } + return Ye[t >> 1] = 0, t - n + } + + function Fr(e) { + return 2 * e.length + } + + function Ur(e, t) { + for (var r = 0, n = ""; !(r >= t / 4);) { + var o = $e[e + 4 * r >> 2]; + if (0 == o) break; + if (++r, o >= 65536) { + var a = o - 65536; + n += String.fromCharCode(55296 | a >> 10, 56320 | 1023 & a) + } else n += String.fromCharCode(o) + } + return n + } + + function Nr(e, t, r) { + if (void 0 === r && (r = 2147483647), r < 4) return 0; + for (var n = t, o = n + r - 4, a = 0; a < e.length; ++a) { + var i = e.charCodeAt(a); + if (i >= 55296 && i <= 57343) i = 65536 + ((1023 & i) << 10) | 1023 & e.charCodeAt(++a); + if ($e[t >> 2] = i, (t += 4) + 4 > o) break + } + return $e[t >> 2] = 0, t - n + } + + function jr(e) { + for (var t = 0, r = 0; r < e.length; ++r) { + var n = e.charCodeAt(r); + n >= 55296 && n <= 57343 && ++r, t += 4 + } + return t + } + + function Gr(e) { + var t = Rr(e) + 1, r = Jt(t); + return r && Br(e, ze, r, t), r + } + + function zr(e) { + Or(!Se, "addRunDependency cannot be used in a pthread worker"), nt++, Ee.monitorRunDependencies && Ee.monitorRunDependencies(nt) + } + + function Wr(e) { + if (nt--, Ee.monitorRunDependencies && Ee.monitorRunDependencies(nt), 0 == nt && (null !== ot && (clearInterval(ot), ot = null), at)) { + var t = at; + at = null, t() + } + } + + function Yr(e) { + throw Ee.onAbort && Ee.onAbort(e), Se && console.error("Pthread aborting at " + (new Error).stack), Me(e += ""), je = !0, 1, e = "abort(" + e + "). Build with -s ASSERTIONS=1 for more info.", new WebAssembly.RuntimeError(e) + } + + function Hr(e) { + return t = e, r = it, String.prototype.startsWith ? t.startsWith(r) : 0 === t.indexOf(r); + var t, r + } + + function $r(e) { + try { + if (e == st && Ie) return new Uint8Array(Ie); + if (xe) return xe(e); + throw"both async and sync fetching of the wasm failed" + } catch (e) { + Yr(e) + } + } + + function Vr() { + var e = {a: qt}; + + function t(e, t) { + var r = e.exports; + Ee.asm = r, Ze = Ee.asm.da, Ne = t, Se || Wr() + } + + function r(e) { + t(e.instance, e.module) + } + + function n(t) { + return (Ie || !Te && !De || "function" != typeof fetch ? Promise.resolve().then((function () { + return $r(st) + })) : fetch(st, {credentials: "same-origin"}).then((function (e) { + if (!e.ok) throw"failed to load wasm binary file at '" + st + "'"; + return e.arrayBuffer() + })).catch((function () { + return $r(st) + }))).then((function (t) { + return WebAssembly.instantiate(t, e) + })).then(t, (function (e) { + Me("failed to asynchronously prepare wasm: " + e), Yr(e) + })) + } + + if (Se || zr(), Ee.instantiateWasm) try { + return Ee.instantiateWasm(e, t) + } catch (e) { + return Me("Module.instantiateWasm callback failed with error: " + e), !1 + } + return Ie || "function" != typeof WebAssembly.instantiateStreaming || Hr(st) || "function" != typeof fetch ? n(r) : fetch(st, {credentials: "same-origin"}).then((function (t) { + return WebAssembly.instantiateStreaming(t, e).then(r, (function (e) { + return Me("wasm streaming compile failed: " + e), Me("falling back to ArrayBuffer instantiation"), n(r) + })) + })), {} + } + + function Qr() { + ft.initRuntime() + } + + function Xr(e) { + for (; e.length > 0;) { + var t = e.shift(); + if ("function" != typeof t) { + var r = t.func; + "number" == typeof r ? void 0 === t.arg ? Ze.get(r)() : Ze.get(r)(t.arg) : r(void 0 === t.arg ? null : t.arg) + } else t(Ee) + } + } + + function qr(e, t) { + if (e <= 0 || e > ze.length || !0 & e || t < 0) return -28; + if (0 == t) return 0; + t >= 2147483647 && (t = 1 / 0); + var r = Atomics.load($e, br >> 2), n = 0; + if (r == e && (Atomics.compareExchange($e, br >> 2, r, 0) == r && (n = 1, --t <= 0))) return 1; + var o = Atomics.notify($e, e >> 2, t); + if (o >= 0) return o + n; + throw"Atomics.notify returned an unexpected value " + o + } + + function Zr(e) { + if (Se) throw"Internal Error! cleanupThread() can only ever be called from main application thread!"; + if (!e) throw"Internal Error! Null pthread_ptr in cleanupThread!"; + $e[e + 12 >> 2] = 0; + var t = ft.pthreads[e]; + if (t) { + var r = t.worker; + ft.returnWorkerToPool(r) + } + } + + function Kr(e, t) { + yr(e, t), vr(e) + } + + function Jr() { + return Fe + } + + function en(e, t) { + return Ze.get(e)(t) + } + + function tn() { + var e = new Error; + if (!e.stack) { + try { + throw new Error + } catch (t) { + e = t + } + if (!e.stack) return "(no stack trace available)" + } + return e.stack.toString() + } + + function rn(e, t, r, n) { + Yr("Assertion failed: " + xr(e) + ", at: " + [t ? xr(t) : "unknown filename", r, n ? xr(n) : "unknown function"]) + } + + function nn(e) { + return $e[tr() >> 2] = e, e + } + + function on(e) { + for (var t = function (e, t) { + return t || (t = Re), Math.ceil(e / t) * t + }(e, 16384), r = Jt(t); e < t;) ze[r + e++] = 0; + return r + } + + function an(e, t, r) { + if (Se) return zo(1, 1, e, t, r); + Et.varargs = r; + try { + var n = Et.getStreamFromFD(e); + switch (t) { + case 0: + return (o = Et.get()) < 0 ? -28 : vt.open(n.path, n.flags, 0, o).fd; + case 1: + case 2: + return 0; + case 3: + return n.flags; + case 4: + var o = Et.get(); + return n.flags |= o, 0; + case 12: + o = Et.get(); + return Ye[o + 0 >> 1] = 2, 0; + case 13: + case 14: + return 0; + case 16: + case 8: + return -28; + case 9: + return nn(28), -1; + default: + return -28 + } + } catch (e) { + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), -e.errno + } + } + + function sn(e, t, r) { + if (Se) return zo(2, 1, e, t, r); + Et.varargs = r; + try { + var n = Et.getStr(e), o = r ? Et.get() : 0; + return vt.open(n, t, o).fd + } catch (e) { + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), -e.errno + } + } + + function un(e) { + switch (e) { + case 1: + return 0; + case 2: + return 1; + case 4: + return 2; + case 8: + return 3; + default: + throw new TypeError("Unknown type size: " + e) + } + } + + function cn(e) { + for (var t = "", r = e; We[r];) t += yt[We[r++]]; + return t + } + + function ln(e) { + if (void 0 === e) return "_unknown"; + var t = (e = e.replace(/[^a-zA-Z0-9_]/g, "$")).charCodeAt(0); + return t >= kt && t <= Tt ? "_" + e : e + } + + function dn(e, t) { + return e = ln(e), new Function("body", "return function " + e + '() {\n "use strict"; return body.apply(this, arguments);\n};\n')(t) + } + + function fn(e, t) { + var r = dn(t, (function (e) { + this.name = t, this.message = e; + var r = new Error(e).stack; + void 0 !== r && (this.stack = this.toString() + "\n" + r.replace(/^Error(:[^\n]*)?\n/, "")) + })); + return r.prototype = Object.create(e.prototype), r.prototype.constructor = r, r.prototype.toString = function () { + return void 0 === this.message ? this.name : this.name + ": " + this.message + }, r + } + + function pn(e) { + throw new Dt(e) + } + + function hn(e) { + throw new St(e) + } + + function mn(e, t, r) { + function n(t) { + var n = r(t); + n.length !== e.length && hn("Mismatched type converter count"); + for (var o = 0; o < e.length; ++o) An(e[o], n[o]) + } + + e.forEach((function (e) { + bt[e] = t + })); + var o = new Array(t.length), a = [], i = 0; + t.forEach((function (e, t) { + _t.hasOwnProperty(e) ? o[t] = _t[e] : (a.push(e), wt.hasOwnProperty(e) || (wt[e] = []), wt[e].push((function () { + o[t] = _t[e], ++i === a.length && n(o) + }))) + })), 0 === a.length && n(o) + } + + function An(e, t, r) { + if (r = r || {}, !("argPackAdvance" in t)) throw new TypeError("registerType registeredInstance requires argPackAdvance"); + var n = t.name; + if (e || pn('type "' + n + '" must have a positive integer typeid pointer'), _t.hasOwnProperty(e)) { + if (r.ignoreDuplicateRegistrations) return; + pn("Cannot register type '" + n + "' twice") + } + if (_t[e] = t, delete bt[e], wt.hasOwnProperty(e)) { + var o = wt[e]; + delete wt[e], o.forEach((function (e) { + e() + })) + } + } + + function gn(e, t, r, n, o) { + var a = un(r); + An(e, { + name: t = cn(t), fromWireType: function (e) { + return !!e + }, toWireType: function (e, t) { + return t ? n : o + }, argPackAdvance: 8, readValueFromPointer: function (e) { + var n; + if (1 === r) n = ze; else if (2 === r) n = Ye; else { + if (4 !== r) throw new TypeError("Unknown boolean type size: " + t); + n = $e + } + return this.fromWireType(n[e >> a]) + }, destructorFunction: null + }) + } + + function vn(e) { + if (!(this instanceof Cn)) return !1; + if (!(e instanceof Cn)) return !1; + for (var t = this.$$.ptrType.registeredClass, r = this.$$.ptr, n = e.$$.ptrType.registeredClass, o = e.$$.ptr; t.baseClass;) r = t.upcast(r), t = t.baseClass; + for (; n.baseClass;) o = n.upcast(o), n = n.baseClass; + return t === n && r === o + } + + function En(e) { + pn(e.$$.ptrType.registeredClass.name + " instance already deleted") + } + + function yn(e) { + } + + function wn(e) { + e.count.value -= 1, 0 === e.count.value && function (e) { + e.smartPtr ? e.smartPtrType.rawDestructor(e.smartPtr) : e.ptrType.registeredClass.rawDestructor(e.ptr) + }(e) + } + + function _n(e) { + return "undefined" == typeof FinalizationGroup ? (_n = function (e) { + return e + }, e) : (Ct = new FinalizationGroup((function (e) { + for (var t = e.next(); !t.done; t = e.next()) { + var r = t.value; + r.ptr ? wn(r) : console.warn("object already deleted: " + r.ptr) + } + })), yn = function (e) { + Ct.unregister(e.$$) + }, (_n = function (e) { + return Ct.register(e, e.$$, e.$$), e + })(e)) + } + + function bn() { + if (this.$$.ptr || En(this), this.$$.preservePointerOnDelete) return this.$$.count.value += 1, this; + var e, t = _n(Object.create(Object.getPrototypeOf(this), { + $$: { + value: (e = this.$$, { + count: e.count, + deleteScheduled: e.deleteScheduled, + preservePointerOnDelete: e.preservePointerOnDelete, + ptr: e.ptr, + ptrType: e.ptrType, + smartPtr: e.smartPtr, + smartPtrType: e.smartPtrType + }) + } + })); + return t.$$.count.value += 1, t.$$.deleteScheduled = !1, t + } + + function kn() { + this.$$.ptr || En(this), this.$$.deleteScheduled && !this.$$.preservePointerOnDelete && pn("Object already scheduled for deletion"), yn(this), wn(this.$$), this.$$.preservePointerOnDelete || (this.$$.smartPtr = void 0, this.$$.ptr = void 0) + } + + function Tn() { + return !this.$$.ptr + } + + function Dn() { + for (; Pt.length;) { + var e = Pt.pop(); + e.$$.deleteScheduled = !1, e.delete() + } + } + + function Sn() { + return this.$$.ptr || En(this), this.$$.deleteScheduled && !this.$$.preservePointerOnDelete && pn("Object already scheduled for deletion"), Pt.push(this), 1 === Pt.length && Ot && Ot(Dn), this.$$.deleteScheduled = !0, this + } + + function Cn() { + } + + function On(e, t, r) { + if (void 0 === e[t].overloadTable) { + var n = e[t]; + e[t] = function () { + return e[t].overloadTable.hasOwnProperty(arguments.length) || pn("Function '" + r + "' called with an invalid number of arguments (" + arguments.length + ") - expects one of (" + e[t].overloadTable + ")!"), e[t].overloadTable[arguments.length].apply(this, arguments) + }, e[t].overloadTable = [], e[t].overloadTable[n.argCount] = n + } + } + + function Pn(e, t, r, n, o, a, i, s) { + this.name = e, this.constructor = t, this.instancePrototype = r, this.rawDestructor = n, this.baseClass = o, this.getActualType = a, this.upcast = i, this.downcast = s, this.pureVirtualFunctions = [] + } + + function xn(e, t, r) { + for (; t !== r;) t.upcast || pn("Expected null or instance of " + r.name + ", got an instance of " + t.name), e = t.upcast(e), t = t.baseClass; + return e + } + + function Bn(e, t) { + if (null === t) return this.isReference && pn("null is not a valid " + this.name), 0; + t.$$ || pn('Cannot pass "' + lo(t) + '" as a ' + this.name), t.$$.ptr || pn("Cannot pass deleted object as a pointer of type " + this.name); + var r = t.$$.ptrType.registeredClass; + return xn(t.$$.ptr, r, this.registeredClass) + } + + function Mn(e, t) { + var r; + if (null === t) return this.isReference && pn("null is not a valid " + this.name), this.isSmartPointer ? (r = this.rawConstructor(), null !== e && e.push(this.rawDestructor, r), r) : 0; + t.$$ || pn('Cannot pass "' + lo(t) + '" as a ' + this.name), t.$$.ptr || pn("Cannot pass deleted object as a pointer of type " + this.name), !this.isConst && t.$$.ptrType.isConst && pn("Cannot convert argument of type " + (t.$$.smartPtrType ? t.$$.smartPtrType.name : t.$$.ptrType.name) + " to parameter type " + this.name); + var n = t.$$.ptrType.registeredClass; + if (r = xn(t.$$.ptr, n, this.registeredClass), this.isSmartPointer) switch (void 0 === t.$$.smartPtr && pn("Passing raw pointer to smart pointer is illegal"), this.sharingPolicy) { + case 0: + t.$$.smartPtrType === this ? r = t.$$.smartPtr : pn("Cannot convert argument of type " + (t.$$.smartPtrType ? t.$$.smartPtrType.name : t.$$.ptrType.name) + " to parameter type " + this.name); + break; + case 1: + r = t.$$.smartPtr; + break; + case 2: + if (t.$$.smartPtrType === this) r = t.$$.smartPtr; else { + var o = t.clone(); + r = this.rawShare(r, uo((function () { + o.delete() + }))), null !== e && e.push(this.rawDestructor, r) + } + break; + default: + pn("Unsupporting sharing policy") + } + return r + } + + function Rn(e, t) { + if (null === t) return this.isReference && pn("null is not a valid " + this.name), 0; + t.$$ || pn('Cannot pass "' + lo(t) + '" as a ' + this.name), t.$$.ptr || pn("Cannot pass deleted object as a pointer of type " + this.name), t.$$.ptrType.isConst && pn("Cannot convert argument of type " + t.$$.ptrType.name + " to parameter type " + this.name); + var r = t.$$.ptrType.registeredClass; + return xn(t.$$.ptr, r, this.registeredClass) + } + + function Ln(e) { + return this.fromWireType(Ve[e >> 2]) + } + + function In(e) { + return this.rawGetPointee && (e = this.rawGetPointee(e)), e + } + + function Fn(e) { + this.rawDestructor && this.rawDestructor(e) + } + + function Un(e) { + null !== e && e.delete() + } + + function Nn(e, t, r) { + if (t === r) return e; + if (void 0 === r.baseClass) return null; + var n = Nn(e, t, r.baseClass); + return null === n ? null : r.downcast(n) + } + + function jn() { + return Object.keys(Bt).length + } + + function Gn() { + var e = []; + for (var t in Bt) Bt.hasOwnProperty(t) && e.push(Bt[t]); + return e + } + + function zn(e) { + Ot = e, Pt.length && Ot && Ot(Dn) + } + + function Wn(e, t) { + return t = function (e, t) { + for (void 0 === t && pn("ptr should not be undefined"); e.baseClass;) t = e.upcast(t), e = e.baseClass; + return t + }(e, t), Bt[t] + } + + function Yn(e, t) { + return t.ptrType && t.ptr || hn("makeClassHandle requires ptr and ptrType"), !!t.smartPtrType !== !!t.smartPtr && hn("Both smartPtrType and smartPtr must be specified"), t.count = {value: 1}, _n(Object.create(e, {$$: {value: t}})) + } + + function Hn(e) { + var t = this.getPointee(e); + if (!t) return this.destructor(e), null; + var r = Wn(this.registeredClass, t); + if (void 0 !== r) { + if (0 === r.$$.count.value) return r.$$.ptr = t, r.$$.smartPtr = e, r.clone(); + var n = r.clone(); + return this.destructor(e), n + } + + function o() { + return this.isSmartPointer ? Yn(this.registeredClass.instancePrototype, { + ptrType: this.pointeeType, + ptr: t, + smartPtrType: this, + smartPtr: e + }) : Yn(this.registeredClass.instancePrototype, {ptrType: this, ptr: e}) + } + + var a, i = this.registeredClass.getActualType(t), s = xt[i]; + if (!s) return o.call(this); + a = this.isConst ? s.constPointerType : s.pointerType; + var u = Nn(t, this.registeredClass, a.registeredClass); + return null === u ? o.call(this) : this.isSmartPointer ? Yn(a.registeredClass.instancePrototype, { + ptrType: a, + ptr: u, + smartPtrType: this, + smartPtr: e + }) : Yn(a.registeredClass.instancePrototype, {ptrType: a, ptr: u}) + } + + function $n(e, t, r, n, o, a, i, s, u, c, l) { + this.name = e, this.registeredClass = t, this.isReference = r, this.isConst = n, this.isSmartPointer = o, this.pointeeType = a, this.sharingPolicy = i, this.rawGetPointee = s, this.rawConstructor = u, this.rawShare = c, this.rawDestructor = l, o || void 0 !== t.baseClass ? this.toWireType = Mn : n ? (this.toWireType = Bn, this.destructorFunction = null) : (this.toWireType = Rn, this.destructorFunction = null) + } + + function Vn(e, t, r) { + return -1 != e.indexOf("j") ? function (e, t, r) { + var n = Ee["dynCall_" + e]; + return r && r.length ? n.apply(null, [t].concat(r)) : n.call(null, t) + }(e, t, r) : Ze.get(t).apply(null, r) + } + + function Qn(e, t) { + var r, n, o, a = -1 != (e = cn(e)).indexOf("j") ? (r = e, n = t, o = [], function () { + o.length = arguments.length; + for (var e = 0; e < arguments.length; e++) o[e] = arguments[e]; + return Vn(r, n, o) + }) : Ze.get(t); + return "function" != typeof a && pn("unknown function pointer with signature " + e + ": " + t), a + } + + function Xn(e) { + var t = rr(e), r = cn(t); + return Kt(t), r + } + + function qn(e, t) { + var r = [], n = {}; + throw t.forEach((function e(t) { + n[t] || _t[t] || (bt[t] ? bt[t].forEach(e) : (r.push(t), n[t] = !0)) + })), new Mt(e + ": " + r.map(Xn).join([", "])) + } + + function Zn(e, t, r, n, o, a, i, s, u, c, l, d, f) { + l = cn(l), a = Qn(o, a), s && (s = Qn(i, s)), c && (c = Qn(u, c)), f = Qn(d, f); + var p = ln(l); + !function (e, t, r) { + Ee.hasOwnProperty(e) ? ((void 0 === r || void 0 !== Ee[e].overloadTable && void 0 !== Ee[e].overloadTable[r]) && pn("Cannot register public name '" + e + "' twice"), On(Ee, e, e), Ee.hasOwnProperty(r) && pn("Cannot register multiple overloads of a function with the same number of arguments (" + r + ")!"), Ee[e].overloadTable[r] = t) : (Ee[e] = t, void 0 !== r && (Ee[e].numArguments = r)) + }(p, (function () { + qn("Cannot construct " + l + " due to unbound types", [n]) + })), mn([e, t, r], n ? [n] : [], (function (t) { + var r, o; + t = t[0], o = n ? (r = t.registeredClass).instancePrototype : Cn.prototype; + var i = dn(p, (function () { + if (Object.getPrototypeOf(this) !== u) throw new Dt("Use 'new' to construct " + l); + if (void 0 === d.constructor_body) throw new Dt(l + " has no accessible constructor"); + var e = d.constructor_body[arguments.length]; + if (void 0 === e) throw new Dt("Tried to invoke ctor of " + l + " with invalid number of parameters (" + arguments.length + ") - expected (" + Object.keys(d.constructor_body).toString() + ") parameters instead!"); + return e.apply(this, arguments) + })), u = Object.create(o, {constructor: {value: i}}); + i.prototype = u; + var d = new Pn(l, i, u, f, r, a, s, c), h = new $n(l, d, !0, !1, !1), m = new $n(l + "*", d, !1, !1, !1), + A = new $n(l + " const*", d, !1, !0, !1); + return xt[e] = {pointerType: m, constPointerType: A}, function (e, t, r) { + Ee.hasOwnProperty(e) || hn("Replacing nonexistant public symbol"), void 0 !== Ee[e].overloadTable && void 0 !== r ? Ee[e].overloadTable[r] = t : (Ee[e] = t, Ee[e].argCount = r) + }(p, i), [h, m, A] + })) + } + + function Kn(e, t) { + for (var r = [], n = 0; n < e; n++) r.push($e[(t >> 2) + n]); + return r + } + + function Jn(e) { + for (; e.length;) { + var t = e.pop(); + e.pop()(t) + } + } + + function eo(e, t, r, n, o, a) { + Or(t > 0); + var i = Kn(t, r); + o = Qn(n, o); + var s = [a], u = []; + mn([], [e], (function (e) { + var r = "constructor " + (e = e[0]).name; + if (void 0 === e.registeredClass.constructor_body && (e.registeredClass.constructor_body = []), void 0 !== e.registeredClass.constructor_body[t - 1]) throw new Dt("Cannot register multiple constructors with identical number of parameters (" + (t - 1) + ") for class '" + e.name + "'! Overload resolution is currently only performed using the parameter count, not actual type info!"); + return e.registeredClass.constructor_body[t - 1] = function () { + qn("Cannot construct " + e.name + " due to unbound types", i) + }, mn([], i, (function (n) { + return e.registeredClass.constructor_body[t - 1] = function () { + arguments.length !== t - 1 && pn(r + " called with " + arguments.length + " arguments, expected " + (t - 1)), u.length = 0, s.length = t; + for (var e = 1; e < t; ++e) s[e] = n[e].toWireType(u, arguments[e - 1]); + var a = o.apply(null, s); + return Jn(u), n[0].fromWireType(a) + }, [] + })), [] + })) + } + + function to(e, t) { + if (!(e instanceof Function)) throw new TypeError("new_ called with constructor type " + typeof e + " which is not a function"); + var r = dn(e.name || "unknownFunctionName", (function () { + })); + r.prototype = e.prototype; + var n = new r, o = e.apply(n, t); + return o instanceof Object ? o : n + } + + function ro(e, t, r, n, o, a, i, s) { + var u = Kn(r, n); + t = cn(t), a = Qn(o, a), mn([], [e], (function (e) { + var n = (e = e[0]).name + "." + t; + + function o() { + qn("Cannot call " + n + " due to unbound types", u) + } + + s && e.registeredClass.pureVirtualFunctions.push(t); + var c = e.registeredClass.instancePrototype, l = c[t]; + return void 0 === l || void 0 === l.overloadTable && l.className !== e.name && l.argCount === r - 2 ? (o.argCount = r - 2, o.className = e.name, c[t] = o) : (On(c, t, n), c[t].overloadTable[r - 2] = o), mn([], u, (function (o) { + var s = function (e, t, r, n, o) { + var a = t.length; + a < 2 && pn("argTypes array size mismatch! Must at least get return value and 'this' types!"); + for (var i = null !== t[1] && null !== r, s = !1, u = 1; u < t.length; ++u) if (null !== t[u] && void 0 === t[u].destructorFunction) { + s = !0; + break + } + var c = "void" !== t[0].name, l = "", d = ""; + for (u = 0; u < a - 2; ++u) l += (0 !== u ? ", " : "") + "arg" + u, d += (0 !== u ? ", " : "") + "arg" + u + "Wired"; + var f = "return function " + ln(e) + "(" + l + ") {\nif (arguments.length !== " + (a - 2) + ") {\nthrowBindingError('function " + e + " called with ' + arguments.length + ' arguments, expected " + (a - 2) + " args!');\n}\n"; + s && (f += "var destructors = [];\n"); + var p = s ? "destructors" : "null", + h = ["throwBindingError", "invoker", "fn", "runDestructors", "retType", "classParam"], + m = [pn, n, o, Jn, t[0], t[1]]; + for (i && (f += "var thisWired = classParam.toWireType(" + p + ", this);\n"), u = 0; u < a - 2; ++u) f += "var arg" + u + "Wired = argType" + u + ".toWireType(" + p + ", arg" + u + "); // " + t[u + 2].name + "\n", h.push("argType" + u), m.push(t[u + 2]); + if (i && (d = "thisWired" + (d.length > 0 ? ", " : "") + d), f += (c ? "var rv = " : "") + "invoker(fn" + (d.length > 0 ? ", " : "") + d + ");\n", s) f += "runDestructors(destructors);\n"; else for (u = i ? 1 : 2; u < t.length; ++u) { + var A = 1 === u ? "thisWired" : "arg" + (u - 2) + "Wired"; + null !== t[u].destructorFunction && (f += A + "_dtor(" + A + "); // " + t[u].name + "\n", h.push(A + "_dtor"), m.push(t[u].destructorFunction)) + } + return c && (f += "var ret = retType.fromWireType(rv);\nreturn ret;\n"), f += "}\n", h.push(f), to(Function, h).apply(null, m) + }(n, o, e, a, i); + return void 0 === c[t].overloadTable ? (s.argCount = r - 2, c[t] = s) : c[t].overloadTable[r - 2] = s, [] + })), [] + })) + } + + function no(e, t, r) { + return e instanceof Object || pn(r + ' with invalid "this": ' + e), e instanceof t.registeredClass.constructor || pn(r + ' incompatible with "this" of type ' + e.constructor.name), e.$$.ptr || pn("cannot call emscripten binding method " + r + " on deleted object"), xn(e.$$.ptr, e.$$.ptrType.registeredClass, t.registeredClass) + } + + function oo(e, t, r, n, o, a, i, s, u, c) { + t = cn(t), o = Qn(n, o), mn([], [e], (function (e) { + var n = (e = e[0]).name + "." + t, l = { + get: function () { + qn("Cannot access " + n + " due to unbound types", [r, i]) + }, enumerable: !0, configurable: !0 + }; + return l.set = u ? function () { + qn("Cannot access " + n + " due to unbound types", [r, i]) + } : function (e) { + pn(n + " is a read-only property") + }, Object.defineProperty(e.registeredClass.instancePrototype, t, l), mn([], u ? [r, i] : [r], (function (r) { + var i = r[0], l = { + get: function () { + var t = no(this, e, n + " getter"); + return i.fromWireType(o(a, t)) + }, enumerable: !0 + }; + if (u) { + u = Qn(s, u); + var d = r[1]; + l.set = function (t) { + var r = no(this, e, n + " setter"), o = []; + u(c, r, d.toWireType(o, t)), Jn(o) + } + } + return Object.defineProperty(e.registeredClass.instancePrototype, t, l), [] + })), [] + })) + } + + function ao(e) { + e > 4 && 0 == --Lt[e].refcount && (Lt[e] = void 0, Rt.push(e)) + } + + function io() { + for (var e = 0, t = 5; t < Lt.length; ++t) void 0 !== Lt[t] && ++e; + return e + } + + function so() { + for (var e = 5; e < Lt.length; ++e) if (void 0 !== Lt[e]) return Lt[e]; + return null + } + + function uo(e) { + switch (e) { + case void 0: + return 1; + case null: + return 2; + case!0: + return 3; + case!1: + return 4; + default: + var t = Rt.length ? Rt.pop() : Lt.length; + return Lt[t] = {refcount: 1, value: e}, t + } + } + + function co(e, t) { + An(e, { + name: t = cn(t), fromWireType: function (e) { + var t = Lt[e].value; + return ao(e), t + }, toWireType: function (e, t) { + return uo(t) + }, argPackAdvance: 8, readValueFromPointer: Ln, destructorFunction: null + }) + } + + function lo(e) { + if (null === e) return "null"; + var t = typeof e; + return "object" === t || "array" === t || "function" === t ? e.toString() : "" + e + } + + function fo(e, t) { + switch (t) { + case 2: + return function (e) { + return this.fromWireType(Qe[e >> 2]) + }; + case 3: + return function (e) { + return this.fromWireType(Xe[e >> 3]) + }; + default: + throw new TypeError("Unknown float type: " + e) + } + } + + function po(e, t, r) { + var n = un(r); + An(e, { + name: t = cn(t), fromWireType: function (e) { + return e + }, toWireType: function (e, t) { + if ("number" != typeof t && "boolean" != typeof t) throw new TypeError('Cannot convert "' + lo(t) + '" to ' + this.name); + return t + }, argPackAdvance: 8, readValueFromPointer: fo(t, n), destructorFunction: null + }) + } + + function ho(e, t, r) { + switch (t) { + case 0: + return r ? function (e) { + return ze[e] + } : function (e) { + return We[e] + }; + case 1: + return r ? function (e) { + return Ye[e >> 1] + } : function (e) { + return He[e >> 1] + }; + case 2: + return r ? function (e) { + return $e[e >> 2] + } : function (e) { + return Ve[e >> 2] + }; + default: + throw new TypeError("Unknown integer type: " + e) + } + } + + function mo(e, t, r, n, o) { + t = cn(t), -1 === o && (o = 4294967295); + var a = un(r), i = function (e) { + return e + }; + if (0 === n) { + var s = 32 - 8 * r; + i = function (e) { + return e << s >>> s + } + } + var u = -1 != t.indexOf("unsigned"); + An(e, { + name: t, fromWireType: i, toWireType: function (e, r) { + if ("number" != typeof r && "boolean" != typeof r) throw new TypeError('Cannot convert "' + lo(r) + '" to ' + this.name); + if (r < n || r > o) throw new TypeError('Passing a number "' + lo(r) + '" from JS side to C/C++ side to an argument of type "' + t + '", which is outside the valid range [' + n + ", " + o + "]!"); + return u ? r >>> 0 : 0 | r + }, argPackAdvance: 8, readValueFromPointer: ho(t, a, 0 !== n), destructorFunction: null + }) + } + + function Ao(e, t, r) { + var n = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array][t]; + + function o(e) { + var t = Ve, r = t[e >>= 2], o = t[e + 1]; + return new n(Ge, o, r) + } + + An(e, { + name: r = cn(r), + fromWireType: o, + argPackAdvance: 8, + readValueFromPointer: o + }, {ignoreDuplicateRegistrations: !0}) + } + + function go(e, t) { + var r = "std::string" === (t = cn(t)); + An(e, { + name: t, fromWireType: function (e) { + var t, n = Ve[e >> 2]; + if (r) for (var o = e + 4, a = 0; a <= n; ++a) { + var i = e + 4 + a; + if (a == n || 0 == We[i]) { + var s = xr(o, i - o); + void 0 === t ? t = s : (t += String.fromCharCode(0), t += s), o = i + 1 + } + } else { + var u = new Array(n); + for (a = 0; a < n; ++a) u[a] = String.fromCharCode(We[e + 4 + a]); + t = u.join("") + } + return Kt(e), t + }, toWireType: function (e, t) { + t instanceof ArrayBuffer && (t = new Uint8Array(t)); + var n = "string" == typeof t; + n || t instanceof Uint8Array || t instanceof Uint8ClampedArray || t instanceof Int8Array || pn("Cannot pass non-string to std::string"); + var o = (r && n ? function () { + return Rr(t) + } : function () { + return t.length + })(), a = Jt(4 + o + 1); + if (Ve[a >> 2] = o, r && n) Mr(t, a + 4, o + 1); else if (n) for (var i = 0; i < o; ++i) { + var s = t.charCodeAt(i); + s > 255 && (Kt(a), pn("String has UTF-16 code units that do not fit in 8 bits")), We[a + 4 + i] = s + } else for (i = 0; i < o; ++i) We[a + 4 + i] = t[i]; + return null !== e && e.push(Kt, a), a + }, argPackAdvance: 8, readValueFromPointer: Ln, destructorFunction: function (e) { + Kt(e) + } + }) + } + + function vo(e, t, r) { + var n, o, a, i, s; + r = cn(r), 2 === t ? (n = Lr, o = Ir, i = Fr, a = function () { + return He + }, s = 1) : 4 === t && (n = Ur, o = Nr, i = jr, a = function () { + return Ve + }, s = 2), An(e, { + name: r, fromWireType: function (e) { + for (var r, o = Ve[e >> 2], i = a(), u = e + 4, c = 0; c <= o; ++c) { + var l = e + 4 + c * t; + if (c == o || 0 == i[l >> s]) { + var d = n(u, l - u); + void 0 === r ? r = d : (r += String.fromCharCode(0), r += d), u = l + t + } + } + return Kt(e), r + }, toWireType: function (e, n) { + "string" != typeof n && pn("Cannot pass non-string to C++ string type " + r); + var a = i(n), u = Jt(4 + a + t); + return Ve[u >> 2] = a >> s, o(n, u + 4, a + t), null !== e && e.push(Kt, u), u + }, argPackAdvance: 8, readValueFromPointer: Ln, destructorFunction: function (e) { + Kt(e) + } + }) + } + + function Eo(e, t) { + An(e, { + isVoid: !0, name: t = cn(t), argPackAdvance: 0, fromWireType: function () { + }, toWireType: function (e, t) { + } + }) + } + + function yo(e, t) { + if (e == t) postMessage({cmd: "processQueuedMainThreadWork"}); else if (Se) postMessage({ + targetThread: e, + cmd: "processThreadQueue" + }); else { + var r = ft.pthreads[e], n = r && r.worker; + if (!n) return; + n.postMessage({cmd: "processThreadQueue"}) + } + return 1 + } + + function wo(e) { + return e || pn("Cannot use deleted val. handle = " + e), Lt[e].value + } + + function _o(e, t) { + var r = _t[e]; + return void 0 === r && pn(t + " has unknown type " + Xn(e)), r + } + + function bo(e, t, r) { + e = wo(e), t = _o(t, "emval::as"); + var n = [], o = uo(n); + return $e[r >> 2] = o, t.toWireType(n, e) + } + + function ko(e, t, r, n) { + var o, a; + (e = Ft[e])(t = wo(t), r = void 0 === (a = It[o = r]) ? cn(o) : a, null, n) + } + + function To(e, t) { + for (var r = function (e, t) { + for (var r = new Array(e), n = 0; n < e; ++n) r[n] = _o($e[(t >> 2) + n], "parameter " + n); + return r + }(e, t), n = r[0], o = n.name + "_$" + r.slice(1).map((function (e) { + return e.name + })).join("_") + "$", a = ["retType"], i = [n], s = "", u = 0; u < e - 1; ++u) s += (0 !== u ? ", " : "") + "arg" + u, a.push("argType" + u), i.push(r[1 + u]); + var c = "return function " + ln("methodCaller_" + o) + "(handle, name, destructors, args) {\n", l = 0; + for (u = 0; u < e - 1; ++u) c += " var arg" + u + " = argType" + u + ".readValueFromPointer(args" + (l ? "+" + l : "") + ");\n", l += r[u + 1].argPackAdvance; + c += " var rv = handle[name](" + s + ");\n"; + for (u = 0; u < e - 1; ++u) r[u + 1].deleteObject && (c += " argType" + u + ".deleteObject(arg" + u + ");\n"); + n.isVoid || (c += " return retType.toWireType(destructors, rv);\n"), c += "};\n", a.push(c); + var d, f, p = to(Function, a).apply(null, i); + return d = p, f = Ft.length, Ft.push(d), f + } + + function Do(e) { + e > 4 && (Lt[e].refcount += 1) + } + + function So(e) { + Jn(Lt[e].value), ao(e) + } + + function Co(e, t) { + return uo((e = _o(e, "_emval_take_value")).readValueFromPointer(t)) + } + + function Oo() { + Yr() + } + + function Po() { + return void 0 === Po.start && (Po.start = Date.now()), 1e3 * (Date.now() - Po.start) | 0 + } + + function xo(e, t, r) { + var n = function (e, t) { + var r; + Nt.length = 0, t >>= 2; + for (; r = We[e++];) { + var n = r < 105; + n && 1 & t && t++, Nt.push(n ? Xe[t++ >> 1] : $e[t]), ++t + } + return Nt + }(t, r); + return lt[e].apply(null, n) + } + + function Bo() { + De || Cr("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread") + } + + function Mo(e, t) { + } + + function Ro(e, t, r) { + if (e <= 0 || e > ze.length || !0 & e) return -28; + if (Te) { + if (Atomics.load($e, e >> 2) != t) return -6; + var n = performance.now(), o = n + r; + for (Atomics.exchange($e, br >> 2, e); ;) { + if ((n = performance.now()) > o) return Atomics.exchange($e, br >> 2, 0), -73; + if (0 == Atomics.exchange($e, br >> 2, 0)) break; + if (lr(), Atomics.load($e, e >> 2) != t) return -6; + Atomics.exchange($e, br >> 2, e) + } + return 0 + } + var a = Atomics.wait($e, e >> 2, t, r); + if ("timed-out" === a) return -73; + if ("not-equal" === a) return -6; + if ("ok" === a) return 0; + throw"Atomics.wait returned an unexpected value " + a + } + + function Lo(e, t) { + return (e >>> 0) + 4294967296 * t + } + + function Io(e, t) { + if (e <= 0) return e; + var r = t <= 32 ? Math.abs(1 << t - 1) : Math.pow(2, t - 1); + return e >= r && (t <= 32 || e > r) && (e = -2 * r + e), e + } + + function Fo(e, t) { + return e >= 0 ? e : t <= 32 ? 2 * Math.abs(1 << t - 1) + e : Math.pow(2, t) + e + } + + function Uo(e) { + if (!e || !e.callee || !e.callee.name) return [null, "", ""]; + e.callee.toString(); + var t = e.callee.name, r = "(", n = !0; + for (var o in e) { + var a = e[o]; + n || (r += ", "), n = !1, r += "number" == typeof a || "string" == typeof a ? a : "(" + typeof a + ")" + } + r += ")"; + var i = e.callee.caller; + return n && (r = ""), [e = i ? i.arguments : [], t, r] + } + + function No(e, t) { + 24 & e && (t = t.replace(/\s+$/, ""), t += (t.length > 0 ? "\n" : "") + function (e) { + var t = tn(), r = t.lastIndexOf("_emscripten_log"), n = t.lastIndexOf("_emscripten_get_callstack"), + o = t.indexOf("\n", Math.max(r, n)) + 1; + t = t.slice(o), 32 & e && Cr("EM_LOG_DEMANGLE is deprecated; ignoring"), 8 & e && "undefined" == typeof emscripten_source_map && (Cr('Source map information is not available, emscripten_log with EM_LOG_C_STACK will be ignored. Build with "--pre-js $EMSCRIPTEN/src/emscripten-source-map.min.js" linker flag to add source map loading to code.'), e ^= 8, e |= 16); + var a = null; + if (128 & e) for (a = Uo(arguments); a[1].indexOf("_emscripten_") >= 0;) a = Uo(a[0]); + var i = t.split("\n"); + t = ""; + var s = new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"), u = new RegExp("\\s*(.*?)@(.*):(.*)(:(.*))?"), + c = new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)"); + for (var l in i) { + var d = i[l], f = "", p = "", h = 0, m = 0, A = c.exec(d); + if (A && 5 == A.length) f = A[1], p = A[2], h = A[3], m = A[4]; else { + if ((A = s.exec(d)) || (A = u.exec(d)), !(A && A.length >= 4)) { + t += d + "\n"; + continue + } + f = A[1], p = A[2], h = A[3], m = 0 | A[4] + } + var g = !1; + if (8 & e) { + var v = emscripten_source_map.originalPositionFor({line: h, column: m}); + (g = v && v.source) && (64 & e && (v.source = v.source.substring(v.source.replace(/\\/g, "/").lastIndexOf("/") + 1)), t += " at " + f + " (" + v.source + ":" + v.line + ":" + v.column + ")\n") + } + (16 & e || !g) && (64 & e && (p = p.substring(p.replace(/\\/g, "/").lastIndexOf("/") + 1)), t += (g ? " = " + f : " at " + f) + " (" + p + ":" + h + ":" + m + ")\n"), 128 & e && a[0] && (a[1] == f && a[2].length > 0 && (t = t.replace(/\s+$/, ""), t += " with values: " + a[1] + a[2] + "\n"), a = Uo(a[0])) + } + return t.replace(/\s+$/, "") + }(e)), 1 & e ? 4 & e ? console.error(t) : 2 & e ? console.warn(t) : 512 & e ? console.info(t) : 256 & e ? console.debug(t) : console.log(t) : 6 & e ? Me(t) : Be(t) + } + + function jo(e, t, r) { + No(e, Pr(function (e, t) { + var r = e, n = t; + + function o(e) { + var t; + return n = function (e, t) { + return "double" !== t && "i64" !== t || 7 & e && (e += 4), e + }(n, e), "double" === e ? (t = Xe[n >> 3], n += 8) : "i64" == e ? (t = [$e[n >> 2], $e[n + 4 >> 2]], n += 8) : (e = "i32", t = $e[n >> 2], n += 4), t + } + + for (var a, i, s, u, c = []; ;) { + var l = r; + if (0 === (a = ze[r >> 0])) break; + if (i = ze[r + 1 >> 0], 37 == a) { + var d = !1, f = !1, p = !1, h = !1, m = !1; + e:for (; ;) { + switch (i) { + case 43: + d = !0; + break; + case 45: + f = !0; + break; + case 35: + p = !0; + break; + case 48: + if (h) break e; + h = !0; + break; + case 32: + m = !0; + break; + default: + break e + } + r++, i = ze[r + 1 >> 0] + } + var A = 0; + if (42 == i) A = o("i32"), r++, i = ze[r + 1 >> 0]; else for (; i >= 48 && i <= 57;) A = 10 * A + (i - 48), r++, i = ze[r + 1 >> 0]; + var g, v = !1, E = -1; + if (46 == i) { + if (E = 0, v = !0, r++, 42 == (i = ze[r + 1 >> 0])) E = o("i32"), r++; else for (; ;) { + var y = ze[r + 1 >> 0]; + if (y < 48 || y > 57) break; + E = 10 * E + (y - 48), r++ + } + i = ze[r + 1 >> 0] + } + switch (E < 0 && (E = 6, v = !1), String.fromCharCode(i)) { + case"h": + 104 == ze[r + 2 >> 0] ? (r++, g = 1) : g = 2; + break; + case"l": + 108 == ze[r + 2 >> 0] ? (r++, g = 8) : g = 4; + break; + case"L": + case"q": + case"j": + g = 8; + break; + case"z": + case"t": + case"I": + g = 4; + break; + default: + g = null + } + switch (g && r++, i = ze[r + 1 >> 0], String.fromCharCode(i)) { + case"d": + case"i": + case"u": + case"o": + case"x": + case"X": + case"p": + var w = 100 == i || 105 == i; + s = o("i" + 8 * (g = g || 4)), 8 == g && (s = 117 == i ? (s[0] >>> 0) + 4294967296 * (s[1] >>> 0) : Lo(s[0], s[1])), g <= 4 && (s = (w ? Io : Fo)(s & Math.pow(256, g) - 1, 8 * g)); + var _ = Math.abs(s), b = ""; + if (100 == i || 105 == i) D = Io(s, 8 * g).toString(10); else if (117 == i) D = Fo(s, 8 * g).toString(10), s = Math.abs(s); else if (111 == i) D = (p ? "0" : "") + _.toString(8); else if (120 == i || 88 == i) { + if (b = p && 0 != s ? "0x" : "", s < 0) { + s = -s, D = (_ - 1).toString(16); + for (var k = [], T = 0; T < D.length; T++) k.push((15 - parseInt(D[T], 16)).toString(16)); + for (D = k.join(""); D.length < 2 * g;) D = "f" + D + } else D = _.toString(16); + 88 == i && (b = b.toUpperCase(), D = D.toUpperCase()) + } else 112 == i && (0 === _ ? D = "(nil)" : (b = "0x", D = _.toString(16))); + if (v) for (; D.length < E;) D = "0" + D; + for (s >= 0 && (d ? b = "+" + b : m && (b = " " + b)), "-" == D.charAt(0) && (b = "-" + b, D = D.substr(1)); b.length + D.length < A;) f ? D += " " : h ? D = "0" + D : b = " " + b; + (D = b + D).split("").forEach((function (e) { + c.push(e.charCodeAt(0)) + })); + break; + case"f": + case"F": + case"e": + case"E": + case"g": + case"G": + var D; + if (s = o("double"), isNaN(s)) D = "nan", h = !1; else if (isFinite(s)) { + var S = !1, C = Math.min(E, 20); + if (103 == i || 71 == i) { + S = !0, E = E || 1; + var O = parseInt(s.toExponential(C).split("e")[1], 10); + E > O && O >= -4 ? (i = (103 == i ? "f" : "F").charCodeAt(0), E -= O + 1) : (i = (103 == i ? "e" : "E").charCodeAt(0), E--), C = Math.min(E, 20) + } + 101 == i || 69 == i ? (D = s.toExponential(C), /[eE][-+]\d$/.test(D) && (D = D.slice(0, -1) + "0" + D.slice(-1))) : 102 != i && 70 != i || (D = s.toFixed(C), 0 === s && ((u = s) < 0 || 0 === u && 1 / u == -1 / 0) && (D = "-" + D)); + var P = D.split("e"); + if (S && !p) for (; P[0].length > 1 && -1 != P[0].indexOf(".") && ("0" == P[0].slice(-1) || "." == P[0].slice(-1));) P[0] = P[0].slice(0, -1); else for (p && -1 == D.indexOf(".") && (P[0] += "."); E > C++;) P[0] += "0"; + D = P[0] + (P.length > 1 ? "e" + P[1] : ""), 69 == i && (D = D.toUpperCase()), s >= 0 && (d ? D = "+" + D : m && (D = " " + D)) + } else D = (s < 0 ? "-" : "") + "inf", h = !1; + for (; D.length < A;) f ? D += " " : D = !h || "-" != D[0] && "+" != D[0] ? (h ? "0" : " ") + D : D[0] + "0" + D.slice(1); + i < 97 && (D = D.toUpperCase()), D.split("").forEach((function (e) { + c.push(e.charCodeAt(0)) + })); + break; + case"s": + var x = o("i8*"), B = x ? er(x) : "(null)".length; + if (v && (B = Math.min(B, E)), !f) for (; B < A--;) c.push(32); + if (x) for (T = 0; T < B; T++) c.push(We[x++ >> 0]); else c = c.concat(ga("(null)".substr(0, B), !0)); + if (f) for (; B < A--;) c.push(32); + break; + case"c": + for (f && c.push(o("i8")); --A > 0;) c.push(32); + f || c.push(o("i8")); + break; + case"n": + var M = o("i32*"); + $e[M >> 2] = c.length; + break; + case"%": + c.push(a); + break; + default: + for (T = l; T < r + 2; T++) c.push(ze[T >> 0]) + } + r += 2 + } else c.push(a), r += 1 + } + return c + }(t, r), 0)) + } + + function Go(e, t, r) { + We.copyWithin(e, t, t + r) + } + + function zo(e, t) { + for (var r = arguments.length - 2, n = gr(), o = r, a = Er(8 * o), i = a >> 3, s = 0; s < r; s++) { + var u = arguments[2 + s]; + Xe[i + s] = u + } + var c = hr(e, o, a, t); + return vr(n), c + } + + function Wo(e, t, r) { + Ut.length = t; + for (var n = r >> 3, o = 0; o < t; o++) Ut[o] = Xe[n + o]; + return (e < 0 ? lt[-e - 1] : Xt[e]).apply(null, Ut) + } + + function Yo(e) { + Yr("OOM") + } + + function Ho(e, t, r, n) { + var o, a, i, s = gr(), u = Er(12), c = 0; + t && (a = Rr(o = t) + 1, i = Jt(a), Mr(o, i, a), c = i), $e[u >> 2] = c, $e[u + 4 >> 2] = r, $e[u + 8 >> 2] = n, mr(0, e, 657457152, 0, c, u), vr(s) + } + + function $o(e) { + var t; + return e = (t = e) > 2 ? xr(t) : t, Gt[e] || ("undefined" != typeof document ? document.querySelector(e) : void 0) + } + + function Vo(e) { + return $o(e) + } + + function Qo(e, t, r) { + var n = Vo(e); + if (!n) return -4; + if (n.canvasSharedPtr && ($e[n.canvasSharedPtr >> 2] = t, $e[n.canvasSharedPtr + 4 >> 2] = r), !n.offscreenCanvas && n.controlTransferredOffscreen) return n.canvasSharedPtr ? (function (e, t, r, n) { + Ho(e, t = t ? xr(t) : "", r, n) + }($e[n.canvasSharedPtr + 8 >> 2], e, t, r), 1) : -4; + n.offscreenCanvas && (n = n.offscreenCanvas); + var o = !1; + if (n.GLctxObject && n.GLctxObject.GLctx) { + var a = n.GLctxObject.GLctx.getParameter(2978); + o = 0 === a[0] && 0 === a[1] && a[2] === n.width && a[3] === n.height + } + return n.width = t, n.height = r, o && n.GLctxObject.GLctx.viewport(0, 0, t, r), 0 + } + + function Xo(e, t, r) { + return Se ? zo(3, 1, e, t, r) : Qo(e, t, r) + } + + function qo(e, t, r) { + return Vo(e) ? Qo(e, t, r) : Xo(e, t, r) + } + + function Zo(e) { + } + + function Ko(e, t) { + return r = e, o = $e[(n = t >> 2) + 6], a = { + alpha: !!$e[n + 0], + depth: !!$e[n + 1], + stencil: !!$e[n + 2], + antialias: !!$e[n + 3], + premultipliedAlpha: !!$e[n + 4], + preserveDrawingBuffer: !!$e[n + 5], + powerPreference: Wt[o], + failIfMajorPerformanceCaveat: !!$e[n + 7], + majorVersion: $e[n + 8], + minorVersion: $e[n + 9], + enableExtensionsByDefault: $e[n + 10], + explicitSwapControl: $e[n + 11], + proxyContextToMainThread: $e[n + 12], + renderViaOffscreenBackBuffer: $e[n + 13] + }, (i = Vo(r)) ? a.explicitSwapControl ? 0 : zt.createContext(i, a) : 0; + var r, n, o, a, i + } + + function Jo() { + if (!Jo.strings) { + var e = { + USER: "web_user", + LOGNAME: "web_user", + PATH: "/", + PWD: "/", + HOME: "/home/web_user", + LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", + _: be || "./this.program" + }; + for (var t in Yt) e[t] = Yt[t]; + var r = []; + for (var t in e) r.push(t + "=" + e[t]); + Jo.strings = r + } + return Jo.strings + } + + function ea(e, t) { + if (Se) return zo(4, 1, e, t); + try { + var r = 0; + return Jo().forEach((function (n, o) { + var a = t + r; + $e[e + 4 * o >> 2] = a, function (e, t, r) { + for (var n = 0; n < e.length; ++n) ze[t++ >> 0] = e.charCodeAt(n); + r || (ze[t >> 0] = 0) + }(n, a), r += n.length + 1 + })), 0 + } catch (e) { + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno + } + } + + function ta(e, t) { + if (Se) return zo(5, 1, e, t); + try { + var r = Jo(); + $e[e >> 2] = r.length; + var n = 0; + return r.forEach((function (e) { + n += e.length + 1 + })), $e[t >> 2] = n, 0 + } catch (e) { + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno + } + } + + function ra(e) { + if (Se) return zo(6, 1, e); + try { + var t = Et.getStreamFromFD(e); + return vt.close(t), 0 + } catch (e) { + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno + } + } + + function na(e, t) { + if (Se) return zo(7, 1, e, t); + try { + var r = Et.getStreamFromFD(e), n = r.tty ? 2 : vt.isDir(r.mode) ? 3 : vt.isLink(r.mode) ? 7 : 4; + return ze[t >> 0] = n, 0 + } catch (e) { + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno + } + } + + function oa(e, t, r, n) { + if (Se) return zo(8, 1, e, t, r, n); + try { + var o = Et.getStreamFromFD(e), a = Et.doReadv(o, t, r); + return $e[n >> 2] = a, 0 + } catch (e) { + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno + } + } + + function aa(e, t, r, n, o) { + if (Se) return zo(9, 1, e, t, r, n, o); + try { + var a = Et.getStreamFromFD(e), i = 4294967296 * r + (t >>> 0), s = 9007199254740992; + return i <= -s || i >= s ? -61 : (vt.llseek(a, i, n), ct = [a.position >>> 0, (ut = a.position, +Math.abs(ut) >= 1 ? ut > 0 ? (0 | Math.min(+Math.floor(ut / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ut - +(~~ut >>> 0)) / 4294967296) >>> 0 : 0)], $e[o >> 2] = ct[0], $e[o + 4 >> 2] = ct[1], a.getdents && 0 === i && 0 === n && (a.getdents = null), 0) + } catch (e) { + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno + } + } + + function ia(e, t, r, n) { + if (Se) return zo(10, 1, e, t, r, n); + try { + var o = Et.getStreamFromFD(e), a = Et.doWritev(o, t, r); + return $e[n >> 2] = a, 0 + } catch (e) { + return void 0 !== vt && e instanceof vt.ErrnoError || Yr(e), e.errno + } + } + + function sa(e) { + var t = Date.now(); + return $e[e >> 2] = t / 1e3 | 0, $e[e + 4 >> 2] = t % 1e3 * 1e3 | 0, 0 + } + + function ua() { + if (Se) return zo(11, 1); + if (!ua.called) { + ua.called = !0; + var e = (new Date).getFullYear(), t = new Date(e, 0, 1), r = new Date(e, 6, 1), n = t.getTimezoneOffset(), + o = r.getTimezoneOffset(), a = Math.max(n, o); + $e[ir() >> 2] = 60 * a, $e[ar() >> 2] = Number(n != o); + var i = l(t), s = l(r), u = Gr(i), c = Gr(s); + o < n ? ($e[or() >> 2] = u, $e[or() + 4 >> 2] = c) : ($e[or() >> 2] = c, $e[or() + 4 >> 2] = u) + } + + function l(e) { + var t = e.toTimeString().match(/\(([A-Za-z ]+)\)$/); + return t ? t[1] : "GMT" + } + } + + function ca(e) { + var t = ft.threadExitHandlers.pop(); + e && t() + } + + function la(e, t) { + ft.threadExitHandlers.push((function () { + Ze.get(e)(t) + })) + } + + function da(e) { + if (Se) throw"Internal Error! spawnThread() can only ever be called from main application thread!"; + var t = ft.getNewWorker(); + if (void 0 !== t.pthread) throw"Internal error!"; + if (!e.pthread_ptr) throw"Internal error, no pthread ptr!"; + ft.runningWorkers.push(t); + for (var r = Jt(512), n = 0; n < 128; ++n) $e[r + 4 * n >> 2] = 0; + var o = e.stackBase + e.stackSize, a = ft.pthreads[e.pthread_ptr] = { + worker: t, + stackBase: e.stackBase, + stackSize: e.stackSize, + allocatedOwnStack: e.allocatedOwnStack, + threadInfoStruct: e.pthread_ptr + }, i = a.threadInfoStruct >> 2; + Atomics.store(Ve, i + 16, e.detached), Atomics.store(Ve, i + 25, r), Atomics.store(Ve, i + 10, a.threadInfoStruct), Atomics.store(Ve, i + 20, e.stackSize), Atomics.store(Ve, i + 19, o), Atomics.store(Ve, i + 26, e.stackSize), Atomics.store(Ve, i + 28, o), Atomics.store(Ve, i + 29, e.detached); + var s = nr() + 40; + Atomics.store(Ve, i + 43, s), t.pthread = a; + var u = { + cmd: "run", + start_routine: e.startRoutine, + arg: e.arg, + threadInfoStruct: e.pthread_ptr, + stackBase: e.stackBase, + stackSize: e.stackSize + }; + t.runPthread = function () { + u.time = performance.now(), t.postMessage(u, e.transferList) + }, t.loaded && (t.runPthread(), delete t.runPthread) + } + + function fa(e, t, r, n) { + if ("undefined" == typeof SharedArrayBuffer) return Me("Current environment does not support SharedArrayBuffer, pthreads are not available!"), 6; + if (!e) return Me("pthread_create called with a null thread pointer!"), 28; + var o = []; + if (Se && 0 === o.length) return pr(687865856, e, t, r, n); + var a = 0, i = 0, s = 0; + t && -1 != t ? (a = $e[t >> 2], a += 81920, i = $e[t + 8 >> 2], s = 0 !== $e[t + 12 >> 2]) : a = 2097152; + var u = 0 == i; + u ? i = wr(16, a) : Or((i -= a) > 0); + for (var c = Jt(228), l = 0; l < 57; ++l) Ve[(c >> 2) + l] = 0; + $e[e >> 2] = c, $e[c + 12 >> 2] = c; + var d = c + 152; + $e[d >> 2] = d; + var f = { + stackBase: i, + stackSize: a, + allocatedOwnStack: u, + detached: s, + startRoutine: r, + pthread_ptr: c, + arg: n, + transferList: o + }; + return Se ? (f.cmd = "spawnThread", postMessage(f, o)) : da(f), 0 + } + + function pa() { + if (Se) { + var e = sr(); + if (e) if (!Atomics.load(Ve, e + 56 >> 2)) if (2 == Atomics.load(Ve, e + 0 >> 2)) throw"Canceled!" + } + } + + function ha(e, t) { + return function (e, t, r) { + if (!e) return Me("pthread_join attempted on a null thread pointer!"), dt.ESRCH; + if (Se && sr() == e) return Me("PThread " + e + " is attempting to join to itself!"), dt.EDEADLK; + if (!Se && ur() == e) return Me("Main thread " + e + " is attempting to join to itself!"), dt.EDEADLK; + if ($e[e + 12 >> 2] !== e) return Me("pthread_join attempted on thread " + e + ", which does not point to a valid thread, or does not exist anymore!"), dt.ESRCH; + if (Atomics.load(Ve, e + 64 >> 2)) return Me("Attempted to join thread " + e + ", which was already detached!"), dt.EINVAL; + for (r && Bo(); ;) { + var n = Atomics.load(Ve, e + 0 >> 2); + if (1 == n) { + var o = Atomics.load(Ve, e + 4 >> 2); + return t && ($e[t >> 2] = o), Atomics.store(Ve, e + 64 >> 2, 1), Se ? postMessage({ + cmd: "cleanupThread", + thread: e + }) : Zr(e), 0 + } + if (!r) return dt.EBUSY; + pa(), Se || lr(), Ro(e + 0, n, Se ? 100 : 1) + } + }(e, t, !0) + } + + function ma(e) { + Le(0 | e) + } + + function Aa(e) { + if (Se) return zo(12, 1, e); + switch (e) { + case 30: + return 16384; + case 85: + return We.length / 16384; + case 132: + case 133: + case 12: + case 137: + case 138: + case 15: + case 235: + case 16: + case 17: + case 18: + case 19: + case 20: + case 149: + case 13: + case 10: + case 236: + case 153: + case 9: + case 21: + case 22: + case 159: + case 154: + case 14: + case 77: + case 78: + case 139: + case 82: + case 68: + case 67: + case 164: + case 11: + case 29: + case 47: + case 48: + case 95: + case 52: + case 51: + case 46: + return 200809; + case 27: + case 246: + case 127: + case 128: + case 23: + case 24: + case 160: + case 161: + case 181: + case 182: + case 242: + case 183: + case 184: + case 243: + case 244: + case 245: + case 165: + case 178: + case 179: + case 49: + case 50: + case 168: + case 169: + case 175: + case 170: + case 171: + case 172: + case 97: + case 76: + case 32: + case 173: + case 35: + case 80: + case 81: + case 79: + return -1; + case 176: + case 177: + case 7: + case 155: + case 8: + case 157: + case 125: + case 126: + case 92: + case 93: + case 129: + case 130: + case 131: + case 94: + case 91: + return 1; + case 74: + case 60: + case 69: + case 70: + case 4: + return 1024; + case 31: + case 42: + case 72: + return 32; + case 87: + case 26: + case 33: + return 2147483647; + case 34: + case 1: + return 47839; + case 38: + case 36: + return 99; + case 43: + case 37: + return 2048; + case 0: + return 2097152; + case 3: + return 65536; + case 28: + return 32768; + case 44: + return 32767; + case 75: + return 16384; + case 39: + return 1e3; + case 89: + return 700; + case 71: + return 256; + case 40: + return 255; + case 2: + return 100; + case 180: + return 64; + case 25: + return 20; + case 5: + return 16; + case 6: + return 6; + case 73: + return 4; + case 84: + return "object" == typeof navigator && navigator.hardwareConcurrency || 1 + } + return nn(28), -1 + } + + function ga(e, t, r) { + var n = r > 0 ? r : Rr(e) + 1, o = new Array(n), a = Br(e, o, 0, o.length); + return t && (o.length = a), o + } + + function va(e) { + this.name = "ExitStatus", this.message = "Program terminated with exit(" + e + ")", this.status = e + } + + function Ea(e) { + function t() { + kr || (kr = !0, Ee.calledRun = !0, je || (!0, Ee.noFSInit || vt.init.initialized || vt.init(), At.init(), Xr(Je), Se || (vt.ignorePermissions = !1, Xr(et)), Ee.onRuntimeInitialized && Ee.onRuntimeInitialized(), function () { + if (!Se) { + if (Ee.postRun) for ("function" == typeof Ee.postRun && (Ee.postRun = [Ee.postRun]); Ee.postRun.length;) e = Ee.postRun.shift(), rt.unshift(e); + var e; + Xr(rt) + } + }())) + } + + e = e || _e, nt > 0 || (Se ? postMessage({cmd: "loaded"}) : (!function () { + if (!Se) { + if (Ee.preRun) for ("function" == typeof Ee.preRun && (Ee.preRun = [Ee.preRun]); Ee.preRun.length;) e = Ee.preRun.shift(), Ke.unshift(e); + var e; + Xr(Ke) + } + }(), nt > 0 || (Ee.setStatus ? (Ee.setStatus("Running..."), setTimeout((function () { + setTimeout((function () { + Ee.setStatus("") + }), 1), t() + }), 1)) : t()))) + } + + function ya(e, t) { + if (!t || !Fe || 0 !== e) { + if (!t && Se) throw postMessage({cmd: "exitProcess", returnCode: e}), new va(e); + Fe || (ft.terminateAllThreads(), e, Se || !0, Ee.onExit && Ee.onExit(e), je = !0), ke(e, new va(e)) + } + } + + function wa() { + for (we in {}, ye = {}, Ee = void 0 !== Ee ? Ee : {}) Ee.hasOwnProperty(we) && (ye[we] = Ee[we]); + for (we in _e = [], be = "./this.program", ke = function (e, t) { + throw t + }, Te = !1, De = !0, !1, (Se = Ee.ENVIRONMENT_IS_PTHREAD || !1) && (Ge = Ee.buffer), Ce = "undefined" != typeof document && document.currentScript ? document.currentScript.src : void 0, De && (Ce = self.location.href), Oe = "", (Te || De) && (De ? Oe = self.location.href : "undefined" != typeof document && document.currentScript && (Oe = document.currentScript.src), Oe = 0 !== Oe.indexOf("blob:") ? Oe.substr(0, Oe.lastIndexOf("/") + 1) : "", Pe = function (e) { + var t = new XMLHttpRequest; + return t.open("GET", e, !1), t.send(null), t.responseText + }, De && (xe = function (e) { + var t = new XMLHttpRequest; + return t.open("GET", e, !1), t.responseType = "arraybuffer", t.send(null), new Uint8Array(t.response) + }), function (e, t, r) { + var n = new XMLHttpRequest; + n.open("GET", e, !0), n.responseType = "arraybuffer", n.onload = function () { + 200 == n.status || 0 == n.status && n.response ? t(n.response) : r() + }, n.onerror = r, n.send(null) + }, function (e) { + document.title = e + }), Be = Ee.print || console.log.bind(console), Me = Ee.printErr || console.warn.bind(console), ye) ye.hasOwnProperty(we) && (Ee[we] = ye[we]); + if (ye = null, Ee.arguments && (_e = Ee.arguments), Ee.thisProgram && (be = Ee.thisProgram), Ee.quit && (ke = Ee.quit), Re = 16, 0, Le = function (e) { + e + }, Atomics.load, Atomics.store, Atomics.compareExchange, Ee.wasmBinary && (Ie = Ee.wasmBinary), Fe = Ee.noExitRuntime || !0, "object" != typeof WebAssembly && Yr("no native wasm support detected"), je = !1, qe = Ee.INITIAL_MEMORY || 67108864, Se) Ue = Ee.wasmMemory, Ge = Ee.buffer; else if (Ee.wasmMemory) Ue = Ee.wasmMemory; else if (!((Ue = new WebAssembly.Memory({ + initial: qe / 65536, + maximum: qe / 65536, + shared: !0 + })).buffer instanceof SharedArrayBuffer)) throw Me("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"), Error("bad memory"); + var t; + if (Ue && (Ge = Ue.buffer), qe = Ge.byteLength, Ge = t = Ge, Ee.HEAP8 = ze = new Int8Array(t), Ee.HEAP16 = Ye = new Int16Array(t), Ee.HEAP32 = $e = new Int32Array(t), Ee.HEAPU8 = We = new Uint8Array(t), Ee.HEAPU16 = He = new Uint16Array(t), Ee.HEAPU32 = Ve = new Uint32Array(t), Ee.HEAPF32 = Qe = new Float32Array(t), Ee.HEAPF64 = Xe = new Float64Array(t), Ke = [], Je = [], et = [], tt = [], rt = [], !1, !1, Se || Je.push({ + func: function () { + Zt() + } + }), Se && !0, nt = 0, ot = null, at = null, Ee.preloadedImages = {}, Ee.preloadedAudios = {}, it = "data:application/octet-stream;base64,", Hr(st = "ff.wasm") || (st = Sr(st)), lt = { + 155132: function () { + throw"Canceled!" + }, 155395: function (e, t) { + setTimeout((function () { + fr(e, t) + }), 0) + } + }, dt = { + EPERM: 63, + ENOENT: 44, + ESRCH: 71, + EINTR: 27, + EIO: 29, + ENXIO: 60, + E2BIG: 1, + ENOEXEC: 45, + EBADF: 8, + ECHILD: 12, + EAGAIN: 6, + EWOULDBLOCK: 6, + ENOMEM: 48, + EACCES: 2, + EFAULT: 21, + ENOTBLK: 105, + EBUSY: 10, + EEXIST: 20, + EXDEV: 75, + ENODEV: 43, + ENOTDIR: 54, + EISDIR: 31, + EINVAL: 28, + ENFILE: 41, + EMFILE: 33, + ENOTTY: 59, + ETXTBSY: 74, + EFBIG: 22, + ENOSPC: 51, + ESPIPE: 70, + EROFS: 69, + EMLINK: 34, + EPIPE: 64, + EDOM: 18, + ERANGE: 68, + ENOMSG: 49, + EIDRM: 24, + ECHRNG: 106, + EL2NSYNC: 156, + EL3HLT: 107, + EL3RST: 108, + ELNRNG: 109, + EUNATCH: 110, + ENOCSI: 111, + EL2HLT: 112, + EDEADLK: 16, + ENOLCK: 46, + EBADE: 113, + EBADR: 114, + EXFULL: 115, + ENOANO: 104, + EBADRQC: 103, + EBADSLT: 102, + EDEADLOCK: 16, + EBFONT: 101, + ENOSTR: 100, + ENODATA: 116, + ETIME: 117, + ENOSR: 118, + ENONET: 119, + ENOPKG: 120, + EREMOTE: 121, + ENOLINK: 47, + EADV: 122, + ESRMNT: 123, + ECOMM: 124, + EPROTO: 65, + EMULTIHOP: 36, + EDOTDOT: 125, + EBADMSG: 9, + ENOTUNIQ: 126, + EBADFD: 127, + EREMCHG: 128, + ELIBACC: 129, + ELIBBAD: 130, + ELIBSCN: 131, + ELIBMAX: 132, + ELIBEXEC: 133, + ENOSYS: 52, + ENOTEMPTY: 55, + ENAMETOOLONG: 37, + ELOOP: 32, + EOPNOTSUPP: 138, + EPFNOSUPPORT: 139, + ECONNRESET: 15, + ENOBUFS: 42, + EAFNOSUPPORT: 5, + EPROTOTYPE: 67, + ENOTSOCK: 57, + ENOPROTOOPT: 50, + ESHUTDOWN: 140, + ECONNREFUSED: 14, + EADDRINUSE: 3, + ECONNABORTED: 13, + ENETUNREACH: 40, + ENETDOWN: 38, + ETIMEDOUT: 73, + EHOSTDOWN: 142, + EHOSTUNREACH: 23, + EINPROGRESS: 26, + EALREADY: 7, + EDESTADDRREQ: 17, + EMSGSIZE: 35, + EPROTONOSUPPORT: 66, + ESOCKTNOSUPPORT: 137, + EADDRNOTAVAIL: 4, + ENETRESET: 39, + EISCONN: 30, + ENOTCONN: 53, + ETOOMANYREFS: 141, + EUSERS: 136, + EDQUOT: 19, + ESTALE: 72, + ENOTSUP: 138, + ENOMEDIUM: 148, + EILSEQ: 25, + EOVERFLOW: 61, + ECANCELED: 11, + ENOTRECOVERABLE: 56, + EOWNERDEAD: 62, + ESTRPIPE: 135 + }, Ee._emscripten_futex_wake = qr, ft = { + unusedWorkers: [], runningWorkers: [], initMainThreadBlock: function () { + }, initRuntime: function () { + for (var e = Jt(228), t = 0; t < 57; ++t) Ve[e / 4 + t] = 0; + $e[e + 12 >> 2] = e; + var r = e + 152; + $e[r >> 2] = r; + var n = Jt(512); + for (t = 0; t < 128; ++t) Ve[n / 4 + t] = 0; + Atomics.store(Ve, e + 100 >> 2, n), Atomics.store(Ve, e + 40 >> 2, e), Ar(e, !De, 1), dr(e) + }, initWorker: function () { + }, pthreads: {}, threadExitHandlers: [], setThreadStatus: function () { + }, runExitHandlers: function () { + for (; ft.threadExitHandlers.length > 0;) ft.threadExitHandlers.pop()(); + Se && sr() && cr() + }, threadExit: function (e) { + var t = sr(); + t && (Atomics.store(Ve, t + 4 >> 2, e), Atomics.store(Ve, t + 0 >> 2, 1), Atomics.store(Ve, t + 56 >> 2, 1), Atomics.store(Ve, t + 60 >> 2, 0), ft.runExitHandlers(), qr(t + 0, 2147483647), Ar(0, 0, 0), Se && postMessage({cmd: "exit"})) + }, threadCancel: function () { + ft.runExitHandlers(); + var e = sr(); + Atomics.store(Ve, e + 4 >> 2, -1), Atomics.store(Ve, e + 0 >> 2, 1), qr(e + 0, 2147483647), Ar(0, 0, 0), postMessage({cmd: "cancelDone"}) + }, terminateAllThreads: function () { + for (var e in ft.pthreads) { + (n = ft.pthreads[e]) && n.worker && ft.returnWorkerToPool(n.worker) + } + ft.pthreads = {}; + for (var t = 0; t < ft.unusedWorkers.length; ++t) { + (r = ft.unusedWorkers[t]).terminate() + } + ft.unusedWorkers = []; + for (t = 0; t < ft.runningWorkers.length; ++t) { + var r, n = (r = ft.runningWorkers[t]).pthread; + ft.freeThreadData(n), r.terminate() + } + ft.runningWorkers = [] + }, freeThreadData: function (e) { + if (e) { + if (e.threadInfoStruct) { + var t = $e[e.threadInfoStruct + 100 >> 2]; + $e[e.threadInfoStruct + 100 >> 2] = 0, Kt(t), Kt(e.threadInfoStruct) + } + e.threadInfoStruct = 0, e.allocatedOwnStack && e.stackBase && Kt(e.stackBase), e.stackBase = 0, e.worker && (e.worker.pthread = null) + } + }, returnWorkerToPool: function (e) { + ft.runWithoutMainThreadQueuedCalls((function () { + delete ft.pthreads[e.pthread.threadInfoStruct], ft.unusedWorkers.push(e), ft.runningWorkers.splice(ft.runningWorkers.indexOf(e), 1), ft.freeThreadData(e.pthread), e.pthread = void 0 + })) + }, runWithoutMainThreadQueuedCalls: function (e) { + $e[_r >> 2] = 0; + try { + e() + } finally { + $e[_r >> 2] = 1 + } + }, receiveObjectTransfer: function (e) { + }, loadWasmModuleToWorker: function (e, t) { + e.onmessage = function (r) { + var n = r.data, o = n.cmd; + if (e.pthread && (ft.currentProxiedOperationCallerThread = e.pthread.threadInfoStruct), n.targetThread && n.targetThread != sr()) { + var a = ft.pthreads[n.targetThread]; + return a ? a.worker.postMessage(r.data, n.transferList) : console.error('Internal error! Worker sent a message "' + o + '" to target pthread ' + n.targetThread + ", but that thread no longer exists!"), void (ft.currentProxiedOperationCallerThread = void 0) + } + if ("processQueuedMainThreadWork" === o) lr(); else if ("spawnThread" === o) da(r.data); else if ("cleanupThread" === o) Zr(n.thread); else if ("killThread" === o) !function (e) { + if (Se) throw"Internal Error! killThread() can only ever be called from main application thread!"; + if (!e) throw"Internal Error! Null pthread_ptr in killThread!"; + $e[e + 12 >> 2] = 0; + var t = ft.pthreads[e]; + t.worker.terminate(), ft.freeThreadData(t), ft.runningWorkers.splice(ft.runningWorkers.indexOf(t.worker), 1), t.worker.pthread = void 0 + }(n.thread); else if ("cancelThread" === o) !function (e) { + if (Se) throw"Internal Error! cancelThread() can only ever be called from main application thread!"; + if (!e) throw"Internal Error! Null pthread_ptr in cancelThread!"; + ft.pthreads[e].worker.postMessage({cmd: "cancel"}) + }(n.thread); else if ("loaded" === o) e.loaded = !0, t && t(e), e.runPthread && (e.runPthread(), delete e.runPthread); else if ("print" === o) Be("Thread " + n.threadId + ": " + n.text); else if ("printErr" === o) Me("Thread " + n.threadId + ": " + n.text); else if ("alert" === o) alert("Thread " + n.threadId + ": " + n.text); else if ("exit" === o) { + e.pthread && Atomics.load(Ve, e.pthread.threadInfoStruct + 64 >> 2) && ft.returnWorkerToPool(e) + } else if ("exitProcess" === o) try { + ya(n.returnCode) + } catch (r) { + if (r instanceof va) return; + throw r + } else "cancelDone" === o ? ft.returnWorkerToPool(e) : "objectTransfer" === o ? ft.receiveObjectTransfer(r.data) : "setimmediate" === r.data.target ? e.postMessage(r.data) : Me("worker sent an unknown command " + o); + ft.currentProxiedOperationCallerThread = void 0 + }, e.onerror = function (e) { + Me("pthread sent an error! " + e.filename + ":" + e.lineno + ": " + e.message) + }, e.postMessage({cmd: "load", urlOrBlob: Ee.mainScriptUrlOrBlob || Ce, wasmMemory: Ue, wasmModule: Ne}) + }, allocateUnusedWorker: function () { + var e = Sr("ff.worker.js"); + ft.unusedWorkers.push(new Worker(e)) + }, getNewWorker: function () { + return 0 == ft.unusedWorkers.length && (ft.allocateUnusedWorker(), ft.loadWasmModuleToWorker(ft.unusedWorkers[0])), ft.unusedWorkers.length > 0 ? ft.unusedWorkers.pop() : null + }, busySpinWait: function (e) { + for (var t = performance.now() + e; performance.now() < t;) ; + } + }, Ee.establishStackSpace = Kr, Ee.getNoExitRuntime = Jr, Ee.invokeEntryPoint = en, pt = Se ? function () { + return performance.now() - Ee.__performance_now_clock_drift + } : function () { + return performance.now() + }, ht = { + splitPath: function (e) { + return /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1) + }, normalizeArray: function (e, t) { + for (var r = 0, n = e.length - 1; n >= 0; n--) { + var o = e[n]; + "." === o ? e.splice(n, 1) : ".." === o ? (e.splice(n, 1), r++) : r && (e.splice(n, 1), r--) + } + if (t) for (; r; r--) e.unshift(".."); + return e + }, normalize: function (e) { + var t = "/" === e.charAt(0), r = "/" === e.substr(-1); + return (e = ht.normalizeArray(e.split("/").filter((function (e) { + return !!e + })), !t).join("/")) || t || (e = "."), e && r && (e += "/"), (t ? "/" : "") + e + }, dirname: function (e) { + var t = ht.splitPath(e), r = t[0], n = t[1]; + return r || n ? (n && (n = n.substr(0, n.length - 1)), r + n) : "." + }, basename: function (e) { + if ("/" === e) return "/"; + var t = (e = (e = ht.normalize(e)).replace(/\/$/, "")).lastIndexOf("/"); + return -1 === t ? e : e.substr(t + 1) + }, extname: function (e) { + return ht.splitPath(e)[3] + }, join: function () { + var e = Array.prototype.slice.call(arguments, 0); + return ht.normalize(e.join("/")) + }, join2: function (e, t) { + return ht.normalize(e + "/" + t) + } + }, mt = { + resolve: function () { + for (var e = "", t = !1, r = arguments.length - 1; r >= -1 && !t; r--) { + var n = r >= 0 ? arguments[r] : vt.cwd(); + if ("string" != typeof n) throw new TypeError("Arguments to path.resolve must be strings"); + if (!n) return ""; + e = n + "/" + e, t = "/" === n.charAt(0) + } + return (t ? "/" : "") + (e = ht.normalizeArray(e.split("/").filter((function (e) { + return !!e + })), !t).join("/")) || "." + }, relative: function (e, t) { + function r(e) { + for (var t = 0; t < e.length && "" === e[t]; t++) ; + for (var r = e.length - 1; r >= 0 && "" === e[r]; r--) ; + return t > r ? [] : e.slice(t, r - t + 1) + } + + e = mt.resolve(e).substr(1), t = mt.resolve(t).substr(1); + for (var n = r(e.split("/")), o = r(t.split("/")), a = Math.min(n.length, o.length), i = a, s = 0; s < a; s++) if (n[s] !== o[s]) { + i = s; + break + } + var u = []; + for (s = i; s < n.length; s++) u.push(".."); + return (u = u.concat(o.slice(i))).join("/") + } + }, At = { + ttys: [], init: function () { + }, shutdown: function () { + }, register: function (e, t) { + At.ttys[e] = {input: [], output: [], ops: t}, vt.registerDevice(e, At.stream_ops) + }, stream_ops: { + open: function (e) { + var t = At.ttys[e.node.rdev]; + if (!t) throw new vt.ErrnoError(43); + e.tty = t, e.seekable = !1 + }, close: function (e) { + e.tty.ops.flush(e.tty) + }, flush: function (e) { + e.tty.ops.flush(e.tty) + }, read: function (e, t, r, n, o) { + if (!e.tty || !e.tty.ops.get_char) throw new vt.ErrnoError(60); + for (var a = 0, i = 0; i < n; i++) { + var s; + try { + s = e.tty.ops.get_char(e.tty) + } catch (e) { + throw new vt.ErrnoError(29) + } + if (void 0 === s && 0 === a) throw new vt.ErrnoError(6); + if (null == s) break; + a++, t[r + i] = s + } + return a && (e.node.timestamp = Date.now()), a + }, write: function (e, t, r, n, o) { + if (!e.tty || !e.tty.ops.put_char) throw new vt.ErrnoError(60); + try { + for (var a = 0; a < n; a++) e.tty.ops.put_char(e.tty, t[r + a]) + } catch (e) { + throw new vt.ErrnoError(29) + } + return n && (e.node.timestamp = Date.now()), a + } + }, default_tty_ops: { + get_char: function (e) { + if (!e.input.length) { + var t = null; + if ("undefined" != typeof window && "function" == typeof window.prompt ? null !== (t = window.prompt("Input: ")) && (t += "\n") : "function" == typeof readline && null !== (t = readline()) && (t += "\n"), !t) return null; + e.input = ga(t, !0) + } + return e.input.shift() + }, put_char: function (e, t) { + null === t || 10 === t ? (Be(Pr(e.output, 0)), e.output = []) : 0 != t && e.output.push(t) + }, flush: function (e) { + e.output && e.output.length > 0 && (Be(Pr(e.output, 0)), e.output = []) + } + }, default_tty1_ops: { + put_char: function (e, t) { + null === t || 10 === t ? (Me(Pr(e.output, 0)), e.output = []) : 0 != t && e.output.push(t) + }, flush: function (e) { + e.output && e.output.length > 0 && (Me(Pr(e.output, 0)), e.output = []) + } + } + }, gt = { + ops_table: null, mount: function (e) { + return gt.createNode(null, "/", 16895, 0) + }, createNode: function (e, t, r, n) { + if (vt.isBlkdev(r) || vt.isFIFO(r)) throw new vt.ErrnoError(63); + gt.ops_table || (gt.ops_table = { + dir: { + node: { + getattr: gt.node_ops.getattr, + setattr: gt.node_ops.setattr, + lookup: gt.node_ops.lookup, + mknod: gt.node_ops.mknod, + rename: gt.node_ops.rename, + unlink: gt.node_ops.unlink, + rmdir: gt.node_ops.rmdir, + readdir: gt.node_ops.readdir, + symlink: gt.node_ops.symlink + }, stream: {llseek: gt.stream_ops.llseek} + }, + file: { + node: {getattr: gt.node_ops.getattr, setattr: gt.node_ops.setattr}, + stream: { + llseek: gt.stream_ops.llseek, + read: gt.stream_ops.read, + write: gt.stream_ops.write, + allocate: gt.stream_ops.allocate, + mmap: gt.stream_ops.mmap, + msync: gt.stream_ops.msync + } + }, + link: { + node: {getattr: gt.node_ops.getattr, setattr: gt.node_ops.setattr, readlink: gt.node_ops.readlink}, + stream: {} + }, + chrdev: {node: {getattr: gt.node_ops.getattr, setattr: gt.node_ops.setattr}, stream: vt.chrdev_stream_ops} + }); + var o = vt.createNode(e, t, r, n); + return vt.isDir(o.mode) ? (o.node_ops = gt.ops_table.dir.node, o.stream_ops = gt.ops_table.dir.stream, o.contents = {}) : vt.isFile(o.mode) ? (o.node_ops = gt.ops_table.file.node, o.stream_ops = gt.ops_table.file.stream, o.usedBytes = 0, o.contents = null) : vt.isLink(o.mode) ? (o.node_ops = gt.ops_table.link.node, o.stream_ops = gt.ops_table.link.stream) : vt.isChrdev(o.mode) && (o.node_ops = gt.ops_table.chrdev.node, o.stream_ops = gt.ops_table.chrdev.stream), o.timestamp = Date.now(), e && (e.contents[t] = o, e.timestamp = o.timestamp), o + }, getFileDataAsTypedArray: function (e) { + return e.contents ? e.contents.subarray ? e.contents.subarray(0, e.usedBytes) : new Uint8Array(e.contents) : new Uint8Array(0) + }, expandFileStorage: function (e, t) { + var r = e.contents ? e.contents.length : 0; + if (!(r >= t)) { + t = Math.max(t, r * (r < 1048576 ? 2 : 1.125) >>> 0), 0 != r && (t = Math.max(t, 256)); + var n = e.contents; + e.contents = new Uint8Array(t), e.usedBytes > 0 && e.contents.set(n.subarray(0, e.usedBytes), 0) + } + }, resizeFileStorage: function (e, t) { + if (e.usedBytes != t) if (0 == t) e.contents = null, e.usedBytes = 0; else { + var r = e.contents; + e.contents = new Uint8Array(t), r && e.contents.set(r.subarray(0, Math.min(t, e.usedBytes))), e.usedBytes = t + } + }, node_ops: { + getattr: function (e) { + var t = {}; + return t.dev = vt.isChrdev(e.mode) ? e.id : 1, t.ino = e.id, t.mode = e.mode, t.nlink = 1, t.uid = 0, t.gid = 0, t.rdev = e.rdev, vt.isDir(e.mode) ? t.size = 4096 : vt.isFile(e.mode) ? t.size = e.usedBytes : vt.isLink(e.mode) ? t.size = e.link.length : t.size = 0, t.atime = new Date(e.timestamp), t.mtime = new Date(e.timestamp), t.ctime = new Date(e.timestamp), t.blksize = 4096, t.blocks = Math.ceil(t.size / t.blksize), t + }, setattr: function (e, t) { + void 0 !== t.mode && (e.mode = t.mode), void 0 !== t.timestamp && (e.timestamp = t.timestamp), void 0 !== t.size && gt.resizeFileStorage(e, t.size) + }, lookup: function (e, t) { + throw vt.genericErrors[44] + }, mknod: function (e, t, r, n) { + return gt.createNode(e, t, r, n) + }, rename: function (e, t, r) { + if (vt.isDir(e.mode)) { + var n; + try { + n = vt.lookupNode(t, r) + } catch (e) { + } + if (n) for (var o in n.contents) throw new vt.ErrnoError(55) + } + delete e.parent.contents[e.name], e.parent.timestamp = Date.now(), e.name = r, t.contents[r] = e, t.timestamp = e.parent.timestamp, e.parent = t + }, unlink: function (e, t) { + delete e.contents[t], e.timestamp = Date.now() + }, rmdir: function (e, t) { + var r = vt.lookupNode(e, t); + for (var n in r.contents) throw new vt.ErrnoError(55); + delete e.contents[t], e.timestamp = Date.now() + }, readdir: function (e) { + var t = [".", ".."]; + for (var r in e.contents) e.contents.hasOwnProperty(r) && t.push(r); + return t + }, symlink: function (e, t, r) { + var n = gt.createNode(e, t, 41471, 0); + return n.link = r, n + }, readlink: function (e) { + if (!vt.isLink(e.mode)) throw new vt.ErrnoError(28); + return e.link + } + }, stream_ops: { + read: function (e, t, r, n, o) { + var a = e.node.contents; + if (o >= e.node.usedBytes) return 0; + var i = Math.min(e.node.usedBytes - o, n); + if (i > 8 && a.subarray) t.set(a.subarray(o, o + i), r); else for (var s = 0; s < i; s++) t[r + s] = a[o + s]; + return i + }, write: function (e, t, r, n, o, a) { + if (!n) return 0; + var i = e.node; + if (i.timestamp = Date.now(), t.subarray && (!i.contents || i.contents.subarray)) { + if (a) return i.contents = t.subarray(r, r + n), i.usedBytes = n, n; + if (0 === i.usedBytes && 0 === o) return i.contents = t.slice(r, r + n), i.usedBytes = n, n; + if (o + n <= i.usedBytes) return i.contents.set(t.subarray(r, r + n), o), n + } + if (gt.expandFileStorage(i, o + n), i.contents.subarray && t.subarray) i.contents.set(t.subarray(r, r + n), o); else for (var s = 0; s < n; s++) i.contents[o + s] = t[r + s]; + return i.usedBytes = Math.max(i.usedBytes, o + n), n + }, llseek: function (e, t, r) { + var n = t; + if (1 === r ? n += e.position : 2 === r && vt.isFile(e.node.mode) && (n += e.node.usedBytes), n < 0) throw new vt.ErrnoError(28); + return n + }, allocate: function (e, t, r) { + gt.expandFileStorage(e.node, t + r), e.node.usedBytes = Math.max(e.node.usedBytes, t + r) + }, mmap: function (e, t, r, n, o, a) { + if (0 !== t) throw new vt.ErrnoError(28); + if (!vt.isFile(e.node.mode)) throw new vt.ErrnoError(43); + var i, s, u = e.node.contents; + if (2 & a || u.buffer !== Ge) { + if ((n > 0 || n + r < u.length) && (u = u.subarray ? u.subarray(n, n + r) : Array.prototype.slice.call(u, n, n + r)), s = !0, !(i = on(r))) throw new vt.ErrnoError(48); + ze.set(u, i) + } else s = !1, i = u.byteOffset; + return {ptr: i, allocated: s} + }, msync: function (e, t, r, n, o) { + if (!vt.isFile(e.node.mode)) throw new vt.ErrnoError(43); + if (2 & o) return 0; + gt.stream_ops.write(e, t, 0, n, r, !1); + return 0 + } + } + }, vt = { + root: null, + mounts: [], + devices: {}, + streams: [], + nextInode: 1, + nameTable: null, + currentPath: "/", + initialized: !1, + ignorePermissions: !0, + trackingDelegate: {}, + tracking: {openFlags: {READ: 1, WRITE: 2}}, + ErrnoError: null, + genericErrors: {}, + filesystems: null, + syncFSRequests: 0, + lookupPath: function (e, t) { + if (t = t || {}, !(e = mt.resolve(vt.cwd(), e))) return {path: "", node: null}; + var r = {follow_mount: !0, recurse_count: 0}; + for (var n in r) void 0 === t[n] && (t[n] = r[n]); + if (t.recurse_count > 8) throw new vt.ErrnoError(32); + for (var o = ht.normalizeArray(e.split("/").filter((function (e) { + return !!e + })), !1), a = vt.root, i = "/", s = 0; s < o.length; s++) { + var u = s === o.length - 1; + if (u && t.parent) break; + if (a = vt.lookupNode(a, o[s]), i = ht.join2(i, o[s]), vt.isMountpoint(a) && (!u || u && t.follow_mount) && (a = a.mounted.root), !u || t.follow) for (var c = 0; vt.isLink(a.mode);) { + var l = vt.readlink(i); + if (i = mt.resolve(ht.dirname(i), l), a = vt.lookupPath(i, {recurse_count: t.recurse_count}).node, c++ > 40) throw new vt.ErrnoError(32) + } + } + return {path: i, node: a} + }, + getPath: function (e) { + for (var t; ;) { + if (vt.isRoot(e)) { + var r = e.mount.mountpoint; + return t ? "/" !== r[r.length - 1] ? r + "/" + t : r + t : r + } + t = t ? e.name + "/" + t : e.name, e = e.parent + } + }, + hashName: function (e, t) { + for (var r = 0, n = 0; n < t.length; n++) r = (r << 5) - r + t.charCodeAt(n) | 0; + return (e + r >>> 0) % vt.nameTable.length + }, + hashAddNode: function (e) { + var t = vt.hashName(e.parent.id, e.name); + e.name_next = vt.nameTable[t], vt.nameTable[t] = e + }, + hashRemoveNode: function (e) { + var t = vt.hashName(e.parent.id, e.name); + if (vt.nameTable[t] === e) vt.nameTable[t] = e.name_next; else for (var r = vt.nameTable[t]; r;) { + if (r.name_next === e) { + r.name_next = e.name_next; + break + } + r = r.name_next + } + }, + lookupNode: function (e, t) { + var r = vt.mayLookup(e); + if (r) throw new vt.ErrnoError(r, e); + for (var n = vt.hashName(e.id, t), o = vt.nameTable[n]; o; o = o.name_next) { + var a = o.name; + if (o.parent.id === e.id && a === t) return o + } + return vt.lookup(e, t) + }, + createNode: function (e, t, r, n) { + var o = new vt.FSNode(e, t, r, n); + return vt.hashAddNode(o), o + }, + destroyNode: function (e) { + vt.hashRemoveNode(e) + }, + isRoot: function (e) { + return e === e.parent + }, + isMountpoint: function (e) { + return !!e.mounted + }, + isFile: function (e) { + return 32768 == (61440 & e) + }, + isDir: function (e) { + return 16384 == (61440 & e) + }, + isLink: function (e) { + return 40960 == (61440 & e) + }, + isChrdev: function (e) { + return 8192 == (61440 & e) + }, + isBlkdev: function (e) { + return 24576 == (61440 & e) + }, + isFIFO: function (e) { + return 4096 == (61440 & e) + }, + isSocket: function (e) { + return 49152 == (49152 & e) + }, + flagModes: {r: 0, "r+": 2, w: 577, "w+": 578, a: 1089, "a+": 1090}, + modeStringToFlags: function (e) { + var t = vt.flagModes[e]; + if (void 0 === t) throw new Error("Unknown file open mode: " + e); + return t + }, + flagsToPermissionString: function (e) { + var t = ["r", "w", "rw"][3 & e]; + return 512 & e && (t += "w"), t + }, + nodePermissions: function (e, t) { + return vt.ignorePermissions || (-1 === t.indexOf("r") || 292 & e.mode) && (-1 === t.indexOf("w") || 146 & e.mode) && (-1 === t.indexOf("x") || 73 & e.mode) ? 0 : 2 + }, + mayLookup: function (e) { + var t = vt.nodePermissions(e, "x"); + return t || (e.node_ops.lookup ? 0 : 2) + }, + mayCreate: function (e, t) { + try { + vt.lookupNode(e, t); + return 20 + } catch (e) { + } + return vt.nodePermissions(e, "wx") + }, + mayDelete: function (e, t, r) { + var n; + try { + n = vt.lookupNode(e, t) + } catch (e) { + return e.errno + } + var o = vt.nodePermissions(e, "wx"); + if (o) return o; + if (r) { + if (!vt.isDir(n.mode)) return 54; + if (vt.isRoot(n) || vt.getPath(n) === vt.cwd()) return 10 + } else if (vt.isDir(n.mode)) return 31; + return 0 + }, + mayOpen: function (e, t) { + return e ? vt.isLink(e.mode) ? 32 : vt.isDir(e.mode) && ("r" !== vt.flagsToPermissionString(t) || 512 & t) ? 31 : vt.nodePermissions(e, vt.flagsToPermissionString(t)) : 44 + }, + MAX_OPEN_FDS: 4096, + nextfd: function (e, t) { + e = e || 0, t = t || vt.MAX_OPEN_FDS; + for (var r = e; r <= t; r++) if (!vt.streams[r]) return r; + throw new vt.ErrnoError(33) + }, + getStream: function (e) { + return vt.streams[e] + }, + createStream: function (e, t, r) { + vt.FSStream || (vt.FSStream = function () { + }, vt.FSStream.prototype = { + object: { + get: function () { + return this.node + }, set: function (e) { + this.node = e + } + }, isRead: { + get: function () { + return 1 != (2097155 & this.flags) + } + }, isWrite: { + get: function () { + return 0 != (2097155 & this.flags) + } + }, isAppend: { + get: function () { + return 1024 & this.flags + } + } + }); + var n = new vt.FSStream; + for (var o in e) n[o] = e[o]; + e = n; + var a = vt.nextfd(t, r); + return e.fd = a, vt.streams[a] = e, e + }, + closeStream: function (e) { + vt.streams[e] = null + }, + chrdev_stream_ops: { + open: function (e) { + var t = vt.getDevice(e.node.rdev); + e.stream_ops = t.stream_ops, e.stream_ops.open && e.stream_ops.open(e) + }, llseek: function () { + throw new vt.ErrnoError(70) + } + }, + major: function (e) { + return e >> 8 + }, + minor: function (e) { + return 255 & e + }, + makedev: function (e, t) { + return e << 8 | t + }, + registerDevice: function (e, t) { + vt.devices[e] = {stream_ops: t} + }, + getDevice: function (e) { + return vt.devices[e] + }, + getMounts: function (e) { + for (var t = [], r = [e]; r.length;) { + var n = r.pop(); + t.push(n), r.push.apply(r, n.mounts) + } + return t + }, + syncfs: function (e, t) { + "function" == typeof e && (t = e, e = !1), vt.syncFSRequests++, vt.syncFSRequests > 1 && Me("warning: " + vt.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work"); + var r = vt.getMounts(vt.root.mount), n = 0; + + function o(e) { + return vt.syncFSRequests--, t(e) + } + + function a(e) { + if (e) return a.errored ? void 0 : (a.errored = !0, o(e)); + ++n >= r.length && o(null) + } + + r.forEach((function (t) { + if (!t.type.syncfs) return a(null); + t.type.syncfs(t, e, a) + })) + }, + mount: function (e, t, r) { + var n, o = "/" === r, a = !r; + if (o && vt.root) throw new vt.ErrnoError(10); + if (!o && !a) { + var i = vt.lookupPath(r, {follow_mount: !1}); + if (r = i.path, n = i.node, vt.isMountpoint(n)) throw new vt.ErrnoError(10); + if (!vt.isDir(n.mode)) throw new vt.ErrnoError(54) + } + var s = {type: e, opts: t, mountpoint: r, mounts: []}, u = e.mount(s); + return u.mount = s, s.root = u, o ? vt.root = u : n && (n.mounted = s, n.mount && n.mount.mounts.push(s)), u + }, + unmount: function (e) { + var t = vt.lookupPath(e, {follow_mount: !1}); + if (!vt.isMountpoint(t.node)) throw new vt.ErrnoError(28); + var r = t.node, n = r.mounted, o = vt.getMounts(n); + Object.keys(vt.nameTable).forEach((function (e) { + for (var t = vt.nameTable[e]; t;) { + var r = t.name_next; + -1 !== o.indexOf(t.mount) && vt.destroyNode(t), t = r + } + })), r.mounted = null; + var a = r.mount.mounts.indexOf(n); + r.mount.mounts.splice(a, 1) + }, + lookup: function (e, t) { + return e.node_ops.lookup(e, t) + }, + mknod: function (e, t, r) { + var n = vt.lookupPath(e, {parent: !0}).node, o = ht.basename(e); + if (!o || "." === o || ".." === o) throw new vt.ErrnoError(28); + var a = vt.mayCreate(n, o); + if (a) throw new vt.ErrnoError(a); + if (!n.node_ops.mknod) throw new vt.ErrnoError(63); + return n.node_ops.mknod(n, o, t, r) + }, + create: function (e, t) { + return t = void 0 !== t ? t : 438, t &= 4095, t |= 32768, vt.mknod(e, t, 0) + }, + mkdir: function (e, t) { + return t = void 0 !== t ? t : 511, t &= 1023, t |= 16384, vt.mknod(e, t, 0) + }, + mkdirTree: function (e, t) { + for (var r = e.split("/"), n = "", o = 0; o < r.length; ++o) if (r[o]) { + n += "/" + r[o]; + try { + vt.mkdir(n, t) + } catch (e) { + if (20 != e.errno) throw e + } + } + }, + mkdev: function (e, t, r) { + return void 0 === r && (r = t, t = 438), t |= 8192, vt.mknod(e, t, r) + }, + symlink: function (e, t) { + if (!mt.resolve(e)) throw new vt.ErrnoError(44); + var r = vt.lookupPath(t, {parent: !0}).node; + if (!r) throw new vt.ErrnoError(44); + var n = ht.basename(t), o = vt.mayCreate(r, n); + if (o) throw new vt.ErrnoError(o); + if (!r.node_ops.symlink) throw new vt.ErrnoError(63); + return r.node_ops.symlink(r, n, e) + }, + rename: function (e, t) { + var r, n, o = ht.dirname(e), a = ht.dirname(t), i = ht.basename(e), s = ht.basename(t); + if (r = vt.lookupPath(e, {parent: !0}).node, n = vt.lookupPath(t, {parent: !0}).node, !r || !n) throw new vt.ErrnoError(44); + if (r.mount !== n.mount) throw new vt.ErrnoError(75); + var u, c = vt.lookupNode(r, i), l = mt.relative(e, a); + if ("." !== l.charAt(0)) throw new vt.ErrnoError(28); + if ("." !== (l = mt.relative(t, o)).charAt(0)) throw new vt.ErrnoError(55); + try { + u = vt.lookupNode(n, s) + } catch (e) { + } + if (c !== u) { + var d = vt.isDir(c.mode), f = vt.mayDelete(r, i, d); + if (f) throw new vt.ErrnoError(f); + if (f = u ? vt.mayDelete(n, s, d) : vt.mayCreate(n, s)) throw new vt.ErrnoError(f); + if (!r.node_ops.rename) throw new vt.ErrnoError(63); + if (vt.isMountpoint(c) || u && vt.isMountpoint(u)) throw new vt.ErrnoError(10); + if (n !== r && (f = vt.nodePermissions(r, "w"))) throw new vt.ErrnoError(f); + try { + vt.trackingDelegate.willMovePath && vt.trackingDelegate.willMovePath(e, t) + } catch (r) { + Me("FS.trackingDelegate['willMovePath']('" + e + "', '" + t + "') threw an exception: " + r.message) + } + vt.hashRemoveNode(c); + try { + r.node_ops.rename(c, n, s) + } catch (e) { + throw e + } finally { + vt.hashAddNode(c) + } + try { + vt.trackingDelegate.onMovePath && vt.trackingDelegate.onMovePath(e, t) + } catch (r) { + Me("FS.trackingDelegate['onMovePath']('" + e + "', '" + t + "') threw an exception: " + r.message) + } + } + }, + rmdir: function (e) { + var t = vt.lookupPath(e, {parent: !0}).node, r = ht.basename(e), n = vt.lookupNode(t, r), + o = vt.mayDelete(t, r, !0); + if (o) throw new vt.ErrnoError(o); + if (!t.node_ops.rmdir) throw new vt.ErrnoError(63); + if (vt.isMountpoint(n)) throw new vt.ErrnoError(10); + try { + vt.trackingDelegate.willDeletePath && vt.trackingDelegate.willDeletePath(e) + } catch (t) { + Me("FS.trackingDelegate['willDeletePath']('" + e + "') threw an exception: " + t.message) + } + t.node_ops.rmdir(t, r), vt.destroyNode(n); + try { + vt.trackingDelegate.onDeletePath && vt.trackingDelegate.onDeletePath(e) + } catch (t) { + Me("FS.trackingDelegate['onDeletePath']('" + e + "') threw an exception: " + t.message) + } + }, + readdir: function (e) { + var t = vt.lookupPath(e, {follow: !0}).node; + if (!t.node_ops.readdir) throw new vt.ErrnoError(54); + return t.node_ops.readdir(t) + }, + unlink: function (e) { + var t = vt.lookupPath(e, {parent: !0}).node, r = ht.basename(e), n = vt.lookupNode(t, r), + o = vt.mayDelete(t, r, !1); + if (o) throw new vt.ErrnoError(o); + if (!t.node_ops.unlink) throw new vt.ErrnoError(63); + if (vt.isMountpoint(n)) throw new vt.ErrnoError(10); + try { + vt.trackingDelegate.willDeletePath && vt.trackingDelegate.willDeletePath(e) + } catch (t) { + Me("FS.trackingDelegate['willDeletePath']('" + e + "') threw an exception: " + t.message) + } + t.node_ops.unlink(t, r), vt.destroyNode(n); + try { + vt.trackingDelegate.onDeletePath && vt.trackingDelegate.onDeletePath(e) + } catch (t) { + Me("FS.trackingDelegate['onDeletePath']('" + e + "') threw an exception: " + t.message) + } + }, + readlink: function (e) { + var t = vt.lookupPath(e).node; + if (!t) throw new vt.ErrnoError(44); + if (!t.node_ops.readlink) throw new vt.ErrnoError(28); + return mt.resolve(vt.getPath(t.parent), t.node_ops.readlink(t)) + }, + stat: function (e, t) { + var r = vt.lookupPath(e, {follow: !t}).node; + if (!r) throw new vt.ErrnoError(44); + if (!r.node_ops.getattr) throw new vt.ErrnoError(63); + return r.node_ops.getattr(r) + }, + lstat: function (e) { + return vt.stat(e, !0) + }, + chmod: function (e, t, r) { + var n; + "string" == typeof e ? n = vt.lookupPath(e, {follow: !r}).node : n = e; + if (!n.node_ops.setattr) throw new vt.ErrnoError(63); + n.node_ops.setattr(n, {mode: 4095 & t | -4096 & n.mode, timestamp: Date.now()}) + }, + lchmod: function (e, t) { + vt.chmod(e, t, !0) + }, + fchmod: function (e, t) { + var r = vt.getStream(e); + if (!r) throw new vt.ErrnoError(8); + vt.chmod(r.node, t) + }, + chown: function (e, t, r, n) { + var o; + "string" == typeof e ? o = vt.lookupPath(e, {follow: !n}).node : o = e; + if (!o.node_ops.setattr) throw new vt.ErrnoError(63); + o.node_ops.setattr(o, {timestamp: Date.now()}) + }, + lchown: function (e, t, r) { + vt.chown(e, t, r, !0) + }, + fchown: function (e, t, r) { + var n = vt.getStream(e); + if (!n) throw new vt.ErrnoError(8); + vt.chown(n.node, t, r) + }, + truncate: function (e, t) { + if (t < 0) throw new vt.ErrnoError(28); + var r; + "string" == typeof e ? r = vt.lookupPath(e, {follow: !0}).node : r = e; + if (!r.node_ops.setattr) throw new vt.ErrnoError(63); + if (vt.isDir(r.mode)) throw new vt.ErrnoError(31); + if (!vt.isFile(r.mode)) throw new vt.ErrnoError(28); + var n = vt.nodePermissions(r, "w"); + if (n) throw new vt.ErrnoError(n); + r.node_ops.setattr(r, {size: t, timestamp: Date.now()}) + }, + ftruncate: function (e, t) { + var r = vt.getStream(e); + if (!r) throw new vt.ErrnoError(8); + if (0 == (2097155 & r.flags)) throw new vt.ErrnoError(28); + vt.truncate(r.node, t) + }, + utime: function (e, t, r) { + var n = vt.lookupPath(e, {follow: !0}).node; + n.node_ops.setattr(n, {timestamp: Math.max(t, r)}) + }, + open: function (e, t, r, n, o) { + if ("" === e) throw new vt.ErrnoError(44); + var a; + if (r = void 0 === r ? 438 : r, r = 64 & (t = "string" == typeof t ? vt.modeStringToFlags(t) : t) ? 4095 & r | 32768 : 0, "object" == typeof e) a = e; else { + e = ht.normalize(e); + try { + a = vt.lookupPath(e, {follow: !(131072 & t)}).node + } catch (e) { + } + } + var i = !1; + if (64 & t) if (a) { + if (128 & t) throw new vt.ErrnoError(20) + } else a = vt.mknod(e, r, 0), i = !0; + if (!a) throw new vt.ErrnoError(44); + if (vt.isChrdev(a.mode) && (t &= -513), 65536 & t && !vt.isDir(a.mode)) throw new vt.ErrnoError(54); + if (!i) { + var s = vt.mayOpen(a, t); + if (s) throw new vt.ErrnoError(s) + } + 512 & t && vt.truncate(a, 0), t &= -131713; + var u = vt.createStream({ + node: a, + path: vt.getPath(a), + flags: t, + seekable: !0, + position: 0, + stream_ops: a.stream_ops, + ungotten: [], + error: !1 + }, n, o); + u.stream_ops.open && u.stream_ops.open(u), !Ee.logReadFiles || 1 & t || (vt.readFiles || (vt.readFiles = {}), e in vt.readFiles || (vt.readFiles[e] = 1, Me("FS.trackingDelegate error on read file: " + e))); + try { + if (vt.trackingDelegate.onOpenFile) { + var c = 0; + 1 != (2097155 & t) && (c |= vt.tracking.openFlags.READ), 0 != (2097155 & t) && (c |= vt.tracking.openFlags.WRITE), vt.trackingDelegate.onOpenFile(e, c) + } + } catch (t) { + Me("FS.trackingDelegate['onOpenFile']('" + e + "', flags) threw an exception: " + t.message) + } + return u + }, + close: function (e) { + if (vt.isClosed(e)) throw new vt.ErrnoError(8); + e.getdents && (e.getdents = null); + try { + e.stream_ops.close && e.stream_ops.close(e) + } catch (e) { + throw e + } finally { + vt.closeStream(e.fd) + } + e.fd = null + }, + isClosed: function (e) { + return null === e.fd + }, + llseek: function (e, t, r) { + if (vt.isClosed(e)) throw new vt.ErrnoError(8); + if (!e.seekable || !e.stream_ops.llseek) throw new vt.ErrnoError(70); + if (0 != r && 1 != r && 2 != r) throw new vt.ErrnoError(28); + return e.position = e.stream_ops.llseek(e, t, r), e.ungotten = [], e.position + }, + read: function (e, t, r, n, o) { + if (n < 0 || o < 0) throw new vt.ErrnoError(28); + if (vt.isClosed(e)) throw new vt.ErrnoError(8); + if (1 == (2097155 & e.flags)) throw new vt.ErrnoError(8); + if (vt.isDir(e.node.mode)) throw new vt.ErrnoError(31); + if (!e.stream_ops.read) throw new vt.ErrnoError(28); + var a = void 0 !== o; + if (a) { + if (!e.seekable) throw new vt.ErrnoError(70) + } else o = e.position; + var i = e.stream_ops.read(e, t, r, n, o); + return a || (e.position += i), i + }, + write: function (e, t, r, n, o, a) { + if (n < 0 || o < 0) throw new vt.ErrnoError(28); + if (vt.isClosed(e)) throw new vt.ErrnoError(8); + if (0 == (2097155 & e.flags)) throw new vt.ErrnoError(8); + if (vt.isDir(e.node.mode)) throw new vt.ErrnoError(31); + if (!e.stream_ops.write) throw new vt.ErrnoError(28); + e.seekable && 1024 & e.flags && vt.llseek(e, 0, 2); + var i = void 0 !== o; + if (i) { + if (!e.seekable) throw new vt.ErrnoError(70) + } else o = e.position; + var s = e.stream_ops.write(e, t, r, n, o, a); + i || (e.position += s); + try { + e.path && vt.trackingDelegate.onWriteToFile && vt.trackingDelegate.onWriteToFile(e.path) + } catch (t) { + Me("FS.trackingDelegate['onWriteToFile']('" + e.path + "') threw an exception: " + t.message) + } + return s + }, + allocate: function (e, t, r) { + if (vt.isClosed(e)) throw new vt.ErrnoError(8); + if (t < 0 || r <= 0) throw new vt.ErrnoError(28); + if (0 == (2097155 & e.flags)) throw new vt.ErrnoError(8); + if (!vt.isFile(e.node.mode) && !vt.isDir(e.node.mode)) throw new vt.ErrnoError(43); + if (!e.stream_ops.allocate) throw new vt.ErrnoError(138); + e.stream_ops.allocate(e, t, r) + }, + mmap: function (e, t, r, n, o, a) { + if (0 != (2 & o) && 0 == (2 & a) && 2 != (2097155 & e.flags)) throw new vt.ErrnoError(2); + if (1 == (2097155 & e.flags)) throw new vt.ErrnoError(2); + if (!e.stream_ops.mmap) throw new vt.ErrnoError(43); + return e.stream_ops.mmap(e, t, r, n, o, a) + }, + msync: function (e, t, r, n, o) { + return e && e.stream_ops.msync ? e.stream_ops.msync(e, t, r, n, o) : 0 + }, + munmap: function (e) { + return 0 + }, + ioctl: function (e, t, r) { + if (!e.stream_ops.ioctl) throw new vt.ErrnoError(59); + return e.stream_ops.ioctl(e, t, r) + }, + readFile: function (e, t) { + if ((t = t || {}).flags = t.flags || 0, t.encoding = t.encoding || "binary", "utf8" !== t.encoding && "binary" !== t.encoding) throw new Error('Invalid encoding type "' + t.encoding + '"'); + var r, n = vt.open(e, t.flags), o = vt.stat(e).size, a = new Uint8Array(o); + return vt.read(n, a, 0, o, 0), "utf8" === t.encoding ? r = Pr(a, 0) : "binary" === t.encoding && (r = a), vt.close(n), r + }, + writeFile: function (e, t, r) { + (r = r || {}).flags = r.flags || 577; + var n = vt.open(e, r.flags, r.mode); + if ("string" == typeof t) { + var o = new Uint8Array(Rr(t) + 1), a = Br(t, o, 0, o.length); + vt.write(n, o, 0, a, void 0, r.canOwn) + } else { + if (!ArrayBuffer.isView(t)) throw new Error("Unsupported data type"); + vt.write(n, t, 0, t.byteLength, void 0, r.canOwn) + } + vt.close(n) + }, + cwd: function () { + return vt.currentPath + }, + chdir: function (e) { + var t = vt.lookupPath(e, {follow: !0}); + if (null === t.node) throw new vt.ErrnoError(44); + if (!vt.isDir(t.node.mode)) throw new vt.ErrnoError(54); + var r = vt.nodePermissions(t.node, "x"); + if (r) throw new vt.ErrnoError(r); + vt.currentPath = t.path + }, + createDefaultDirectories: function () { + vt.mkdir("/tmp"), vt.mkdir("/home"), vt.mkdir("/home/web_user") + }, + createDefaultDevices: function () { + vt.mkdir("/dev"), vt.registerDevice(vt.makedev(1, 3), { + read: function () { + return 0 + }, write: function (e, t, r, n, o) { + return n + } + }), vt.mkdev("/dev/null", vt.makedev(1, 3)), At.register(vt.makedev(5, 0), At.default_tty_ops), At.register(vt.makedev(6, 0), At.default_tty1_ops), vt.mkdev("/dev/tty", vt.makedev(5, 0)), vt.mkdev("/dev/tty1", vt.makedev(6, 0)); + var e = function () { + if ("object" == typeof crypto && "function" == typeof crypto.getRandomValues) { + var e = new Uint8Array(1); + return function () { + return crypto.getRandomValues(e), e[0] + } + } + return function () { + Yr("randomDevice") + } + }(); + vt.createDevice("/dev", "random", e), vt.createDevice("/dev", "urandom", e), vt.mkdir("/dev/shm"), vt.mkdir("/dev/shm/tmp") + }, + createSpecialDirectories: function () { + vt.mkdir("/proc"); + var e = vt.mkdir("/proc/self"); + vt.mkdir("/proc/self/fd"), vt.mount({ + mount: function () { + var t = vt.createNode(e, "fd", 16895, 73); + return t.node_ops = { + lookup: function (e, t) { + var r = +t, n = vt.getStream(r); + if (!n) throw new vt.ErrnoError(8); + var o = { + parent: null, mount: {mountpoint: "fake"}, node_ops: { + readlink: function () { + return n.path + } + } + }; + return o.parent = o, o + } + }, t + } + }, {}, "/proc/self/fd") + }, + createStandardStreams: function () { + Ee.stdin ? vt.createDevice("/dev", "stdin", Ee.stdin) : vt.symlink("/dev/tty", "/dev/stdin"), Ee.stdout ? vt.createDevice("/dev", "stdout", null, Ee.stdout) : vt.symlink("/dev/tty", "/dev/stdout"), Ee.stderr ? vt.createDevice("/dev", "stderr", null, Ee.stderr) : vt.symlink("/dev/tty1", "/dev/stderr"); + vt.open("/dev/stdin", 0), vt.open("/dev/stdout", 1), vt.open("/dev/stderr", 1) + }, + ensureErrnoError: function () { + vt.ErrnoError || (vt.ErrnoError = function (e, t) { + this.node = t, this.setErrno = function (e) { + this.errno = e + }, this.setErrno(e), this.message = "FS error" + }, vt.ErrnoError.prototype = new Error, vt.ErrnoError.prototype.constructor = vt.ErrnoError, [44].forEach((function (e) { + vt.genericErrors[e] = new vt.ErrnoError(e), vt.genericErrors[e].stack = "" + }))) + }, + staticInit: function () { + vt.ensureErrnoError(), vt.nameTable = new Array(4096), vt.mount(gt, {}, "/"), vt.createDefaultDirectories(), vt.createDefaultDevices(), vt.createSpecialDirectories(), vt.filesystems = {MEMFS: gt} + }, + init: function (e, t, r) { + vt.init.initialized = !0, vt.ensureErrnoError(), Ee.stdin = e || Ee.stdin, Ee.stdout = t || Ee.stdout, Ee.stderr = r || Ee.stderr, vt.createStandardStreams() + }, + quit: function () { + vt.init.initialized = !1; + var e = Ee._fflush; + e && e(0); + for (var t = 0; t < vt.streams.length; t++) { + var r = vt.streams[t]; + r && vt.close(r) + } + }, + getMode: function (e, t) { + var r = 0; + return e && (r |= 365), t && (r |= 146), r + }, + findObject: function (e, t) { + var r = vt.analyzePath(e, t); + return r.exists ? r.object : null + }, + analyzePath: function (e, t) { + try { + e = (n = vt.lookupPath(e, {follow: !t})).path + } catch (e) { + } + var r = { + isRoot: !1, + exists: !1, + error: 0, + name: null, + path: null, + object: null, + parentExists: !1, + parentPath: null, + parentObject: null + }; + try { + var n = vt.lookupPath(e, {parent: !0}); + r.parentExists = !0, r.parentPath = n.path, r.parentObject = n.node, r.name = ht.basename(e), n = vt.lookupPath(e, {follow: !t}), r.exists = !0, r.path = n.path, r.object = n.node, r.name = n.node.name, r.isRoot = "/" === n.path + } catch (e) { + r.error = e.errno + } + return r + }, + createPath: function (e, t, r, n) { + e = "string" == typeof e ? e : vt.getPath(e); + for (var o = t.split("/").reverse(); o.length;) { + var a = o.pop(); + if (a) { + var i = ht.join2(e, a); + try { + vt.mkdir(i) + } catch (e) { + } + e = i + } + } + return i + }, + createFile: function (e, t, r, n, o) { + var a = ht.join2("string" == typeof e ? e : vt.getPath(e), t), i = vt.getMode(n, o); + return vt.create(a, i) + }, + createDataFile: function (e, t, r, n, o, a) { + var i = t ? ht.join2("string" == typeof e ? e : vt.getPath(e), t) : e, s = vt.getMode(n, o), + u = vt.create(i, s); + if (r) { + if ("string" == typeof r) { + for (var c = new Array(r.length), l = 0, d = r.length; l < d; ++l) c[l] = r.charCodeAt(l); + r = c + } + vt.chmod(u, 146 | s); + var f = vt.open(u, 577); + vt.write(f, r, 0, r.length, 0, a), vt.close(f), vt.chmod(u, s) + } + return u + }, + createDevice: function (e, t, r, n) { + var o = ht.join2("string" == typeof e ? e : vt.getPath(e), t), a = vt.getMode(!!r, !!n); + vt.createDevice.major || (vt.createDevice.major = 64); + var i = vt.makedev(vt.createDevice.major++, 0); + return vt.registerDevice(i, { + open: function (e) { + e.seekable = !1 + }, close: function (e) { + n && n.buffer && n.buffer.length && n(10) + }, read: function (e, t, n, o, a) { + for (var i = 0, s = 0; s < o; s++) { + var u; + try { + u = r() + } catch (e) { + throw new vt.ErrnoError(29) + } + if (void 0 === u && 0 === i) throw new vt.ErrnoError(6); + if (null == u) break; + i++, t[n + s] = u + } + return i && (e.node.timestamp = Date.now()), i + }, write: function (e, t, r, o, a) { + for (var i = 0; i < o; i++) try { + n(t[r + i]) + } catch (e) { + throw new vt.ErrnoError(29) + } + return o && (e.node.timestamp = Date.now()), i + } + }), vt.mkdev(o, a, i) + }, + forceLoadFile: function (e) { + if (e.isDevice || e.isFolder || e.link || e.contents) return !0; + if ("undefined" != typeof XMLHttpRequest) throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + if (!Pe) throw new Error("Cannot load without read() or XMLHttpRequest."); + try { + e.contents = ga(Pe(e.url), !0), e.usedBytes = e.contents.length + } catch (e) { + throw new vt.ErrnoError(29) + } + }, + createLazyFile: function (e, t, r, n, o) { + function a() { + this.lengthKnown = !1, this.chunks = [] + } + + if (a.prototype.get = function (e) { + if (!(e > this.length - 1 || e < 0)) { + var t = e % this.chunkSize, r = e / this.chunkSize | 0; + return this.getter(r)[t] + } + }, a.prototype.setDataGetter = function (e) { + this.getter = e + }, a.prototype.cacheLength = function () { + var e = new XMLHttpRequest; + if (e.open("HEAD", r, !1), e.send(null), !(e.status >= 200 && e.status < 300 || 304 === e.status)) throw new Error("Couldn't load " + r + ". Status: " + e.status); + var t, n = Number(e.getResponseHeader("Content-length")), + o = (t = e.getResponseHeader("Accept-Ranges")) && "bytes" === t, + a = (t = e.getResponseHeader("Content-Encoding")) && "gzip" === t, i = 1048576; + o || (i = n); + var s = this; + s.setDataGetter((function (e) { + var t = e * i, o = (e + 1) * i - 1; + if (o = Math.min(o, n - 1), void 0 === s.chunks[e] && (s.chunks[e] = function (e, t) { + if (e > t) throw new Error("invalid range (" + e + ", " + t + ") or no bytes requested!"); + if (t > n - 1) throw new Error("only " + n + " bytes available! programmer error!"); + var o = new XMLHttpRequest; + if (o.open("GET", r, !1), n !== i && o.setRequestHeader("Range", "bytes=" + e + "-" + t), "undefined" != typeof Uint8Array && (o.responseType = "arraybuffer"), o.overrideMimeType && o.overrideMimeType("text/plain; charset=x-user-defined"), o.send(null), !(o.status >= 200 && o.status < 300 || 304 === o.status)) throw new Error("Couldn't load " + r + ". Status: " + o.status); + return void 0 !== o.response ? new Uint8Array(o.response || []) : ga(o.responseText || "", !0) + }(t, o)), void 0 === s.chunks[e]) throw new Error("doXHR failed!"); + return s.chunks[e] + })), !a && n || (i = n = 1, n = this.getter(0).length, i = n, Be("LazyFiles on gzip forces download of the whole file when length is accessed")), this._length = n, this._chunkSize = i, this.lengthKnown = !0 + }, "undefined" != typeof XMLHttpRequest) { + if (!De) throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"; + var i = new a; + Object.defineProperties(i, { + length: { + get: function () { + return this.lengthKnown || this.cacheLength(), this._length + } + }, chunkSize: { + get: function () { + return this.lengthKnown || this.cacheLength(), this._chunkSize + } + } + }); + var s = {isDevice: !1, contents: i} + } else s = {isDevice: !1, url: r}; + var u = vt.createFile(e, t, s, n, o); + s.contents ? u.contents = s.contents : s.url && (u.contents = null, u.url = s.url), Object.defineProperties(u, { + usedBytes: { + get: function () { + return this.contents.length + } + } + }); + var c = {}; + return Object.keys(u.stream_ops).forEach((function (e) { + var t = u.stream_ops[e]; + c[e] = function () { + return vt.forceLoadFile(u), t.apply(null, arguments) + } + })), c.read = function (e, t, r, n, o) { + vt.forceLoadFile(u); + var a = e.node.contents; + if (o >= a.length) return 0; + var i = Math.min(a.length - o, n); + if (a.slice) for (var s = 0; s < i; s++) t[r + s] = a[o + s]; else for (s = 0; s < i; s++) t[r + s] = a.get(o + s); + return i + }, u.stream_ops = c, u + }, + createPreloadedFile: function (e, t, r, n, o, a, i, s, u, c) { + Browser.init(); + var l = t ? mt.resolve(ht.join2(e, t)) : e; + + function d(r) { + function d(r) { + c && c(), s || vt.createDataFile(e, t, r, n, o, u), a && a(), Wr() + } + + var f = !1; + Ee.preloadPlugins.forEach((function (e) { + f || e.canHandle(l) && (e.handle(r, l, d, (function () { + i && i(), Wr() + })), f = !0) + })), f || d(r) + } + + zr(), "string" == typeof r ? Browser.asyncLoad(r, (function (e) { + d(e) + }), i) : d(r) + }, + indexedDB: function () { + return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB + }, + DB_NAME: function () { + return "EM_FS_" + window.location.pathname + }, + DB_VERSION: 20, + DB_STORE_NAME: "FILE_DATA", + saveFilesToDB: function (e, t, r) { + t = t || function () { + }, r = r || function () { + }; + var n = vt.indexedDB(); + try { + var o = n.open(vt.DB_NAME(), vt.DB_VERSION) + } catch (e) { + return r(e) + } + o.onupgradeneeded = function () { + Be("creating db"), o.result.createObjectStore(vt.DB_STORE_NAME) + }, o.onsuccess = function () { + var n = o.result.transaction([vt.DB_STORE_NAME], "readwrite"), a = n.objectStore(vt.DB_STORE_NAME), i = 0, + s = 0, u = e.length; + + function c() { + 0 == s ? t() : r() + } + + e.forEach((function (e) { + var t = a.put(vt.analyzePath(e).object.contents, e); + t.onsuccess = function () { + ++i + s == u && c() + }, t.onerror = function () { + s++, i + s == u && c() + } + })), n.onerror = r + }, o.onerror = r + }, + loadFilesFromDB: function (e, t, r) { + t = t || function () { + }, r = r || function () { + }; + var n = vt.indexedDB(); + try { + var o = n.open(vt.DB_NAME(), vt.DB_VERSION) + } catch (e) { + return r(e) + } + o.onupgradeneeded = r, o.onsuccess = function () { + var n = o.result; + try { + var a = n.transaction([vt.DB_STORE_NAME], "readonly") + } catch (e) { + return void r(e) + } + var i = a.objectStore(vt.DB_STORE_NAME), s = 0, u = 0, c = e.length; + + function l() { + 0 == u ? t() : r() + } + + e.forEach((function (e) { + var t = i.get(e); + t.onsuccess = function () { + vt.analyzePath(e).exists && vt.unlink(e), vt.createDataFile(ht.dirname(e), ht.basename(e), t.result, !0, !0, !0), ++s + u == c && l() + }, t.onerror = function () { + u++, s + u == c && l() + } + })), a.onerror = r + }, o.onerror = r + } + }, Et = { + mappings: {}, DEFAULT_POLLMASK: 5, umask: 511, calculateAt: function (e, t, r) { + if ("/" === t[0]) return t; + var n; + if (-100 === e) n = vt.cwd(); else { + var o = vt.getStream(e); + if (!o) throw new vt.ErrnoError(8); + n = o.path + } + if (0 == t.length) { + if (!r) throw new vt.ErrnoError(44); + return n + } + return ht.join2(n, t) + }, doStat: function (e, t, r) { + try { + var n = e(t) + } catch (e) { + if (e && e.node && ht.normalize(t) !== ht.normalize(vt.getPath(e.node))) return -54; + throw e + } + return $e[r >> 2] = n.dev, $e[r + 4 >> 2] = 0, $e[r + 8 >> 2] = n.ino, $e[r + 12 >> 2] = n.mode, $e[r + 16 >> 2] = n.nlink, $e[r + 20 >> 2] = n.uid, $e[r + 24 >> 2] = n.gid, $e[r + 28 >> 2] = n.rdev, $e[r + 32 >> 2] = 0, ct = [n.size >>> 0, (ut = n.size, +Math.abs(ut) >= 1 ? ut > 0 ? (0 | Math.min(+Math.floor(ut / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ut - +(~~ut >>> 0)) / 4294967296) >>> 0 : 0)], $e[r + 40 >> 2] = ct[0], $e[r + 44 >> 2] = ct[1], $e[r + 48 >> 2] = 4096, $e[r + 52 >> 2] = n.blocks, $e[r + 56 >> 2] = n.atime.getTime() / 1e3 | 0, $e[r + 60 >> 2] = 0, $e[r + 64 >> 2] = n.mtime.getTime() / 1e3 | 0, $e[r + 68 >> 2] = 0, $e[r + 72 >> 2] = n.ctime.getTime() / 1e3 | 0, $e[r + 76 >> 2] = 0, ct = [n.ino >>> 0, (ut = n.ino, +Math.abs(ut) >= 1 ? ut > 0 ? (0 | Math.min(+Math.floor(ut / 4294967296), 4294967295)) >>> 0 : ~~+Math.ceil((ut - +(~~ut >>> 0)) / 4294967296) >>> 0 : 0)], $e[r + 80 >> 2] = ct[0], $e[r + 84 >> 2] = ct[1], 0 + }, doMsync: function (e, t, r, n, o) { + var a = We.slice(e, e + r); + vt.msync(t, a, o, r, n) + }, doMkdir: function (e, t) { + return "/" === (e = ht.normalize(e))[e.length - 1] && (e = e.substr(0, e.length - 1)), vt.mkdir(e, t, 0), 0 + }, doMknod: function (e, t, r) { + switch (61440 & t) { + case 32768: + case 8192: + case 24576: + case 4096: + case 49152: + break; + default: + return -28 + } + return vt.mknod(e, t, r), 0 + }, doReadlink: function (e, t, r) { + if (r <= 0) return -28; + var n = vt.readlink(e), o = Math.min(r, Rr(n)), a = ze[t + o]; + return Mr(n, t, r + 1), ze[t + o] = a, o + }, doAccess: function (e, t) { + if (-8 & t) return -28; + var r; + if (!(r = vt.lookupPath(e, {follow: !0}).node)) return -44; + var n = ""; + return 4 & t && (n += "r"), 2 & t && (n += "w"), 1 & t && (n += "x"), n && vt.nodePermissions(r, n) ? -2 : 0 + }, doDup: function (e, t, r) { + var n = vt.getStream(r); + return n && vt.close(n), vt.open(e, t, 0, r, r).fd + }, doReadv: function (e, t, r, n) { + for (var o = 0, a = 0; a < r; a++) { + var i = $e[t + 8 * a >> 2], s = $e[t + (8 * a + 4) >> 2], u = vt.read(e, ze, i, s, n); + if (u < 0) return -1; + if (o += u, u < s) break + } + return o + }, doWritev: function (e, t, r, n) { + for (var o = 0, a = 0; a < r; a++) { + var i = $e[t + 8 * a >> 2], s = $e[t + (8 * a + 4) >> 2], u = vt.write(e, ze, i, s, n); + if (u < 0) return -1; + o += u + } + return o + }, varargs: void 0, get: function () { + return Et.varargs += 4, $e[Et.varargs - 4 >> 2] + }, getStr: function (e) { + return xr(e) + }, getStreamFromFD: function (e) { + var t = vt.getStream(e); + if (!t) throw new vt.ErrnoError(8); + return t + }, get64: function (e, t) { + return e + } + }, yt = void 0, wt = {}, _t = {}, bt = {}, kt = 48, Tt = 57, Dt = void 0, St = void 0, Ct = !1, Ot = void 0, Pt = [], xt = {}, Bt = {}, Mt = void 0, Rt = [], Lt = [{}, {value: void 0}, {value: null}, {value: !0}, {value: !1}], It = {}, Ft = [], Ut = [], Nt = [], jt = { + inEventHandler: 0, removeAllEventListeners: function () { + for (var e = jt.eventHandlers.length - 1; e >= 0; --e) jt._removeHandler(e); + jt.eventHandlers = [], jt.deferredCalls = [] + }, registerRemoveEventListeners: function () { + jt.removeEventListenersRegistered || (tt.push(jt.removeAllEventListeners), jt.removeEventListenersRegistered = !0) + }, deferredCalls: [], deferCall: function (e, t, r) { + function n(e, t) { + if (e.length != t.length) return !1; + for (var r in e) if (e[r] != t[r]) return !1; + return !0 + } + + for (var o in jt.deferredCalls) { + var a = jt.deferredCalls[o]; + if (a.targetFunction == e && n(a.argsList, r)) return + } + jt.deferredCalls.push({targetFunction: e, precedence: t, argsList: r}), jt.deferredCalls.sort((function (e, t) { + return e.precedence < t.precedence + })) + }, removeDeferredCalls: function (e) { + for (var t = 0; t < jt.deferredCalls.length; ++t) jt.deferredCalls[t].targetFunction == e && (jt.deferredCalls.splice(t, 1), --t) + }, canPerformEventHandlerRequests: function () { + return jt.inEventHandler && jt.currentEventHandler.allowsDeferredCalls + }, runDeferredCalls: function () { + if (jt.canPerformEventHandlerRequests()) for (var e = 0; e < jt.deferredCalls.length; ++e) { + var t = jt.deferredCalls[e]; + jt.deferredCalls.splice(e, 1), --e, t.targetFunction.apply(null, t.argsList) + } + }, eventHandlers: [], removeAllHandlersOnTarget: function (e, t) { + for (var r = 0; r < jt.eventHandlers.length; ++r) jt.eventHandlers[r].target != e || t && t != jt.eventHandlers[r].eventTypeString || jt._removeHandler(r--) + }, _removeHandler: function (e) { + var t = jt.eventHandlers[e]; + t.target.removeEventListener(t.eventTypeString, t.eventListenerFunc, t.useCapture), jt.eventHandlers.splice(e, 1) + }, registerOrRemoveHandler: function (e) { + var t = function (t) { + ++jt.inEventHandler, jt.currentEventHandler = e, jt.runDeferredCalls(), e.handlerFunc(t), jt.runDeferredCalls(), --jt.inEventHandler + }; + if (e.callbackfunc) e.eventListenerFunc = t, e.target.addEventListener(e.eventTypeString, t, e.useCapture), jt.eventHandlers.push(e), jt.registerRemoveEventListeners(); else for (var r = 0; r < jt.eventHandlers.length; ++r) jt.eventHandlers[r].target == e.target && jt.eventHandlers[r].eventTypeString == e.eventTypeString && jt._removeHandler(r--) + }, queueEventHandlerOnThread_iiii: function (e, t, r, n, o) { + var a = gr(), i = Er(12); + $e[i >> 2] = r, $e[i + 4 >> 2] = n, $e[i + 8 >> 2] = o, mr(0, e, 637534208, t, n, i), vr(a) + }, getTargetThreadForEventCallback: function (e) { + switch (e) { + case 1: + return 0; + case 2: + return ft.currentProxiedOperationCallerThread; + default: + return e + } + }, getNodeNameForTarget: function (e) { + return e ? e == window ? "#window" : e == screen ? "#screen" : e && e.nodeName ? e.nodeName : "" : "" + }, fullscreenEnabled: function () { + return document.fullscreenEnabled || document.webkitFullscreenEnabled + } + }, Gt = [0, "undefined" != typeof document ? document : 0, "undefined" != typeof window ? window : 0], zt = { + counter: 1, + buffers: [], + programs: [], + framebuffers: [], + renderbuffers: [], + textures: [], + uniforms: [], + shaders: [], + vaos: [], + contexts: {}, + offscreenCanvases: {}, + timerQueriesEXT: [], + programInfos: {}, + stringCache: {}, + unpackAlignment: 4, + recordError: function (e) { + zt.lastError || (zt.lastError = e) + }, + getNewId: function (e) { + for (var t = zt.counter++, r = e.length; r < t; r++) e[r] = null; + return t + }, + getSource: function (e, t, r, n) { + for (var o = "", a = 0; a < t; ++a) { + var i = n ? $e[n + 4 * a >> 2] : -1; + o += xr($e[r + 4 * a >> 2], i < 0 ? void 0 : i) + } + return o + }, + createContext: function (e, t) { + var r = e.getContext("webgl", t); + return r ? zt.registerContext(r, t) : 0 + }, + registerContext: function (e, t) { + var r = Jt(8); + $e[r + 4 >> 2] = sr(); + var n = {handle: r, attributes: t, version: t.majorVersion, GLctx: e}; + return e.canvas && (e.canvas.GLctxObject = n), zt.contexts[r] = n, (void 0 === t.enableExtensionsByDefault || t.enableExtensionsByDefault) && zt.initExtensions(n), r + }, + makeContextCurrent: function (e) { + return zt.currentContext = zt.contexts[e], Ee.ctx = Qt = zt.currentContext && zt.currentContext.GLctx, !(e && !Qt) + }, + getContext: function (e) { + return zt.contexts[e] + }, + deleteContext: function (e) { + zt.currentContext === zt.contexts[e] && (zt.currentContext = null), "object" == typeof jt && jt.removeAllHandlersOnTarget(zt.contexts[e].GLctx.canvas), zt.contexts[e] && zt.contexts[e].GLctx.canvas && (zt.contexts[e].GLctx.canvas.GLctxObject = void 0), Kt(zt.contexts[e].handle), zt.contexts[e] = null + }, + initExtensions: function (e) { + if (e || (e = zt.currentContext), !e.initExtensionsDone) { + e.initExtensionsDone = !0; + var t, r = e.GLctx; + !function (e) { + var t = e.getExtension("ANGLE_instanced_arrays"); + if (t) e.vertexAttribDivisor = function (e, r) { + t.vertexAttribDivisorANGLE(e, r) + }, e.drawArraysInstanced = function (e, r, n, o) { + t.drawArraysInstancedANGLE(e, r, n, o) + }, e.drawElementsInstanced = function (e, r, n, o, a) { + t.drawElementsInstancedANGLE(e, r, n, o, a) + } + }(r), function (e) { + var t = e.getExtension("OES_vertex_array_object"); + if (t) e.createVertexArray = function () { + return t.createVertexArrayOES() + }, e.deleteVertexArray = function (e) { + t.deleteVertexArrayOES(e) + }, e.bindVertexArray = function (e) { + t.bindVertexArrayOES(e) + }, e.isVertexArray = function (e) { + return t.isVertexArrayOES(e) + } + }(r), function (e) { + var t = e.getExtension("WEBGL_draw_buffers"); + if (t) e.drawBuffers = function (e, r) { + t.drawBuffersWEBGL(e, r) + } + }(r), r.disjointTimerQueryExt = r.getExtension("EXT_disjoint_timer_query"), (t = r).multiDrawWebgl = t.getExtension("WEBGL_multi_draw"), (r.getSupportedExtensions() || []).forEach((function (e) { + e.indexOf("lose_context") < 0 && e.indexOf("debug") < 0 && r.getExtension(e) + })) + } + }, + populateUniformTable: function (e) { + for (var t = zt.programs[e], r = zt.programInfos[e] = { + uniforms: {}, + maxUniformLength: 0, + maxAttributeLength: -1, + maxUniformBlockNameLength: -1 + }, n = r.uniforms, o = Qt.getProgramParameter(t, 35718), a = 0; a < o; ++a) { + var i = Qt.getActiveUniform(t, a), s = i.name; + r.maxUniformLength = Math.max(r.maxUniformLength, s.length + 1), "]" == s.slice(-1) && (s = s.slice(0, s.lastIndexOf("["))); + var u = Qt.getUniformLocation(t, s); + if (u) { + var c = zt.getNewId(zt.uniforms); + n[s] = [i.size, c], zt.uniforms[c] = u; + for (var l = 1; l < i.size; ++l) { + var d = s + "[" + l + "]"; + u = Qt.getUniformLocation(t, d), c = zt.getNewId(zt.uniforms), zt.uniforms[c] = u + } + } + } + } + }, Wt = ["default", "low-power", "high-performance"], Yt = {}, Se || ft.initMainThreadBlock(), Ht = function (e, t, r, n) { + e || (e = this), this.parent = e, this.mount = e.mount, this.mounted = null, this.id = vt.nextInode++, this.name = t, this.mode = r, this.node_ops = {}, this.stream_ops = {}, this.rdev = n + }, $t = 365, Vt = 146, Object.defineProperties(Ht.prototype, { + read: { + get: function () { + return (this.mode & $t) === $t + }, set: function (e) { + e ? this.mode |= $t : this.mode &= -366 + } + }, write: { + get: function () { + return (this.mode & Vt) === Vt + }, set: function (e) { + e ? this.mode |= Vt : this.mode &= -147 + } + }, isFolder: { + get: function () { + return vt.isDir(this.mode) + } + }, isDevice: { + get: function () { + return vt.isChrdev(this.mode) + } + } + }), vt.FSNode = Ht, vt.staticInit(), function () { + for (var e = new Array(256), t = 0; t < 256; ++t) e[t] = String.fromCharCode(t); + yt = e + }(), Dt = Ee.BindingError = fn(Error, "BindingError"), St = Ee.InternalError = fn(Error, "InternalError"), Cn.prototype.isAliasOf = vn, Cn.prototype.clone = bn, Cn.prototype.delete = kn, Cn.prototype.isDeleted = Tn, Cn.prototype.deleteLater = Sn, $n.prototype.getPointee = In, $n.prototype.destructor = Fn, $n.prototype.argPackAdvance = 8, $n.prototype.readValueFromPointer = Ln, $n.prototype.deleteObject = Un, $n.prototype.fromWireType = Hn, Ee.getInheritedInstanceCount = jn, Ee.getLiveInheritedInstances = Gn, Ee.flushPendingDeletes = Dn, Ee.setDelayFunction = zn, Mt = Ee.UnboundTypeError = fn(Error, "UnboundTypeError"), Ee.count_emval_handles = io, Ee.get_first_emval = so, Xt = [null, an, sn, Xo, ea, ta, ra, na, oa, aa, ia, ua, Aa], qt = { + e: rn, + Q: an, + P: sn, + V: gn, + y: Zn, + q: eo, + m: ro, + $: oo, + U: co, + w: po, + d: mo, + c: Ao, + x: go, + o: vo, + W: Eo, + I: yo, + J: bo, + i: ko, + z: ao, + h: To, + _: Do, + C: So, + R: Co, + b: Oo, + Y: Po, + s: xo, + M: Bo, + t: Mo, + g: Ro, + f: qr, + k: pt, + j: jo, + D: Go, + F: Wo, + E: Yo, + G: qo, + r: Zo, + H: Ko, + N: ea, + O: ta, + v: ra, + S: na, + T: oa, + A: aa, + u: ia, + X: sa, + B: Qr, + a: Ue, + K: ca, + L: la, + l: fa, + p: ha, + n: ma, + Z: Aa + }, Vr(), Zt = Ee.___wasm_call_ctors = function () { + return (Zt = Ee.___wasm_call_ctors = Ee.asm.aa).apply(null, arguments) + }, Kt = Ee._free = function () { + return (Kt = Ee._free = Ee.asm.ba).apply(null, arguments) + }, Jt = Ee._malloc = function () { + return (Jt = Ee._malloc = Ee.asm.ca).apply(null, arguments) + }, er = Ee._strlen = function () { + return (er = Ee._strlen = Ee.asm.ea).apply(null, arguments) + },tr = Ee.___errno_location = function () { + return (tr = Ee.___errno_location = Ee.asm.fa).apply(null, arguments) + },rr = Ee.___getTypeName = function () { + return (rr = Ee.___getTypeName = Ee.asm.ga).apply(null, arguments) + },Ee.___embind_register_native_and_builtin_types = function () { + return (Ee.___embind_register_native_and_builtin_types = Ee.asm.ha).apply(null, arguments) + },nr = Ee._emscripten_get_global_libc = function () { + return (nr = Ee._emscripten_get_global_libc = Ee.asm.ia).apply(null, arguments) + },or = Ee.__get_tzname = function () { + return (or = Ee.__get_tzname = Ee.asm.ja).apply(null, arguments) + },ar = Ee.__get_daylight = function () { + return (ar = Ee.__get_daylight = Ee.asm.ka).apply(null, arguments) + },ir = Ee.__get_timezone = function () { + return (ir = Ee.__get_timezone = Ee.asm.la).apply(null, arguments) + },sr = Ee._pthread_self = function () { + return (sr = Ee._pthread_self = Ee.asm.ma).apply(null, arguments) + },ur = Ee._emscripten_main_browser_thread_id = function () { + return (ur = Ee._emscripten_main_browser_thread_id = Ee.asm.na).apply(null, arguments) + },cr = Ee.___pthread_tsd_run_dtors = function () { + return (cr = Ee.___pthread_tsd_run_dtors = Ee.asm.oa).apply(null, arguments) + },lr = Ee._emscripten_main_thread_process_queued_calls = function () { + return (lr = Ee._emscripten_main_thread_process_queued_calls = Ee.asm.pa).apply(null, arguments) + },Ee._emscripten_current_thread_process_queued_calls = function () { + return (Ee._emscripten_current_thread_process_queued_calls = Ee.asm.qa).apply(null, arguments) + },dr = Ee._emscripten_register_main_browser_thread_id = function () { + return (dr = Ee._emscripten_register_main_browser_thread_id = Ee.asm.ra).apply(null, arguments) + },fr = Ee.__emscripten_do_dispatch_to_thread = function () { + return (fr = Ee.__emscripten_do_dispatch_to_thread = Ee.asm.sa).apply(null, arguments) + },pr = Ee._emscripten_sync_run_in_main_thread_4 = function () { + return (pr = Ee._emscripten_sync_run_in_main_thread_4 = Ee.asm.ta).apply(null, arguments) + },hr = Ee._emscripten_run_in_main_runtime_thread_js = function () { + return (hr = Ee._emscripten_run_in_main_runtime_thread_js = Ee.asm.ua).apply(null, arguments) + },mr = Ee.__emscripten_call_on_thread = function () { + return (mr = Ee.__emscripten_call_on_thread = Ee.asm.va).apply(null, arguments) + },Ee._emscripten_tls_init = function () { + return (Ee._emscripten_tls_init = Ee.asm.wa).apply(null, arguments) + },Ar = Ee.__emscripten_thread_init = function () { + return (Ar = Ee.__emscripten_thread_init = Ee.asm.xa).apply(null, arguments) + },gr = Ee.stackSave = function () { + return (gr = Ee.stackSave = Ee.asm.ya).apply(null, arguments) + },vr = Ee.stackRestore = function () { + return (vr = Ee.stackRestore = Ee.asm.za).apply(null, arguments) + },Er = Ee.stackAlloc = function () { + return (Er = Ee.stackAlloc = Ee.asm.Aa).apply(null, arguments) + },yr = Ee._emscripten_stack_set_limits = function () { + return (yr = Ee._emscripten_stack_set_limits = Ee.asm.Ba).apply(null, arguments) + },wr = Ee._memalign = function () { + return (wr = Ee._memalign = Ee.asm.Ca).apply(null, arguments) + },Ee.dynCall_ijiii = function () { + return (Ee.dynCall_ijiii = Ee.asm.Da).apply(null, arguments) + },Ee.dynCall_viiijj = function () { + return (Ee.dynCall_viiijj = Ee.asm.Ea).apply(null, arguments) + },Ee.dynCall_jij = function () { + return (Ee.dynCall_jij = Ee.asm.Fa).apply(null, arguments) + },Ee.dynCall_jii = function () { + return (Ee.dynCall_jii = Ee.asm.Ga).apply(null, arguments) + },Ee.dynCall_jiji = function () { + return (Ee.dynCall_jiji = Ee.asm.Ha).apply(null, arguments) + },Ee._ff_h264_cabac_tables = 77706,_r = Ee.__emscripten_allow_main_runtime_queued_calls = 241152,br = Ee.__emscripten_main_thread_futex = 1178e3,Ee.PThread = ft,Ee.PThread = ft,Ee.wasmMemory = Ue,Ee.ExitStatus = va,at = function e() { + kr || Ea(), kr || (at = e) + },Ee.run = Ea,Ee.preInit) for ("function" == typeof Ee.preInit && (Ee.preInit = [Ee.preInit]); Ee.preInit.length > 0;) Ee.preInit.pop()(); + Se && (Fe = !1, ft.initWorker()), Ea(), Tr = e(Ee) + } + + var _a = !1; + + function ba(e) { + let t = e.next(), r = null; + return n => { + var o = new Uint8Array(n); + if (r) { + var a = new Uint8Array(r.length + o.length); + a.set(r), a.set(o, r.length), o = a, r = null + } + for (; o.length >= t.value;) { + var i = o.slice(t.value); + t = e.next(o.slice(0, t.value)), o = i + } + o.length > 0 && (r = o) + } + } + + function ka() { + ({}), Dr || (Dr = !0, wa()), a(), (() => { + try { + if ("object" == typeof WebAssembly && "function" == typeof WebAssembly.instantiate) { + const e = new WebAssembly.Module(Uint8Array.of(0, 97, 115, 109, 1, 0, 0, 0)); + if (e instanceof WebAssembly.Module) return new WebAssembly.Instance(e) instanceof WebAssembly.Instance + } + } catch (e) { + } + return !1 + })(), Date.now || (Date.now = function () { + return (new Date).getTime() + }), Tr.print = function (e) { + postMessage({cmd: "print", text: e}) + }, Tr.printErr = function (e) { + postMessage({cmd: "printErr", text: e}) + }, Tr.postRun = function () { + var e = [], t = { + _firstCheckpoint: 0, _lastCheckpoint: 0, _intervalBytes: 0, _lastSecondBytes: 0, addBytes: function (e) { + 0 === t._firstCheckpoint ? (t._firstCheckpoint = Date.now(), t._lastCheckpoint = t._firstCheckpoint, t._intervalBytes += e) : Date.now() - t._lastCheckpoint < 1e3 ? t._intervalBytes += e : (t._lastSecondBytes = t._intervalBytes, t._intervalBytes = e, t._lastCheckpoint = Date.now()) + }, reset: function () { + t._firstCheckpoint = t._lastCheckpoint = 0, t._intervalBytes = 0, t._lastSecondBytes = 0 + }, getCurrentKBps: function () { + t.addBytes(0); + var e = (Date.now() - t._lastCheckpoint) / 1e3; + return 0 == e && (e = 1), t._intervalBytes / e / 1024 + }, getLastSecondKBps: function () { + return t.addBytes(0), 0 !== t._lastSecondBytes ? t._lastSecondBytes / 1024 : Date.now() - t._lastCheckpoint >= 500 ? t.getCurrentKBps() : 0 + } + }, r = { + opt: {}, initAudioPlanar: function (e, t) { + postMessage({cmd: "initAudioPlanar", samplerate: t, channels: e}); + var r = [], n = [], o = 0; + this.playAudioPlanar = function (t, a) { + for (var i = a, s = [], u = 0, c = 0; c < 2; c++) { + var l = Tr.HEAPU32[(t >> 2) + c] >> 2; + s[c] = Tr.HEAPF32.subarray(l, l + i) + } + if (o) { + if (!(i >= (a = 1024 - o))) return o += i, r[0] = Float32Array.of(...r[0], ...s[0]), void (2 == e && (r[1] = Float32Array.of(...r[1], ...s[1]))); + n[0] = Float32Array.of(...r[0], ...s[0].subarray(0, a)), 2 == e && (n[1] = Float32Array.of(...r[1], ...s[1].subarray(0, a))), postMessage({ + cmd: "playAudio", + buffer: n + }, n.map((e => e.buffer))), u = a, i -= a + } + for (o = i; o >= 1024; o -= 1024) n[0] = s[0].slice(u, u += 1024), 2 == e && (n[1] = s[1].slice(u - 1024, u)), postMessage({ + cmd: "playAudio", + buffer: n + }, n.map((e => e.buffer))); + o && (r[0] = s[0].slice(u), 2 == e && (r[1] = s[1].slice(u))) + } + }, inputFlv: function* () { + yield 9; + for (var t = new ArrayBuffer(4), r = new Uint8Array(t), a = new Uint32Array(t); ;) { + r[3] = 0; + var i = yield 15, s = i[4]; + r[0] = i[7], r[1] = i[6], r[2] = i[5]; + var u = a[0]; + r[0] = i[10], r[1] = i[9], r[2] = i[8]; + var c = a[0]; + 16777215 === c && (r[3] = i[11], c = a[0]); + var l = yield u; + switch (s) { + case 8: + this.opt.hasAudio && e.push({ts: c, payload: l, decoder: n, type: 0}); + break; + case 9: + e.push({ts: c, payload: l, decoder: o, type: l[0] >> 4}) + } + } + }, play: function (r) { + this.opt.debug && console.log("Jessibuca play", r), this.getDelay = function (e) { + return e ? (this.firstTimestamp = e, this.startTimestamp = Date.now(), this.getDelay = function (e) { + return this.delay = Date.now() - this.startTimestamp - (e - this.firstTimestamp), this.delay + }, -1) : -1 + }; + var i = this.opt.vod ? () => { + if (e.length) { + var t = e[0]; + if (-1 === this.getDelay(t.ts)) e.shift(), this.ts = t.ts, t.decoder.decode(t.payload); else for (; e.length && (t = e[0], this.getDelay(t.ts) > this.videoBuffer);) e.shift(), this.ts = t.ts, t.decoder.decode(t.payload) + } + } : () => { + if (e.length) if (this.dropping) 1 == (t = e.shift()).type ? (this.dropping = !1, this.ts = t.ts, t.decoder.decode(t.payload)) : 0 == t.type && (this.ts = t.ts, t.decoder.decode(t.payload)); else { + var t = e[0]; + if (-1 === this.getDelay(t.ts)) e.shift(), this.ts = t.ts, t.decoder.decode(t.payload); else if (this.delay > this.videoBuffer + 1e3) this.dropping = !0; else for (; e.length && (t = e[0], this.getDelay(t.ts) > this.videoBuffer);) e.shift(), this.ts = t.ts, t.decoder.decode(t.payload) + } + }; + if (this.stopId = setInterval(i, 10), this.speedSamplerId = setInterval((() => { + postMessage({cmd: "kBps", kBps: t.getLastSecondKBps()}) + }), 1e3), 0 == r.indexOf("http")) { + this.flvMode = !0; + var s = this, u = new AbortController; + fetch(r, {signal: u.signal}).then((function (e) { + var r = e.body.getReader(), n = s.inputFlv(), o = ba(n), a = function () { + r.read().then((({done: e, value: r}) => { + e ? n.return(null) : (t.addBytes(r.byteLength), o(r), a()) + })).catch((function (e) { + n.return(null), s.opt.debug && console.error(e), -1 === e.toString().indexOf("The user aborted a request") && postMessage({ + cmd: "printErr", + text: e.toString() + }) + })) + }; + a() + })).catch((e => { + postMessage({cmd: "printErr", text: e.message}) + })), this._close = function () { + u.abort() + } + } else { + if (this.flvMode = -1 != r.indexOf(".flv"), this.ws = new WebSocket(r), this.ws.binaryType = "arraybuffer", this.flvMode) { + let e = this.inputFlv(); + var c = ba(e); + this.ws.onmessage = e => { + t.addBytes(e.data.byteLength), c(e.data) + }, this.ws.onerror = t => { + e.return(null), postMessage({cmd: "printErr", text: t.toString()}) + } + } else this.ws.onmessage = r => { + t.addBytes(r.data.byteLength); + var a = new DataView(r.data); + switch (a.getUint8(0)) { + case 1: + this.opt.hasAudio && e.push({ + ts: a.getUint32(1, !1), + payload: new Uint8Array(r.data, 5), + decoder: n, + type: 0 + }); + break; + case 2: + e.push({ + ts: a.getUint32(1, !1), + payload: new Uint8Array(r.data, 5), + decoder: o, + type: a.getUint8(5) >> 4 + }) + } + }, this.ws.onerror = e => { + postMessage({cmd: "printErr", text: e.toString()}) + }; + this._close = function () { + this.ws.close(), this.ws = null + } + } + this.setVideoSize = function (e, t) { + postMessage({cmd: "initSize", w: e, h: t}); + var r = e * t, n = r >> 2; + if (this.opt.forceNoOffscreen || "undefined" == typeof OffscreenCanvas) this.draw = function (e, t, o, a) { + var i = [Tr.HEAPU8.subarray(t, t + r), Tr.HEAPU8.subarray(o, o + n), Tr.HEAPU8.subarray(a, a + n)].map((e => Uint8Array.from(e))); + postMessage({ + cmd: "render", + compositionTime: e, + delay: this.delay, + ts: this.ts, + output: i + }, i.map((e => e.buffer))) + }; else { + var o = new OffscreenCanvas(e, t), i = o.getContext("webgl"), s = a().default(i); + this.draw = function (a, i, u, c) { + s(e, t, Tr.HEAPU8.subarray(i, i + r), Tr.HEAPU8.subarray(u, u + n), Tr.HEAPU8.subarray(c, c + n)); + let l = o.transferToImageBitmap(); + postMessage({cmd: "render", compositionTime: a, delay: this.delay, ts: this.ts, buffer: l}, [l]) + } + } + } + }, close: function () { + this._close && (this.opt.debug && console.log("worker close"), this._close(), clearInterval(this.stopId), this.stopId = null, clearInterval(this.speedSamplerId), this.speedSamplerId = null, t.reset(), this.ws = null, n.clear(), o.clear(), this.firstTimestamp = 0, this.startTimestamp = 0, this.delay = 0, this.ts = 0, this.flvMode = !1, e = [], delete this.playAudioPlanar, delete this.draw, delete this.getDelay) + } + }, n = new Tr.AudioDecoder(r), o = new Tr.VideoDecoder(r); + postMessage({cmd: "init"}), self.onmessage = function (e) { + var t = e.data; + switch (t.cmd) { + case"init": + r.opt = JSON.parse(t.opt), n.sample_rate = t.sampleRate; + break; + case"getProp": + postMessage({cmd: "getProp", value: r[t.prop]}); + break; + case"setProp": + r[t.prop] = t.value; + break; + case"play": + r.play(t.url); + break; + case"setVideoBuffer": + r.videoBuffer = 1e3 * t.time | 0; + break; + case"close": + r.close() + } + } + } + } + + "undefined" == typeof importScripts ? ve || (ve = !0, {}, l(), U(), $(), q(), Ae(), v(), R(), ge = class { + constructor(e) { + if (this._opt = Object.assign(v().DEFAULT_OPTIONS, e), this.$container = e.container, "string" == typeof e.container && (this.$container = document.querySelector(e.container)), !this.$container) throw new Error("Jessibuca need container option"); + delete this._opt.container, this._opt.debug && console.log("options", this._opt), Ae().default(this), l().default(this), U().default(this), q().default(this), $().default(this) + } + + set fullscreen(e) { + e ? (R().checkFull() || this.$container.requestFullscreen(), R().$domToggle(this.$doms.minScreenDom, !0), R().$domToggle(this.$doms.fullscreenDom, !1)) : (R().checkFull() && document.exitFullscreen(), R().$domToggle(this.$doms.minScreenDom, !1), R().$domToggle(this.$doms.fullscreenDom, !0)), this._fullscreen !== e && (this.onFullscreen(e), this._trigger(v().EVEMTS.fullscreen, e)), this._fullscreen = e + } + + get fullscreen() { + return this._fullscreen + } + + set playing(e) { + e ? (R().$domToggle(this.$doms.playBigDom, !1), R().$domToggle(this.$doms.playDom, !1), R().$domToggle(this.$doms.pauseDom, !0), R().$domToggle(this.$doms.screenshotsDom, !0), R().$domToggle(this.$doms.recordDom, !0), this._quieting ? (R().$domToggle(this.$doms.quietAudioDom, !0), R().$domToggle(this.$doms.playAudioDom, !1)) : (R().$domToggle(this.$doms.quietAudioDom, !1), R().$domToggle(this.$doms.playAudioDom, !0))) : (this.$doms.speedDom && (this.$doms.speedDom.innerText = ""), this._playUrl && (R().$domToggle(this.$doms.playDom, !0), R().$domToggle(this.$doms.playBigDom, !0), R().$domToggle(this.$doms.pauseDom, !1)), R().$domToggle(this.$doms.recordDom, !1), R().$domToggle(this.$doms.recordingDom, !1), R().$domToggle(this.$doms.screenshotsDom, !1), R().$domToggle(this.$doms.quietAudioDom, !1), R().$domToggle(this.$doms.playAudioDom, !1)), this._playing !== e && (e ? (this.onPlay(), this._trigger(v().EVEMTS.play)) : (this.onPause(), this._trigger(v().EVEMTS.pause))), this._playing = e + } + + get playing() { + return this._playing + } + + set quieting(e) { + e ? (R().$domToggle(this.$doms.quietAudioDom, !0), R().$domToggle(this.$doms.playAudioDom, !1)) : (R().$domToggle(this.$doms.quietAudioDom, !1), R().$domToggle(this.$doms.playAudioDom, !0)), this._quieting !== e && (this.onMute(e), this._trigger(v().EVEMTS.mute, e)), this._quieting = e + } + + get quieting() { + return this._quieting + } + + set loading(e) { + e ? (R().$hideBtns(this.$doms), R().$domToggle(this.$doms.fullscreenDom, !0), R().$domToggle(this.$doms.pauseDom, !0), R().$domToggle(this.$doms.loadingDom, !0)) : R().$initBtns(this.$doms), this._loading = e + } + + get loading() { + return this._loading + } + + set recording(e) { + e ? (R().$domToggle(this.$doms.recordDom, !1), R().$domToggle(this.$doms.recordingDom, !0)) : (R().$domToggle(this.$doms.recordDom, !0), R().$domToggle(this.$doms.recordingDom, !1)), this._recording !== e && (this.onRecord(e), this._trigger(v().EVEMTS.record, e), this._recording = e) + } + + get recording() { + return this._recording + } + + setDebug(e) { + this._opt.isDebug = !!e + } + + setTimeout(e) { + this._opt.timeout = Number(e) + } + + setVod(e) { + this._opt.vod = !!e + } + + setNoOffscreen(e) { + this._opt.forceNoOffscreen = !!e + } + + setScaleMode(e) { + 0 === (e = Number(e)) ? (this._opt.isFullResize = !1, this._opt.isResize = !1) : 1 === e ? (this._opt.isFullResize = !1, this._opt.isResize = !0) : 2 === e && (this._opt.isFullResize = !0), this._resize() + } + + mute() { + this._mute() + } + + cancelMute() { + this._cancelMute() + } + + audioResume() { + this._cancelMute() + } + + pause() { + this._pause() + } + + play(e) { + this._play(e) + } + + close() { + this._close() + } + + destroy() { + this._close(), this._destroyAudioContext(), this._destroyContextGL(), this._decoderWorker.terminate(), this._removeEventListener(), this._initCheckVariable(), this._off(), this._removeContainerChild() + } + + clearView() { + this._clearView() + } + + resize() { + this._resize() + } + + setBufferTime(e) { + e = Number(e), this._decoderWorker.postMessage({cmd: v().POST_MESSAGE.setVideoBuffer, time: e}) + } + + setRotate(e) { + e = parseInt(e, 10), this._opt.rotate !== e && -1 !== [0, 90, 270].indexOf(e) && (this._opt.rotate = e, this.resize()) + } + + setVolume(e) { + if (this._gainNode) { + if (e = parseFloat(e), isNaN(e)) return; + this._gainNode.gain.setValueAtTime(e, this._audioContext.currentTime) + } + } + + setKeepScreenOn() { + this._opt.keepScreenOn = !0 + } + + setFullscreen(e) { + const t = !!e; + this.fullscreen !== t && (this.fullscreen = t) + } + + hasLoaded() { + return this._hasLoaded + } + + screenshot(e, t, r) { + this._screenshot(e, t, r) + } + + on(e, t) { + this._on(e, t) + } + }, window.Jessibuca = ge) : _a || (_a = !0, ka()) +}(); diff --git a/web_src/static/js/jessibuca/logo.png b/web_src/static/js/jessibuca/logo.png new file mode 100644 index 00000000..751de2a4 Binary files /dev/null and b/web_src/static/js/jessibuca/logo.png differ