commit d4cd50b659e6210f47ed82c5e9d9577a652fe7ce
Author: dhy1725534722 <1725534722@qq.com>
Date: Fri Aug 18 09:13:38 2023 +0800
初始化
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..59c9154
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,16 @@
+######################################################################
+# Build Tools
+
+/unpackage/*
+/node_modules/*
+
+######################################################################
+# Development Tools
+
+/.idea/*
+/.vscode/*
+/.hbuilderx/*
+
+package-lock.json
+yarn.lock
+
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..ea5b6c7
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,55 @@
+
+
+
+
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..2c46dba
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 若依
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..f202b42
--- /dev/null
+++ b/README.md
@@ -0,0 +1,52 @@
+
+
+
+RuoYi v1.0.0
+基于UniApp开发的轻量级移动端框架
+
+
+
+
+
+
+## 平台简介
+
+RuoYi App 移动解决方案,采用uniapp框架,一份代码多终端适配,同时支持APP、小程序、H5!实现了与[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue)、[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)完美对接的移动解决方案!目前已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。
+
+* 配套后端代码仓库地址[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) 或 [RuoYi-Cloud](https://github.com/yangzongzhuan/RuoYi-Cloud) 版本。
+* 应用框架基于[uniapp](https://uniapp.dcloud.net.cn/),支持小程序、H5、Android和IOS。
+* 前端组件采用[uni-ui](https://github.com/dcloudio/uni-ui),全端兼容的高性能UI框架。
+* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)
+* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)
+
+
+## 技术文档
+
+- 官网网站:[http://ruoyi.vip](http://ruoyi.vip)
+- 文档地址:[http://doc.ruoyi.vip](http://doc.ruoyi.vip)
+- H5页体验:[http://h5.ruoyi.vip](http://h5.ruoyi.vip)
+- QQ交流群: ①133713780
+- 小程序体验
+
+
+
+
+## 演示图
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/api/dict.js b/api/dict.js
new file mode 100644
index 0000000..bcbd55f
--- /dev/null
+++ b/api/dict.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+// 根据字典类型查询字典数据信息
+export function getDicts(dictType) {
+ return request({
+ url: '/system/dict/data/type/' + dictType,
+ method: 'get'
+ })
+}
diff --git a/api/login.js b/api/login.js
new file mode 100644
index 0000000..0f89e7c
--- /dev/null
+++ b/api/login.js
@@ -0,0 +1,79 @@
+import request from '@/utils/request'
+
+// 登录方法
+export function login(username, password, code, uuid) {
+ const data = {
+ username,
+ password,
+ code,
+ uuid
+ }
+ return request({
+ 'url': '/login',
+ headers: {
+ isToken: false
+ },
+ 'method': 'post',
+ 'data': data
+ })
+}
+
+// 获取用户详细信息
+export function getInfo() {
+ return request({
+ 'url': '/getInfo',
+ 'method': 'get'
+ })
+}
+
+// 退出方法
+export function logout() {
+ return request({
+ 'url': '/logout',
+ 'method': 'post'
+ })
+}
+
+// 获取验证码
+export function getCodeImg() {
+ return request({
+ 'url': '/captchaImage',
+ headers: {
+ isToken: false
+ },
+ method: 'get',
+ timeout: 20000
+ })
+}
+
+// 远程登录
+export function ControllerLogin(data) {
+ return request({
+ url: '/shian/remote/login',
+ headers: {
+ isToken: false
+ },
+ method: 'post',
+ data: data
+ })
+}
+
+// 外部登录
+export function remoteLogin(data) {
+ return request({
+ url: '/shian/remoteLogin/login',
+ method: 'post',
+ data
+ })
+}
+
+export function loginRemote(data) {
+ return request({
+ url: '/sso/user/login',
+ method: 'post',
+ headers: {
+ isToken: false
+ },
+ data
+ })
+}
\ No newline at end of file
diff --git a/api/shianliaoning/PRODUCT.js b/api/shianliaoning/PRODUCT.js
new file mode 100644
index 0000000..8ecb1ed
--- /dev/null
+++ b/api/shianliaoning/PRODUCT.js
@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// list
+export function getCList(query) {
+ return request({
+ url: `/shian/product/list`,
+ method: 'get',
+ params: query
+ })
+}
+//get
+export function getMessage(query) {
+ return request({
+ url: `/shian/product/`+query,
+ method: 'get',
+ })
+}
+
+
diff --git a/api/shianliaoning/RECOMMEND.js b/api/shianliaoning/RECOMMEND.js
new file mode 100644
index 0000000..2b6b950
--- /dev/null
+++ b/api/shianliaoning/RECOMMEND.js
@@ -0,0 +1,70 @@
+import request from "@/utils/request";
+
+// 查询示范创建城市列表
+export function listRECOMMEND(query) {
+ return request({
+ url: "/shian/RECOMMEND/list",
+ method: "get",
+ params: query,
+ });
+}
+// ?areaType=1
+// 查询示范创建城市树状
+export function treeList(query) {
+ return request({
+ url: "/shian/CONFIGURE/Demonstrationtreelist",
+ method: "get",
+ params: query,
+ });
+}
+
+// 查询示范创建城市详细
+export function getRECOMMEND(id) {
+ return request({
+ url: "/shian/RECOMMEND/" + id,
+ method: "get",
+ });
+}
+
+// 新增示范创建城市
+export function addRECOMMEND(data) {
+ return request({
+ url: "/shian/RECOMMEND",
+ method: "post",
+ data: data,
+ });
+}
+
+// 修改示范创建城市
+export function updateRECOMMEND(data) {
+ return request({
+ url: "/shian/RECOMMEND",
+ method: "put",
+ data: data,
+ });
+}
+
+// 删除示范创建城市
+export function delRECOMMEND(id) {
+ return request({
+ url: "/shian/RECOMMEND/" + id,
+ method: "delete",
+ });
+}
+
+// 导出示范创建城市
+export function exportRECOMMEND(query) {
+ return request({
+ url: "/shian/RECOMMEND/export",
+ method: "get",
+ params: query,
+ });
+}
+//获取五个示范的评分
+export function demoGrade(query){
+ return request({
+ url: "/shian/evaluation/getgradebyId",
+ method: "get",
+ params: query,
+ });
+}
\ No newline at end of file
diff --git a/api/shianliaoning/bangdan.js b/api/shianliaoning/bangdan.js
new file mode 100644
index 0000000..8118f58
--- /dev/null
+++ b/api/shianliaoning/bangdan.js
@@ -0,0 +1,29 @@
+import request from '@/utils/request'
+//红榜
+export function getList(data) {
+ return request({
+ url: '/shianliaoning/remote/findRedList',
+ method: 'post',
+ data
+ })
+}
+export function getRedInfo(id) {
+ return request({
+ url: `/shianliaoning/remote/redDetail/${id}`,
+ method: 'get'
+ })
+}
+//黑榜
+export function getblackList(data) {
+ return request({
+ url: '/shianliaoning/remote/findBlackList',
+ method: 'post',
+ data
+ })
+}
+export function getBlackInfo(id) {
+ return request({
+ url: `/shianliaoning/remote/blackDetail/${id}`,
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/api/shianliaoning/check.js b/api/shianliaoning/check.js
new file mode 100644
index 0000000..fc6c9d4
--- /dev/null
+++ b/api/shianliaoning/check.js
@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+// list
+export function getEssayList(query) {
+ return request({
+ url: '/shian/check/list',
+ method: 'get',
+ params:query
+ })
+}
+
+// export
+export function exportEssay(query) {
+ return request({
+ url: '/shian/check/export',
+ method: 'get',
+ params:query
+ })
+}
+
+// DELETE
+export function deleteEssay(ids) {
+ return request({
+ url: `/shian/check/${ids}`,
+ method:'DELETE'
+ })
+}
+
+// info
+export function getinfo(id) {
+ return request({
+ url: `/shian/check/${id}`,
+ method:'get'
+ })
+}
+
+// add
+export function addEssay(data) {
+ return request({
+ url: '/shian/check',
+ method: 'post',
+ data
+ })
+}
+
+// update
+export function updataEssay(data) {
+ return request({
+ url: '/shian/check',
+ method:'put',
+ data
+ })
+}
+export function downloadCheck() {
+ return request({
+ url: '/shian/check/importTemplate',
+ method:'get',
+ })
+}
\ No newline at end of file
diff --git a/api/shianliaoning/clasims.js b/api/shianliaoning/clasims.js
new file mode 100644
index 0000000..4568b64
--- /dev/null
+++ b/api/shianliaoning/clasims.js
@@ -0,0 +1,69 @@
+import request from '@/utils/request'
+
+// list
+export function getRecordList(query) {
+ return request({
+ url: '/shian/record/list',
+ method: 'get',
+ params: query
+ })
+}
+export function getCompanyList(query) {
+ return request({
+ url: '/shian/company/list',
+ method: 'get',
+ params: query
+ })
+}
+
+
+// export
+export function exportRecord(query) {
+ return request({
+ url: '/shian/record/export',
+ method: 'get',
+ params: query
+ })
+}
+
+// DELETE
+export function deleteRecord(ids) {
+ return request({
+ url: `/shian/record/${ids}`,
+ method: 'DELETE'
+ })
+}
+
+// info
+export function getinfo(id) {
+ return request({
+ url: `/shian/record/${id}`,
+ method: 'get'
+ })
+}
+
+// add
+export function addRecord(data) {
+ return request({
+ url: '/shian/record',
+ method: 'post',
+ data
+ })
+}
+
+// update
+export function updataRecord(data) {
+ return request({
+ url: '/shian/record',
+ method: 'put',
+ data
+ })
+}
+
+export function enterpriseList(query) {
+ return request({
+ url: '/shian/information/list',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/api/shianliaoning/company.js b/api/shianliaoning/company.js
new file mode 100644
index 0000000..2530f1e
--- /dev/null
+++ b/api/shianliaoning/company.js
@@ -0,0 +1,13 @@
+import request from '@/utils/request'
+
+// list
+export function getCompanyList(query) {
+ return request({
+ url: `/shian/company/list`,
+ method: 'get',
+ params: query
+ })
+}
+
+
+
diff --git a/api/shianliaoning/enterprise.js b/api/shianliaoning/enterprise.js
new file mode 100644
index 0000000..72c3c3d
--- /dev/null
+++ b/api/shianliaoning/enterprise.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// list
+export function getEnterpriseList(query) {
+ return request({
+ url: '/shian/enterprise/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// export
+export function exportEnterprise(query) {
+ return request({
+ url: '/shian/enterprise/export',
+ method: 'get',
+ params: query
+ })
+}
+
+// DELETE
+export function deleteEnterprise(ids) {
+ return request({
+ url: `/shian/enterprise/${ids}`,
+ method: 'DELETE'
+ })
+}
+
+// info
+export function getinfo(id) {
+ return request({
+ url: `/shian/enterprise/${id}`,
+ method: 'get'
+ })
+}
+
+// add
+export function addEnterprise(data) {
+ return request({
+ url: '/shian/enterprise',
+ method: 'post',
+ data
+ })
+}
+
+// update
+export function updataEnterprise(data) {
+ return request({
+ url: '/shian/enterprise',
+ method: 'put',
+ data
+ })
+}
diff --git a/api/shianliaoning/enterpriseSEARCH.js b/api/shianliaoning/enterpriseSEARCH.js
new file mode 100644
index 0000000..e70de0d
--- /dev/null
+++ b/api/shianliaoning/enterpriseSEARCH.js
@@ -0,0 +1,102 @@
+import request from '@/utils/request'
+import {
+ exportEssay
+} from './essay'
+
+// 根据关键字分页搜索主体列表
+export function getStreetList(data) {
+ return request({
+ url: `/shianliaoning/remote/getSocialList`,
+ method: 'post',
+ data
+ })
+}
+// 根据主体id查询详情
+export function getInfo(id) {
+ return request({
+ url: `/shianliaoning/remote/detail?id=${id}`,
+ method: 'get',
+ })
+}
+//查询行政许可
+export function getAdministrative(id) {
+ return request({
+ url: `/shianliaoning/remote/getLicense?id=${id}`,
+ method: 'get',
+ })
+}
+
+//查询失信行为
+export function getPromise(id) {
+ return request({
+ url: `/shianliaoning/remote/behavior?id=${id}`,
+ method: 'get',
+ })
+}
+//查询违法处罚
+export function getPunish(id) {
+ return request({
+ url: `/shianliaoning/remote/punishment?id=${id}`,
+ method: 'get',
+ })
+}
+
+
+//通过企业社会信用代码获取评分
+export function enterpriseGrade(uniscid) {
+ return request({
+ url: `/shian/evaluation/findByUniscid?uniscid=${uniscid}`,
+ method: 'get',
+ })
+}
+
+
+
+//获取评价
+export function getAppraise(data) {
+ return request({
+ url: `/shian/evaluation/list`,
+ method: 'get',
+ params: data
+ })
+}
+//新增社会评价
+export function addAppraise(data) {
+ return request({
+ url: `/shian/evaluation`,
+ method: 'post',
+ data
+ })
+}
+//根据主体id查询监管信息
+export function getSupervise(id) {
+ return request({
+ url: `/shianliaoning/remote/getSupervision?id=${id}`,
+ method: 'get',
+ })
+}
+//根据主体id查询所有食品信息
+export function getAllFoodList(data) {
+ return request({
+ url: `/shianliaoning/remote/getMainFood`,
+ method: 'post',
+ data
+ })
+}
+//查询产品评价
+export function foodAllPJ(query) {
+ return request({
+ url: '/shian/evaluation/getproduct',
+ method: 'get',
+ params: query
+ })
+}
+
+// 对接外部系统(解决跨域别人拿不到传入的数据问题)
+export function insureSystem(data) {
+ return request({
+ url: '/shian/bus',
+ method: 'post',
+ data
+ })
+}
\ No newline at end of file
diff --git a/api/shianliaoning/essay.js b/api/shianliaoning/essay.js
new file mode 100644
index 0000000..5a22dd8
--- /dev/null
+++ b/api/shianliaoning/essay.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// list
+export function getEssayList(query) {
+ return request({
+ url: '/shian/essay/list',
+ method: 'get',
+ params:query
+ })
+}
+
+// export
+export function exportEssay(query) {
+ return request({
+ url: '/shian/essay/export',
+ method: 'get',
+ params:query
+ })
+}
+
+// DELETE
+export function deleteEssay(ids) {
+ return request({
+ url: `/shian/essay/${ids}`,
+ method:'DELETE'
+ })
+}
+
+// info
+export function getinfo(id) {
+ return request({
+ url: `/shian/essay/${id}`,
+ method:'get'
+ })
+}
+
+// add
+export function addEssay(data) {
+ return request({
+ url: '/shian/essay',
+ method: 'post',
+ data
+ })
+}
+
+// update
+export function updataEssay(data) {
+ return request({
+ url: '/shian/essay',
+ method:'put',
+ data
+ })
+}
\ No newline at end of file
diff --git a/api/shianliaoning/evaluation.js b/api/shianliaoning/evaluation.js
new file mode 100644
index 0000000..0ead858
--- /dev/null
+++ b/api/shianliaoning/evaluation.js
@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+// list
+export function getEvaluationList(query) {
+ return request({
+ url: '/shian/evaluation/list',
+ method: 'get',
+ params: query
+ })
+}
+
+
+// info
+export function getinfo(id) {
+ return request({
+ url: `/shian/evaluation/${id}`,
+ method: 'get'
+ })
+}
+
+// add
+export function addEvaluation(data) {
+ return request({
+ url: '/shian/evaluation',
+ method: 'post',
+ data
+ })
+}
diff --git a/api/shianliaoning/famousShow.js b/api/shianliaoning/famousShow.js
new file mode 100644
index 0000000..432a3e1
--- /dev/null
+++ b/api/shianliaoning/famousShow.js
@@ -0,0 +1,8 @@
+import request from '@/utils/request'
+export function getFamousList(data) {
+ return request({
+ url: '/shianliaoning/remote/superInfoList',
+ method: 'post',
+ data
+ })
+}
\ No newline at end of file
diff --git a/api/shianliaoning/foodMsg.js b/api/shianliaoning/foodMsg.js
new file mode 100644
index 0000000..133aa42
--- /dev/null
+++ b/api/shianliaoning/foodMsg.js
@@ -0,0 +1,77 @@
+import request from '@/utils/request'
+
+// list
+export function getList(query) {
+ return request({
+ url: `/shian/cpxx/list`,
+ method: 'get',
+ params: query
+ })
+}
+// info
+export function getinfo(id) {
+ return request({
+ url: `/shian/cpxx/${id}`,
+ method: 'get'
+ })
+}
+//根据产品id获得评分
+export function gardeFood(data){
+ return request({
+ url:`/shian/evaluation/findByProductId?productId=${data}`,
+ method:'get',
+ })
+}
+//根据食品生产产品的社会信用代码关联社会评价表
+export function prejectData(e){
+ return request({
+ url:`/shian/cpxx/getgrade?code=${e}`,
+ method:'get',
+ })
+}
+//获取食品列表
+export function foodList(data){
+ return request({
+ url:'/shianliaoning/remote/getSourceInfo',
+ method:'post',
+ data
+ })
+}
+//获取食品详情
+export function foodListDetails(data){
+ return request({
+ url:'/shianliaoning/remote/getFoodList',
+ method:'post',
+ data
+ })
+}
+//获取食品检测信息
+export function foodDetectionMsg(data){
+ return request({
+ url:'/shianliaoning/remote/getFoodDetection',
+ method:'post',
+ data
+ })
+}
+//根据溯源码获取生产网点列表
+export function productionList(id){
+ return request({
+ url:`/shianliaoning/remote/getProductionPoint?sourceCode=${id}`,
+ method:'get',
+ })
+}
+//根据溯源码获取销售网点列表
+export function marketList(id){
+ return request({
+ url:`/shianliaoning/remote/getSalePoint?sourceCode=${id}`,
+ method:'get',
+ })
+}
+//根据溯源码查询合格证
+export function queryCertificate(data){
+ return request({
+ url:`/shianliaoning/remote/findCertification`,
+ method:'post',
+ data
+ })
+}
diff --git a/api/shianliaoning/insure.js b/api/shianliaoning/insure.js
new file mode 100644
index 0000000..1bbd62a
--- /dev/null
+++ b/api/shianliaoning/insure.js
@@ -0,0 +1,32 @@
+import request from '@/utils/request'
+
+// list
+export function getInsureList(query) {
+ return request({
+ url: `/shian/insurerecord/list`,
+ method: 'get',
+ params: query
+ })
+}
+export function getInsure(id){
+ return request({
+ url: `/shian/insurerecord/`+id,
+ method: 'get',
+ })
+}
+//add
+export function addInsure(data){
+ return request({
+ url: `/shian/insurerecord`,
+ method: 'post',
+ data:data
+ })
+}
+//获取城市列表接口
+export function cityList(date){
+ return request({
+ url: `/shian/city/list`,
+ method: 'get',
+ date
+ })
+}
\ No newline at end of file
diff --git a/api/shianliaoning/message.js b/api/shianliaoning/message.js
new file mode 100644
index 0000000..f300428
--- /dev/null
+++ b/api/shianliaoning/message.js
@@ -0,0 +1,41 @@
+import request from '@/utils/request'
+
+// 新增提问
+export function addQuestions(data) {
+ return request({
+ url: `/shian/questions`,
+ method: 'post',
+ data
+ })
+}
+// 分页获取提问列表
+export function getList(query){
+ return request({
+ url: `/shian/questions/page`,
+ method: 'get',
+ params:query
+ })
+}
+//回复留言
+export function requestText(data){
+ return request({
+ url: `/shian/questions/reply`,
+ method: 'put',
+ data
+ })
+}
+//修改回复
+export function updataReply(data){
+ return request({
+ url: `/shian/questions`,
+ method: 'put',
+ data
+ })
+}
+//删除回复
+export function deleteReply(ids){
+ return request({
+ url: `/shian/questions/delReplyById/${ids}`,
+ method: 'delete',
+ })
+}
\ No newline at end of file
diff --git a/api/shianliaoning/publicity.js b/api/shianliaoning/publicity.js
new file mode 100644
index 0000000..83587fb
--- /dev/null
+++ b/api/shianliaoning/publicity.js
@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+export function getList(query) {
+ return request({
+ url: '/shian/standard/list',
+ method: 'get',
+ params: query
+ })
+}
+export function getInfo(id) {
+ return request({
+ url: `/shian/standard/${id}`,
+ method: 'get',
+ })
+}
+export function addList(data) {
+ return request({
+ url: '/shian/standard',
+ method: 'post',
+ data
+ })
+}
+
+export function removeList(ids) {
+ return request({
+ url: `/shian/standard/${ids}`,
+ method: 'DELETE'
+ })
+}
\ No newline at end of file
diff --git a/api/shianliaoning/shop.js b/api/shianliaoning/shop.js
new file mode 100644
index 0000000..01604f5
--- /dev/null
+++ b/api/shianliaoning/shop.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// list
+export function getEnterpriseList(query) {
+ return request({
+ url: `/shian/store/list`,
+ method: 'get',
+ params: query
+ })
+}
+
+// export
+export function exportEnterprise(query) {
+ return request({
+ url: '/shian/store/export',
+ method: 'get',
+ params: query
+ })
+}
+
+// DELETE
+export function deleteEnterprise(ids) {
+ return request({
+ url: `/shian/store/${ids}`,
+ method: 'DELETE'
+ })
+}
+
+// info
+export function getinfo(id) {
+ return request({
+ url: `/shian/store/${id}`,
+ method: 'get'
+ })
+}
+
+// add
+export function addEnterprise(data) {
+ return request({
+ url: '/shian/store',
+ method: 'post',
+ data
+ })
+}
+
+// update
+export function updataEnterprise(data) {
+ return request({
+ url: '/shian/store',
+ method: 'put',
+ data
+ })
+}
diff --git a/api/shianliaoning/street.js b/api/shianliaoning/street.js
new file mode 100644
index 0000000..efb7ebd
--- /dev/null
+++ b/api/shianliaoning/street.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// list
+export function getStreetList(query) {
+ return request({
+ url: '/shian/street/list',
+ method: 'get',
+ params:query
+ })
+}
+
+// export
+export function exportStreet(query) {
+ return request({
+ url: '/shian/street/export',
+ method: 'get',
+ params:query
+ })
+}
+
+// DELETE
+export function deleteStreet(ids) {
+ return request({
+ url: `/shian/street/${ids}`,
+ method:'DELETE'
+ })
+}
+
+// info
+export function getinfo(id) {
+ return request({
+ url: `/shian/street/${id}`,
+ method:'get'
+ })
+}
+
+// add
+export function addStreet(data) {
+ return request({
+ url: '/shian/street',
+ method: 'post',
+ data
+ })
+}
+
+// update
+export function updataStreet(data) {
+ return request({
+ url: '/shian/street',
+ method:'put',
+ data
+ })
+}
\ No newline at end of file
diff --git a/api/shianliaoning/survey.js b/api/shianliaoning/survey.js
new file mode 100644
index 0000000..cb12984
--- /dev/null
+++ b/api/shianliaoning/survey.js
@@ -0,0 +1,97 @@
+import request from '@/utils/request'
+
+// list
+export function getSurveyList(query) {
+ return request({
+ url: '/shian/survey/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// export
+export function exportSurvey(query) {
+ return request({
+ url: '/shian/survey/export',
+ method: 'get',
+ params: query
+ })
+}
+
+// DELETE
+export function deleteSurvey(ids) {
+ return request({
+ url: `/shian/survey/${ids}`,
+ method: 'DELETE'
+ })
+}
+
+// info
+export function getinfo(id) {
+ return request({
+ url: `/shian/survey/${id}`,
+ method: 'get'
+ })
+}
+
+// add
+export function addSurvey(data) {
+ return request({
+ url: '/shian/survey',
+ method: 'post',
+ data
+ })
+}
+
+// update
+export function updataSurvey(data) {
+ return request({
+ url: '/shian/survey',
+ method: 'put',
+ data
+ })
+}
+
+// 新增评分题
+export function addDirectory(data) {
+ return request({
+ url: '/shian/directory/add',
+ method: 'post',
+ data
+ })
+}
+//获取问卷详情
+export function getDirectoryInfo(id) {
+ return request({
+ url: `/shian/directory/findBySurveyId/${id}`,
+ method: 'get'
+ })
+}
+// 修改问卷
+export function updataDirectory(data) {
+ return request({
+ url: '/shian/directory/edit',
+ method: 'put',
+ data
+ })
+}
+
+//新增用户评分
+
+export function addAnswer(data) {
+ return request({
+ url: '/shian/answer/add',
+ method: 'post',
+ data
+ })
+}
+
+
+// 调查单list
+export function getSurverListData(query) {
+ return request({
+ url: '/dwsurvey/app/survey/list.do',
+ method: 'get',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/api/shianliaoning/video.js b/api/shianliaoning/video.js
new file mode 100644
index 0000000..3fc5ac0
--- /dev/null
+++ b/api/shianliaoning/video.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+//红榜
+export function getList(query) {
+ return request({
+ url: '/shian/videos/page',
+ method: 'get',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/api/system/user.js b/api/system/user.js
new file mode 100644
index 0000000..5d31cc2
--- /dev/null
+++ b/api/system/user.js
@@ -0,0 +1,58 @@
+import upload from '@/utils/upload'
+import request from '@/utils/request'
+
+// 用户密码重置
+export function updateUserPwd(oldPassword, newPassword) {
+ const data = {
+ oldPassword,
+ newPassword
+ }
+ return request({
+ url: '/system/user/profile/updatePwd',
+ method: 'put',
+ params: data
+ })
+}
+
+// 查询用户个人信息
+export function getUserProfile() {
+ return request({
+ url: '/system/user/profile',
+ method: 'get'
+ })
+}
+
+// 修改用户个人信息
+export function updateUserProfile(data) {
+ return request({
+ url: '/system/user/profile',
+ method: 'put',
+ data: data
+ })
+}
+
+// 用户头像上传
+export function uploadAvatar(data) {
+ return upload({
+ url: '/system/user/profile/avatar',
+ name: data.name,
+ filePath: data.filePath
+ })
+}
+
+export function uploadFile(data) {
+ return upload({
+ url: '/common/uploadMinioonfile',
+ name: data.name,
+ filePath: data.filePath
+ })
+}
+
+// 获取用户信息
+
+export function getSelfInfo() {
+ return request({
+ url: '/shianliaoning/demo_info/getSelfInfo',
+ method: 'get'
+ })
+}
diff --git a/api/wx.js b/api/wx.js
new file mode 100644
index 0000000..7d80e41
--- /dev/null
+++ b/api/wx.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export function getWxConfig(query) {
+ return request({
+ url: '/shian/wechat/findSignature',
+ method: 'get',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/components/fixedButton/fixedButton.vue b/components/fixedButton/fixedButton.vue
new file mode 100644
index 0000000..6e6f458
--- /dev/null
+++ b/components/fixedButton/fixedButton.vue
@@ -0,0 +1,64 @@
+
+
+ {{
+ title
+ }}
+
+
+
+
+
+
diff --git a/components/hqs-popup/hqs-popup.vue b/components/hqs-popup/hqs-popup.vue
new file mode 100644
index 0000000..6d50da2
--- /dev/null
+++ b/components/hqs-popup/hqs-popup.vue
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
diff --git a/components/hqs-popup/uni-popup.vue b/components/hqs-popup/uni-popup.vue
new file mode 100644
index 0000000..c1e8c53
--- /dev/null
+++ b/components/hqs-popup/uni-popup.vue
@@ -0,0 +1,284 @@
+
+
+
+
+
+
diff --git a/components/hqs-popup/uni-transition.vue b/components/hqs-popup/uni-transition.vue
new file mode 100644
index 0000000..908a939
--- /dev/null
+++ b/components/hqs-popup/uni-transition.vue
@@ -0,0 +1,279 @@
+
+
+
+
+
+
+
+
+
diff --git a/components/jin-attachment/jin-attachment.vue b/components/jin-attachment/jin-attachment.vue
new file mode 100644
index 0000000..ef0411c
--- /dev/null
+++ b/components/jin-attachment/jin-attachment.vue
@@ -0,0 +1,361 @@
+
+
+
+
+
+
+
+ ×
+
+
+
+ {{ item.fileName }}
+
+ ×
+
+
+ +
+
+
+
+
+
+
+
diff --git a/components/jin-attachment/readme.md b/components/jin-attachment/readme.md
new file mode 100644
index 0000000..861fa44
--- /dev/null
+++ b/components/jin-attachment/readme.md
@@ -0,0 +1,148 @@
+# 附件上传组件 jin-attachment
+> 该组件依赖less, 如果项目没有安装less,请先安装
+
+### 组件功能说明
+1. 可选择多张图片
+2. 选择图片后自动添加到后面
+3. 图片上自带删除图标,点击可删除
+4. 图片可点击预览
+5. 可获取当前的图片地址数组
+6. 可上传图片到服务器
+7. 可设置上传的图片数量
+8. APP端可以上传文件
+9. 可配置是否显示上传进度条
+10. 微信端可以选择文件,利用接口wx.chooseMessageFile
+
+`已测试安卓端、微信小程序端、H5端`
+
+### 使用说明
+拷贝该组件到`components`目录下之后
+在 `script` 中引用组件
+
+``` javascript
+import Attachment from '../../components/jin-attachment/jin-attachment.vue';
+export default {
+ components: {Attachment}
+}
+```
+
+在 template 中使用组件:
+
+``` javascript
+
+```
+
+### 重要说明
+APP端可以上传文件,但是需要引入uni-app插件市场的`chuck-filemanager`插件,可以选择试用,然后在mainfest.json中勾选该插件,既可在自定义基座中运行
+
+
+ chuck-filemanager插件地址 https://ext.dcloud.net.cn/plugin?id=680
+
+### 组件参数说明
+
+属性名 | 类型| 默认值 | 说明|
+--------- | --------|--------- | --------|
+attachmentList | `Array` | [] | 初始化的图片数据,可用于单向数据初始化,需要双向绑定可直接用 :attachmentList.sync="attachmentList" |
+mode | `String` | null | 组件模式,create => 可新增或编辑附件 不填或其他 => 只能查看附件 |
+uploadFileUrl | `String` | null | 上传文件的服务器url |
+showProcess | `Boolean` | true | 是否显示进度,默认显示 |
+header | `Object` | null | 上传图片到服务器时,HTTP 请求 Header |
+limit | `Number` | null | 限制可上传的图片数量,图片最大上传数量 |
+fileKeyName | `String` | 'file' | 用于在服务端通过自定义key值获取该文件数据|
+canUploadFile | `Boolean` | false | 是否能上传文件,只有微信端和安卓版设置为true时有效
+
+### `attachmentList`参数的 `Object`说明
+属性名 | 类型| 默认值 | 说明|
+--------- | --------|--------- | --------|
+type | `String` | 'image' | 文件类型 image => 图片,file => 文件
+url | `String` | null | 文件或者图片的url地址
+fileName | `String` | null | 文件名
+process | `Number` | null | 文件或图片的上传进度
+
+### 自定义事件说明
+事件名称 | 说明| 返回参数 |
+--------- | --------|--------- |
+uploadSuccess | 图片上传成功回调函数,每选择一个或者多个附件后会立即上传至后端服务器| 返回的参数与 uni.uploadFile接口参数一致 |
+
+
+### demo示例
+
+``` javascript
+
+
+
+
+
+
+
+
+
+
+```
+
+> 如遇问题,欢迎评论指出,作者微信 wangjinxin613,添加好友时请备注 jin-attachment
\ No newline at end of file
diff --git a/components/modelScore/modelScore.vue b/components/modelScore/modelScore.vue
new file mode 100644
index 0000000..1f8588a
--- /dev/null
+++ b/components/modelScore/modelScore.vue
@@ -0,0 +1,218 @@
+
+
+
+
+ 评分
+
+
+
+ 123分
+ 暂无评分
+
+
+
+ 123
+
+
+ 21312
+
+ 打分
+
+
+
+
+ 123
+
+
+ 发布于121
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/uni-section/uni-section.vue b/components/uni-section/uni-section.vue
new file mode 100644
index 0000000..9a52e0b
--- /dev/null
+++ b/components/uni-section/uni-section.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config.js b/config.js
new file mode 100644
index 0000000..68fd7eb
--- /dev/null
+++ b/config.js
@@ -0,0 +1,30 @@
+// 应用全局配置
+module.exports = {
+ // baseUrl: "/baseApi", //跨域(企业端、本地测试)
+ baseUrl: "https://yth.scjg.ln.gov.cn/api/shianliaoning/lnapi", //外网服务器(上线)
+
+ // baseUrl: "https://www.jichuanglanhai.com:88/lnapi", //自己服务器(公众端,本地测试)
+ // iamgeBaseUrl: 'https://www.jichuanglanhai.com/demo/liaoning-app-file/', //图片域名
+ iamgeBaseUrl: 'https://yth.scjg.ln.gov.cn/sgfs-enterprise/liaoning-app-file/file/', //图片域名
+ // 应用信息
+ appInfo: {
+ // 应用名称
+ name: "LiaoNingApp",
+ // 应用版本
+ version: "1.0.0",
+ // 应用logo
+ logo: "/static/logo.png",
+ // 官方网站
+ site_url: "http://ruoyi.vip",
+ // 政策协议
+ agreements: [{
+ title: "隐私政策",
+ url: "https://ruoyi.vip/protocol.html",
+ },
+ {
+ title: "用户服务协议",
+ url: "https://ruoyi.vip/protocol.html",
+ },
+ ],
+ },
+};
\ No newline at end of file
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..ad048c4
--- /dev/null
+++ b/main.js
@@ -0,0 +1,42 @@
+import Vue from "vue";
+import App from "./App";
+import store from "./store"; // store
+import plugins from "./plugins"; // plugins
+import "./permission"; // permission
+import iftabbar from "./utils/iftabbar"; //引入底边导航判断
+import fixedButton from '@/components/fixedButton/fixedButton.vue'
+import modelScore from '@/components/modelScore/modelScore.vue'
+
+Vue.use(plugins);
+
+import {
+ fileType,
+ deletelDNS
+} from './utils/tool.js'
+
+import {
+ getDicts
+} from "@/api/dict.js";
+Vue.prototype.fileType = fileType
+Vue.prototype.deletelDNS = deletelDNS
+Vue.prototype.getDicts = getDicts;
+
+Vue.component("fixedButton", fixedButton);
+Vue.component("modelScore", modelScore);
+import uView from "uview-ui";
+Vue.use(uView);
+if (process.env.NODE_ENV === 'production') { //生产环境禁用console.log
+ console.log = function() {};
+}
+
+Vue.config.productionTip = false;
+Vue.prototype.$store = store;
+Vue.prototype.$iftabbar = iftabbar;
+
+App.mpType = "app";
+
+const app = new Vue({
+ ...App,
+});
+
+app.$mount();
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..13b28ad
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,110 @@
+{
+ "name" : "食安辽宁移动端",
+ "appid" : "__UNI__10B1AE1",
+ "description" : "",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueCompiler" : "uni-app",
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ "modules" : {
+ "Maps" : {}
+ },
+ "distribute" : {
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ "ios" : {},
+ "sdkConfigs" : {
+ "maps" : {
+ "amap" : {
+ "appkey_ios" : "cb45e55a9ef7b5e450d0ce255bfb5798",
+ "appkey_android" : "cb45e55a9ef7b5e450d0ce255bfb5798"
+ }
+ }
+ }
+ }
+ },
+ "quickapp" : {},
+ "mp-weixin" : {
+ "appid" : "wxceab52cfb9a87f72",
+ "setting" : {
+ "urlCheck" : false,
+ "es6" : false,
+ "minified" : true,
+ "postcss" : true
+ },
+ "optimization" : {
+ "subPackages" : true
+ },
+ "usingComponents" : true,
+ "permission" : {},
+ "unipush" : {
+ "enable" : false
+ }
+ },
+ "vueVersion" : "2",
+ "h5" : {
+ "template" : "static/index.html",
+ "devServer" : {
+ "port" : 9090,
+ "https" : true,
+ "proxy" : {
+ "/lnapi" : {
+ "target" : "https://yth.scjg.ln.gov.cn",
+ "changeOrigin" : true,
+ "secure" : false,
+ "pathRewrite" : {
+ "^/lnapi" : ""
+ }
+ },
+ "/baseApi" : {
+ "target" : "https://yth.scjg.ln.gov.cn/api/shianliaoning/lnapi/",
+ "changeOrigin" : true,
+ "secure" : false,
+ "pathRewrite" : {
+ "^/baseApi" : ""
+ }
+ }
+ }
+ },
+ "title" : "食安辽宁社会共治",
+ "router" : {
+ "mode" : "hash",
+ "base" : "./"
+ },
+ "sdkConfigs" : {
+ "maps" : {
+ "qqmap" : {
+ "key" : "TYBBZ-A2AKV-MLZPW-UFNQI-HKNVE-BEFZH"
+ }
+ }
+ },
+ "unipush" : {
+ "enable" : false
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..694eea4
--- /dev/null
+++ b/package.json
@@ -0,0 +1,15 @@
+{
+ "id": "hqs-popup",
+ "name": "hqs-popup弹窗组件,支持手势滑动关闭",
+ "version": "1.3.2",
+ "description": "基于uni-popup实现,增加了手势滑动关闭弹窗功能,体验和抖音评论下滑关闭类似",
+ "keywords": [
+ "仿抖音评论弹窗",
+ "自带scrollview支持列表内容",
+ "求好评~"
+ ],
+ "dependencies": {
+ "jweixin-module": "^1.6.0",
+ "save": "^2.9.0"
+ }
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..a37552e
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,554 @@
+{
+ "easycom": {
+ "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+ },
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "食安辽宁",
+ "navigationBarBackgroundColor": "#FFFFFF"
+ },
+
+ "pages": [{
+ "path": "pages/login",
+ "style": {
+ "navigationStyle": "custom",
+ "app-plus": {
+ "titleNView": {
+ "buttons": [{
+ "text": ""
+ }]
+ }
+ }
+ }
+ },
+ // {
+ // "path": "pages/company-home/index",
+ // "style": {
+ // "navigationBarTitleText": "企业首页",
+ // "navigationStyle": "custom",
+ // "app-plus": {
+ // "titleNView": {
+ // "buttons": [{
+ // "text": ""
+ // }]
+ // }
+ // }
+ // }
+ // },
+ {
+ "path": "pages/public-home/index",
+ "style": {
+ "navigationBarTitleText": "公众首页",
+ "navigationStyle": "custom",
+ "app-plus": {
+ "titleNView": {
+ "buttons": [{
+ "text": ""
+ }]
+ }
+ }
+ }
+ },
+ {
+ "path": "pages/scanCodes/index",
+ "style": {
+ "navigationBarTitleText": "",
+ "navigationStyle": "custom",
+ "app-plus": {
+ "titleNView": {
+ "buttons": [{
+ "text": ""
+ }]
+ }
+ }
+ }
+ },
+ {
+ "path": "pages/company-mine/index",
+ "style": {
+ "navigationBarTitleText": "企业我的",
+ "navigationStyle": "custom",
+ "app-plus": {
+ "titleNView": {
+ "buttons": [{
+ "text": ""
+ }]
+ }
+ }
+ }
+ },
+
+ {
+ "path": "pages/public-mine/index",
+ "style": {
+ "navigationBarTitleText": "公众我的",
+ "navigationStyle": "custom",
+ "app-plus": {
+ "titleNView": {
+ "buttons": [{
+ "text": ""
+ }]
+ }
+ }
+ }
+ },
+ {
+ "path": "pages/index",
+ "style": {
+ "navigationBarTitleText": "食安辽宁",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/work/index",
+ "style": {
+ "navigationBarTitleText": "工作台"
+ }
+ },
+ {
+ "path": "pages/mine/index",
+ "style": {
+ "navigationBarTitleText": "我的"
+ }
+ },
+ {
+ "path": "pages/mine/avatar/index",
+ "style": {
+ "navigationBarTitleText": "修改头像"
+ }
+ },
+ {
+ "path": "pages/mine/info/index",
+ "style": {
+ "navigationBarTitleText": "个人信息"
+ }
+ },
+ {
+ "path": "pages/mine/info/edit",
+ "style": {
+ "navigationBarTitleText": "编辑资料"
+ }
+ },
+ {
+ "path": "pages/mine/pwd/index",
+ "style": {
+ "navigationBarTitleText": "修改密码"
+ }
+ },
+ {
+ "path": "pages/mine/setting/index",
+ "style": {
+ "navigationBarTitleText": "应用设置"
+ }
+ },
+ {
+ "path": "pages/mine/help/index",
+ "style": {
+ "navigationBarTitleText": "常见问题"
+ }
+ },
+ {
+ "path": "pages/common/webview/index",
+ "style": {
+ "navigationBarTitleText": "浏览网页"
+ }
+ },
+ {
+ "path": "pages/common/textview/index",
+ "style": {
+ "navigationBarTitleText": "浏览文本"
+ }
+ }
+ ],
+ "subPackages": [{
+ "root": "sub-interaction",
+ "pages": [{
+ "path": "publicity/publicity",
+ "style": {
+ "navigationBarTitleText": "企业标准公示",
+ "enablePullDownRefresh": false
+ }
+
+ },
+ {
+ "path": "publicity/form",
+ "style": {
+ "navigationBarTitleText": "新增企业标准公示",
+ "enablePullDownRefresh": false
+ }
+
+ },
+ {
+ "path": "publicity/info",
+ "style": {
+ "navigationBarTitleText": "企业标准公示详情",
+ "enablePullDownRefresh": false
+ }
+
+ },
+ {
+ "path": "bang-dan/bang-dan",
+ "style": {
+ "navigationBarTitleText": "食品安全红黑榜",
+ "enablePullDownRefresh": false
+ }
+
+ },
+ {
+ "path": "bang-dan/info",
+ "style": {
+ "navigationBarTitleText": "榜单详情",
+ "enablePullDownRefresh": false
+ }
+
+ }, {
+ "path": "online-video/online-video",
+ "style": {
+ "navigationBarTitleText": "食安辽宁线上播放",
+ "enablePullDownRefresh": false
+ }
+
+ },
+ {
+ "path": "online-video/info",
+ "style": {
+ "navigationBarTitleText": "视频",
+ "enablePullDownRefresh": false
+ }
+
+ },
+ {
+ "path": "excellent/excellent",
+ "style": {
+ "navigationBarTitleText": "名优展示",
+ "enablePullDownRefresh": false
+ }
+
+ }, {
+ "path": "consumer-consult/consumer-consult",
+ "style": {
+ "navigationBarTitleText": "消费者咨询",
+ "enablePullDownRefresh": false
+ }
+
+ }
+
+ , {
+ "path": "selfInfo/selfInfo",
+ "style": {
+ "navigationBarTitleText": "个人信息",
+ "enablePullDownRefresh": false
+ }
+
+ }, {
+ "path": "system/system",
+ "style": {
+ "navigationBarTitleText": "关于系统",
+ "enablePullDownRefresh": false
+ }
+
+ }
+ ]
+ },
+ {
+ "root": "sub-public",
+ "pages": [{
+ "path": "survey/survey",
+ "style": {
+ "navigationBarTitleText": "满意度调查"
+ }
+ },
+
+
+ {
+ "path": "enterprise-query/enterprise-query",
+ "style": {
+ "navigationBarTitleText": "企业综合查询",
+ "enablePullDownRefresh": false
+ }
+ },
+
+ {
+ "path": "shifan-chuangjian/shifan-chuangjian",
+ "style": {
+ "navigationBarTitleText": "示范创建",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "society-teach/society-teach",
+ "style": {
+ "navigationBarTitleText": "社会教育",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "oldman-teach/oldman-teach",
+ "style": {
+ "navigationBarTitleText": "老年人防骗教育",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "oldman-teach/info",
+ "style": {
+ "navigationBarTitleText": "详情",
+ "enablePullDownRefresh": false
+ }
+
+ },
+ {
+ "path": "food-lipei/food-lipei",
+ "style": {
+ "navigationBarTitleText": "理赔记录",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "shenqing-lipei/shenqing-lipei",
+ "style": {
+ "navigationBarTitleText": "申请理赔",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "shenqing-lipei/form",
+ "style": {
+ "navigationBarTitleText": "申请理赔记录",
+ "enablePullDownRefresh": false
+ }
+
+ }, {
+ "path": "lipei-info/lipei-info",
+ "style": {
+ "navigationBarTitleText": "理赔记录详情",
+ "enablePullDownRefresh": false
+ }
+ },
+
+
+
+
+
+ {
+ "path": "shifan-chuangjian/city-county-info/index",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "详情"
+ }
+
+ },
+ {
+ "path": "shifan-chuangjian/enterprise-info/index",
+ "style": {
+ "navigationBarTitleText": "企业详情",
+ "enablePullDownRefresh": false
+ }
+
+ }, {
+ "path": "enterprise-new-info/enterprise-new-info",
+ "style": {
+ "navigationBarTitleText": "企业详情",
+ "enablePullDownRefresh": false
+ // "mp-weixin": {
+ // "subNVues": [{
+ // "id": "nav", // 唯一标识
+ // "path": "sub-public/enterprise-new-info/enterpriseMap", // 页面路径
+ // "style": {
+ // "position": "absolute",
+ // "width": "100%",
+ // "height": "100%"
+ // }
+ // }]
+ // }
+
+ }
+
+ }, {
+ "path": "allPingJia/allPingJia",
+ "style": {
+ "navigationBarTitleText": "新增评价",
+ "enablePullDownRefresh": true,
+ "onReachBottomDistance": 70
+ }
+ }, {
+ "path": "addMessage/addMessage",
+ "style": {
+ "navigationBarTitleText": "我要提问",
+ "enablePullDownRefresh": false
+ }
+
+ }, {
+ "path": "newAddPJ/newAddPJ",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+
+ }
+ ]
+ },
+ {
+ "root": "sub-enterprise",
+ "pages": [{
+ "path": "company-eval/company-eval",
+ "style": {
+ "navigationBarTitleText": "主体评价情况",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "company-surver/company-surver",
+ "style": {
+ "navigationBarTitleText": "企业调查单",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "firm-form/firm-form",
+ "style": {
+ "navigationBarTitleText": "填写企业调查单",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "testing-organizations/testing-organizations",
+ "style": {
+ "navigationBarTitleText": "检测机构",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "organ-info/organ-info",
+ "style": {
+ "navigationBarTitleText": "检测机构详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "apply-claims/apply-claims",
+ "style": {
+ "navigationBarTitleText": "申请理赔",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "product-Appraise/product-Appraise",
+ "style": {
+ "navigationBarTitleText": "产品评价",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "food-toubao/food-toubao",
+ "style": {
+ "navigationBarTitleText": "食品责任投保",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "food-lipei/food-lipei",
+ "style": {
+ "navigationBarTitleText": "食责险理赔",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "will-insure/will-insure",
+ "style": {
+ "navigationBarTitleText": "我要投保",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "policy-guide/policy-guide",
+ "style": {
+ "navigationBarTitleText": "政策指南",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "policy-business/policy-business",
+ "style": {
+ "navigationBarTitleText": "连锁经营指南",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "policy-details/policy-details",
+ "style": {
+ "navigationBarTitleText": "政策指南详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "toubao-xiangqing/toubao-xiangqing",
+ "style": {
+ "navigationBarTitleText": "投保详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "toubao-xiangqing/toubao-file",
+ "style": {
+ "navigationBarTitleText": "附件预览",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "product-Info/product-Info",
+ "style": {
+ "navigationBarTitleText": "产品信息",
+ "enablePullDownRefresh": false
+ }
+ }, {
+ "path": "startInsuring/startInsuring",
+ "style": {
+ "navigationBarTitleText": "食品责任投保",
+ "enablePullDownRefresh": false
+ }
+
+ }, {
+ "path": "modelRequest/modelRequest",
+ "style": {
+ "navigationBarTitleText": "示范企业申请",
+ "enablePullDownRefresh": false
+ }
+
+ }
+ ]
+ }
+ ],
+ "tabBar": {
+ "color": "#9DA2AB",
+ "selectedColor": "#3976F1",
+ "borderStyle": "white",
+ "backgroundColor": "#ffffff",
+ "list": [
+ // {
+ // "pagePath": "pages/company-home/index",
+ // "iconPath": "static/images/liao-ning/tab-home-n.png",
+ // "selectedIconPath": "static/images/liao-ning/tab-home-s.png",
+ // "text": "首页"
+ // },
+ // {
+ // "pagePath": "pages/company-mine/index",
+ // "iconPath": "static/images/liao-ning/tab-mine-n.png",
+ // "selectedIconPath": "static/images/liao-ning/tab-mine-s.png",
+ // "text": "我的"
+ // }
+ {
+ "pagePath": "pages/public-home/index",
+ "iconPath": "static/images/liao-ning/tab-home-n.png",
+ "selectedIconPath": "static/images/liao-ning/tab-home-s.png",
+ "text": "首页"
+ },
+ {
+ "pagePath": "pages/public-mine/index",
+ "iconPath": "static/images/liao-ning/tab-mine-n.png",
+ "selectedIconPath": "static/images/liao-ning/tab-mine-s.png",
+ "text": "我的"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/pages/common/textview/index.vue b/pages/common/textview/index.vue
new file mode 100644
index 0000000..c348f6f
--- /dev/null
+++ b/pages/common/textview/index.vue
@@ -0,0 +1,43 @@
+
+
+
+ 你好
+
+
+
+
+
+
+
diff --git a/pages/common/webview/index.vue b/pages/common/webview/index.vue
new file mode 100644
index 0000000..8388c76
--- /dev/null
+++ b/pages/common/webview/index.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/pages/company-home/index.vue b/pages/company-home/index.vue
new file mode 100644
index 0000000..16d2cdc
--- /dev/null
+++ b/pages/company-home/index.vue
@@ -0,0 +1,350 @@
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/company-mine/index.vue b/pages/company-mine/index.vue
new file mode 100644
index 0000000..49f942c
--- /dev/null
+++ b/pages/company-mine/index.vue
@@ -0,0 +1,234 @@
+
+
+
+
+ 我的
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index.vue b/pages/index.vue
new file mode 100644
index 0000000..08cb2be
--- /dev/null
+++ b/pages/index.vue
@@ -0,0 +1,43 @@
+
+
+
+
+ Hello RuoYi
+
+
+
+
+
+
+
diff --git a/pages/login.vue b/pages/login.vue
new file mode 100644
index 0000000..f258f12
--- /dev/null
+++ b/pages/login.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 登 录
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mine/avatar/index.vue b/pages/mine/avatar/index.vue
new file mode 100644
index 0000000..7a874bd
--- /dev/null
+++ b/pages/mine/avatar/index.vue
@@ -0,0 +1,631 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择头像
+ 提交
+
+
+
+
+
+
+
+
+
diff --git a/pages/mine/help/index.vue b/pages/mine/help/index.vue
new file mode 100644
index 0000000..86424ac
--- /dev/null
+++ b/pages/mine/help/index.vue
@@ -0,0 +1,112 @@
+
+
+
+
+ {{ item.title }}
+
+
+
+ {{ child.title }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mine/index.vue b/pages/mine/index.vue
new file mode 100644
index 0000000..564f322
--- /dev/null
+++ b/pages/mine/index.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+
+ 交流群
+
+
+
+ 在线客服
+
+
+
+ 反馈社区
+
+
+
+ 点赞我们
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mine/info/edit.vue b/pages/mine/info/edit.vue
new file mode 100644
index 0000000..519540a
--- /dev/null
+++ b/pages/mine/info/edit.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
diff --git a/pages/mine/info/index.vue b/pages/mine/info/index.vue
new file mode 100644
index 0000000..65c861a
--- /dev/null
+++ b/pages/mine/info/index.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mine/pwd/index.vue b/pages/mine/pwd/index.vue
new file mode 100644
index 0000000..da9567f
--- /dev/null
+++ b/pages/mine/pwd/index.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
diff --git a/pages/mine/setting/index.vue b/pages/mine/setting/index.vue
new file mode 100644
index 0000000..0f9f058
--- /dev/null
+++ b/pages/mine/setting/index.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/public-home/index.vue b/pages/public-home/index.vue
new file mode 100644
index 0000000..24fe1f2
--- /dev/null
+++ b/pages/public-home/index.vue
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+
+ 扫一扫
+ 产品溯源码 商家营业执照二维码
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/public-mine/index.vue b/pages/public-mine/index.vue
new file mode 100644
index 0000000..f887493
--- /dev/null
+++ b/pages/public-mine/index.vue
@@ -0,0 +1,234 @@
+
+
+
+
+ 我的
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
diff --git a/pages/scanCodes/index.vue b/pages/scanCodes/index.vue
new file mode 100644
index 0000000..c3cc383
--- /dev/null
+++ b/pages/scanCodes/index.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/work/index.vue b/pages/work/index.vue
new file mode 100644
index 0000000..da2b502
--- /dev/null
+++ b/pages/work/index.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/permission.js b/permission.js
new file mode 100644
index 0000000..83d29a5
--- /dev/null
+++ b/permission.js
@@ -0,0 +1,39 @@
+import { getToken } from '@/utils/auth'
+
+// 登录页面
+const loginPage = "/pages/login"
+
+// 页面白名单
+const whiteList = [
+ '/pages/login', '/pages/common/webview/index'
+]
+
+// 检查地址白名单
+function checkWhite(url) {
+ const path = url.split('?')[0]
+ return whiteList.indexOf(path) !== -1
+}
+
+// 页面跳转验证拦截器
+let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]
+list.forEach(item => {
+ uni.addInterceptor(item, {
+ // invoke(to) {
+ // if (getToken()) {
+ // if (to.path === loginPage) {
+ // uni.reLaunch({ url: "/" })
+ // }
+ // return true
+ // } else {
+ // if (checkWhite(to.url)) {
+ // return true
+ // }
+ // uni.reLaunch({ url: loginPage })
+ // return false
+ // }
+ // },
+ // fail(err) {
+ // console.log(err)
+ // }
+ })
+})
diff --git a/plugins/auth.js b/plugins/auth.js
new file mode 100644
index 0000000..3b91c14
--- /dev/null
+++ b/plugins/auth.js
@@ -0,0 +1,60 @@
+import store from '@/store'
+
+function authPermission(permission) {
+ const all_permission = "*:*:*"
+ const permissions = store.getters && store.getters.permissions
+ if (permission && permission.length > 0) {
+ return permissions.some(v => {
+ return all_permission === v || v === permission
+ })
+ } else {
+ return false
+ }
+}
+
+function authRole(role) {
+ const super_admin = "admin"
+ const roles = store.getters && store.getters.roles
+ if (role && role.length > 0) {
+ return roles.some(v => {
+ return super_admin === v || v === role
+ })
+ } else {
+ return false
+ }
+}
+
+export default {
+ // 验证用户是否具备某权限
+ hasPermi(permission) {
+ return authPermission(permission)
+ },
+ // 验证用户是否含有指定权限,只需包含其中一个
+ hasPermiOr(permissions) {
+ return permissions.some(item => {
+ return authPermission(item)
+ })
+ },
+ // 验证用户是否含有指定权限,必须全部拥有
+ hasPermiAnd(permissions) {
+ return permissions.every(item => {
+ return authPermission(item)
+ })
+ },
+ // 验证用户是否具备某角色
+ hasRole(role) {
+ return authRole(role)
+ },
+ // 验证用户是否含有指定角色,只需包含其中一个
+ hasRoleOr(roles) {
+ return roles.some(item => {
+ return authRole(item)
+ })
+ },
+ // 验证用户是否含有指定角色,必须全部拥有
+ hasRoleAnd(roles) {
+ return roles.every(item => {
+ return authRole(item)
+ })
+ }
+}
diff --git a/plugins/index.js b/plugins/index.js
new file mode 100644
index 0000000..efbae15
--- /dev/null
+++ b/plugins/index.js
@@ -0,0 +1,14 @@
+import tab from './tab'
+import auth from './auth'
+import modal from './modal'
+
+export default {
+ install(Vue) {
+ // 页签操作
+ Vue.prototype.$tab = tab
+ // 认证对象
+ Vue.prototype.$auth = auth
+ // 模态框对象
+ Vue.prototype.$modal = modal
+ }
+}
diff --git a/plugins/modal.js b/plugins/modal.js
new file mode 100644
index 0000000..87960fd
--- /dev/null
+++ b/plugins/modal.js
@@ -0,0 +1,74 @@
+export default {
+ // 消息提示
+ msg(content) {
+ uni.showToast({
+ title: content,
+ icon: 'none'
+ })
+ },
+ // 错误消息
+ msgError(content) {
+ uni.showToast({
+ title: content,
+ icon: 'error'
+ })
+ },
+ // 成功消息
+ msgSuccess(content) {
+ uni.showToast({
+ title: content,
+ icon: 'success'
+ })
+ },
+ // 隐藏消息
+ hideMsg(content) {
+ uni.hideToast()
+ },
+ // 弹出提示
+ alert(content) {
+ uni.showModal({
+ title: '提示',
+ content: content,
+ showCancel: false
+ })
+ },
+ // 确认窗体
+ confirm(content) {
+ return new Promise((resolve, reject) => {
+ uni.showModal({
+ title: '系统提示',
+ content: content,
+ cancelText: '取消',
+ confirmText: '确定',
+ success: function(res) {
+ if (res.confirm) {
+ resolve(res.confirm)
+ }
+ }
+ })
+ })
+ },
+ // 提示信息
+ showToast(option) {
+ if (typeof option === "object") {
+ uni.showToast(option)
+ } else {
+ uni.showToast({
+ title: option,
+ icon: "none",
+ duration: 2500
+ })
+ }
+ },
+ // 打开遮罩层
+ loading(content) {
+ uni.showLoading({
+ title: content,
+ icon: 'none'
+ })
+ },
+ // 关闭遮罩层
+ closeLoading() {
+ uni.hideLoading()
+ }
+}
diff --git a/plugins/tab.js b/plugins/tab.js
new file mode 100644
index 0000000..5d1b305
--- /dev/null
+++ b/plugins/tab.js
@@ -0,0 +1,30 @@
+export default {
+ // 关闭所有页面,打开到应用内的某个页面
+ reLaunch(url) {
+ return uni.reLaunch({
+ url: url
+ })
+ },
+ // 跳转到tabBar页面,并关闭其他所有非tabBar页面
+ switchTab(url) {
+ return uni.switchTab({
+ url: url
+ })
+ },
+ // 关闭当前页面,跳转到应用内的某个页面
+ redirectTo(url) {
+ return uni.redirectTo({
+ url: url
+ })
+ },
+ // 保留当前页面,跳转到应用内的某个页面
+ navigateTo(url) {
+ return uni.navigateTo({
+ url: url
+ })
+ },
+ // 关闭当前页面,返回上一页面或多级页面
+ navigateBack() {
+ return uni.navigateBack()
+ }
+}
diff --git a/project.config.json b/project.config.json
new file mode 100644
index 0000000..2b7ded7
--- /dev/null
+++ b/project.config.json
@@ -0,0 +1,28 @@
+{
+ "appid": "wxe6cc36156de976cf",
+ "compileType": "miniprogram",
+ "libVersion": "2.26.0",
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "setting": {
+ "coverView": true,
+ "es6": true,
+ "postcss": true,
+ "minified": true,
+ "enhance": true,
+ "showShadowRootInWxmlPanel": true,
+ "packNpmRelationList": [],
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ }
+ },
+ "condition": {},
+ "editorSetting": {
+ "tabIndent": "insertSpaces",
+ "tabSize": 2
+ }
+}
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
new file mode 100644
index 0000000..25196e1
--- /dev/null
+++ b/project.private.config.json
@@ -0,0 +1,7 @@
+{
+ "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+ "projectname": "WujiangTaishiApp",
+ "setting": {
+ "compileHotReLoad": true
+ }
+}
\ No newline at end of file
diff --git a/static/favicon.ico b/static/favicon.ico
new file mode 100644
index 0000000..6f07782
Binary files /dev/null and b/static/favicon.ico differ
diff --git a/static/font/iconfont.css b/static/font/iconfont.css
new file mode 100644
index 0000000..39aed3d
--- /dev/null
+++ b/static/font/iconfont.css
@@ -0,0 +1,90 @@
+@font-face {
+ font-family: "iconfont";
+ src: url('/static/font/iconfont.ttf') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ display: inline-block;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-user:before {
+ content: "\e7ae";
+}
+
+.icon-password:before {
+ content: "\e8b2";
+}
+
+.icon-code:before {
+ content: "\e699";
+}
+
+.icon-setting:before {
+ content: "\e6cc";
+}
+
+.icon-share:before {
+ content: "\e739";
+}
+
+.icon-edit:before {
+ content: "\e60c";
+}
+
+.icon-version:before {
+ content: "\e63f";
+}
+
+.icon-service:before {
+ content: "\e6ff";
+}
+
+.icon-friendfill:before {
+ content: "\e726";
+}
+
+.icon-community:before {
+ content: "\e741";
+}
+
+.icon-people:before {
+ content: "\e736";
+}
+
+.icon-dianzan:before {
+ content: "\ec7f";
+}
+
+.icon-right:before {
+ content: "\e7eb";
+}
+
+.icon-logout:before {
+ content: "\e61d";
+}
+
+.icon-help:before {
+ content: "\e616";
+}
+
+.icon-github:before {
+ content: "\e628";
+}
+
+.icon-aixin:before {
+ content: "\e601";
+}
+
+.icon-clean:before {
+ content: "\e607";
+}
+
+.icon-refresh:before {
+ content: "\e604";
+}
+
diff --git a/static/font/iconfont.ttf b/static/font/iconfont.ttf
new file mode 100644
index 0000000..53915ca
Binary files /dev/null and b/static/font/iconfont.ttf differ
diff --git a/static/images/liao-ning/tab-home-n.png b/static/images/liao-ning/tab-home-n.png
new file mode 100644
index 0000000..1811301
Binary files /dev/null and b/static/images/liao-ning/tab-home-n.png differ
diff --git a/static/images/liao-ning/tab-home-s.png b/static/images/liao-ning/tab-home-s.png
new file mode 100644
index 0000000..be4b583
Binary files /dev/null and b/static/images/liao-ning/tab-home-s.png differ
diff --git a/static/images/liao-ning/tab-mine-n.png b/static/images/liao-ning/tab-mine-n.png
new file mode 100644
index 0000000..9517eff
Binary files /dev/null and b/static/images/liao-ning/tab-mine-n.png differ
diff --git a/static/images/liao-ning/tab-mine-s.png b/static/images/liao-ning/tab-mine-s.png
new file mode 100644
index 0000000..03cefe9
Binary files /dev/null and b/static/images/liao-ning/tab-mine-s.png differ
diff --git a/static/index.html b/static/index.html
new file mode 100644
index 0000000..a7af653
--- /dev/null
+++ b/static/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+ <%= htmlWebpackPlugin.options.title %>
+
+
+
+
+
+
+ 本站点必须要开启JavaScript才能运行.
+
+
+
\ No newline at end of file
diff --git a/static/logo.png b/static/logo.png
new file mode 100644
index 0000000..d4ebbf0
Binary files /dev/null and b/static/logo.png differ
diff --git a/static/scss/colorui.css b/static/scss/colorui.css
new file mode 100644
index 0000000..fade3b2
--- /dev/null
+++ b/static/scss/colorui.css
@@ -0,0 +1,3912 @@
+/*
+ ColorUi for uniApp v2.1.6 | by 文晓港 2019-05-31 10:44:24
+ 仅供学习交流,如作它用所承受的法律责任一概与作者无关
+
+ *使用ColorUi开发扩展与插件时,请注明基于ColorUi开发
+
+ (QQ交流群:240787041)
+*/
+
+/* ==================
+ 初始化
+ ==================== */
+body {
+ background-color: #f1f1f1;
+ font-size: 28upx;
+ color: #333333;
+ font-family: Helvetica Neue, Helvetica, sans-serif;
+}
+
+view,
+scroll-view,
+swiper,
+button,
+input,
+textarea,
+label,
+navigator,
+image {
+ box-sizing: border-box;
+}
+
+.round {
+ border-radius: 5000upx;
+}
+
+.radius {
+ border-radius: 6upx;
+}
+
+/* ==================
+ 图片
+ ==================== */
+
+image {
+ max-width: 100%;
+ display: inline-block;
+ position: relative;
+ z-index: 0;
+}
+
+image.loading::before {
+ content: "";
+ background-color: #f5f5f5;
+ display: block;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: -2;
+}
+
+image.loading::after {
+ content: "\e7f1";
+ font-family: "cuIcon";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 32upx;
+ height: 32upx;
+ line-height: 32upx;
+ right: 0;
+ bottom: 0;
+ z-index: -1;
+ font-size: 32upx;
+ margin: auto;
+ color: #ccc;
+ -webkit-animation: cuIcon-spin 2s infinite linear;
+ animation: cuIcon-spin 2s infinite linear;
+ display: block;
+}
+
+.response {
+ width: 100%;
+}
+
+/* ==================
+ 开关
+ ==================== */
+
+switch,
+checkbox,
+radio {
+ position: relative;
+}
+
+switch::after,
+switch::before {
+ font-family: "cuIcon";
+ content: "\e645";
+ position: absolute;
+ color: #ffffff !important;
+ top: 0%;
+ left: 0upx;
+ font-size: 26upx;
+ line-height: 26px;
+ width: 50%;
+ text-align: center;
+ pointer-events: none;
+ transform: scale(0, 0);
+ transition: all 0.3s ease-in-out 0s;
+ z-index: 9;
+ bottom: 0;
+ height: 26px;
+ margin: auto;
+}
+
+switch::before {
+ content: "\e646";
+ right: 0;
+ transform: scale(1, 1);
+ left: auto;
+}
+
+switch[checked]::after,
+switch.checked::after {
+ transform: scale(1, 1);
+}
+
+switch[checked]::before,
+switch.checked::before {
+ transform: scale(0, 0);
+}
+
+/* #ifndef MP-ALIPAY */
+radio::before,
+checkbox::before {
+ font-family: "cuIcon";
+ content: "\e645";
+ position: absolute;
+ color: #ffffff !important;
+ top: 50%;
+ margin-top: -8px;
+ right: 5px;
+ font-size: 32upx;
+ line-height: 16px;
+ pointer-events: none;
+ transform: scale(1, 1);
+ transition: all 0.3s ease-in-out 0s;
+ z-index: 9;
+}
+
+radio .wx-radio-input,
+checkbox .wx-checkbox-input,
+radio .uni-radio-input,
+checkbox .uni-checkbox-input {
+ margin: 0;
+ width: 24px;
+ height: 24px;
+}
+
+checkbox.round .wx-checkbox-input,
+checkbox.round .uni-checkbox-input {
+ border-radius: 100upx;
+}
+
+/* #endif */
+
+switch[checked]::before {
+ transform: scale(0, 0);
+}
+
+switch .wx-switch-input,
+switch .uni-switch-input {
+ border: none;
+ padding: 0 24px;
+ width: 48px;
+ height: 26px;
+ margin: 0;
+ border-radius: 100upx;
+}
+
+switch .wx-switch-input:not([class*="bg-"]),
+switch .uni-switch-input:not([class*="bg-"]) {
+ background: #8799a3 !important;
+}
+
+switch .wx-switch-input::after,
+switch .uni-switch-input::after {
+ margin: auto;
+ width: 26px;
+ height: 26px;
+ border-radius: 100upx;
+ left: 0upx;
+ top: 0upx;
+ bottom: 0upx;
+ position: absolute;
+ transform: scale(0.9, 0.9);
+ transition: all 0.1s ease-in-out 0s;
+}
+
+switch .wx-switch-input.wx-switch-input-checked::after,
+switch .uni-switch-input.uni-switch-input-checked::after {
+ margin: auto;
+ left: 22px;
+ box-shadow: none;
+ transform: scale(0.9, 0.9);
+}
+
+radio-group {
+ display: inline-block;
+}
+
+
+
+switch.radius .wx-switch-input::after,
+switch.radius .wx-switch-input,
+switch.radius .wx-switch-input::before,
+switch.radius .uni-switch-input::after,
+switch.radius .uni-switch-input,
+switch.radius .uni-switch-input::before {
+ border-radius: 10upx;
+}
+
+switch .wx-switch-input::before,
+radio.radio::before,
+checkbox .wx-checkbox-input::before,
+radio .wx-radio-input::before,
+switch .uni-switch-input::before,
+radio.radio::before,
+checkbox .uni-checkbox-input::before,
+radio .uni-radio-input::before {
+ display: none;
+}
+
+radio.radio[checked]::after,
+radio.radio .uni-radio-input-checked::after {
+ content: "";
+ background-color: transparent;
+ display: block;
+ position: absolute;
+ width: 8px;
+ height: 8px;
+ z-index: 999;
+ top: 0upx;
+ left: 0upx;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+ border-radius: 200upx;
+ /* #ifndef MP */
+ border: 7px solid #ffffff !important;
+ /* #endif */
+
+ /* #ifdef MP */
+ border: 8px solid #ffffff !important;
+ /* #endif */
+}
+
+.switch-sex::after {
+ content: "\e71c";
+}
+
+.switch-sex::before {
+ content: "\e71a";
+}
+
+.switch-sex .wx-switch-input,
+.switch-sex .uni-switch-input {
+ background: #e54d42 !important;
+ border-color: #e54d42 !important;
+}
+
+.switch-sex[checked] .wx-switch-input,
+.switch-sex.checked .uni-switch-input {
+ background: #0081ff !important;
+ border-color: #0081ff !important;
+}
+
+switch.red[checked] .wx-switch-input.wx-switch-input-checked,
+checkbox.red[checked] .wx-checkbox-input,
+radio.red[checked] .wx-radio-input,
+switch.red.checked .uni-switch-input.uni-switch-input-checked,
+checkbox.red.checked .uni-checkbox-input,
+radio.red.checked .uni-radio-input {
+ background-color: #e54d42 !important;
+ border-color: #e54d42 !important;
+ color: #ffffff !important;
+}
+
+switch.orange[checked] .wx-switch-input,
+checkbox.orange[checked] .wx-checkbox-input,
+radio.orange[checked] .wx-radio-input,
+switch.orange.checked .uni-switch-input,
+checkbox.orange.checked .uni-checkbox-input,
+radio.orange.checked .uni-radio-input {
+ background-color: #f37b1d !important;
+ border-color: #f37b1d !important;
+ color: #ffffff !important;
+}
+
+switch.yellow[checked] .wx-switch-input,
+checkbox.yellow[checked] .wx-checkbox-input,
+radio.yellow[checked] .wx-radio-input,
+switch.yellow.checked .uni-switch-input,
+checkbox.yellow.checked .uni-checkbox-input,
+radio.yellow.checked .uni-radio-input {
+ background-color: #fbbd08 !important;
+ border-color: #fbbd08 !important;
+ color: #333333 !important;
+}
+
+switch.olive[checked] .wx-switch-input,
+checkbox.olive[checked] .wx-checkbox-input,
+radio.olive[checked] .wx-radio-input,
+switch.olive.checked .uni-switch-input,
+checkbox.olive.checked .uni-checkbox-input,
+radio.olive.checked .uni-radio-input {
+ background-color: #8dc63f !important;
+ border-color: #8dc63f !important;
+ color: #ffffff !important;
+}
+
+switch.green[checked] .wx-switch-input,
+switch[checked] .wx-switch-input,
+checkbox.green[checked] .wx-checkbox-input,
+checkbox[checked] .wx-checkbox-input,
+radio.green[checked] .wx-radio-input,
+radio[checked] .wx-radio-input,
+switch.green.checked .uni-switch-input,
+switch.checked .uni-switch-input,
+checkbox.green.checked .uni-checkbox-input,
+checkbox.checked .uni-checkbox-input,
+radio.green.checked .uni-radio-input,
+radio.checked .uni-radio-input {
+ background-color: #39b54a !important;
+ border-color: #39b54a !important;
+ color: #ffffff !important;
+ border-color: #39B54A !important;
+}
+
+switch.cyan[checked] .wx-switch-input,
+checkbox.cyan[checked] .wx-checkbox-input,
+radio.cyan[checked] .wx-radio-input,
+switch.cyan.checked .uni-switch-input,
+checkbox.cyan.checked .uni-checkbox-input,
+radio.cyan.checked .uni-radio-input {
+ background-color: #1cbbb4 !important;
+ border-color: #1cbbb4 !important;
+ color: #ffffff !important;
+}
+
+switch.blue[checked] .wx-switch-input,
+checkbox.blue[checked] .wx-checkbox-input,
+radio.blue[checked] .wx-radio-input,
+switch.blue.checked .uni-switch-input,
+checkbox.blue.checked .uni-checkbox-input,
+radio.blue.checked .uni-radio-input {
+ background-color: #0081ff !important;
+ border-color: #0081ff !important;
+ color: #ffffff !important;
+}
+
+switch.purple[checked] .wx-switch-input,
+checkbox.purple[checked] .wx-checkbox-input,
+radio.purple[checked] .wx-radio-input,
+switch.purple.checked .uni-switch-input,
+checkbox.purple.checked .uni-checkbox-input,
+radio.purple.checked .uni-radio-input {
+ background-color: #6739b6 !important;
+ border-color: #6739b6 !important;
+ color: #ffffff !important;
+}
+
+switch.mauve[checked] .wx-switch-input,
+checkbox.mauve[checked] .wx-checkbox-input,
+radio.mauve[checked] .wx-radio-input,
+switch.mauve.checked .uni-switch-input,
+checkbox.mauve.checked .uni-checkbox-input,
+radio.mauve.checked .uni-radio-input {
+ background-color: #9c26b0 !important;
+ border-color: #9c26b0 !important;
+ color: #ffffff !important;
+}
+
+switch.pink[checked] .wx-switch-input,
+checkbox.pink[checked] .wx-checkbox-input,
+radio.pink[checked] .wx-radio-input,
+switch.pink.checked .uni-switch-input,
+checkbox.pink.checked .uni-checkbox-input,
+radio.pink.checked .uni-radio-input {
+ background-color: #e03997 !important;
+ border-color: #e03997 !important;
+ color: #ffffff !important;
+}
+
+switch.brown[checked] .wx-switch-input,
+checkbox.brown[checked] .wx-checkbox-input,
+radio.brown[checked] .wx-radio-input,
+switch.brown.checked .uni-switch-input,
+checkbox.brown.checked .uni-checkbox-input,
+radio.brown.checked .uni-radio-input {
+ background-color: #a5673f !important;
+ border-color: #a5673f !important;
+ color: #ffffff !important;
+}
+
+switch.grey[checked] .wx-switch-input,
+checkbox.grey[checked] .wx-checkbox-input,
+radio.grey[checked] .wx-radio-input,
+switch.grey.checked .uni-switch-input,
+checkbox.grey.checked .uni-checkbox-input,
+radio.grey.checked .uni-radio-input {
+ background-color: #8799a3 !important;
+ border-color: #8799a3 !important;
+ color: #ffffff !important;
+}
+
+switch.gray[checked] .wx-switch-input,
+checkbox.gray[checked] .wx-checkbox-input,
+radio.gray[checked] .wx-radio-input,
+switch.gray.checked .uni-switch-input,
+checkbox.gray.checked .uni-checkbox-input,
+radio.gray.checked .uni-radio-input {
+ background-color: #f0f0f0 !important;
+ border-color: #f0f0f0 !important;
+ color: #333333 !important;
+}
+
+switch.black[checked] .wx-switch-input,
+checkbox.black[checked] .wx-checkbox-input,
+radio.black[checked] .wx-radio-input,
+switch.black.checked .uni-switch-input,
+checkbox.black.checked .uni-checkbox-input,
+radio.black.checked .uni-radio-input {
+ background-color: #333333 !important;
+ border-color: #333333 !important;
+ color: #ffffff !important;
+}
+
+switch.white[checked] .wx-switch-input,
+checkbox.white[checked] .wx-checkbox-input,
+radio.white[checked] .wx-radio-input,
+switch.white.checked .uni-switch-input,
+checkbox.white.checked .uni-checkbox-input,
+radio.white.checked .uni-radio-input {
+ background-color: #ffffff !important;
+ border-color: #ffffff !important;
+ color: #333333 !important;
+}
+
+/* ==================
+ 边框
+ ==================== */
+
+/* -- 实线 -- */
+
+.solid,
+.solid-top,
+.solid-right,
+.solid-bottom,
+.solid-left,
+.solids,
+.solids-top,
+.solids-right,
+.solids-bottom,
+.solids-left,
+.dashed,
+.dashed-top,
+.dashed-right,
+.dashed-bottom,
+.dashed-left {
+ position: relative;
+}
+
+.solid::after,
+.solid-top::after,
+.solid-right::after,
+.solid-bottom::after,
+.solid-left::after,
+.solids::after,
+.solids-top::after,
+.solids-right::after,
+.solids-bottom::after,
+.solids-left::after,
+.dashed::after,
+.dashed-top::after,
+.dashed-right::after,
+.dashed-bottom::after,
+.dashed-left::after {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: inherit;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+}
+
+.solid::after {
+ border: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-top::after {
+ border-top: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-right::after {
+ border-right: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-bottom::after {
+ border-bottom: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-left::after {
+ border-left: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solids::after {
+ border: 8upx solid #eee;
+}
+
+.solids-top::after {
+ border-top: 8upx solid #eee;
+}
+
+.solids-right::after {
+ border-right: 8upx solid #eee;
+}
+
+.solids-bottom::after {
+ border-bottom: 8upx solid #eee;
+}
+
+.solids-left::after {
+ border-left: 8upx solid #eee;
+}
+
+/* -- 虚线 -- */
+
+.dashed::after {
+ border: 1upx dashed #ddd;
+}
+
+.dashed-top::after {
+ border-top: 1upx dashed #ddd;
+}
+
+.dashed-right::after {
+ border-right: 1upx dashed #ddd;
+}
+
+.dashed-bottom::after {
+ border-bottom: 1upx dashed #ddd;
+}
+
+.dashed-left::after {
+ border-left: 1upx dashed #ddd;
+}
+
+/* -- 阴影 -- */
+
+.shadow[class*='white'] {
+ --ShadowSize: 0 1upx 6upx;
+}
+
+.shadow-lg {
+ --ShadowSize: 0upx 40upx 100upx 0upx;
+}
+
+.shadow-warp {
+ position: relative;
+ box-shadow: 0 0 10upx rgba(0, 0, 0, 0.1);
+}
+
+.shadow-warp:before,
+.shadow-warp:after {
+ position: absolute;
+ content: "";
+ top: 20upx;
+ bottom: 30upx;
+ left: 20upx;
+ width: 50%;
+ box-shadow: 0 30upx 20upx rgba(0, 0, 0, 0.2);
+ transform: rotate(-3deg);
+ z-index: -1;
+}
+
+.shadow-warp:after {
+ right: 20upx;
+ left: auto;
+ transform: rotate(3deg);
+}
+
+.shadow-blur {
+ position: relative;
+}
+
+.shadow-blur::before {
+ content: "";
+ display: block;
+ background: inherit;
+ filter: blur(10upx);
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 10upx;
+ left: 10upx;
+ z-index: -1;
+ opacity: 0.4;
+ transform-origin: 0 0;
+ border-radius: inherit;
+ transform: scale(1, 1);
+}
+
+/* ==================
+ 按钮
+ ==================== */
+
+.cu-btn {
+ position: relative;
+ border: 0upx;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ padding: 0 30upx;
+ font-size: 28upx;
+ height: 64upx;
+ line-height: 1;
+ text-align: center;
+ text-decoration: none;
+ overflow: visible;
+ margin-left: initial;
+ transform: translate(0upx, 0upx);
+ margin-right: initial;
+}
+
+.cu-btn::after {
+ display: none;
+}
+
+.cu-btn:not([class*="bg-"]) {
+ background-color: #f0f0f0;
+}
+
+.cu-btn[class*="line"] {
+ background-color: transparent;
+}
+
+.cu-btn[class*="line"]::after {
+ content: " ";
+ display: block;
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border: 1upx solid currentColor;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ box-sizing: border-box;
+ border-radius: 12upx;
+ z-index: 1;
+ pointer-events: none;
+}
+
+.cu-btn.round[class*="line"]::after {
+ border-radius: 1000upx;
+}
+
+.cu-btn[class*="lines"]::after {
+ border: 6upx solid currentColor;
+}
+
+.cu-btn[class*="bg-"]::after {
+ display: none;
+}
+
+.cu-btn.sm {
+ padding: 0 20upx;
+ font-size: 20upx;
+ height: 48upx;
+}
+
+.cu-btn.lg {
+ padding: 0 40upx;
+ font-size: 32upx;
+ height: 80upx;
+}
+
+.cu-btn.cuIcon.sm {
+ width: 48upx;
+ height: 48upx;
+}
+
+.cu-btn.cuIcon {
+ width: 64upx;
+ height: 64upx;
+ border-radius: 500upx;
+ padding: 0;
+}
+
+button.cuIcon.lg {
+ width: 80upx;
+ height: 80upx;
+}
+
+.cu-btn.shadow-blur::before {
+ top: 4upx;
+ left: 4upx;
+ filter: blur(6upx);
+ opacity: 0.6;
+}
+
+.cu-btn.button-hover {
+ transform: translate(1upx, 1upx);
+}
+
+.block {
+ display: block;
+}
+
+.cu-btn.block {
+ display: flex;
+}
+
+.cu-btn[disabled] {
+ opacity: 0.6;
+ color: #ffffff;
+}
+
+/* ==================
+ 徽章
+ ==================== */
+
+.cu-tag {
+ font-size: 24upx;
+ vertical-align: middle;
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ padding: 0upx 16upx;
+ height: 48upx;
+ font-family: Helvetica Neue, Helvetica, sans-serif;
+ white-space: nowrap;
+}
+
+.cu-tag:not([class*="bg"]):not([class*="line"]) {
+ background-color: #f1f1f1;
+}
+
+.cu-tag[class*="line-"]::after {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border: 1upx solid currentColor;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ box-sizing: border-box;
+ border-radius: inherit;
+ z-index: 1;
+ pointer-events: none;
+}
+
+.cu-tag.radius[class*="line"]::after {
+ border-radius: 12upx;
+}
+
+.cu-tag.round[class*="line"]::after {
+ border-radius: 1000upx;
+}
+
+.cu-tag[class*="line-"]::after {
+ border-radius: 0;
+}
+
+.cu-tag+.cu-tag {
+ margin-left: 10upx;
+}
+
+.cu-tag.sm {
+ font-size: 20upx;
+ padding: 0upx 12upx;
+ height: 32upx;
+}
+
+.cu-capsule {
+ display: inline-flex;
+ vertical-align: middle;
+}
+
+.cu-capsule+.cu-capsule {
+ margin-left: 10upx;
+}
+
+.cu-capsule .cu-tag {
+ margin: 0;
+}
+
+.cu-capsule .cu-tag[class*="line-"]:last-child::after {
+ border-left: 0upx solid transparent;
+}
+
+.cu-capsule .cu-tag[class*="line-"]:first-child::after {
+ border-right: 0upx solid transparent;
+}
+
+.cu-capsule.radius .cu-tag:first-child {
+ border-top-left-radius: 6upx;
+ border-bottom-left-radius: 6upx;
+}
+
+.cu-capsule.radius .cu-tag:last-child::after,
+.cu-capsule.radius .cu-tag[class*="line-"] {
+ border-top-right-radius: 12upx;
+ border-bottom-right-radius: 12upx;
+}
+
+.cu-capsule.round .cu-tag:first-child {
+ border-top-left-radius: 200upx;
+ border-bottom-left-radius: 200upx;
+ text-indent: 4upx;
+}
+
+.cu-capsule.round .cu-tag:last-child::after,
+.cu-capsule.round .cu-tag:last-child {
+ border-top-right-radius: 200upx;
+ border-bottom-right-radius: 200upx;
+ text-indent: -4upx;
+}
+
+.cu-tag.badge {
+ border-radius: 200upx;
+ position: absolute;
+ top: -10upx;
+ right: -10upx;
+ font-size: 20upx;
+ padding: 0upx 10upx;
+ height: 28upx;
+ color: #ffffff;
+}
+
+.cu-tag.badge:not([class*="bg-"]) {
+ background-color: #dd514c;
+}
+
+.cu-tag:empty:not([class*="cuIcon-"]) {
+ padding: 0upx;
+ width: 16upx;
+ height: 16upx;
+ top: -4upx;
+ right: -4upx;
+}
+
+.cu-tag[class*="cuIcon-"] {
+ width: 32upx;
+ height: 32upx;
+ top: -4upx;
+ right: -4upx;
+}
+
+/* ==================
+ 头像
+ ==================== */
+
+.cu-avatar {
+ font-variant: small-caps;
+ margin: 0;
+ padding: 0;
+ display: inline-flex;
+ text-align: center;
+ justify-content: center;
+ align-items: center;
+ background-color: #ccc;
+ color: #ffffff;
+ white-space: nowrap;
+ position: relative;
+ width: 64upx;
+ height: 64upx;
+ background-size: cover;
+ background-position: center;
+ vertical-align: middle;
+ font-size: 1.5em;
+}
+
+.cu-avatar.sm {
+ width: 48upx;
+ height: 48upx;
+ font-size: 1em;
+}
+
+.cu-avatar.lg {
+ width: 96upx;
+ height: 96upx;
+ font-size: 2em;
+}
+
+.cu-avatar.xl {
+ width: 128upx;
+ height: 128upx;
+ font-size: 2.5em;
+}
+
+.cu-avatar .avatar-text {
+ font-size: 0.4em;
+}
+
+.cu-avatar-group {
+ direction: rtl;
+ unicode-bidi: bidi-override;
+ padding: 0 10upx 0 40upx;
+ display: inline-block;
+}
+
+.cu-avatar-group .cu-avatar {
+ margin-left: -30upx;
+ border: 4upx solid #f1f1f1;
+ vertical-align: middle;
+}
+
+.cu-avatar-group .cu-avatar.sm {
+ margin-left: -20upx;
+ border: 1upx solid #f1f1f1;
+}
+
+/* ==================
+ 进度条
+ ==================== */
+
+.cu-progress {
+ overflow: hidden;
+ height: 28upx;
+ background-color: #ebeef5;
+ display: inline-flex;
+ align-items: center;
+ width: 100%;
+}
+
+.cu-progress+view,
+.cu-progress+text {
+ line-height: 1;
+}
+
+.cu-progress.xs {
+ height: 10upx;
+}
+
+.cu-progress.sm {
+ height: 20upx;
+}
+
+.cu-progress view {
+ width: 0;
+ height: 100%;
+ align-items: center;
+ display: flex;
+ justify-items: flex-end;
+ justify-content: space-around;
+ font-size: 20upx;
+ color: #ffffff;
+ transition: width 0.6s ease;
+}
+
+.cu-progress text {
+ align-items: center;
+ display: flex;
+ font-size: 20upx;
+ color: #333333;
+ text-indent: 10upx;
+}
+
+.cu-progress.text-progress {
+ padding-right: 60upx;
+}
+
+.cu-progress.striped view {
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-size: 72upx 72upx;
+}
+
+.cu-progress.active view {
+ animation: progress-stripes 2s linear infinite;
+}
+
+@keyframes progress-stripes {
+ from {
+ background-position: 72upx 0;
+ }
+
+ to {
+ background-position: 0 0;
+ }
+}
+
+/* ==================
+ 加载
+ ==================== */
+
+.cu-load {
+ display: block;
+ line-height: 3em;
+ text-align: center;
+}
+
+.cu-load::before {
+ font-family: "cuIcon";
+ display: inline-block;
+ margin-right: 6upx;
+}
+
+.cu-load.loading::before {
+ content: "\e67a";
+ animation: cuIcon-spin 2s infinite linear;
+}
+
+.cu-load.loading::after {
+ content: "加载中...";
+}
+
+.cu-load.over::before {
+ content: "\e64a";
+}
+
+.cu-load.over::after {
+ content: "没有更多了";
+}
+
+.cu-load.erro::before {
+ content: "\e658";
+}
+
+.cu-load.erro::after {
+ content: "加载失败";
+}
+
+.cu-load.load-cuIcon::before {
+ font-size: 32upx;
+}
+
+.cu-load.load-cuIcon::after {
+ display: none;
+}
+
+.cu-load.load-cuIcon.over {
+ display: none;
+}
+
+.cu-load.load-modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 140upx;
+ left: 0;
+ margin: auto;
+ width: 260upx;
+ height: 260upx;
+ background-color: #ffffff;
+ border-radius: 10upx;
+ box-shadow: 0 0 0upx 2000upx rgba(0, 0, 0, 0.5);
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ justify-content: center;
+ font-size: 28upx;
+ z-index: 9999;
+ line-height: 2.4em;
+}
+
+.cu-load.load-modal [class*="cuIcon-"] {
+ font-size: 60upx;
+}
+
+.cu-load.load-modal image {
+ width: 70upx;
+ height: 70upx;
+}
+
+.cu-load.load-modal::after {
+ content: "";
+ position: absolute;
+ background-color: #ffffff;
+ border-radius: 50%;
+ width: 200upx;
+ height: 200upx;
+ font-size: 10px;
+ border-top: 6upx solid rgba(0, 0, 0, 0.05);
+ border-right: 6upx solid rgba(0, 0, 0, 0.05);
+ border-bottom: 6upx solid rgba(0, 0, 0, 0.05);
+ border-left: 6upx solid #f37b1d;
+ animation: cuIcon-spin 1s infinite linear;
+ z-index: -1;
+}
+
+.load-progress {
+ pointer-events: none;
+ top: 0;
+ position: fixed;
+ width: 100%;
+ left: 0;
+ z-index: 2000;
+}
+
+.load-progress.hide {
+ display: none;
+}
+
+.load-progress .load-progress-bar {
+ position: relative;
+ width: 100%;
+ height: 4upx;
+ overflow: hidden;
+ transition: all 200ms ease 0s;
+}
+
+.load-progress .load-progress-spinner {
+ position: absolute;
+ top: 10upx;
+ right: 10upx;
+ z-index: 2000;
+ display: block;
+}
+
+.load-progress .load-progress-spinner::after {
+ content: "";
+ display: block;
+ width: 24upx;
+ height: 24upx;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ border: solid 4upx transparent;
+ border-top-color: inherit;
+ border-left-color: inherit;
+ border-radius: 50%;
+ -webkit-animation: load-progress-spinner 0.4s linear infinite;
+ animation: load-progress-spinner 0.4s linear infinite;
+}
+
+@-webkit-keyframes load-progress-spinner {
+ 0% {
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ }
+
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+
+@keyframes load-progress-spinner {
+ 0% {
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ }
+
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+
+/* ==================
+ 列表
+ ==================== */
+.grayscale {
+ filter: grayscale(1);
+}
+
+.cu-list+.cu-list {
+ margin-top: 30upx
+}
+
+.cu-list>.cu-item {
+ transition: all .6s ease-in-out 0s;
+ transform: translateX(0upx)
+}
+
+.cu-list>.cu-item.move-cur {
+ transform: translateX(-260upx)
+}
+
+.cu-list>.cu-item .move {
+ position: absolute;
+ right: 0;
+ display: flex;
+ width: 260upx;
+ height: 100%;
+ transform: translateX(100%)
+}
+
+.cu-list>.cu-item .move view {
+ display: flex;
+ flex: 1;
+ justify-content: center;
+ align-items: center
+}
+
+.cu-list.menu-avatar {
+ overflow: hidden;
+}
+
+.cu-list.menu-avatar>.cu-item {
+ position: relative;
+ display: flex;
+ padding-right: 10upx;
+ height: 140upx;
+ background-color: #ffffff;
+ justify-content: flex-end;
+ align-items: center
+}
+
+.cu-list.menu-avatar>.cu-item>.cu-avatar {
+ position: absolute;
+ left: 30upx
+}
+
+.cu-list.menu-avatar>.cu-item .flex .text-cut {
+ max-width: 510upx
+}
+
+.cu-list.menu-avatar>.cu-item .content {
+ position: absolute;
+ left: 146upx;
+ width: calc(100% - 96upx - 60upx - 120upx - 20upx);
+ line-height: 1.6em;
+}
+
+.cu-list.menu-avatar>.cu-item .content.flex-sub {
+ width: calc(100% - 96upx - 60upx - 20upx);
+}
+
+.cu-list.menu-avatar>.cu-item .content>view:first-child {
+ font-size: 30upx;
+ display: flex;
+ align-items: center
+}
+
+.cu-list.menu-avatar>.cu-item .content .cu-tag.sm {
+ display: inline-block;
+ margin-left: 10upx;
+ height: 28upx;
+ font-size: 16upx;
+ line-height: 32upx
+}
+
+.cu-list.menu-avatar>.cu-item .action {
+ width: 100upx;
+ text-align: center
+}
+
+.cu-list.menu-avatar>.cu-item .action view+view {
+ margin-top: 10upx
+}
+
+.cu-list.menu-avatar.comment>.cu-item .content {
+ position: relative;
+ left: 0;
+ width: auto;
+ flex: 1;
+}
+
+.cu-list.menu-avatar.comment>.cu-item {
+ padding: 30upx 30upx 30upx 120upx;
+ height: auto
+}
+
+.cu-list.menu-avatar.comment .cu-avatar {
+ align-self: flex-start
+}
+
+.cu-list.menu>.cu-item {
+ position: relative;
+ display: flex;
+ padding: 0 30upx;
+ min-height: 100upx;
+ background-color: #ffffff;
+ justify-content: space-between;
+ align-items: center
+}
+
+.cu-list.menu>.cu-item:last-child:after {
+ border: none
+}
+
+.cu-list.menu-avatar>.cu-item:after,
+.cu-list.menu>.cu-item:after {
+ position: absolute;
+ top: 0;
+ left: 0;
+ box-sizing: border-box;
+ width: 200%;
+ height: 200%;
+ border-bottom: 1upx solid #ddd;
+ border-radius: inherit;
+ content: " ";
+ transform: scale(.5);
+ transform-origin: 0 0;
+ pointer-events: none
+}
+
+.cu-list.menu>.cu-item.grayscale {
+ background-color: #f5f5f5
+}
+
+.cu-list.menu>.cu-item.cur {
+ background-color: #fcf7e9
+}
+
+.cu-list.menu>.cu-item.arrow {
+ padding-right: 90upx
+}
+
+.cu-list.menu>.cu-item.arrow:before {
+ position: absolute;
+ top: 0;
+ right: 30upx;
+ bottom: 0;
+ display: block;
+ margin: auto;
+ width: 30upx;
+ height: 30upx;
+ color: #8799a3;
+ content: "\e6a3";
+ text-align: center;
+ font-size: 34upx;
+ font-family: cuIcon;
+ line-height: 30upx
+}
+
+.cu-list.menu>.cu-item button.content {
+ padding: 0;
+ background-color: transparent;
+ justify-content: flex-start
+}
+
+.cu-list.menu>.cu-item button.content:after {
+ display: none
+}
+
+.cu-list.menu>.cu-item .cu-avatar-group .cu-avatar {
+ border-color: #ffffff
+}
+
+.cu-list.menu>.cu-item .content>view:first-child {
+ display: flex;
+ align-items: center
+}
+
+.cu-list.menu>.cu-item .content>text[class*=cuIcon] {
+ display: inline-block;
+ margin-right: 10upx;
+ width: 1.6em;
+ text-align: center
+}
+
+.cu-list.menu>.cu-item .content>image {
+ display: inline-block;
+ margin-right: 10upx;
+ width: 1.6em;
+ height: 1.6em;
+ vertical-align: middle
+}
+
+.cu-list.menu>.cu-item .content {
+ font-size: 30upx;
+ line-height: 1.6em;
+ flex: 1
+}
+
+.cu-list.menu>.cu-item .content .cu-tag.sm {
+ display: inline-block;
+ margin-left: 10upx;
+ height: 28upx;
+ font-size: 16upx;
+ line-height: 32upx
+}
+
+.cu-list.menu>.cu-item .action .cu-tag:empty {
+ right: 10upx
+}
+
+.cu-list.menu {
+ display: block;
+ overflow: hidden
+}
+
+.cu-list.menu.sm-border>.cu-item:after {
+ left: 30upx;
+ width: calc(200% - 120upx)
+}
+
+.cu-list.grid>.cu-item {
+ position: relative;
+ display: flex;
+ padding: 20upx 0 30upx;
+ transition-duration: 0s;
+ flex-direction: column
+}
+
+.cu-list.grid>.cu-item:after {
+ position: absolute;
+ top: 0;
+ left: 0;
+ box-sizing: border-box;
+ width: 200%;
+ height: 200%;
+ border-right: 1px solid rgba(0, 0, 0, .1);
+ border-bottom: 1px solid rgba(0, 0, 0, .1);
+ border-radius: inherit;
+ content: " ";
+ transform: scale(.5);
+ transform-origin: 0 0;
+ pointer-events: none
+}
+
+.cu-list.grid>.cu-item text {
+ display: block;
+ margin-top: 10upx;
+ color: #888;
+ font-size: 26upx;
+ line-height: 40upx
+}
+
+.cu-list.grid>.cu-item [class*=cuIcon] {
+ position: relative;
+ display: block;
+ margin-top: 20upx;
+ width: 100%;
+ font-size: 48upx
+}
+
+.cu-list.grid>.cu-item .cu-tag {
+ right: auto;
+ left: 50%;
+ margin-left: 20upx
+}
+
+.cu-list.grid {
+ background-color: #ffffff;
+ text-align: center
+}
+
+.cu-list.grid.no-border>.cu-item {
+ padding-top: 10upx;
+ padding-bottom: 20upx
+}
+
+.cu-list.grid.no-border>.cu-item:after {
+ border: none
+}
+
+.cu-list.grid.no-border {
+ padding: 20upx 10upx
+}
+
+.cu-list.grid.col-3>.cu-item:nth-child(3n):after,
+.cu-list.grid.col-4>.cu-item:nth-child(4n):after,
+.cu-list.grid.col-5>.cu-item:nth-child(5n):after {
+ border-right-width: 0
+}
+
+.cu-list.card-menu {
+ overflow: hidden;
+ margin-right: 30upx;
+ margin-left: 30upx;
+ border-radius: 20upx
+}
+
+
+/* ==================
+ 操作条
+ ==================== */
+
+.cu-bar {
+ display: flex;
+ position: relative;
+ align-items: center;
+ min-height: 100upx;
+ justify-content: space-between;
+}
+
+.cu-bar .action {
+ display: flex;
+ align-items: center;
+ height: 100%;
+ justify-content: center;
+ max-width: 100%;
+}
+
+.cu-bar .action.border-title {
+ position: relative;
+ top: -10upx;
+}
+
+.cu-bar .action.border-title text[class*="bg-"]:last-child {
+ position: absolute;
+ bottom: -0.5rem;
+ min-width: 2rem;
+ height: 6upx;
+ left: 0;
+}
+
+.cu-bar .action.sub-title {
+ position: relative;
+ top: -0.2rem;
+}
+
+.cu-bar .action.sub-title text {
+ position: relative;
+ z-index: 1;
+}
+
+.cu-bar .action.sub-title text[class*="bg-"]:last-child {
+ position: absolute;
+ display: inline-block;
+ bottom: -0.2rem;
+ border-radius: 6upx;
+ width: 100%;
+ height: 0.6rem;
+ left: 0.6rem;
+ opacity: 0.3;
+ z-index: 0;
+}
+
+.cu-bar .action.sub-title text[class*="text-"]:last-child {
+ position: absolute;
+ display: inline-block;
+ bottom: -0.7rem;
+ left: 0.5rem;
+ opacity: 0.2;
+ z-index: 0;
+ text-align: right;
+ font-weight: 900;
+ font-size: 36upx;
+}
+
+.cu-bar.justify-center .action.border-title text:last-child,
+.cu-bar.justify-center .action.sub-title text:last-child {
+ left: 0;
+ right: 0;
+ margin: auto;
+ text-align: center;
+}
+
+.cu-bar .action:first-child {
+ margin-left: 30upx;
+ font-size: 30upx;
+}
+
+.cu-bar .action text.text-cut {
+ text-align: left;
+ width: 100%;
+}
+
+.cu-bar .cu-avatar:first-child {
+ margin-left: 20upx;
+}
+
+.cu-bar .action:first-child>text[class*="cuIcon-"] {
+ margin-left: -0.3em;
+ margin-right: 0.3em;
+}
+
+.cu-bar .action:last-child {
+ margin-right: 30upx;
+}
+
+.cu-bar .action>text[class*="cuIcon-"],
+.cu-bar .action>view[class*="cuIcon-"] {
+ font-size: 36upx;
+}
+
+.cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"] {
+ margin-left: 0.5em;
+}
+
+.cu-bar .content {
+ position: absolute;
+ text-align: center;
+ width: calc(100% - 340upx);
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ margin: auto;
+ height: 60upx;
+ font-size: 32upx;
+ line-height: 60upx;
+ cursor: none;
+ pointer-events: none;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.cu-bar.ios .content {
+ bottom: 7px;
+ height: 30px;
+ font-size: 32upx;
+ line-height: 30px;
+}
+
+.cu-bar.btn-group {
+ justify-content: space-around;
+}
+
+.cu-bar.btn-group button {
+ padding: 20upx 32upx;
+}
+
+.cu-bar.btn-group button {
+ flex: 1;
+ margin: 0 20upx;
+ max-width: 50%;
+}
+
+.cu-bar .search-form {
+ background-color: #f5f5f5;
+ line-height: 64upx;
+ height: 64upx;
+ font-size: 24upx;
+ color: #333333;
+ flex: 1;
+ display: flex;
+ align-items: center;
+ margin: 0 30upx;
+}
+
+.cu-bar .search-form+.action {
+ margin-right: 30upx;
+}
+
+.cu-bar .search-form input {
+ flex: 1;
+ padding-right: 30upx;
+ height: 64upx;
+ line-height: 64upx;
+ font-size: 26upx;
+ background-color: transparent;
+}
+
+.cu-bar .search-form [class*="cuIcon-"] {
+ margin: 0 0.5em 0 0.8em;
+}
+
+.cu-bar .search-form [class*="cuIcon-"]::before {
+ top: 0upx;
+}
+
+.cu-bar.fixed,
+.nav.fixed {
+ position: fixed;
+ width: 100%;
+ top: 0;
+ z-index: 1024;
+ box-shadow: 0 1upx 6upx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.foot {
+ position: fixed;
+ width: 100%;
+ bottom: 0;
+ z-index: 1024;
+ box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.tabbar {
+ padding: 0;
+ height: calc(100upx + env(safe-area-inset-bottom) / 2);
+ padding-bottom: calc(env(safe-area-inset-bottom) / 2);
+}
+
+.cu-tabbar-height {
+ min-height: 100upx;
+ height: calc(100upx + env(safe-area-inset-bottom) / 2);
+}
+
+.cu-bar.tabbar.shadow {
+ box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.tabbar .action {
+ font-size: 22upx;
+ position: relative;
+ flex: 1;
+ text-align: center;
+ padding: 0;
+ display: block;
+ height: auto;
+ line-height: 1;
+ margin: 0;
+ background-color: inherit;
+ overflow: initial;
+}
+
+.cu-bar.tabbar.shop .action {
+ width: 140upx;
+ flex: initial;
+}
+
+.cu-bar.tabbar .action.add-action {
+ position: relative;
+ z-index: 2;
+ padding-top: 50upx;
+}
+
+.cu-bar.tabbar .action.add-action [class*="cuIcon-"] {
+ position: absolute;
+ width: 70upx;
+ z-index: 2;
+ height: 70upx;
+ border-radius: 50%;
+ line-height: 70upx;
+ font-size: 50upx;
+ top: -35upx;
+ left: 0;
+ right: 0;
+ margin: auto;
+ padding: 0;
+}
+
+.cu-bar.tabbar .action.add-action::after {
+ content: "";
+ position: absolute;
+ width: 100upx;
+ height: 100upx;
+ top: -50upx;
+ left: 0;
+ right: 0;
+ margin: auto;
+ box-shadow: 0 -3upx 8upx rgba(0, 0, 0, 0.08);
+ border-radius: 50upx;
+ background-color: inherit;
+ z-index: 0;
+}
+
+.cu-bar.tabbar .action.add-action::before {
+ content: "";
+ position: absolute;
+ width: 100upx;
+ height: 30upx;
+ bottom: 30upx;
+ left: 0;
+ right: 0;
+ margin: auto;
+ background-color: inherit;
+ z-index: 1;
+}
+
+.cu-bar.tabbar .btn-group {
+ flex: 1;
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ padding: 0 10upx;
+}
+
+.cu-bar.tabbar button.action::after {
+ border: 0;
+}
+
+.cu-bar.tabbar .action [class*="cuIcon-"] {
+ width: 100upx;
+ position: relative;
+ display: block;
+ height: auto;
+ margin: 0 auto 10upx;
+ text-align: center;
+ font-size: 40upx;
+}
+
+.cu-bar.tabbar .action .cuIcon-cu-image {
+ margin: 0 auto;
+}
+
+.cu-bar.tabbar .action .cuIcon-cu-image image {
+ width: 50upx;
+ height: 50upx;
+ display: inline-block;
+}
+
+.cu-bar.tabbar .submit {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ text-align: center;
+ position: relative;
+ flex: 2;
+ align-self: stretch;
+}
+
+.cu-bar.tabbar .submit:last-child {
+ flex: 2.6;
+}
+
+.cu-bar.tabbar .submit+.submit {
+ flex: 2;
+}
+
+.cu-bar.tabbar.border .action::before {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ border-right: 1upx solid rgba(0, 0, 0, 0.1);
+ z-index: 3;
+}
+
+.cu-bar.tabbar.border .action:last-child:before {
+ display: none;
+}
+
+.cu-bar.input {
+ padding-right: 20upx;
+ background-color: #ffffff;
+}
+
+.cu-bar.input input {
+ overflow: initial;
+ line-height: 64upx;
+ height: 64upx;
+ min-height: 64upx;
+ flex: 1;
+ font-size: 30upx;
+ margin: 0 20upx;
+}
+
+.cu-bar.input .action {
+ margin-left: 20upx;
+}
+
+.cu-bar.input .action [class*="cuIcon-"] {
+ font-size: 48upx;
+}
+
+.cu-bar.input input+.action {
+ margin-right: 20upx;
+ margin-left: 0upx;
+}
+
+.cu-bar.input .action:first-child [class*="cuIcon-"] {
+ margin-left: 0upx;
+}
+
+.cu-custom {
+ display: block;
+ position: relative;
+}
+
+.cu-custom .cu-bar .content {
+ width: calc(100% - 440upx);
+}
+
+/* #ifdef MP-ALIPAY */
+.cu-custom .cu-bar .action .cuIcon-back {
+ opacity: 0;
+}
+
+/* #endif */
+
+.cu-custom .cu-bar .content image {
+ height: 60upx;
+ width: 240upx;
+}
+
+.cu-custom .cu-bar {
+ min-height: 0px;
+ /* #ifdef MP-WEIXIN */
+ padding-right: 220upx;
+ /* #endif */
+ /* #ifdef MP-ALIPAY */
+ padding-right: 150upx;
+ /* #endif */
+ box-shadow: 0upx 0upx 0upx;
+ z-index: 9999;
+}
+
+.cu-custom .cu-bar .border-custom {
+ position: relative;
+ background: rgba(0, 0, 0, 0.15);
+ border-radius: 1000upx;
+ height: 30px;
+}
+
+.cu-custom .cu-bar .border-custom::after {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: inherit;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ border: 1upx solid #ffffff;
+ opacity: 0.5;
+}
+
+.cu-custom .cu-bar .border-custom::before {
+ content: " ";
+ width: 1upx;
+ height: 110%;
+ position: absolute;
+ top: 22.5%;
+ left: 0;
+ right: 0;
+ margin: auto;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ opacity: 0.6;
+ background-color: #ffffff;
+}
+
+.cu-custom .cu-bar .border-custom text {
+ display: block;
+ flex: 1;
+ margin: auto !important;
+ text-align: center;
+ font-size: 34upx;
+}
+
+/* ==================
+ 导航栏
+ ==================== */
+
+.nav {
+ white-space: nowrap;
+}
+
+::-webkit-scrollbar {
+ display: none;
+}
+
+.nav .cu-item {
+ height: 90upx;
+ display: inline-block;
+ line-height: 90upx;
+ margin: 0 10upx;
+ padding: 0 20upx;
+}
+
+.nav .cu-item.cur {
+ border-bottom: 4upx solid;
+}
+
+/* ==================
+ 时间轴
+ ==================== */
+
+.cu-timeline {
+ display: block;
+ background-color: #ffffff;
+}
+
+.cu-timeline .cu-time {
+ width: 120upx;
+ text-align: center;
+ padding: 20upx 0;
+ font-size: 26upx;
+ color: #888;
+ display: block;
+}
+
+.cu-timeline>.cu-item {
+ padding: 30upx 30upx 30upx 120upx;
+ position: relative;
+ display: block;
+ z-index: 0;
+}
+
+.cu-timeline>.cu-item:not([class*="text-"]) {
+ color: #ccc;
+}
+
+.cu-timeline>.cu-item::after {
+ content: "";
+ display: block;
+ position: absolute;
+ width: 1upx;
+ background-color: #ddd;
+ left: 60upx;
+ height: 100%;
+ top: 0;
+ z-index: 8;
+}
+
+.cu-timeline>.cu-item::before {
+ font-family: "cuIcon";
+ display: block;
+ position: absolute;
+ top: 36upx;
+ z-index: 9;
+ background-color: #ffffff;
+ width: 50upx;
+ height: 50upx;
+ text-align: center;
+ border: none;
+ line-height: 50upx;
+ left: 36upx;
+}
+
+.cu-timeline>.cu-item:not([class*="cuIcon-"])::before {
+ content: "\e763";
+}
+
+.cu-timeline>.cu-item[class*="cuIcon-"]::before {
+ background-color: #ffffff;
+ width: 50upx;
+ height: 50upx;
+ text-align: center;
+ border: none;
+ line-height: 50upx;
+ left: 36upx;
+}
+
+.cu-timeline>.cu-item>.content {
+ padding: 30upx;
+ border-radius: 6upx;
+ display: block;
+ line-height: 1.6;
+}
+
+.cu-timeline>.cu-item>.content:not([class*="bg-"]) {
+ background-color: #f1f1f1;
+ color: #333333;
+}
+
+.cu-timeline>.cu-item>.content+.content {
+ margin-top: 20upx;
+}
+
+/* ==================
+ 聊天
+ ==================== */
+
+.cu-chat {
+ display: flex;
+ flex-direction: column;
+}
+
+.cu-chat .cu-item {
+ display: flex;
+ padding: 30upx 30upx 70upx;
+ position: relative;
+}
+
+.cu-chat .cu-item>.cu-avatar {
+ width: 80upx;
+ height: 80upx;
+}
+
+.cu-chat .cu-item>.main {
+ max-width: calc(100% - 260upx);
+ margin: 0 40upx;
+ display: flex;
+ align-items: center;
+}
+
+.cu-chat .cu-item>image {
+ height: 320upx;
+}
+
+.cu-chat .cu-item>.main .content {
+ padding: 20upx;
+ border-radius: 6upx;
+ display: inline-flex;
+ max-width: 100%;
+ align-items: center;
+ font-size: 30upx;
+ position: relative;
+ min-height: 80upx;
+ line-height: 40upx;
+ text-align: left;
+}
+
+.cu-chat .cu-item>.main .content:not([class*="bg-"]) {
+ background-color: #ffffff;
+ color: #333333;
+}
+
+.cu-chat .cu-item .date {
+ position: absolute;
+ font-size: 24upx;
+ color: #8799a3;
+ width: calc(100% - 320upx);
+ bottom: 20upx;
+ left: 160upx;
+}
+
+.cu-chat .cu-item .action {
+ padding: 0 30upx;
+ display: flex;
+ align-items: center;
+}
+
+.cu-chat .cu-item>.main .content::after {
+ content: "";
+ top: 27upx;
+ transform: rotate(45deg);
+ position: absolute;
+ z-index: 100;
+ display: inline-block;
+ overflow: hidden;
+ width: 24upx;
+ height: 24upx;
+ left: -12upx;
+ right: initial;
+ background-color: inherit;
+}
+
+.cu-chat .cu-item.self>.main .content::after {
+ left: auto;
+ right: -12upx;
+}
+
+.cu-chat .cu-item>.main .content::before {
+ content: "";
+ top: 30upx;
+ transform: rotate(45deg);
+ position: absolute;
+ z-index: -1;
+ display: inline-block;
+ overflow: hidden;
+ width: 24upx;
+ height: 24upx;
+ left: -12upx;
+ right: initial;
+ background-color: inherit;
+ filter: blur(5upx);
+ opacity: 0.3;
+}
+
+.cu-chat .cu-item>.main .content:not([class*="bg-"])::before {
+ background-color: #333333;
+ opacity: 0.1;
+}
+
+.cu-chat .cu-item.self>.main .content::before {
+ left: auto;
+ right: -12upx;
+}
+
+.cu-chat .cu-item.self {
+ justify-content: flex-end;
+ text-align: right;
+}
+
+.cu-chat .cu-info {
+ display: inline-block;
+ margin: 20upx auto;
+ font-size: 24upx;
+ padding: 8upx 12upx;
+ background-color: rgba(0, 0, 0, 0.2);
+ border-radius: 6upx;
+ color: #ffffff;
+ max-width: 400upx;
+ line-height: 1.4;
+}
+
+/* ==================
+ 卡片
+ ==================== */
+
+.cu-card {
+ display: block;
+ overflow: hidden;
+}
+
+.cu-card>.cu-item {
+ display: block;
+ background-color: #ffffff;
+ overflow: hidden;
+ border-radius: 10upx;
+ margin: 30upx;
+}
+
+.cu-card>.cu-item.shadow-blur {
+ overflow: initial;
+}
+
+.cu-card.no-card>.cu-item {
+ margin: 0upx;
+ border-radius: 0upx;
+}
+
+.cu-card .grid.grid-square {
+ margin-bottom: -20upx;
+}
+
+.cu-card.case .image {
+ position: relative;
+}
+
+.cu-card.case .image image {
+ width: 100%;
+}
+
+.cu-card.case .image .cu-tag {
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.cu-card.case .image .cu-bar {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ background-color: transparent;
+ padding: 0upx 30upx;
+}
+
+.cu-card.case.no-card .image {
+ margin: 30upx 30upx 0;
+ overflow: hidden;
+ border-radius: 10upx;
+}
+
+.cu-card.dynamic {
+ display: block;
+}
+
+.cu-card.dynamic>.cu-item {
+ display: block;
+ background-color: #ffffff;
+ overflow: hidden;
+}
+
+.cu-card.dynamic>.cu-item>.text-content {
+ padding: 0 30upx 0;
+ max-height: 6.4em;
+ overflow: hidden;
+ font-size: 30upx;
+ margin-bottom: 20upx;
+}
+
+.cu-card.dynamic>.cu-item .square-img {
+ width: 100%;
+ height: 200upx;
+ border-radius: 6upx;
+}
+
+.cu-card.dynamic>.cu-item .only-img {
+ width: 100%;
+ height: 320upx;
+ border-radius: 6upx;
+}
+
+/* card.dynamic>.cu-item .comment {
+ padding: 20upx;
+ background-color: #f1f1f1;
+ margin: 0 30upx 30upx;
+ border-radius: 6upx;
+} */
+
+.cu-card.article {
+ display: block;
+}
+
+.cu-card.article>.cu-item {
+ padding-bottom: 30upx;
+}
+
+.cu-card.article>.cu-item .title {
+ font-size: 30upx;
+ font-weight: 900;
+ color: #333333;
+ line-height: 100upx;
+ padding: 0 30upx;
+}
+
+.cu-card.article>.cu-item .content {
+ display: flex;
+ padding: 0 30upx;
+}
+
+.cu-card.article>.cu-item .content>image {
+ width: 240upx;
+ height: 6.4em;
+ margin-right: 20upx;
+ border-radius: 6upx;
+}
+
+.cu-card.article>.cu-item .content .desc {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+
+.cu-card.article>.cu-item .content .text-content {
+ font-size: 28upx;
+ color: #888;
+ height: 4.8em;
+ overflow: hidden;
+}
+
+/* ==================
+ 表单
+ ==================== */
+
+.cu-form-group {
+ background-color: #ffffff;
+ padding: 1upx 30upx;
+ display: flex;
+ align-items: center;
+ min-height: 100upx;
+ justify-content: space-between;
+}
+
+.cu-form-group+.cu-form-group {
+ border-top: 1upx solid #eee;
+}
+
+.cu-form-group .title {
+ text-align: justify;
+ padding-right: 30upx;
+ font-size: 30upx;
+ position: relative;
+ height: 60upx;
+ line-height: 60upx;
+}
+
+.cu-form-group input {
+ flex: 1;
+ font-size: 30upx;
+ color: #555;
+ padding-right: 20upx;
+}
+
+.cu-form-group>text[class*="cuIcon-"] {
+ font-size: 36upx;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+.cu-form-group textarea {
+ margin: 32upx 0 30upx;
+ height: 4.6em;
+ width: 100%;
+ line-height: 1.2em;
+ flex: 1;
+ font-size: 28upx;
+ padding: 0;
+}
+
+.cu-form-group.align-start .title {
+ height: 1em;
+ margin-top: 32upx;
+ line-height: 1em;
+}
+
+.cu-form-group picker {
+ flex: 1;
+ padding-right: 40upx;
+ overflow: hidden;
+ position: relative;
+}
+
+.cu-form-group picker .picker {
+ line-height: 100upx;
+ font-size: 28upx;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ width: 100%;
+ text-align: right;
+}
+
+.cu-form-group picker::after {
+ font-family: cuIcon;
+ display: block;
+ content: "\e6a3";
+ position: absolute;
+ font-size: 34upx;
+ color: #8799a3;
+ line-height: 100upx;
+ width: 60upx;
+ text-align: center;
+ top: 0;
+ bottom: 0;
+ right: -20upx;
+ margin: auto;
+}
+
+.cu-form-group textarea[disabled],
+.cu-form-group textarea[disabled] .placeholder {
+ color: transparent;
+}
+
+/* ==================
+ 模态窗口
+ ==================== */
+
+.cu-modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1110;
+ opacity: 0;
+ outline: 0;
+ text-align: center;
+ -ms-transform: scale(1.185);
+ transform: scale(1.185);
+ backface-visibility: hidden;
+ perspective: 2000upx;
+ background: rgba(0, 0, 0, 0.6);
+ transition: all 0.3s ease-in-out 0s;
+ pointer-events: none;
+}
+
+.cu-modal::before {
+ content: "\200B";
+ display: inline-block;
+ height: 100%;
+ vertical-align: middle;
+}
+
+.cu-modal.show {
+ opacity: 1;
+ transition-duration: 0.3s;
+ -ms-transform: scale(1);
+ transform: scale(1);
+ overflow-x: hidden;
+ overflow-y: auto;
+ pointer-events: auto;
+}
+
+.cu-dialog {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ margin-left: auto;
+ margin-right: auto;
+ width: 680upx;
+ max-width: 100%;
+ background-color: #f8f8f8;
+ border-radius: 10upx;
+ overflow: hidden;
+}
+
+.cu-modal.bottom-modal::before {
+ vertical-align: bottom;
+}
+
+.cu-modal.bottom-modal .cu-dialog {
+ width: 100%;
+ border-radius: 0;
+}
+
+.cu-modal.bottom-modal {
+ margin-bottom: -1000upx;
+}
+
+.cu-modal.bottom-modal.show {
+ margin-bottom: 0;
+}
+
+.cu-modal.drawer-modal {
+ transform: scale(1);
+ display: flex;
+}
+
+.cu-modal.drawer-modal .cu-dialog {
+ height: 100%;
+ min-width: 200upx;
+ border-radius: 0;
+ margin: initial;
+ transition-duration: 0.3s;
+}
+
+.cu-modal.drawer-modal.justify-start .cu-dialog {
+ transform: translateX(-100%);
+}
+
+.cu-modal.drawer-modal.justify-end .cu-dialog {
+ transform: translateX(100%);
+}
+
+.cu-modal.drawer-modal.show .cu-dialog {
+ transform: translateX(0%);
+}
+.cu-modal .cu-dialog>.cu-bar:first-child .action{
+ min-width: 100rpx;
+ margin-right: 0;
+ min-height: 100rpx;
+}
+/* ==================
+ 轮播
+ ==================== */
+swiper .a-swiper-dot {
+ display: inline-block;
+ width: 16upx;
+ height: 16upx;
+ background: rgba(0, 0, 0, .3);
+ border-radius: 50%;
+ vertical-align: middle;
+}
+
+swiper[class*="-dot"] .wx-swiper-dots,
+swiper[class*="-dot"] .a-swiper-dots,
+swiper[class*="-dot"] .uni-swiper-dots {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ justify-content: center;
+}
+
+swiper.square-dot .wx-swiper-dot,
+swiper.square-dot .a-swiper-dot,
+swiper.square-dot .uni-swiper-dot {
+ background-color: #ffffff;
+ opacity: 0.4;
+ width: 10upx;
+ height: 10upx;
+ border-radius: 20upx;
+ margin: 0 8upx !important;
+}
+
+swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active,
+swiper.square-dot .a-swiper-dot.a-swiper-dot-active,
+swiper.square-dot .uni-swiper-dot.uni-swiper-dot-active {
+ opacity: 1;
+ width: 30upx;
+}
+
+swiper.round-dot .wx-swiper-dot,
+swiper.round-dot .a-swiper-dot,
+swiper.round-dot .uni-swiper-dot {
+ width: 10upx;
+ height: 10upx;
+ position: relative;
+ margin: 4upx 8upx !important;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after,
+swiper.round-dot .a-swiper-dot.a-swiper-dot-active::after,
+swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active::after {
+ content: "";
+ position: absolute;
+ width: 10upx;
+ height: 10upx;
+ top: 0upx;
+ left: 0upx;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+ background-color: #ffffff;
+ border-radius: 20upx;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active,
+swiper.round-dot .a-swiper-dot.a-swiper-dot-active,
+swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active {
+ width: 18upx;
+ height: 18upx;
+}
+
+.screen-swiper {
+ min-height: 375upx;
+}
+
+.screen-swiper image,
+.screen-swiper video,
+.swiper-item image,
+.swiper-item video {
+ width: 100%;
+ display: block;
+ height: 100%;
+ margin: 0;
+ pointer-events: none;
+}
+
+.card-swiper {
+ height: 420upx !important;
+}
+
+.card-swiper swiper-item {
+ width: 610upx !important;
+ left: 70upx;
+ box-sizing: border-box;
+ padding: 40upx 0upx 70upx;
+ overflow: initial;
+}
+
+.card-swiper swiper-item .swiper-item {
+ width: 100%;
+ display: block;
+ height: 100%;
+ border-radius: 10upx;
+ transform: scale(0.9);
+ transition: all 0.2s ease-in 0s;
+ overflow: hidden;
+}
+
+.card-swiper swiper-item.cur .swiper-item {
+ transform: none;
+ transition: all 0.2s ease-in 0s;
+}
+
+
+.tower-swiper {
+ height: 420upx;
+ position: relative;
+ max-width: 750upx;
+ overflow: hidden;
+}
+
+.tower-swiper .tower-item {
+ position: absolute;
+ width: 300upx;
+ height: 380upx;
+ top: 0;
+ bottom: 0;
+ left: 50%;
+ margin: auto;
+ transition: all 0.2s ease-in 0s;
+ opacity: 1;
+}
+
+.tower-swiper .tower-item.none {
+ opacity: 0;
+}
+
+.tower-swiper .tower-item .swiper-item {
+ width: 100%;
+ height: 100%;
+ border-radius: 6upx;
+ overflow: hidden;
+}
+
+/* ==================
+ 步骤条
+ ==================== */
+
+.cu-steps {
+ display: flex;
+}
+
+scroll-view.cu-steps {
+ display: block;
+ white-space: nowrap;
+}
+
+scroll-view.cu-steps .cu-item {
+ display: inline-block;
+}
+
+.cu-steps .cu-item {
+ flex: 1;
+ text-align: center;
+ position: relative;
+ min-width: 100upx;
+}
+
+.cu-steps .cu-item:not([class*="text-"]) {
+ color: #8799a3;
+}
+
+.cu-steps .cu-item [class*="cuIcon-"],
+.cu-steps .cu-item .num {
+ display: block;
+ font-size: 40upx;
+ line-height: 80upx;
+}
+
+.cu-steps .cu-item::before,
+.cu-steps .cu-item::after,
+.cu-steps.steps-arrow .cu-item::before,
+.cu-steps.steps-arrow .cu-item::after {
+ content: "";
+ display: block;
+ position: absolute;
+ height: 0px;
+ width: calc(100% - 80upx);
+ border-bottom: 1px solid #ccc;
+ left: calc(0px - (100% - 80upx) / 2);
+ top: 40upx;
+ z-index: 0;
+}
+
+.cu-steps.steps-arrow .cu-item::before,
+.cu-steps.steps-arrow .cu-item::after {
+ content: "\e6a3";
+ font-family: 'cuIcon';
+ height: 30upx;
+ border-bottom-width: 0px;
+ line-height: 30upx;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ color: #ccc;
+}
+
+.cu-steps.steps-bottom .cu-item::before,
+.cu-steps.steps-bottom .cu-item::after {
+ bottom: 40upx;
+ top: initial;
+}
+
+.cu-steps .cu-item::after {
+ border-bottom: 1px solid currentColor;
+ width: 0px;
+ transition: all 0.3s ease-in-out 0s;
+}
+
+.cu-steps .cu-item[class*="text-"]::after {
+ width: calc(100% - 80upx);
+ color: currentColor;
+}
+
+.cu-steps .cu-item:first-child::before,
+.cu-steps .cu-item:first-child::after {
+ display: none;
+}
+
+.cu-steps .cu-item .num {
+ width: 40upx;
+ height: 40upx;
+ border-radius: 50%;
+ line-height: 40upx;
+ margin: 20upx auto;
+ font-size: 24upx;
+ border: 1px solid currentColor;
+ position: relative;
+ overflow: hidden;
+}
+
+.cu-steps .cu-item[class*="text-"] .num {
+ background-color: currentColor;
+}
+
+.cu-steps .cu-item .num::before,
+.cu-steps .cu-item .num::after {
+ content: attr(data-index);
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ transition: all 0.3s ease-in-out 0s;
+ transform: translateY(0upx);
+}
+
+.cu-steps .cu-item[class*="text-"] .num::before {
+ transform: translateY(-40upx);
+ color: #ffffff;
+}
+
+.cu-steps .cu-item .num::after {
+ transform: translateY(40upx);
+ color: #ffffff;
+ transition: all 0.3s ease-in-out 0s;
+}
+
+.cu-steps .cu-item[class*="text-"] .num::after {
+ content: "\e645";
+ font-family: 'cuIcon';
+ color: #ffffff;
+ transform: translateY(0upx);
+}
+
+.cu-steps .cu-item[class*="text-"] .num.err::after {
+ content: "\e646";
+}
+
+/* ==================
+ 布局
+ ==================== */
+
+/* -- flex弹性布局 -- */
+
+.flex {
+ display: flex;
+}
+
+.basis-xs {
+ flex-basis: 20%;
+}
+
+.basis-sm {
+ flex-basis: 40%;
+}
+
+.basis-df {
+ flex-basis: 50%;
+}
+
+.basis-lg {
+ flex-basis: 60%;
+}
+
+.basis-xl {
+ flex-basis: 80%;
+}
+
+.flex-sub {
+ flex: 1;
+}
+
+.flex-twice {
+ flex: 2;
+}
+
+.flex-treble {
+ flex: 3;
+}
+
+.flex-direction {
+ flex-direction: column;
+}
+
+.flex-wrap {
+ flex-wrap: wrap;
+}
+
+.align-start {
+ align-items: flex-start;
+}
+
+.align-end {
+ align-items: flex-end;
+}
+
+.align-center {
+ align-items: center;
+}
+
+.align-stretch {
+ align-items: stretch;
+}
+
+.self-start {
+ align-self: flex-start;
+}
+
+.self-center {
+ align-self: flex-center;
+}
+
+.self-end {
+ align-self: flex-end;
+}
+
+.self-stretch {
+ align-self: stretch;
+}
+
+.align-stretch {
+ align-items: stretch;
+}
+
+.justify-start {
+ justify-content: flex-start;
+}
+
+.justify-end {
+ justify-content: flex-end;
+}
+
+.justify-center {
+ justify-content: center;
+}
+
+.justify-between {
+ justify-content: space-between;
+}
+
+.justify-around {
+ justify-content: space-around;
+}
+
+/* grid布局 */
+
+.grid {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.grid.grid-square {
+ overflow: hidden;
+}
+
+.grid.grid-square .cu-tag {
+ position: absolute;
+ right: 0;
+ top: 0;
+ border-bottom-left-radius: 6upx;
+ padding: 6upx 12upx;
+ height: auto;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+.grid.grid-square>view>text[class*="cuIcon-"] {
+ font-size: 52upx;
+ position: absolute;
+ color: #8799a3;
+ margin: auto;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+}
+
+.grid.grid-square>view {
+ margin-right: 20upx;
+ margin-bottom: 20upx;
+ border-radius: 6upx;
+ position: relative;
+ overflow: hidden;
+}
+.grid.grid-square>view.bg-img image {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+}
+.grid.col-1.grid-square>view {
+ padding-bottom: 100%;
+ height: 0;
+ margin-right: 0;
+}
+
+.grid.col-2.grid-square>view {
+ padding-bottom: calc((100% - 20upx)/2);
+ height: 0;
+ width: calc((100% - 20upx)/2);
+}
+
+.grid.col-3.grid-square>view {
+ padding-bottom: calc((100% - 40upx)/3);
+ height: 0;
+ width: calc((100% - 40upx)/3);
+}
+
+.grid.col-4.grid-square>view {
+ padding-bottom: calc((100% - 60upx)/4);
+ height: 0;
+ width: calc((100% - 60upx)/4);
+}
+
+.grid.col-5.grid-square>view {
+ padding-bottom: calc((100% - 80upx)/5);
+ height: 0;
+ width: calc((100% - 80upx)/5);
+}
+
+.grid.col-2.grid-square>view:nth-child(2n),
+.grid.col-3.grid-square>view:nth-child(3n),
+.grid.col-4.grid-square>view:nth-child(4n),
+.grid.col-5.grid-square>view:nth-child(5n) {
+ margin-right: 0;
+}
+
+.grid.col-1>view {
+ width: 100%;
+}
+
+.grid.col-2>view {
+ width: 50%;
+}
+
+.grid.col-3>view {
+ width: 33.33%;
+}
+
+.grid.col-4>view {
+ width: 25%;
+}
+
+.grid.col-5>view {
+ width: 20%;
+}
+
+/* -- 内外边距 -- */
+
+.margin-0 {
+ margin: 0;
+}
+
+.margin-xs {
+ margin: 10upx;
+}
+
+.margin-sm {
+ margin: 20upx;
+}
+
+.margin {
+ margin: 30upx;
+}
+
+.margin-lg {
+ margin: 40upx;
+}
+
+.margin-xl {
+ margin: 50upx;
+}
+
+.margin-top-xs {
+ margin-top: 10upx;
+}
+
+.margin-top-sm {
+ margin-top: 20upx;
+}
+
+.margin-top {
+ margin-top: 30upx;
+}
+
+.margin-top-lg {
+ margin-top: 40upx;
+}
+
+.margin-top-xl {
+ margin-top: 50upx;
+}
+
+.margin-right-xs {
+ margin-right: 10upx;
+}
+
+.margin-right-sm {
+ margin-right: 20upx;
+}
+
+.margin-right {
+ margin-right: 30upx;
+}
+
+.margin-right-lg {
+ margin-right: 40upx;
+}
+
+.margin-right-xl {
+ margin-right: 50upx;
+}
+
+.margin-bottom-xs {
+ margin-bottom: 10upx;
+}
+
+.margin-bottom-sm {
+ margin-bottom: 20upx;
+}
+
+.margin-bottom {
+ margin-bottom: 30upx;
+}
+
+.margin-bottom-lg {
+ margin-bottom: 40upx;
+}
+
+.margin-bottom-xl {
+ margin-bottom: 50upx;
+}
+
+.margin-left-xs {
+ margin-left: 10upx;
+}
+
+.margin-left-sm {
+ margin-left: 20upx;
+}
+
+.margin-left {
+ margin-left: 30upx;
+}
+
+.margin-left-lg {
+ margin-left: 40upx;
+}
+
+.margin-left-xl {
+ margin-left: 50upx;
+}
+
+.margin-lr-xs {
+ margin-left: 10upx;
+ margin-right: 10upx;
+}
+
+.margin-lr-sm {
+ margin-left: 20upx;
+ margin-right: 20upx;
+}
+
+.margin-lr {
+ margin-left: 30upx;
+ margin-right: 30upx;
+}
+
+.margin-lr-lg {
+ margin-left: 40upx;
+ margin-right: 40upx;
+}
+
+.margin-lr-xl {
+ margin-left: 50upx;
+ margin-right: 50upx;
+}
+
+.margin-tb-xs {
+ margin-top: 10upx;
+ margin-bottom: 10upx;
+}
+
+.margin-tb-sm {
+ margin-top: 20upx;
+ margin-bottom: 20upx;
+}
+
+.margin-tb {
+ margin-top: 30upx;
+ margin-bottom: 30upx;
+}
+
+.margin-tb-lg {
+ margin-top: 40upx;
+ margin-bottom: 40upx;
+}
+
+.margin-tb-xl {
+ margin-top: 50upx;
+ margin-bottom: 50upx;
+}
+
+.padding-0 {
+ padding: 0;
+}
+
+.padding-xs {
+ padding: 10upx;
+}
+
+.padding-sm {
+ padding: 20upx;
+}
+
+.padding {
+ padding: 30upx;
+}
+
+.padding-lg {
+ padding: 40upx;
+}
+
+.padding-xl {
+ padding: 50upx;
+}
+
+.padding-top-xs {
+ padding-top: 10upx;
+}
+
+.padding-top-sm {
+ padding-top: 20upx;
+}
+
+.padding-top {
+ padding-top: 30upx;
+}
+
+.padding-top-lg {
+ padding-top: 40upx;
+}
+
+.padding-top-xl {
+ padding-top: 50upx;
+}
+
+.padding-right-xs {
+ padding-right: 10upx;
+}
+
+.padding-right-sm {
+ padding-right: 20upx;
+}
+
+.padding-right {
+ padding-right: 30upx;
+}
+
+.padding-right-lg {
+ padding-right: 40upx;
+}
+
+.padding-right-xl {
+ padding-right: 50upx;
+}
+
+.padding-bottom-xs {
+ padding-bottom: 10upx;
+}
+
+.padding-bottom-sm {
+ padding-bottom: 20upx;
+}
+
+.padding-bottom {
+ padding-bottom: 30upx;
+}
+
+.padding-bottom-lg {
+ padding-bottom: 40upx;
+}
+
+.padding-bottom-xl {
+ padding-bottom: 50upx;
+}
+
+.padding-left-xs {
+ padding-left: 10upx;
+}
+
+.padding-left-sm {
+ padding-left: 20upx;
+}
+
+.padding-left {
+ padding-left: 30upx;
+}
+
+.padding-left-lg {
+ padding-left: 40upx;
+}
+
+.padding-left-xl {
+ padding-left: 50upx;
+}
+
+.padding-lr-xs {
+ padding-left: 10upx;
+ padding-right: 10upx;
+}
+
+.padding-lr-sm {
+ padding-left: 20upx;
+ padding-right: 20upx;
+}
+
+.padding-lr {
+ padding-left: 30upx;
+ padding-right: 30upx;
+}
+
+.padding-lr-lg {
+ padding-left: 40upx;
+ padding-right: 40upx;
+}
+
+.padding-lr-xl {
+ padding-left: 50upx;
+ padding-right: 50upx;
+}
+
+.padding-tb-xs {
+ padding-top: 10upx;
+ padding-bottom: 10upx;
+}
+
+.padding-tb-sm {
+ padding-top: 20upx;
+ padding-bottom: 20upx;
+}
+
+.padding-tb {
+ padding-top: 30upx;
+ padding-bottom: 30upx;
+}
+
+.padding-tb-lg {
+ padding-top: 40upx;
+ padding-bottom: 40upx;
+}
+
+.padding-tb-xl {
+ padding-top: 50upx;
+ padding-bottom: 50upx;
+}
+
+/* -- 浮动 -- */
+
+.cf::after,
+.cf::before {
+ content: " ";
+ display: table;
+}
+
+.cf::after {
+ clear: both;
+}
+
+.fl {
+ float: left;
+}
+
+.fr {
+ float: right;
+}
+
+/* ==================
+ 背景
+ ==================== */
+
+.line-red::after,
+.lines-red::after {
+ border-color: #e54d42;
+}
+
+.line-orange::after,
+.lines-orange::after {
+ border-color: #f37b1d;
+}
+
+.line-yellow::after,
+.lines-yellow::after {
+ border-color: #fbbd08;
+}
+
+.line-olive::after,
+.lines-olive::after {
+ border-color: #8dc63f;
+}
+
+.line-green::after,
+.lines-green::after {
+ border-color: #39b54a;
+}
+
+.line-cyan::after,
+.lines-cyan::after {
+ border-color: #1cbbb4;
+}
+
+.line-blue::after,
+.lines-blue::after {
+ border-color: #0081ff;
+}
+
+.line-purple::after,
+.lines-purple::after {
+ border-color: #6739b6;
+}
+
+.line-mauve::after,
+.lines-mauve::after {
+ border-color: #9c26b0;
+}
+
+.line-pink::after,
+.lines-pink::after {
+ border-color: #e03997;
+}
+
+.line-brown::after,
+.lines-brown::after {
+ border-color: #a5673f;
+}
+
+.line-grey::after,
+.lines-grey::after {
+ border-color: #8799a3;
+}
+
+.line-gray::after,
+.lines-gray::after {
+ border-color: #aaaaaa;
+}
+
+.line-black::after,
+.lines-black::after {
+ border-color: #333333;
+}
+
+.line-white::after,
+.lines-white::after {
+ border-color: #ffffff;
+}
+
+.bg-red {
+ background-color: #e54d42;
+ color: #ffffff;
+}
+
+.bg-orange {
+ background-color: #f37b1d;
+ color: #ffffff;
+}
+
+.bg-yellow {
+ background-color: #fbbd08;
+ color: #333333;
+}
+
+.bg-olive {
+ background-color: #8dc63f;
+ color: #ffffff;
+}
+
+.bg-green {
+ background-color: #39b54a;
+ color: #ffffff;
+}
+
+.bg-cyan {
+ background-color: #1cbbb4;
+ color: #ffffff;
+}
+
+.bg-blue {
+ background-color: #0081ff;
+ color: #ffffff;
+}
+
+.bg-purple {
+ background-color: #6739b6;
+ color: #ffffff;
+}
+
+.bg-mauve {
+ background-color: #9c26b0;
+ color: #ffffff;
+}
+
+.bg-pink {
+ background-color: #e03997;
+ color: #ffffff;
+}
+
+.bg-brown {
+ background-color: #a5673f;
+ color: #ffffff;
+}
+
+.bg-grey {
+ background-color: #8799a3;
+ color: #ffffff;
+}
+
+.bg-gray {
+ background-color: #f0f0f0;
+ color: #333333;
+}
+
+.bg-black {
+ background-color: #333333;
+ color: #ffffff;
+}
+
+.bg-white {
+ background-color: #ffffff;
+ color: #666666;
+}
+
+.bg-shadeTop {
+ background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.01));
+ color: #ffffff;
+}
+
+.bg-shadeBottom {
+ background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 1));
+ color: #ffffff;
+}
+
+.bg-red.light {
+ color: #e54d42;
+ background-color: #fadbd9;
+}
+
+.bg-orange.light {
+ color: #f37b1d;
+ background-color: #fde6d2;
+}
+
+.bg-yellow.light {
+ color: #fbbd08;
+ background-color: #fef2ced2;
+}
+
+.bg-olive.light {
+ color: #8dc63f;
+ background-color: #e8f4d9;
+}
+
+.bg-green.light {
+ color: #39b54a;
+ background-color: #d7f0dbff;
+}
+
+.bg-cyan.light {
+ color: #1cbbb4;
+ background-color: #d2f1f0;
+}
+
+.bg-blue.light {
+ color: #0081ff;
+ background-color: #cce6ff;
+}
+
+.bg-purple.light {
+ color: #6739b6;
+ background-color: #e1d7f0;
+}
+
+.bg-mauve.light {
+ color: #9c26b0;
+ background-color: #ebd4ef;
+}
+
+.bg-pink.light {
+ color: #e03997;
+ background-color: #f9d7ea;
+}
+
+.bg-brown.light {
+ color: #a5673f;
+ background-color: #ede1d9;
+}
+
+.bg-grey.light {
+ color: #8799a3;
+ background-color: #e7ebed;
+}
+
+.bg-gradual-red {
+ background-image: linear-gradient(45deg, #f43f3b, #ec008c);
+ color: #ffffff;
+}
+
+.bg-gradual-orange {
+ background-image: linear-gradient(45deg, #ff9700, #ed1c24);
+ color: #ffffff;
+}
+
+.bg-gradual-green {
+ background-image: linear-gradient(45deg, #39b54a, #8dc63f);
+ color: #ffffff;
+}
+
+.bg-gradual-purple {
+ background-image: linear-gradient(45deg, #9000ff, #5e00ff);
+ color: #ffffff;
+}
+
+.bg-gradual-pink {
+ background-image: linear-gradient(45deg, #ec008c, #6739b6);
+ color: #ffffff;
+}
+
+.bg-gradual-blue {
+ background-image: linear-gradient(45deg, #0081ff, #1cbbb4);
+ color: #ffffff;
+}
+
+.shadow[class*="-red"] {
+ box-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2);
+}
+
+.shadow[class*="-orange"] {
+ box-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2);
+}
+
+.shadow[class*="-yellow"] {
+ box-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2);
+}
+
+.shadow[class*="-olive"] {
+ box-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2);
+}
+
+.shadow[class*="-green"] {
+ box-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2);
+}
+
+.shadow[class*="-cyan"] {
+ box-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2);
+}
+
+.shadow[class*="-blue"] {
+ box-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2);
+}
+
+.shadow[class*="-purple"] {
+ box-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2);
+}
+
+.shadow[class*="-mauve"] {
+ box-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2);
+}
+
+.shadow[class*="-pink"] {
+ box-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2);
+}
+
+.shadow[class*="-brown"] {
+ box-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2);
+}
+
+.shadow[class*="-grey"] {
+ box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.shadow[class*="-gray"] {
+ box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.shadow[class*="-black"] {
+ box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2);
+}
+
+.shadow[class*="-white"] {
+ box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2);
+}
+
+.text-shadow[class*="-red"] {
+ text-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2);
+}
+
+.text-shadow[class*="-orange"] {
+ text-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2);
+}
+
+.text-shadow[class*="-yellow"] {
+ text-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2);
+}
+
+.text-shadow[class*="-olive"] {
+ text-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2);
+}
+
+.text-shadow[class*="-green"] {
+ text-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2);
+}
+
+.text-shadow[class*="-cyan"] {
+ text-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2);
+}
+
+.text-shadow[class*="-blue"] {
+ text-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2);
+}
+
+.text-shadow[class*="-purple"] {
+ text-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2);
+}
+
+.text-shadow[class*="-mauve"] {
+ text-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2);
+}
+
+.text-shadow[class*="-pink"] {
+ text-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2);
+}
+
+.text-shadow[class*="-brown"] {
+ text-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2);
+}
+
+.text-shadow[class*="-grey"] {
+ text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.text-shadow[class*="-gray"] {
+ text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.text-shadow[class*="-black"] {
+ text-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2);
+}
+
+.bg-img {
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+.bg-mask {
+ background-color: #333333;
+ position: relative;
+}
+
+.bg-mask::after {
+ content: "";
+ border-radius: inherit;
+ width: 100%;
+ height: 100%;
+ display: block;
+ background-color: rgba(0, 0, 0, 0.4);
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+}
+
+.bg-mask view,
+.bg-mask cover-view {
+ z-index: 5;
+ position: relative;
+}
+
+.bg-video {
+ position: relative;
+}
+
+.bg-video video {
+ display: block;
+ height: 100%;
+ width: 100%;
+ -o-object-fit: cover;
+ object-fit: cover;
+ position: absolute;
+ top: 0;
+ z-index: 0;
+ pointer-events: none;
+}
+
+/* ==================
+ 文本
+ ==================== */
+
+.text-xs {
+ font-size: 20upx;
+}
+
+.text-sm {
+ font-size: 24upx;
+}
+
+.text-df {
+ font-size: 28upx;
+}
+
+.text-lg {
+ font-size: 32upx;
+}
+
+.text-xl {
+ font-size: 36upx;
+}
+
+.text-xxl {
+ font-size: 44upx;
+}
+
+.text-sl {
+ font-size: 80upx;
+}
+
+.text-xsl {
+ font-size: 120upx;
+}
+
+.text-Abc {
+ text-transform: Capitalize;
+}
+
+.text-ABC {
+ text-transform: Uppercase;
+}
+
+.text-abc {
+ text-transform: Lowercase;
+}
+
+.text-price::before {
+ content: "¥";
+ font-size: 80%;
+ margin-right: 4upx;
+}
+
+.text-cut {
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.text-bold {
+ font-weight: bold;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-content {
+ line-height: 1.6;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-red,
+.line-red,
+.lines-red {
+ color: #e54d42;
+}
+
+.text-orange,
+.line-orange,
+.lines-orange {
+ color: #f37b1d;
+}
+
+.text-yellow,
+.line-yellow,
+.lines-yellow {
+ color: #fbbd08;
+}
+
+.text-olive,
+.line-olive,
+.lines-olive {
+ color: #8dc63f;
+}
+
+.text-green,
+.line-green,
+.lines-green {
+ color: #39b54a;
+}
+
+.text-cyan,
+.line-cyan,
+.lines-cyan {
+ color: #1cbbb4;
+}
+
+.text-blue,
+.line-blue,
+.lines-blue {
+ color: #0081ff;
+}
+
+.text-purple,
+.line-purple,
+.lines-purple {
+ color: #6739b6;
+}
+
+.text-mauve,
+.line-mauve,
+.lines-mauve {
+ color: #9c26b0;
+}
+
+.text-pink,
+.line-pink,
+.lines-pink {
+ color: #e03997;
+}
+
+.text-brown,
+.line-brown,
+.lines-brown {
+ color: #a5673f;
+}
+
+.text-grey,
+.line-grey,
+.lines-grey {
+ color: #8799a3;
+}
+
+.text-gray,
+.line-gray,
+.lines-gray {
+ color: #aaaaaa;
+}
+
+.text-black,
+.line-black,
+.lines-black {
+ color: #333333;
+}
+
+.text-white,
+.line-white,
+.lines-white {
+ color: #ffffff;
+}
diff --git a/static/scss/global.scss b/static/scss/global.scss
new file mode 100644
index 0000000..ac636bd
--- /dev/null
+++ b/static/scss/global.scss
@@ -0,0 +1,90 @@
+.text-center {
+ text-align: center;
+}
+
+.font-13 {
+ font-size: 13px;
+}
+
+.font-12 {
+ font-size: 12px;
+}
+
+.font-11 {
+ font-size: 11px;
+}
+
+.text-grey1 {
+ color: #888;
+}
+.text-grey2 {
+ color: #aaa;
+}
+
+.list-cell-arrow::before {
+ content: ' ';
+ height: 10px;
+ width: 10px;
+ border-width: 2px 2px 0 0;
+ border-color: #c0c0c0;
+ border-style: solid;
+ -webkit-transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
+ transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
+ position: absolute;
+ top: 50%;
+ margin-top: -6px;
+ right: 30rpx;
+ }
+
+ .list-cell {
+ position: relative;
+ width: 100%;
+ box-sizing: border-box;
+ background-color: #fff;
+ color: #333;
+ padding: 26rpx 30rpx;
+ }
+
+ .list-cell:first-child {
+ border-radius: 8rpx 8rpx 0 0;
+ }
+
+ .list-cell:last-child {
+ border-radius: 0 0 8rpx 8rpx;
+ }
+
+ .list-cell::after {
+ content: '';
+ position: absolute;
+ border-bottom: 1px solid #eaeef1;
+ -webkit-transform: scaleY(0.5) translateZ(0);
+ transform: scaleY(0.5) translateZ(0);
+ transform-origin: 0 100%;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ pointer-events: none;
+ }
+
+
+ .menu-list {
+ margin: 15px 15px;
+
+ .menu-item-box {
+ width: 100%;
+ display: flex;
+ align-items: center;
+
+ .menu-icon {
+ color: #007AFF;
+ font-size: 16px;
+ margin-right: 5px;
+ }
+
+ .text-right {
+ margin-left: auto;
+ margin-right: 34rpx;
+ color: #999;
+ }
+ }
+ }
diff --git a/static/scss/index.scss b/static/scss/index.scss
new file mode 100644
index 0000000..745cffa
--- /dev/null
+++ b/static/scss/index.scss
@@ -0,0 +1,6 @@
+// global
+@import "./global.scss";
+// color-ui
+@import "@/static/scss/colorui.css";
+// iconfont
+@import "@/static/font/iconfont.css";
\ No newline at end of file
diff --git a/store/getters.js b/store/getters.js
new file mode 100644
index 0000000..e4f137f
--- /dev/null
+++ b/store/getters.js
@@ -0,0 +1,9 @@
+const getters = {
+ token: state => state.user.token,
+ avatar: state => state.user.avatar,
+ name: state => state.user.name,
+ roles: state => state.user.roles,
+ permissions: state => state.user.permissions,
+ selfInfo: state => state.user.selfInfo
+}
+export default getters
diff --git a/store/index.js b/store/index.js
new file mode 100644
index 0000000..8d0d94c
--- /dev/null
+++ b/store/index.js
@@ -0,0 +1,15 @@
+import Vue from "vue";
+import Vuex from "vuex";
+import user from "@/store/modules/user";
+import getters from "./getters";
+
+Vue.use(Vuex);
+
+const store = new Vuex.Store({
+ modules: {
+ user,
+ },
+ getters,
+});
+
+export default store;
diff --git a/store/modules/user.js b/store/modules/user.js
new file mode 100644
index 0000000..5279d19
--- /dev/null
+++ b/store/modules/user.js
@@ -0,0 +1,123 @@
+import config from '@/config'
+import storage from '@/utils/storage'
+import constant from '@/utils/constant'
+import {
+ login,
+ logout,
+ getInfo
+} from '@/api/login'
+import {
+ getToken,
+ setToken,
+ removeToken
+} from '@/utils/auth'
+
+const baseUrl = config.baseUrl
+
+const user = {
+ state: {
+ token: getToken(),
+ name: storage.get(constant.name),
+ avatar: storage.get(constant.avatar),
+ roles: storage.get(constant.roles),
+ permissions: storage.get(constant.permissions),
+ selfInfo: null,
+ },
+
+ mutations: {
+ SET_SELFINFO: (state, data) => {
+ return state.selfInfo = data
+ },
+
+ SET_TOKEN: (state, token) => {
+ state.token = token
+ },
+ SET_NAME: (state, name) => {
+ state.name = name
+ storage.set(constant.name, name)
+ },
+ SET_AVATAR: (state, avatar) => {
+ state.avatar = avatar
+ storage.set(constant.avatar, avatar)
+ },
+ SET_ROLES: (state, roles) => {
+ state.roles = roles
+ storage.set(constant.roles, roles)
+ },
+ SET_PERMISSIONS: (state, permissions) => {
+ state.permissions = permissions
+ storage.set(constant.permissions, permissions)
+ }
+ },
+
+ actions: {
+ // 登录
+ Login({
+ commit
+ }, userInfo) {
+ const username = userInfo.username.trim()
+ const password = userInfo.password
+ const code = userInfo.code
+ const uuid = userInfo.uuid
+ return new Promise((resolve, reject) => {
+ login(username, password, code, uuid).then(res => {
+ setToken(res.token)
+ commit('SET_TOKEN', res.token)
+ resolve()
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ },
+
+ // 获取用户信息
+ GetInfo({
+ commit,
+ state
+ }) {
+ return new Promise((resolve, reject) => {
+ getInfo().then(res => {
+ const user = res.user
+ const avatar = (user == null || user.avatar == "" || user.avatar == null) ?
+ '' : baseUrl + user.avatar
+ // const avatar = (user == null || user.avatar == "" || user.avatar == null) ?
+ // require("@/static/images/profile.jpg") : baseUrl + user.avatar
+ const username = (user == null || user.userName == "" || user.userName ==
+ null) ? "" : user.userName
+ if (res.roles && res.roles.length > 0) {
+ commit('SET_ROLES', res.roles)
+ commit('SET_PERMISSIONS', res.permissions)
+ } else {
+ commit('SET_ROLES', ['ROLE_DEFAULT'])
+ }
+ commit('SET_NAME', username)
+ commit('SET_AVATAR', avatar)
+ resolve(res)
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ },
+
+ // 退出系统
+ LogOut({
+ commit,
+ state
+ }) {
+ return new Promise((resolve, reject) => {
+ logout(state.token).then(() => {
+ commit('SET_TOKEN', '')
+ commit('SET_ROLES', [])
+ commit('SET_PERMISSIONS', [])
+ removeToken()
+ storage.clean()
+ resolve()
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ }
+ }
+}
+
+export default user
diff --git a/style/font.css b/style/font.css
new file mode 100644
index 0000000..3b3867e
--- /dev/null
+++ b/style/font.css
@@ -0,0 +1,4 @@
+@font-face {
+ font-family: 'PingFang SC-中黑体';
+ /* src: url('http://39.101.188.84:9999/demo/font-file/PingFang Bold'); */
+}
diff --git a/sub-enterprise/apply-claims/apply-claims.vue b/sub-enterprise/apply-claims/apply-claims.vue
new file mode 100644
index 0000000..9a7f639
--- /dev/null
+++ b/sub-enterprise/apply-claims/apply-claims.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+ 投保公司
+ 调兵山市食厨烤骨头饭店
+
+
+
+
+
+
+
+
+
diff --git a/sub-enterprise/company-eval/company-eval.vue b/sub-enterprise/company-eval/company-eval.vue
new file mode 100644
index 0000000..3525e0a
--- /dev/null
+++ b/sub-enterprise/company-eval/company-eval.vue
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-enterprise/company-surver/company-surver.vue b/sub-enterprise/company-surver/company-surver.vue
new file mode 100644
index 0000000..fe705e0
--- /dev/null
+++ b/sub-enterprise/company-surver/company-surver.vue
@@ -0,0 +1,223 @@
+
+
+
+
+
+ {{ item.state == 0 ? "进行中" : "已结束" }}
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+ 发布时间:
+
+ {{ item.time }}
+
+
+
+
+
+
+ 发布人:
+
+ {{ item.userName }}
+
+
+
+
+
+
+ 发布单位:
+
+ {{ item.Units }}
+
+
+
+
+ 我要填写
+
+
+
+ 已经到底啦~
+
+
+
+
+
+
+
diff --git a/sub-enterprise/firm-form/firm-form.vue b/sub-enterprise/firm-form/firm-form.vue
new file mode 100644
index 0000000..2419bd7
--- /dev/null
+++ b/sub-enterprise/firm-form/firm-form.vue
@@ -0,0 +1,131 @@
+
+
+
+
+
+ *
+ 公司名称
+
+
+
+
+
+
+
+ *
+ 填报人
+
+
+
+
+
+
+
+ *
+ 联系电话
+
+
+
+
+
+
+
+ 建议意见
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sub-enterprise/food-lipei/food-lipei.vue b/sub-enterprise/food-lipei/food-lipei.vue
new file mode 100644
index 0000000..f1a10ea
--- /dev/null
+++ b/sub-enterprise/food-lipei/food-lipei.vue
@@ -0,0 +1,262 @@
+
+
+
+
+
+ {{ item.state == 0 ? "已赔付" : "" }}
+ {{ item.state == 1 ? "处理中" : "" }}
+ {{ item.state == 2 ? "已拒绝" : "" }}
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+ 申请时间:
+
+ {{ item.time }}
+
+
+
+
+
+
+ 申请人:
+
+ {{ item.userName }}
+
+
+
+
+
+
+ 理赔金额:
+
+ {{ item.Units }}
+
+
+
+
+
+
+
+
+ 已经到底啦~
+
+
+
+
+
+
diff --git a/sub-enterprise/food-toubao/food-toubao.vue b/sub-enterprise/food-toubao/food-toubao.vue
new file mode 100644
index 0000000..bb061a7
--- /dev/null
+++ b/sub-enterprise/food-toubao/food-toubao.vue
@@ -0,0 +1,342 @@
+
+
+
+
+
+ {{ item.status }}
+
+
+
+ {{ item.productName }}
+
+
+
+
+
+
+ 保险公司:
+
+ {{ item.companyName }}
+
+
+
+
+
+
+ 保险期间:
+
+ {{ item.insurancePeriod }}至{{
+ item.insurancePeriodEnd
+ }}
+
+
+
+
+
+
+ 保费合计:
+
+
+ {{ item.totalPremium }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-enterprise/modelRequest/modelRequest - 副本.vue b/sub-enterprise/modelRequest/modelRequest - 副本.vue
new file mode 100644
index 0000000..5cda768
--- /dev/null
+++ b/sub-enterprise/modelRequest/modelRequest - 副本.vue
@@ -0,0 +1,321 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请选择
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-enterprise/modelRequest/modelRequest.vue b/sub-enterprise/modelRequest/modelRequest.vue
new file mode 100644
index 0000000..531b95b
--- /dev/null
+++ b/sub-enterprise/modelRequest/modelRequest.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-enterprise/organ-info/organ-info.vue b/sub-enterprise/organ-info/organ-info.vue
new file mode 100644
index 0000000..4ed2a3a
--- /dev/null
+++ b/sub-enterprise/organ-info/organ-info.vue
@@ -0,0 +1,320 @@
+
+
+
+ {{ item.name }}
+
+
+
+ 机构名称
+ {{ form.checkName }}
+
+
+ 所在城市
+ {{ form.code }}
+
+
+ 所在县区
+ {{ form.quCode }}
+
+
+ 机构地址
+ {{ form.address }}
+
+
+ 联系人
+ {{ form.contact }}
+
+
+ 联系电话
+ {{ form.tel }}
+
+
+ 服务类别
+ {{ form.service }}
+
+
+ 机构照片
+
+
+
+
+
+
+ 地图导航
+
+
+
+
+
+ {{ form.certificate }}
+
+
+
+
+
+ {{ form.serviceContent }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-enterprise/policy-business/policy-business.vue b/sub-enterprise/policy-business/policy-business.vue
new file mode 100644
index 0000000..17564d4
--- /dev/null
+++ b/sub-enterprise/policy-business/policy-business.vue
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+ 国务院关于促进连锁经营发展的若干意见
+ 沈阳市皇姑区长江街188号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sub-enterprise/policy-details/policy-details.vue b/sub-enterprise/policy-details/policy-details.vue
new file mode 100644
index 0000000..3b462fd
--- /dev/null
+++ b/sub-enterprise/policy-details/policy-details.vue
@@ -0,0 +1,109 @@
+
+
+ 辽宁省商业厅、辽宁省财政厅关于印发《推进全省“早餐工程”建设的实施意见》的通知
+
+ 辽宁省商业厅、辽宁省财务厅
+ 辽商联发[2008]27号 2008-09-24
+
+
+ 各市商业局(委)、财政局:
+
+ 为推进全省“早餐工程”建设, 更好地满足城市居民的早餐消费需求,
+ 现将《推进全省“早餐工程”建设的实施意见》 印发给你们,请结合当地实际情况,
+ 认真贯彻落实。
+
+
+ 辽宁省商业厅
+ 辽宁省财务厅
+ 二OO八年十二月二十四日
+
+
+
+
+
+
+
diff --git a/sub-enterprise/policy-guide/policy-guide - 副本.vue b/sub-enterprise/policy-guide/policy-guide - 副本.vue
new file mode 100644
index 0000000..0b4cfc3
--- /dev/null
+++ b/sub-enterprise/policy-guide/policy-guide - 副本.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
diff --git a/sub-enterprise/policy-guide/policy-guide.vue b/sub-enterprise/policy-guide/policy-guide.vue
new file mode 100644
index 0000000..3199525
--- /dev/null
+++ b/sub-enterprise/policy-guide/policy-guide.vue
@@ -0,0 +1,248 @@
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+ {{ item.title}}
+ {{item.department}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-enterprise/product-Appraise/product-Appraise.vue b/sub-enterprise/product-Appraise/product-Appraise.vue
new file mode 100644
index 0000000..3431b45
--- /dev/null
+++ b/sub-enterprise/product-Appraise/product-Appraise.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+ {{item.productName}}
+
+ 总评分:{{item.grade}}分
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-enterprise/product-Info/product-Info.vue b/sub-enterprise/product-Info/product-Info.vue
new file mode 100644
index 0000000..298309c
--- /dev/null
+++ b/sub-enterprise/product-Info/product-Info.vue
@@ -0,0 +1,146 @@
+
+
+
+
+ 保险公司:
+ {{list.company_name}}
+
+
+ 产品名称:
+ {{list.productName}}
+
+
+ 适用类别:
+ {{list.appliacateType}}
+
+
+ 发布时间
+ {{list.releasetime}}
+
+
+ 产品简介:
+ {{list.introtuction}}
+
+
+ 年保险费
+ {{list.premium}}
+
+
+ 保险责任
+ {{list.insuranceLiability}}
+
+
+ 责任限额
+
+ {{list.norm}}
+
+
+ 免赔额
+ {{list.deductibleExcess}}
+
+
+ 附加条款
+ {{list.additionalTerms}}
+
+
+ 投保所需资料
+
+ {{list.information}}
+
+
+
+ 产品网址
+
+ {{list.productWebsite}}
+
+
+
+
+
+
+
+
+
diff --git a/sub-enterprise/startInsuring/startInsuring.vue b/sub-enterprise/startInsuring/startInsuring.vue
new file mode 100644
index 0000000..b8f8f0e
--- /dev/null
+++ b/sub-enterprise/startInsuring/startInsuring.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+
+
+
+
+
+
diff --git a/sub-enterprise/testing-organizations/testing-organizations.vue b/sub-enterprise/testing-organizations/testing-organizations.vue
new file mode 100644
index 0000000..d24b242
--- /dev/null
+++ b/sub-enterprise/testing-organizations/testing-organizations.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+ 为您搜索到{{ allNum }}条结果
+
+
+
+
+
+
+ {{ item.checkName }}
+ {{ item.address }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-enterprise/toubao-xiangqing/toubao-file.vue b/sub-enterprise/toubao-xiangqing/toubao-file.vue
new file mode 100644
index 0000000..1742f29
--- /dev/null
+++ b/sub-enterprise/toubao-xiangqing/toubao-file.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-enterprise/toubao-xiangqing/toubao-xiangqing.vue b/sub-enterprise/toubao-xiangqing/toubao-xiangqing.vue
new file mode 100644
index 0000000..b614b41
--- /dev/null
+++ b/sub-enterprise/toubao-xiangqing/toubao-xiangqing.vue
@@ -0,0 +1,157 @@
+
+
+
+
+
+ 主体名称:
+ {{list.enterpriseName}}
+
+
+ 信用代码:
+ {{list.code}}
+
+
+ 经营性质:
+ {{list.manageproperty}}
+
+
+ 经营类型:
+ {{list.manageType}}
+
+
+ 产品名称:
+ {{list.productName}}
+
+
+ 保费合计
+ {{list.totalPremium}}
+
+
+ 投保状态
+ {{list.status}}
+
+
+ 保险期间
+
+ {{ list.insurancePeriod}}至{{ list.insurancePeriodEnd}}
+
+
+
+ 投保附件
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-enterprise/will-insure/will-insure.vue b/sub-enterprise/will-insure/will-insure.vue
new file mode 100644
index 0000000..8bbfce7
--- /dev/null
+++ b/sub-enterprise/will-insure/will-insure.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
diff --git a/sub-interaction/bang-dan/bang-dan.vue b/sub-interaction/bang-dan/bang-dan.vue
new file mode 100644
index 0000000..31dbe83
--- /dev/null
+++ b/sub-interaction/bang-dan/bang-dan.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+ 222
+
+ 企业类型:
+ 333
+
+
+ 负责人:
+ 2323
+
+
+ 生产地址:
+ 2323
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-interaction/bang-dan/info.vue b/sub-interaction/bang-dan/info.vue
new file mode 100644
index 0000000..c2a7302
--- /dev/null
+++ b/sub-interaction/bang-dan/info.vue
@@ -0,0 +1,111 @@
+
+
+
+
+ 主体名称
+ {{from.entName}}
+
+
+ 企业类型名称
+ {{from.enterpriseTypeName}}
+
+
+ 统一社会信用代码
+ {{from.unSocialCode}}
+
+
+ 许可证编号
+ {{from.licenseNo}}
+
+
+ 负责人
+ {{from.legalRepresentative}}
+
+
+ 生产地址
+ {{from.detailedAddress}}
+
+
+ 创建时间
+ {{from.crtTime}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-interaction/consumer-consult/consumer-consult.vue b/sub-interaction/consumer-consult/consumer-consult.vue
new file mode 100644
index 0000000..a8884e3
--- /dev/null
+++ b/sub-interaction/consumer-consult/consumer-consult.vue
@@ -0,0 +1,434 @@
+
+
+
+
+
+
+
+
+ {{item.state == 0?'未回复' : '已回复'}}
+
+
+
+
+
+
+
+
+ 发布时间:
+ {{item.createTime.slice(0,10)}}
+
+
+
+
+
+
+
+ 发布人:
+ {{item.createBy}}
+
+
+
+
+ 回复
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-interaction/excellent/excellent.vue b/sub-interaction/excellent/excellent.vue
new file mode 100644
index 0000000..55a08c2
--- /dev/null
+++ b/sub-interaction/excellent/excellent.vue
@@ -0,0 +1,120 @@
+
+
+
+
+ {{item.productName}}
+
+ 产地:
+ {{item.enterpriseName}}
+
+
+ 生产时间:
+ {{item.productTime}}
+
+
+ 上市时间:
+ {{item.marketTime}}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-interaction/online-video/info.vue b/sub-interaction/online-video/info.vue
new file mode 100644
index 0000000..a4e6376
--- /dev/null
+++ b/sub-interaction/online-video/info.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-interaction/online-video/online-video.vue b/sub-interaction/online-video/online-video.vue
new file mode 100644
index 0000000..65c74be
--- /dev/null
+++ b/sub-interaction/online-video/online-video.vue
@@ -0,0 +1,119 @@
+
+
+
+
+ {{item.title}}
+
+ 创建人:
+ {{item.createBy}}
+
+
+ 创建时间:
+ {{item.createTime}}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-interaction/publicity/form.vue b/sub-interaction/publicity/form.vue
new file mode 100644
index 0000000..3ff454e
--- /dev/null
+++ b/sub-interaction/publicity/form.vue
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-interaction/publicity/info.vue b/sub-interaction/publicity/info.vue
new file mode 100644
index 0000000..eaed63d
--- /dev/null
+++ b/sub-interaction/publicity/info.vue
@@ -0,0 +1,154 @@
+
+
+
+
+ 企业名称
+ {{from.name}}
+
+
+ 标准名称
+ {{from.standard_name}}
+
+
+ 标准编号
+ {{from.standard_code}}
+
+
+ 公开时间
+ {{from.publicate_time}}
+
+
+
+ 文本附件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-interaction/publicity/publicity.vue b/sub-interaction/publicity/publicity.vue
new file mode 100644
index 0000000..3930ce8
--- /dev/null
+++ b/sub-interaction/publicity/publicity.vue
@@ -0,0 +1,141 @@
+
+
+
+
+
+ 123
+
+ 标准名称:
+ 23
+
+
+ 标准编号:
+ 12
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-interaction/selfInfo/selfInfo.vue b/sub-interaction/selfInfo/selfInfo.vue
new file mode 100644
index 0000000..c5737c5
--- /dev/null
+++ b/sub-interaction/selfInfo/selfInfo.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+ 社会代码:
+ {{userData.code}}
+
+
+
+
+
+ 真实姓名:
+ {{userData.realName}}
+
+
+ 身份证号:
+ {{userData.identity}}
+
+
+ 手机号码:
+ {{userData.phone}}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-interaction/system/system.vue b/sub-interaction/system/system.vue
new file mode 100644
index 0000000..d3f4ce9
--- /dev/null
+++ b/sub-interaction/system/system.vue
@@ -0,0 +1,60 @@
+
+
+
+ 建设单位:
+ 辽宁省市场监督管理局
+
+
+ 版本信息:
+ v{{globalConfig.appInfo.version}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-public/addMessage/addMessage.vue b/sub-public/addMessage/addMessage.vue
new file mode 100644
index 0000000..2494ce7
--- /dev/null
+++ b/sub-public/addMessage/addMessage.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+ 提问公司:
+ 11222
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-public/allPingJia/allPingJia.vue b/sub-public/allPingJia/allPingJia.vue
new file mode 100644
index 0000000..c5df8b1
--- /dev/null
+++ b/sub-public/allPingJia/allPingJia.vue
@@ -0,0 +1,183 @@
+
+
+
+
+
+ *
+ 评分
+
+
+
+
+
+
+
+ *
+ 评价内容
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sub-public/enterprise-new-info/enterprise-new-info.vue b/sub-public/enterprise-new-info/enterprise-new-info.vue
new file mode 100644
index 0000000..7c56a0f
--- /dev/null
+++ b/sub-public/enterprise-new-info/enterprise-new-info.vue
@@ -0,0 +1,481 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+ 导航
+ 留言
+
+
+
+
+
+
+
+
+
+
diff --git a/sub-public/enterprise-query/enterprise-query.vue b/sub-public/enterprise-query/enterprise-query.vue
new file mode 100644
index 0000000..ff25d7e
--- /dev/null
+++ b/sub-public/enterprise-query/enterprise-query.vue
@@ -0,0 +1,263 @@
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+ 为您搜索到1条结果
+
+
+
+
+
+
+ asdf
+ asdf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-public/food-lipei/food-lipei.vue b/sub-public/food-lipei/food-lipei.vue
new file mode 100644
index 0000000..44d1b98
--- /dev/null
+++ b/sub-public/food-lipei/food-lipei.vue
@@ -0,0 +1,282 @@
+
+
+
+
+
+ "处理中"
+
+
+
+ 232
+
+
+
+
+
+
+ 事故类型:
+
+ 2323
+
+
+
+
+
+
+ 申请时间:
+
+ 23
+
+
+
+
+
+
+ 理赔金额:
+
+ 1232
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-public/lipei-info/lipei-info.vue b/sub-public/lipei-info/lipei-info.vue
new file mode 100644
index 0000000..7dbc1b9
--- /dev/null
+++ b/sub-public/lipei-info/lipei-info.vue
@@ -0,0 +1,236 @@
+
+
+
+ {{ item.name }}
+
+
+
+ 姓 名
+ 1
+
+
+ 身份证号
+ 2
+
+
+ 手机号码
+ 3
+
+
+ 收款账号
+ 3
+
+
+ 企业名称
+ 2
+
+
+ 事故类型
+ 3
+
+
+ 事故描述
+
+ 23
+
+
+
+
+ 申请时间
+ {{ form.appliactionTime || "" }}
+
+
+
+
+ 保险公司
+ {{ form.company_name || "" }}
+
+
+ 保险产品
+ {{ form.product_name || "" }}
+
+
+ 处理状态
+
+ {{
+ form.status == 0 ? "处理中" : form.status == 1 ? "已处理" : "已拒绝"
+ }}
+
+
+
+ 赔付金额
+ {{ form.amount || "" }}
+
+
+ 负责人
+ {{ form.curator || "" }}
+
+
+ 联系电话
+ {{ form.tel || "" }}
+
+
+ 赔偿说明
+
+ {{ form.compernsation || "" }}
+
+
+
+ 付款证明
+
+
+
+
+
+
+
+ 处理时间
+ {{ form.processingTime || "" }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-public/newAddPJ/newAddPJ.vue b/sub-public/newAddPJ/newAddPJ.vue
new file mode 100644
index 0000000..3663839
--- /dev/null
+++ b/sub-public/newAddPJ/newAddPJ.vue
@@ -0,0 +1,235 @@
+
+
+
+
+
+
+ *
+ 评分
+
+
+
+
+
+
+
+ *
+ 评价内容
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-public/oldman-teach/info.vue b/sub-public/oldman-teach/info.vue
new file mode 100644
index 0000000..0afc6cc
--- /dev/null
+++ b/sub-public/oldman-teach/info.vue
@@ -0,0 +1,119 @@
+
+
+
+
+ 123123
+ 发布时间:222222222222
+
+
+
+
+
+
+
+
+ 文件编号:232323
+
+
+
+
+
+
+
+
diff --git a/sub-public/oldman-teach/oldman-teach.vue b/sub-public/oldman-teach/oldman-teach.vue
new file mode 100644
index 0000000..8962b22
--- /dev/null
+++ b/sub-public/oldman-teach/oldman-teach.vue
@@ -0,0 +1,162 @@
+
+
+
+
+ {{ item.title }}
+
+
+ {{ item.content }}
+
+
+
+
+
+
+
+
+ 发布时间: {{ item.releasetime }}
+
+
+
+
+
+
+
+
+
diff --git a/sub-public/shenqing-lipei/form.vue b/sub-public/shenqing-lipei/form.vue
new file mode 100644
index 0000000..4c668e0
--- /dev/null
+++ b/sub-public/shenqing-lipei/form.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sub-public/shenqing-lipei/shenqing-lipei.vue b/sub-public/shenqing-lipei/shenqing-lipei.vue
new file mode 100644
index 0000000..805e74c
--- /dev/null
+++ b/sub-public/shenqing-lipei/shenqing-lipei.vue
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+ {{ item.name }}
+ 调兵山市食厨烤骨头饭店
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sub-public/shifan-chuangjian/city-county-info/index.vue b/sub-public/shifan-chuangjian/city-county-info/index.vue
new file mode 100644
index 0000000..94e1d35
--- /dev/null
+++ b/sub-public/shifan-chuangjian/city-county-info/index.vue
@@ -0,0 +1,150 @@
+
+
+
+
+ 城市名称
+ 123
+
+
+ 县区名称
+ 123123
+
+
+ 城市类别
+ 234
+
+
+ 申报年份
+ 234234
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-public/shifan-chuangjian/enterprise-info/index.vue b/sub-public/shifan-chuangjian/enterprise-info/index.vue
new file mode 100644
index 0000000..9864a7d
--- /dev/null
+++ b/sub-public/shifan-chuangjian/enterprise-info/index.vue
@@ -0,0 +1,213 @@
+
+
+
+
+ 年 度
+ 12
+
+
+ 所在地区
+ 2
+
+
+ 企业类型
+ 3
+
+
+ 申请等级
+ 3
+
+
+ 地址
+
+ {{ form.address }}
+
+
+
+ 发布时间
+ 23
+
+
+ 附件
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-public/shifan-chuangjian/shifan-chuangjian.vue b/sub-public/shifan-chuangjian/shifan-chuangjian.vue
new file mode 100644
index 0000000..cf3bcbe
--- /dev/null
+++ b/sub-public/shifan-chuangjian/shifan-chuangjian.vue
@@ -0,0 +1,336 @@
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+ 111
+ 222
+
+
+ 333
+ 444
+
+
+ 555
+ 555
+
+
+ 666
+ 777
+
+
+ 888
+ 888
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-public/society-teach/society-teach.vue b/sub-public/society-teach/society-teach.vue
new file mode 100644
index 0000000..3a967d4
--- /dev/null
+++ b/sub-public/society-teach/society-teach.vue
@@ -0,0 +1,244 @@
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+ 23
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sub-public/subNvue/enterprise-info-map/map-big.nvue b/sub-public/subNvue/enterprise-info-map/map-big.nvue
new file mode 100644
index 0000000..6581fc9
--- /dev/null
+++ b/sub-public/subNvue/enterprise-info-map/map-big.nvue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
diff --git a/sub-public/subNvue/enterprise-info-map/map-btn.nvue b/sub-public/subNvue/enterprise-info-map/map-btn.nvue
new file mode 100644
index 0000000..dc96172
--- /dev/null
+++ b/sub-public/subNvue/enterprise-info-map/map-btn.nvue
@@ -0,0 +1,49 @@
+
+
+ 地图导航
+
+
+
+
+
+
+
diff --git a/sub-public/subNvue/map-search/map-search.nvue b/sub-public/subNvue/map-search/map-search.nvue
new file mode 100644
index 0000000..d5a66e9
--- /dev/null
+++ b/sub-public/subNvue/map-search/map-search.nvue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+
diff --git a/sub-public/survey/survey.vue b/sub-public/survey/survey.vue
new file mode 100644
index 0000000..f480f2c
--- /dev/null
+++ b/sub-public/survey/survey.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
+ "未知"
+
+
+
+ 123
+
+
+
+
+
+
+ 发布人:
+
+ 213
+
+
+
+
+
+
+ 发布时间:
+
+ 123
+
+
+
+
+
+
+ 简介:
+
+ 123123
+
+
+
+
+ 我要填写
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni.scss b/uni.scss
new file mode 100644
index 0000000..ad2c6dd
--- /dev/null
+++ b/uni.scss
@@ -0,0 +1,65 @@
+/* uni.scss */
+@import 'uview-ui/theme.scss';
+
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color: #333; //基本色
+$uni-text-color-inverse: #fff; //反色
+$uni-text-color-grey: #999; //辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable: #c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color: #ffffff;
+$uni-bg-color-grey: #f8f8f8;
+$uni-bg-color-hover: #f1f1f1; //点击状态颜色
+$uni-bg-color-mask: rgba(0, 0, 0, 0.4); //遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color: #e5e5e5;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm: 12px;
+$uni-font-size-base: 14px;
+$uni-font-size-lg: 16px;
+
+/* 图片尺寸 */
+$uni-img-size-sm: 20px;
+$uni-img-size-base: 26px;
+$uni-img-size-lg: 40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title: 20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle: 26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph: 15px;
+
diff --git a/uni_modules/danH-threeDrawer/changelog.md b/uni_modules/danH-threeDrawer/changelog.md
new file mode 100644
index 0000000..2159276
--- /dev/null
+++ b/uni_modules/danH-threeDrawer/changelog.md
@@ -0,0 +1,8 @@
+## 1.0.1(2022-01-11)
+1.修改说明文档排版混乱的问题
+## 1.0.0(2022-01-11)
+1.0.0(2022-01-11)
+Features
+ - 自定义背景样式
+ - 添加触发滑动的方法
+感谢 https://ext.dcloud.net.cn/plugin?id=2328 ,本插件在此基础上修改优化
diff --git a/uni_modules/danH-threeDrawer/components/danH-threeDrawer/danH-threeDrawer.vue b/uni_modules/danH-threeDrawer/components/danH-threeDrawer/danH-threeDrawer.vue
new file mode 100644
index 0000000..435d2bc
--- /dev/null
+++ b/uni_modules/danH-threeDrawer/components/danH-threeDrawer/danH-threeDrawer.vue
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/danH-threeDrawer/package.json b/uni_modules/danH-threeDrawer/package.json
new file mode 100644
index 0000000..d6f62d7
--- /dev/null
+++ b/uni_modules/danH-threeDrawer/package.json
@@ -0,0 +1,82 @@
+{
+ "id": "danH-threeDrawer",
+ "displayName": "danH-threeDrawer",
+ "version": "1.0.1",
+ "description": "danH-threeDrawer 三段式上下滑动drawer",
+ "keywords": [
+ "drawer",
+ "三段滑动",
+ "高德滑动"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "u"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "u",
+ "QQ浏览器(Android)": "u"
+ },
+ "H5-pc": {
+ "Chrome": "u",
+ "IE": "u",
+ "Edge": "u",
+ "Firefox": "u",
+ "Safari": "u"
+ },
+ "小程序": {
+ "微信": "u",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/danH-threeDrawer/readme.md b/uni_modules/danH-threeDrawer/readme.md
new file mode 100644
index 0000000..c321ca3
--- /dev/null
+++ b/uni_modules/danH-threeDrawer/readme.md
@@ -0,0 +1,22 @@
+# danH-threeDrawer 三段式上下滑动drawer
+
+------
+
+danH-threeDrawer 三段式上下滑动drawer,仿高德地图:
+示例:
+
+
+
+
+
+
+
+属性:
+
+| 属性 | 是否必填|值类型|默认值 | 说明 |
+| ----- |:----: |:---: |:--: | :------ |
+| topSpac | false | Number | 0 |最高点距离顶部距离rpx|
+| bottomSpac | false | Number | 80|最小高度rpx|
+| middleSpace | false | Number | |中间状态高度,默认计算最高到最低高度的一半|
+| isMiddle | false |Boolean|true|初始化时是否在中间位置|
diff --git a/uni_modules/mumu-getQrcode/changelog.md b/uni_modules/mumu-getQrcode/changelog.md
new file mode 100644
index 0000000..0a91a24
--- /dev/null
+++ b/uni_modules/mumu-getQrcode/changelog.md
@@ -0,0 +1,31 @@
+## 1.3.0(2022-06-28)
+1. [修改] - 之前使用 canvas 在页面上展示画面,改为 video 标签在页面展示视频流画面。
+2. [增强] - 现在只获取扫描框中的画面进行二维码识别,这样可有效的节省资源与提高识别效率。
+3. [增强] - 提升调用摄像头的分辨率。
+4. [增强] - 提升识别大二维码的能力,之前在低端机上识别大二维码容易识别不到。
+5. [新增] - 新增错误事件返回,返回内部报错。错误说明请查看文档。
+## 1.2.1(2022-06-01)
+
+新增闪光灯开关(只有在谷歌内核浏览器中显示,推荐微信内置浏览器)
+
+新增https环境检测(总有人不看介绍,直接使用导致无法正常调用摄像头。)
+
+更新文档
+## 1.2.0(2022-06-01)
+新增闪光灯开关(只有在谷歌内核浏览器中显示,推荐微信内置浏览器)
+
+新增https环境检测(总有人不看介绍,直接使用导致无法正常调用摄像头。)
+## 1.1.0(2022-01-25)
+1.支持全屏 -
+2.支持前置摄像头 -
+3.支持高清调用摄像头 -
+## 1.0.4(2021-12-24)
+更新插件说明
+## 1.0.3(2021-12-21)
+希望大家多去我小程序中逛一些,就当支持作者了。谢谢大家,底下有小程序二维码。
+## 1.0.2(2021-12-21)
+更新文档
+## 1.0.1(2021-12-21)
+正式上线插件
+## 1.0.0(2021-12-21)
+1.0.0
diff --git a/uni_modules/mumu-getQrcode/components/mumu-getQrcode/jsQR.js b/uni_modules/mumu-getQrcode/components/mumu-getQrcode/jsQR.js
new file mode 100644
index 0000000..429896a
--- /dev/null
+++ b/uni_modules/mumu-getQrcode/components/mumu-getQrcode/jsQR.js
@@ -0,0 +1,10102 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define([], factory);
+ else if(typeof exports === 'object')
+ exports["jsQR"] = factory();
+ else
+ root["jsQR"] = factory();
+})(typeof self !== 'undefined' ? self : this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 3);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var BitMatrix = /** @class */ (function () {
+ function BitMatrix(data, width) {
+ this.width = width;
+ this.height = data.length / width;
+ this.data = data;
+ }
+ BitMatrix.createEmpty = function (width, height) {
+ return new BitMatrix(new Uint8ClampedArray(width * height), width);
+ };
+ BitMatrix.prototype.get = function (x, y) {
+ if (x < 0 || x >= this.width || y < 0 || y >= this.height) {
+ return false;
+ }
+ return !!this.data[y * this.width + x];
+ };
+ BitMatrix.prototype.set = function (x, y, v) {
+ this.data[y * this.width + x] = v ? 1 : 0;
+ };
+ BitMatrix.prototype.setRegion = function (left, top, width, height, v) {
+ for (var y = top; y < top + height; y++) {
+ for (var x = left; x < left + width; x++) {
+ this.set(x, y, !!v);
+ }
+ }
+ };
+ return BitMatrix;
+}());
+exports.BitMatrix = BitMatrix;
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var GenericGFPoly_1 = __webpack_require__(2);
+function addOrSubtractGF(a, b) {
+ return a ^ b; // tslint:disable-line:no-bitwise
+}
+exports.addOrSubtractGF = addOrSubtractGF;
+var GenericGF = /** @class */ (function () {
+ function GenericGF(primitive, size, genBase) {
+ this.primitive = primitive;
+ this.size = size;
+ this.generatorBase = genBase;
+ this.expTable = new Array(this.size);
+ this.logTable = new Array(this.size);
+ var x = 1;
+ for (var i = 0; i < this.size; i++) {
+ this.expTable[i] = x;
+ x = x * 2;
+ if (x >= this.size) {
+ x = (x ^ this.primitive) & (this.size - 1); // tslint:disable-line:no-bitwise
+ }
+ }
+ for (var i = 0; i < this.size - 1; i++) {
+ this.logTable[this.expTable[i]] = i;
+ }
+ this.zero = new GenericGFPoly_1.default(this, Uint8ClampedArray.from([0]));
+ this.one = new GenericGFPoly_1.default(this, Uint8ClampedArray.from([1]));
+ }
+ GenericGF.prototype.multiply = function (a, b) {
+ if (a === 0 || b === 0) {
+ return 0;
+ }
+ return this.expTable[(this.logTable[a] + this.logTable[b]) % (this.size - 1)];
+ };
+ GenericGF.prototype.inverse = function (a) {
+ if (a === 0) {
+ throw new Error("Can't invert 0");
+ }
+ return this.expTable[this.size - this.logTable[a] - 1];
+ };
+ GenericGF.prototype.buildMonomial = function (degree, coefficient) {
+ if (degree < 0) {
+ throw new Error("Invalid monomial degree less than 0");
+ }
+ if (coefficient === 0) {
+ return this.zero;
+ }
+ var coefficients = new Uint8ClampedArray(degree + 1);
+ coefficients[0] = coefficient;
+ return new GenericGFPoly_1.default(this, coefficients);
+ };
+ GenericGF.prototype.log = function (a) {
+ if (a === 0) {
+ throw new Error("Can't take log(0)");
+ }
+ return this.logTable[a];
+ };
+ GenericGF.prototype.exp = function (a) {
+ return this.expTable[a];
+ };
+ return GenericGF;
+}());
+exports.default = GenericGF;
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var GenericGF_1 = __webpack_require__(1);
+var GenericGFPoly = /** @class */ (function () {
+ function GenericGFPoly(field, coefficients) {
+ if (coefficients.length === 0) {
+ throw new Error("No coefficients.");
+ }
+ this.field = field;
+ var coefficientsLength = coefficients.length;
+ if (coefficientsLength > 1 && coefficients[0] === 0) {
+ // Leading term must be non-zero for anything except the constant polynomial "0"
+ var firstNonZero = 1;
+ while (firstNonZero < coefficientsLength && coefficients[firstNonZero] === 0) {
+ firstNonZero++;
+ }
+ if (firstNonZero === coefficientsLength) {
+ this.coefficients = field.zero.coefficients;
+ }
+ else {
+ this.coefficients = new Uint8ClampedArray(coefficientsLength - firstNonZero);
+ for (var i = 0; i < this.coefficients.length; i++) {
+ this.coefficients[i] = coefficients[firstNonZero + i];
+ }
+ }
+ }
+ else {
+ this.coefficients = coefficients;
+ }
+ }
+ GenericGFPoly.prototype.degree = function () {
+ return this.coefficients.length - 1;
+ };
+ GenericGFPoly.prototype.isZero = function () {
+ return this.coefficients[0] === 0;
+ };
+ GenericGFPoly.prototype.getCoefficient = function (degree) {
+ return this.coefficients[this.coefficients.length - 1 - degree];
+ };
+ GenericGFPoly.prototype.addOrSubtract = function (other) {
+ var _a;
+ if (this.isZero()) {
+ return other;
+ }
+ if (other.isZero()) {
+ return this;
+ }
+ var smallerCoefficients = this.coefficients;
+ var largerCoefficients = other.coefficients;
+ if (smallerCoefficients.length > largerCoefficients.length) {
+ _a = [largerCoefficients, smallerCoefficients], smallerCoefficients = _a[0], largerCoefficients = _a[1];
+ }
+ var sumDiff = new Uint8ClampedArray(largerCoefficients.length);
+ var lengthDiff = largerCoefficients.length - smallerCoefficients.length;
+ for (var i = 0; i < lengthDiff; i++) {
+ sumDiff[i] = largerCoefficients[i];
+ }
+ for (var i = lengthDiff; i < largerCoefficients.length; i++) {
+ sumDiff[i] = GenericGF_1.addOrSubtractGF(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);
+ }
+ return new GenericGFPoly(this.field, sumDiff);
+ };
+ GenericGFPoly.prototype.multiply = function (scalar) {
+ if (scalar === 0) {
+ return this.field.zero;
+ }
+ if (scalar === 1) {
+ return this;
+ }
+ var size = this.coefficients.length;
+ var product = new Uint8ClampedArray(size);
+ for (var i = 0; i < size; i++) {
+ product[i] = this.field.multiply(this.coefficients[i], scalar);
+ }
+ return new GenericGFPoly(this.field, product);
+ };
+ GenericGFPoly.prototype.multiplyPoly = function (other) {
+ if (this.isZero() || other.isZero()) {
+ return this.field.zero;
+ }
+ var aCoefficients = this.coefficients;
+ var aLength = aCoefficients.length;
+ var bCoefficients = other.coefficients;
+ var bLength = bCoefficients.length;
+ var product = new Uint8ClampedArray(aLength + bLength - 1);
+ for (var i = 0; i < aLength; i++) {
+ var aCoeff = aCoefficients[i];
+ for (var j = 0; j < bLength; j++) {
+ product[i + j] = GenericGF_1.addOrSubtractGF(product[i + j], this.field.multiply(aCoeff, bCoefficients[j]));
+ }
+ }
+ return new GenericGFPoly(this.field, product);
+ };
+ GenericGFPoly.prototype.multiplyByMonomial = function (degree, coefficient) {
+ if (degree < 0) {
+ throw new Error("Invalid degree less than 0");
+ }
+ if (coefficient === 0) {
+ return this.field.zero;
+ }
+ var size = this.coefficients.length;
+ var product = new Uint8ClampedArray(size + degree);
+ for (var i = 0; i < size; i++) {
+ product[i] = this.field.multiply(this.coefficients[i], coefficient);
+ }
+ return new GenericGFPoly(this.field, product);
+ };
+ GenericGFPoly.prototype.evaluateAt = function (a) {
+ var result = 0;
+ if (a === 0) {
+ // Just return the x^0 coefficient
+ return this.getCoefficient(0);
+ }
+ var size = this.coefficients.length;
+ if (a === 1) {
+ // Just the sum of the coefficients
+ this.coefficients.forEach(function (coefficient) {
+ result = GenericGF_1.addOrSubtractGF(result, coefficient);
+ });
+ return result;
+ }
+ result = this.coefficients[0];
+ for (var i = 1; i < size; i++) {
+ result = GenericGF_1.addOrSubtractGF(this.field.multiply(a, result), this.coefficients[i]);
+ }
+ return result;
+ };
+ return GenericGFPoly;
+}());
+exports.default = GenericGFPoly;
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var binarizer_1 = __webpack_require__(4);
+var decoder_1 = __webpack_require__(5);
+var extractor_1 = __webpack_require__(11);
+var locator_1 = __webpack_require__(12);
+function scan(matrix) {
+ var locations = locator_1.locate(matrix);
+ if (!locations) {
+ return null;
+ }
+ for (var _i = 0, locations_1 = locations; _i < locations_1.length; _i++) {
+ var location_1 = locations_1[_i];
+ var extracted = extractor_1.extract(matrix, location_1);
+ var decoded = decoder_1.decode(extracted.matrix);
+ if (decoded) {
+ return {
+ binaryData: decoded.bytes,
+ data: decoded.text,
+ chunks: decoded.chunks,
+ version: decoded.version,
+ location: {
+ topRightCorner: extracted.mappingFunction(location_1.dimension, 0),
+ topLeftCorner: extracted.mappingFunction(0, 0),
+ bottomRightCorner: extracted.mappingFunction(location_1.dimension, location_1.dimension),
+ bottomLeftCorner: extracted.mappingFunction(0, location_1.dimension),
+ topRightFinderPattern: location_1.topRight,
+ topLeftFinderPattern: location_1.topLeft,
+ bottomLeftFinderPattern: location_1.bottomLeft,
+ bottomRightAlignmentPattern: location_1.alignmentPattern,
+ },
+ };
+ }
+ }
+ return null;
+}
+var defaultOptions = {
+ inversionAttempts: "attemptBoth",
+};
+function jsQR(data, width, height, providedOptions) {
+ if (providedOptions === void 0) { providedOptions = {}; }
+ var options = defaultOptions;
+ Object.keys(options || {}).forEach(function (opt) {
+ options[opt] = providedOptions[opt] || options[opt];
+ });
+ var shouldInvert = options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst";
+ var tryInvertedFirst = options.inversionAttempts === "onlyInvert" || options.inversionAttempts === "invertFirst";
+ var _a = binarizer_1.binarize(data, width, height, shouldInvert), binarized = _a.binarized, inverted = _a.inverted;
+ var result = scan(tryInvertedFirst ? inverted : binarized);
+ if (!result && (options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst")) {
+ result = scan(tryInvertedFirst ? binarized : inverted);
+ }
+ return result;
+}
+jsQR.default = jsQR;
+exports.default = jsQR;
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var BitMatrix_1 = __webpack_require__(0);
+var REGION_SIZE = 8;
+var MIN_DYNAMIC_RANGE = 24;
+function numBetween(value, min, max) {
+ return value < min ? min : value > max ? max : value;
+}
+// Like BitMatrix but accepts arbitry Uint8 values
+var Matrix = /** @class */ (function () {
+ function Matrix(width, height) {
+ this.width = width;
+ this.data = new Uint8ClampedArray(width * height);
+ }
+ Matrix.prototype.get = function (x, y) {
+ return this.data[y * this.width + x];
+ };
+ Matrix.prototype.set = function (x, y, value) {
+ this.data[y * this.width + x] = value;
+ };
+ return Matrix;
+}());
+function binarize(data, width, height, returnInverted) {
+ if (data.length !== width * height * 4) {
+ throw new Error("Malformed data passed to binarizer.");
+ }
+ // Convert image to greyscale
+ var greyscalePixels = new Matrix(width, height);
+ for (var x = 0; x < width; x++) {
+ for (var y = 0; y < height; y++) {
+ var r = data[((y * width + x) * 4) + 0];
+ var g = data[((y * width + x) * 4) + 1];
+ var b = data[((y * width + x) * 4) + 2];
+ greyscalePixels.set(x, y, 0.2126 * r + 0.7152 * g + 0.0722 * b);
+ }
+ }
+ var horizontalRegionCount = Math.ceil(width / REGION_SIZE);
+ var verticalRegionCount = Math.ceil(height / REGION_SIZE);
+ var blackPoints = new Matrix(horizontalRegionCount, verticalRegionCount);
+ for (var verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) {
+ for (var hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) {
+ var sum = 0;
+ var min = Infinity;
+ var max = 0;
+ for (var y = 0; y < REGION_SIZE; y++) {
+ for (var x = 0; x < REGION_SIZE; x++) {
+ var pixelLumosity = greyscalePixels.get(hortizontalRegion * REGION_SIZE + x, verticalRegion * REGION_SIZE + y);
+ sum += pixelLumosity;
+ min = Math.min(min, pixelLumosity);
+ max = Math.max(max, pixelLumosity);
+ }
+ }
+ var average = sum / (Math.pow(REGION_SIZE, 2));
+ if (max - min <= MIN_DYNAMIC_RANGE) {
+ // If variation within the block is low, assume this is a block with only light or only
+ // dark pixels. In that case we do not want to use the average, as it would divide this
+ // low contrast area into black and white pixels, essentially creating data out of noise.
+ //
+ // Default the blackpoint for these blocks to be half the min - effectively white them out
+ average = min / 2;
+ if (verticalRegion > 0 && hortizontalRegion > 0) {
+ // Correct the "white background" assumption for blocks that have neighbors by comparing
+ // the pixels in this block to the previously calculated black points. This is based on
+ // the fact that dark barcode symbology is always surrounded by some amount of light
+ // background for which reasonable black point estimates were made. The bp estimated at
+ // the boundaries is used for the interior.
+ // The (min < bp) is arbitrary but works better than other heuristics that were tried.
+ var averageNeighborBlackPoint = (blackPoints.get(hortizontalRegion, verticalRegion - 1) +
+ (2 * blackPoints.get(hortizontalRegion - 1, verticalRegion)) +
+ blackPoints.get(hortizontalRegion - 1, verticalRegion - 1)) / 4;
+ if (min < averageNeighborBlackPoint) {
+ average = averageNeighborBlackPoint;
+ }
+ }
+ }
+ blackPoints.set(hortizontalRegion, verticalRegion, average);
+ }
+ }
+ var binarized = BitMatrix_1.BitMatrix.createEmpty(width, height);
+ var inverted = null;
+ if (returnInverted) {
+ inverted = BitMatrix_1.BitMatrix.createEmpty(width, height);
+ }
+ for (var verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) {
+ for (var hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) {
+ var left = numBetween(hortizontalRegion, 2, horizontalRegionCount - 3);
+ var top_1 = numBetween(verticalRegion, 2, verticalRegionCount - 3);
+ var sum = 0;
+ for (var xRegion = -2; xRegion <= 2; xRegion++) {
+ for (var yRegion = -2; yRegion <= 2; yRegion++) {
+ sum += blackPoints.get(left + xRegion, top_1 + yRegion);
+ }
+ }
+ var threshold = sum / 25;
+ for (var xRegion = 0; xRegion < REGION_SIZE; xRegion++) {
+ for (var yRegion = 0; yRegion < REGION_SIZE; yRegion++) {
+ var x = hortizontalRegion * REGION_SIZE + xRegion;
+ var y = verticalRegion * REGION_SIZE + yRegion;
+ var lum = greyscalePixels.get(x, y);
+ binarized.set(x, y, lum <= threshold);
+ if (returnInverted) {
+ inverted.set(x, y, !(lum <= threshold));
+ }
+ }
+ }
+ }
+ }
+ if (returnInverted) {
+ return { binarized: binarized, inverted: inverted };
+ }
+ return { binarized: binarized };
+}
+exports.binarize = binarize;
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var BitMatrix_1 = __webpack_require__(0);
+var decodeData_1 = __webpack_require__(6);
+var reedsolomon_1 = __webpack_require__(9);
+var version_1 = __webpack_require__(10);
+// tslint:disable:no-bitwise
+function numBitsDiffering(x, y) {
+ var z = x ^ y;
+ var bitCount = 0;
+ while (z) {
+ bitCount++;
+ z &= z - 1;
+ }
+ return bitCount;
+}
+function pushBit(bit, byte) {
+ return (byte << 1) | bit;
+}
+// tslint:enable:no-bitwise
+var FORMAT_INFO_TABLE = [
+ { bits: 0x5412, formatInfo: { errorCorrectionLevel: 1, dataMask: 0 } },
+ { bits: 0x5125, formatInfo: { errorCorrectionLevel: 1, dataMask: 1 } },
+ { bits: 0x5E7C, formatInfo: { errorCorrectionLevel: 1, dataMask: 2 } },
+ { bits: 0x5B4B, formatInfo: { errorCorrectionLevel: 1, dataMask: 3 } },
+ { bits: 0x45F9, formatInfo: { errorCorrectionLevel: 1, dataMask: 4 } },
+ { bits: 0x40CE, formatInfo: { errorCorrectionLevel: 1, dataMask: 5 } },
+ { bits: 0x4F97, formatInfo: { errorCorrectionLevel: 1, dataMask: 6 } },
+ { bits: 0x4AA0, formatInfo: { errorCorrectionLevel: 1, dataMask: 7 } },
+ { bits: 0x77C4, formatInfo: { errorCorrectionLevel: 0, dataMask: 0 } },
+ { bits: 0x72F3, formatInfo: { errorCorrectionLevel: 0, dataMask: 1 } },
+ { bits: 0x7DAA, formatInfo: { errorCorrectionLevel: 0, dataMask: 2 } },
+ { bits: 0x789D, formatInfo: { errorCorrectionLevel: 0, dataMask: 3 } },
+ { bits: 0x662F, formatInfo: { errorCorrectionLevel: 0, dataMask: 4 } },
+ { bits: 0x6318, formatInfo: { errorCorrectionLevel: 0, dataMask: 5 } },
+ { bits: 0x6C41, formatInfo: { errorCorrectionLevel: 0, dataMask: 6 } },
+ { bits: 0x6976, formatInfo: { errorCorrectionLevel: 0, dataMask: 7 } },
+ { bits: 0x1689, formatInfo: { errorCorrectionLevel: 3, dataMask: 0 } },
+ { bits: 0x13BE, formatInfo: { errorCorrectionLevel: 3, dataMask: 1 } },
+ { bits: 0x1CE7, formatInfo: { errorCorrectionLevel: 3, dataMask: 2 } },
+ { bits: 0x19D0, formatInfo: { errorCorrectionLevel: 3, dataMask: 3 } },
+ { bits: 0x0762, formatInfo: { errorCorrectionLevel: 3, dataMask: 4 } },
+ { bits: 0x0255, formatInfo: { errorCorrectionLevel: 3, dataMask: 5 } },
+ { bits: 0x0D0C, formatInfo: { errorCorrectionLevel: 3, dataMask: 6 } },
+ { bits: 0x083B, formatInfo: { errorCorrectionLevel: 3, dataMask: 7 } },
+ { bits: 0x355F, formatInfo: { errorCorrectionLevel: 2, dataMask: 0 } },
+ { bits: 0x3068, formatInfo: { errorCorrectionLevel: 2, dataMask: 1 } },
+ { bits: 0x3F31, formatInfo: { errorCorrectionLevel: 2, dataMask: 2 } },
+ { bits: 0x3A06, formatInfo: { errorCorrectionLevel: 2, dataMask: 3 } },
+ { bits: 0x24B4, formatInfo: { errorCorrectionLevel: 2, dataMask: 4 } },
+ { bits: 0x2183, formatInfo: { errorCorrectionLevel: 2, dataMask: 5 } },
+ { bits: 0x2EDA, formatInfo: { errorCorrectionLevel: 2, dataMask: 6 } },
+ { bits: 0x2BED, formatInfo: { errorCorrectionLevel: 2, dataMask: 7 } },
+];
+var DATA_MASKS = [
+ function (p) { return ((p.y + p.x) % 2) === 0; },
+ function (p) { return (p.y % 2) === 0; },
+ function (p) { return p.x % 3 === 0; },
+ function (p) { return (p.y + p.x) % 3 === 0; },
+ function (p) { return (Math.floor(p.y / 2) + Math.floor(p.x / 3)) % 2 === 0; },
+ function (p) { return ((p.x * p.y) % 2) + ((p.x * p.y) % 3) === 0; },
+ function (p) { return ((((p.y * p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; },
+ function (p) { return ((((p.y + p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; },
+];
+function buildFunctionPatternMask(version) {
+ var dimension = 17 + 4 * version.versionNumber;
+ var matrix = BitMatrix_1.BitMatrix.createEmpty(dimension, dimension);
+ matrix.setRegion(0, 0, 9, 9, true); // Top left finder pattern + separator + format
+ matrix.setRegion(dimension - 8, 0, 8, 9, true); // Top right finder pattern + separator + format
+ matrix.setRegion(0, dimension - 8, 9, 8, true); // Bottom left finder pattern + separator + format
+ // Alignment patterns
+ for (var _i = 0, _a = version.alignmentPatternCenters; _i < _a.length; _i++) {
+ var x = _a[_i];
+ for (var _b = 0, _c = version.alignmentPatternCenters; _b < _c.length; _b++) {
+ var y = _c[_b];
+ if (!(x === 6 && y === 6 || x === 6 && y === dimension - 7 || x === dimension - 7 && y === 6)) {
+ matrix.setRegion(x - 2, y - 2, 5, 5, true);
+ }
+ }
+ }
+ matrix.setRegion(6, 9, 1, dimension - 17, true); // Vertical timing pattern
+ matrix.setRegion(9, 6, dimension - 17, 1, true); // Horizontal timing pattern
+ if (version.versionNumber > 6) {
+ matrix.setRegion(dimension - 11, 0, 3, 6, true); // Version info, top right
+ matrix.setRegion(0, dimension - 11, 6, 3, true); // Version info, bottom left
+ }
+ return matrix;
+}
+function readCodewords(matrix, version, formatInfo) {
+ var dataMask = DATA_MASKS[formatInfo.dataMask];
+ var dimension = matrix.height;
+ var functionPatternMask = buildFunctionPatternMask(version);
+ var codewords = [];
+ var currentByte = 0;
+ var bitsRead = 0;
+ // Read columns in pairs, from right to left
+ var readingUp = true;
+ for (var columnIndex = dimension - 1; columnIndex > 0; columnIndex -= 2) {
+ if (columnIndex === 6) { // Skip whole column with vertical alignment pattern;
+ columnIndex--;
+ }
+ for (var i = 0; i < dimension; i++) {
+ var y = readingUp ? dimension - 1 - i : i;
+ for (var columnOffset = 0; columnOffset < 2; columnOffset++) {
+ var x = columnIndex - columnOffset;
+ if (!functionPatternMask.get(x, y)) {
+ bitsRead++;
+ var bit = matrix.get(x, y);
+ if (dataMask({ y: y, x: x })) {
+ bit = !bit;
+ }
+ currentByte = pushBit(bit, currentByte);
+ if (bitsRead === 8) { // Whole bytes
+ codewords.push(currentByte);
+ bitsRead = 0;
+ currentByte = 0;
+ }
+ }
+ }
+ }
+ readingUp = !readingUp;
+ }
+ return codewords;
+}
+function readVersion(matrix) {
+ var dimension = matrix.height;
+ var provisionalVersion = Math.floor((dimension - 17) / 4);
+ if (provisionalVersion <= 6) { // 6 and under dont have version info in the QR code
+ return version_1.VERSIONS[provisionalVersion - 1];
+ }
+ var topRightVersionBits = 0;
+ for (var y = 5; y >= 0; y--) {
+ for (var x = dimension - 9; x >= dimension - 11; x--) {
+ topRightVersionBits = pushBit(matrix.get(x, y), topRightVersionBits);
+ }
+ }
+ var bottomLeftVersionBits = 0;
+ for (var x = 5; x >= 0; x--) {
+ for (var y = dimension - 9; y >= dimension - 11; y--) {
+ bottomLeftVersionBits = pushBit(matrix.get(x, y), bottomLeftVersionBits);
+ }
+ }
+ var bestDifference = Infinity;
+ var bestVersion;
+ for (var _i = 0, VERSIONS_1 = version_1.VERSIONS; _i < VERSIONS_1.length; _i++) {
+ var version = VERSIONS_1[_i];
+ if (version.infoBits === topRightVersionBits || version.infoBits === bottomLeftVersionBits) {
+ return version;
+ }
+ var difference = numBitsDiffering(topRightVersionBits, version.infoBits);
+ if (difference < bestDifference) {
+ bestVersion = version;
+ bestDifference = difference;
+ }
+ difference = numBitsDiffering(bottomLeftVersionBits, version.infoBits);
+ if (difference < bestDifference) {
+ bestVersion = version;
+ bestDifference = difference;
+ }
+ }
+ // We can tolerate up to 3 bits of error since no two version info codewords will
+ // differ in less than 8 bits.
+ if (bestDifference <= 3) {
+ return bestVersion;
+ }
+}
+function readFormatInformation(matrix) {
+ var topLeftFormatInfoBits = 0;
+ for (var x = 0; x <= 8; x++) {
+ if (x !== 6) { // Skip timing pattern bit
+ topLeftFormatInfoBits = pushBit(matrix.get(x, 8), topLeftFormatInfoBits);
+ }
+ }
+ for (var y = 7; y >= 0; y--) {
+ if (y !== 6) { // Skip timing pattern bit
+ topLeftFormatInfoBits = pushBit(matrix.get(8, y), topLeftFormatInfoBits);
+ }
+ }
+ var dimension = matrix.height;
+ var topRightBottomRightFormatInfoBits = 0;
+ for (var y = dimension - 1; y >= dimension - 7; y--) { // bottom left
+ topRightBottomRightFormatInfoBits = pushBit(matrix.get(8, y), topRightBottomRightFormatInfoBits);
+ }
+ for (var x = dimension - 8; x < dimension; x++) { // top right
+ topRightBottomRightFormatInfoBits = pushBit(matrix.get(x, 8), topRightBottomRightFormatInfoBits);
+ }
+ var bestDifference = Infinity;
+ var bestFormatInfo = null;
+ for (var _i = 0, FORMAT_INFO_TABLE_1 = FORMAT_INFO_TABLE; _i < FORMAT_INFO_TABLE_1.length; _i++) {
+ var _a = FORMAT_INFO_TABLE_1[_i], bits = _a.bits, formatInfo = _a.formatInfo;
+ if (bits === topLeftFormatInfoBits || bits === topRightBottomRightFormatInfoBits) {
+ return formatInfo;
+ }
+ var difference = numBitsDiffering(topLeftFormatInfoBits, bits);
+ if (difference < bestDifference) {
+ bestFormatInfo = formatInfo;
+ bestDifference = difference;
+ }
+ if (topLeftFormatInfoBits !== topRightBottomRightFormatInfoBits) { // also try the other option
+ difference = numBitsDiffering(topRightBottomRightFormatInfoBits, bits);
+ if (difference < bestDifference) {
+ bestFormatInfo = formatInfo;
+ bestDifference = difference;
+ }
+ }
+ }
+ // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match
+ if (bestDifference <= 3) {
+ return bestFormatInfo;
+ }
+ return null;
+}
+function getDataBlocks(codewords, version, ecLevel) {
+ var ecInfo = version.errorCorrectionLevels[ecLevel];
+ var dataBlocks = [];
+ var totalCodewords = 0;
+ ecInfo.ecBlocks.forEach(function (block) {
+ for (var i = 0; i < block.numBlocks; i++) {
+ dataBlocks.push({ numDataCodewords: block.dataCodewordsPerBlock, codewords: [] });
+ totalCodewords += block.dataCodewordsPerBlock + ecInfo.ecCodewordsPerBlock;
+ }
+ });
+ // In some cases the QR code will be malformed enough that we pull off more or less than we should.
+ // If we pull off less there's nothing we can do.
+ // If we pull off more we can safely truncate
+ if (codewords.length < totalCodewords) {
+ return null;
+ }
+ codewords = codewords.slice(0, totalCodewords);
+ var shortBlockSize = ecInfo.ecBlocks[0].dataCodewordsPerBlock;
+ // Pull codewords to fill the blocks up to the minimum size
+ for (var i = 0; i < shortBlockSize; i++) {
+ for (var _i = 0, dataBlocks_1 = dataBlocks; _i < dataBlocks_1.length; _i++) {
+ var dataBlock = dataBlocks_1[_i];
+ dataBlock.codewords.push(codewords.shift());
+ }
+ }
+ // If there are any large blocks, pull codewords to fill the last element of those
+ if (ecInfo.ecBlocks.length > 1) {
+ var smallBlockCount = ecInfo.ecBlocks[0].numBlocks;
+ var largeBlockCount = ecInfo.ecBlocks[1].numBlocks;
+ for (var i = 0; i < largeBlockCount; i++) {
+ dataBlocks[smallBlockCount + i].codewords.push(codewords.shift());
+ }
+ }
+ // Add the rest of the codewords to the blocks. These are the error correction codewords.
+ while (codewords.length > 0) {
+ for (var _a = 0, dataBlocks_2 = dataBlocks; _a < dataBlocks_2.length; _a++) {
+ var dataBlock = dataBlocks_2[_a];
+ dataBlock.codewords.push(codewords.shift());
+ }
+ }
+ return dataBlocks;
+}
+function decodeMatrix(matrix) {
+ var version = readVersion(matrix);
+ if (!version) {
+ return null;
+ }
+ var formatInfo = readFormatInformation(matrix);
+ if (!formatInfo) {
+ return null;
+ }
+ var codewords = readCodewords(matrix, version, formatInfo);
+ var dataBlocks = getDataBlocks(codewords, version, formatInfo.errorCorrectionLevel);
+ if (!dataBlocks) {
+ return null;
+ }
+ // Count total number of data bytes
+ var totalBytes = dataBlocks.reduce(function (a, b) { return a + b.numDataCodewords; }, 0);
+ var resultBytes = new Uint8ClampedArray(totalBytes);
+ var resultIndex = 0;
+ for (var _i = 0, dataBlocks_3 = dataBlocks; _i < dataBlocks_3.length; _i++) {
+ var dataBlock = dataBlocks_3[_i];
+ var correctedBytes = reedsolomon_1.decode(dataBlock.codewords, dataBlock.codewords.length - dataBlock.numDataCodewords);
+ if (!correctedBytes) {
+ return null;
+ }
+ for (var i = 0; i < dataBlock.numDataCodewords; i++) {
+ resultBytes[resultIndex++] = correctedBytes[i];
+ }
+ }
+ try {
+ return decodeData_1.decode(resultBytes, version.versionNumber);
+ }
+ catch (_a) {
+ return null;
+ }
+}
+function decode(matrix) {
+ if (matrix == null) {
+ return null;
+ }
+ var result = decodeMatrix(matrix);
+ if (result) {
+ return result;
+ }
+ // Decoding didn't work, try mirroring the QR across the topLeft -> bottomRight line.
+ for (var x = 0; x < matrix.width; x++) {
+ for (var y = x + 1; y < matrix.height; y++) {
+ if (matrix.get(x, y) !== matrix.get(y, x)) {
+ matrix.set(x, y, !matrix.get(x, y));
+ matrix.set(y, x, !matrix.get(y, x));
+ }
+ }
+ }
+ return decodeMatrix(matrix);
+}
+exports.decode = decode;
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+// tslint:disable:no-bitwise
+var BitStream_1 = __webpack_require__(7);
+var shiftJISTable_1 = __webpack_require__(8);
+var Mode;
+(function (Mode) {
+ Mode["Numeric"] = "numeric";
+ Mode["Alphanumeric"] = "alphanumeric";
+ Mode["Byte"] = "byte";
+ Mode["Kanji"] = "kanji";
+ Mode["ECI"] = "eci";
+})(Mode = exports.Mode || (exports.Mode = {}));
+var ModeByte;
+(function (ModeByte) {
+ ModeByte[ModeByte["Terminator"] = 0] = "Terminator";
+ ModeByte[ModeByte["Numeric"] = 1] = "Numeric";
+ ModeByte[ModeByte["Alphanumeric"] = 2] = "Alphanumeric";
+ ModeByte[ModeByte["Byte"] = 4] = "Byte";
+ ModeByte[ModeByte["Kanji"] = 8] = "Kanji";
+ ModeByte[ModeByte["ECI"] = 7] = "ECI";
+ // StructuredAppend = 0x3,
+ // FNC1FirstPosition = 0x5,
+ // FNC1SecondPosition = 0x9,
+})(ModeByte || (ModeByte = {}));
+function decodeNumeric(stream, size) {
+ var bytes = [];
+ var text = "";
+ var characterCountSize = [10, 12, 14][size];
+ var length = stream.readBits(characterCountSize);
+ // Read digits in groups of 3
+ while (length >= 3) {
+ var num = stream.readBits(10);
+ if (num >= 1000) {
+ throw new Error("Invalid numeric value above 999");
+ }
+ var a = Math.floor(num / 100);
+ var b = Math.floor(num / 10) % 10;
+ var c = num % 10;
+ bytes.push(48 + a, 48 + b, 48 + c);
+ text += a.toString() + b.toString() + c.toString();
+ length -= 3;
+ }
+ // If the number of digits aren't a multiple of 3, the remaining digits are special cased.
+ if (length === 2) {
+ var num = stream.readBits(7);
+ if (num >= 100) {
+ throw new Error("Invalid numeric value above 99");
+ }
+ var a = Math.floor(num / 10);
+ var b = num % 10;
+ bytes.push(48 + a, 48 + b);
+ text += a.toString() + b.toString();
+ }
+ else if (length === 1) {
+ var num = stream.readBits(4);
+ if (num >= 10) {
+ throw new Error("Invalid numeric value above 9");
+ }
+ bytes.push(48 + num);
+ text += num.toString();
+ }
+ return { bytes: bytes, text: text };
+}
+var AlphanumericCharacterCodes = [
+ "0", "1", "2", "3", "4", "5", "6", "7", "8",
+ "9", "A", "B", "C", "D", "E", "F", "G", "H",
+ "I", "J", "K", "L", "M", "N", "O", "P", "Q",
+ "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
+ " ", "$", "%", "*", "+", "-", ".", "/", ":",
+];
+function decodeAlphanumeric(stream, size) {
+ var bytes = [];
+ var text = "";
+ var characterCountSize = [9, 11, 13][size];
+ var length = stream.readBits(characterCountSize);
+ while (length >= 2) {
+ var v = stream.readBits(11);
+ var a = Math.floor(v / 45);
+ var b = v % 45;
+ bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0), AlphanumericCharacterCodes[b].charCodeAt(0));
+ text += AlphanumericCharacterCodes[a] + AlphanumericCharacterCodes[b];
+ length -= 2;
+ }
+ if (length === 1) {
+ var a = stream.readBits(6);
+ bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0));
+ text += AlphanumericCharacterCodes[a];
+ }
+ return { bytes: bytes, text: text };
+}
+function decodeByte(stream, size) {
+ var bytes = [];
+ var text = "";
+ var characterCountSize = [8, 16, 16][size];
+ var length = stream.readBits(characterCountSize);
+ for (var i = 0; i < length; i++) {
+ var b = stream.readBits(8);
+ bytes.push(b);
+ }
+ try {
+ text += decodeURIComponent(bytes.map(function (b) { return "%" + ("0" + b.toString(16)).substr(-2); }).join(""));
+ }
+ catch (_a) {
+ // failed to decode
+ }
+ return { bytes: bytes, text: text };
+}
+function decodeKanji(stream, size) {
+ var bytes = [];
+ var text = "";
+ var characterCountSize = [8, 10, 12][size];
+ var length = stream.readBits(characterCountSize);
+ for (var i = 0; i < length; i++) {
+ var k = stream.readBits(13);
+ var c = (Math.floor(k / 0xC0) << 8) | (k % 0xC0);
+ if (c < 0x1F00) {
+ c += 0x8140;
+ }
+ else {
+ c += 0xC140;
+ }
+ bytes.push(c >> 8, c & 0xFF);
+ text += String.fromCharCode(shiftJISTable_1.shiftJISTable[c]);
+ }
+ return { bytes: bytes, text: text };
+}
+function decode(data, version) {
+ var _a, _b, _c, _d;
+ var stream = new BitStream_1.BitStream(data);
+ // There are 3 'sizes' based on the version. 1-9 is small (0), 10-26 is medium (1) and 27-40 is large (2).
+ var size = version <= 9 ? 0 : version <= 26 ? 1 : 2;
+ var result = {
+ text: "",
+ bytes: [],
+ chunks: [],
+ version: version,
+ };
+ while (stream.available() >= 4) {
+ var mode = stream.readBits(4);
+ if (mode === ModeByte.Terminator) {
+ return result;
+ }
+ else if (mode === ModeByte.ECI) {
+ if (stream.readBits(1) === 0) {
+ result.chunks.push({
+ type: Mode.ECI,
+ assignmentNumber: stream.readBits(7),
+ });
+ }
+ else if (stream.readBits(1) === 0) {
+ result.chunks.push({
+ type: Mode.ECI,
+ assignmentNumber: stream.readBits(14),
+ });
+ }
+ else if (stream.readBits(1) === 0) {
+ result.chunks.push({
+ type: Mode.ECI,
+ assignmentNumber: stream.readBits(21),
+ });
+ }
+ else {
+ // ECI data seems corrupted
+ result.chunks.push({
+ type: Mode.ECI,
+ assignmentNumber: -1,
+ });
+ }
+ }
+ else if (mode === ModeByte.Numeric) {
+ var numericResult = decodeNumeric(stream, size);
+ result.text += numericResult.text;
+ (_a = result.bytes).push.apply(_a, numericResult.bytes);
+ result.chunks.push({
+ type: Mode.Numeric,
+ text: numericResult.text,
+ });
+ }
+ else if (mode === ModeByte.Alphanumeric) {
+ var alphanumericResult = decodeAlphanumeric(stream, size);
+ result.text += alphanumericResult.text;
+ (_b = result.bytes).push.apply(_b, alphanumericResult.bytes);
+ result.chunks.push({
+ type: Mode.Alphanumeric,
+ text: alphanumericResult.text,
+ });
+ }
+ else if (mode === ModeByte.Byte) {
+ var byteResult = decodeByte(stream, size);
+ result.text += byteResult.text;
+ (_c = result.bytes).push.apply(_c, byteResult.bytes);
+ result.chunks.push({
+ type: Mode.Byte,
+ bytes: byteResult.bytes,
+ text: byteResult.text,
+ });
+ }
+ else if (mode === ModeByte.Kanji) {
+ var kanjiResult = decodeKanji(stream, size);
+ result.text += kanjiResult.text;
+ (_d = result.bytes).push.apply(_d, kanjiResult.bytes);
+ result.chunks.push({
+ type: Mode.Kanji,
+ bytes: kanjiResult.bytes,
+ text: kanjiResult.text,
+ });
+ }
+ }
+ // If there is no data left, or the remaining bits are all 0, then that counts as a termination marker
+ if (stream.available() === 0 || stream.readBits(stream.available()) === 0) {
+ return result;
+ }
+}
+exports.decode = decode;
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// tslint:disable:no-bitwise
+Object.defineProperty(exports, "__esModule", { value: true });
+var BitStream = /** @class */ (function () {
+ function BitStream(bytes) {
+ this.byteOffset = 0;
+ this.bitOffset = 0;
+ this.bytes = bytes;
+ }
+ BitStream.prototype.readBits = function (numBits) {
+ if (numBits < 1 || numBits > 32 || numBits > this.available()) {
+ throw new Error("Cannot read " + numBits.toString() + " bits");
+ }
+ var result = 0;
+ // First, read remainder from current byte
+ if (this.bitOffset > 0) {
+ var bitsLeft = 8 - this.bitOffset;
+ var toRead = numBits < bitsLeft ? numBits : bitsLeft;
+ var bitsToNotRead = bitsLeft - toRead;
+ var mask = (0xFF >> (8 - toRead)) << bitsToNotRead;
+ result = (this.bytes[this.byteOffset] & mask) >> bitsToNotRead;
+ numBits -= toRead;
+ this.bitOffset += toRead;
+ if (this.bitOffset === 8) {
+ this.bitOffset = 0;
+ this.byteOffset++;
+ }
+ }
+ // Next read whole bytes
+ if (numBits > 0) {
+ while (numBits >= 8) {
+ result = (result << 8) | (this.bytes[this.byteOffset] & 0xFF);
+ this.byteOffset++;
+ numBits -= 8;
+ }
+ // Finally read a partial byte
+ if (numBits > 0) {
+ var bitsToNotRead = 8 - numBits;
+ var mask = (0xFF >> bitsToNotRead) << bitsToNotRead;
+ result = (result << numBits) | ((this.bytes[this.byteOffset] & mask) >> bitsToNotRead);
+ this.bitOffset += numBits;
+ }
+ }
+ return result;
+ };
+ BitStream.prototype.available = function () {
+ return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset;
+ };
+ return BitStream;
+}());
+exports.BitStream = BitStream;
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.shiftJISTable = {
+ 0x20: 0x0020,
+ 0x21: 0x0021,
+ 0x22: 0x0022,
+ 0x23: 0x0023,
+ 0x24: 0x0024,
+ 0x25: 0x0025,
+ 0x26: 0x0026,
+ 0x27: 0x0027,
+ 0x28: 0x0028,
+ 0x29: 0x0029,
+ 0x2A: 0x002A,
+ 0x2B: 0x002B,
+ 0x2C: 0x002C,
+ 0x2D: 0x002D,
+ 0x2E: 0x002E,
+ 0x2F: 0x002F,
+ 0x30: 0x0030,
+ 0x31: 0x0031,
+ 0x32: 0x0032,
+ 0x33: 0x0033,
+ 0x34: 0x0034,
+ 0x35: 0x0035,
+ 0x36: 0x0036,
+ 0x37: 0x0037,
+ 0x38: 0x0038,
+ 0x39: 0x0039,
+ 0x3A: 0x003A,
+ 0x3B: 0x003B,
+ 0x3C: 0x003C,
+ 0x3D: 0x003D,
+ 0x3E: 0x003E,
+ 0x3F: 0x003F,
+ 0x40: 0x0040,
+ 0x41: 0x0041,
+ 0x42: 0x0042,
+ 0x43: 0x0043,
+ 0x44: 0x0044,
+ 0x45: 0x0045,
+ 0x46: 0x0046,
+ 0x47: 0x0047,
+ 0x48: 0x0048,
+ 0x49: 0x0049,
+ 0x4A: 0x004A,
+ 0x4B: 0x004B,
+ 0x4C: 0x004C,
+ 0x4D: 0x004D,
+ 0x4E: 0x004E,
+ 0x4F: 0x004F,
+ 0x50: 0x0050,
+ 0x51: 0x0051,
+ 0x52: 0x0052,
+ 0x53: 0x0053,
+ 0x54: 0x0054,
+ 0x55: 0x0055,
+ 0x56: 0x0056,
+ 0x57: 0x0057,
+ 0x58: 0x0058,
+ 0x59: 0x0059,
+ 0x5A: 0x005A,
+ 0x5B: 0x005B,
+ 0x5C: 0x00A5,
+ 0x5D: 0x005D,
+ 0x5E: 0x005E,
+ 0x5F: 0x005F,
+ 0x60: 0x0060,
+ 0x61: 0x0061,
+ 0x62: 0x0062,
+ 0x63: 0x0063,
+ 0x64: 0x0064,
+ 0x65: 0x0065,
+ 0x66: 0x0066,
+ 0x67: 0x0067,
+ 0x68: 0x0068,
+ 0x69: 0x0069,
+ 0x6A: 0x006A,
+ 0x6B: 0x006B,
+ 0x6C: 0x006C,
+ 0x6D: 0x006D,
+ 0x6E: 0x006E,
+ 0x6F: 0x006F,
+ 0x70: 0x0070,
+ 0x71: 0x0071,
+ 0x72: 0x0072,
+ 0x73: 0x0073,
+ 0x74: 0x0074,
+ 0x75: 0x0075,
+ 0x76: 0x0076,
+ 0x77: 0x0077,
+ 0x78: 0x0078,
+ 0x79: 0x0079,
+ 0x7A: 0x007A,
+ 0x7B: 0x007B,
+ 0x7C: 0x007C,
+ 0x7D: 0x007D,
+ 0x7E: 0x203E,
+ 0x8140: 0x3000,
+ 0x8141: 0x3001,
+ 0x8142: 0x3002,
+ 0x8143: 0xFF0C,
+ 0x8144: 0xFF0E,
+ 0x8145: 0x30FB,
+ 0x8146: 0xFF1A,
+ 0x8147: 0xFF1B,
+ 0x8148: 0xFF1F,
+ 0x8149: 0xFF01,
+ 0x814A: 0x309B,
+ 0x814B: 0x309C,
+ 0x814C: 0x00B4,
+ 0x814D: 0xFF40,
+ 0x814E: 0x00A8,
+ 0x814F: 0xFF3E,
+ 0x8150: 0xFFE3,
+ 0x8151: 0xFF3F,
+ 0x8152: 0x30FD,
+ 0x8153: 0x30FE,
+ 0x8154: 0x309D,
+ 0x8155: 0x309E,
+ 0x8156: 0x3003,
+ 0x8157: 0x4EDD,
+ 0x8158: 0x3005,
+ 0x8159: 0x3006,
+ 0x815A: 0x3007,
+ 0x815B: 0x30FC,
+ 0x815C: 0x2015,
+ 0x815D: 0x2010,
+ 0x815E: 0xFF0F,
+ 0x815F: 0x005C,
+ 0x8160: 0x301C,
+ 0x8161: 0x2016,
+ 0x8162: 0xFF5C,
+ 0x8163: 0x2026,
+ 0x8164: 0x2025,
+ 0x8165: 0x2018,
+ 0x8166: 0x2019,
+ 0x8167: 0x201C,
+ 0x8168: 0x201D,
+ 0x8169: 0xFF08,
+ 0x816A: 0xFF09,
+ 0x816B: 0x3014,
+ 0x816C: 0x3015,
+ 0x816D: 0xFF3B,
+ 0x816E: 0xFF3D,
+ 0x816F: 0xFF5B,
+ 0x8170: 0xFF5D,
+ 0x8171: 0x3008,
+ 0x8172: 0x3009,
+ 0x8173: 0x300A,
+ 0x8174: 0x300B,
+ 0x8175: 0x300C,
+ 0x8176: 0x300D,
+ 0x8177: 0x300E,
+ 0x8178: 0x300F,
+ 0x8179: 0x3010,
+ 0x817A: 0x3011,
+ 0x817B: 0xFF0B,
+ 0x817C: 0x2212,
+ 0x817D: 0x00B1,
+ 0x817E: 0x00D7,
+ 0x8180: 0x00F7,
+ 0x8181: 0xFF1D,
+ 0x8182: 0x2260,
+ 0x8183: 0xFF1C,
+ 0x8184: 0xFF1E,
+ 0x8185: 0x2266,
+ 0x8186: 0x2267,
+ 0x8187: 0x221E,
+ 0x8188: 0x2234,
+ 0x8189: 0x2642,
+ 0x818A: 0x2640,
+ 0x818B: 0x00B0,
+ 0x818C: 0x2032,
+ 0x818D: 0x2033,
+ 0x818E: 0x2103,
+ 0x818F: 0xFFE5,
+ 0x8190: 0xFF04,
+ 0x8191: 0x00A2,
+ 0x8192: 0x00A3,
+ 0x8193: 0xFF05,
+ 0x8194: 0xFF03,
+ 0x8195: 0xFF06,
+ 0x8196: 0xFF0A,
+ 0x8197: 0xFF20,
+ 0x8198: 0x00A7,
+ 0x8199: 0x2606,
+ 0x819A: 0x2605,
+ 0x819B: 0x25CB,
+ 0x819C: 0x25CF,
+ 0x819D: 0x25CE,
+ 0x819E: 0x25C7,
+ 0x819F: 0x25C6,
+ 0x81A0: 0x25A1,
+ 0x81A1: 0x25A0,
+ 0x81A2: 0x25B3,
+ 0x81A3: 0x25B2,
+ 0x81A4: 0x25BD,
+ 0x81A5: 0x25BC,
+ 0x81A6: 0x203B,
+ 0x81A7: 0x3012,
+ 0x81A8: 0x2192,
+ 0x81A9: 0x2190,
+ 0x81AA: 0x2191,
+ 0x81AB: 0x2193,
+ 0x81AC: 0x3013,
+ 0x81B8: 0x2208,
+ 0x81B9: 0x220B,
+ 0x81BA: 0x2286,
+ 0x81BB: 0x2287,
+ 0x81BC: 0x2282,
+ 0x81BD: 0x2283,
+ 0x81BE: 0x222A,
+ 0x81BF: 0x2229,
+ 0x81C8: 0x2227,
+ 0x81C9: 0x2228,
+ 0x81CA: 0x00AC,
+ 0x81CB: 0x21D2,
+ 0x81CC: 0x21D4,
+ 0x81CD: 0x2200,
+ 0x81CE: 0x2203,
+ 0x81DA: 0x2220,
+ 0x81DB: 0x22A5,
+ 0x81DC: 0x2312,
+ 0x81DD: 0x2202,
+ 0x81DE: 0x2207,
+ 0x81DF: 0x2261,
+ 0x81E0: 0x2252,
+ 0x81E1: 0x226A,
+ 0x81E2: 0x226B,
+ 0x81E3: 0x221A,
+ 0x81E4: 0x223D,
+ 0x81E5: 0x221D,
+ 0x81E6: 0x2235,
+ 0x81E7: 0x222B,
+ 0x81E8: 0x222C,
+ 0x81F0: 0x212B,
+ 0x81F1: 0x2030,
+ 0x81F2: 0x266F,
+ 0x81F3: 0x266D,
+ 0x81F4: 0x266A,
+ 0x81F5: 0x2020,
+ 0x81F6: 0x2021,
+ 0x81F7: 0x00B6,
+ 0x81FC: 0x25EF,
+ 0x824F: 0xFF10,
+ 0x8250: 0xFF11,
+ 0x8251: 0xFF12,
+ 0x8252: 0xFF13,
+ 0x8253: 0xFF14,
+ 0x8254: 0xFF15,
+ 0x8255: 0xFF16,
+ 0x8256: 0xFF17,
+ 0x8257: 0xFF18,
+ 0x8258: 0xFF19,
+ 0x8260: 0xFF21,
+ 0x8261: 0xFF22,
+ 0x8262: 0xFF23,
+ 0x8263: 0xFF24,
+ 0x8264: 0xFF25,
+ 0x8265: 0xFF26,
+ 0x8266: 0xFF27,
+ 0x8267: 0xFF28,
+ 0x8268: 0xFF29,
+ 0x8269: 0xFF2A,
+ 0x826A: 0xFF2B,
+ 0x826B: 0xFF2C,
+ 0x826C: 0xFF2D,
+ 0x826D: 0xFF2E,
+ 0x826E: 0xFF2F,
+ 0x826F: 0xFF30,
+ 0x8270: 0xFF31,
+ 0x8271: 0xFF32,
+ 0x8272: 0xFF33,
+ 0x8273: 0xFF34,
+ 0x8274: 0xFF35,
+ 0x8275: 0xFF36,
+ 0x8276: 0xFF37,
+ 0x8277: 0xFF38,
+ 0x8278: 0xFF39,
+ 0x8279: 0xFF3A,
+ 0x8281: 0xFF41,
+ 0x8282: 0xFF42,
+ 0x8283: 0xFF43,
+ 0x8284: 0xFF44,
+ 0x8285: 0xFF45,
+ 0x8286: 0xFF46,
+ 0x8287: 0xFF47,
+ 0x8288: 0xFF48,
+ 0x8289: 0xFF49,
+ 0x828A: 0xFF4A,
+ 0x828B: 0xFF4B,
+ 0x828C: 0xFF4C,
+ 0x828D: 0xFF4D,
+ 0x828E: 0xFF4E,
+ 0x828F: 0xFF4F,
+ 0x8290: 0xFF50,
+ 0x8291: 0xFF51,
+ 0x8292: 0xFF52,
+ 0x8293: 0xFF53,
+ 0x8294: 0xFF54,
+ 0x8295: 0xFF55,
+ 0x8296: 0xFF56,
+ 0x8297: 0xFF57,
+ 0x8298: 0xFF58,
+ 0x8299: 0xFF59,
+ 0x829A: 0xFF5A,
+ 0x829F: 0x3041,
+ 0x82A0: 0x3042,
+ 0x82A1: 0x3043,
+ 0x82A2: 0x3044,
+ 0x82A3: 0x3045,
+ 0x82A4: 0x3046,
+ 0x82A5: 0x3047,
+ 0x82A6: 0x3048,
+ 0x82A7: 0x3049,
+ 0x82A8: 0x304A,
+ 0x82A9: 0x304B,
+ 0x82AA: 0x304C,
+ 0x82AB: 0x304D,
+ 0x82AC: 0x304E,
+ 0x82AD: 0x304F,
+ 0x82AE: 0x3050,
+ 0x82AF: 0x3051,
+ 0x82B0: 0x3052,
+ 0x82B1: 0x3053,
+ 0x82B2: 0x3054,
+ 0x82B3: 0x3055,
+ 0x82B4: 0x3056,
+ 0x82B5: 0x3057,
+ 0x82B6: 0x3058,
+ 0x82B7: 0x3059,
+ 0x82B8: 0x305A,
+ 0x82B9: 0x305B,
+ 0x82BA: 0x305C,
+ 0x82BB: 0x305D,
+ 0x82BC: 0x305E,
+ 0x82BD: 0x305F,
+ 0x82BE: 0x3060,
+ 0x82BF: 0x3061,
+ 0x82C0: 0x3062,
+ 0x82C1: 0x3063,
+ 0x82C2: 0x3064,
+ 0x82C3: 0x3065,
+ 0x82C4: 0x3066,
+ 0x82C5: 0x3067,
+ 0x82C6: 0x3068,
+ 0x82C7: 0x3069,
+ 0x82C8: 0x306A,
+ 0x82C9: 0x306B,
+ 0x82CA: 0x306C,
+ 0x82CB: 0x306D,
+ 0x82CC: 0x306E,
+ 0x82CD: 0x306F,
+ 0x82CE: 0x3070,
+ 0x82CF: 0x3071,
+ 0x82D0: 0x3072,
+ 0x82D1: 0x3073,
+ 0x82D2: 0x3074,
+ 0x82D3: 0x3075,
+ 0x82D4: 0x3076,
+ 0x82D5: 0x3077,
+ 0x82D6: 0x3078,
+ 0x82D7: 0x3079,
+ 0x82D8: 0x307A,
+ 0x82D9: 0x307B,
+ 0x82DA: 0x307C,
+ 0x82DB: 0x307D,
+ 0x82DC: 0x307E,
+ 0x82DD: 0x307F,
+ 0x82DE: 0x3080,
+ 0x82DF: 0x3081,
+ 0x82E0: 0x3082,
+ 0x82E1: 0x3083,
+ 0x82E2: 0x3084,
+ 0x82E3: 0x3085,
+ 0x82E4: 0x3086,
+ 0x82E5: 0x3087,
+ 0x82E6: 0x3088,
+ 0x82E7: 0x3089,
+ 0x82E8: 0x308A,
+ 0x82E9: 0x308B,
+ 0x82EA: 0x308C,
+ 0x82EB: 0x308D,
+ 0x82EC: 0x308E,
+ 0x82ED: 0x308F,
+ 0x82EE: 0x3090,
+ 0x82EF: 0x3091,
+ 0x82F0: 0x3092,
+ 0x82F1: 0x3093,
+ 0x8340: 0x30A1,
+ 0x8341: 0x30A2,
+ 0x8342: 0x30A3,
+ 0x8343: 0x30A4,
+ 0x8344: 0x30A5,
+ 0x8345: 0x30A6,
+ 0x8346: 0x30A7,
+ 0x8347: 0x30A8,
+ 0x8348: 0x30A9,
+ 0x8349: 0x30AA,
+ 0x834A: 0x30AB,
+ 0x834B: 0x30AC,
+ 0x834C: 0x30AD,
+ 0x834D: 0x30AE,
+ 0x834E: 0x30AF,
+ 0x834F: 0x30B0,
+ 0x8350: 0x30B1,
+ 0x8351: 0x30B2,
+ 0x8352: 0x30B3,
+ 0x8353: 0x30B4,
+ 0x8354: 0x30B5,
+ 0x8355: 0x30B6,
+ 0x8356: 0x30B7,
+ 0x8357: 0x30B8,
+ 0x8358: 0x30B9,
+ 0x8359: 0x30BA,
+ 0x835A: 0x30BB,
+ 0x835B: 0x30BC,
+ 0x835C: 0x30BD,
+ 0x835D: 0x30BE,
+ 0x835E: 0x30BF,
+ 0x835F: 0x30C0,
+ 0x8360: 0x30C1,
+ 0x8361: 0x30C2,
+ 0x8362: 0x30C3,
+ 0x8363: 0x30C4,
+ 0x8364: 0x30C5,
+ 0x8365: 0x30C6,
+ 0x8366: 0x30C7,
+ 0x8367: 0x30C8,
+ 0x8368: 0x30C9,
+ 0x8369: 0x30CA,
+ 0x836A: 0x30CB,
+ 0x836B: 0x30CC,
+ 0x836C: 0x30CD,
+ 0x836D: 0x30CE,
+ 0x836E: 0x30CF,
+ 0x836F: 0x30D0,
+ 0x8370: 0x30D1,
+ 0x8371: 0x30D2,
+ 0x8372: 0x30D3,
+ 0x8373: 0x30D4,
+ 0x8374: 0x30D5,
+ 0x8375: 0x30D6,
+ 0x8376: 0x30D7,
+ 0x8377: 0x30D8,
+ 0x8378: 0x30D9,
+ 0x8379: 0x30DA,
+ 0x837A: 0x30DB,
+ 0x837B: 0x30DC,
+ 0x837C: 0x30DD,
+ 0x837D: 0x30DE,
+ 0x837E: 0x30DF,
+ 0x8380: 0x30E0,
+ 0x8381: 0x30E1,
+ 0x8382: 0x30E2,
+ 0x8383: 0x30E3,
+ 0x8384: 0x30E4,
+ 0x8385: 0x30E5,
+ 0x8386: 0x30E6,
+ 0x8387: 0x30E7,
+ 0x8388: 0x30E8,
+ 0x8389: 0x30E9,
+ 0x838A: 0x30EA,
+ 0x838B: 0x30EB,
+ 0x838C: 0x30EC,
+ 0x838D: 0x30ED,
+ 0x838E: 0x30EE,
+ 0x838F: 0x30EF,
+ 0x8390: 0x30F0,
+ 0x8391: 0x30F1,
+ 0x8392: 0x30F2,
+ 0x8393: 0x30F3,
+ 0x8394: 0x30F4,
+ 0x8395: 0x30F5,
+ 0x8396: 0x30F6,
+ 0x839F: 0x0391,
+ 0x83A0: 0x0392,
+ 0x83A1: 0x0393,
+ 0x83A2: 0x0394,
+ 0x83A3: 0x0395,
+ 0x83A4: 0x0396,
+ 0x83A5: 0x0397,
+ 0x83A6: 0x0398,
+ 0x83A7: 0x0399,
+ 0x83A8: 0x039A,
+ 0x83A9: 0x039B,
+ 0x83AA: 0x039C,
+ 0x83AB: 0x039D,
+ 0x83AC: 0x039E,
+ 0x83AD: 0x039F,
+ 0x83AE: 0x03A0,
+ 0x83AF: 0x03A1,
+ 0x83B0: 0x03A3,
+ 0x83B1: 0x03A4,
+ 0x83B2: 0x03A5,
+ 0x83B3: 0x03A6,
+ 0x83B4: 0x03A7,
+ 0x83B5: 0x03A8,
+ 0x83B6: 0x03A9,
+ 0x83BF: 0x03B1,
+ 0x83C0: 0x03B2,
+ 0x83C1: 0x03B3,
+ 0x83C2: 0x03B4,
+ 0x83C3: 0x03B5,
+ 0x83C4: 0x03B6,
+ 0x83C5: 0x03B7,
+ 0x83C6: 0x03B8,
+ 0x83C7: 0x03B9,
+ 0x83C8: 0x03BA,
+ 0x83C9: 0x03BB,
+ 0x83CA: 0x03BC,
+ 0x83CB: 0x03BD,
+ 0x83CC: 0x03BE,
+ 0x83CD: 0x03BF,
+ 0x83CE: 0x03C0,
+ 0x83CF: 0x03C1,
+ 0x83D0: 0x03C3,
+ 0x83D1: 0x03C4,
+ 0x83D2: 0x03C5,
+ 0x83D3: 0x03C6,
+ 0x83D4: 0x03C7,
+ 0x83D5: 0x03C8,
+ 0x83D6: 0x03C9,
+ 0x8440: 0x0410,
+ 0x8441: 0x0411,
+ 0x8442: 0x0412,
+ 0x8443: 0x0413,
+ 0x8444: 0x0414,
+ 0x8445: 0x0415,
+ 0x8446: 0x0401,
+ 0x8447: 0x0416,
+ 0x8448: 0x0417,
+ 0x8449: 0x0418,
+ 0x844A: 0x0419,
+ 0x844B: 0x041A,
+ 0x844C: 0x041B,
+ 0x844D: 0x041C,
+ 0x844E: 0x041D,
+ 0x844F: 0x041E,
+ 0x8450: 0x041F,
+ 0x8451: 0x0420,
+ 0x8452: 0x0421,
+ 0x8453: 0x0422,
+ 0x8454: 0x0423,
+ 0x8455: 0x0424,
+ 0x8456: 0x0425,
+ 0x8457: 0x0426,
+ 0x8458: 0x0427,
+ 0x8459: 0x0428,
+ 0x845A: 0x0429,
+ 0x845B: 0x042A,
+ 0x845C: 0x042B,
+ 0x845D: 0x042C,
+ 0x845E: 0x042D,
+ 0x845F: 0x042E,
+ 0x8460: 0x042F,
+ 0x8470: 0x0430,
+ 0x8471: 0x0431,
+ 0x8472: 0x0432,
+ 0x8473: 0x0433,
+ 0x8474: 0x0434,
+ 0x8475: 0x0435,
+ 0x8476: 0x0451,
+ 0x8477: 0x0436,
+ 0x8478: 0x0437,
+ 0x8479: 0x0438,
+ 0x847A: 0x0439,
+ 0x847B: 0x043A,
+ 0x847C: 0x043B,
+ 0x847D: 0x043C,
+ 0x847E: 0x043D,
+ 0x8480: 0x043E,
+ 0x8481: 0x043F,
+ 0x8482: 0x0440,
+ 0x8483: 0x0441,
+ 0x8484: 0x0442,
+ 0x8485: 0x0443,
+ 0x8486: 0x0444,
+ 0x8487: 0x0445,
+ 0x8488: 0x0446,
+ 0x8489: 0x0447,
+ 0x848A: 0x0448,
+ 0x848B: 0x0449,
+ 0x848C: 0x044A,
+ 0x848D: 0x044B,
+ 0x848E: 0x044C,
+ 0x848F: 0x044D,
+ 0x8490: 0x044E,
+ 0x8491: 0x044F,
+ 0x849F: 0x2500,
+ 0x84A0: 0x2502,
+ 0x84A1: 0x250C,
+ 0x84A2: 0x2510,
+ 0x84A3: 0x2518,
+ 0x84A4: 0x2514,
+ 0x84A5: 0x251C,
+ 0x84A6: 0x252C,
+ 0x84A7: 0x2524,
+ 0x84A8: 0x2534,
+ 0x84A9: 0x253C,
+ 0x84AA: 0x2501,
+ 0x84AB: 0x2503,
+ 0x84AC: 0x250F,
+ 0x84AD: 0x2513,
+ 0x84AE: 0x251B,
+ 0x84AF: 0x2517,
+ 0x84B0: 0x2523,
+ 0x84B1: 0x2533,
+ 0x84B2: 0x252B,
+ 0x84B3: 0x253B,
+ 0x84B4: 0x254B,
+ 0x84B5: 0x2520,
+ 0x84B6: 0x252F,
+ 0x84B7: 0x2528,
+ 0x84B8: 0x2537,
+ 0x84B9: 0x253F,
+ 0x84BA: 0x251D,
+ 0x84BB: 0x2530,
+ 0x84BC: 0x2525,
+ 0x84BD: 0x2538,
+ 0x84BE: 0x2542,
+ 0x889F: 0x4E9C,
+ 0x88A0: 0x5516,
+ 0x88A1: 0x5A03,
+ 0x88A2: 0x963F,
+ 0x88A3: 0x54C0,
+ 0x88A4: 0x611B,
+ 0x88A5: 0x6328,
+ 0x88A6: 0x59F6,
+ 0x88A7: 0x9022,
+ 0x88A8: 0x8475,
+ 0x88A9: 0x831C,
+ 0x88AA: 0x7A50,
+ 0x88AB: 0x60AA,
+ 0x88AC: 0x63E1,
+ 0x88AD: 0x6E25,
+ 0x88AE: 0x65ED,
+ 0x88AF: 0x8466,
+ 0x88B0: 0x82A6,
+ 0x88B1: 0x9BF5,
+ 0x88B2: 0x6893,
+ 0x88B3: 0x5727,
+ 0x88B4: 0x65A1,
+ 0x88B5: 0x6271,
+ 0x88B6: 0x5B9B,
+ 0x88B7: 0x59D0,
+ 0x88B8: 0x867B,
+ 0x88B9: 0x98F4,
+ 0x88BA: 0x7D62,
+ 0x88BB: 0x7DBE,
+ 0x88BC: 0x9B8E,
+ 0x88BD: 0x6216,
+ 0x88BE: 0x7C9F,
+ 0x88BF: 0x88B7,
+ 0x88C0: 0x5B89,
+ 0x88C1: 0x5EB5,
+ 0x88C2: 0x6309,
+ 0x88C3: 0x6697,
+ 0x88C4: 0x6848,
+ 0x88C5: 0x95C7,
+ 0x88C6: 0x978D,
+ 0x88C7: 0x674F,
+ 0x88C8: 0x4EE5,
+ 0x88C9: 0x4F0A,
+ 0x88CA: 0x4F4D,
+ 0x88CB: 0x4F9D,
+ 0x88CC: 0x5049,
+ 0x88CD: 0x56F2,
+ 0x88CE: 0x5937,
+ 0x88CF: 0x59D4,
+ 0x88D0: 0x5A01,
+ 0x88D1: 0x5C09,
+ 0x88D2: 0x60DF,
+ 0x88D3: 0x610F,
+ 0x88D4: 0x6170,
+ 0x88D5: 0x6613,
+ 0x88D6: 0x6905,
+ 0x88D7: 0x70BA,
+ 0x88D8: 0x754F,
+ 0x88D9: 0x7570,
+ 0x88DA: 0x79FB,
+ 0x88DB: 0x7DAD,
+ 0x88DC: 0x7DEF,
+ 0x88DD: 0x80C3,
+ 0x88DE: 0x840E,
+ 0x88DF: 0x8863,
+ 0x88E0: 0x8B02,
+ 0x88E1: 0x9055,
+ 0x88E2: 0x907A,
+ 0x88E3: 0x533B,
+ 0x88E4: 0x4E95,
+ 0x88E5: 0x4EA5,
+ 0x88E6: 0x57DF,
+ 0x88E7: 0x80B2,
+ 0x88E8: 0x90C1,
+ 0x88E9: 0x78EF,
+ 0x88EA: 0x4E00,
+ 0x88EB: 0x58F1,
+ 0x88EC: 0x6EA2,
+ 0x88ED: 0x9038,
+ 0x88EE: 0x7A32,
+ 0x88EF: 0x8328,
+ 0x88F0: 0x828B,
+ 0x88F1: 0x9C2F,
+ 0x88F2: 0x5141,
+ 0x88F3: 0x5370,
+ 0x88F4: 0x54BD,
+ 0x88F5: 0x54E1,
+ 0x88F6: 0x56E0,
+ 0x88F7: 0x59FB,
+ 0x88F8: 0x5F15,
+ 0x88F9: 0x98F2,
+ 0x88FA: 0x6DEB,
+ 0x88FB: 0x80E4,
+ 0x88FC: 0x852D,
+ 0x8940: 0x9662,
+ 0x8941: 0x9670,
+ 0x8942: 0x96A0,
+ 0x8943: 0x97FB,
+ 0x8944: 0x540B,
+ 0x8945: 0x53F3,
+ 0x8946: 0x5B87,
+ 0x8947: 0x70CF,
+ 0x8948: 0x7FBD,
+ 0x8949: 0x8FC2,
+ 0x894A: 0x96E8,
+ 0x894B: 0x536F,
+ 0x894C: 0x9D5C,
+ 0x894D: 0x7ABA,
+ 0x894E: 0x4E11,
+ 0x894F: 0x7893,
+ 0x8950: 0x81FC,
+ 0x8951: 0x6E26,
+ 0x8952: 0x5618,
+ 0x8953: 0x5504,
+ 0x8954: 0x6B1D,
+ 0x8955: 0x851A,
+ 0x8956: 0x9C3B,
+ 0x8957: 0x59E5,
+ 0x8958: 0x53A9,
+ 0x8959: 0x6D66,
+ 0x895A: 0x74DC,
+ 0x895B: 0x958F,
+ 0x895C: 0x5642,
+ 0x895D: 0x4E91,
+ 0x895E: 0x904B,
+ 0x895F: 0x96F2,
+ 0x8960: 0x834F,
+ 0x8961: 0x990C,
+ 0x8962: 0x53E1,
+ 0x8963: 0x55B6,
+ 0x8964: 0x5B30,
+ 0x8965: 0x5F71,
+ 0x8966: 0x6620,
+ 0x8967: 0x66F3,
+ 0x8968: 0x6804,
+ 0x8969: 0x6C38,
+ 0x896A: 0x6CF3,
+ 0x896B: 0x6D29,
+ 0x896C: 0x745B,
+ 0x896D: 0x76C8,
+ 0x896E: 0x7A4E,
+ 0x896F: 0x9834,
+ 0x8970: 0x82F1,
+ 0x8971: 0x885B,
+ 0x8972: 0x8A60,
+ 0x8973: 0x92ED,
+ 0x8974: 0x6DB2,
+ 0x8975: 0x75AB,
+ 0x8976: 0x76CA,
+ 0x8977: 0x99C5,
+ 0x8978: 0x60A6,
+ 0x8979: 0x8B01,
+ 0x897A: 0x8D8A,
+ 0x897B: 0x95B2,
+ 0x897C: 0x698E,
+ 0x897D: 0x53AD,
+ 0x897E: 0x5186,
+ 0x8980: 0x5712,
+ 0x8981: 0x5830,
+ 0x8982: 0x5944,
+ 0x8983: 0x5BB4,
+ 0x8984: 0x5EF6,
+ 0x8985: 0x6028,
+ 0x8986: 0x63A9,
+ 0x8987: 0x63F4,
+ 0x8988: 0x6CBF,
+ 0x8989: 0x6F14,
+ 0x898A: 0x708E,
+ 0x898B: 0x7114,
+ 0x898C: 0x7159,
+ 0x898D: 0x71D5,
+ 0x898E: 0x733F,
+ 0x898F: 0x7E01,
+ 0x8990: 0x8276,
+ 0x8991: 0x82D1,
+ 0x8992: 0x8597,
+ 0x8993: 0x9060,
+ 0x8994: 0x925B,
+ 0x8995: 0x9D1B,
+ 0x8996: 0x5869,
+ 0x8997: 0x65BC,
+ 0x8998: 0x6C5A,
+ 0x8999: 0x7525,
+ 0x899A: 0x51F9,
+ 0x899B: 0x592E,
+ 0x899C: 0x5965,
+ 0x899D: 0x5F80,
+ 0x899E: 0x5FDC,
+ 0x899F: 0x62BC,
+ 0x89A0: 0x65FA,
+ 0x89A1: 0x6A2A,
+ 0x89A2: 0x6B27,
+ 0x89A3: 0x6BB4,
+ 0x89A4: 0x738B,
+ 0x89A5: 0x7FC1,
+ 0x89A6: 0x8956,
+ 0x89A7: 0x9D2C,
+ 0x89A8: 0x9D0E,
+ 0x89A9: 0x9EC4,
+ 0x89AA: 0x5CA1,
+ 0x89AB: 0x6C96,
+ 0x89AC: 0x837B,
+ 0x89AD: 0x5104,
+ 0x89AE: 0x5C4B,
+ 0x89AF: 0x61B6,
+ 0x89B0: 0x81C6,
+ 0x89B1: 0x6876,
+ 0x89B2: 0x7261,
+ 0x89B3: 0x4E59,
+ 0x89B4: 0x4FFA,
+ 0x89B5: 0x5378,
+ 0x89B6: 0x6069,
+ 0x89B7: 0x6E29,
+ 0x89B8: 0x7A4F,
+ 0x89B9: 0x97F3,
+ 0x89BA: 0x4E0B,
+ 0x89BB: 0x5316,
+ 0x89BC: 0x4EEE,
+ 0x89BD: 0x4F55,
+ 0x89BE: 0x4F3D,
+ 0x89BF: 0x4FA1,
+ 0x89C0: 0x4F73,
+ 0x89C1: 0x52A0,
+ 0x89C2: 0x53EF,
+ 0x89C3: 0x5609,
+ 0x89C4: 0x590F,
+ 0x89C5: 0x5AC1,
+ 0x89C6: 0x5BB6,
+ 0x89C7: 0x5BE1,
+ 0x89C8: 0x79D1,
+ 0x89C9: 0x6687,
+ 0x89CA: 0x679C,
+ 0x89CB: 0x67B6,
+ 0x89CC: 0x6B4C,
+ 0x89CD: 0x6CB3,
+ 0x89CE: 0x706B,
+ 0x89CF: 0x73C2,
+ 0x89D0: 0x798D,
+ 0x89D1: 0x79BE,
+ 0x89D2: 0x7A3C,
+ 0x89D3: 0x7B87,
+ 0x89D4: 0x82B1,
+ 0x89D5: 0x82DB,
+ 0x89D6: 0x8304,
+ 0x89D7: 0x8377,
+ 0x89D8: 0x83EF,
+ 0x89D9: 0x83D3,
+ 0x89DA: 0x8766,
+ 0x89DB: 0x8AB2,
+ 0x89DC: 0x5629,
+ 0x89DD: 0x8CA8,
+ 0x89DE: 0x8FE6,
+ 0x89DF: 0x904E,
+ 0x89E0: 0x971E,
+ 0x89E1: 0x868A,
+ 0x89E2: 0x4FC4,
+ 0x89E3: 0x5CE8,
+ 0x89E4: 0x6211,
+ 0x89E5: 0x7259,
+ 0x89E6: 0x753B,
+ 0x89E7: 0x81E5,
+ 0x89E8: 0x82BD,
+ 0x89E9: 0x86FE,
+ 0x89EA: 0x8CC0,
+ 0x89EB: 0x96C5,
+ 0x89EC: 0x9913,
+ 0x89ED: 0x99D5,
+ 0x89EE: 0x4ECB,
+ 0x89EF: 0x4F1A,
+ 0x89F0: 0x89E3,
+ 0x89F1: 0x56DE,
+ 0x89F2: 0x584A,
+ 0x89F3: 0x58CA,
+ 0x89F4: 0x5EFB,
+ 0x89F5: 0x5FEB,
+ 0x89F6: 0x602A,
+ 0x89F7: 0x6094,
+ 0x89F8: 0x6062,
+ 0x89F9: 0x61D0,
+ 0x89FA: 0x6212,
+ 0x89FB: 0x62D0,
+ 0x89FC: 0x6539,
+ 0x8A40: 0x9B41,
+ 0x8A41: 0x6666,
+ 0x8A42: 0x68B0,
+ 0x8A43: 0x6D77,
+ 0x8A44: 0x7070,
+ 0x8A45: 0x754C,
+ 0x8A46: 0x7686,
+ 0x8A47: 0x7D75,
+ 0x8A48: 0x82A5,
+ 0x8A49: 0x87F9,
+ 0x8A4A: 0x958B,
+ 0x8A4B: 0x968E,
+ 0x8A4C: 0x8C9D,
+ 0x8A4D: 0x51F1,
+ 0x8A4E: 0x52BE,
+ 0x8A4F: 0x5916,
+ 0x8A50: 0x54B3,
+ 0x8A51: 0x5BB3,
+ 0x8A52: 0x5D16,
+ 0x8A53: 0x6168,
+ 0x8A54: 0x6982,
+ 0x8A55: 0x6DAF,
+ 0x8A56: 0x788D,
+ 0x8A57: 0x84CB,
+ 0x8A58: 0x8857,
+ 0x8A59: 0x8A72,
+ 0x8A5A: 0x93A7,
+ 0x8A5B: 0x9AB8,
+ 0x8A5C: 0x6D6C,
+ 0x8A5D: 0x99A8,
+ 0x8A5E: 0x86D9,
+ 0x8A5F: 0x57A3,
+ 0x8A60: 0x67FF,
+ 0x8A61: 0x86CE,
+ 0x8A62: 0x920E,
+ 0x8A63: 0x5283,
+ 0x8A64: 0x5687,
+ 0x8A65: 0x5404,
+ 0x8A66: 0x5ED3,
+ 0x8A67: 0x62E1,
+ 0x8A68: 0x64B9,
+ 0x8A69: 0x683C,
+ 0x8A6A: 0x6838,
+ 0x8A6B: 0x6BBB,
+ 0x8A6C: 0x7372,
+ 0x8A6D: 0x78BA,
+ 0x8A6E: 0x7A6B,
+ 0x8A6F: 0x899A,
+ 0x8A70: 0x89D2,
+ 0x8A71: 0x8D6B,
+ 0x8A72: 0x8F03,
+ 0x8A73: 0x90ED,
+ 0x8A74: 0x95A3,
+ 0x8A75: 0x9694,
+ 0x8A76: 0x9769,
+ 0x8A77: 0x5B66,
+ 0x8A78: 0x5CB3,
+ 0x8A79: 0x697D,
+ 0x8A7A: 0x984D,
+ 0x8A7B: 0x984E,
+ 0x8A7C: 0x639B,
+ 0x8A7D: 0x7B20,
+ 0x8A7E: 0x6A2B,
+ 0x8A80: 0x6A7F,
+ 0x8A81: 0x68B6,
+ 0x8A82: 0x9C0D,
+ 0x8A83: 0x6F5F,
+ 0x8A84: 0x5272,
+ 0x8A85: 0x559D,
+ 0x8A86: 0x6070,
+ 0x8A87: 0x62EC,
+ 0x8A88: 0x6D3B,
+ 0x8A89: 0x6E07,
+ 0x8A8A: 0x6ED1,
+ 0x8A8B: 0x845B,
+ 0x8A8C: 0x8910,
+ 0x8A8D: 0x8F44,
+ 0x8A8E: 0x4E14,
+ 0x8A8F: 0x9C39,
+ 0x8A90: 0x53F6,
+ 0x8A91: 0x691B,
+ 0x8A92: 0x6A3A,
+ 0x8A93: 0x9784,
+ 0x8A94: 0x682A,
+ 0x8A95: 0x515C,
+ 0x8A96: 0x7AC3,
+ 0x8A97: 0x84B2,
+ 0x8A98: 0x91DC,
+ 0x8A99: 0x938C,
+ 0x8A9A: 0x565B,
+ 0x8A9B: 0x9D28,
+ 0x8A9C: 0x6822,
+ 0x8A9D: 0x8305,
+ 0x8A9E: 0x8431,
+ 0x8A9F: 0x7CA5,
+ 0x8AA0: 0x5208,
+ 0x8AA1: 0x82C5,
+ 0x8AA2: 0x74E6,
+ 0x8AA3: 0x4E7E,
+ 0x8AA4: 0x4F83,
+ 0x8AA5: 0x51A0,
+ 0x8AA6: 0x5BD2,
+ 0x8AA7: 0x520A,
+ 0x8AA8: 0x52D8,
+ 0x8AA9: 0x52E7,
+ 0x8AAA: 0x5DFB,
+ 0x8AAB: 0x559A,
+ 0x8AAC: 0x582A,
+ 0x8AAD: 0x59E6,
+ 0x8AAE: 0x5B8C,
+ 0x8AAF: 0x5B98,
+ 0x8AB0: 0x5BDB,
+ 0x8AB1: 0x5E72,
+ 0x8AB2: 0x5E79,
+ 0x8AB3: 0x60A3,
+ 0x8AB4: 0x611F,
+ 0x8AB5: 0x6163,
+ 0x8AB6: 0x61BE,
+ 0x8AB7: 0x63DB,
+ 0x8AB8: 0x6562,
+ 0x8AB9: 0x67D1,
+ 0x8ABA: 0x6853,
+ 0x8ABB: 0x68FA,
+ 0x8ABC: 0x6B3E,
+ 0x8ABD: 0x6B53,
+ 0x8ABE: 0x6C57,
+ 0x8ABF: 0x6F22,
+ 0x8AC0: 0x6F97,
+ 0x8AC1: 0x6F45,
+ 0x8AC2: 0x74B0,
+ 0x8AC3: 0x7518,
+ 0x8AC4: 0x76E3,
+ 0x8AC5: 0x770B,
+ 0x8AC6: 0x7AFF,
+ 0x8AC7: 0x7BA1,
+ 0x8AC8: 0x7C21,
+ 0x8AC9: 0x7DE9,
+ 0x8ACA: 0x7F36,
+ 0x8ACB: 0x7FF0,
+ 0x8ACC: 0x809D,
+ 0x8ACD: 0x8266,
+ 0x8ACE: 0x839E,
+ 0x8ACF: 0x89B3,
+ 0x8AD0: 0x8ACC,
+ 0x8AD1: 0x8CAB,
+ 0x8AD2: 0x9084,
+ 0x8AD3: 0x9451,
+ 0x8AD4: 0x9593,
+ 0x8AD5: 0x9591,
+ 0x8AD6: 0x95A2,
+ 0x8AD7: 0x9665,
+ 0x8AD8: 0x97D3,
+ 0x8AD9: 0x9928,
+ 0x8ADA: 0x8218,
+ 0x8ADB: 0x4E38,
+ 0x8ADC: 0x542B,
+ 0x8ADD: 0x5CB8,
+ 0x8ADE: 0x5DCC,
+ 0x8ADF: 0x73A9,
+ 0x8AE0: 0x764C,
+ 0x8AE1: 0x773C,
+ 0x8AE2: 0x5CA9,
+ 0x8AE3: 0x7FEB,
+ 0x8AE4: 0x8D0B,
+ 0x8AE5: 0x96C1,
+ 0x8AE6: 0x9811,
+ 0x8AE7: 0x9854,
+ 0x8AE8: 0x9858,
+ 0x8AE9: 0x4F01,
+ 0x8AEA: 0x4F0E,
+ 0x8AEB: 0x5371,
+ 0x8AEC: 0x559C,
+ 0x8AED: 0x5668,
+ 0x8AEE: 0x57FA,
+ 0x8AEF: 0x5947,
+ 0x8AF0: 0x5B09,
+ 0x8AF1: 0x5BC4,
+ 0x8AF2: 0x5C90,
+ 0x8AF3: 0x5E0C,
+ 0x8AF4: 0x5E7E,
+ 0x8AF5: 0x5FCC,
+ 0x8AF6: 0x63EE,
+ 0x8AF7: 0x673A,
+ 0x8AF8: 0x65D7,
+ 0x8AF9: 0x65E2,
+ 0x8AFA: 0x671F,
+ 0x8AFB: 0x68CB,
+ 0x8AFC: 0x68C4,
+ 0x8B40: 0x6A5F,
+ 0x8B41: 0x5E30,
+ 0x8B42: 0x6BC5,
+ 0x8B43: 0x6C17,
+ 0x8B44: 0x6C7D,
+ 0x8B45: 0x757F,
+ 0x8B46: 0x7948,
+ 0x8B47: 0x5B63,
+ 0x8B48: 0x7A00,
+ 0x8B49: 0x7D00,
+ 0x8B4A: 0x5FBD,
+ 0x8B4B: 0x898F,
+ 0x8B4C: 0x8A18,
+ 0x8B4D: 0x8CB4,
+ 0x8B4E: 0x8D77,
+ 0x8B4F: 0x8ECC,
+ 0x8B50: 0x8F1D,
+ 0x8B51: 0x98E2,
+ 0x8B52: 0x9A0E,
+ 0x8B53: 0x9B3C,
+ 0x8B54: 0x4E80,
+ 0x8B55: 0x507D,
+ 0x8B56: 0x5100,
+ 0x8B57: 0x5993,
+ 0x8B58: 0x5B9C,
+ 0x8B59: 0x622F,
+ 0x8B5A: 0x6280,
+ 0x8B5B: 0x64EC,
+ 0x8B5C: 0x6B3A,
+ 0x8B5D: 0x72A0,
+ 0x8B5E: 0x7591,
+ 0x8B5F: 0x7947,
+ 0x8B60: 0x7FA9,
+ 0x8B61: 0x87FB,
+ 0x8B62: 0x8ABC,
+ 0x8B63: 0x8B70,
+ 0x8B64: 0x63AC,
+ 0x8B65: 0x83CA,
+ 0x8B66: 0x97A0,
+ 0x8B67: 0x5409,
+ 0x8B68: 0x5403,
+ 0x8B69: 0x55AB,
+ 0x8B6A: 0x6854,
+ 0x8B6B: 0x6A58,
+ 0x8B6C: 0x8A70,
+ 0x8B6D: 0x7827,
+ 0x8B6E: 0x6775,
+ 0x8B6F: 0x9ECD,
+ 0x8B70: 0x5374,
+ 0x8B71: 0x5BA2,
+ 0x8B72: 0x811A,
+ 0x8B73: 0x8650,
+ 0x8B74: 0x9006,
+ 0x8B75: 0x4E18,
+ 0x8B76: 0x4E45,
+ 0x8B77: 0x4EC7,
+ 0x8B78: 0x4F11,
+ 0x8B79: 0x53CA,
+ 0x8B7A: 0x5438,
+ 0x8B7B: 0x5BAE,
+ 0x8B7C: 0x5F13,
+ 0x8B7D: 0x6025,
+ 0x8B7E: 0x6551,
+ 0x8B80: 0x673D,
+ 0x8B81: 0x6C42,
+ 0x8B82: 0x6C72,
+ 0x8B83: 0x6CE3,
+ 0x8B84: 0x7078,
+ 0x8B85: 0x7403,
+ 0x8B86: 0x7A76,
+ 0x8B87: 0x7AAE,
+ 0x8B88: 0x7B08,
+ 0x8B89: 0x7D1A,
+ 0x8B8A: 0x7CFE,
+ 0x8B8B: 0x7D66,
+ 0x8B8C: 0x65E7,
+ 0x8B8D: 0x725B,
+ 0x8B8E: 0x53BB,
+ 0x8B8F: 0x5C45,
+ 0x8B90: 0x5DE8,
+ 0x8B91: 0x62D2,
+ 0x8B92: 0x62E0,
+ 0x8B93: 0x6319,
+ 0x8B94: 0x6E20,
+ 0x8B95: 0x865A,
+ 0x8B96: 0x8A31,
+ 0x8B97: 0x8DDD,
+ 0x8B98: 0x92F8,
+ 0x8B99: 0x6F01,
+ 0x8B9A: 0x79A6,
+ 0x8B9B: 0x9B5A,
+ 0x8B9C: 0x4EA8,
+ 0x8B9D: 0x4EAB,
+ 0x8B9E: 0x4EAC,
+ 0x8B9F: 0x4F9B,
+ 0x8BA0: 0x4FA0,
+ 0x8BA1: 0x50D1,
+ 0x8BA2: 0x5147,
+ 0x8BA3: 0x7AF6,
+ 0x8BA4: 0x5171,
+ 0x8BA5: 0x51F6,
+ 0x8BA6: 0x5354,
+ 0x8BA7: 0x5321,
+ 0x8BA8: 0x537F,
+ 0x8BA9: 0x53EB,
+ 0x8BAA: 0x55AC,
+ 0x8BAB: 0x5883,
+ 0x8BAC: 0x5CE1,
+ 0x8BAD: 0x5F37,
+ 0x8BAE: 0x5F4A,
+ 0x8BAF: 0x602F,
+ 0x8BB0: 0x6050,
+ 0x8BB1: 0x606D,
+ 0x8BB2: 0x631F,
+ 0x8BB3: 0x6559,
+ 0x8BB4: 0x6A4B,
+ 0x8BB5: 0x6CC1,
+ 0x8BB6: 0x72C2,
+ 0x8BB7: 0x72ED,
+ 0x8BB8: 0x77EF,
+ 0x8BB9: 0x80F8,
+ 0x8BBA: 0x8105,
+ 0x8BBB: 0x8208,
+ 0x8BBC: 0x854E,
+ 0x8BBD: 0x90F7,
+ 0x8BBE: 0x93E1,
+ 0x8BBF: 0x97FF,
+ 0x8BC0: 0x9957,
+ 0x8BC1: 0x9A5A,
+ 0x8BC2: 0x4EF0,
+ 0x8BC3: 0x51DD,
+ 0x8BC4: 0x5C2D,
+ 0x8BC5: 0x6681,
+ 0x8BC6: 0x696D,
+ 0x8BC7: 0x5C40,
+ 0x8BC8: 0x66F2,
+ 0x8BC9: 0x6975,
+ 0x8BCA: 0x7389,
+ 0x8BCB: 0x6850,
+ 0x8BCC: 0x7C81,
+ 0x8BCD: 0x50C5,
+ 0x8BCE: 0x52E4,
+ 0x8BCF: 0x5747,
+ 0x8BD0: 0x5DFE,
+ 0x8BD1: 0x9326,
+ 0x8BD2: 0x65A4,
+ 0x8BD3: 0x6B23,
+ 0x8BD4: 0x6B3D,
+ 0x8BD5: 0x7434,
+ 0x8BD6: 0x7981,
+ 0x8BD7: 0x79BD,
+ 0x8BD8: 0x7B4B,
+ 0x8BD9: 0x7DCA,
+ 0x8BDA: 0x82B9,
+ 0x8BDB: 0x83CC,
+ 0x8BDC: 0x887F,
+ 0x8BDD: 0x895F,
+ 0x8BDE: 0x8B39,
+ 0x8BDF: 0x8FD1,
+ 0x8BE0: 0x91D1,
+ 0x8BE1: 0x541F,
+ 0x8BE2: 0x9280,
+ 0x8BE3: 0x4E5D,
+ 0x8BE4: 0x5036,
+ 0x8BE5: 0x53E5,
+ 0x8BE6: 0x533A,
+ 0x8BE7: 0x72D7,
+ 0x8BE8: 0x7396,
+ 0x8BE9: 0x77E9,
+ 0x8BEA: 0x82E6,
+ 0x8BEB: 0x8EAF,
+ 0x8BEC: 0x99C6,
+ 0x8BED: 0x99C8,
+ 0x8BEE: 0x99D2,
+ 0x8BEF: 0x5177,
+ 0x8BF0: 0x611A,
+ 0x8BF1: 0x865E,
+ 0x8BF2: 0x55B0,
+ 0x8BF3: 0x7A7A,
+ 0x8BF4: 0x5076,
+ 0x8BF5: 0x5BD3,
+ 0x8BF6: 0x9047,
+ 0x8BF7: 0x9685,
+ 0x8BF8: 0x4E32,
+ 0x8BF9: 0x6ADB,
+ 0x8BFA: 0x91E7,
+ 0x8BFB: 0x5C51,
+ 0x8BFC: 0x5C48,
+ 0x8C40: 0x6398,
+ 0x8C41: 0x7A9F,
+ 0x8C42: 0x6C93,
+ 0x8C43: 0x9774,
+ 0x8C44: 0x8F61,
+ 0x8C45: 0x7AAA,
+ 0x8C46: 0x718A,
+ 0x8C47: 0x9688,
+ 0x8C48: 0x7C82,
+ 0x8C49: 0x6817,
+ 0x8C4A: 0x7E70,
+ 0x8C4B: 0x6851,
+ 0x8C4C: 0x936C,
+ 0x8C4D: 0x52F2,
+ 0x8C4E: 0x541B,
+ 0x8C4F: 0x85AB,
+ 0x8C50: 0x8A13,
+ 0x8C51: 0x7FA4,
+ 0x8C52: 0x8ECD,
+ 0x8C53: 0x90E1,
+ 0x8C54: 0x5366,
+ 0x8C55: 0x8888,
+ 0x8C56: 0x7941,
+ 0x8C57: 0x4FC2,
+ 0x8C58: 0x50BE,
+ 0x8C59: 0x5211,
+ 0x8C5A: 0x5144,
+ 0x8C5B: 0x5553,
+ 0x8C5C: 0x572D,
+ 0x8C5D: 0x73EA,
+ 0x8C5E: 0x578B,
+ 0x8C5F: 0x5951,
+ 0x8C60: 0x5F62,
+ 0x8C61: 0x5F84,
+ 0x8C62: 0x6075,
+ 0x8C63: 0x6176,
+ 0x8C64: 0x6167,
+ 0x8C65: 0x61A9,
+ 0x8C66: 0x63B2,
+ 0x8C67: 0x643A,
+ 0x8C68: 0x656C,
+ 0x8C69: 0x666F,
+ 0x8C6A: 0x6842,
+ 0x8C6B: 0x6E13,
+ 0x8C6C: 0x7566,
+ 0x8C6D: 0x7A3D,
+ 0x8C6E: 0x7CFB,
+ 0x8C6F: 0x7D4C,
+ 0x8C70: 0x7D99,
+ 0x8C71: 0x7E4B,
+ 0x8C72: 0x7F6B,
+ 0x8C73: 0x830E,
+ 0x8C74: 0x834A,
+ 0x8C75: 0x86CD,
+ 0x8C76: 0x8A08,
+ 0x8C77: 0x8A63,
+ 0x8C78: 0x8B66,
+ 0x8C79: 0x8EFD,
+ 0x8C7A: 0x981A,
+ 0x8C7B: 0x9D8F,
+ 0x8C7C: 0x82B8,
+ 0x8C7D: 0x8FCE,
+ 0x8C7E: 0x9BE8,
+ 0x8C80: 0x5287,
+ 0x8C81: 0x621F,
+ 0x8C82: 0x6483,
+ 0x8C83: 0x6FC0,
+ 0x8C84: 0x9699,
+ 0x8C85: 0x6841,
+ 0x8C86: 0x5091,
+ 0x8C87: 0x6B20,
+ 0x8C88: 0x6C7A,
+ 0x8C89: 0x6F54,
+ 0x8C8A: 0x7A74,
+ 0x8C8B: 0x7D50,
+ 0x8C8C: 0x8840,
+ 0x8C8D: 0x8A23,
+ 0x8C8E: 0x6708,
+ 0x8C8F: 0x4EF6,
+ 0x8C90: 0x5039,
+ 0x8C91: 0x5026,
+ 0x8C92: 0x5065,
+ 0x8C93: 0x517C,
+ 0x8C94: 0x5238,
+ 0x8C95: 0x5263,
+ 0x8C96: 0x55A7,
+ 0x8C97: 0x570F,
+ 0x8C98: 0x5805,
+ 0x8C99: 0x5ACC,
+ 0x8C9A: 0x5EFA,
+ 0x8C9B: 0x61B2,
+ 0x8C9C: 0x61F8,
+ 0x8C9D: 0x62F3,
+ 0x8C9E: 0x6372,
+ 0x8C9F: 0x691C,
+ 0x8CA0: 0x6A29,
+ 0x8CA1: 0x727D,
+ 0x8CA2: 0x72AC,
+ 0x8CA3: 0x732E,
+ 0x8CA4: 0x7814,
+ 0x8CA5: 0x786F,
+ 0x8CA6: 0x7D79,
+ 0x8CA7: 0x770C,
+ 0x8CA8: 0x80A9,
+ 0x8CA9: 0x898B,
+ 0x8CAA: 0x8B19,
+ 0x8CAB: 0x8CE2,
+ 0x8CAC: 0x8ED2,
+ 0x8CAD: 0x9063,
+ 0x8CAE: 0x9375,
+ 0x8CAF: 0x967A,
+ 0x8CB0: 0x9855,
+ 0x8CB1: 0x9A13,
+ 0x8CB2: 0x9E78,
+ 0x8CB3: 0x5143,
+ 0x8CB4: 0x539F,
+ 0x8CB5: 0x53B3,
+ 0x8CB6: 0x5E7B,
+ 0x8CB7: 0x5F26,
+ 0x8CB8: 0x6E1B,
+ 0x8CB9: 0x6E90,
+ 0x8CBA: 0x7384,
+ 0x8CBB: 0x73FE,
+ 0x8CBC: 0x7D43,
+ 0x8CBD: 0x8237,
+ 0x8CBE: 0x8A00,
+ 0x8CBF: 0x8AFA,
+ 0x8CC0: 0x9650,
+ 0x8CC1: 0x4E4E,
+ 0x8CC2: 0x500B,
+ 0x8CC3: 0x53E4,
+ 0x8CC4: 0x547C,
+ 0x8CC5: 0x56FA,
+ 0x8CC6: 0x59D1,
+ 0x8CC7: 0x5B64,
+ 0x8CC8: 0x5DF1,
+ 0x8CC9: 0x5EAB,
+ 0x8CCA: 0x5F27,
+ 0x8CCB: 0x6238,
+ 0x8CCC: 0x6545,
+ 0x8CCD: 0x67AF,
+ 0x8CCE: 0x6E56,
+ 0x8CCF: 0x72D0,
+ 0x8CD0: 0x7CCA,
+ 0x8CD1: 0x88B4,
+ 0x8CD2: 0x80A1,
+ 0x8CD3: 0x80E1,
+ 0x8CD4: 0x83F0,
+ 0x8CD5: 0x864E,
+ 0x8CD6: 0x8A87,
+ 0x8CD7: 0x8DE8,
+ 0x8CD8: 0x9237,
+ 0x8CD9: 0x96C7,
+ 0x8CDA: 0x9867,
+ 0x8CDB: 0x9F13,
+ 0x8CDC: 0x4E94,
+ 0x8CDD: 0x4E92,
+ 0x8CDE: 0x4F0D,
+ 0x8CDF: 0x5348,
+ 0x8CE0: 0x5449,
+ 0x8CE1: 0x543E,
+ 0x8CE2: 0x5A2F,
+ 0x8CE3: 0x5F8C,
+ 0x8CE4: 0x5FA1,
+ 0x8CE5: 0x609F,
+ 0x8CE6: 0x68A7,
+ 0x8CE7: 0x6A8E,
+ 0x8CE8: 0x745A,
+ 0x8CE9: 0x7881,
+ 0x8CEA: 0x8A9E,
+ 0x8CEB: 0x8AA4,
+ 0x8CEC: 0x8B77,
+ 0x8CED: 0x9190,
+ 0x8CEE: 0x4E5E,
+ 0x8CEF: 0x9BC9,
+ 0x8CF0: 0x4EA4,
+ 0x8CF1: 0x4F7C,
+ 0x8CF2: 0x4FAF,
+ 0x8CF3: 0x5019,
+ 0x8CF4: 0x5016,
+ 0x8CF5: 0x5149,
+ 0x8CF6: 0x516C,
+ 0x8CF7: 0x529F,
+ 0x8CF8: 0x52B9,
+ 0x8CF9: 0x52FE,
+ 0x8CFA: 0x539A,
+ 0x8CFB: 0x53E3,
+ 0x8CFC: 0x5411,
+ 0x8D40: 0x540E,
+ 0x8D41: 0x5589,
+ 0x8D42: 0x5751,
+ 0x8D43: 0x57A2,
+ 0x8D44: 0x597D,
+ 0x8D45: 0x5B54,
+ 0x8D46: 0x5B5D,
+ 0x8D47: 0x5B8F,
+ 0x8D48: 0x5DE5,
+ 0x8D49: 0x5DE7,
+ 0x8D4A: 0x5DF7,
+ 0x8D4B: 0x5E78,
+ 0x8D4C: 0x5E83,
+ 0x8D4D: 0x5E9A,
+ 0x8D4E: 0x5EB7,
+ 0x8D4F: 0x5F18,
+ 0x8D50: 0x6052,
+ 0x8D51: 0x614C,
+ 0x8D52: 0x6297,
+ 0x8D53: 0x62D8,
+ 0x8D54: 0x63A7,
+ 0x8D55: 0x653B,
+ 0x8D56: 0x6602,
+ 0x8D57: 0x6643,
+ 0x8D58: 0x66F4,
+ 0x8D59: 0x676D,
+ 0x8D5A: 0x6821,
+ 0x8D5B: 0x6897,
+ 0x8D5C: 0x69CB,
+ 0x8D5D: 0x6C5F,
+ 0x8D5E: 0x6D2A,
+ 0x8D5F: 0x6D69,
+ 0x8D60: 0x6E2F,
+ 0x8D61: 0x6E9D,
+ 0x8D62: 0x7532,
+ 0x8D63: 0x7687,
+ 0x8D64: 0x786C,
+ 0x8D65: 0x7A3F,
+ 0x8D66: 0x7CE0,
+ 0x8D67: 0x7D05,
+ 0x8D68: 0x7D18,
+ 0x8D69: 0x7D5E,
+ 0x8D6A: 0x7DB1,
+ 0x8D6B: 0x8015,
+ 0x8D6C: 0x8003,
+ 0x8D6D: 0x80AF,
+ 0x8D6E: 0x80B1,
+ 0x8D6F: 0x8154,
+ 0x8D70: 0x818F,
+ 0x8D71: 0x822A,
+ 0x8D72: 0x8352,
+ 0x8D73: 0x884C,
+ 0x8D74: 0x8861,
+ 0x8D75: 0x8B1B,
+ 0x8D76: 0x8CA2,
+ 0x8D77: 0x8CFC,
+ 0x8D78: 0x90CA,
+ 0x8D79: 0x9175,
+ 0x8D7A: 0x9271,
+ 0x8D7B: 0x783F,
+ 0x8D7C: 0x92FC,
+ 0x8D7D: 0x95A4,
+ 0x8D7E: 0x964D,
+ 0x8D80: 0x9805,
+ 0x8D81: 0x9999,
+ 0x8D82: 0x9AD8,
+ 0x8D83: 0x9D3B,
+ 0x8D84: 0x525B,
+ 0x8D85: 0x52AB,
+ 0x8D86: 0x53F7,
+ 0x8D87: 0x5408,
+ 0x8D88: 0x58D5,
+ 0x8D89: 0x62F7,
+ 0x8D8A: 0x6FE0,
+ 0x8D8B: 0x8C6A,
+ 0x8D8C: 0x8F5F,
+ 0x8D8D: 0x9EB9,
+ 0x8D8E: 0x514B,
+ 0x8D8F: 0x523B,
+ 0x8D90: 0x544A,
+ 0x8D91: 0x56FD,
+ 0x8D92: 0x7A40,
+ 0x8D93: 0x9177,
+ 0x8D94: 0x9D60,
+ 0x8D95: 0x9ED2,
+ 0x8D96: 0x7344,
+ 0x8D97: 0x6F09,
+ 0x8D98: 0x8170,
+ 0x8D99: 0x7511,
+ 0x8D9A: 0x5FFD,
+ 0x8D9B: 0x60DA,
+ 0x8D9C: 0x9AA8,
+ 0x8D9D: 0x72DB,
+ 0x8D9E: 0x8FBC,
+ 0x8D9F: 0x6B64,
+ 0x8DA0: 0x9803,
+ 0x8DA1: 0x4ECA,
+ 0x8DA2: 0x56F0,
+ 0x8DA3: 0x5764,
+ 0x8DA4: 0x58BE,
+ 0x8DA5: 0x5A5A,
+ 0x8DA6: 0x6068,
+ 0x8DA7: 0x61C7,
+ 0x8DA8: 0x660F,
+ 0x8DA9: 0x6606,
+ 0x8DAA: 0x6839,
+ 0x8DAB: 0x68B1,
+ 0x8DAC: 0x6DF7,
+ 0x8DAD: 0x75D5,
+ 0x8DAE: 0x7D3A,
+ 0x8DAF: 0x826E,
+ 0x8DB0: 0x9B42,
+ 0x8DB1: 0x4E9B,
+ 0x8DB2: 0x4F50,
+ 0x8DB3: 0x53C9,
+ 0x8DB4: 0x5506,
+ 0x8DB5: 0x5D6F,
+ 0x8DB6: 0x5DE6,
+ 0x8DB7: 0x5DEE,
+ 0x8DB8: 0x67FB,
+ 0x8DB9: 0x6C99,
+ 0x8DBA: 0x7473,
+ 0x8DBB: 0x7802,
+ 0x8DBC: 0x8A50,
+ 0x8DBD: 0x9396,
+ 0x8DBE: 0x88DF,
+ 0x8DBF: 0x5750,
+ 0x8DC0: 0x5EA7,
+ 0x8DC1: 0x632B,
+ 0x8DC2: 0x50B5,
+ 0x8DC3: 0x50AC,
+ 0x8DC4: 0x518D,
+ 0x8DC5: 0x6700,
+ 0x8DC6: 0x54C9,
+ 0x8DC7: 0x585E,
+ 0x8DC8: 0x59BB,
+ 0x8DC9: 0x5BB0,
+ 0x8DCA: 0x5F69,
+ 0x8DCB: 0x624D,
+ 0x8DCC: 0x63A1,
+ 0x8DCD: 0x683D,
+ 0x8DCE: 0x6B73,
+ 0x8DCF: 0x6E08,
+ 0x8DD0: 0x707D,
+ 0x8DD1: 0x91C7,
+ 0x8DD2: 0x7280,
+ 0x8DD3: 0x7815,
+ 0x8DD4: 0x7826,
+ 0x8DD5: 0x796D,
+ 0x8DD6: 0x658E,
+ 0x8DD7: 0x7D30,
+ 0x8DD8: 0x83DC,
+ 0x8DD9: 0x88C1,
+ 0x8DDA: 0x8F09,
+ 0x8DDB: 0x969B,
+ 0x8DDC: 0x5264,
+ 0x8DDD: 0x5728,
+ 0x8DDE: 0x6750,
+ 0x8DDF: 0x7F6A,
+ 0x8DE0: 0x8CA1,
+ 0x8DE1: 0x51B4,
+ 0x8DE2: 0x5742,
+ 0x8DE3: 0x962A,
+ 0x8DE4: 0x583A,
+ 0x8DE5: 0x698A,
+ 0x8DE6: 0x80B4,
+ 0x8DE7: 0x54B2,
+ 0x8DE8: 0x5D0E,
+ 0x8DE9: 0x57FC,
+ 0x8DEA: 0x7895,
+ 0x8DEB: 0x9DFA,
+ 0x8DEC: 0x4F5C,
+ 0x8DED: 0x524A,
+ 0x8DEE: 0x548B,
+ 0x8DEF: 0x643E,
+ 0x8DF0: 0x6628,
+ 0x8DF1: 0x6714,
+ 0x8DF2: 0x67F5,
+ 0x8DF3: 0x7A84,
+ 0x8DF4: 0x7B56,
+ 0x8DF5: 0x7D22,
+ 0x8DF6: 0x932F,
+ 0x8DF7: 0x685C,
+ 0x8DF8: 0x9BAD,
+ 0x8DF9: 0x7B39,
+ 0x8DFA: 0x5319,
+ 0x8DFB: 0x518A,
+ 0x8DFC: 0x5237,
+ 0x8E40: 0x5BDF,
+ 0x8E41: 0x62F6,
+ 0x8E42: 0x64AE,
+ 0x8E43: 0x64E6,
+ 0x8E44: 0x672D,
+ 0x8E45: 0x6BBA,
+ 0x8E46: 0x85A9,
+ 0x8E47: 0x96D1,
+ 0x8E48: 0x7690,
+ 0x8E49: 0x9BD6,
+ 0x8E4A: 0x634C,
+ 0x8E4B: 0x9306,
+ 0x8E4C: 0x9BAB,
+ 0x8E4D: 0x76BF,
+ 0x8E4E: 0x6652,
+ 0x8E4F: 0x4E09,
+ 0x8E50: 0x5098,
+ 0x8E51: 0x53C2,
+ 0x8E52: 0x5C71,
+ 0x8E53: 0x60E8,
+ 0x8E54: 0x6492,
+ 0x8E55: 0x6563,
+ 0x8E56: 0x685F,
+ 0x8E57: 0x71E6,
+ 0x8E58: 0x73CA,
+ 0x8E59: 0x7523,
+ 0x8E5A: 0x7B97,
+ 0x8E5B: 0x7E82,
+ 0x8E5C: 0x8695,
+ 0x8E5D: 0x8B83,
+ 0x8E5E: 0x8CDB,
+ 0x8E5F: 0x9178,
+ 0x8E60: 0x9910,
+ 0x8E61: 0x65AC,
+ 0x8E62: 0x66AB,
+ 0x8E63: 0x6B8B,
+ 0x8E64: 0x4ED5,
+ 0x8E65: 0x4ED4,
+ 0x8E66: 0x4F3A,
+ 0x8E67: 0x4F7F,
+ 0x8E68: 0x523A,
+ 0x8E69: 0x53F8,
+ 0x8E6A: 0x53F2,
+ 0x8E6B: 0x55E3,
+ 0x8E6C: 0x56DB,
+ 0x8E6D: 0x58EB,
+ 0x8E6E: 0x59CB,
+ 0x8E6F: 0x59C9,
+ 0x8E70: 0x59FF,
+ 0x8E71: 0x5B50,
+ 0x8E72: 0x5C4D,
+ 0x8E73: 0x5E02,
+ 0x8E74: 0x5E2B,
+ 0x8E75: 0x5FD7,
+ 0x8E76: 0x601D,
+ 0x8E77: 0x6307,
+ 0x8E78: 0x652F,
+ 0x8E79: 0x5B5C,
+ 0x8E7A: 0x65AF,
+ 0x8E7B: 0x65BD,
+ 0x8E7C: 0x65E8,
+ 0x8E7D: 0x679D,
+ 0x8E7E: 0x6B62,
+ 0x8E80: 0x6B7B,
+ 0x8E81: 0x6C0F,
+ 0x8E82: 0x7345,
+ 0x8E83: 0x7949,
+ 0x8E84: 0x79C1,
+ 0x8E85: 0x7CF8,
+ 0x8E86: 0x7D19,
+ 0x8E87: 0x7D2B,
+ 0x8E88: 0x80A2,
+ 0x8E89: 0x8102,
+ 0x8E8A: 0x81F3,
+ 0x8E8B: 0x8996,
+ 0x8E8C: 0x8A5E,
+ 0x8E8D: 0x8A69,
+ 0x8E8E: 0x8A66,
+ 0x8E8F: 0x8A8C,
+ 0x8E90: 0x8AEE,
+ 0x8E91: 0x8CC7,
+ 0x8E92: 0x8CDC,
+ 0x8E93: 0x96CC,
+ 0x8E94: 0x98FC,
+ 0x8E95: 0x6B6F,
+ 0x8E96: 0x4E8B,
+ 0x8E97: 0x4F3C,
+ 0x8E98: 0x4F8D,
+ 0x8E99: 0x5150,
+ 0x8E9A: 0x5B57,
+ 0x8E9B: 0x5BFA,
+ 0x8E9C: 0x6148,
+ 0x8E9D: 0x6301,
+ 0x8E9E: 0x6642,
+ 0x8E9F: 0x6B21,
+ 0x8EA0: 0x6ECB,
+ 0x8EA1: 0x6CBB,
+ 0x8EA2: 0x723E,
+ 0x8EA3: 0x74BD,
+ 0x8EA4: 0x75D4,
+ 0x8EA5: 0x78C1,
+ 0x8EA6: 0x793A,
+ 0x8EA7: 0x800C,
+ 0x8EA8: 0x8033,
+ 0x8EA9: 0x81EA,
+ 0x8EAA: 0x8494,
+ 0x8EAB: 0x8F9E,
+ 0x8EAC: 0x6C50,
+ 0x8EAD: 0x9E7F,
+ 0x8EAE: 0x5F0F,
+ 0x8EAF: 0x8B58,
+ 0x8EB0: 0x9D2B,
+ 0x8EB1: 0x7AFA,
+ 0x8EB2: 0x8EF8,
+ 0x8EB3: 0x5B8D,
+ 0x8EB4: 0x96EB,
+ 0x8EB5: 0x4E03,
+ 0x8EB6: 0x53F1,
+ 0x8EB7: 0x57F7,
+ 0x8EB8: 0x5931,
+ 0x8EB9: 0x5AC9,
+ 0x8EBA: 0x5BA4,
+ 0x8EBB: 0x6089,
+ 0x8EBC: 0x6E7F,
+ 0x8EBD: 0x6F06,
+ 0x8EBE: 0x75BE,
+ 0x8EBF: 0x8CEA,
+ 0x8EC0: 0x5B9F,
+ 0x8EC1: 0x8500,
+ 0x8EC2: 0x7BE0,
+ 0x8EC3: 0x5072,
+ 0x8EC4: 0x67F4,
+ 0x8EC5: 0x829D,
+ 0x8EC6: 0x5C61,
+ 0x8EC7: 0x854A,
+ 0x8EC8: 0x7E1E,
+ 0x8EC9: 0x820E,
+ 0x8ECA: 0x5199,
+ 0x8ECB: 0x5C04,
+ 0x8ECC: 0x6368,
+ 0x8ECD: 0x8D66,
+ 0x8ECE: 0x659C,
+ 0x8ECF: 0x716E,
+ 0x8ED0: 0x793E,
+ 0x8ED1: 0x7D17,
+ 0x8ED2: 0x8005,
+ 0x8ED3: 0x8B1D,
+ 0x8ED4: 0x8ECA,
+ 0x8ED5: 0x906E,
+ 0x8ED6: 0x86C7,
+ 0x8ED7: 0x90AA,
+ 0x8ED8: 0x501F,
+ 0x8ED9: 0x52FA,
+ 0x8EDA: 0x5C3A,
+ 0x8EDB: 0x6753,
+ 0x8EDC: 0x707C,
+ 0x8EDD: 0x7235,
+ 0x8EDE: 0x914C,
+ 0x8EDF: 0x91C8,
+ 0x8EE0: 0x932B,
+ 0x8EE1: 0x82E5,
+ 0x8EE2: 0x5BC2,
+ 0x8EE3: 0x5F31,
+ 0x8EE4: 0x60F9,
+ 0x8EE5: 0x4E3B,
+ 0x8EE6: 0x53D6,
+ 0x8EE7: 0x5B88,
+ 0x8EE8: 0x624B,
+ 0x8EE9: 0x6731,
+ 0x8EEA: 0x6B8A,
+ 0x8EEB: 0x72E9,
+ 0x8EEC: 0x73E0,
+ 0x8EED: 0x7A2E,
+ 0x8EEE: 0x816B,
+ 0x8EEF: 0x8DA3,
+ 0x8EF0: 0x9152,
+ 0x8EF1: 0x9996,
+ 0x8EF2: 0x5112,
+ 0x8EF3: 0x53D7,
+ 0x8EF4: 0x546A,
+ 0x8EF5: 0x5BFF,
+ 0x8EF6: 0x6388,
+ 0x8EF7: 0x6A39,
+ 0x8EF8: 0x7DAC,
+ 0x8EF9: 0x9700,
+ 0x8EFA: 0x56DA,
+ 0x8EFB: 0x53CE,
+ 0x8EFC: 0x5468,
+ 0x8F40: 0x5B97,
+ 0x8F41: 0x5C31,
+ 0x8F42: 0x5DDE,
+ 0x8F43: 0x4FEE,
+ 0x8F44: 0x6101,
+ 0x8F45: 0x62FE,
+ 0x8F46: 0x6D32,
+ 0x8F47: 0x79C0,
+ 0x8F48: 0x79CB,
+ 0x8F49: 0x7D42,
+ 0x8F4A: 0x7E4D,
+ 0x8F4B: 0x7FD2,
+ 0x8F4C: 0x81ED,
+ 0x8F4D: 0x821F,
+ 0x8F4E: 0x8490,
+ 0x8F4F: 0x8846,
+ 0x8F50: 0x8972,
+ 0x8F51: 0x8B90,
+ 0x8F52: 0x8E74,
+ 0x8F53: 0x8F2F,
+ 0x8F54: 0x9031,
+ 0x8F55: 0x914B,
+ 0x8F56: 0x916C,
+ 0x8F57: 0x96C6,
+ 0x8F58: 0x919C,
+ 0x8F59: 0x4EC0,
+ 0x8F5A: 0x4F4F,
+ 0x8F5B: 0x5145,
+ 0x8F5C: 0x5341,
+ 0x8F5D: 0x5F93,
+ 0x8F5E: 0x620E,
+ 0x8F5F: 0x67D4,
+ 0x8F60: 0x6C41,
+ 0x8F61: 0x6E0B,
+ 0x8F62: 0x7363,
+ 0x8F63: 0x7E26,
+ 0x8F64: 0x91CD,
+ 0x8F65: 0x9283,
+ 0x8F66: 0x53D4,
+ 0x8F67: 0x5919,
+ 0x8F68: 0x5BBF,
+ 0x8F69: 0x6DD1,
+ 0x8F6A: 0x795D,
+ 0x8F6B: 0x7E2E,
+ 0x8F6C: 0x7C9B,
+ 0x8F6D: 0x587E,
+ 0x8F6E: 0x719F,
+ 0x8F6F: 0x51FA,
+ 0x8F70: 0x8853,
+ 0x8F71: 0x8FF0,
+ 0x8F72: 0x4FCA,
+ 0x8F73: 0x5CFB,
+ 0x8F74: 0x6625,
+ 0x8F75: 0x77AC,
+ 0x8F76: 0x7AE3,
+ 0x8F77: 0x821C,
+ 0x8F78: 0x99FF,
+ 0x8F79: 0x51C6,
+ 0x8F7A: 0x5FAA,
+ 0x8F7B: 0x65EC,
+ 0x8F7C: 0x696F,
+ 0x8F7D: 0x6B89,
+ 0x8F7E: 0x6DF3,
+ 0x8F80: 0x6E96,
+ 0x8F81: 0x6F64,
+ 0x8F82: 0x76FE,
+ 0x8F83: 0x7D14,
+ 0x8F84: 0x5DE1,
+ 0x8F85: 0x9075,
+ 0x8F86: 0x9187,
+ 0x8F87: 0x9806,
+ 0x8F88: 0x51E6,
+ 0x8F89: 0x521D,
+ 0x8F8A: 0x6240,
+ 0x8F8B: 0x6691,
+ 0x8F8C: 0x66D9,
+ 0x8F8D: 0x6E1A,
+ 0x8F8E: 0x5EB6,
+ 0x8F8F: 0x7DD2,
+ 0x8F90: 0x7F72,
+ 0x8F91: 0x66F8,
+ 0x8F92: 0x85AF,
+ 0x8F93: 0x85F7,
+ 0x8F94: 0x8AF8,
+ 0x8F95: 0x52A9,
+ 0x8F96: 0x53D9,
+ 0x8F97: 0x5973,
+ 0x8F98: 0x5E8F,
+ 0x8F99: 0x5F90,
+ 0x8F9A: 0x6055,
+ 0x8F9B: 0x92E4,
+ 0x8F9C: 0x9664,
+ 0x8F9D: 0x50B7,
+ 0x8F9E: 0x511F,
+ 0x8F9F: 0x52DD,
+ 0x8FA0: 0x5320,
+ 0x8FA1: 0x5347,
+ 0x8FA2: 0x53EC,
+ 0x8FA3: 0x54E8,
+ 0x8FA4: 0x5546,
+ 0x8FA5: 0x5531,
+ 0x8FA6: 0x5617,
+ 0x8FA7: 0x5968,
+ 0x8FA8: 0x59BE,
+ 0x8FA9: 0x5A3C,
+ 0x8FAA: 0x5BB5,
+ 0x8FAB: 0x5C06,
+ 0x8FAC: 0x5C0F,
+ 0x8FAD: 0x5C11,
+ 0x8FAE: 0x5C1A,
+ 0x8FAF: 0x5E84,
+ 0x8FB0: 0x5E8A,
+ 0x8FB1: 0x5EE0,
+ 0x8FB2: 0x5F70,
+ 0x8FB3: 0x627F,
+ 0x8FB4: 0x6284,
+ 0x8FB5: 0x62DB,
+ 0x8FB6: 0x638C,
+ 0x8FB7: 0x6377,
+ 0x8FB8: 0x6607,
+ 0x8FB9: 0x660C,
+ 0x8FBA: 0x662D,
+ 0x8FBB: 0x6676,
+ 0x8FBC: 0x677E,
+ 0x8FBD: 0x68A2,
+ 0x8FBE: 0x6A1F,
+ 0x8FBF: 0x6A35,
+ 0x8FC0: 0x6CBC,
+ 0x8FC1: 0x6D88,
+ 0x8FC2: 0x6E09,
+ 0x8FC3: 0x6E58,
+ 0x8FC4: 0x713C,
+ 0x8FC5: 0x7126,
+ 0x8FC6: 0x7167,
+ 0x8FC7: 0x75C7,
+ 0x8FC8: 0x7701,
+ 0x8FC9: 0x785D,
+ 0x8FCA: 0x7901,
+ 0x8FCB: 0x7965,
+ 0x8FCC: 0x79F0,
+ 0x8FCD: 0x7AE0,
+ 0x8FCE: 0x7B11,
+ 0x8FCF: 0x7CA7,
+ 0x8FD0: 0x7D39,
+ 0x8FD1: 0x8096,
+ 0x8FD2: 0x83D6,
+ 0x8FD3: 0x848B,
+ 0x8FD4: 0x8549,
+ 0x8FD5: 0x885D,
+ 0x8FD6: 0x88F3,
+ 0x8FD7: 0x8A1F,
+ 0x8FD8: 0x8A3C,
+ 0x8FD9: 0x8A54,
+ 0x8FDA: 0x8A73,
+ 0x8FDB: 0x8C61,
+ 0x8FDC: 0x8CDE,
+ 0x8FDD: 0x91A4,
+ 0x8FDE: 0x9266,
+ 0x8FDF: 0x937E,
+ 0x8FE0: 0x9418,
+ 0x8FE1: 0x969C,
+ 0x8FE2: 0x9798,
+ 0x8FE3: 0x4E0A,
+ 0x8FE4: 0x4E08,
+ 0x8FE5: 0x4E1E,
+ 0x8FE6: 0x4E57,
+ 0x8FE7: 0x5197,
+ 0x8FE8: 0x5270,
+ 0x8FE9: 0x57CE,
+ 0x8FEA: 0x5834,
+ 0x8FEB: 0x58CC,
+ 0x8FEC: 0x5B22,
+ 0x8FED: 0x5E38,
+ 0x8FEE: 0x60C5,
+ 0x8FEF: 0x64FE,
+ 0x8FF0: 0x6761,
+ 0x8FF1: 0x6756,
+ 0x8FF2: 0x6D44,
+ 0x8FF3: 0x72B6,
+ 0x8FF4: 0x7573,
+ 0x8FF5: 0x7A63,
+ 0x8FF6: 0x84B8,
+ 0x8FF7: 0x8B72,
+ 0x8FF8: 0x91B8,
+ 0x8FF9: 0x9320,
+ 0x8FFA: 0x5631,
+ 0x8FFB: 0x57F4,
+ 0x8FFC: 0x98FE,
+ 0x9040: 0x62ED,
+ 0x9041: 0x690D,
+ 0x9042: 0x6B96,
+ 0x9043: 0x71ED,
+ 0x9044: 0x7E54,
+ 0x9045: 0x8077,
+ 0x9046: 0x8272,
+ 0x9047: 0x89E6,
+ 0x9048: 0x98DF,
+ 0x9049: 0x8755,
+ 0x904A: 0x8FB1,
+ 0x904B: 0x5C3B,
+ 0x904C: 0x4F38,
+ 0x904D: 0x4FE1,
+ 0x904E: 0x4FB5,
+ 0x904F: 0x5507,
+ 0x9050: 0x5A20,
+ 0x9051: 0x5BDD,
+ 0x9052: 0x5BE9,
+ 0x9053: 0x5FC3,
+ 0x9054: 0x614E,
+ 0x9055: 0x632F,
+ 0x9056: 0x65B0,
+ 0x9057: 0x664B,
+ 0x9058: 0x68EE,
+ 0x9059: 0x699B,
+ 0x905A: 0x6D78,
+ 0x905B: 0x6DF1,
+ 0x905C: 0x7533,
+ 0x905D: 0x75B9,
+ 0x905E: 0x771F,
+ 0x905F: 0x795E,
+ 0x9060: 0x79E6,
+ 0x9061: 0x7D33,
+ 0x9062: 0x81E3,
+ 0x9063: 0x82AF,
+ 0x9064: 0x85AA,
+ 0x9065: 0x89AA,
+ 0x9066: 0x8A3A,
+ 0x9067: 0x8EAB,
+ 0x9068: 0x8F9B,
+ 0x9069: 0x9032,
+ 0x906A: 0x91DD,
+ 0x906B: 0x9707,
+ 0x906C: 0x4EBA,
+ 0x906D: 0x4EC1,
+ 0x906E: 0x5203,
+ 0x906F: 0x5875,
+ 0x9070: 0x58EC,
+ 0x9071: 0x5C0B,
+ 0x9072: 0x751A,
+ 0x9073: 0x5C3D,
+ 0x9074: 0x814E,
+ 0x9075: 0x8A0A,
+ 0x9076: 0x8FC5,
+ 0x9077: 0x9663,
+ 0x9078: 0x976D,
+ 0x9079: 0x7B25,
+ 0x907A: 0x8ACF,
+ 0x907B: 0x9808,
+ 0x907C: 0x9162,
+ 0x907D: 0x56F3,
+ 0x907E: 0x53A8,
+ 0x9080: 0x9017,
+ 0x9081: 0x5439,
+ 0x9082: 0x5782,
+ 0x9083: 0x5E25,
+ 0x9084: 0x63A8,
+ 0x9085: 0x6C34,
+ 0x9086: 0x708A,
+ 0x9087: 0x7761,
+ 0x9088: 0x7C8B,
+ 0x9089: 0x7FE0,
+ 0x908A: 0x8870,
+ 0x908B: 0x9042,
+ 0x908C: 0x9154,
+ 0x908D: 0x9310,
+ 0x908E: 0x9318,
+ 0x908F: 0x968F,
+ 0x9090: 0x745E,
+ 0x9091: 0x9AC4,
+ 0x9092: 0x5D07,
+ 0x9093: 0x5D69,
+ 0x9094: 0x6570,
+ 0x9095: 0x67A2,
+ 0x9096: 0x8DA8,
+ 0x9097: 0x96DB,
+ 0x9098: 0x636E,
+ 0x9099: 0x6749,
+ 0x909A: 0x6919,
+ 0x909B: 0x83C5,
+ 0x909C: 0x9817,
+ 0x909D: 0x96C0,
+ 0x909E: 0x88FE,
+ 0x909F: 0x6F84,
+ 0x90A0: 0x647A,
+ 0x90A1: 0x5BF8,
+ 0x90A2: 0x4E16,
+ 0x90A3: 0x702C,
+ 0x90A4: 0x755D,
+ 0x90A5: 0x662F,
+ 0x90A6: 0x51C4,
+ 0x90A7: 0x5236,
+ 0x90A8: 0x52E2,
+ 0x90A9: 0x59D3,
+ 0x90AA: 0x5F81,
+ 0x90AB: 0x6027,
+ 0x90AC: 0x6210,
+ 0x90AD: 0x653F,
+ 0x90AE: 0x6574,
+ 0x90AF: 0x661F,
+ 0x90B0: 0x6674,
+ 0x90B1: 0x68F2,
+ 0x90B2: 0x6816,
+ 0x90B3: 0x6B63,
+ 0x90B4: 0x6E05,
+ 0x90B5: 0x7272,
+ 0x90B6: 0x751F,
+ 0x90B7: 0x76DB,
+ 0x90B8: 0x7CBE,
+ 0x90B9: 0x8056,
+ 0x90BA: 0x58F0,
+ 0x90BB: 0x88FD,
+ 0x90BC: 0x897F,
+ 0x90BD: 0x8AA0,
+ 0x90BE: 0x8A93,
+ 0x90BF: 0x8ACB,
+ 0x90C0: 0x901D,
+ 0x90C1: 0x9192,
+ 0x90C2: 0x9752,
+ 0x90C3: 0x9759,
+ 0x90C4: 0x6589,
+ 0x90C5: 0x7A0E,
+ 0x90C6: 0x8106,
+ 0x90C7: 0x96BB,
+ 0x90C8: 0x5E2D,
+ 0x90C9: 0x60DC,
+ 0x90CA: 0x621A,
+ 0x90CB: 0x65A5,
+ 0x90CC: 0x6614,
+ 0x90CD: 0x6790,
+ 0x90CE: 0x77F3,
+ 0x90CF: 0x7A4D,
+ 0x90D0: 0x7C4D,
+ 0x90D1: 0x7E3E,
+ 0x90D2: 0x810A,
+ 0x90D3: 0x8CAC,
+ 0x90D4: 0x8D64,
+ 0x90D5: 0x8DE1,
+ 0x90D6: 0x8E5F,
+ 0x90D7: 0x78A9,
+ 0x90D8: 0x5207,
+ 0x90D9: 0x62D9,
+ 0x90DA: 0x63A5,
+ 0x90DB: 0x6442,
+ 0x90DC: 0x6298,
+ 0x90DD: 0x8A2D,
+ 0x90DE: 0x7A83,
+ 0x90DF: 0x7BC0,
+ 0x90E0: 0x8AAC,
+ 0x90E1: 0x96EA,
+ 0x90E2: 0x7D76,
+ 0x90E3: 0x820C,
+ 0x90E4: 0x8749,
+ 0x90E5: 0x4ED9,
+ 0x90E6: 0x5148,
+ 0x90E7: 0x5343,
+ 0x90E8: 0x5360,
+ 0x90E9: 0x5BA3,
+ 0x90EA: 0x5C02,
+ 0x90EB: 0x5C16,
+ 0x90EC: 0x5DDD,
+ 0x90ED: 0x6226,
+ 0x90EE: 0x6247,
+ 0x90EF: 0x64B0,
+ 0x90F0: 0x6813,
+ 0x90F1: 0x6834,
+ 0x90F2: 0x6CC9,
+ 0x90F3: 0x6D45,
+ 0x90F4: 0x6D17,
+ 0x90F5: 0x67D3,
+ 0x90F6: 0x6F5C,
+ 0x90F7: 0x714E,
+ 0x90F8: 0x717D,
+ 0x90F9: 0x65CB,
+ 0x90FA: 0x7A7F,
+ 0x90FB: 0x7BAD,
+ 0x90FC: 0x7DDA,
+ 0x9140: 0x7E4A,
+ 0x9141: 0x7FA8,
+ 0x9142: 0x817A,
+ 0x9143: 0x821B,
+ 0x9144: 0x8239,
+ 0x9145: 0x85A6,
+ 0x9146: 0x8A6E,
+ 0x9147: 0x8CCE,
+ 0x9148: 0x8DF5,
+ 0x9149: 0x9078,
+ 0x914A: 0x9077,
+ 0x914B: 0x92AD,
+ 0x914C: 0x9291,
+ 0x914D: 0x9583,
+ 0x914E: 0x9BAE,
+ 0x914F: 0x524D,
+ 0x9150: 0x5584,
+ 0x9151: 0x6F38,
+ 0x9152: 0x7136,
+ 0x9153: 0x5168,
+ 0x9154: 0x7985,
+ 0x9155: 0x7E55,
+ 0x9156: 0x81B3,
+ 0x9157: 0x7CCE,
+ 0x9158: 0x564C,
+ 0x9159: 0x5851,
+ 0x915A: 0x5CA8,
+ 0x915B: 0x63AA,
+ 0x915C: 0x66FE,
+ 0x915D: 0x66FD,
+ 0x915E: 0x695A,
+ 0x915F: 0x72D9,
+ 0x9160: 0x758F,
+ 0x9161: 0x758E,
+ 0x9162: 0x790E,
+ 0x9163: 0x7956,
+ 0x9164: 0x79DF,
+ 0x9165: 0x7C97,
+ 0x9166: 0x7D20,
+ 0x9167: 0x7D44,
+ 0x9168: 0x8607,
+ 0x9169: 0x8A34,
+ 0x916A: 0x963B,
+ 0x916B: 0x9061,
+ 0x916C: 0x9F20,
+ 0x916D: 0x50E7,
+ 0x916E: 0x5275,
+ 0x916F: 0x53CC,
+ 0x9170: 0x53E2,
+ 0x9171: 0x5009,
+ 0x9172: 0x55AA,
+ 0x9173: 0x58EE,
+ 0x9174: 0x594F,
+ 0x9175: 0x723D,
+ 0x9176: 0x5B8B,
+ 0x9177: 0x5C64,
+ 0x9178: 0x531D,
+ 0x9179: 0x60E3,
+ 0x917A: 0x60F3,
+ 0x917B: 0x635C,
+ 0x917C: 0x6383,
+ 0x917D: 0x633F,
+ 0x917E: 0x63BB,
+ 0x9180: 0x64CD,
+ 0x9181: 0x65E9,
+ 0x9182: 0x66F9,
+ 0x9183: 0x5DE3,
+ 0x9184: 0x69CD,
+ 0x9185: 0x69FD,
+ 0x9186: 0x6F15,
+ 0x9187: 0x71E5,
+ 0x9188: 0x4E89,
+ 0x9189: 0x75E9,
+ 0x918A: 0x76F8,
+ 0x918B: 0x7A93,
+ 0x918C: 0x7CDF,
+ 0x918D: 0x7DCF,
+ 0x918E: 0x7D9C,
+ 0x918F: 0x8061,
+ 0x9190: 0x8349,
+ 0x9191: 0x8358,
+ 0x9192: 0x846C,
+ 0x9193: 0x84BC,
+ 0x9194: 0x85FB,
+ 0x9195: 0x88C5,
+ 0x9196: 0x8D70,
+ 0x9197: 0x9001,
+ 0x9198: 0x906D,
+ 0x9199: 0x9397,
+ 0x919A: 0x971C,
+ 0x919B: 0x9A12,
+ 0x919C: 0x50CF,
+ 0x919D: 0x5897,
+ 0x919E: 0x618E,
+ 0x919F: 0x81D3,
+ 0x91A0: 0x8535,
+ 0x91A1: 0x8D08,
+ 0x91A2: 0x9020,
+ 0x91A3: 0x4FC3,
+ 0x91A4: 0x5074,
+ 0x91A5: 0x5247,
+ 0x91A6: 0x5373,
+ 0x91A7: 0x606F,
+ 0x91A8: 0x6349,
+ 0x91A9: 0x675F,
+ 0x91AA: 0x6E2C,
+ 0x91AB: 0x8DB3,
+ 0x91AC: 0x901F,
+ 0x91AD: 0x4FD7,
+ 0x91AE: 0x5C5E,
+ 0x91AF: 0x8CCA,
+ 0x91B0: 0x65CF,
+ 0x91B1: 0x7D9A,
+ 0x91B2: 0x5352,
+ 0x91B3: 0x8896,
+ 0x91B4: 0x5176,
+ 0x91B5: 0x63C3,
+ 0x91B6: 0x5B58,
+ 0x91B7: 0x5B6B,
+ 0x91B8: 0x5C0A,
+ 0x91B9: 0x640D,
+ 0x91BA: 0x6751,
+ 0x91BB: 0x905C,
+ 0x91BC: 0x4ED6,
+ 0x91BD: 0x591A,
+ 0x91BE: 0x592A,
+ 0x91BF: 0x6C70,
+ 0x91C0: 0x8A51,
+ 0x91C1: 0x553E,
+ 0x91C2: 0x5815,
+ 0x91C3: 0x59A5,
+ 0x91C4: 0x60F0,
+ 0x91C5: 0x6253,
+ 0x91C6: 0x67C1,
+ 0x91C7: 0x8235,
+ 0x91C8: 0x6955,
+ 0x91C9: 0x9640,
+ 0x91CA: 0x99C4,
+ 0x91CB: 0x9A28,
+ 0x91CC: 0x4F53,
+ 0x91CD: 0x5806,
+ 0x91CE: 0x5BFE,
+ 0x91CF: 0x8010,
+ 0x91D0: 0x5CB1,
+ 0x91D1: 0x5E2F,
+ 0x91D2: 0x5F85,
+ 0x91D3: 0x6020,
+ 0x91D4: 0x614B,
+ 0x91D5: 0x6234,
+ 0x91D6: 0x66FF,
+ 0x91D7: 0x6CF0,
+ 0x91D8: 0x6EDE,
+ 0x91D9: 0x80CE,
+ 0x91DA: 0x817F,
+ 0x91DB: 0x82D4,
+ 0x91DC: 0x888B,
+ 0x91DD: 0x8CB8,
+ 0x91DE: 0x9000,
+ 0x91DF: 0x902E,
+ 0x91E0: 0x968A,
+ 0x91E1: 0x9EDB,
+ 0x91E2: 0x9BDB,
+ 0x91E3: 0x4EE3,
+ 0x91E4: 0x53F0,
+ 0x91E5: 0x5927,
+ 0x91E6: 0x7B2C,
+ 0x91E7: 0x918D,
+ 0x91E8: 0x984C,
+ 0x91E9: 0x9DF9,
+ 0x91EA: 0x6EDD,
+ 0x91EB: 0x7027,
+ 0x91EC: 0x5353,
+ 0x91ED: 0x5544,
+ 0x91EE: 0x5B85,
+ 0x91EF: 0x6258,
+ 0x91F0: 0x629E,
+ 0x91F1: 0x62D3,
+ 0x91F2: 0x6CA2,
+ 0x91F3: 0x6FEF,
+ 0x91F4: 0x7422,
+ 0x91F5: 0x8A17,
+ 0x91F6: 0x9438,
+ 0x91F7: 0x6FC1,
+ 0x91F8: 0x8AFE,
+ 0x91F9: 0x8338,
+ 0x91FA: 0x51E7,
+ 0x91FB: 0x86F8,
+ 0x91FC: 0x53EA,
+ 0x9240: 0x53E9,
+ 0x9241: 0x4F46,
+ 0x9242: 0x9054,
+ 0x9243: 0x8FB0,
+ 0x9244: 0x596A,
+ 0x9245: 0x8131,
+ 0x9246: 0x5DFD,
+ 0x9247: 0x7AEA,
+ 0x9248: 0x8FBF,
+ 0x9249: 0x68DA,
+ 0x924A: 0x8C37,
+ 0x924B: 0x72F8,
+ 0x924C: 0x9C48,
+ 0x924D: 0x6A3D,
+ 0x924E: 0x8AB0,
+ 0x924F: 0x4E39,
+ 0x9250: 0x5358,
+ 0x9251: 0x5606,
+ 0x9252: 0x5766,
+ 0x9253: 0x62C5,
+ 0x9254: 0x63A2,
+ 0x9255: 0x65E6,
+ 0x9256: 0x6B4E,
+ 0x9257: 0x6DE1,
+ 0x9258: 0x6E5B,
+ 0x9259: 0x70AD,
+ 0x925A: 0x77ED,
+ 0x925B: 0x7AEF,
+ 0x925C: 0x7BAA,
+ 0x925D: 0x7DBB,
+ 0x925E: 0x803D,
+ 0x925F: 0x80C6,
+ 0x9260: 0x86CB,
+ 0x9261: 0x8A95,
+ 0x9262: 0x935B,
+ 0x9263: 0x56E3,
+ 0x9264: 0x58C7,
+ 0x9265: 0x5F3E,
+ 0x9266: 0x65AD,
+ 0x9267: 0x6696,
+ 0x9268: 0x6A80,
+ 0x9269: 0x6BB5,
+ 0x926A: 0x7537,
+ 0x926B: 0x8AC7,
+ 0x926C: 0x5024,
+ 0x926D: 0x77E5,
+ 0x926E: 0x5730,
+ 0x926F: 0x5F1B,
+ 0x9270: 0x6065,
+ 0x9271: 0x667A,
+ 0x9272: 0x6C60,
+ 0x9273: 0x75F4,
+ 0x9274: 0x7A1A,
+ 0x9275: 0x7F6E,
+ 0x9276: 0x81F4,
+ 0x9277: 0x8718,
+ 0x9278: 0x9045,
+ 0x9279: 0x99B3,
+ 0x927A: 0x7BC9,
+ 0x927B: 0x755C,
+ 0x927C: 0x7AF9,
+ 0x927D: 0x7B51,
+ 0x927E: 0x84C4,
+ 0x9280: 0x9010,
+ 0x9281: 0x79E9,
+ 0x9282: 0x7A92,
+ 0x9283: 0x8336,
+ 0x9284: 0x5AE1,
+ 0x9285: 0x7740,
+ 0x9286: 0x4E2D,
+ 0x9287: 0x4EF2,
+ 0x9288: 0x5B99,
+ 0x9289: 0x5FE0,
+ 0x928A: 0x62BD,
+ 0x928B: 0x663C,
+ 0x928C: 0x67F1,
+ 0x928D: 0x6CE8,
+ 0x928E: 0x866B,
+ 0x928F: 0x8877,
+ 0x9290: 0x8A3B,
+ 0x9291: 0x914E,
+ 0x9292: 0x92F3,
+ 0x9293: 0x99D0,
+ 0x9294: 0x6A17,
+ 0x9295: 0x7026,
+ 0x9296: 0x732A,
+ 0x9297: 0x82E7,
+ 0x9298: 0x8457,
+ 0x9299: 0x8CAF,
+ 0x929A: 0x4E01,
+ 0x929B: 0x5146,
+ 0x929C: 0x51CB,
+ 0x929D: 0x558B,
+ 0x929E: 0x5BF5,
+ 0x929F: 0x5E16,
+ 0x92A0: 0x5E33,
+ 0x92A1: 0x5E81,
+ 0x92A2: 0x5F14,
+ 0x92A3: 0x5F35,
+ 0x92A4: 0x5F6B,
+ 0x92A5: 0x5FB4,
+ 0x92A6: 0x61F2,
+ 0x92A7: 0x6311,
+ 0x92A8: 0x66A2,
+ 0x92A9: 0x671D,
+ 0x92AA: 0x6F6E,
+ 0x92AB: 0x7252,
+ 0x92AC: 0x753A,
+ 0x92AD: 0x773A,
+ 0x92AE: 0x8074,
+ 0x92AF: 0x8139,
+ 0x92B0: 0x8178,
+ 0x92B1: 0x8776,
+ 0x92B2: 0x8ABF,
+ 0x92B3: 0x8ADC,
+ 0x92B4: 0x8D85,
+ 0x92B5: 0x8DF3,
+ 0x92B6: 0x929A,
+ 0x92B7: 0x9577,
+ 0x92B8: 0x9802,
+ 0x92B9: 0x9CE5,
+ 0x92BA: 0x52C5,
+ 0x92BB: 0x6357,
+ 0x92BC: 0x76F4,
+ 0x92BD: 0x6715,
+ 0x92BE: 0x6C88,
+ 0x92BF: 0x73CD,
+ 0x92C0: 0x8CC3,
+ 0x92C1: 0x93AE,
+ 0x92C2: 0x9673,
+ 0x92C3: 0x6D25,
+ 0x92C4: 0x589C,
+ 0x92C5: 0x690E,
+ 0x92C6: 0x69CC,
+ 0x92C7: 0x8FFD,
+ 0x92C8: 0x939A,
+ 0x92C9: 0x75DB,
+ 0x92CA: 0x901A,
+ 0x92CB: 0x585A,
+ 0x92CC: 0x6802,
+ 0x92CD: 0x63B4,
+ 0x92CE: 0x69FB,
+ 0x92CF: 0x4F43,
+ 0x92D0: 0x6F2C,
+ 0x92D1: 0x67D8,
+ 0x92D2: 0x8FBB,
+ 0x92D3: 0x8526,
+ 0x92D4: 0x7DB4,
+ 0x92D5: 0x9354,
+ 0x92D6: 0x693F,
+ 0x92D7: 0x6F70,
+ 0x92D8: 0x576A,
+ 0x92D9: 0x58F7,
+ 0x92DA: 0x5B2C,
+ 0x92DB: 0x7D2C,
+ 0x92DC: 0x722A,
+ 0x92DD: 0x540A,
+ 0x92DE: 0x91E3,
+ 0x92DF: 0x9DB4,
+ 0x92E0: 0x4EAD,
+ 0x92E1: 0x4F4E,
+ 0x92E2: 0x505C,
+ 0x92E3: 0x5075,
+ 0x92E4: 0x5243,
+ 0x92E5: 0x8C9E,
+ 0x92E6: 0x5448,
+ 0x92E7: 0x5824,
+ 0x92E8: 0x5B9A,
+ 0x92E9: 0x5E1D,
+ 0x92EA: 0x5E95,
+ 0x92EB: 0x5EAD,
+ 0x92EC: 0x5EF7,
+ 0x92ED: 0x5F1F,
+ 0x92EE: 0x608C,
+ 0x92EF: 0x62B5,
+ 0x92F0: 0x633A,
+ 0x92F1: 0x63D0,
+ 0x92F2: 0x68AF,
+ 0x92F3: 0x6C40,
+ 0x92F4: 0x7887,
+ 0x92F5: 0x798E,
+ 0x92F6: 0x7A0B,
+ 0x92F7: 0x7DE0,
+ 0x92F8: 0x8247,
+ 0x92F9: 0x8A02,
+ 0x92FA: 0x8AE6,
+ 0x92FB: 0x8E44,
+ 0x92FC: 0x9013,
+ 0x9340: 0x90B8,
+ 0x9341: 0x912D,
+ 0x9342: 0x91D8,
+ 0x9343: 0x9F0E,
+ 0x9344: 0x6CE5,
+ 0x9345: 0x6458,
+ 0x9346: 0x64E2,
+ 0x9347: 0x6575,
+ 0x9348: 0x6EF4,
+ 0x9349: 0x7684,
+ 0x934A: 0x7B1B,
+ 0x934B: 0x9069,
+ 0x934C: 0x93D1,
+ 0x934D: 0x6EBA,
+ 0x934E: 0x54F2,
+ 0x934F: 0x5FB9,
+ 0x9350: 0x64A4,
+ 0x9351: 0x8F4D,
+ 0x9352: 0x8FED,
+ 0x9353: 0x9244,
+ 0x9354: 0x5178,
+ 0x9355: 0x586B,
+ 0x9356: 0x5929,
+ 0x9357: 0x5C55,
+ 0x9358: 0x5E97,
+ 0x9359: 0x6DFB,
+ 0x935A: 0x7E8F,
+ 0x935B: 0x751C,
+ 0x935C: 0x8CBC,
+ 0x935D: 0x8EE2,
+ 0x935E: 0x985B,
+ 0x935F: 0x70B9,
+ 0x9360: 0x4F1D,
+ 0x9361: 0x6BBF,
+ 0x9362: 0x6FB1,
+ 0x9363: 0x7530,
+ 0x9364: 0x96FB,
+ 0x9365: 0x514E,
+ 0x9366: 0x5410,
+ 0x9367: 0x5835,
+ 0x9368: 0x5857,
+ 0x9369: 0x59AC,
+ 0x936A: 0x5C60,
+ 0x936B: 0x5F92,
+ 0x936C: 0x6597,
+ 0x936D: 0x675C,
+ 0x936E: 0x6E21,
+ 0x936F: 0x767B,
+ 0x9370: 0x83DF,
+ 0x9371: 0x8CED,
+ 0x9372: 0x9014,
+ 0x9373: 0x90FD,
+ 0x9374: 0x934D,
+ 0x9375: 0x7825,
+ 0x9376: 0x783A,
+ 0x9377: 0x52AA,
+ 0x9378: 0x5EA6,
+ 0x9379: 0x571F,
+ 0x937A: 0x5974,
+ 0x937B: 0x6012,
+ 0x937C: 0x5012,
+ 0x937D: 0x515A,
+ 0x937E: 0x51AC,
+ 0x9380: 0x51CD,
+ 0x9381: 0x5200,
+ 0x9382: 0x5510,
+ 0x9383: 0x5854,
+ 0x9384: 0x5858,
+ 0x9385: 0x5957,
+ 0x9386: 0x5B95,
+ 0x9387: 0x5CF6,
+ 0x9388: 0x5D8B,
+ 0x9389: 0x60BC,
+ 0x938A: 0x6295,
+ 0x938B: 0x642D,
+ 0x938C: 0x6771,
+ 0x938D: 0x6843,
+ 0x938E: 0x68BC,
+ 0x938F: 0x68DF,
+ 0x9390: 0x76D7,
+ 0x9391: 0x6DD8,
+ 0x9392: 0x6E6F,
+ 0x9393: 0x6D9B,
+ 0x9394: 0x706F,
+ 0x9395: 0x71C8,
+ 0x9396: 0x5F53,
+ 0x9397: 0x75D8,
+ 0x9398: 0x7977,
+ 0x9399: 0x7B49,
+ 0x939A: 0x7B54,
+ 0x939B: 0x7B52,
+ 0x939C: 0x7CD6,
+ 0x939D: 0x7D71,
+ 0x939E: 0x5230,
+ 0x939F: 0x8463,
+ 0x93A0: 0x8569,
+ 0x93A1: 0x85E4,
+ 0x93A2: 0x8A0E,
+ 0x93A3: 0x8B04,
+ 0x93A4: 0x8C46,
+ 0x93A5: 0x8E0F,
+ 0x93A6: 0x9003,
+ 0x93A7: 0x900F,
+ 0x93A8: 0x9419,
+ 0x93A9: 0x9676,
+ 0x93AA: 0x982D,
+ 0x93AB: 0x9A30,
+ 0x93AC: 0x95D8,
+ 0x93AD: 0x50CD,
+ 0x93AE: 0x52D5,
+ 0x93AF: 0x540C,
+ 0x93B0: 0x5802,
+ 0x93B1: 0x5C0E,
+ 0x93B2: 0x61A7,
+ 0x93B3: 0x649E,
+ 0x93B4: 0x6D1E,
+ 0x93B5: 0x77B3,
+ 0x93B6: 0x7AE5,
+ 0x93B7: 0x80F4,
+ 0x93B8: 0x8404,
+ 0x93B9: 0x9053,
+ 0x93BA: 0x9285,
+ 0x93BB: 0x5CE0,
+ 0x93BC: 0x9D07,
+ 0x93BD: 0x533F,
+ 0x93BE: 0x5F97,
+ 0x93BF: 0x5FB3,
+ 0x93C0: 0x6D9C,
+ 0x93C1: 0x7279,
+ 0x93C2: 0x7763,
+ 0x93C3: 0x79BF,
+ 0x93C4: 0x7BE4,
+ 0x93C5: 0x6BD2,
+ 0x93C6: 0x72EC,
+ 0x93C7: 0x8AAD,
+ 0x93C8: 0x6803,
+ 0x93C9: 0x6A61,
+ 0x93CA: 0x51F8,
+ 0x93CB: 0x7A81,
+ 0x93CC: 0x6934,
+ 0x93CD: 0x5C4A,
+ 0x93CE: 0x9CF6,
+ 0x93CF: 0x82EB,
+ 0x93D0: 0x5BC5,
+ 0x93D1: 0x9149,
+ 0x93D2: 0x701E,
+ 0x93D3: 0x5678,
+ 0x93D4: 0x5C6F,
+ 0x93D5: 0x60C7,
+ 0x93D6: 0x6566,
+ 0x93D7: 0x6C8C,
+ 0x93D8: 0x8C5A,
+ 0x93D9: 0x9041,
+ 0x93DA: 0x9813,
+ 0x93DB: 0x5451,
+ 0x93DC: 0x66C7,
+ 0x93DD: 0x920D,
+ 0x93DE: 0x5948,
+ 0x93DF: 0x90A3,
+ 0x93E0: 0x5185,
+ 0x93E1: 0x4E4D,
+ 0x93E2: 0x51EA,
+ 0x93E3: 0x8599,
+ 0x93E4: 0x8B0E,
+ 0x93E5: 0x7058,
+ 0x93E6: 0x637A,
+ 0x93E7: 0x934B,
+ 0x93E8: 0x6962,
+ 0x93E9: 0x99B4,
+ 0x93EA: 0x7E04,
+ 0x93EB: 0x7577,
+ 0x93EC: 0x5357,
+ 0x93ED: 0x6960,
+ 0x93EE: 0x8EDF,
+ 0x93EF: 0x96E3,
+ 0x93F0: 0x6C5D,
+ 0x93F1: 0x4E8C,
+ 0x93F2: 0x5C3C,
+ 0x93F3: 0x5F10,
+ 0x93F4: 0x8FE9,
+ 0x93F5: 0x5302,
+ 0x93F6: 0x8CD1,
+ 0x93F7: 0x8089,
+ 0x93F8: 0x8679,
+ 0x93F9: 0x5EFF,
+ 0x93FA: 0x65E5,
+ 0x93FB: 0x4E73,
+ 0x93FC: 0x5165,
+ 0x9440: 0x5982,
+ 0x9441: 0x5C3F,
+ 0x9442: 0x97EE,
+ 0x9443: 0x4EFB,
+ 0x9444: 0x598A,
+ 0x9445: 0x5FCD,
+ 0x9446: 0x8A8D,
+ 0x9447: 0x6FE1,
+ 0x9448: 0x79B0,
+ 0x9449: 0x7962,
+ 0x944A: 0x5BE7,
+ 0x944B: 0x8471,
+ 0x944C: 0x732B,
+ 0x944D: 0x71B1,
+ 0x944E: 0x5E74,
+ 0x944F: 0x5FF5,
+ 0x9450: 0x637B,
+ 0x9451: 0x649A,
+ 0x9452: 0x71C3,
+ 0x9453: 0x7C98,
+ 0x9454: 0x4E43,
+ 0x9455: 0x5EFC,
+ 0x9456: 0x4E4B,
+ 0x9457: 0x57DC,
+ 0x9458: 0x56A2,
+ 0x9459: 0x60A9,
+ 0x945A: 0x6FC3,
+ 0x945B: 0x7D0D,
+ 0x945C: 0x80FD,
+ 0x945D: 0x8133,
+ 0x945E: 0x81BF,
+ 0x945F: 0x8FB2,
+ 0x9460: 0x8997,
+ 0x9461: 0x86A4,
+ 0x9462: 0x5DF4,
+ 0x9463: 0x628A,
+ 0x9464: 0x64AD,
+ 0x9465: 0x8987,
+ 0x9466: 0x6777,
+ 0x9467: 0x6CE2,
+ 0x9468: 0x6D3E,
+ 0x9469: 0x7436,
+ 0x946A: 0x7834,
+ 0x946B: 0x5A46,
+ 0x946C: 0x7F75,
+ 0x946D: 0x82AD,
+ 0x946E: 0x99AC,
+ 0x946F: 0x4FF3,
+ 0x9470: 0x5EC3,
+ 0x9471: 0x62DD,
+ 0x9472: 0x6392,
+ 0x9473: 0x6557,
+ 0x9474: 0x676F,
+ 0x9475: 0x76C3,
+ 0x9476: 0x724C,
+ 0x9477: 0x80CC,
+ 0x9478: 0x80BA,
+ 0x9479: 0x8F29,
+ 0x947A: 0x914D,
+ 0x947B: 0x500D,
+ 0x947C: 0x57F9,
+ 0x947D: 0x5A92,
+ 0x947E: 0x6885,
+ 0x9480: 0x6973,
+ 0x9481: 0x7164,
+ 0x9482: 0x72FD,
+ 0x9483: 0x8CB7,
+ 0x9484: 0x58F2,
+ 0x9485: 0x8CE0,
+ 0x9486: 0x966A,
+ 0x9487: 0x9019,
+ 0x9488: 0x877F,
+ 0x9489: 0x79E4,
+ 0x948A: 0x77E7,
+ 0x948B: 0x8429,
+ 0x948C: 0x4F2F,
+ 0x948D: 0x5265,
+ 0x948E: 0x535A,
+ 0x948F: 0x62CD,
+ 0x9490: 0x67CF,
+ 0x9491: 0x6CCA,
+ 0x9492: 0x767D,
+ 0x9493: 0x7B94,
+ 0x9494: 0x7C95,
+ 0x9495: 0x8236,
+ 0x9496: 0x8584,
+ 0x9497: 0x8FEB,
+ 0x9498: 0x66DD,
+ 0x9499: 0x6F20,
+ 0x949A: 0x7206,
+ 0x949B: 0x7E1B,
+ 0x949C: 0x83AB,
+ 0x949D: 0x99C1,
+ 0x949E: 0x9EA6,
+ 0x949F: 0x51FD,
+ 0x94A0: 0x7BB1,
+ 0x94A1: 0x7872,
+ 0x94A2: 0x7BB8,
+ 0x94A3: 0x8087,
+ 0x94A4: 0x7B48,
+ 0x94A5: 0x6AE8,
+ 0x94A6: 0x5E61,
+ 0x94A7: 0x808C,
+ 0x94A8: 0x7551,
+ 0x94A9: 0x7560,
+ 0x94AA: 0x516B,
+ 0x94AB: 0x9262,
+ 0x94AC: 0x6E8C,
+ 0x94AD: 0x767A,
+ 0x94AE: 0x9197,
+ 0x94AF: 0x9AEA,
+ 0x94B0: 0x4F10,
+ 0x94B1: 0x7F70,
+ 0x94B2: 0x629C,
+ 0x94B3: 0x7B4F,
+ 0x94B4: 0x95A5,
+ 0x94B5: 0x9CE9,
+ 0x94B6: 0x567A,
+ 0x94B7: 0x5859,
+ 0x94B8: 0x86E4,
+ 0x94B9: 0x96BC,
+ 0x94BA: 0x4F34,
+ 0x94BB: 0x5224,
+ 0x94BC: 0x534A,
+ 0x94BD: 0x53CD,
+ 0x94BE: 0x53DB,
+ 0x94BF: 0x5E06,
+ 0x94C0: 0x642C,
+ 0x94C1: 0x6591,
+ 0x94C2: 0x677F,
+ 0x94C3: 0x6C3E,
+ 0x94C4: 0x6C4E,
+ 0x94C5: 0x7248,
+ 0x94C6: 0x72AF,
+ 0x94C7: 0x73ED,
+ 0x94C8: 0x7554,
+ 0x94C9: 0x7E41,
+ 0x94CA: 0x822C,
+ 0x94CB: 0x85E9,
+ 0x94CC: 0x8CA9,
+ 0x94CD: 0x7BC4,
+ 0x94CE: 0x91C6,
+ 0x94CF: 0x7169,
+ 0x94D0: 0x9812,
+ 0x94D1: 0x98EF,
+ 0x94D2: 0x633D,
+ 0x94D3: 0x6669,
+ 0x94D4: 0x756A,
+ 0x94D5: 0x76E4,
+ 0x94D6: 0x78D0,
+ 0x94D7: 0x8543,
+ 0x94D8: 0x86EE,
+ 0x94D9: 0x532A,
+ 0x94DA: 0x5351,
+ 0x94DB: 0x5426,
+ 0x94DC: 0x5983,
+ 0x94DD: 0x5E87,
+ 0x94DE: 0x5F7C,
+ 0x94DF: 0x60B2,
+ 0x94E0: 0x6249,
+ 0x94E1: 0x6279,
+ 0x94E2: 0x62AB,
+ 0x94E3: 0x6590,
+ 0x94E4: 0x6BD4,
+ 0x94E5: 0x6CCC,
+ 0x94E6: 0x75B2,
+ 0x94E7: 0x76AE,
+ 0x94E8: 0x7891,
+ 0x94E9: 0x79D8,
+ 0x94EA: 0x7DCB,
+ 0x94EB: 0x7F77,
+ 0x94EC: 0x80A5,
+ 0x94ED: 0x88AB,
+ 0x94EE: 0x8AB9,
+ 0x94EF: 0x8CBB,
+ 0x94F0: 0x907F,
+ 0x94F1: 0x975E,
+ 0x94F2: 0x98DB,
+ 0x94F3: 0x6A0B,
+ 0x94F4: 0x7C38,
+ 0x94F5: 0x5099,
+ 0x94F6: 0x5C3E,
+ 0x94F7: 0x5FAE,
+ 0x94F8: 0x6787,
+ 0x94F9: 0x6BD8,
+ 0x94FA: 0x7435,
+ 0x94FB: 0x7709,
+ 0x94FC: 0x7F8E,
+ 0x9540: 0x9F3B,
+ 0x9541: 0x67CA,
+ 0x9542: 0x7A17,
+ 0x9543: 0x5339,
+ 0x9544: 0x758B,
+ 0x9545: 0x9AED,
+ 0x9546: 0x5F66,
+ 0x9547: 0x819D,
+ 0x9548: 0x83F1,
+ 0x9549: 0x8098,
+ 0x954A: 0x5F3C,
+ 0x954B: 0x5FC5,
+ 0x954C: 0x7562,
+ 0x954D: 0x7B46,
+ 0x954E: 0x903C,
+ 0x954F: 0x6867,
+ 0x9550: 0x59EB,
+ 0x9551: 0x5A9B,
+ 0x9552: 0x7D10,
+ 0x9553: 0x767E,
+ 0x9554: 0x8B2C,
+ 0x9555: 0x4FF5,
+ 0x9556: 0x5F6A,
+ 0x9557: 0x6A19,
+ 0x9558: 0x6C37,
+ 0x9559: 0x6F02,
+ 0x955A: 0x74E2,
+ 0x955B: 0x7968,
+ 0x955C: 0x8868,
+ 0x955D: 0x8A55,
+ 0x955E: 0x8C79,
+ 0x955F: 0x5EDF,
+ 0x9560: 0x63CF,
+ 0x9561: 0x75C5,
+ 0x9562: 0x79D2,
+ 0x9563: 0x82D7,
+ 0x9564: 0x9328,
+ 0x9565: 0x92F2,
+ 0x9566: 0x849C,
+ 0x9567: 0x86ED,
+ 0x9568: 0x9C2D,
+ 0x9569: 0x54C1,
+ 0x956A: 0x5F6C,
+ 0x956B: 0x658C,
+ 0x956C: 0x6D5C,
+ 0x956D: 0x7015,
+ 0x956E: 0x8CA7,
+ 0x956F: 0x8CD3,
+ 0x9570: 0x983B,
+ 0x9571: 0x654F,
+ 0x9572: 0x74F6,
+ 0x9573: 0x4E0D,
+ 0x9574: 0x4ED8,
+ 0x9575: 0x57E0,
+ 0x9576: 0x592B,
+ 0x9577: 0x5A66,
+ 0x9578: 0x5BCC,
+ 0x9579: 0x51A8,
+ 0x957A: 0x5E03,
+ 0x957B: 0x5E9C,
+ 0x957C: 0x6016,
+ 0x957D: 0x6276,
+ 0x957E: 0x6577,
+ 0x9580: 0x65A7,
+ 0x9581: 0x666E,
+ 0x9582: 0x6D6E,
+ 0x9583: 0x7236,
+ 0x9584: 0x7B26,
+ 0x9585: 0x8150,
+ 0x9586: 0x819A,
+ 0x9587: 0x8299,
+ 0x9588: 0x8B5C,
+ 0x9589: 0x8CA0,
+ 0x958A: 0x8CE6,
+ 0x958B: 0x8D74,
+ 0x958C: 0x961C,
+ 0x958D: 0x9644,
+ 0x958E: 0x4FAE,
+ 0x958F: 0x64AB,
+ 0x9590: 0x6B66,
+ 0x9591: 0x821E,
+ 0x9592: 0x8461,
+ 0x9593: 0x856A,
+ 0x9594: 0x90E8,
+ 0x9595: 0x5C01,
+ 0x9596: 0x6953,
+ 0x9597: 0x98A8,
+ 0x9598: 0x847A,
+ 0x9599: 0x8557,
+ 0x959A: 0x4F0F,
+ 0x959B: 0x526F,
+ 0x959C: 0x5FA9,
+ 0x959D: 0x5E45,
+ 0x959E: 0x670D,
+ 0x959F: 0x798F,
+ 0x95A0: 0x8179,
+ 0x95A1: 0x8907,
+ 0x95A2: 0x8986,
+ 0x95A3: 0x6DF5,
+ 0x95A4: 0x5F17,
+ 0x95A5: 0x6255,
+ 0x95A6: 0x6CB8,
+ 0x95A7: 0x4ECF,
+ 0x95A8: 0x7269,
+ 0x95A9: 0x9B92,
+ 0x95AA: 0x5206,
+ 0x95AB: 0x543B,
+ 0x95AC: 0x5674,
+ 0x95AD: 0x58B3,
+ 0x95AE: 0x61A4,
+ 0x95AF: 0x626E,
+ 0x95B0: 0x711A,
+ 0x95B1: 0x596E,
+ 0x95B2: 0x7C89,
+ 0x95B3: 0x7CDE,
+ 0x95B4: 0x7D1B,
+ 0x95B5: 0x96F0,
+ 0x95B6: 0x6587,
+ 0x95B7: 0x805E,
+ 0x95B8: 0x4E19,
+ 0x95B9: 0x4F75,
+ 0x95BA: 0x5175,
+ 0x95BB: 0x5840,
+ 0x95BC: 0x5E63,
+ 0x95BD: 0x5E73,
+ 0x95BE: 0x5F0A,
+ 0x95BF: 0x67C4,
+ 0x95C0: 0x4E26,
+ 0x95C1: 0x853D,
+ 0x95C2: 0x9589,
+ 0x95C3: 0x965B,
+ 0x95C4: 0x7C73,
+ 0x95C5: 0x9801,
+ 0x95C6: 0x50FB,
+ 0x95C7: 0x58C1,
+ 0x95C8: 0x7656,
+ 0x95C9: 0x78A7,
+ 0x95CA: 0x5225,
+ 0x95CB: 0x77A5,
+ 0x95CC: 0x8511,
+ 0x95CD: 0x7B86,
+ 0x95CE: 0x504F,
+ 0x95CF: 0x5909,
+ 0x95D0: 0x7247,
+ 0x95D1: 0x7BC7,
+ 0x95D2: 0x7DE8,
+ 0x95D3: 0x8FBA,
+ 0x95D4: 0x8FD4,
+ 0x95D5: 0x904D,
+ 0x95D6: 0x4FBF,
+ 0x95D7: 0x52C9,
+ 0x95D8: 0x5A29,
+ 0x95D9: 0x5F01,
+ 0x95DA: 0x97AD,
+ 0x95DB: 0x4FDD,
+ 0x95DC: 0x8217,
+ 0x95DD: 0x92EA,
+ 0x95DE: 0x5703,
+ 0x95DF: 0x6355,
+ 0x95E0: 0x6B69,
+ 0x95E1: 0x752B,
+ 0x95E2: 0x88DC,
+ 0x95E3: 0x8F14,
+ 0x95E4: 0x7A42,
+ 0x95E5: 0x52DF,
+ 0x95E6: 0x5893,
+ 0x95E7: 0x6155,
+ 0x95E8: 0x620A,
+ 0x95E9: 0x66AE,
+ 0x95EA: 0x6BCD,
+ 0x95EB: 0x7C3F,
+ 0x95EC: 0x83E9,
+ 0x95ED: 0x5023,
+ 0x95EE: 0x4FF8,
+ 0x95EF: 0x5305,
+ 0x95F0: 0x5446,
+ 0x95F1: 0x5831,
+ 0x95F2: 0x5949,
+ 0x95F3: 0x5B9D,
+ 0x95F4: 0x5CF0,
+ 0x95F5: 0x5CEF,
+ 0x95F6: 0x5D29,
+ 0x95F7: 0x5E96,
+ 0x95F8: 0x62B1,
+ 0x95F9: 0x6367,
+ 0x95FA: 0x653E,
+ 0x95FB: 0x65B9,
+ 0x95FC: 0x670B,
+ 0x9640: 0x6CD5,
+ 0x9641: 0x6CE1,
+ 0x9642: 0x70F9,
+ 0x9643: 0x7832,
+ 0x9644: 0x7E2B,
+ 0x9645: 0x80DE,
+ 0x9646: 0x82B3,
+ 0x9647: 0x840C,
+ 0x9648: 0x84EC,
+ 0x9649: 0x8702,
+ 0x964A: 0x8912,
+ 0x964B: 0x8A2A,
+ 0x964C: 0x8C4A,
+ 0x964D: 0x90A6,
+ 0x964E: 0x92D2,
+ 0x964F: 0x98FD,
+ 0x9650: 0x9CF3,
+ 0x9651: 0x9D6C,
+ 0x9652: 0x4E4F,
+ 0x9653: 0x4EA1,
+ 0x9654: 0x508D,
+ 0x9655: 0x5256,
+ 0x9656: 0x574A,
+ 0x9657: 0x59A8,
+ 0x9658: 0x5E3D,
+ 0x9659: 0x5FD8,
+ 0x965A: 0x5FD9,
+ 0x965B: 0x623F,
+ 0x965C: 0x66B4,
+ 0x965D: 0x671B,
+ 0x965E: 0x67D0,
+ 0x965F: 0x68D2,
+ 0x9660: 0x5192,
+ 0x9661: 0x7D21,
+ 0x9662: 0x80AA,
+ 0x9663: 0x81A8,
+ 0x9664: 0x8B00,
+ 0x9665: 0x8C8C,
+ 0x9666: 0x8CBF,
+ 0x9667: 0x927E,
+ 0x9668: 0x9632,
+ 0x9669: 0x5420,
+ 0x966A: 0x982C,
+ 0x966B: 0x5317,
+ 0x966C: 0x50D5,
+ 0x966D: 0x535C,
+ 0x966E: 0x58A8,
+ 0x966F: 0x64B2,
+ 0x9670: 0x6734,
+ 0x9671: 0x7267,
+ 0x9672: 0x7766,
+ 0x9673: 0x7A46,
+ 0x9674: 0x91E6,
+ 0x9675: 0x52C3,
+ 0x9676: 0x6CA1,
+ 0x9677: 0x6B86,
+ 0x9678: 0x5800,
+ 0x9679: 0x5E4C,
+ 0x967A: 0x5954,
+ 0x967B: 0x672C,
+ 0x967C: 0x7FFB,
+ 0x967D: 0x51E1,
+ 0x967E: 0x76C6,
+ 0x9680: 0x6469,
+ 0x9681: 0x78E8,
+ 0x9682: 0x9B54,
+ 0x9683: 0x9EBB,
+ 0x9684: 0x57CB,
+ 0x9685: 0x59B9,
+ 0x9686: 0x6627,
+ 0x9687: 0x679A,
+ 0x9688: 0x6BCE,
+ 0x9689: 0x54E9,
+ 0x968A: 0x69D9,
+ 0x968B: 0x5E55,
+ 0x968C: 0x819C,
+ 0x968D: 0x6795,
+ 0x968E: 0x9BAA,
+ 0x968F: 0x67FE,
+ 0x9690: 0x9C52,
+ 0x9691: 0x685D,
+ 0x9692: 0x4EA6,
+ 0x9693: 0x4FE3,
+ 0x9694: 0x53C8,
+ 0x9695: 0x62B9,
+ 0x9696: 0x672B,
+ 0x9697: 0x6CAB,
+ 0x9698: 0x8FC4,
+ 0x9699: 0x4FAD,
+ 0x969A: 0x7E6D,
+ 0x969B: 0x9EBF,
+ 0x969C: 0x4E07,
+ 0x969D: 0x6162,
+ 0x969E: 0x6E80,
+ 0x969F: 0x6F2B,
+ 0x96A0: 0x8513,
+ 0x96A1: 0x5473,
+ 0x96A2: 0x672A,
+ 0x96A3: 0x9B45,
+ 0x96A4: 0x5DF3,
+ 0x96A5: 0x7B95,
+ 0x96A6: 0x5CAC,
+ 0x96A7: 0x5BC6,
+ 0x96A8: 0x871C,
+ 0x96A9: 0x6E4A,
+ 0x96AA: 0x84D1,
+ 0x96AB: 0x7A14,
+ 0x96AC: 0x8108,
+ 0x96AD: 0x5999,
+ 0x96AE: 0x7C8D,
+ 0x96AF: 0x6C11,
+ 0x96B0: 0x7720,
+ 0x96B1: 0x52D9,
+ 0x96B2: 0x5922,
+ 0x96B3: 0x7121,
+ 0x96B4: 0x725F,
+ 0x96B5: 0x77DB,
+ 0x96B6: 0x9727,
+ 0x96B7: 0x9D61,
+ 0x96B8: 0x690B,
+ 0x96B9: 0x5A7F,
+ 0x96BA: 0x5A18,
+ 0x96BB: 0x51A5,
+ 0x96BC: 0x540D,
+ 0x96BD: 0x547D,
+ 0x96BE: 0x660E,
+ 0x96BF: 0x76DF,
+ 0x96C0: 0x8FF7,
+ 0x96C1: 0x9298,
+ 0x96C2: 0x9CF4,
+ 0x96C3: 0x59EA,
+ 0x96C4: 0x725D,
+ 0x96C5: 0x6EC5,
+ 0x96C6: 0x514D,
+ 0x96C7: 0x68C9,
+ 0x96C8: 0x7DBF,
+ 0x96C9: 0x7DEC,
+ 0x96CA: 0x9762,
+ 0x96CB: 0x9EBA,
+ 0x96CC: 0x6478,
+ 0x96CD: 0x6A21,
+ 0x96CE: 0x8302,
+ 0x96CF: 0x5984,
+ 0x96D0: 0x5B5F,
+ 0x96D1: 0x6BDB,
+ 0x96D2: 0x731B,
+ 0x96D3: 0x76F2,
+ 0x96D4: 0x7DB2,
+ 0x96D5: 0x8017,
+ 0x96D6: 0x8499,
+ 0x96D7: 0x5132,
+ 0x96D8: 0x6728,
+ 0x96D9: 0x9ED9,
+ 0x96DA: 0x76EE,
+ 0x96DB: 0x6762,
+ 0x96DC: 0x52FF,
+ 0x96DD: 0x9905,
+ 0x96DE: 0x5C24,
+ 0x96DF: 0x623B,
+ 0x96E0: 0x7C7E,
+ 0x96E1: 0x8CB0,
+ 0x96E2: 0x554F,
+ 0x96E3: 0x60B6,
+ 0x96E4: 0x7D0B,
+ 0x96E5: 0x9580,
+ 0x96E6: 0x5301,
+ 0x96E7: 0x4E5F,
+ 0x96E8: 0x51B6,
+ 0x96E9: 0x591C,
+ 0x96EA: 0x723A,
+ 0x96EB: 0x8036,
+ 0x96EC: 0x91CE,
+ 0x96ED: 0x5F25,
+ 0x96EE: 0x77E2,
+ 0x96EF: 0x5384,
+ 0x96F0: 0x5F79,
+ 0x96F1: 0x7D04,
+ 0x96F2: 0x85AC,
+ 0x96F3: 0x8A33,
+ 0x96F4: 0x8E8D,
+ 0x96F5: 0x9756,
+ 0x96F6: 0x67F3,
+ 0x96F7: 0x85AE,
+ 0x96F8: 0x9453,
+ 0x96F9: 0x6109,
+ 0x96FA: 0x6108,
+ 0x96FB: 0x6CB9,
+ 0x96FC: 0x7652,
+ 0x9740: 0x8AED,
+ 0x9741: 0x8F38,
+ 0x9742: 0x552F,
+ 0x9743: 0x4F51,
+ 0x9744: 0x512A,
+ 0x9745: 0x52C7,
+ 0x9746: 0x53CB,
+ 0x9747: 0x5BA5,
+ 0x9748: 0x5E7D,
+ 0x9749: 0x60A0,
+ 0x974A: 0x6182,
+ 0x974B: 0x63D6,
+ 0x974C: 0x6709,
+ 0x974D: 0x67DA,
+ 0x974E: 0x6E67,
+ 0x974F: 0x6D8C,
+ 0x9750: 0x7336,
+ 0x9751: 0x7337,
+ 0x9752: 0x7531,
+ 0x9753: 0x7950,
+ 0x9754: 0x88D5,
+ 0x9755: 0x8A98,
+ 0x9756: 0x904A,
+ 0x9757: 0x9091,
+ 0x9758: 0x90F5,
+ 0x9759: 0x96C4,
+ 0x975A: 0x878D,
+ 0x975B: 0x5915,
+ 0x975C: 0x4E88,
+ 0x975D: 0x4F59,
+ 0x975E: 0x4E0E,
+ 0x975F: 0x8A89,
+ 0x9760: 0x8F3F,
+ 0x9761: 0x9810,
+ 0x9762: 0x50AD,
+ 0x9763: 0x5E7C,
+ 0x9764: 0x5996,
+ 0x9765: 0x5BB9,
+ 0x9766: 0x5EB8,
+ 0x9767: 0x63DA,
+ 0x9768: 0x63FA,
+ 0x9769: 0x64C1,
+ 0x976A: 0x66DC,
+ 0x976B: 0x694A,
+ 0x976C: 0x69D8,
+ 0x976D: 0x6D0B,
+ 0x976E: 0x6EB6,
+ 0x976F: 0x7194,
+ 0x9770: 0x7528,
+ 0x9771: 0x7AAF,
+ 0x9772: 0x7F8A,
+ 0x9773: 0x8000,
+ 0x9774: 0x8449,
+ 0x9775: 0x84C9,
+ 0x9776: 0x8981,
+ 0x9777: 0x8B21,
+ 0x9778: 0x8E0A,
+ 0x9779: 0x9065,
+ 0x977A: 0x967D,
+ 0x977B: 0x990A,
+ 0x977C: 0x617E,
+ 0x977D: 0x6291,
+ 0x977E: 0x6B32,
+ 0x9780: 0x6C83,
+ 0x9781: 0x6D74,
+ 0x9782: 0x7FCC,
+ 0x9783: 0x7FFC,
+ 0x9784: 0x6DC0,
+ 0x9785: 0x7F85,
+ 0x9786: 0x87BA,
+ 0x9787: 0x88F8,
+ 0x9788: 0x6765,
+ 0x9789: 0x83B1,
+ 0x978A: 0x983C,
+ 0x978B: 0x96F7,
+ 0x978C: 0x6D1B,
+ 0x978D: 0x7D61,
+ 0x978E: 0x843D,
+ 0x978F: 0x916A,
+ 0x9790: 0x4E71,
+ 0x9791: 0x5375,
+ 0x9792: 0x5D50,
+ 0x9793: 0x6B04,
+ 0x9794: 0x6FEB,
+ 0x9795: 0x85CD,
+ 0x9796: 0x862D,
+ 0x9797: 0x89A7,
+ 0x9798: 0x5229,
+ 0x9799: 0x540F,
+ 0x979A: 0x5C65,
+ 0x979B: 0x674E,
+ 0x979C: 0x68A8,
+ 0x979D: 0x7406,
+ 0x979E: 0x7483,
+ 0x979F: 0x75E2,
+ 0x97A0: 0x88CF,
+ 0x97A1: 0x88E1,
+ 0x97A2: 0x91CC,
+ 0x97A3: 0x96E2,
+ 0x97A4: 0x9678,
+ 0x97A5: 0x5F8B,
+ 0x97A6: 0x7387,
+ 0x97A7: 0x7ACB,
+ 0x97A8: 0x844E,
+ 0x97A9: 0x63A0,
+ 0x97AA: 0x7565,
+ 0x97AB: 0x5289,
+ 0x97AC: 0x6D41,
+ 0x97AD: 0x6E9C,
+ 0x97AE: 0x7409,
+ 0x97AF: 0x7559,
+ 0x97B0: 0x786B,
+ 0x97B1: 0x7C92,
+ 0x97B2: 0x9686,
+ 0x97B3: 0x7ADC,
+ 0x97B4: 0x9F8D,
+ 0x97B5: 0x4FB6,
+ 0x97B6: 0x616E,
+ 0x97B7: 0x65C5,
+ 0x97B8: 0x865C,
+ 0x97B9: 0x4E86,
+ 0x97BA: 0x4EAE,
+ 0x97BB: 0x50DA,
+ 0x97BC: 0x4E21,
+ 0x97BD: 0x51CC,
+ 0x97BE: 0x5BEE,
+ 0x97BF: 0x6599,
+ 0x97C0: 0x6881,
+ 0x97C1: 0x6DBC,
+ 0x97C2: 0x731F,
+ 0x97C3: 0x7642,
+ 0x97C4: 0x77AD,
+ 0x97C5: 0x7A1C,
+ 0x97C6: 0x7CE7,
+ 0x97C7: 0x826F,
+ 0x97C8: 0x8AD2,
+ 0x97C9: 0x907C,
+ 0x97CA: 0x91CF,
+ 0x97CB: 0x9675,
+ 0x97CC: 0x9818,
+ 0x97CD: 0x529B,
+ 0x97CE: 0x7DD1,
+ 0x97CF: 0x502B,
+ 0x97D0: 0x5398,
+ 0x97D1: 0x6797,
+ 0x97D2: 0x6DCB,
+ 0x97D3: 0x71D0,
+ 0x97D4: 0x7433,
+ 0x97D5: 0x81E8,
+ 0x97D6: 0x8F2A,
+ 0x97D7: 0x96A3,
+ 0x97D8: 0x9C57,
+ 0x97D9: 0x9E9F,
+ 0x97DA: 0x7460,
+ 0x97DB: 0x5841,
+ 0x97DC: 0x6D99,
+ 0x97DD: 0x7D2F,
+ 0x97DE: 0x985E,
+ 0x97DF: 0x4EE4,
+ 0x97E0: 0x4F36,
+ 0x97E1: 0x4F8B,
+ 0x97E2: 0x51B7,
+ 0x97E3: 0x52B1,
+ 0x97E4: 0x5DBA,
+ 0x97E5: 0x601C,
+ 0x97E6: 0x73B2,
+ 0x97E7: 0x793C,
+ 0x97E8: 0x82D3,
+ 0x97E9: 0x9234,
+ 0x97EA: 0x96B7,
+ 0x97EB: 0x96F6,
+ 0x97EC: 0x970A,
+ 0x97ED: 0x9E97,
+ 0x97EE: 0x9F62,
+ 0x97EF: 0x66A6,
+ 0x97F0: 0x6B74,
+ 0x97F1: 0x5217,
+ 0x97F2: 0x52A3,
+ 0x97F3: 0x70C8,
+ 0x97F4: 0x88C2,
+ 0x97F5: 0x5EC9,
+ 0x97F6: 0x604B,
+ 0x97F7: 0x6190,
+ 0x97F8: 0x6F23,
+ 0x97F9: 0x7149,
+ 0x97FA: 0x7C3E,
+ 0x97FB: 0x7DF4,
+ 0x97FC: 0x806F,
+ 0x9840: 0x84EE,
+ 0x9841: 0x9023,
+ 0x9842: 0x932C,
+ 0x9843: 0x5442,
+ 0x9844: 0x9B6F,
+ 0x9845: 0x6AD3,
+ 0x9846: 0x7089,
+ 0x9847: 0x8CC2,
+ 0x9848: 0x8DEF,
+ 0x9849: 0x9732,
+ 0x984A: 0x52B4,
+ 0x984B: 0x5A41,
+ 0x984C: 0x5ECA,
+ 0x984D: 0x5F04,
+ 0x984E: 0x6717,
+ 0x984F: 0x697C,
+ 0x9850: 0x6994,
+ 0x9851: 0x6D6A,
+ 0x9852: 0x6F0F,
+ 0x9853: 0x7262,
+ 0x9854: 0x72FC,
+ 0x9855: 0x7BED,
+ 0x9856: 0x8001,
+ 0x9857: 0x807E,
+ 0x9858: 0x874B,
+ 0x9859: 0x90CE,
+ 0x985A: 0x516D,
+ 0x985B: 0x9E93,
+ 0x985C: 0x7984,
+ 0x985D: 0x808B,
+ 0x985E: 0x9332,
+ 0x985F: 0x8AD6,
+ 0x9860: 0x502D,
+ 0x9861: 0x548C,
+ 0x9862: 0x8A71,
+ 0x9863: 0x6B6A,
+ 0x9864: 0x8CC4,
+ 0x9865: 0x8107,
+ 0x9866: 0x60D1,
+ 0x9867: 0x67A0,
+ 0x9868: 0x9DF2,
+ 0x9869: 0x4E99,
+ 0x986A: 0x4E98,
+ 0x986B: 0x9C10,
+ 0x986C: 0x8A6B,
+ 0x986D: 0x85C1,
+ 0x986E: 0x8568,
+ 0x986F: 0x6900,
+ 0x9870: 0x6E7E,
+ 0x9871: 0x7897,
+ 0x9872: 0x8155,
+ 0x989F: 0x5F0C,
+ 0x98A0: 0x4E10,
+ 0x98A1: 0x4E15,
+ 0x98A2: 0x4E2A,
+ 0x98A3: 0x4E31,
+ 0x98A4: 0x4E36,
+ 0x98A5: 0x4E3C,
+ 0x98A6: 0x4E3F,
+ 0x98A7: 0x4E42,
+ 0x98A8: 0x4E56,
+ 0x98A9: 0x4E58,
+ 0x98AA: 0x4E82,
+ 0x98AB: 0x4E85,
+ 0x98AC: 0x8C6B,
+ 0x98AD: 0x4E8A,
+ 0x98AE: 0x8212,
+ 0x98AF: 0x5F0D,
+ 0x98B0: 0x4E8E,
+ 0x98B1: 0x4E9E,
+ 0x98B2: 0x4E9F,
+ 0x98B3: 0x4EA0,
+ 0x98B4: 0x4EA2,
+ 0x98B5: 0x4EB0,
+ 0x98B6: 0x4EB3,
+ 0x98B7: 0x4EB6,
+ 0x98B8: 0x4ECE,
+ 0x98B9: 0x4ECD,
+ 0x98BA: 0x4EC4,
+ 0x98BB: 0x4EC6,
+ 0x98BC: 0x4EC2,
+ 0x98BD: 0x4ED7,
+ 0x98BE: 0x4EDE,
+ 0x98BF: 0x4EED,
+ 0x98C0: 0x4EDF,
+ 0x98C1: 0x4EF7,
+ 0x98C2: 0x4F09,
+ 0x98C3: 0x4F5A,
+ 0x98C4: 0x4F30,
+ 0x98C5: 0x4F5B,
+ 0x98C6: 0x4F5D,
+ 0x98C7: 0x4F57,
+ 0x98C8: 0x4F47,
+ 0x98C9: 0x4F76,
+ 0x98CA: 0x4F88,
+ 0x98CB: 0x4F8F,
+ 0x98CC: 0x4F98,
+ 0x98CD: 0x4F7B,
+ 0x98CE: 0x4F69,
+ 0x98CF: 0x4F70,
+ 0x98D0: 0x4F91,
+ 0x98D1: 0x4F6F,
+ 0x98D2: 0x4F86,
+ 0x98D3: 0x4F96,
+ 0x98D4: 0x5118,
+ 0x98D5: 0x4FD4,
+ 0x98D6: 0x4FDF,
+ 0x98D7: 0x4FCE,
+ 0x98D8: 0x4FD8,
+ 0x98D9: 0x4FDB,
+ 0x98DA: 0x4FD1,
+ 0x98DB: 0x4FDA,
+ 0x98DC: 0x4FD0,
+ 0x98DD: 0x4FE4,
+ 0x98DE: 0x4FE5,
+ 0x98DF: 0x501A,
+ 0x98E0: 0x5028,
+ 0x98E1: 0x5014,
+ 0x98E2: 0x502A,
+ 0x98E3: 0x5025,
+ 0x98E4: 0x5005,
+ 0x98E5: 0x4F1C,
+ 0x98E6: 0x4FF6,
+ 0x98E7: 0x5021,
+ 0x98E8: 0x5029,
+ 0x98E9: 0x502C,
+ 0x98EA: 0x4FFE,
+ 0x98EB: 0x4FEF,
+ 0x98EC: 0x5011,
+ 0x98ED: 0x5006,
+ 0x98EE: 0x5043,
+ 0x98EF: 0x5047,
+ 0x98F0: 0x6703,
+ 0x98F1: 0x5055,
+ 0x98F2: 0x5050,
+ 0x98F3: 0x5048,
+ 0x98F4: 0x505A,
+ 0x98F5: 0x5056,
+ 0x98F6: 0x506C,
+ 0x98F7: 0x5078,
+ 0x98F8: 0x5080,
+ 0x98F9: 0x509A,
+ 0x98FA: 0x5085,
+ 0x98FB: 0x50B4,
+ 0x98FC: 0x50B2,
+ 0x9940: 0x50C9,
+ 0x9941: 0x50CA,
+ 0x9942: 0x50B3,
+ 0x9943: 0x50C2,
+ 0x9944: 0x50D6,
+ 0x9945: 0x50DE,
+ 0x9946: 0x50E5,
+ 0x9947: 0x50ED,
+ 0x9948: 0x50E3,
+ 0x9949: 0x50EE,
+ 0x994A: 0x50F9,
+ 0x994B: 0x50F5,
+ 0x994C: 0x5109,
+ 0x994D: 0x5101,
+ 0x994E: 0x5102,
+ 0x994F: 0x5116,
+ 0x9950: 0x5115,
+ 0x9951: 0x5114,
+ 0x9952: 0x511A,
+ 0x9953: 0x5121,
+ 0x9954: 0x513A,
+ 0x9955: 0x5137,
+ 0x9956: 0x513C,
+ 0x9957: 0x513B,
+ 0x9958: 0x513F,
+ 0x9959: 0x5140,
+ 0x995A: 0x5152,
+ 0x995B: 0x514C,
+ 0x995C: 0x5154,
+ 0x995D: 0x5162,
+ 0x995E: 0x7AF8,
+ 0x995F: 0x5169,
+ 0x9960: 0x516A,
+ 0x9961: 0x516E,
+ 0x9962: 0x5180,
+ 0x9963: 0x5182,
+ 0x9964: 0x56D8,
+ 0x9965: 0x518C,
+ 0x9966: 0x5189,
+ 0x9967: 0x518F,
+ 0x9968: 0x5191,
+ 0x9969: 0x5193,
+ 0x996A: 0x5195,
+ 0x996B: 0x5196,
+ 0x996C: 0x51A4,
+ 0x996D: 0x51A6,
+ 0x996E: 0x51A2,
+ 0x996F: 0x51A9,
+ 0x9970: 0x51AA,
+ 0x9971: 0x51AB,
+ 0x9972: 0x51B3,
+ 0x9973: 0x51B1,
+ 0x9974: 0x51B2,
+ 0x9975: 0x51B0,
+ 0x9976: 0x51B5,
+ 0x9977: 0x51BD,
+ 0x9978: 0x51C5,
+ 0x9979: 0x51C9,
+ 0x997A: 0x51DB,
+ 0x997B: 0x51E0,
+ 0x997C: 0x8655,
+ 0x997D: 0x51E9,
+ 0x997E: 0x51ED,
+ 0x9980: 0x51F0,
+ 0x9981: 0x51F5,
+ 0x9982: 0x51FE,
+ 0x9983: 0x5204,
+ 0x9984: 0x520B,
+ 0x9985: 0x5214,
+ 0x9986: 0x520E,
+ 0x9987: 0x5227,
+ 0x9988: 0x522A,
+ 0x9989: 0x522E,
+ 0x998A: 0x5233,
+ 0x998B: 0x5239,
+ 0x998C: 0x524F,
+ 0x998D: 0x5244,
+ 0x998E: 0x524B,
+ 0x998F: 0x524C,
+ 0x9990: 0x525E,
+ 0x9991: 0x5254,
+ 0x9992: 0x526A,
+ 0x9993: 0x5274,
+ 0x9994: 0x5269,
+ 0x9995: 0x5273,
+ 0x9996: 0x527F,
+ 0x9997: 0x527D,
+ 0x9998: 0x528D,
+ 0x9999: 0x5294,
+ 0x999A: 0x5292,
+ 0x999B: 0x5271,
+ 0x999C: 0x5288,
+ 0x999D: 0x5291,
+ 0x999E: 0x8FA8,
+ 0x999F: 0x8FA7,
+ 0x99A0: 0x52AC,
+ 0x99A1: 0x52AD,
+ 0x99A2: 0x52BC,
+ 0x99A3: 0x52B5,
+ 0x99A4: 0x52C1,
+ 0x99A5: 0x52CD,
+ 0x99A6: 0x52D7,
+ 0x99A7: 0x52DE,
+ 0x99A8: 0x52E3,
+ 0x99A9: 0x52E6,
+ 0x99AA: 0x98ED,
+ 0x99AB: 0x52E0,
+ 0x99AC: 0x52F3,
+ 0x99AD: 0x52F5,
+ 0x99AE: 0x52F8,
+ 0x99AF: 0x52F9,
+ 0x99B0: 0x5306,
+ 0x99B1: 0x5308,
+ 0x99B2: 0x7538,
+ 0x99B3: 0x530D,
+ 0x99B4: 0x5310,
+ 0x99B5: 0x530F,
+ 0x99B6: 0x5315,
+ 0x99B7: 0x531A,
+ 0x99B8: 0x5323,
+ 0x99B9: 0x532F,
+ 0x99BA: 0x5331,
+ 0x99BB: 0x5333,
+ 0x99BC: 0x5338,
+ 0x99BD: 0x5340,
+ 0x99BE: 0x5346,
+ 0x99BF: 0x5345,
+ 0x99C0: 0x4E17,
+ 0x99C1: 0x5349,
+ 0x99C2: 0x534D,
+ 0x99C3: 0x51D6,
+ 0x99C4: 0x535E,
+ 0x99C5: 0x5369,
+ 0x99C6: 0x536E,
+ 0x99C7: 0x5918,
+ 0x99C8: 0x537B,
+ 0x99C9: 0x5377,
+ 0x99CA: 0x5382,
+ 0x99CB: 0x5396,
+ 0x99CC: 0x53A0,
+ 0x99CD: 0x53A6,
+ 0x99CE: 0x53A5,
+ 0x99CF: 0x53AE,
+ 0x99D0: 0x53B0,
+ 0x99D1: 0x53B6,
+ 0x99D2: 0x53C3,
+ 0x99D3: 0x7C12,
+ 0x99D4: 0x96D9,
+ 0x99D5: 0x53DF,
+ 0x99D6: 0x66FC,
+ 0x99D7: 0x71EE,
+ 0x99D8: 0x53EE,
+ 0x99D9: 0x53E8,
+ 0x99DA: 0x53ED,
+ 0x99DB: 0x53FA,
+ 0x99DC: 0x5401,
+ 0x99DD: 0x543D,
+ 0x99DE: 0x5440,
+ 0x99DF: 0x542C,
+ 0x99E0: 0x542D,
+ 0x99E1: 0x543C,
+ 0x99E2: 0x542E,
+ 0x99E3: 0x5436,
+ 0x99E4: 0x5429,
+ 0x99E5: 0x541D,
+ 0x99E6: 0x544E,
+ 0x99E7: 0x548F,
+ 0x99E8: 0x5475,
+ 0x99E9: 0x548E,
+ 0x99EA: 0x545F,
+ 0x99EB: 0x5471,
+ 0x99EC: 0x5477,
+ 0x99ED: 0x5470,
+ 0x99EE: 0x5492,
+ 0x99EF: 0x547B,
+ 0x99F0: 0x5480,
+ 0x99F1: 0x5476,
+ 0x99F2: 0x5484,
+ 0x99F3: 0x5490,
+ 0x99F4: 0x5486,
+ 0x99F5: 0x54C7,
+ 0x99F6: 0x54A2,
+ 0x99F7: 0x54B8,
+ 0x99F8: 0x54A5,
+ 0x99F9: 0x54AC,
+ 0x99FA: 0x54C4,
+ 0x99FB: 0x54C8,
+ 0x99FC: 0x54A8,
+ 0x9A40: 0x54AB,
+ 0x9A41: 0x54C2,
+ 0x9A42: 0x54A4,
+ 0x9A43: 0x54BE,
+ 0x9A44: 0x54BC,
+ 0x9A45: 0x54D8,
+ 0x9A46: 0x54E5,
+ 0x9A47: 0x54E6,
+ 0x9A48: 0x550F,
+ 0x9A49: 0x5514,
+ 0x9A4A: 0x54FD,
+ 0x9A4B: 0x54EE,
+ 0x9A4C: 0x54ED,
+ 0x9A4D: 0x54FA,
+ 0x9A4E: 0x54E2,
+ 0x9A4F: 0x5539,
+ 0x9A50: 0x5540,
+ 0x9A51: 0x5563,
+ 0x9A52: 0x554C,
+ 0x9A53: 0x552E,
+ 0x9A54: 0x555C,
+ 0x9A55: 0x5545,
+ 0x9A56: 0x5556,
+ 0x9A57: 0x5557,
+ 0x9A58: 0x5538,
+ 0x9A59: 0x5533,
+ 0x9A5A: 0x555D,
+ 0x9A5B: 0x5599,
+ 0x9A5C: 0x5580,
+ 0x9A5D: 0x54AF,
+ 0x9A5E: 0x558A,
+ 0x9A5F: 0x559F,
+ 0x9A60: 0x557B,
+ 0x9A61: 0x557E,
+ 0x9A62: 0x5598,
+ 0x9A63: 0x559E,
+ 0x9A64: 0x55AE,
+ 0x9A65: 0x557C,
+ 0x9A66: 0x5583,
+ 0x9A67: 0x55A9,
+ 0x9A68: 0x5587,
+ 0x9A69: 0x55A8,
+ 0x9A6A: 0x55DA,
+ 0x9A6B: 0x55C5,
+ 0x9A6C: 0x55DF,
+ 0x9A6D: 0x55C4,
+ 0x9A6E: 0x55DC,
+ 0x9A6F: 0x55E4,
+ 0x9A70: 0x55D4,
+ 0x9A71: 0x5614,
+ 0x9A72: 0x55F7,
+ 0x9A73: 0x5616,
+ 0x9A74: 0x55FE,
+ 0x9A75: 0x55FD,
+ 0x9A76: 0x561B,
+ 0x9A77: 0x55F9,
+ 0x9A78: 0x564E,
+ 0x9A79: 0x5650,
+ 0x9A7A: 0x71DF,
+ 0x9A7B: 0x5634,
+ 0x9A7C: 0x5636,
+ 0x9A7D: 0x5632,
+ 0x9A7E: 0x5638,
+ 0x9A80: 0x566B,
+ 0x9A81: 0x5664,
+ 0x9A82: 0x562F,
+ 0x9A83: 0x566C,
+ 0x9A84: 0x566A,
+ 0x9A85: 0x5686,
+ 0x9A86: 0x5680,
+ 0x9A87: 0x568A,
+ 0x9A88: 0x56A0,
+ 0x9A89: 0x5694,
+ 0x9A8A: 0x568F,
+ 0x9A8B: 0x56A5,
+ 0x9A8C: 0x56AE,
+ 0x9A8D: 0x56B6,
+ 0x9A8E: 0x56B4,
+ 0x9A8F: 0x56C2,
+ 0x9A90: 0x56BC,
+ 0x9A91: 0x56C1,
+ 0x9A92: 0x56C3,
+ 0x9A93: 0x56C0,
+ 0x9A94: 0x56C8,
+ 0x9A95: 0x56CE,
+ 0x9A96: 0x56D1,
+ 0x9A97: 0x56D3,
+ 0x9A98: 0x56D7,
+ 0x9A99: 0x56EE,
+ 0x9A9A: 0x56F9,
+ 0x9A9B: 0x5700,
+ 0x9A9C: 0x56FF,
+ 0x9A9D: 0x5704,
+ 0x9A9E: 0x5709,
+ 0x9A9F: 0x5708,
+ 0x9AA0: 0x570B,
+ 0x9AA1: 0x570D,
+ 0x9AA2: 0x5713,
+ 0x9AA3: 0x5718,
+ 0x9AA4: 0x5716,
+ 0x9AA5: 0x55C7,
+ 0x9AA6: 0x571C,
+ 0x9AA7: 0x5726,
+ 0x9AA8: 0x5737,
+ 0x9AA9: 0x5738,
+ 0x9AAA: 0x574E,
+ 0x9AAB: 0x573B,
+ 0x9AAC: 0x5740,
+ 0x9AAD: 0x574F,
+ 0x9AAE: 0x5769,
+ 0x9AAF: 0x57C0,
+ 0x9AB0: 0x5788,
+ 0x9AB1: 0x5761,
+ 0x9AB2: 0x577F,
+ 0x9AB3: 0x5789,
+ 0x9AB4: 0x5793,
+ 0x9AB5: 0x57A0,
+ 0x9AB6: 0x57B3,
+ 0x9AB7: 0x57A4,
+ 0x9AB8: 0x57AA,
+ 0x9AB9: 0x57B0,
+ 0x9ABA: 0x57C3,
+ 0x9ABB: 0x57C6,
+ 0x9ABC: 0x57D4,
+ 0x9ABD: 0x57D2,
+ 0x9ABE: 0x57D3,
+ 0x9ABF: 0x580A,
+ 0x9AC0: 0x57D6,
+ 0x9AC1: 0x57E3,
+ 0x9AC2: 0x580B,
+ 0x9AC3: 0x5819,
+ 0x9AC4: 0x581D,
+ 0x9AC5: 0x5872,
+ 0x9AC6: 0x5821,
+ 0x9AC7: 0x5862,
+ 0x9AC8: 0x584B,
+ 0x9AC9: 0x5870,
+ 0x9ACA: 0x6BC0,
+ 0x9ACB: 0x5852,
+ 0x9ACC: 0x583D,
+ 0x9ACD: 0x5879,
+ 0x9ACE: 0x5885,
+ 0x9ACF: 0x58B9,
+ 0x9AD0: 0x589F,
+ 0x9AD1: 0x58AB,
+ 0x9AD2: 0x58BA,
+ 0x9AD3: 0x58DE,
+ 0x9AD4: 0x58BB,
+ 0x9AD5: 0x58B8,
+ 0x9AD6: 0x58AE,
+ 0x9AD7: 0x58C5,
+ 0x9AD8: 0x58D3,
+ 0x9AD9: 0x58D1,
+ 0x9ADA: 0x58D7,
+ 0x9ADB: 0x58D9,
+ 0x9ADC: 0x58D8,
+ 0x9ADD: 0x58E5,
+ 0x9ADE: 0x58DC,
+ 0x9ADF: 0x58E4,
+ 0x9AE0: 0x58DF,
+ 0x9AE1: 0x58EF,
+ 0x9AE2: 0x58FA,
+ 0x9AE3: 0x58F9,
+ 0x9AE4: 0x58FB,
+ 0x9AE5: 0x58FC,
+ 0x9AE6: 0x58FD,
+ 0x9AE7: 0x5902,
+ 0x9AE8: 0x590A,
+ 0x9AE9: 0x5910,
+ 0x9AEA: 0x591B,
+ 0x9AEB: 0x68A6,
+ 0x9AEC: 0x5925,
+ 0x9AED: 0x592C,
+ 0x9AEE: 0x592D,
+ 0x9AEF: 0x5932,
+ 0x9AF0: 0x5938,
+ 0x9AF1: 0x593E,
+ 0x9AF2: 0x7AD2,
+ 0x9AF3: 0x5955,
+ 0x9AF4: 0x5950,
+ 0x9AF5: 0x594E,
+ 0x9AF6: 0x595A,
+ 0x9AF7: 0x5958,
+ 0x9AF8: 0x5962,
+ 0x9AF9: 0x5960,
+ 0x9AFA: 0x5967,
+ 0x9AFB: 0x596C,
+ 0x9AFC: 0x5969,
+ 0x9B40: 0x5978,
+ 0x9B41: 0x5981,
+ 0x9B42: 0x599D,
+ 0x9B43: 0x4F5E,
+ 0x9B44: 0x4FAB,
+ 0x9B45: 0x59A3,
+ 0x9B46: 0x59B2,
+ 0x9B47: 0x59C6,
+ 0x9B48: 0x59E8,
+ 0x9B49: 0x59DC,
+ 0x9B4A: 0x598D,
+ 0x9B4B: 0x59D9,
+ 0x9B4C: 0x59DA,
+ 0x9B4D: 0x5A25,
+ 0x9B4E: 0x5A1F,
+ 0x9B4F: 0x5A11,
+ 0x9B50: 0x5A1C,
+ 0x9B51: 0x5A09,
+ 0x9B52: 0x5A1A,
+ 0x9B53: 0x5A40,
+ 0x9B54: 0x5A6C,
+ 0x9B55: 0x5A49,
+ 0x9B56: 0x5A35,
+ 0x9B57: 0x5A36,
+ 0x9B58: 0x5A62,
+ 0x9B59: 0x5A6A,
+ 0x9B5A: 0x5A9A,
+ 0x9B5B: 0x5ABC,
+ 0x9B5C: 0x5ABE,
+ 0x9B5D: 0x5ACB,
+ 0x9B5E: 0x5AC2,
+ 0x9B5F: 0x5ABD,
+ 0x9B60: 0x5AE3,
+ 0x9B61: 0x5AD7,
+ 0x9B62: 0x5AE6,
+ 0x9B63: 0x5AE9,
+ 0x9B64: 0x5AD6,
+ 0x9B65: 0x5AFA,
+ 0x9B66: 0x5AFB,
+ 0x9B67: 0x5B0C,
+ 0x9B68: 0x5B0B,
+ 0x9B69: 0x5B16,
+ 0x9B6A: 0x5B32,
+ 0x9B6B: 0x5AD0,
+ 0x9B6C: 0x5B2A,
+ 0x9B6D: 0x5B36,
+ 0x9B6E: 0x5B3E,
+ 0x9B6F: 0x5B43,
+ 0x9B70: 0x5B45,
+ 0x9B71: 0x5B40,
+ 0x9B72: 0x5B51,
+ 0x9B73: 0x5B55,
+ 0x9B74: 0x5B5A,
+ 0x9B75: 0x5B5B,
+ 0x9B76: 0x5B65,
+ 0x9B77: 0x5B69,
+ 0x9B78: 0x5B70,
+ 0x9B79: 0x5B73,
+ 0x9B7A: 0x5B75,
+ 0x9B7B: 0x5B78,
+ 0x9B7C: 0x6588,
+ 0x9B7D: 0x5B7A,
+ 0x9B7E: 0x5B80,
+ 0x9B80: 0x5B83,
+ 0x9B81: 0x5BA6,
+ 0x9B82: 0x5BB8,
+ 0x9B83: 0x5BC3,
+ 0x9B84: 0x5BC7,
+ 0x9B85: 0x5BC9,
+ 0x9B86: 0x5BD4,
+ 0x9B87: 0x5BD0,
+ 0x9B88: 0x5BE4,
+ 0x9B89: 0x5BE6,
+ 0x9B8A: 0x5BE2,
+ 0x9B8B: 0x5BDE,
+ 0x9B8C: 0x5BE5,
+ 0x9B8D: 0x5BEB,
+ 0x9B8E: 0x5BF0,
+ 0x9B8F: 0x5BF6,
+ 0x9B90: 0x5BF3,
+ 0x9B91: 0x5C05,
+ 0x9B92: 0x5C07,
+ 0x9B93: 0x5C08,
+ 0x9B94: 0x5C0D,
+ 0x9B95: 0x5C13,
+ 0x9B96: 0x5C20,
+ 0x9B97: 0x5C22,
+ 0x9B98: 0x5C28,
+ 0x9B99: 0x5C38,
+ 0x9B9A: 0x5C39,
+ 0x9B9B: 0x5C41,
+ 0x9B9C: 0x5C46,
+ 0x9B9D: 0x5C4E,
+ 0x9B9E: 0x5C53,
+ 0x9B9F: 0x5C50,
+ 0x9BA0: 0x5C4F,
+ 0x9BA1: 0x5B71,
+ 0x9BA2: 0x5C6C,
+ 0x9BA3: 0x5C6E,
+ 0x9BA4: 0x4E62,
+ 0x9BA5: 0x5C76,
+ 0x9BA6: 0x5C79,
+ 0x9BA7: 0x5C8C,
+ 0x9BA8: 0x5C91,
+ 0x9BA9: 0x5C94,
+ 0x9BAA: 0x599B,
+ 0x9BAB: 0x5CAB,
+ 0x9BAC: 0x5CBB,
+ 0x9BAD: 0x5CB6,
+ 0x9BAE: 0x5CBC,
+ 0x9BAF: 0x5CB7,
+ 0x9BB0: 0x5CC5,
+ 0x9BB1: 0x5CBE,
+ 0x9BB2: 0x5CC7,
+ 0x9BB3: 0x5CD9,
+ 0x9BB4: 0x5CE9,
+ 0x9BB5: 0x5CFD,
+ 0x9BB6: 0x5CFA,
+ 0x9BB7: 0x5CED,
+ 0x9BB8: 0x5D8C,
+ 0x9BB9: 0x5CEA,
+ 0x9BBA: 0x5D0B,
+ 0x9BBB: 0x5D15,
+ 0x9BBC: 0x5D17,
+ 0x9BBD: 0x5D5C,
+ 0x9BBE: 0x5D1F,
+ 0x9BBF: 0x5D1B,
+ 0x9BC0: 0x5D11,
+ 0x9BC1: 0x5D14,
+ 0x9BC2: 0x5D22,
+ 0x9BC3: 0x5D1A,
+ 0x9BC4: 0x5D19,
+ 0x9BC5: 0x5D18,
+ 0x9BC6: 0x5D4C,
+ 0x9BC7: 0x5D52,
+ 0x9BC8: 0x5D4E,
+ 0x9BC9: 0x5D4B,
+ 0x9BCA: 0x5D6C,
+ 0x9BCB: 0x5D73,
+ 0x9BCC: 0x5D76,
+ 0x9BCD: 0x5D87,
+ 0x9BCE: 0x5D84,
+ 0x9BCF: 0x5D82,
+ 0x9BD0: 0x5DA2,
+ 0x9BD1: 0x5D9D,
+ 0x9BD2: 0x5DAC,
+ 0x9BD3: 0x5DAE,
+ 0x9BD4: 0x5DBD,
+ 0x9BD5: 0x5D90,
+ 0x9BD6: 0x5DB7,
+ 0x9BD7: 0x5DBC,
+ 0x9BD8: 0x5DC9,
+ 0x9BD9: 0x5DCD,
+ 0x9BDA: 0x5DD3,
+ 0x9BDB: 0x5DD2,
+ 0x9BDC: 0x5DD6,
+ 0x9BDD: 0x5DDB,
+ 0x9BDE: 0x5DEB,
+ 0x9BDF: 0x5DF2,
+ 0x9BE0: 0x5DF5,
+ 0x9BE1: 0x5E0B,
+ 0x9BE2: 0x5E1A,
+ 0x9BE3: 0x5E19,
+ 0x9BE4: 0x5E11,
+ 0x9BE5: 0x5E1B,
+ 0x9BE6: 0x5E36,
+ 0x9BE7: 0x5E37,
+ 0x9BE8: 0x5E44,
+ 0x9BE9: 0x5E43,
+ 0x9BEA: 0x5E40,
+ 0x9BEB: 0x5E4E,
+ 0x9BEC: 0x5E57,
+ 0x9BED: 0x5E54,
+ 0x9BEE: 0x5E5F,
+ 0x9BEF: 0x5E62,
+ 0x9BF0: 0x5E64,
+ 0x9BF1: 0x5E47,
+ 0x9BF2: 0x5E75,
+ 0x9BF3: 0x5E76,
+ 0x9BF4: 0x5E7A,
+ 0x9BF5: 0x9EBC,
+ 0x9BF6: 0x5E7F,
+ 0x9BF7: 0x5EA0,
+ 0x9BF8: 0x5EC1,
+ 0x9BF9: 0x5EC2,
+ 0x9BFA: 0x5EC8,
+ 0x9BFB: 0x5ED0,
+ 0x9BFC: 0x5ECF,
+ 0x9C40: 0x5ED6,
+ 0x9C41: 0x5EE3,
+ 0x9C42: 0x5EDD,
+ 0x9C43: 0x5EDA,
+ 0x9C44: 0x5EDB,
+ 0x9C45: 0x5EE2,
+ 0x9C46: 0x5EE1,
+ 0x9C47: 0x5EE8,
+ 0x9C48: 0x5EE9,
+ 0x9C49: 0x5EEC,
+ 0x9C4A: 0x5EF1,
+ 0x9C4B: 0x5EF3,
+ 0x9C4C: 0x5EF0,
+ 0x9C4D: 0x5EF4,
+ 0x9C4E: 0x5EF8,
+ 0x9C4F: 0x5EFE,
+ 0x9C50: 0x5F03,
+ 0x9C51: 0x5F09,
+ 0x9C52: 0x5F5D,
+ 0x9C53: 0x5F5C,
+ 0x9C54: 0x5F0B,
+ 0x9C55: 0x5F11,
+ 0x9C56: 0x5F16,
+ 0x9C57: 0x5F29,
+ 0x9C58: 0x5F2D,
+ 0x9C59: 0x5F38,
+ 0x9C5A: 0x5F41,
+ 0x9C5B: 0x5F48,
+ 0x9C5C: 0x5F4C,
+ 0x9C5D: 0x5F4E,
+ 0x9C5E: 0x5F2F,
+ 0x9C5F: 0x5F51,
+ 0x9C60: 0x5F56,
+ 0x9C61: 0x5F57,
+ 0x9C62: 0x5F59,
+ 0x9C63: 0x5F61,
+ 0x9C64: 0x5F6D,
+ 0x9C65: 0x5F73,
+ 0x9C66: 0x5F77,
+ 0x9C67: 0x5F83,
+ 0x9C68: 0x5F82,
+ 0x9C69: 0x5F7F,
+ 0x9C6A: 0x5F8A,
+ 0x9C6B: 0x5F88,
+ 0x9C6C: 0x5F91,
+ 0x9C6D: 0x5F87,
+ 0x9C6E: 0x5F9E,
+ 0x9C6F: 0x5F99,
+ 0x9C70: 0x5F98,
+ 0x9C71: 0x5FA0,
+ 0x9C72: 0x5FA8,
+ 0x9C73: 0x5FAD,
+ 0x9C74: 0x5FBC,
+ 0x9C75: 0x5FD6,
+ 0x9C76: 0x5FFB,
+ 0x9C77: 0x5FE4,
+ 0x9C78: 0x5FF8,
+ 0x9C79: 0x5FF1,
+ 0x9C7A: 0x5FDD,
+ 0x9C7B: 0x60B3,
+ 0x9C7C: 0x5FFF,
+ 0x9C7D: 0x6021,
+ 0x9C7E: 0x6060,
+ 0x9C80: 0x6019,
+ 0x9C81: 0x6010,
+ 0x9C82: 0x6029,
+ 0x9C83: 0x600E,
+ 0x9C84: 0x6031,
+ 0x9C85: 0x601B,
+ 0x9C86: 0x6015,
+ 0x9C87: 0x602B,
+ 0x9C88: 0x6026,
+ 0x9C89: 0x600F,
+ 0x9C8A: 0x603A,
+ 0x9C8B: 0x605A,
+ 0x9C8C: 0x6041,
+ 0x9C8D: 0x606A,
+ 0x9C8E: 0x6077,
+ 0x9C8F: 0x605F,
+ 0x9C90: 0x604A,
+ 0x9C91: 0x6046,
+ 0x9C92: 0x604D,
+ 0x9C93: 0x6063,
+ 0x9C94: 0x6043,
+ 0x9C95: 0x6064,
+ 0x9C96: 0x6042,
+ 0x9C97: 0x606C,
+ 0x9C98: 0x606B,
+ 0x9C99: 0x6059,
+ 0x9C9A: 0x6081,
+ 0x9C9B: 0x608D,
+ 0x9C9C: 0x60E7,
+ 0x9C9D: 0x6083,
+ 0x9C9E: 0x609A,
+ 0x9C9F: 0x6084,
+ 0x9CA0: 0x609B,
+ 0x9CA1: 0x6096,
+ 0x9CA2: 0x6097,
+ 0x9CA3: 0x6092,
+ 0x9CA4: 0x60A7,
+ 0x9CA5: 0x608B,
+ 0x9CA6: 0x60E1,
+ 0x9CA7: 0x60B8,
+ 0x9CA8: 0x60E0,
+ 0x9CA9: 0x60D3,
+ 0x9CAA: 0x60B4,
+ 0x9CAB: 0x5FF0,
+ 0x9CAC: 0x60BD,
+ 0x9CAD: 0x60C6,
+ 0x9CAE: 0x60B5,
+ 0x9CAF: 0x60D8,
+ 0x9CB0: 0x614D,
+ 0x9CB1: 0x6115,
+ 0x9CB2: 0x6106,
+ 0x9CB3: 0x60F6,
+ 0x9CB4: 0x60F7,
+ 0x9CB5: 0x6100,
+ 0x9CB6: 0x60F4,
+ 0x9CB7: 0x60FA,
+ 0x9CB8: 0x6103,
+ 0x9CB9: 0x6121,
+ 0x9CBA: 0x60FB,
+ 0x9CBB: 0x60F1,
+ 0x9CBC: 0x610D,
+ 0x9CBD: 0x610E,
+ 0x9CBE: 0x6147,
+ 0x9CBF: 0x613E,
+ 0x9CC0: 0x6128,
+ 0x9CC1: 0x6127,
+ 0x9CC2: 0x614A,
+ 0x9CC3: 0x613F,
+ 0x9CC4: 0x613C,
+ 0x9CC5: 0x612C,
+ 0x9CC6: 0x6134,
+ 0x9CC7: 0x613D,
+ 0x9CC8: 0x6142,
+ 0x9CC9: 0x6144,
+ 0x9CCA: 0x6173,
+ 0x9CCB: 0x6177,
+ 0x9CCC: 0x6158,
+ 0x9CCD: 0x6159,
+ 0x9CCE: 0x615A,
+ 0x9CCF: 0x616B,
+ 0x9CD0: 0x6174,
+ 0x9CD1: 0x616F,
+ 0x9CD2: 0x6165,
+ 0x9CD3: 0x6171,
+ 0x9CD4: 0x615F,
+ 0x9CD5: 0x615D,
+ 0x9CD6: 0x6153,
+ 0x9CD7: 0x6175,
+ 0x9CD8: 0x6199,
+ 0x9CD9: 0x6196,
+ 0x9CDA: 0x6187,
+ 0x9CDB: 0x61AC,
+ 0x9CDC: 0x6194,
+ 0x9CDD: 0x619A,
+ 0x9CDE: 0x618A,
+ 0x9CDF: 0x6191,
+ 0x9CE0: 0x61AB,
+ 0x9CE1: 0x61AE,
+ 0x9CE2: 0x61CC,
+ 0x9CE3: 0x61CA,
+ 0x9CE4: 0x61C9,
+ 0x9CE5: 0x61F7,
+ 0x9CE6: 0x61C8,
+ 0x9CE7: 0x61C3,
+ 0x9CE8: 0x61C6,
+ 0x9CE9: 0x61BA,
+ 0x9CEA: 0x61CB,
+ 0x9CEB: 0x7F79,
+ 0x9CEC: 0x61CD,
+ 0x9CED: 0x61E6,
+ 0x9CEE: 0x61E3,
+ 0x9CEF: 0x61F6,
+ 0x9CF0: 0x61FA,
+ 0x9CF1: 0x61F4,
+ 0x9CF2: 0x61FF,
+ 0x9CF3: 0x61FD,
+ 0x9CF4: 0x61FC,
+ 0x9CF5: 0x61FE,
+ 0x9CF6: 0x6200,
+ 0x9CF7: 0x6208,
+ 0x9CF8: 0x6209,
+ 0x9CF9: 0x620D,
+ 0x9CFA: 0x620C,
+ 0x9CFB: 0x6214,
+ 0x9CFC: 0x621B,
+ 0x9D40: 0x621E,
+ 0x9D41: 0x6221,
+ 0x9D42: 0x622A,
+ 0x9D43: 0x622E,
+ 0x9D44: 0x6230,
+ 0x9D45: 0x6232,
+ 0x9D46: 0x6233,
+ 0x9D47: 0x6241,
+ 0x9D48: 0x624E,
+ 0x9D49: 0x625E,
+ 0x9D4A: 0x6263,
+ 0x9D4B: 0x625B,
+ 0x9D4C: 0x6260,
+ 0x9D4D: 0x6268,
+ 0x9D4E: 0x627C,
+ 0x9D4F: 0x6282,
+ 0x9D50: 0x6289,
+ 0x9D51: 0x627E,
+ 0x9D52: 0x6292,
+ 0x9D53: 0x6293,
+ 0x9D54: 0x6296,
+ 0x9D55: 0x62D4,
+ 0x9D56: 0x6283,
+ 0x9D57: 0x6294,
+ 0x9D58: 0x62D7,
+ 0x9D59: 0x62D1,
+ 0x9D5A: 0x62BB,
+ 0x9D5B: 0x62CF,
+ 0x9D5C: 0x62FF,
+ 0x9D5D: 0x62C6,
+ 0x9D5E: 0x64D4,
+ 0x9D5F: 0x62C8,
+ 0x9D60: 0x62DC,
+ 0x9D61: 0x62CC,
+ 0x9D62: 0x62CA,
+ 0x9D63: 0x62C2,
+ 0x9D64: 0x62C7,
+ 0x9D65: 0x629B,
+ 0x9D66: 0x62C9,
+ 0x9D67: 0x630C,
+ 0x9D68: 0x62EE,
+ 0x9D69: 0x62F1,
+ 0x9D6A: 0x6327,
+ 0x9D6B: 0x6302,
+ 0x9D6C: 0x6308,
+ 0x9D6D: 0x62EF,
+ 0x9D6E: 0x62F5,
+ 0x9D6F: 0x6350,
+ 0x9D70: 0x633E,
+ 0x9D71: 0x634D,
+ 0x9D72: 0x641C,
+ 0x9D73: 0x634F,
+ 0x9D74: 0x6396,
+ 0x9D75: 0x638E,
+ 0x9D76: 0x6380,
+ 0x9D77: 0x63AB,
+ 0x9D78: 0x6376,
+ 0x9D79: 0x63A3,
+ 0x9D7A: 0x638F,
+ 0x9D7B: 0x6389,
+ 0x9D7C: 0x639F,
+ 0x9D7D: 0x63B5,
+ 0x9D7E: 0x636B,
+ 0x9D80: 0x6369,
+ 0x9D81: 0x63BE,
+ 0x9D82: 0x63E9,
+ 0x9D83: 0x63C0,
+ 0x9D84: 0x63C6,
+ 0x9D85: 0x63E3,
+ 0x9D86: 0x63C9,
+ 0x9D87: 0x63D2,
+ 0x9D88: 0x63F6,
+ 0x9D89: 0x63C4,
+ 0x9D8A: 0x6416,
+ 0x9D8B: 0x6434,
+ 0x9D8C: 0x6406,
+ 0x9D8D: 0x6413,
+ 0x9D8E: 0x6426,
+ 0x9D8F: 0x6436,
+ 0x9D90: 0x651D,
+ 0x9D91: 0x6417,
+ 0x9D92: 0x6428,
+ 0x9D93: 0x640F,
+ 0x9D94: 0x6467,
+ 0x9D95: 0x646F,
+ 0x9D96: 0x6476,
+ 0x9D97: 0x644E,
+ 0x9D98: 0x652A,
+ 0x9D99: 0x6495,
+ 0x9D9A: 0x6493,
+ 0x9D9B: 0x64A5,
+ 0x9D9C: 0x64A9,
+ 0x9D9D: 0x6488,
+ 0x9D9E: 0x64BC,
+ 0x9D9F: 0x64DA,
+ 0x9DA0: 0x64D2,
+ 0x9DA1: 0x64C5,
+ 0x9DA2: 0x64C7,
+ 0x9DA3: 0x64BB,
+ 0x9DA4: 0x64D8,
+ 0x9DA5: 0x64C2,
+ 0x9DA6: 0x64F1,
+ 0x9DA7: 0x64E7,
+ 0x9DA8: 0x8209,
+ 0x9DA9: 0x64E0,
+ 0x9DAA: 0x64E1,
+ 0x9DAB: 0x62AC,
+ 0x9DAC: 0x64E3,
+ 0x9DAD: 0x64EF,
+ 0x9DAE: 0x652C,
+ 0x9DAF: 0x64F6,
+ 0x9DB0: 0x64F4,
+ 0x9DB1: 0x64F2,
+ 0x9DB2: 0x64FA,
+ 0x9DB3: 0x6500,
+ 0x9DB4: 0x64FD,
+ 0x9DB5: 0x6518,
+ 0x9DB6: 0x651C,
+ 0x9DB7: 0x6505,
+ 0x9DB8: 0x6524,
+ 0x9DB9: 0x6523,
+ 0x9DBA: 0x652B,
+ 0x9DBB: 0x6534,
+ 0x9DBC: 0x6535,
+ 0x9DBD: 0x6537,
+ 0x9DBE: 0x6536,
+ 0x9DBF: 0x6538,
+ 0x9DC0: 0x754B,
+ 0x9DC1: 0x6548,
+ 0x9DC2: 0x6556,
+ 0x9DC3: 0x6555,
+ 0x9DC4: 0x654D,
+ 0x9DC5: 0x6558,
+ 0x9DC6: 0x655E,
+ 0x9DC7: 0x655D,
+ 0x9DC8: 0x6572,
+ 0x9DC9: 0x6578,
+ 0x9DCA: 0x6582,
+ 0x9DCB: 0x6583,
+ 0x9DCC: 0x8B8A,
+ 0x9DCD: 0x659B,
+ 0x9DCE: 0x659F,
+ 0x9DCF: 0x65AB,
+ 0x9DD0: 0x65B7,
+ 0x9DD1: 0x65C3,
+ 0x9DD2: 0x65C6,
+ 0x9DD3: 0x65C1,
+ 0x9DD4: 0x65C4,
+ 0x9DD5: 0x65CC,
+ 0x9DD6: 0x65D2,
+ 0x9DD7: 0x65DB,
+ 0x9DD8: 0x65D9,
+ 0x9DD9: 0x65E0,
+ 0x9DDA: 0x65E1,
+ 0x9DDB: 0x65F1,
+ 0x9DDC: 0x6772,
+ 0x9DDD: 0x660A,
+ 0x9DDE: 0x6603,
+ 0x9DDF: 0x65FB,
+ 0x9DE0: 0x6773,
+ 0x9DE1: 0x6635,
+ 0x9DE2: 0x6636,
+ 0x9DE3: 0x6634,
+ 0x9DE4: 0x661C,
+ 0x9DE5: 0x664F,
+ 0x9DE6: 0x6644,
+ 0x9DE7: 0x6649,
+ 0x9DE8: 0x6641,
+ 0x9DE9: 0x665E,
+ 0x9DEA: 0x665D,
+ 0x9DEB: 0x6664,
+ 0x9DEC: 0x6667,
+ 0x9DED: 0x6668,
+ 0x9DEE: 0x665F,
+ 0x9DEF: 0x6662,
+ 0x9DF0: 0x6670,
+ 0x9DF1: 0x6683,
+ 0x9DF2: 0x6688,
+ 0x9DF3: 0x668E,
+ 0x9DF4: 0x6689,
+ 0x9DF5: 0x6684,
+ 0x9DF6: 0x6698,
+ 0x9DF7: 0x669D,
+ 0x9DF8: 0x66C1,
+ 0x9DF9: 0x66B9,
+ 0x9DFA: 0x66C9,
+ 0x9DFB: 0x66BE,
+ 0x9DFC: 0x66BC,
+ 0x9E40: 0x66C4,
+ 0x9E41: 0x66B8,
+ 0x9E42: 0x66D6,
+ 0x9E43: 0x66DA,
+ 0x9E44: 0x66E0,
+ 0x9E45: 0x663F,
+ 0x9E46: 0x66E6,
+ 0x9E47: 0x66E9,
+ 0x9E48: 0x66F0,
+ 0x9E49: 0x66F5,
+ 0x9E4A: 0x66F7,
+ 0x9E4B: 0x670F,
+ 0x9E4C: 0x6716,
+ 0x9E4D: 0x671E,
+ 0x9E4E: 0x6726,
+ 0x9E4F: 0x6727,
+ 0x9E50: 0x9738,
+ 0x9E51: 0x672E,
+ 0x9E52: 0x673F,
+ 0x9E53: 0x6736,
+ 0x9E54: 0x6741,
+ 0x9E55: 0x6738,
+ 0x9E56: 0x6737,
+ 0x9E57: 0x6746,
+ 0x9E58: 0x675E,
+ 0x9E59: 0x6760,
+ 0x9E5A: 0x6759,
+ 0x9E5B: 0x6763,
+ 0x9E5C: 0x6764,
+ 0x9E5D: 0x6789,
+ 0x9E5E: 0x6770,
+ 0x9E5F: 0x67A9,
+ 0x9E60: 0x677C,
+ 0x9E61: 0x676A,
+ 0x9E62: 0x678C,
+ 0x9E63: 0x678B,
+ 0x9E64: 0x67A6,
+ 0x9E65: 0x67A1,
+ 0x9E66: 0x6785,
+ 0x9E67: 0x67B7,
+ 0x9E68: 0x67EF,
+ 0x9E69: 0x67B4,
+ 0x9E6A: 0x67EC,
+ 0x9E6B: 0x67B3,
+ 0x9E6C: 0x67E9,
+ 0x9E6D: 0x67B8,
+ 0x9E6E: 0x67E4,
+ 0x9E6F: 0x67DE,
+ 0x9E70: 0x67DD,
+ 0x9E71: 0x67E2,
+ 0x9E72: 0x67EE,
+ 0x9E73: 0x67B9,
+ 0x9E74: 0x67CE,
+ 0x9E75: 0x67C6,
+ 0x9E76: 0x67E7,
+ 0x9E77: 0x6A9C,
+ 0x9E78: 0x681E,
+ 0x9E79: 0x6846,
+ 0x9E7A: 0x6829,
+ 0x9E7B: 0x6840,
+ 0x9E7C: 0x684D,
+ 0x9E7D: 0x6832,
+ 0x9E7E: 0x684E,
+ 0x9E80: 0x68B3,
+ 0x9E81: 0x682B,
+ 0x9E82: 0x6859,
+ 0x9E83: 0x6863,
+ 0x9E84: 0x6877,
+ 0x9E85: 0x687F,
+ 0x9E86: 0x689F,
+ 0x9E87: 0x688F,
+ 0x9E88: 0x68AD,
+ 0x9E89: 0x6894,
+ 0x9E8A: 0x689D,
+ 0x9E8B: 0x689B,
+ 0x9E8C: 0x6883,
+ 0x9E8D: 0x6AAE,
+ 0x9E8E: 0x68B9,
+ 0x9E8F: 0x6874,
+ 0x9E90: 0x68B5,
+ 0x9E91: 0x68A0,
+ 0x9E92: 0x68BA,
+ 0x9E93: 0x690F,
+ 0x9E94: 0x688D,
+ 0x9E95: 0x687E,
+ 0x9E96: 0x6901,
+ 0x9E97: 0x68CA,
+ 0x9E98: 0x6908,
+ 0x9E99: 0x68D8,
+ 0x9E9A: 0x6922,
+ 0x9E9B: 0x6926,
+ 0x9E9C: 0x68E1,
+ 0x9E9D: 0x690C,
+ 0x9E9E: 0x68CD,
+ 0x9E9F: 0x68D4,
+ 0x9EA0: 0x68E7,
+ 0x9EA1: 0x68D5,
+ 0x9EA2: 0x6936,
+ 0x9EA3: 0x6912,
+ 0x9EA4: 0x6904,
+ 0x9EA5: 0x68D7,
+ 0x9EA6: 0x68E3,
+ 0x9EA7: 0x6925,
+ 0x9EA8: 0x68F9,
+ 0x9EA9: 0x68E0,
+ 0x9EAA: 0x68EF,
+ 0x9EAB: 0x6928,
+ 0x9EAC: 0x692A,
+ 0x9EAD: 0x691A,
+ 0x9EAE: 0x6923,
+ 0x9EAF: 0x6921,
+ 0x9EB0: 0x68C6,
+ 0x9EB1: 0x6979,
+ 0x9EB2: 0x6977,
+ 0x9EB3: 0x695C,
+ 0x9EB4: 0x6978,
+ 0x9EB5: 0x696B,
+ 0x9EB6: 0x6954,
+ 0x9EB7: 0x697E,
+ 0x9EB8: 0x696E,
+ 0x9EB9: 0x6939,
+ 0x9EBA: 0x6974,
+ 0x9EBB: 0x693D,
+ 0x9EBC: 0x6959,
+ 0x9EBD: 0x6930,
+ 0x9EBE: 0x6961,
+ 0x9EBF: 0x695E,
+ 0x9EC0: 0x695D,
+ 0x9EC1: 0x6981,
+ 0x9EC2: 0x696A,
+ 0x9EC3: 0x69B2,
+ 0x9EC4: 0x69AE,
+ 0x9EC5: 0x69D0,
+ 0x9EC6: 0x69BF,
+ 0x9EC7: 0x69C1,
+ 0x9EC8: 0x69D3,
+ 0x9EC9: 0x69BE,
+ 0x9ECA: 0x69CE,
+ 0x9ECB: 0x5BE8,
+ 0x9ECC: 0x69CA,
+ 0x9ECD: 0x69DD,
+ 0x9ECE: 0x69BB,
+ 0x9ECF: 0x69C3,
+ 0x9ED0: 0x69A7,
+ 0x9ED1: 0x6A2E,
+ 0x9ED2: 0x6991,
+ 0x9ED3: 0x69A0,
+ 0x9ED4: 0x699C,
+ 0x9ED5: 0x6995,
+ 0x9ED6: 0x69B4,
+ 0x9ED7: 0x69DE,
+ 0x9ED8: 0x69E8,
+ 0x9ED9: 0x6A02,
+ 0x9EDA: 0x6A1B,
+ 0x9EDB: 0x69FF,
+ 0x9EDC: 0x6B0A,
+ 0x9EDD: 0x69F9,
+ 0x9EDE: 0x69F2,
+ 0x9EDF: 0x69E7,
+ 0x9EE0: 0x6A05,
+ 0x9EE1: 0x69B1,
+ 0x9EE2: 0x6A1E,
+ 0x9EE3: 0x69ED,
+ 0x9EE4: 0x6A14,
+ 0x9EE5: 0x69EB,
+ 0x9EE6: 0x6A0A,
+ 0x9EE7: 0x6A12,
+ 0x9EE8: 0x6AC1,
+ 0x9EE9: 0x6A23,
+ 0x9EEA: 0x6A13,
+ 0x9EEB: 0x6A44,
+ 0x9EEC: 0x6A0C,
+ 0x9EED: 0x6A72,
+ 0x9EEE: 0x6A36,
+ 0x9EEF: 0x6A78,
+ 0x9EF0: 0x6A47,
+ 0x9EF1: 0x6A62,
+ 0x9EF2: 0x6A59,
+ 0x9EF3: 0x6A66,
+ 0x9EF4: 0x6A48,
+ 0x9EF5: 0x6A38,
+ 0x9EF6: 0x6A22,
+ 0x9EF7: 0x6A90,
+ 0x9EF8: 0x6A8D,
+ 0x9EF9: 0x6AA0,
+ 0x9EFA: 0x6A84,
+ 0x9EFB: 0x6AA2,
+ 0x9EFC: 0x6AA3,
+ 0x9F40: 0x6A97,
+ 0x9F41: 0x8617,
+ 0x9F42: 0x6ABB,
+ 0x9F43: 0x6AC3,
+ 0x9F44: 0x6AC2,
+ 0x9F45: 0x6AB8,
+ 0x9F46: 0x6AB3,
+ 0x9F47: 0x6AAC,
+ 0x9F48: 0x6ADE,
+ 0x9F49: 0x6AD1,
+ 0x9F4A: 0x6ADF,
+ 0x9F4B: 0x6AAA,
+ 0x9F4C: 0x6ADA,
+ 0x9F4D: 0x6AEA,
+ 0x9F4E: 0x6AFB,
+ 0x9F4F: 0x6B05,
+ 0x9F50: 0x8616,
+ 0x9F51: 0x6AFA,
+ 0x9F52: 0x6B12,
+ 0x9F53: 0x6B16,
+ 0x9F54: 0x9B31,
+ 0x9F55: 0x6B1F,
+ 0x9F56: 0x6B38,
+ 0x9F57: 0x6B37,
+ 0x9F58: 0x76DC,
+ 0x9F59: 0x6B39,
+ 0x9F5A: 0x98EE,
+ 0x9F5B: 0x6B47,
+ 0x9F5C: 0x6B43,
+ 0x9F5D: 0x6B49,
+ 0x9F5E: 0x6B50,
+ 0x9F5F: 0x6B59,
+ 0x9F60: 0x6B54,
+ 0x9F61: 0x6B5B,
+ 0x9F62: 0x6B5F,
+ 0x9F63: 0x6B61,
+ 0x9F64: 0x6B78,
+ 0x9F65: 0x6B79,
+ 0x9F66: 0x6B7F,
+ 0x9F67: 0x6B80,
+ 0x9F68: 0x6B84,
+ 0x9F69: 0x6B83,
+ 0x9F6A: 0x6B8D,
+ 0x9F6B: 0x6B98,
+ 0x9F6C: 0x6B95,
+ 0x9F6D: 0x6B9E,
+ 0x9F6E: 0x6BA4,
+ 0x9F6F: 0x6BAA,
+ 0x9F70: 0x6BAB,
+ 0x9F71: 0x6BAF,
+ 0x9F72: 0x6BB2,
+ 0x9F73: 0x6BB1,
+ 0x9F74: 0x6BB3,
+ 0x9F75: 0x6BB7,
+ 0x9F76: 0x6BBC,
+ 0x9F77: 0x6BC6,
+ 0x9F78: 0x6BCB,
+ 0x9F79: 0x6BD3,
+ 0x9F7A: 0x6BDF,
+ 0x9F7B: 0x6BEC,
+ 0x9F7C: 0x6BEB,
+ 0x9F7D: 0x6BF3,
+ 0x9F7E: 0x6BEF,
+ 0x9F80: 0x9EBE,
+ 0x9F81: 0x6C08,
+ 0x9F82: 0x6C13,
+ 0x9F83: 0x6C14,
+ 0x9F84: 0x6C1B,
+ 0x9F85: 0x6C24,
+ 0x9F86: 0x6C23,
+ 0x9F87: 0x6C5E,
+ 0x9F88: 0x6C55,
+ 0x9F89: 0x6C62,
+ 0x9F8A: 0x6C6A,
+ 0x9F8B: 0x6C82,
+ 0x9F8C: 0x6C8D,
+ 0x9F8D: 0x6C9A,
+ 0x9F8E: 0x6C81,
+ 0x9F8F: 0x6C9B,
+ 0x9F90: 0x6C7E,
+ 0x9F91: 0x6C68,
+ 0x9F92: 0x6C73,
+ 0x9F93: 0x6C92,
+ 0x9F94: 0x6C90,
+ 0x9F95: 0x6CC4,
+ 0x9F96: 0x6CF1,
+ 0x9F97: 0x6CD3,
+ 0x9F98: 0x6CBD,
+ 0x9F99: 0x6CD7,
+ 0x9F9A: 0x6CC5,
+ 0x9F9B: 0x6CDD,
+ 0x9F9C: 0x6CAE,
+ 0x9F9D: 0x6CB1,
+ 0x9F9E: 0x6CBE,
+ 0x9F9F: 0x6CBA,
+ 0x9FA0: 0x6CDB,
+ 0x9FA1: 0x6CEF,
+ 0x9FA2: 0x6CD9,
+ 0x9FA3: 0x6CEA,
+ 0x9FA4: 0x6D1F,
+ 0x9FA5: 0x884D,
+ 0x9FA6: 0x6D36,
+ 0x9FA7: 0x6D2B,
+ 0x9FA8: 0x6D3D,
+ 0x9FA9: 0x6D38,
+ 0x9FAA: 0x6D19,
+ 0x9FAB: 0x6D35,
+ 0x9FAC: 0x6D33,
+ 0x9FAD: 0x6D12,
+ 0x9FAE: 0x6D0C,
+ 0x9FAF: 0x6D63,
+ 0x9FB0: 0x6D93,
+ 0x9FB1: 0x6D64,
+ 0x9FB2: 0x6D5A,
+ 0x9FB3: 0x6D79,
+ 0x9FB4: 0x6D59,
+ 0x9FB5: 0x6D8E,
+ 0x9FB6: 0x6D95,
+ 0x9FB7: 0x6FE4,
+ 0x9FB8: 0x6D85,
+ 0x9FB9: 0x6DF9,
+ 0x9FBA: 0x6E15,
+ 0x9FBB: 0x6E0A,
+ 0x9FBC: 0x6DB5,
+ 0x9FBD: 0x6DC7,
+ 0x9FBE: 0x6DE6,
+ 0x9FBF: 0x6DB8,
+ 0x9FC0: 0x6DC6,
+ 0x9FC1: 0x6DEC,
+ 0x9FC2: 0x6DDE,
+ 0x9FC3: 0x6DCC,
+ 0x9FC4: 0x6DE8,
+ 0x9FC5: 0x6DD2,
+ 0x9FC6: 0x6DC5,
+ 0x9FC7: 0x6DFA,
+ 0x9FC8: 0x6DD9,
+ 0x9FC9: 0x6DE4,
+ 0x9FCA: 0x6DD5,
+ 0x9FCB: 0x6DEA,
+ 0x9FCC: 0x6DEE,
+ 0x9FCD: 0x6E2D,
+ 0x9FCE: 0x6E6E,
+ 0x9FCF: 0x6E2E,
+ 0x9FD0: 0x6E19,
+ 0x9FD1: 0x6E72,
+ 0x9FD2: 0x6E5F,
+ 0x9FD3: 0x6E3E,
+ 0x9FD4: 0x6E23,
+ 0x9FD5: 0x6E6B,
+ 0x9FD6: 0x6E2B,
+ 0x9FD7: 0x6E76,
+ 0x9FD8: 0x6E4D,
+ 0x9FD9: 0x6E1F,
+ 0x9FDA: 0x6E43,
+ 0x9FDB: 0x6E3A,
+ 0x9FDC: 0x6E4E,
+ 0x9FDD: 0x6E24,
+ 0x9FDE: 0x6EFF,
+ 0x9FDF: 0x6E1D,
+ 0x9FE0: 0x6E38,
+ 0x9FE1: 0x6E82,
+ 0x9FE2: 0x6EAA,
+ 0x9FE3: 0x6E98,
+ 0x9FE4: 0x6EC9,
+ 0x9FE5: 0x6EB7,
+ 0x9FE6: 0x6ED3,
+ 0x9FE7: 0x6EBD,
+ 0x9FE8: 0x6EAF,
+ 0x9FE9: 0x6EC4,
+ 0x9FEA: 0x6EB2,
+ 0x9FEB: 0x6ED4,
+ 0x9FEC: 0x6ED5,
+ 0x9FED: 0x6E8F,
+ 0x9FEE: 0x6EA5,
+ 0x9FEF: 0x6EC2,
+ 0x9FF0: 0x6E9F,
+ 0x9FF1: 0x6F41,
+ 0x9FF2: 0x6F11,
+ 0x9FF3: 0x704C,
+ 0x9FF4: 0x6EEC,
+ 0x9FF5: 0x6EF8,
+ 0x9FF6: 0x6EFE,
+ 0x9FF7: 0x6F3F,
+ 0x9FF8: 0x6EF2,
+ 0x9FF9: 0x6F31,
+ 0x9FFA: 0x6EEF,
+ 0x9FFB: 0x6F32,
+ 0x9FFC: 0x6ECC,
+ 0xA1: 0xFF61,
+ 0xA2: 0xFF62,
+ 0xA3: 0xFF63,
+ 0xA4: 0xFF64,
+ 0xA5: 0xFF65,
+ 0xA6: 0xFF66,
+ 0xA7: 0xFF67,
+ 0xA8: 0xFF68,
+ 0xA9: 0xFF69,
+ 0xAA: 0xFF6A,
+ 0xAB: 0xFF6B,
+ 0xAC: 0xFF6C,
+ 0xAD: 0xFF6D,
+ 0xAE: 0xFF6E,
+ 0xAF: 0xFF6F,
+ 0xB0: 0xFF70,
+ 0xB1: 0xFF71,
+ 0xB2: 0xFF72,
+ 0xB3: 0xFF73,
+ 0xB4: 0xFF74,
+ 0xB5: 0xFF75,
+ 0xB6: 0xFF76,
+ 0xB7: 0xFF77,
+ 0xB8: 0xFF78,
+ 0xB9: 0xFF79,
+ 0xBA: 0xFF7A,
+ 0xBB: 0xFF7B,
+ 0xBC: 0xFF7C,
+ 0xBD: 0xFF7D,
+ 0xBE: 0xFF7E,
+ 0xBF: 0xFF7F,
+ 0xC0: 0xFF80,
+ 0xC1: 0xFF81,
+ 0xC2: 0xFF82,
+ 0xC3: 0xFF83,
+ 0xC4: 0xFF84,
+ 0xC5: 0xFF85,
+ 0xC6: 0xFF86,
+ 0xC7: 0xFF87,
+ 0xC8: 0xFF88,
+ 0xC9: 0xFF89,
+ 0xCA: 0xFF8A,
+ 0xCB: 0xFF8B,
+ 0xCC: 0xFF8C,
+ 0xCD: 0xFF8D,
+ 0xCE: 0xFF8E,
+ 0xCF: 0xFF8F,
+ 0xD0: 0xFF90,
+ 0xD1: 0xFF91,
+ 0xD2: 0xFF92,
+ 0xD3: 0xFF93,
+ 0xD4: 0xFF94,
+ 0xD5: 0xFF95,
+ 0xD6: 0xFF96,
+ 0xD7: 0xFF97,
+ 0xD8: 0xFF98,
+ 0xD9: 0xFF99,
+ 0xDA: 0xFF9A,
+ 0xDB: 0xFF9B,
+ 0xDC: 0xFF9C,
+ 0xDD: 0xFF9D,
+ 0xDE: 0xFF9E,
+ 0xDF: 0xFF9F,
+ 0xE040: 0x6F3E,
+ 0xE041: 0x6F13,
+ 0xE042: 0x6EF7,
+ 0xE043: 0x6F86,
+ 0xE044: 0x6F7A,
+ 0xE045: 0x6F78,
+ 0xE046: 0x6F81,
+ 0xE047: 0x6F80,
+ 0xE048: 0x6F6F,
+ 0xE049: 0x6F5B,
+ 0xE04A: 0x6FF3,
+ 0xE04B: 0x6F6D,
+ 0xE04C: 0x6F82,
+ 0xE04D: 0x6F7C,
+ 0xE04E: 0x6F58,
+ 0xE04F: 0x6F8E,
+ 0xE050: 0x6F91,
+ 0xE051: 0x6FC2,
+ 0xE052: 0x6F66,
+ 0xE053: 0x6FB3,
+ 0xE054: 0x6FA3,
+ 0xE055: 0x6FA1,
+ 0xE056: 0x6FA4,
+ 0xE057: 0x6FB9,
+ 0xE058: 0x6FC6,
+ 0xE059: 0x6FAA,
+ 0xE05A: 0x6FDF,
+ 0xE05B: 0x6FD5,
+ 0xE05C: 0x6FEC,
+ 0xE05D: 0x6FD4,
+ 0xE05E: 0x6FD8,
+ 0xE05F: 0x6FF1,
+ 0xE060: 0x6FEE,
+ 0xE061: 0x6FDB,
+ 0xE062: 0x7009,
+ 0xE063: 0x700B,
+ 0xE064: 0x6FFA,
+ 0xE065: 0x7011,
+ 0xE066: 0x7001,
+ 0xE067: 0x700F,
+ 0xE068: 0x6FFE,
+ 0xE069: 0x701B,
+ 0xE06A: 0x701A,
+ 0xE06B: 0x6F74,
+ 0xE06C: 0x701D,
+ 0xE06D: 0x7018,
+ 0xE06E: 0x701F,
+ 0xE06F: 0x7030,
+ 0xE070: 0x703E,
+ 0xE071: 0x7032,
+ 0xE072: 0x7051,
+ 0xE073: 0x7063,
+ 0xE074: 0x7099,
+ 0xE075: 0x7092,
+ 0xE076: 0x70AF,
+ 0xE077: 0x70F1,
+ 0xE078: 0x70AC,
+ 0xE079: 0x70B8,
+ 0xE07A: 0x70B3,
+ 0xE07B: 0x70AE,
+ 0xE07C: 0x70DF,
+ 0xE07D: 0x70CB,
+ 0xE07E: 0x70DD,
+ 0xE080: 0x70D9,
+ 0xE081: 0x7109,
+ 0xE082: 0x70FD,
+ 0xE083: 0x711C,
+ 0xE084: 0x7119,
+ 0xE085: 0x7165,
+ 0xE086: 0x7155,
+ 0xE087: 0x7188,
+ 0xE088: 0x7166,
+ 0xE089: 0x7162,
+ 0xE08A: 0x714C,
+ 0xE08B: 0x7156,
+ 0xE08C: 0x716C,
+ 0xE08D: 0x718F,
+ 0xE08E: 0x71FB,
+ 0xE08F: 0x7184,
+ 0xE090: 0x7195,
+ 0xE091: 0x71A8,
+ 0xE092: 0x71AC,
+ 0xE093: 0x71D7,
+ 0xE094: 0x71B9,
+ 0xE095: 0x71BE,
+ 0xE096: 0x71D2,
+ 0xE097: 0x71C9,
+ 0xE098: 0x71D4,
+ 0xE099: 0x71CE,
+ 0xE09A: 0x71E0,
+ 0xE09B: 0x71EC,
+ 0xE09C: 0x71E7,
+ 0xE09D: 0x71F5,
+ 0xE09E: 0x71FC,
+ 0xE09F: 0x71F9,
+ 0xE0A0: 0x71FF,
+ 0xE0A1: 0x720D,
+ 0xE0A2: 0x7210,
+ 0xE0A3: 0x721B,
+ 0xE0A4: 0x7228,
+ 0xE0A5: 0x722D,
+ 0xE0A6: 0x722C,
+ 0xE0A7: 0x7230,
+ 0xE0A8: 0x7232,
+ 0xE0A9: 0x723B,
+ 0xE0AA: 0x723C,
+ 0xE0AB: 0x723F,
+ 0xE0AC: 0x7240,
+ 0xE0AD: 0x7246,
+ 0xE0AE: 0x724B,
+ 0xE0AF: 0x7258,
+ 0xE0B0: 0x7274,
+ 0xE0B1: 0x727E,
+ 0xE0B2: 0x7282,
+ 0xE0B3: 0x7281,
+ 0xE0B4: 0x7287,
+ 0xE0B5: 0x7292,
+ 0xE0B6: 0x7296,
+ 0xE0B7: 0x72A2,
+ 0xE0B8: 0x72A7,
+ 0xE0B9: 0x72B9,
+ 0xE0BA: 0x72B2,
+ 0xE0BB: 0x72C3,
+ 0xE0BC: 0x72C6,
+ 0xE0BD: 0x72C4,
+ 0xE0BE: 0x72CE,
+ 0xE0BF: 0x72D2,
+ 0xE0C0: 0x72E2,
+ 0xE0C1: 0x72E0,
+ 0xE0C2: 0x72E1,
+ 0xE0C3: 0x72F9,
+ 0xE0C4: 0x72F7,
+ 0xE0C5: 0x500F,
+ 0xE0C6: 0x7317,
+ 0xE0C7: 0x730A,
+ 0xE0C8: 0x731C,
+ 0xE0C9: 0x7316,
+ 0xE0CA: 0x731D,
+ 0xE0CB: 0x7334,
+ 0xE0CC: 0x732F,
+ 0xE0CD: 0x7329,
+ 0xE0CE: 0x7325,
+ 0xE0CF: 0x733E,
+ 0xE0D0: 0x734E,
+ 0xE0D1: 0x734F,
+ 0xE0D2: 0x9ED8,
+ 0xE0D3: 0x7357,
+ 0xE0D4: 0x736A,
+ 0xE0D5: 0x7368,
+ 0xE0D6: 0x7370,
+ 0xE0D7: 0x7378,
+ 0xE0D8: 0x7375,
+ 0xE0D9: 0x737B,
+ 0xE0DA: 0x737A,
+ 0xE0DB: 0x73C8,
+ 0xE0DC: 0x73B3,
+ 0xE0DD: 0x73CE,
+ 0xE0DE: 0x73BB,
+ 0xE0DF: 0x73C0,
+ 0xE0E0: 0x73E5,
+ 0xE0E1: 0x73EE,
+ 0xE0E2: 0x73DE,
+ 0xE0E3: 0x74A2,
+ 0xE0E4: 0x7405,
+ 0xE0E5: 0x746F,
+ 0xE0E6: 0x7425,
+ 0xE0E7: 0x73F8,
+ 0xE0E8: 0x7432,
+ 0xE0E9: 0x743A,
+ 0xE0EA: 0x7455,
+ 0xE0EB: 0x743F,
+ 0xE0EC: 0x745F,
+ 0xE0ED: 0x7459,
+ 0xE0EE: 0x7441,
+ 0xE0EF: 0x745C,
+ 0xE0F0: 0x7469,
+ 0xE0F1: 0x7470,
+ 0xE0F2: 0x7463,
+ 0xE0F3: 0x746A,
+ 0xE0F4: 0x7476,
+ 0xE0F5: 0x747E,
+ 0xE0F6: 0x748B,
+ 0xE0F7: 0x749E,
+ 0xE0F8: 0x74A7,
+ 0xE0F9: 0x74CA,
+ 0xE0FA: 0x74CF,
+ 0xE0FB: 0x74D4,
+ 0xE0FC: 0x73F1,
+ 0xE140: 0x74E0,
+ 0xE141: 0x74E3,
+ 0xE142: 0x74E7,
+ 0xE143: 0x74E9,
+ 0xE144: 0x74EE,
+ 0xE145: 0x74F2,
+ 0xE146: 0x74F0,
+ 0xE147: 0x74F1,
+ 0xE148: 0x74F8,
+ 0xE149: 0x74F7,
+ 0xE14A: 0x7504,
+ 0xE14B: 0x7503,
+ 0xE14C: 0x7505,
+ 0xE14D: 0x750C,
+ 0xE14E: 0x750E,
+ 0xE14F: 0x750D,
+ 0xE150: 0x7515,
+ 0xE151: 0x7513,
+ 0xE152: 0x751E,
+ 0xE153: 0x7526,
+ 0xE154: 0x752C,
+ 0xE155: 0x753C,
+ 0xE156: 0x7544,
+ 0xE157: 0x754D,
+ 0xE158: 0x754A,
+ 0xE159: 0x7549,
+ 0xE15A: 0x755B,
+ 0xE15B: 0x7546,
+ 0xE15C: 0x755A,
+ 0xE15D: 0x7569,
+ 0xE15E: 0x7564,
+ 0xE15F: 0x7567,
+ 0xE160: 0x756B,
+ 0xE161: 0x756D,
+ 0xE162: 0x7578,
+ 0xE163: 0x7576,
+ 0xE164: 0x7586,
+ 0xE165: 0x7587,
+ 0xE166: 0x7574,
+ 0xE167: 0x758A,
+ 0xE168: 0x7589,
+ 0xE169: 0x7582,
+ 0xE16A: 0x7594,
+ 0xE16B: 0x759A,
+ 0xE16C: 0x759D,
+ 0xE16D: 0x75A5,
+ 0xE16E: 0x75A3,
+ 0xE16F: 0x75C2,
+ 0xE170: 0x75B3,
+ 0xE171: 0x75C3,
+ 0xE172: 0x75B5,
+ 0xE173: 0x75BD,
+ 0xE174: 0x75B8,
+ 0xE175: 0x75BC,
+ 0xE176: 0x75B1,
+ 0xE177: 0x75CD,
+ 0xE178: 0x75CA,
+ 0xE179: 0x75D2,
+ 0xE17A: 0x75D9,
+ 0xE17B: 0x75E3,
+ 0xE17C: 0x75DE,
+ 0xE17D: 0x75FE,
+ 0xE17E: 0x75FF,
+ 0xE180: 0x75FC,
+ 0xE181: 0x7601,
+ 0xE182: 0x75F0,
+ 0xE183: 0x75FA,
+ 0xE184: 0x75F2,
+ 0xE185: 0x75F3,
+ 0xE186: 0x760B,
+ 0xE187: 0x760D,
+ 0xE188: 0x7609,
+ 0xE189: 0x761F,
+ 0xE18A: 0x7627,
+ 0xE18B: 0x7620,
+ 0xE18C: 0x7621,
+ 0xE18D: 0x7622,
+ 0xE18E: 0x7624,
+ 0xE18F: 0x7634,
+ 0xE190: 0x7630,
+ 0xE191: 0x763B,
+ 0xE192: 0x7647,
+ 0xE193: 0x7648,
+ 0xE194: 0x7646,
+ 0xE195: 0x765C,
+ 0xE196: 0x7658,
+ 0xE197: 0x7661,
+ 0xE198: 0x7662,
+ 0xE199: 0x7668,
+ 0xE19A: 0x7669,
+ 0xE19B: 0x766A,
+ 0xE19C: 0x7667,
+ 0xE19D: 0x766C,
+ 0xE19E: 0x7670,
+ 0xE19F: 0x7672,
+ 0xE1A0: 0x7676,
+ 0xE1A1: 0x7678,
+ 0xE1A2: 0x767C,
+ 0xE1A3: 0x7680,
+ 0xE1A4: 0x7683,
+ 0xE1A5: 0x7688,
+ 0xE1A6: 0x768B,
+ 0xE1A7: 0x768E,
+ 0xE1A8: 0x7696,
+ 0xE1A9: 0x7693,
+ 0xE1AA: 0x7699,
+ 0xE1AB: 0x769A,
+ 0xE1AC: 0x76B0,
+ 0xE1AD: 0x76B4,
+ 0xE1AE: 0x76B8,
+ 0xE1AF: 0x76B9,
+ 0xE1B0: 0x76BA,
+ 0xE1B1: 0x76C2,
+ 0xE1B2: 0x76CD,
+ 0xE1B3: 0x76D6,
+ 0xE1B4: 0x76D2,
+ 0xE1B5: 0x76DE,
+ 0xE1B6: 0x76E1,
+ 0xE1B7: 0x76E5,
+ 0xE1B8: 0x76E7,
+ 0xE1B9: 0x76EA,
+ 0xE1BA: 0x862F,
+ 0xE1BB: 0x76FB,
+ 0xE1BC: 0x7708,
+ 0xE1BD: 0x7707,
+ 0xE1BE: 0x7704,
+ 0xE1BF: 0x7729,
+ 0xE1C0: 0x7724,
+ 0xE1C1: 0x771E,
+ 0xE1C2: 0x7725,
+ 0xE1C3: 0x7726,
+ 0xE1C4: 0x771B,
+ 0xE1C5: 0x7737,
+ 0xE1C6: 0x7738,
+ 0xE1C7: 0x7747,
+ 0xE1C8: 0x775A,
+ 0xE1C9: 0x7768,
+ 0xE1CA: 0x776B,
+ 0xE1CB: 0x775B,
+ 0xE1CC: 0x7765,
+ 0xE1CD: 0x777F,
+ 0xE1CE: 0x777E,
+ 0xE1CF: 0x7779,
+ 0xE1D0: 0x778E,
+ 0xE1D1: 0x778B,
+ 0xE1D2: 0x7791,
+ 0xE1D3: 0x77A0,
+ 0xE1D4: 0x779E,
+ 0xE1D5: 0x77B0,
+ 0xE1D6: 0x77B6,
+ 0xE1D7: 0x77B9,
+ 0xE1D8: 0x77BF,
+ 0xE1D9: 0x77BC,
+ 0xE1DA: 0x77BD,
+ 0xE1DB: 0x77BB,
+ 0xE1DC: 0x77C7,
+ 0xE1DD: 0x77CD,
+ 0xE1DE: 0x77D7,
+ 0xE1DF: 0x77DA,
+ 0xE1E0: 0x77DC,
+ 0xE1E1: 0x77E3,
+ 0xE1E2: 0x77EE,
+ 0xE1E3: 0x77FC,
+ 0xE1E4: 0x780C,
+ 0xE1E5: 0x7812,
+ 0xE1E6: 0x7926,
+ 0xE1E7: 0x7820,
+ 0xE1E8: 0x792A,
+ 0xE1E9: 0x7845,
+ 0xE1EA: 0x788E,
+ 0xE1EB: 0x7874,
+ 0xE1EC: 0x7886,
+ 0xE1ED: 0x787C,
+ 0xE1EE: 0x789A,
+ 0xE1EF: 0x788C,
+ 0xE1F0: 0x78A3,
+ 0xE1F1: 0x78B5,
+ 0xE1F2: 0x78AA,
+ 0xE1F3: 0x78AF,
+ 0xE1F4: 0x78D1,
+ 0xE1F5: 0x78C6,
+ 0xE1F6: 0x78CB,
+ 0xE1F7: 0x78D4,
+ 0xE1F8: 0x78BE,
+ 0xE1F9: 0x78BC,
+ 0xE1FA: 0x78C5,
+ 0xE1FB: 0x78CA,
+ 0xE1FC: 0x78EC,
+ 0xE240: 0x78E7,
+ 0xE241: 0x78DA,
+ 0xE242: 0x78FD,
+ 0xE243: 0x78F4,
+ 0xE244: 0x7907,
+ 0xE245: 0x7912,
+ 0xE246: 0x7911,
+ 0xE247: 0x7919,
+ 0xE248: 0x792C,
+ 0xE249: 0x792B,
+ 0xE24A: 0x7940,
+ 0xE24B: 0x7960,
+ 0xE24C: 0x7957,
+ 0xE24D: 0x795F,
+ 0xE24E: 0x795A,
+ 0xE24F: 0x7955,
+ 0xE250: 0x7953,
+ 0xE251: 0x797A,
+ 0xE252: 0x797F,
+ 0xE253: 0x798A,
+ 0xE254: 0x799D,
+ 0xE255: 0x79A7,
+ 0xE256: 0x9F4B,
+ 0xE257: 0x79AA,
+ 0xE258: 0x79AE,
+ 0xE259: 0x79B3,
+ 0xE25A: 0x79B9,
+ 0xE25B: 0x79BA,
+ 0xE25C: 0x79C9,
+ 0xE25D: 0x79D5,
+ 0xE25E: 0x79E7,
+ 0xE25F: 0x79EC,
+ 0xE260: 0x79E1,
+ 0xE261: 0x79E3,
+ 0xE262: 0x7A08,
+ 0xE263: 0x7A0D,
+ 0xE264: 0x7A18,
+ 0xE265: 0x7A19,
+ 0xE266: 0x7A20,
+ 0xE267: 0x7A1F,
+ 0xE268: 0x7980,
+ 0xE269: 0x7A31,
+ 0xE26A: 0x7A3B,
+ 0xE26B: 0x7A3E,
+ 0xE26C: 0x7A37,
+ 0xE26D: 0x7A43,
+ 0xE26E: 0x7A57,
+ 0xE26F: 0x7A49,
+ 0xE270: 0x7A61,
+ 0xE271: 0x7A62,
+ 0xE272: 0x7A69,
+ 0xE273: 0x9F9D,
+ 0xE274: 0x7A70,
+ 0xE275: 0x7A79,
+ 0xE276: 0x7A7D,
+ 0xE277: 0x7A88,
+ 0xE278: 0x7A97,
+ 0xE279: 0x7A95,
+ 0xE27A: 0x7A98,
+ 0xE27B: 0x7A96,
+ 0xE27C: 0x7AA9,
+ 0xE27D: 0x7AC8,
+ 0xE27E: 0x7AB0,
+ 0xE280: 0x7AB6,
+ 0xE281: 0x7AC5,
+ 0xE282: 0x7AC4,
+ 0xE283: 0x7ABF,
+ 0xE284: 0x9083,
+ 0xE285: 0x7AC7,
+ 0xE286: 0x7ACA,
+ 0xE287: 0x7ACD,
+ 0xE288: 0x7ACF,
+ 0xE289: 0x7AD5,
+ 0xE28A: 0x7AD3,
+ 0xE28B: 0x7AD9,
+ 0xE28C: 0x7ADA,
+ 0xE28D: 0x7ADD,
+ 0xE28E: 0x7AE1,
+ 0xE28F: 0x7AE2,
+ 0xE290: 0x7AE6,
+ 0xE291: 0x7AED,
+ 0xE292: 0x7AF0,
+ 0xE293: 0x7B02,
+ 0xE294: 0x7B0F,
+ 0xE295: 0x7B0A,
+ 0xE296: 0x7B06,
+ 0xE297: 0x7B33,
+ 0xE298: 0x7B18,
+ 0xE299: 0x7B19,
+ 0xE29A: 0x7B1E,
+ 0xE29B: 0x7B35,
+ 0xE29C: 0x7B28,
+ 0xE29D: 0x7B36,
+ 0xE29E: 0x7B50,
+ 0xE29F: 0x7B7A,
+ 0xE2A0: 0x7B04,
+ 0xE2A1: 0x7B4D,
+ 0xE2A2: 0x7B0B,
+ 0xE2A3: 0x7B4C,
+ 0xE2A4: 0x7B45,
+ 0xE2A5: 0x7B75,
+ 0xE2A6: 0x7B65,
+ 0xE2A7: 0x7B74,
+ 0xE2A8: 0x7B67,
+ 0xE2A9: 0x7B70,
+ 0xE2AA: 0x7B71,
+ 0xE2AB: 0x7B6C,
+ 0xE2AC: 0x7B6E,
+ 0xE2AD: 0x7B9D,
+ 0xE2AE: 0x7B98,
+ 0xE2AF: 0x7B9F,
+ 0xE2B0: 0x7B8D,
+ 0xE2B1: 0x7B9C,
+ 0xE2B2: 0x7B9A,
+ 0xE2B3: 0x7B8B,
+ 0xE2B4: 0x7B92,
+ 0xE2B5: 0x7B8F,
+ 0xE2B6: 0x7B5D,
+ 0xE2B7: 0x7B99,
+ 0xE2B8: 0x7BCB,
+ 0xE2B9: 0x7BC1,
+ 0xE2BA: 0x7BCC,
+ 0xE2BB: 0x7BCF,
+ 0xE2BC: 0x7BB4,
+ 0xE2BD: 0x7BC6,
+ 0xE2BE: 0x7BDD,
+ 0xE2BF: 0x7BE9,
+ 0xE2C0: 0x7C11,
+ 0xE2C1: 0x7C14,
+ 0xE2C2: 0x7BE6,
+ 0xE2C3: 0x7BE5,
+ 0xE2C4: 0x7C60,
+ 0xE2C5: 0x7C00,
+ 0xE2C6: 0x7C07,
+ 0xE2C7: 0x7C13,
+ 0xE2C8: 0x7BF3,
+ 0xE2C9: 0x7BF7,
+ 0xE2CA: 0x7C17,
+ 0xE2CB: 0x7C0D,
+ 0xE2CC: 0x7BF6,
+ 0xE2CD: 0x7C23,
+ 0xE2CE: 0x7C27,
+ 0xE2CF: 0x7C2A,
+ 0xE2D0: 0x7C1F,
+ 0xE2D1: 0x7C37,
+ 0xE2D2: 0x7C2B,
+ 0xE2D3: 0x7C3D,
+ 0xE2D4: 0x7C4C,
+ 0xE2D5: 0x7C43,
+ 0xE2D6: 0x7C54,
+ 0xE2D7: 0x7C4F,
+ 0xE2D8: 0x7C40,
+ 0xE2D9: 0x7C50,
+ 0xE2DA: 0x7C58,
+ 0xE2DB: 0x7C5F,
+ 0xE2DC: 0x7C64,
+ 0xE2DD: 0x7C56,
+ 0xE2DE: 0x7C65,
+ 0xE2DF: 0x7C6C,
+ 0xE2E0: 0x7C75,
+ 0xE2E1: 0x7C83,
+ 0xE2E2: 0x7C90,
+ 0xE2E3: 0x7CA4,
+ 0xE2E4: 0x7CAD,
+ 0xE2E5: 0x7CA2,
+ 0xE2E6: 0x7CAB,
+ 0xE2E7: 0x7CA1,
+ 0xE2E8: 0x7CA8,
+ 0xE2E9: 0x7CB3,
+ 0xE2EA: 0x7CB2,
+ 0xE2EB: 0x7CB1,
+ 0xE2EC: 0x7CAE,
+ 0xE2ED: 0x7CB9,
+ 0xE2EE: 0x7CBD,
+ 0xE2EF: 0x7CC0,
+ 0xE2F0: 0x7CC5,
+ 0xE2F1: 0x7CC2,
+ 0xE2F2: 0x7CD8,
+ 0xE2F3: 0x7CD2,
+ 0xE2F4: 0x7CDC,
+ 0xE2F5: 0x7CE2,
+ 0xE2F6: 0x9B3B,
+ 0xE2F7: 0x7CEF,
+ 0xE2F8: 0x7CF2,
+ 0xE2F9: 0x7CF4,
+ 0xE2FA: 0x7CF6,
+ 0xE2FB: 0x7CFA,
+ 0xE2FC: 0x7D06,
+ 0xE340: 0x7D02,
+ 0xE341: 0x7D1C,
+ 0xE342: 0x7D15,
+ 0xE343: 0x7D0A,
+ 0xE344: 0x7D45,
+ 0xE345: 0x7D4B,
+ 0xE346: 0x7D2E,
+ 0xE347: 0x7D32,
+ 0xE348: 0x7D3F,
+ 0xE349: 0x7D35,
+ 0xE34A: 0x7D46,
+ 0xE34B: 0x7D73,
+ 0xE34C: 0x7D56,
+ 0xE34D: 0x7D4E,
+ 0xE34E: 0x7D72,
+ 0xE34F: 0x7D68,
+ 0xE350: 0x7D6E,
+ 0xE351: 0x7D4F,
+ 0xE352: 0x7D63,
+ 0xE353: 0x7D93,
+ 0xE354: 0x7D89,
+ 0xE355: 0x7D5B,
+ 0xE356: 0x7D8F,
+ 0xE357: 0x7D7D,
+ 0xE358: 0x7D9B,
+ 0xE359: 0x7DBA,
+ 0xE35A: 0x7DAE,
+ 0xE35B: 0x7DA3,
+ 0xE35C: 0x7DB5,
+ 0xE35D: 0x7DC7,
+ 0xE35E: 0x7DBD,
+ 0xE35F: 0x7DAB,
+ 0xE360: 0x7E3D,
+ 0xE361: 0x7DA2,
+ 0xE362: 0x7DAF,
+ 0xE363: 0x7DDC,
+ 0xE364: 0x7DB8,
+ 0xE365: 0x7D9F,
+ 0xE366: 0x7DB0,
+ 0xE367: 0x7DD8,
+ 0xE368: 0x7DDD,
+ 0xE369: 0x7DE4,
+ 0xE36A: 0x7DDE,
+ 0xE36B: 0x7DFB,
+ 0xE36C: 0x7DF2,
+ 0xE36D: 0x7DE1,
+ 0xE36E: 0x7E05,
+ 0xE36F: 0x7E0A,
+ 0xE370: 0x7E23,
+ 0xE371: 0x7E21,
+ 0xE372: 0x7E12,
+ 0xE373: 0x7E31,
+ 0xE374: 0x7E1F,
+ 0xE375: 0x7E09,
+ 0xE376: 0x7E0B,
+ 0xE377: 0x7E22,
+ 0xE378: 0x7E46,
+ 0xE379: 0x7E66,
+ 0xE37A: 0x7E3B,
+ 0xE37B: 0x7E35,
+ 0xE37C: 0x7E39,
+ 0xE37D: 0x7E43,
+ 0xE37E: 0x7E37,
+ 0xE380: 0x7E32,
+ 0xE381: 0x7E3A,
+ 0xE382: 0x7E67,
+ 0xE383: 0x7E5D,
+ 0xE384: 0x7E56,
+ 0xE385: 0x7E5E,
+ 0xE386: 0x7E59,
+ 0xE387: 0x7E5A,
+ 0xE388: 0x7E79,
+ 0xE389: 0x7E6A,
+ 0xE38A: 0x7E69,
+ 0xE38B: 0x7E7C,
+ 0xE38C: 0x7E7B,
+ 0xE38D: 0x7E83,
+ 0xE38E: 0x7DD5,
+ 0xE38F: 0x7E7D,
+ 0xE390: 0x8FAE,
+ 0xE391: 0x7E7F,
+ 0xE392: 0x7E88,
+ 0xE393: 0x7E89,
+ 0xE394: 0x7E8C,
+ 0xE395: 0x7E92,
+ 0xE396: 0x7E90,
+ 0xE397: 0x7E93,
+ 0xE398: 0x7E94,
+ 0xE399: 0x7E96,
+ 0xE39A: 0x7E8E,
+ 0xE39B: 0x7E9B,
+ 0xE39C: 0x7E9C,
+ 0xE39D: 0x7F38,
+ 0xE39E: 0x7F3A,
+ 0xE39F: 0x7F45,
+ 0xE3A0: 0x7F4C,
+ 0xE3A1: 0x7F4D,
+ 0xE3A2: 0x7F4E,
+ 0xE3A3: 0x7F50,
+ 0xE3A4: 0x7F51,
+ 0xE3A5: 0x7F55,
+ 0xE3A6: 0x7F54,
+ 0xE3A7: 0x7F58,
+ 0xE3A8: 0x7F5F,
+ 0xE3A9: 0x7F60,
+ 0xE3AA: 0x7F68,
+ 0xE3AB: 0x7F69,
+ 0xE3AC: 0x7F67,
+ 0xE3AD: 0x7F78,
+ 0xE3AE: 0x7F82,
+ 0xE3AF: 0x7F86,
+ 0xE3B0: 0x7F83,
+ 0xE3B1: 0x7F88,
+ 0xE3B2: 0x7F87,
+ 0xE3B3: 0x7F8C,
+ 0xE3B4: 0x7F94,
+ 0xE3B5: 0x7F9E,
+ 0xE3B6: 0x7F9D,
+ 0xE3B7: 0x7F9A,
+ 0xE3B8: 0x7FA3,
+ 0xE3B9: 0x7FAF,
+ 0xE3BA: 0x7FB2,
+ 0xE3BB: 0x7FB9,
+ 0xE3BC: 0x7FAE,
+ 0xE3BD: 0x7FB6,
+ 0xE3BE: 0x7FB8,
+ 0xE3BF: 0x8B71,
+ 0xE3C0: 0x7FC5,
+ 0xE3C1: 0x7FC6,
+ 0xE3C2: 0x7FCA,
+ 0xE3C3: 0x7FD5,
+ 0xE3C4: 0x7FD4,
+ 0xE3C5: 0x7FE1,
+ 0xE3C6: 0x7FE6,
+ 0xE3C7: 0x7FE9,
+ 0xE3C8: 0x7FF3,
+ 0xE3C9: 0x7FF9,
+ 0xE3CA: 0x98DC,
+ 0xE3CB: 0x8006,
+ 0xE3CC: 0x8004,
+ 0xE3CD: 0x800B,
+ 0xE3CE: 0x8012,
+ 0xE3CF: 0x8018,
+ 0xE3D0: 0x8019,
+ 0xE3D1: 0x801C,
+ 0xE3D2: 0x8021,
+ 0xE3D3: 0x8028,
+ 0xE3D4: 0x803F,
+ 0xE3D5: 0x803B,
+ 0xE3D6: 0x804A,
+ 0xE3D7: 0x8046,
+ 0xE3D8: 0x8052,
+ 0xE3D9: 0x8058,
+ 0xE3DA: 0x805A,
+ 0xE3DB: 0x805F,
+ 0xE3DC: 0x8062,
+ 0xE3DD: 0x8068,
+ 0xE3DE: 0x8073,
+ 0xE3DF: 0x8072,
+ 0xE3E0: 0x8070,
+ 0xE3E1: 0x8076,
+ 0xE3E2: 0x8079,
+ 0xE3E3: 0x807D,
+ 0xE3E4: 0x807F,
+ 0xE3E5: 0x8084,
+ 0xE3E6: 0x8086,
+ 0xE3E7: 0x8085,
+ 0xE3E8: 0x809B,
+ 0xE3E9: 0x8093,
+ 0xE3EA: 0x809A,
+ 0xE3EB: 0x80AD,
+ 0xE3EC: 0x5190,
+ 0xE3ED: 0x80AC,
+ 0xE3EE: 0x80DB,
+ 0xE3EF: 0x80E5,
+ 0xE3F0: 0x80D9,
+ 0xE3F1: 0x80DD,
+ 0xE3F2: 0x80C4,
+ 0xE3F3: 0x80DA,
+ 0xE3F4: 0x80D6,
+ 0xE3F5: 0x8109,
+ 0xE3F6: 0x80EF,
+ 0xE3F7: 0x80F1,
+ 0xE3F8: 0x811B,
+ 0xE3F9: 0x8129,
+ 0xE3FA: 0x8123,
+ 0xE3FB: 0x812F,
+ 0xE3FC: 0x814B,
+ 0xE440: 0x968B,
+ 0xE441: 0x8146,
+ 0xE442: 0x813E,
+ 0xE443: 0x8153,
+ 0xE444: 0x8151,
+ 0xE445: 0x80FC,
+ 0xE446: 0x8171,
+ 0xE447: 0x816E,
+ 0xE448: 0x8165,
+ 0xE449: 0x8166,
+ 0xE44A: 0x8174,
+ 0xE44B: 0x8183,
+ 0xE44C: 0x8188,
+ 0xE44D: 0x818A,
+ 0xE44E: 0x8180,
+ 0xE44F: 0x8182,
+ 0xE450: 0x81A0,
+ 0xE451: 0x8195,
+ 0xE452: 0x81A4,
+ 0xE453: 0x81A3,
+ 0xE454: 0x815F,
+ 0xE455: 0x8193,
+ 0xE456: 0x81A9,
+ 0xE457: 0x81B0,
+ 0xE458: 0x81B5,
+ 0xE459: 0x81BE,
+ 0xE45A: 0x81B8,
+ 0xE45B: 0x81BD,
+ 0xE45C: 0x81C0,
+ 0xE45D: 0x81C2,
+ 0xE45E: 0x81BA,
+ 0xE45F: 0x81C9,
+ 0xE460: 0x81CD,
+ 0xE461: 0x81D1,
+ 0xE462: 0x81D9,
+ 0xE463: 0x81D8,
+ 0xE464: 0x81C8,
+ 0xE465: 0x81DA,
+ 0xE466: 0x81DF,
+ 0xE467: 0x81E0,
+ 0xE468: 0x81E7,
+ 0xE469: 0x81FA,
+ 0xE46A: 0x81FB,
+ 0xE46B: 0x81FE,
+ 0xE46C: 0x8201,
+ 0xE46D: 0x8202,
+ 0xE46E: 0x8205,
+ 0xE46F: 0x8207,
+ 0xE470: 0x820A,
+ 0xE471: 0x820D,
+ 0xE472: 0x8210,
+ 0xE473: 0x8216,
+ 0xE474: 0x8229,
+ 0xE475: 0x822B,
+ 0xE476: 0x8238,
+ 0xE477: 0x8233,
+ 0xE478: 0x8240,
+ 0xE479: 0x8259,
+ 0xE47A: 0x8258,
+ 0xE47B: 0x825D,
+ 0xE47C: 0x825A,
+ 0xE47D: 0x825F,
+ 0xE47E: 0x8264,
+ 0xE480: 0x8262,
+ 0xE481: 0x8268,
+ 0xE482: 0x826A,
+ 0xE483: 0x826B,
+ 0xE484: 0x822E,
+ 0xE485: 0x8271,
+ 0xE486: 0x8277,
+ 0xE487: 0x8278,
+ 0xE488: 0x827E,
+ 0xE489: 0x828D,
+ 0xE48A: 0x8292,
+ 0xE48B: 0x82AB,
+ 0xE48C: 0x829F,
+ 0xE48D: 0x82BB,
+ 0xE48E: 0x82AC,
+ 0xE48F: 0x82E1,
+ 0xE490: 0x82E3,
+ 0xE491: 0x82DF,
+ 0xE492: 0x82D2,
+ 0xE493: 0x82F4,
+ 0xE494: 0x82F3,
+ 0xE495: 0x82FA,
+ 0xE496: 0x8393,
+ 0xE497: 0x8303,
+ 0xE498: 0x82FB,
+ 0xE499: 0x82F9,
+ 0xE49A: 0x82DE,
+ 0xE49B: 0x8306,
+ 0xE49C: 0x82DC,
+ 0xE49D: 0x8309,
+ 0xE49E: 0x82D9,
+ 0xE49F: 0x8335,
+ 0xE4A0: 0x8334,
+ 0xE4A1: 0x8316,
+ 0xE4A2: 0x8332,
+ 0xE4A3: 0x8331,
+ 0xE4A4: 0x8340,
+ 0xE4A5: 0x8339,
+ 0xE4A6: 0x8350,
+ 0xE4A7: 0x8345,
+ 0xE4A8: 0x832F,
+ 0xE4A9: 0x832B,
+ 0xE4AA: 0x8317,
+ 0xE4AB: 0x8318,
+ 0xE4AC: 0x8385,
+ 0xE4AD: 0x839A,
+ 0xE4AE: 0x83AA,
+ 0xE4AF: 0x839F,
+ 0xE4B0: 0x83A2,
+ 0xE4B1: 0x8396,
+ 0xE4B2: 0x8323,
+ 0xE4B3: 0x838E,
+ 0xE4B4: 0x8387,
+ 0xE4B5: 0x838A,
+ 0xE4B6: 0x837C,
+ 0xE4B7: 0x83B5,
+ 0xE4B8: 0x8373,
+ 0xE4B9: 0x8375,
+ 0xE4BA: 0x83A0,
+ 0xE4BB: 0x8389,
+ 0xE4BC: 0x83A8,
+ 0xE4BD: 0x83F4,
+ 0xE4BE: 0x8413,
+ 0xE4BF: 0x83EB,
+ 0xE4C0: 0x83CE,
+ 0xE4C1: 0x83FD,
+ 0xE4C2: 0x8403,
+ 0xE4C3: 0x83D8,
+ 0xE4C4: 0x840B,
+ 0xE4C5: 0x83C1,
+ 0xE4C6: 0x83F7,
+ 0xE4C7: 0x8407,
+ 0xE4C8: 0x83E0,
+ 0xE4C9: 0x83F2,
+ 0xE4CA: 0x840D,
+ 0xE4CB: 0x8422,
+ 0xE4CC: 0x8420,
+ 0xE4CD: 0x83BD,
+ 0xE4CE: 0x8438,
+ 0xE4CF: 0x8506,
+ 0xE4D0: 0x83FB,
+ 0xE4D1: 0x846D,
+ 0xE4D2: 0x842A,
+ 0xE4D3: 0x843C,
+ 0xE4D4: 0x855A,
+ 0xE4D5: 0x8484,
+ 0xE4D6: 0x8477,
+ 0xE4D7: 0x846B,
+ 0xE4D8: 0x84AD,
+ 0xE4D9: 0x846E,
+ 0xE4DA: 0x8482,
+ 0xE4DB: 0x8469,
+ 0xE4DC: 0x8446,
+ 0xE4DD: 0x842C,
+ 0xE4DE: 0x846F,
+ 0xE4DF: 0x8479,
+ 0xE4E0: 0x8435,
+ 0xE4E1: 0x84CA,
+ 0xE4E2: 0x8462,
+ 0xE4E3: 0x84B9,
+ 0xE4E4: 0x84BF,
+ 0xE4E5: 0x849F,
+ 0xE4E6: 0x84D9,
+ 0xE4E7: 0x84CD,
+ 0xE4E8: 0x84BB,
+ 0xE4E9: 0x84DA,
+ 0xE4EA: 0x84D0,
+ 0xE4EB: 0x84C1,
+ 0xE4EC: 0x84C6,
+ 0xE4ED: 0x84D6,
+ 0xE4EE: 0x84A1,
+ 0xE4EF: 0x8521,
+ 0xE4F0: 0x84FF,
+ 0xE4F1: 0x84F4,
+ 0xE4F2: 0x8517,
+ 0xE4F3: 0x8518,
+ 0xE4F4: 0x852C,
+ 0xE4F5: 0x851F,
+ 0xE4F6: 0x8515,
+ 0xE4F7: 0x8514,
+ 0xE4F8: 0x84FC,
+ 0xE4F9: 0x8540,
+ 0xE4FA: 0x8563,
+ 0xE4FB: 0x8558,
+ 0xE4FC: 0x8548,
+ 0xE540: 0x8541,
+ 0xE541: 0x8602,
+ 0xE542: 0x854B,
+ 0xE543: 0x8555,
+ 0xE544: 0x8580,
+ 0xE545: 0x85A4,
+ 0xE546: 0x8588,
+ 0xE547: 0x8591,
+ 0xE548: 0x858A,
+ 0xE549: 0x85A8,
+ 0xE54A: 0x856D,
+ 0xE54B: 0x8594,
+ 0xE54C: 0x859B,
+ 0xE54D: 0x85EA,
+ 0xE54E: 0x8587,
+ 0xE54F: 0x859C,
+ 0xE550: 0x8577,
+ 0xE551: 0x857E,
+ 0xE552: 0x8590,
+ 0xE553: 0x85C9,
+ 0xE554: 0x85BA,
+ 0xE555: 0x85CF,
+ 0xE556: 0x85B9,
+ 0xE557: 0x85D0,
+ 0xE558: 0x85D5,
+ 0xE559: 0x85DD,
+ 0xE55A: 0x85E5,
+ 0xE55B: 0x85DC,
+ 0xE55C: 0x85F9,
+ 0xE55D: 0x860A,
+ 0xE55E: 0x8613,
+ 0xE55F: 0x860B,
+ 0xE560: 0x85FE,
+ 0xE561: 0x85FA,
+ 0xE562: 0x8606,
+ 0xE563: 0x8622,
+ 0xE564: 0x861A,
+ 0xE565: 0x8630,
+ 0xE566: 0x863F,
+ 0xE567: 0x864D,
+ 0xE568: 0x4E55,
+ 0xE569: 0x8654,
+ 0xE56A: 0x865F,
+ 0xE56B: 0x8667,
+ 0xE56C: 0x8671,
+ 0xE56D: 0x8693,
+ 0xE56E: 0x86A3,
+ 0xE56F: 0x86A9,
+ 0xE570: 0x86AA,
+ 0xE571: 0x868B,
+ 0xE572: 0x868C,
+ 0xE573: 0x86B6,
+ 0xE574: 0x86AF,
+ 0xE575: 0x86C4,
+ 0xE576: 0x86C6,
+ 0xE577: 0x86B0,
+ 0xE578: 0x86C9,
+ 0xE579: 0x8823,
+ 0xE57A: 0x86AB,
+ 0xE57B: 0x86D4,
+ 0xE57C: 0x86DE,
+ 0xE57D: 0x86E9,
+ 0xE57E: 0x86EC,
+ 0xE580: 0x86DF,
+ 0xE581: 0x86DB,
+ 0xE582: 0x86EF,
+ 0xE583: 0x8712,
+ 0xE584: 0x8706,
+ 0xE585: 0x8708,
+ 0xE586: 0x8700,
+ 0xE587: 0x8703,
+ 0xE588: 0x86FB,
+ 0xE589: 0x8711,
+ 0xE58A: 0x8709,
+ 0xE58B: 0x870D,
+ 0xE58C: 0x86F9,
+ 0xE58D: 0x870A,
+ 0xE58E: 0x8734,
+ 0xE58F: 0x873F,
+ 0xE590: 0x8737,
+ 0xE591: 0x873B,
+ 0xE592: 0x8725,
+ 0xE593: 0x8729,
+ 0xE594: 0x871A,
+ 0xE595: 0x8760,
+ 0xE596: 0x875F,
+ 0xE597: 0x8778,
+ 0xE598: 0x874C,
+ 0xE599: 0x874E,
+ 0xE59A: 0x8774,
+ 0xE59B: 0x8757,
+ 0xE59C: 0x8768,
+ 0xE59D: 0x876E,
+ 0xE59E: 0x8759,
+ 0xE59F: 0x8753,
+ 0xE5A0: 0x8763,
+ 0xE5A1: 0x876A,
+ 0xE5A2: 0x8805,
+ 0xE5A3: 0x87A2,
+ 0xE5A4: 0x879F,
+ 0xE5A5: 0x8782,
+ 0xE5A6: 0x87AF,
+ 0xE5A7: 0x87CB,
+ 0xE5A8: 0x87BD,
+ 0xE5A9: 0x87C0,
+ 0xE5AA: 0x87D0,
+ 0xE5AB: 0x96D6,
+ 0xE5AC: 0x87AB,
+ 0xE5AD: 0x87C4,
+ 0xE5AE: 0x87B3,
+ 0xE5AF: 0x87C7,
+ 0xE5B0: 0x87C6,
+ 0xE5B1: 0x87BB,
+ 0xE5B2: 0x87EF,
+ 0xE5B3: 0x87F2,
+ 0xE5B4: 0x87E0,
+ 0xE5B5: 0x880F,
+ 0xE5B6: 0x880D,
+ 0xE5B7: 0x87FE,
+ 0xE5B8: 0x87F6,
+ 0xE5B9: 0x87F7,
+ 0xE5BA: 0x880E,
+ 0xE5BB: 0x87D2,
+ 0xE5BC: 0x8811,
+ 0xE5BD: 0x8816,
+ 0xE5BE: 0x8815,
+ 0xE5BF: 0x8822,
+ 0xE5C0: 0x8821,
+ 0xE5C1: 0x8831,
+ 0xE5C2: 0x8836,
+ 0xE5C3: 0x8839,
+ 0xE5C4: 0x8827,
+ 0xE5C5: 0x883B,
+ 0xE5C6: 0x8844,
+ 0xE5C7: 0x8842,
+ 0xE5C8: 0x8852,
+ 0xE5C9: 0x8859,
+ 0xE5CA: 0x885E,
+ 0xE5CB: 0x8862,
+ 0xE5CC: 0x886B,
+ 0xE5CD: 0x8881,
+ 0xE5CE: 0x887E,
+ 0xE5CF: 0x889E,
+ 0xE5D0: 0x8875,
+ 0xE5D1: 0x887D,
+ 0xE5D2: 0x88B5,
+ 0xE5D3: 0x8872,
+ 0xE5D4: 0x8882,
+ 0xE5D5: 0x8897,
+ 0xE5D6: 0x8892,
+ 0xE5D7: 0x88AE,
+ 0xE5D8: 0x8899,
+ 0xE5D9: 0x88A2,
+ 0xE5DA: 0x888D,
+ 0xE5DB: 0x88A4,
+ 0xE5DC: 0x88B0,
+ 0xE5DD: 0x88BF,
+ 0xE5DE: 0x88B1,
+ 0xE5DF: 0x88C3,
+ 0xE5E0: 0x88C4,
+ 0xE5E1: 0x88D4,
+ 0xE5E2: 0x88D8,
+ 0xE5E3: 0x88D9,
+ 0xE5E4: 0x88DD,
+ 0xE5E5: 0x88F9,
+ 0xE5E6: 0x8902,
+ 0xE5E7: 0x88FC,
+ 0xE5E8: 0x88F4,
+ 0xE5E9: 0x88E8,
+ 0xE5EA: 0x88F2,
+ 0xE5EB: 0x8904,
+ 0xE5EC: 0x890C,
+ 0xE5ED: 0x890A,
+ 0xE5EE: 0x8913,
+ 0xE5EF: 0x8943,
+ 0xE5F0: 0x891E,
+ 0xE5F1: 0x8925,
+ 0xE5F2: 0x892A,
+ 0xE5F3: 0x892B,
+ 0xE5F4: 0x8941,
+ 0xE5F5: 0x8944,
+ 0xE5F6: 0x893B,
+ 0xE5F7: 0x8936,
+ 0xE5F8: 0x8938,
+ 0xE5F9: 0x894C,
+ 0xE5FA: 0x891D,
+ 0xE5FB: 0x8960,
+ 0xE5FC: 0x895E,
+ 0xE640: 0x8966,
+ 0xE641: 0x8964,
+ 0xE642: 0x896D,
+ 0xE643: 0x896A,
+ 0xE644: 0x896F,
+ 0xE645: 0x8974,
+ 0xE646: 0x8977,
+ 0xE647: 0x897E,
+ 0xE648: 0x8983,
+ 0xE649: 0x8988,
+ 0xE64A: 0x898A,
+ 0xE64B: 0x8993,
+ 0xE64C: 0x8998,
+ 0xE64D: 0x89A1,
+ 0xE64E: 0x89A9,
+ 0xE64F: 0x89A6,
+ 0xE650: 0x89AC,
+ 0xE651: 0x89AF,
+ 0xE652: 0x89B2,
+ 0xE653: 0x89BA,
+ 0xE654: 0x89BD,
+ 0xE655: 0x89BF,
+ 0xE656: 0x89C0,
+ 0xE657: 0x89DA,
+ 0xE658: 0x89DC,
+ 0xE659: 0x89DD,
+ 0xE65A: 0x89E7,
+ 0xE65B: 0x89F4,
+ 0xE65C: 0x89F8,
+ 0xE65D: 0x8A03,
+ 0xE65E: 0x8A16,
+ 0xE65F: 0x8A10,
+ 0xE660: 0x8A0C,
+ 0xE661: 0x8A1B,
+ 0xE662: 0x8A1D,
+ 0xE663: 0x8A25,
+ 0xE664: 0x8A36,
+ 0xE665: 0x8A41,
+ 0xE666: 0x8A5B,
+ 0xE667: 0x8A52,
+ 0xE668: 0x8A46,
+ 0xE669: 0x8A48,
+ 0xE66A: 0x8A7C,
+ 0xE66B: 0x8A6D,
+ 0xE66C: 0x8A6C,
+ 0xE66D: 0x8A62,
+ 0xE66E: 0x8A85,
+ 0xE66F: 0x8A82,
+ 0xE670: 0x8A84,
+ 0xE671: 0x8AA8,
+ 0xE672: 0x8AA1,
+ 0xE673: 0x8A91,
+ 0xE674: 0x8AA5,
+ 0xE675: 0x8AA6,
+ 0xE676: 0x8A9A,
+ 0xE677: 0x8AA3,
+ 0xE678: 0x8AC4,
+ 0xE679: 0x8ACD,
+ 0xE67A: 0x8AC2,
+ 0xE67B: 0x8ADA,
+ 0xE67C: 0x8AEB,
+ 0xE67D: 0x8AF3,
+ 0xE67E: 0x8AE7,
+ 0xE680: 0x8AE4,
+ 0xE681: 0x8AF1,
+ 0xE682: 0x8B14,
+ 0xE683: 0x8AE0,
+ 0xE684: 0x8AE2,
+ 0xE685: 0x8AF7,
+ 0xE686: 0x8ADE,
+ 0xE687: 0x8ADB,
+ 0xE688: 0x8B0C,
+ 0xE689: 0x8B07,
+ 0xE68A: 0x8B1A,
+ 0xE68B: 0x8AE1,
+ 0xE68C: 0x8B16,
+ 0xE68D: 0x8B10,
+ 0xE68E: 0x8B17,
+ 0xE68F: 0x8B20,
+ 0xE690: 0x8B33,
+ 0xE691: 0x97AB,
+ 0xE692: 0x8B26,
+ 0xE693: 0x8B2B,
+ 0xE694: 0x8B3E,
+ 0xE695: 0x8B28,
+ 0xE696: 0x8B41,
+ 0xE697: 0x8B4C,
+ 0xE698: 0x8B4F,
+ 0xE699: 0x8B4E,
+ 0xE69A: 0x8B49,
+ 0xE69B: 0x8B56,
+ 0xE69C: 0x8B5B,
+ 0xE69D: 0x8B5A,
+ 0xE69E: 0x8B6B,
+ 0xE69F: 0x8B5F,
+ 0xE6A0: 0x8B6C,
+ 0xE6A1: 0x8B6F,
+ 0xE6A2: 0x8B74,
+ 0xE6A3: 0x8B7D,
+ 0xE6A4: 0x8B80,
+ 0xE6A5: 0x8B8C,
+ 0xE6A6: 0x8B8E,
+ 0xE6A7: 0x8B92,
+ 0xE6A8: 0x8B93,
+ 0xE6A9: 0x8B96,
+ 0xE6AA: 0x8B99,
+ 0xE6AB: 0x8B9A,
+ 0xE6AC: 0x8C3A,
+ 0xE6AD: 0x8C41,
+ 0xE6AE: 0x8C3F,
+ 0xE6AF: 0x8C48,
+ 0xE6B0: 0x8C4C,
+ 0xE6B1: 0x8C4E,
+ 0xE6B2: 0x8C50,
+ 0xE6B3: 0x8C55,
+ 0xE6B4: 0x8C62,
+ 0xE6B5: 0x8C6C,
+ 0xE6B6: 0x8C78,
+ 0xE6B7: 0x8C7A,
+ 0xE6B8: 0x8C82,
+ 0xE6B9: 0x8C89,
+ 0xE6BA: 0x8C85,
+ 0xE6BB: 0x8C8A,
+ 0xE6BC: 0x8C8D,
+ 0xE6BD: 0x8C8E,
+ 0xE6BE: 0x8C94,
+ 0xE6BF: 0x8C7C,
+ 0xE6C0: 0x8C98,
+ 0xE6C1: 0x621D,
+ 0xE6C2: 0x8CAD,
+ 0xE6C3: 0x8CAA,
+ 0xE6C4: 0x8CBD,
+ 0xE6C5: 0x8CB2,
+ 0xE6C6: 0x8CB3,
+ 0xE6C7: 0x8CAE,
+ 0xE6C8: 0x8CB6,
+ 0xE6C9: 0x8CC8,
+ 0xE6CA: 0x8CC1,
+ 0xE6CB: 0x8CE4,
+ 0xE6CC: 0x8CE3,
+ 0xE6CD: 0x8CDA,
+ 0xE6CE: 0x8CFD,
+ 0xE6CF: 0x8CFA,
+ 0xE6D0: 0x8CFB,
+ 0xE6D1: 0x8D04,
+ 0xE6D2: 0x8D05,
+ 0xE6D3: 0x8D0A,
+ 0xE6D4: 0x8D07,
+ 0xE6D5: 0x8D0F,
+ 0xE6D6: 0x8D0D,
+ 0xE6D7: 0x8D10,
+ 0xE6D8: 0x9F4E,
+ 0xE6D9: 0x8D13,
+ 0xE6DA: 0x8CCD,
+ 0xE6DB: 0x8D14,
+ 0xE6DC: 0x8D16,
+ 0xE6DD: 0x8D67,
+ 0xE6DE: 0x8D6D,
+ 0xE6DF: 0x8D71,
+ 0xE6E0: 0x8D73,
+ 0xE6E1: 0x8D81,
+ 0xE6E2: 0x8D99,
+ 0xE6E3: 0x8DC2,
+ 0xE6E4: 0x8DBE,
+ 0xE6E5: 0x8DBA,
+ 0xE6E6: 0x8DCF,
+ 0xE6E7: 0x8DDA,
+ 0xE6E8: 0x8DD6,
+ 0xE6E9: 0x8DCC,
+ 0xE6EA: 0x8DDB,
+ 0xE6EB: 0x8DCB,
+ 0xE6EC: 0x8DEA,
+ 0xE6ED: 0x8DEB,
+ 0xE6EE: 0x8DDF,
+ 0xE6EF: 0x8DE3,
+ 0xE6F0: 0x8DFC,
+ 0xE6F1: 0x8E08,
+ 0xE6F2: 0x8E09,
+ 0xE6F3: 0x8DFF,
+ 0xE6F4: 0x8E1D,
+ 0xE6F5: 0x8E1E,
+ 0xE6F6: 0x8E10,
+ 0xE6F7: 0x8E1F,
+ 0xE6F8: 0x8E42,
+ 0xE6F9: 0x8E35,
+ 0xE6FA: 0x8E30,
+ 0xE6FB: 0x8E34,
+ 0xE6FC: 0x8E4A,
+ 0xE740: 0x8E47,
+ 0xE741: 0x8E49,
+ 0xE742: 0x8E4C,
+ 0xE743: 0x8E50,
+ 0xE744: 0x8E48,
+ 0xE745: 0x8E59,
+ 0xE746: 0x8E64,
+ 0xE747: 0x8E60,
+ 0xE748: 0x8E2A,
+ 0xE749: 0x8E63,
+ 0xE74A: 0x8E55,
+ 0xE74B: 0x8E76,
+ 0xE74C: 0x8E72,
+ 0xE74D: 0x8E7C,
+ 0xE74E: 0x8E81,
+ 0xE74F: 0x8E87,
+ 0xE750: 0x8E85,
+ 0xE751: 0x8E84,
+ 0xE752: 0x8E8B,
+ 0xE753: 0x8E8A,
+ 0xE754: 0x8E93,
+ 0xE755: 0x8E91,
+ 0xE756: 0x8E94,
+ 0xE757: 0x8E99,
+ 0xE758: 0x8EAA,
+ 0xE759: 0x8EA1,
+ 0xE75A: 0x8EAC,
+ 0xE75B: 0x8EB0,
+ 0xE75C: 0x8EC6,
+ 0xE75D: 0x8EB1,
+ 0xE75E: 0x8EBE,
+ 0xE75F: 0x8EC5,
+ 0xE760: 0x8EC8,
+ 0xE761: 0x8ECB,
+ 0xE762: 0x8EDB,
+ 0xE763: 0x8EE3,
+ 0xE764: 0x8EFC,
+ 0xE765: 0x8EFB,
+ 0xE766: 0x8EEB,
+ 0xE767: 0x8EFE,
+ 0xE768: 0x8F0A,
+ 0xE769: 0x8F05,
+ 0xE76A: 0x8F15,
+ 0xE76B: 0x8F12,
+ 0xE76C: 0x8F19,
+ 0xE76D: 0x8F13,
+ 0xE76E: 0x8F1C,
+ 0xE76F: 0x8F1F,
+ 0xE770: 0x8F1B,
+ 0xE771: 0x8F0C,
+ 0xE772: 0x8F26,
+ 0xE773: 0x8F33,
+ 0xE774: 0x8F3B,
+ 0xE775: 0x8F39,
+ 0xE776: 0x8F45,
+ 0xE777: 0x8F42,
+ 0xE778: 0x8F3E,
+ 0xE779: 0x8F4C,
+ 0xE77A: 0x8F49,
+ 0xE77B: 0x8F46,
+ 0xE77C: 0x8F4E,
+ 0xE77D: 0x8F57,
+ 0xE77E: 0x8F5C,
+ 0xE780: 0x8F62,
+ 0xE781: 0x8F63,
+ 0xE782: 0x8F64,
+ 0xE783: 0x8F9C,
+ 0xE784: 0x8F9F,
+ 0xE785: 0x8FA3,
+ 0xE786: 0x8FAD,
+ 0xE787: 0x8FAF,
+ 0xE788: 0x8FB7,
+ 0xE789: 0x8FDA,
+ 0xE78A: 0x8FE5,
+ 0xE78B: 0x8FE2,
+ 0xE78C: 0x8FEA,
+ 0xE78D: 0x8FEF,
+ 0xE78E: 0x9087,
+ 0xE78F: 0x8FF4,
+ 0xE790: 0x9005,
+ 0xE791: 0x8FF9,
+ 0xE792: 0x8FFA,
+ 0xE793: 0x9011,
+ 0xE794: 0x9015,
+ 0xE795: 0x9021,
+ 0xE796: 0x900D,
+ 0xE797: 0x901E,
+ 0xE798: 0x9016,
+ 0xE799: 0x900B,
+ 0xE79A: 0x9027,
+ 0xE79B: 0x9036,
+ 0xE79C: 0x9035,
+ 0xE79D: 0x9039,
+ 0xE79E: 0x8FF8,
+ 0xE79F: 0x904F,
+ 0xE7A0: 0x9050,
+ 0xE7A1: 0x9051,
+ 0xE7A2: 0x9052,
+ 0xE7A3: 0x900E,
+ 0xE7A4: 0x9049,
+ 0xE7A5: 0x903E,
+ 0xE7A6: 0x9056,
+ 0xE7A7: 0x9058,
+ 0xE7A8: 0x905E,
+ 0xE7A9: 0x9068,
+ 0xE7AA: 0x906F,
+ 0xE7AB: 0x9076,
+ 0xE7AC: 0x96A8,
+ 0xE7AD: 0x9072,
+ 0xE7AE: 0x9082,
+ 0xE7AF: 0x907D,
+ 0xE7B0: 0x9081,
+ 0xE7B1: 0x9080,
+ 0xE7B2: 0x908A,
+ 0xE7B3: 0x9089,
+ 0xE7B4: 0x908F,
+ 0xE7B5: 0x90A8,
+ 0xE7B6: 0x90AF,
+ 0xE7B7: 0x90B1,
+ 0xE7B8: 0x90B5,
+ 0xE7B9: 0x90E2,
+ 0xE7BA: 0x90E4,
+ 0xE7BB: 0x6248,
+ 0xE7BC: 0x90DB,
+ 0xE7BD: 0x9102,
+ 0xE7BE: 0x9112,
+ 0xE7BF: 0x9119,
+ 0xE7C0: 0x9132,
+ 0xE7C1: 0x9130,
+ 0xE7C2: 0x914A,
+ 0xE7C3: 0x9156,
+ 0xE7C4: 0x9158,
+ 0xE7C5: 0x9163,
+ 0xE7C6: 0x9165,
+ 0xE7C7: 0x9169,
+ 0xE7C8: 0x9173,
+ 0xE7C9: 0x9172,
+ 0xE7CA: 0x918B,
+ 0xE7CB: 0x9189,
+ 0xE7CC: 0x9182,
+ 0xE7CD: 0x91A2,
+ 0xE7CE: 0x91AB,
+ 0xE7CF: 0x91AF,
+ 0xE7D0: 0x91AA,
+ 0xE7D1: 0x91B5,
+ 0xE7D2: 0x91B4,
+ 0xE7D3: 0x91BA,
+ 0xE7D4: 0x91C0,
+ 0xE7D5: 0x91C1,
+ 0xE7D6: 0x91C9,
+ 0xE7D7: 0x91CB,
+ 0xE7D8: 0x91D0,
+ 0xE7D9: 0x91D6,
+ 0xE7DA: 0x91DF,
+ 0xE7DB: 0x91E1,
+ 0xE7DC: 0x91DB,
+ 0xE7DD: 0x91FC,
+ 0xE7DE: 0x91F5,
+ 0xE7DF: 0x91F6,
+ 0xE7E0: 0x921E,
+ 0xE7E1: 0x91FF,
+ 0xE7E2: 0x9214,
+ 0xE7E3: 0x922C,
+ 0xE7E4: 0x9215,
+ 0xE7E5: 0x9211,
+ 0xE7E6: 0x925E,
+ 0xE7E7: 0x9257,
+ 0xE7E8: 0x9245,
+ 0xE7E9: 0x9249,
+ 0xE7EA: 0x9264,
+ 0xE7EB: 0x9248,
+ 0xE7EC: 0x9295,
+ 0xE7ED: 0x923F,
+ 0xE7EE: 0x924B,
+ 0xE7EF: 0x9250,
+ 0xE7F0: 0x929C,
+ 0xE7F1: 0x9296,
+ 0xE7F2: 0x9293,
+ 0xE7F3: 0x929B,
+ 0xE7F4: 0x925A,
+ 0xE7F5: 0x92CF,
+ 0xE7F6: 0x92B9,
+ 0xE7F7: 0x92B7,
+ 0xE7F8: 0x92E9,
+ 0xE7F9: 0x930F,
+ 0xE7FA: 0x92FA,
+ 0xE7FB: 0x9344,
+ 0xE7FC: 0x932E,
+ 0xE840: 0x9319,
+ 0xE841: 0x9322,
+ 0xE842: 0x931A,
+ 0xE843: 0x9323,
+ 0xE844: 0x933A,
+ 0xE845: 0x9335,
+ 0xE846: 0x933B,
+ 0xE847: 0x935C,
+ 0xE848: 0x9360,
+ 0xE849: 0x937C,
+ 0xE84A: 0x936E,
+ 0xE84B: 0x9356,
+ 0xE84C: 0x93B0,
+ 0xE84D: 0x93AC,
+ 0xE84E: 0x93AD,
+ 0xE84F: 0x9394,
+ 0xE850: 0x93B9,
+ 0xE851: 0x93D6,
+ 0xE852: 0x93D7,
+ 0xE853: 0x93E8,
+ 0xE854: 0x93E5,
+ 0xE855: 0x93D8,
+ 0xE856: 0x93C3,
+ 0xE857: 0x93DD,
+ 0xE858: 0x93D0,
+ 0xE859: 0x93C8,
+ 0xE85A: 0x93E4,
+ 0xE85B: 0x941A,
+ 0xE85C: 0x9414,
+ 0xE85D: 0x9413,
+ 0xE85E: 0x9403,
+ 0xE85F: 0x9407,
+ 0xE860: 0x9410,
+ 0xE861: 0x9436,
+ 0xE862: 0x942B,
+ 0xE863: 0x9435,
+ 0xE864: 0x9421,
+ 0xE865: 0x943A,
+ 0xE866: 0x9441,
+ 0xE867: 0x9452,
+ 0xE868: 0x9444,
+ 0xE869: 0x945B,
+ 0xE86A: 0x9460,
+ 0xE86B: 0x9462,
+ 0xE86C: 0x945E,
+ 0xE86D: 0x946A,
+ 0xE86E: 0x9229,
+ 0xE86F: 0x9470,
+ 0xE870: 0x9475,
+ 0xE871: 0x9477,
+ 0xE872: 0x947D,
+ 0xE873: 0x945A,
+ 0xE874: 0x947C,
+ 0xE875: 0x947E,
+ 0xE876: 0x9481,
+ 0xE877: 0x947F,
+ 0xE878: 0x9582,
+ 0xE879: 0x9587,
+ 0xE87A: 0x958A,
+ 0xE87B: 0x9594,
+ 0xE87C: 0x9596,
+ 0xE87D: 0x9598,
+ 0xE87E: 0x9599,
+ 0xE880: 0x95A0,
+ 0xE881: 0x95A8,
+ 0xE882: 0x95A7,
+ 0xE883: 0x95AD,
+ 0xE884: 0x95BC,
+ 0xE885: 0x95BB,
+ 0xE886: 0x95B9,
+ 0xE887: 0x95BE,
+ 0xE888: 0x95CA,
+ 0xE889: 0x6FF6,
+ 0xE88A: 0x95C3,
+ 0xE88B: 0x95CD,
+ 0xE88C: 0x95CC,
+ 0xE88D: 0x95D5,
+ 0xE88E: 0x95D4,
+ 0xE88F: 0x95D6,
+ 0xE890: 0x95DC,
+ 0xE891: 0x95E1,
+ 0xE892: 0x95E5,
+ 0xE893: 0x95E2,
+ 0xE894: 0x9621,
+ 0xE895: 0x9628,
+ 0xE896: 0x962E,
+ 0xE897: 0x962F,
+ 0xE898: 0x9642,
+ 0xE899: 0x964C,
+ 0xE89A: 0x964F,
+ 0xE89B: 0x964B,
+ 0xE89C: 0x9677,
+ 0xE89D: 0x965C,
+ 0xE89E: 0x965E,
+ 0xE89F: 0x965D,
+ 0xE8A0: 0x965F,
+ 0xE8A1: 0x9666,
+ 0xE8A2: 0x9672,
+ 0xE8A3: 0x966C,
+ 0xE8A4: 0x968D,
+ 0xE8A5: 0x9698,
+ 0xE8A6: 0x9695,
+ 0xE8A7: 0x9697,
+ 0xE8A8: 0x96AA,
+ 0xE8A9: 0x96A7,
+ 0xE8AA: 0x96B1,
+ 0xE8AB: 0x96B2,
+ 0xE8AC: 0x96B0,
+ 0xE8AD: 0x96B4,
+ 0xE8AE: 0x96B6,
+ 0xE8AF: 0x96B8,
+ 0xE8B0: 0x96B9,
+ 0xE8B1: 0x96CE,
+ 0xE8B2: 0x96CB,
+ 0xE8B3: 0x96C9,
+ 0xE8B4: 0x96CD,
+ 0xE8B5: 0x894D,
+ 0xE8B6: 0x96DC,
+ 0xE8B7: 0x970D,
+ 0xE8B8: 0x96D5,
+ 0xE8B9: 0x96F9,
+ 0xE8BA: 0x9704,
+ 0xE8BB: 0x9706,
+ 0xE8BC: 0x9708,
+ 0xE8BD: 0x9713,
+ 0xE8BE: 0x970E,
+ 0xE8BF: 0x9711,
+ 0xE8C0: 0x970F,
+ 0xE8C1: 0x9716,
+ 0xE8C2: 0x9719,
+ 0xE8C3: 0x9724,
+ 0xE8C4: 0x972A,
+ 0xE8C5: 0x9730,
+ 0xE8C6: 0x9739,
+ 0xE8C7: 0x973D,
+ 0xE8C8: 0x973E,
+ 0xE8C9: 0x9744,
+ 0xE8CA: 0x9746,
+ 0xE8CB: 0x9748,
+ 0xE8CC: 0x9742,
+ 0xE8CD: 0x9749,
+ 0xE8CE: 0x975C,
+ 0xE8CF: 0x9760,
+ 0xE8D0: 0x9764,
+ 0xE8D1: 0x9766,
+ 0xE8D2: 0x9768,
+ 0xE8D3: 0x52D2,
+ 0xE8D4: 0x976B,
+ 0xE8D5: 0x9771,
+ 0xE8D6: 0x9779,
+ 0xE8D7: 0x9785,
+ 0xE8D8: 0x977C,
+ 0xE8D9: 0x9781,
+ 0xE8DA: 0x977A,
+ 0xE8DB: 0x9786,
+ 0xE8DC: 0x978B,
+ 0xE8DD: 0x978F,
+ 0xE8DE: 0x9790,
+ 0xE8DF: 0x979C,
+ 0xE8E0: 0x97A8,
+ 0xE8E1: 0x97A6,
+ 0xE8E2: 0x97A3,
+ 0xE8E3: 0x97B3,
+ 0xE8E4: 0x97B4,
+ 0xE8E5: 0x97C3,
+ 0xE8E6: 0x97C6,
+ 0xE8E7: 0x97C8,
+ 0xE8E8: 0x97CB,
+ 0xE8E9: 0x97DC,
+ 0xE8EA: 0x97ED,
+ 0xE8EB: 0x9F4F,
+ 0xE8EC: 0x97F2,
+ 0xE8ED: 0x7ADF,
+ 0xE8EE: 0x97F6,
+ 0xE8EF: 0x97F5,
+ 0xE8F0: 0x980F,
+ 0xE8F1: 0x980C,
+ 0xE8F2: 0x9838,
+ 0xE8F3: 0x9824,
+ 0xE8F4: 0x9821,
+ 0xE8F5: 0x9837,
+ 0xE8F6: 0x983D,
+ 0xE8F7: 0x9846,
+ 0xE8F8: 0x984F,
+ 0xE8F9: 0x984B,
+ 0xE8FA: 0x986B,
+ 0xE8FB: 0x986F,
+ 0xE8FC: 0x9870,
+ 0xE940: 0x9871,
+ 0xE941: 0x9874,
+ 0xE942: 0x9873,
+ 0xE943: 0x98AA,
+ 0xE944: 0x98AF,
+ 0xE945: 0x98B1,
+ 0xE946: 0x98B6,
+ 0xE947: 0x98C4,
+ 0xE948: 0x98C3,
+ 0xE949: 0x98C6,
+ 0xE94A: 0x98E9,
+ 0xE94B: 0x98EB,
+ 0xE94C: 0x9903,
+ 0xE94D: 0x9909,
+ 0xE94E: 0x9912,
+ 0xE94F: 0x9914,
+ 0xE950: 0x9918,
+ 0xE951: 0x9921,
+ 0xE952: 0x991D,
+ 0xE953: 0x991E,
+ 0xE954: 0x9924,
+ 0xE955: 0x9920,
+ 0xE956: 0x992C,
+ 0xE957: 0x992E,
+ 0xE958: 0x993D,
+ 0xE959: 0x993E,
+ 0xE95A: 0x9942,
+ 0xE95B: 0x9949,
+ 0xE95C: 0x9945,
+ 0xE95D: 0x9950,
+ 0xE95E: 0x994B,
+ 0xE95F: 0x9951,
+ 0xE960: 0x9952,
+ 0xE961: 0x994C,
+ 0xE962: 0x9955,
+ 0xE963: 0x9997,
+ 0xE964: 0x9998,
+ 0xE965: 0x99A5,
+ 0xE966: 0x99AD,
+ 0xE967: 0x99AE,
+ 0xE968: 0x99BC,
+ 0xE969: 0x99DF,
+ 0xE96A: 0x99DB,
+ 0xE96B: 0x99DD,
+ 0xE96C: 0x99D8,
+ 0xE96D: 0x99D1,
+ 0xE96E: 0x99ED,
+ 0xE96F: 0x99EE,
+ 0xE970: 0x99F1,
+ 0xE971: 0x99F2,
+ 0xE972: 0x99FB,
+ 0xE973: 0x99F8,
+ 0xE974: 0x9A01,
+ 0xE975: 0x9A0F,
+ 0xE976: 0x9A05,
+ 0xE977: 0x99E2,
+ 0xE978: 0x9A19,
+ 0xE979: 0x9A2B,
+ 0xE97A: 0x9A37,
+ 0xE97B: 0x9A45,
+ 0xE97C: 0x9A42,
+ 0xE97D: 0x9A40,
+ 0xE97E: 0x9A43,
+ 0xE980: 0x9A3E,
+ 0xE981: 0x9A55,
+ 0xE982: 0x9A4D,
+ 0xE983: 0x9A5B,
+ 0xE984: 0x9A57,
+ 0xE985: 0x9A5F,
+ 0xE986: 0x9A62,
+ 0xE987: 0x9A65,
+ 0xE988: 0x9A64,
+ 0xE989: 0x9A69,
+ 0xE98A: 0x9A6B,
+ 0xE98B: 0x9A6A,
+ 0xE98C: 0x9AAD,
+ 0xE98D: 0x9AB0,
+ 0xE98E: 0x9ABC,
+ 0xE98F: 0x9AC0,
+ 0xE990: 0x9ACF,
+ 0xE991: 0x9AD1,
+ 0xE992: 0x9AD3,
+ 0xE993: 0x9AD4,
+ 0xE994: 0x9ADE,
+ 0xE995: 0x9ADF,
+ 0xE996: 0x9AE2,
+ 0xE997: 0x9AE3,
+ 0xE998: 0x9AE6,
+ 0xE999: 0x9AEF,
+ 0xE99A: 0x9AEB,
+ 0xE99B: 0x9AEE,
+ 0xE99C: 0x9AF4,
+ 0xE99D: 0x9AF1,
+ 0xE99E: 0x9AF7,
+ 0xE99F: 0x9AFB,
+ 0xE9A0: 0x9B06,
+ 0xE9A1: 0x9B18,
+ 0xE9A2: 0x9B1A,
+ 0xE9A3: 0x9B1F,
+ 0xE9A4: 0x9B22,
+ 0xE9A5: 0x9B23,
+ 0xE9A6: 0x9B25,
+ 0xE9A7: 0x9B27,
+ 0xE9A8: 0x9B28,
+ 0xE9A9: 0x9B29,
+ 0xE9AA: 0x9B2A,
+ 0xE9AB: 0x9B2E,
+ 0xE9AC: 0x9B2F,
+ 0xE9AD: 0x9B32,
+ 0xE9AE: 0x9B44,
+ 0xE9AF: 0x9B43,
+ 0xE9B0: 0x9B4F,
+ 0xE9B1: 0x9B4D,
+ 0xE9B2: 0x9B4E,
+ 0xE9B3: 0x9B51,
+ 0xE9B4: 0x9B58,
+ 0xE9B5: 0x9B74,
+ 0xE9B6: 0x9B93,
+ 0xE9B7: 0x9B83,
+ 0xE9B8: 0x9B91,
+ 0xE9B9: 0x9B96,
+ 0xE9BA: 0x9B97,
+ 0xE9BB: 0x9B9F,
+ 0xE9BC: 0x9BA0,
+ 0xE9BD: 0x9BA8,
+ 0xE9BE: 0x9BB4,
+ 0xE9BF: 0x9BC0,
+ 0xE9C0: 0x9BCA,
+ 0xE9C1: 0x9BB9,
+ 0xE9C2: 0x9BC6,
+ 0xE9C3: 0x9BCF,
+ 0xE9C4: 0x9BD1,
+ 0xE9C5: 0x9BD2,
+ 0xE9C6: 0x9BE3,
+ 0xE9C7: 0x9BE2,
+ 0xE9C8: 0x9BE4,
+ 0xE9C9: 0x9BD4,
+ 0xE9CA: 0x9BE1,
+ 0xE9CB: 0x9C3A,
+ 0xE9CC: 0x9BF2,
+ 0xE9CD: 0x9BF1,
+ 0xE9CE: 0x9BF0,
+ 0xE9CF: 0x9C15,
+ 0xE9D0: 0x9C14,
+ 0xE9D1: 0x9C09,
+ 0xE9D2: 0x9C13,
+ 0xE9D3: 0x9C0C,
+ 0xE9D4: 0x9C06,
+ 0xE9D5: 0x9C08,
+ 0xE9D6: 0x9C12,
+ 0xE9D7: 0x9C0A,
+ 0xE9D8: 0x9C04,
+ 0xE9D9: 0x9C2E,
+ 0xE9DA: 0x9C1B,
+ 0xE9DB: 0x9C25,
+ 0xE9DC: 0x9C24,
+ 0xE9DD: 0x9C21,
+ 0xE9DE: 0x9C30,
+ 0xE9DF: 0x9C47,
+ 0xE9E0: 0x9C32,
+ 0xE9E1: 0x9C46,
+ 0xE9E2: 0x9C3E,
+ 0xE9E3: 0x9C5A,
+ 0xE9E4: 0x9C60,
+ 0xE9E5: 0x9C67,
+ 0xE9E6: 0x9C76,
+ 0xE9E7: 0x9C78,
+ 0xE9E8: 0x9CE7,
+ 0xE9E9: 0x9CEC,
+ 0xE9EA: 0x9CF0,
+ 0xE9EB: 0x9D09,
+ 0xE9EC: 0x9D08,
+ 0xE9ED: 0x9CEB,
+ 0xE9EE: 0x9D03,
+ 0xE9EF: 0x9D06,
+ 0xE9F0: 0x9D2A,
+ 0xE9F1: 0x9D26,
+ 0xE9F2: 0x9DAF,
+ 0xE9F3: 0x9D23,
+ 0xE9F4: 0x9D1F,
+ 0xE9F5: 0x9D44,
+ 0xE9F6: 0x9D15,
+ 0xE9F7: 0x9D12,
+ 0xE9F8: 0x9D41,
+ 0xE9F9: 0x9D3F,
+ 0xE9FA: 0x9D3E,
+ 0xE9FB: 0x9D46,
+ 0xE9FC: 0x9D48,
+ 0xEA40: 0x9D5D,
+ 0xEA41: 0x9D5E,
+ 0xEA42: 0x9D64,
+ 0xEA43: 0x9D51,
+ 0xEA44: 0x9D50,
+ 0xEA45: 0x9D59,
+ 0xEA46: 0x9D72,
+ 0xEA47: 0x9D89,
+ 0xEA48: 0x9D87,
+ 0xEA49: 0x9DAB,
+ 0xEA4A: 0x9D6F,
+ 0xEA4B: 0x9D7A,
+ 0xEA4C: 0x9D9A,
+ 0xEA4D: 0x9DA4,
+ 0xEA4E: 0x9DA9,
+ 0xEA4F: 0x9DB2,
+ 0xEA50: 0x9DC4,
+ 0xEA51: 0x9DC1,
+ 0xEA52: 0x9DBB,
+ 0xEA53: 0x9DB8,
+ 0xEA54: 0x9DBA,
+ 0xEA55: 0x9DC6,
+ 0xEA56: 0x9DCF,
+ 0xEA57: 0x9DC2,
+ 0xEA58: 0x9DD9,
+ 0xEA59: 0x9DD3,
+ 0xEA5A: 0x9DF8,
+ 0xEA5B: 0x9DE6,
+ 0xEA5C: 0x9DED,
+ 0xEA5D: 0x9DEF,
+ 0xEA5E: 0x9DFD,
+ 0xEA5F: 0x9E1A,
+ 0xEA60: 0x9E1B,
+ 0xEA61: 0x9E1E,
+ 0xEA62: 0x9E75,
+ 0xEA63: 0x9E79,
+ 0xEA64: 0x9E7D,
+ 0xEA65: 0x9E81,
+ 0xEA66: 0x9E88,
+ 0xEA67: 0x9E8B,
+ 0xEA68: 0x9E8C,
+ 0xEA69: 0x9E92,
+ 0xEA6A: 0x9E95,
+ 0xEA6B: 0x9E91,
+ 0xEA6C: 0x9E9D,
+ 0xEA6D: 0x9EA5,
+ 0xEA6E: 0x9EA9,
+ 0xEA6F: 0x9EB8,
+ 0xEA70: 0x9EAA,
+ 0xEA71: 0x9EAD,
+ 0xEA72: 0x9761,
+ 0xEA73: 0x9ECC,
+ 0xEA74: 0x9ECE,
+ 0xEA75: 0x9ECF,
+ 0xEA76: 0x9ED0,
+ 0xEA77: 0x9ED4,
+ 0xEA78: 0x9EDC,
+ 0xEA79: 0x9EDE,
+ 0xEA7A: 0x9EDD,
+ 0xEA7B: 0x9EE0,
+ 0xEA7C: 0x9EE5,
+ 0xEA7D: 0x9EE8,
+ 0xEA7E: 0x9EEF,
+ 0xEA80: 0x9EF4,
+ 0xEA81: 0x9EF6,
+ 0xEA82: 0x9EF7,
+ 0xEA83: 0x9EF9,
+ 0xEA84: 0x9EFB,
+ 0xEA85: 0x9EFC,
+ 0xEA86: 0x9EFD,
+ 0xEA87: 0x9F07,
+ 0xEA88: 0x9F08,
+ 0xEA89: 0x76B7,
+ 0xEA8A: 0x9F15,
+ 0xEA8B: 0x9F21,
+ 0xEA8C: 0x9F2C,
+ 0xEA8D: 0x9F3E,
+ 0xEA8E: 0x9F4A,
+ 0xEA8F: 0x9F52,
+ 0xEA90: 0x9F54,
+ 0xEA91: 0x9F63,
+ 0xEA92: 0x9F5F,
+ 0xEA93: 0x9F60,
+ 0xEA94: 0x9F61,
+ 0xEA95: 0x9F66,
+ 0xEA96: 0x9F67,
+ 0xEA97: 0x9F6C,
+ 0xEA98: 0x9F6A,
+ 0xEA99: 0x9F77,
+ 0xEA9A: 0x9F72,
+ 0xEA9B: 0x9F76,
+ 0xEA9C: 0x9F95,
+ 0xEA9D: 0x9F9C,
+ 0xEA9E: 0x9FA0,
+ 0xEA9F: 0x582F,
+ 0xEAA0: 0x69C7,
+ 0xEAA1: 0x9059,
+ 0xEAA2: 0x7464,
+ 0xEAA3: 0x51DC,
+ 0xEAA4: 0x7199,
+};
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var GenericGF_1 = __webpack_require__(1);
+var GenericGFPoly_1 = __webpack_require__(2);
+function runEuclideanAlgorithm(field, a, b, R) {
+ var _a;
+ // Assume a's degree is >= b's
+ if (a.degree() < b.degree()) {
+ _a = [b, a], a = _a[0], b = _a[1];
+ }
+ var rLast = a;
+ var r = b;
+ var tLast = field.zero;
+ var t = field.one;
+ // Run Euclidean algorithm until r's degree is less than R/2
+ while (r.degree() >= R / 2) {
+ var rLastLast = rLast;
+ var tLastLast = tLast;
+ rLast = r;
+ tLast = t;
+ // Divide rLastLast by rLast, with quotient in q and remainder in r
+ if (rLast.isZero()) {
+ // Euclidean algorithm already terminated?
+ return null;
+ }
+ r = rLastLast;
+ var q = field.zero;
+ var denominatorLeadingTerm = rLast.getCoefficient(rLast.degree());
+ var dltInverse = field.inverse(denominatorLeadingTerm);
+ while (r.degree() >= rLast.degree() && !r.isZero()) {
+ var degreeDiff = r.degree() - rLast.degree();
+ var scale = field.multiply(r.getCoefficient(r.degree()), dltInverse);
+ q = q.addOrSubtract(field.buildMonomial(degreeDiff, scale));
+ r = r.addOrSubtract(rLast.multiplyByMonomial(degreeDiff, scale));
+ }
+ t = q.multiplyPoly(tLast).addOrSubtract(tLastLast);
+ if (r.degree() >= rLast.degree()) {
+ return null;
+ }
+ }
+ var sigmaTildeAtZero = t.getCoefficient(0);
+ if (sigmaTildeAtZero === 0) {
+ return null;
+ }
+ var inverse = field.inverse(sigmaTildeAtZero);
+ return [t.multiply(inverse), r.multiply(inverse)];
+}
+function findErrorLocations(field, errorLocator) {
+ // This is a direct application of Chien's search
+ var numErrors = errorLocator.degree();
+ if (numErrors === 1) {
+ return [errorLocator.getCoefficient(1)];
+ }
+ var result = new Array(numErrors);
+ var errorCount = 0;
+ for (var i = 1; i < field.size && errorCount < numErrors; i++) {
+ if (errorLocator.evaluateAt(i) === 0) {
+ result[errorCount] = field.inverse(i);
+ errorCount++;
+ }
+ }
+ if (errorCount !== numErrors) {
+ return null;
+ }
+ return result;
+}
+function findErrorMagnitudes(field, errorEvaluator, errorLocations) {
+ // This is directly applying Forney's Formula
+ var s = errorLocations.length;
+ var result = new Array(s);
+ for (var i = 0; i < s; i++) {
+ var xiInverse = field.inverse(errorLocations[i]);
+ var denominator = 1;
+ for (var j = 0; j < s; j++) {
+ if (i !== j) {
+ denominator = field.multiply(denominator, GenericGF_1.addOrSubtractGF(1, field.multiply(errorLocations[j], xiInverse)));
+ }
+ }
+ result[i] = field.multiply(errorEvaluator.evaluateAt(xiInverse), field.inverse(denominator));
+ if (field.generatorBase !== 0) {
+ result[i] = field.multiply(result[i], xiInverse);
+ }
+ }
+ return result;
+}
+function decode(bytes, twoS) {
+ var outputBytes = new Uint8ClampedArray(bytes.length);
+ outputBytes.set(bytes);
+ var field = new GenericGF_1.default(0x011D, 256, 0); // x^8 + x^4 + x^3 + x^2 + 1
+ var poly = new GenericGFPoly_1.default(field, outputBytes);
+ var syndromeCoefficients = new Uint8ClampedArray(twoS);
+ var error = false;
+ for (var s = 0; s < twoS; s++) {
+ var evaluation = poly.evaluateAt(field.exp(s + field.generatorBase));
+ syndromeCoefficients[syndromeCoefficients.length - 1 - s] = evaluation;
+ if (evaluation !== 0) {
+ error = true;
+ }
+ }
+ if (!error) {
+ return outputBytes;
+ }
+ var syndrome = new GenericGFPoly_1.default(field, syndromeCoefficients);
+ var sigmaOmega = runEuclideanAlgorithm(field, field.buildMonomial(twoS, 1), syndrome, twoS);
+ if (sigmaOmega === null) {
+ return null;
+ }
+ var errorLocations = findErrorLocations(field, sigmaOmega[0]);
+ if (errorLocations == null) {
+ return null;
+ }
+ var errorMagnitudes = findErrorMagnitudes(field, sigmaOmega[1], errorLocations);
+ for (var i = 0; i < errorLocations.length; i++) {
+ var position = outputBytes.length - 1 - field.log(errorLocations[i]);
+ if (position < 0) {
+ return null;
+ }
+ outputBytes[position] = GenericGF_1.addOrSubtractGF(outputBytes[position], errorMagnitudes[i]);
+ }
+ return outputBytes;
+}
+exports.decode = decode;
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.VERSIONS = [
+ {
+ infoBits: null,
+ versionNumber: 1,
+ alignmentPatternCenters: [],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 7,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 19 }],
+ },
+ {
+ ecCodewordsPerBlock: 10,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }],
+ },
+ {
+ ecCodewordsPerBlock: 13,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 13 }],
+ },
+ {
+ ecCodewordsPerBlock: 17,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 9 }],
+ },
+ ],
+ },
+ {
+ infoBits: null,
+ versionNumber: 2,
+ alignmentPatternCenters: [6, 18],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 10,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 34 }],
+ },
+ {
+ ecCodewordsPerBlock: 16,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 28 }],
+ },
+ {
+ ecCodewordsPerBlock: 22,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 22 }],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }],
+ },
+ ],
+ },
+ {
+ infoBits: null,
+ versionNumber: 3,
+ alignmentPatternCenters: [6, 22],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 15,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 55 }],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 44 }],
+ },
+ {
+ ecCodewordsPerBlock: 18,
+ ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 17 }],
+ },
+ {
+ ecCodewordsPerBlock: 22,
+ ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 13 }],
+ },
+ ],
+ },
+ {
+ infoBits: null,
+ versionNumber: 4,
+ alignmentPatternCenters: [6, 26],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 20,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 80 }],
+ },
+ {
+ ecCodewordsPerBlock: 18,
+ ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 32 }],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 24 }],
+ },
+ {
+ ecCodewordsPerBlock: 16,
+ ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 9 }],
+ },
+ ],
+ },
+ {
+ infoBits: null,
+ versionNumber: 5,
+ alignmentPatternCenters: [6, 30],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 108 }],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 43 }],
+ },
+ {
+ ecCodewordsPerBlock: 18,
+ ecBlocks: [
+ { numBlocks: 2, dataCodewordsPerBlock: 15 },
+ { numBlocks: 2, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 22,
+ ecBlocks: [
+ { numBlocks: 2, dataCodewordsPerBlock: 11 },
+ { numBlocks: 2, dataCodewordsPerBlock: 12 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: null,
+ versionNumber: 6,
+ alignmentPatternCenters: [6, 34],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 18,
+ ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 68 }],
+ },
+ {
+ ecCodewordsPerBlock: 16,
+ ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 27 }],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 19 }],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 15 }],
+ },
+ ],
+ },
+ {
+ infoBits: 0x07C94,
+ versionNumber: 7,
+ alignmentPatternCenters: [6, 22, 38],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 20,
+ ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 78 }],
+ },
+ {
+ ecCodewordsPerBlock: 18,
+ ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 31 }],
+ },
+ {
+ ecCodewordsPerBlock: 18,
+ ecBlocks: [
+ { numBlocks: 2, dataCodewordsPerBlock: 14 },
+ { numBlocks: 4, dataCodewordsPerBlock: 15 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 13 },
+ { numBlocks: 1, dataCodewordsPerBlock: 14 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x085BC,
+ versionNumber: 8,
+ alignmentPatternCenters: [6, 24, 42],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 97 }],
+ },
+ {
+ ecCodewordsPerBlock: 22,
+ ecBlocks: [
+ { numBlocks: 2, dataCodewordsPerBlock: 38 },
+ { numBlocks: 2, dataCodewordsPerBlock: 39 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 22,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 18 },
+ { numBlocks: 2, dataCodewordsPerBlock: 19 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 14 },
+ { numBlocks: 2, dataCodewordsPerBlock: 15 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x09A99,
+ versionNumber: 9,
+ alignmentPatternCenters: [6, 26, 46],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 116 }],
+ },
+ {
+ ecCodewordsPerBlock: 22,
+ ecBlocks: [
+ { numBlocks: 3, dataCodewordsPerBlock: 36 },
+ { numBlocks: 2, dataCodewordsPerBlock: 37 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 20,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 16 },
+ { numBlocks: 4, dataCodewordsPerBlock: 17 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 12 },
+ { numBlocks: 4, dataCodewordsPerBlock: 13 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x0A4D3,
+ versionNumber: 10,
+ alignmentPatternCenters: [6, 28, 50],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 18,
+ ecBlocks: [
+ { numBlocks: 2, dataCodewordsPerBlock: 68 },
+ { numBlocks: 2, dataCodewordsPerBlock: 69 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 43 },
+ { numBlocks: 1, dataCodewordsPerBlock: 44 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [
+ { numBlocks: 6, dataCodewordsPerBlock: 19 },
+ { numBlocks: 2, dataCodewordsPerBlock: 20 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 6, dataCodewordsPerBlock: 15 },
+ { numBlocks: 2, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x0BBF6,
+ versionNumber: 11,
+ alignmentPatternCenters: [6, 30, 54],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 20,
+ ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 81 }],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 1, dataCodewordsPerBlock: 50 },
+ { numBlocks: 4, dataCodewordsPerBlock: 51 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 22 },
+ { numBlocks: 4, dataCodewordsPerBlock: 23 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [
+ { numBlocks: 3, dataCodewordsPerBlock: 12 },
+ { numBlocks: 8, dataCodewordsPerBlock: 13 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x0C762,
+ versionNumber: 12,
+ alignmentPatternCenters: [6, 32, 58],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [
+ { numBlocks: 2, dataCodewordsPerBlock: 92 },
+ { numBlocks: 2, dataCodewordsPerBlock: 93 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 22,
+ ecBlocks: [
+ { numBlocks: 6, dataCodewordsPerBlock: 36 },
+ { numBlocks: 2, dataCodewordsPerBlock: 37 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 20 },
+ { numBlocks: 6, dataCodewordsPerBlock: 21 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 7, dataCodewordsPerBlock: 14 },
+ { numBlocks: 4, dataCodewordsPerBlock: 15 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x0D847,
+ versionNumber: 13,
+ alignmentPatternCenters: [6, 34, 62],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 107 }],
+ },
+ {
+ ecCodewordsPerBlock: 22,
+ ecBlocks: [
+ { numBlocks: 8, dataCodewordsPerBlock: 37 },
+ { numBlocks: 1, dataCodewordsPerBlock: 38 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [
+ { numBlocks: 8, dataCodewordsPerBlock: 20 },
+ { numBlocks: 4, dataCodewordsPerBlock: 21 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 22,
+ ecBlocks: [
+ { numBlocks: 12, dataCodewordsPerBlock: 11 },
+ { numBlocks: 4, dataCodewordsPerBlock: 12 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x0E60D,
+ versionNumber: 14,
+ alignmentPatternCenters: [6, 26, 46, 66],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 3, dataCodewordsPerBlock: 115 },
+ { numBlocks: 1, dataCodewordsPerBlock: 116 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 40 },
+ { numBlocks: 5, dataCodewordsPerBlock: 41 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 20,
+ ecBlocks: [
+ { numBlocks: 11, dataCodewordsPerBlock: 16 },
+ { numBlocks: 5, dataCodewordsPerBlock: 17 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [
+ { numBlocks: 11, dataCodewordsPerBlock: 12 },
+ { numBlocks: 5, dataCodewordsPerBlock: 13 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x0F928,
+ versionNumber: 15,
+ alignmentPatternCenters: [6, 26, 48, 70],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 22,
+ ecBlocks: [
+ { numBlocks: 5, dataCodewordsPerBlock: 87 },
+ { numBlocks: 1, dataCodewordsPerBlock: 88 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [
+ { numBlocks: 5, dataCodewordsPerBlock: 41 },
+ { numBlocks: 5, dataCodewordsPerBlock: 42 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 5, dataCodewordsPerBlock: 24 },
+ { numBlocks: 7, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [
+ { numBlocks: 11, dataCodewordsPerBlock: 12 },
+ { numBlocks: 7, dataCodewordsPerBlock: 13 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x10B78,
+ versionNumber: 16,
+ alignmentPatternCenters: [6, 26, 50, 74],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [
+ { numBlocks: 5, dataCodewordsPerBlock: 98 },
+ { numBlocks: 1, dataCodewordsPerBlock: 99 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 7, dataCodewordsPerBlock: 45 },
+ { numBlocks: 3, dataCodewordsPerBlock: 46 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [
+ { numBlocks: 15, dataCodewordsPerBlock: 19 },
+ { numBlocks: 2, dataCodewordsPerBlock: 20 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 3, dataCodewordsPerBlock: 15 },
+ { numBlocks: 13, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x1145D,
+ versionNumber: 17,
+ alignmentPatternCenters: [6, 30, 54, 78],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 1, dataCodewordsPerBlock: 107 },
+ { numBlocks: 5, dataCodewordsPerBlock: 108 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 10, dataCodewordsPerBlock: 46 },
+ { numBlocks: 1, dataCodewordsPerBlock: 47 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 1, dataCodewordsPerBlock: 22 },
+ { numBlocks: 15, dataCodewordsPerBlock: 23 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 2, dataCodewordsPerBlock: 14 },
+ { numBlocks: 17, dataCodewordsPerBlock: 15 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x12A17,
+ versionNumber: 18,
+ alignmentPatternCenters: [6, 30, 56, 82],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 5, dataCodewordsPerBlock: 120 },
+ { numBlocks: 1, dataCodewordsPerBlock: 121 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [
+ { numBlocks: 9, dataCodewordsPerBlock: 43 },
+ { numBlocks: 4, dataCodewordsPerBlock: 44 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 17, dataCodewordsPerBlock: 22 },
+ { numBlocks: 1, dataCodewordsPerBlock: 23 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 2, dataCodewordsPerBlock: 14 },
+ { numBlocks: 19, dataCodewordsPerBlock: 15 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x13532,
+ versionNumber: 19,
+ alignmentPatternCenters: [6, 30, 58, 86],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 3, dataCodewordsPerBlock: 113 },
+ { numBlocks: 4, dataCodewordsPerBlock: 114 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [
+ { numBlocks: 3, dataCodewordsPerBlock: 44 },
+ { numBlocks: 11, dataCodewordsPerBlock: 45 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [
+ { numBlocks: 17, dataCodewordsPerBlock: 21 },
+ { numBlocks: 4, dataCodewordsPerBlock: 22 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [
+ { numBlocks: 9, dataCodewordsPerBlock: 13 },
+ { numBlocks: 16, dataCodewordsPerBlock: 14 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x149A6,
+ versionNumber: 20,
+ alignmentPatternCenters: [6, 34, 62, 90],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 3, dataCodewordsPerBlock: 107 },
+ { numBlocks: 5, dataCodewordsPerBlock: 108 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [
+ { numBlocks: 3, dataCodewordsPerBlock: 41 },
+ { numBlocks: 13, dataCodewordsPerBlock: 42 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 15, dataCodewordsPerBlock: 24 },
+ { numBlocks: 5, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 15, dataCodewordsPerBlock: 15 },
+ { numBlocks: 10, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x15683,
+ versionNumber: 21,
+ alignmentPatternCenters: [6, 28, 50, 72, 94],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 116 },
+ { numBlocks: 4, dataCodewordsPerBlock: 117 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 42 }],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 17, dataCodewordsPerBlock: 22 },
+ { numBlocks: 6, dataCodewordsPerBlock: 23 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 19, dataCodewordsPerBlock: 16 },
+ { numBlocks: 6, dataCodewordsPerBlock: 17 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x168C9,
+ versionNumber: 22,
+ alignmentPatternCenters: [6, 26, 50, 74, 98],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 2, dataCodewordsPerBlock: 111 },
+ { numBlocks: 7, dataCodewordsPerBlock: 112 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 46 }],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 7, dataCodewordsPerBlock: 24 },
+ { numBlocks: 16, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 24,
+ ecBlocks: [{ numBlocks: 34, dataCodewordsPerBlock: 13 }],
+ },
+ ],
+ },
+ {
+ infoBits: 0x177EC,
+ versionNumber: 23,
+ alignmentPatternCenters: [6, 30, 54, 74, 102],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 121 },
+ { numBlocks: 5, dataCodewordsPerBlock: 122 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 47 },
+ { numBlocks: 14, dataCodewordsPerBlock: 48 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 11, dataCodewordsPerBlock: 24 },
+ { numBlocks: 14, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 16, dataCodewordsPerBlock: 15 },
+ { numBlocks: 14, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x18EC4,
+ versionNumber: 24,
+ alignmentPatternCenters: [6, 28, 54, 80, 106],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 6, dataCodewordsPerBlock: 117 },
+ { numBlocks: 4, dataCodewordsPerBlock: 118 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 6, dataCodewordsPerBlock: 45 },
+ { numBlocks: 14, dataCodewordsPerBlock: 46 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 11, dataCodewordsPerBlock: 24 },
+ { numBlocks: 16, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 30, dataCodewordsPerBlock: 16 },
+ { numBlocks: 2, dataCodewordsPerBlock: 17 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x191E1,
+ versionNumber: 25,
+ alignmentPatternCenters: [6, 32, 58, 84, 110],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 26,
+ ecBlocks: [
+ { numBlocks: 8, dataCodewordsPerBlock: 106 },
+ { numBlocks: 4, dataCodewordsPerBlock: 107 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 8, dataCodewordsPerBlock: 47 },
+ { numBlocks: 13, dataCodewordsPerBlock: 48 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 7, dataCodewordsPerBlock: 24 },
+ { numBlocks: 22, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 22, dataCodewordsPerBlock: 15 },
+ { numBlocks: 13, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x1AFAB,
+ versionNumber: 26,
+ alignmentPatternCenters: [6, 30, 58, 86, 114],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 10, dataCodewordsPerBlock: 114 },
+ { numBlocks: 2, dataCodewordsPerBlock: 115 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 19, dataCodewordsPerBlock: 46 },
+ { numBlocks: 4, dataCodewordsPerBlock: 47 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 28, dataCodewordsPerBlock: 22 },
+ { numBlocks: 6, dataCodewordsPerBlock: 23 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 33, dataCodewordsPerBlock: 16 },
+ { numBlocks: 4, dataCodewordsPerBlock: 17 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x1B08E,
+ versionNumber: 27,
+ alignmentPatternCenters: [6, 34, 62, 90, 118],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 8, dataCodewordsPerBlock: 122 },
+ { numBlocks: 4, dataCodewordsPerBlock: 123 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 22, dataCodewordsPerBlock: 45 },
+ { numBlocks: 3, dataCodewordsPerBlock: 46 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 8, dataCodewordsPerBlock: 23 },
+ { numBlocks: 26, dataCodewordsPerBlock: 24 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 12, dataCodewordsPerBlock: 15 },
+ { numBlocks: 28, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x1CC1A,
+ versionNumber: 28,
+ alignmentPatternCenters: [6, 26, 50, 74, 98, 122],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 3, dataCodewordsPerBlock: 117 },
+ { numBlocks: 10, dataCodewordsPerBlock: 118 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 3, dataCodewordsPerBlock: 45 },
+ { numBlocks: 23, dataCodewordsPerBlock: 46 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 24 },
+ { numBlocks: 31, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 11, dataCodewordsPerBlock: 15 },
+ { numBlocks: 31, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x1D33F,
+ versionNumber: 29,
+ alignmentPatternCenters: [6, 30, 54, 78, 102, 126],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 7, dataCodewordsPerBlock: 116 },
+ { numBlocks: 7, dataCodewordsPerBlock: 117 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 21, dataCodewordsPerBlock: 45 },
+ { numBlocks: 7, dataCodewordsPerBlock: 46 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 1, dataCodewordsPerBlock: 23 },
+ { numBlocks: 37, dataCodewordsPerBlock: 24 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 19, dataCodewordsPerBlock: 15 },
+ { numBlocks: 26, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x1ED75,
+ versionNumber: 30,
+ alignmentPatternCenters: [6, 26, 52, 78, 104, 130],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 5, dataCodewordsPerBlock: 115 },
+ { numBlocks: 10, dataCodewordsPerBlock: 116 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 19, dataCodewordsPerBlock: 47 },
+ { numBlocks: 10, dataCodewordsPerBlock: 48 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 15, dataCodewordsPerBlock: 24 },
+ { numBlocks: 25, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 23, dataCodewordsPerBlock: 15 },
+ { numBlocks: 25, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x1F250,
+ versionNumber: 31,
+ alignmentPatternCenters: [6, 30, 56, 82, 108, 134],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 13, dataCodewordsPerBlock: 115 },
+ { numBlocks: 3, dataCodewordsPerBlock: 116 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 2, dataCodewordsPerBlock: 46 },
+ { numBlocks: 29, dataCodewordsPerBlock: 47 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 42, dataCodewordsPerBlock: 24 },
+ { numBlocks: 1, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 23, dataCodewordsPerBlock: 15 },
+ { numBlocks: 28, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x209D5,
+ versionNumber: 32,
+ alignmentPatternCenters: [6, 34, 60, 86, 112, 138],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 115 }],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 10, dataCodewordsPerBlock: 46 },
+ { numBlocks: 23, dataCodewordsPerBlock: 47 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 10, dataCodewordsPerBlock: 24 },
+ { numBlocks: 35, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 19, dataCodewordsPerBlock: 15 },
+ { numBlocks: 35, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x216F0,
+ versionNumber: 33,
+ alignmentPatternCenters: [6, 30, 58, 86, 114, 142],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 17, dataCodewordsPerBlock: 115 },
+ { numBlocks: 1, dataCodewordsPerBlock: 116 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 14, dataCodewordsPerBlock: 46 },
+ { numBlocks: 21, dataCodewordsPerBlock: 47 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 29, dataCodewordsPerBlock: 24 },
+ { numBlocks: 19, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 11, dataCodewordsPerBlock: 15 },
+ { numBlocks: 46, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x228BA,
+ versionNumber: 34,
+ alignmentPatternCenters: [6, 34, 62, 90, 118, 146],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 13, dataCodewordsPerBlock: 115 },
+ { numBlocks: 6, dataCodewordsPerBlock: 116 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 14, dataCodewordsPerBlock: 46 },
+ { numBlocks: 23, dataCodewordsPerBlock: 47 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 44, dataCodewordsPerBlock: 24 },
+ { numBlocks: 7, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 59, dataCodewordsPerBlock: 16 },
+ { numBlocks: 1, dataCodewordsPerBlock: 17 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x2379F,
+ versionNumber: 35,
+ alignmentPatternCenters: [6, 30, 54, 78, 102, 126, 150],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 12, dataCodewordsPerBlock: 121 },
+ { numBlocks: 7, dataCodewordsPerBlock: 122 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 12, dataCodewordsPerBlock: 47 },
+ { numBlocks: 26, dataCodewordsPerBlock: 48 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 39, dataCodewordsPerBlock: 24 },
+ { numBlocks: 14, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 22, dataCodewordsPerBlock: 15 },
+ { numBlocks: 41, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x24B0B,
+ versionNumber: 36,
+ alignmentPatternCenters: [6, 24, 50, 76, 102, 128, 154],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 6, dataCodewordsPerBlock: 121 },
+ { numBlocks: 14, dataCodewordsPerBlock: 122 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 6, dataCodewordsPerBlock: 47 },
+ { numBlocks: 34, dataCodewordsPerBlock: 48 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 46, dataCodewordsPerBlock: 24 },
+ { numBlocks: 10, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 2, dataCodewordsPerBlock: 15 },
+ { numBlocks: 64, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x2542E,
+ versionNumber: 37,
+ alignmentPatternCenters: [6, 28, 54, 80, 106, 132, 158],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 17, dataCodewordsPerBlock: 122 },
+ { numBlocks: 4, dataCodewordsPerBlock: 123 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 29, dataCodewordsPerBlock: 46 },
+ { numBlocks: 14, dataCodewordsPerBlock: 47 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 49, dataCodewordsPerBlock: 24 },
+ { numBlocks: 10, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 24, dataCodewordsPerBlock: 15 },
+ { numBlocks: 46, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x26A64,
+ versionNumber: 38,
+ alignmentPatternCenters: [6, 32, 58, 84, 110, 136, 162],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 4, dataCodewordsPerBlock: 122 },
+ { numBlocks: 18, dataCodewordsPerBlock: 123 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 13, dataCodewordsPerBlock: 46 },
+ { numBlocks: 32, dataCodewordsPerBlock: 47 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 48, dataCodewordsPerBlock: 24 },
+ { numBlocks: 14, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 42, dataCodewordsPerBlock: 15 },
+ { numBlocks: 32, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x27541,
+ versionNumber: 39,
+ alignmentPatternCenters: [6, 26, 54, 82, 110, 138, 166],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 20, dataCodewordsPerBlock: 117 },
+ { numBlocks: 4, dataCodewordsPerBlock: 118 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 40, dataCodewordsPerBlock: 47 },
+ { numBlocks: 7, dataCodewordsPerBlock: 48 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 43, dataCodewordsPerBlock: 24 },
+ { numBlocks: 22, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 10, dataCodewordsPerBlock: 15 },
+ { numBlocks: 67, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+ {
+ infoBits: 0x28C69,
+ versionNumber: 40,
+ alignmentPatternCenters: [6, 30, 58, 86, 114, 142, 170],
+ errorCorrectionLevels: [
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 19, dataCodewordsPerBlock: 118 },
+ { numBlocks: 6, dataCodewordsPerBlock: 119 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 28,
+ ecBlocks: [
+ { numBlocks: 18, dataCodewordsPerBlock: 47 },
+ { numBlocks: 31, dataCodewordsPerBlock: 48 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 34, dataCodewordsPerBlock: 24 },
+ { numBlocks: 34, dataCodewordsPerBlock: 25 },
+ ],
+ },
+ {
+ ecCodewordsPerBlock: 30,
+ ecBlocks: [
+ { numBlocks: 20, dataCodewordsPerBlock: 15 },
+ { numBlocks: 61, dataCodewordsPerBlock: 16 },
+ ],
+ },
+ ],
+ },
+];
+
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var BitMatrix_1 = __webpack_require__(0);
+function squareToQuadrilateral(p1, p2, p3, p4) {
+ var dx3 = p1.x - p2.x + p3.x - p4.x;
+ var dy3 = p1.y - p2.y + p3.y - p4.y;
+ if (dx3 === 0 && dy3 === 0) { // Affine
+ return {
+ a11: p2.x - p1.x,
+ a12: p2.y - p1.y,
+ a13: 0,
+ a21: p3.x - p2.x,
+ a22: p3.y - p2.y,
+ a23: 0,
+ a31: p1.x,
+ a32: p1.y,
+ a33: 1,
+ };
+ }
+ else {
+ var dx1 = p2.x - p3.x;
+ var dx2 = p4.x - p3.x;
+ var dy1 = p2.y - p3.y;
+ var dy2 = p4.y - p3.y;
+ var denominator = dx1 * dy2 - dx2 * dy1;
+ var a13 = (dx3 * dy2 - dx2 * dy3) / denominator;
+ var a23 = (dx1 * dy3 - dx3 * dy1) / denominator;
+ return {
+ a11: p2.x - p1.x + a13 * p2.x,
+ a12: p2.y - p1.y + a13 * p2.y,
+ a13: a13,
+ a21: p4.x - p1.x + a23 * p4.x,
+ a22: p4.y - p1.y + a23 * p4.y,
+ a23: a23,
+ a31: p1.x,
+ a32: p1.y,
+ a33: 1,
+ };
+ }
+}
+function quadrilateralToSquare(p1, p2, p3, p4) {
+ // Here, the adjoint serves as the inverse:
+ var sToQ = squareToQuadrilateral(p1, p2, p3, p4);
+ return {
+ a11: sToQ.a22 * sToQ.a33 - sToQ.a23 * sToQ.a32,
+ a12: sToQ.a13 * sToQ.a32 - sToQ.a12 * sToQ.a33,
+ a13: sToQ.a12 * sToQ.a23 - sToQ.a13 * sToQ.a22,
+ a21: sToQ.a23 * sToQ.a31 - sToQ.a21 * sToQ.a33,
+ a22: sToQ.a11 * sToQ.a33 - sToQ.a13 * sToQ.a31,
+ a23: sToQ.a13 * sToQ.a21 - sToQ.a11 * sToQ.a23,
+ a31: sToQ.a21 * sToQ.a32 - sToQ.a22 * sToQ.a31,
+ a32: sToQ.a12 * sToQ.a31 - sToQ.a11 * sToQ.a32,
+ a33: sToQ.a11 * sToQ.a22 - sToQ.a12 * sToQ.a21,
+ };
+}
+function times(a, b) {
+ return {
+ a11: a.a11 * b.a11 + a.a21 * b.a12 + a.a31 * b.a13,
+ a12: a.a12 * b.a11 + a.a22 * b.a12 + a.a32 * b.a13,
+ a13: a.a13 * b.a11 + a.a23 * b.a12 + a.a33 * b.a13,
+ a21: a.a11 * b.a21 + a.a21 * b.a22 + a.a31 * b.a23,
+ a22: a.a12 * b.a21 + a.a22 * b.a22 + a.a32 * b.a23,
+ a23: a.a13 * b.a21 + a.a23 * b.a22 + a.a33 * b.a23,
+ a31: a.a11 * b.a31 + a.a21 * b.a32 + a.a31 * b.a33,
+ a32: a.a12 * b.a31 + a.a22 * b.a32 + a.a32 * b.a33,
+ a33: a.a13 * b.a31 + a.a23 * b.a32 + a.a33 * b.a33,
+ };
+}
+function extract(image, location) {
+ var qToS = quadrilateralToSquare({ x: 3.5, y: 3.5 }, { x: location.dimension - 3.5, y: 3.5 }, { x: location.dimension - 6.5, y: location.dimension - 6.5 }, { x: 3.5, y: location.dimension - 3.5 });
+ var sToQ = squareToQuadrilateral(location.topLeft, location.topRight, location.alignmentPattern, location.bottomLeft);
+ var transform = times(sToQ, qToS);
+ var matrix = BitMatrix_1.BitMatrix.createEmpty(location.dimension, location.dimension);
+ var mappingFunction = function (x, y) {
+ var denominator = transform.a13 * x + transform.a23 * y + transform.a33;
+ return {
+ x: (transform.a11 * x + transform.a21 * y + transform.a31) / denominator,
+ y: (transform.a12 * x + transform.a22 * y + transform.a32) / denominator,
+ };
+ };
+ for (var y = 0; y < location.dimension; y++) {
+ for (var x = 0; x < location.dimension; x++) {
+ var xValue = x + 0.5;
+ var yValue = y + 0.5;
+ var sourcePixel = mappingFunction(xValue, yValue);
+ matrix.set(x, y, image.get(Math.floor(sourcePixel.x), Math.floor(sourcePixel.y)));
+ }
+ }
+ return {
+ matrix: matrix,
+ mappingFunction: mappingFunction,
+ };
+}
+exports.extract = extract;
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var MAX_FINDERPATTERNS_TO_SEARCH = 4;
+var MIN_QUAD_RATIO = 0.5;
+var MAX_QUAD_RATIO = 1.5;
+var distance = function (a, b) { return Math.sqrt(Math.pow((b.x - a.x), 2) + Math.pow((b.y - a.y), 2)); };
+function sum(values) {
+ return values.reduce(function (a, b) { return a + b; });
+}
+// Takes three finder patterns and organizes them into topLeft, topRight, etc
+function reorderFinderPatterns(pattern1, pattern2, pattern3) {
+ var _a, _b, _c, _d;
+ // Find distances between pattern centers
+ var oneTwoDistance = distance(pattern1, pattern2);
+ var twoThreeDistance = distance(pattern2, pattern3);
+ var oneThreeDistance = distance(pattern1, pattern3);
+ var bottomLeft;
+ var topLeft;
+ var topRight;
+ // Assume one closest to other two is B; A and C will just be guesses at first
+ if (twoThreeDistance >= oneTwoDistance && twoThreeDistance >= oneThreeDistance) {
+ _a = [pattern2, pattern1, pattern3], bottomLeft = _a[0], topLeft = _a[1], topRight = _a[2];
+ }
+ else if (oneThreeDistance >= twoThreeDistance && oneThreeDistance >= oneTwoDistance) {
+ _b = [pattern1, pattern2, pattern3], bottomLeft = _b[0], topLeft = _b[1], topRight = _b[2];
+ }
+ else {
+ _c = [pattern1, pattern3, pattern2], bottomLeft = _c[0], topLeft = _c[1], topRight = _c[2];
+ }
+ // Use cross product to figure out whether bottomLeft (A) and topRight (C) are correct or flipped in relation to topLeft (B)
+ // This asks whether BC x BA has a positive z component, which is the arrangement we want. If it's negative, then
+ // we've got it flipped around and should swap topRight and bottomLeft.
+ if (((topRight.x - topLeft.x) * (bottomLeft.y - topLeft.y)) - ((topRight.y - topLeft.y) * (bottomLeft.x - topLeft.x)) < 0) {
+ _d = [topRight, bottomLeft], bottomLeft = _d[0], topRight = _d[1];
+ }
+ return { bottomLeft: bottomLeft, topLeft: topLeft, topRight: topRight };
+}
+// Computes the dimension (number of modules on a side) of the QR Code based on the position of the finder patterns
+function computeDimension(topLeft, topRight, bottomLeft, matrix) {
+ var moduleSize = (sum(countBlackWhiteRun(topLeft, bottomLeft, matrix, 5)) / 7 + // Divide by 7 since the ratio is 1:1:3:1:1
+ sum(countBlackWhiteRun(topLeft, topRight, matrix, 5)) / 7 +
+ sum(countBlackWhiteRun(bottomLeft, topLeft, matrix, 5)) / 7 +
+ sum(countBlackWhiteRun(topRight, topLeft, matrix, 5)) / 7) / 4;
+ if (moduleSize < 1) {
+ throw new Error("Invalid module size");
+ }
+ var topDimension = Math.round(distance(topLeft, topRight) / moduleSize);
+ var sideDimension = Math.round(distance(topLeft, bottomLeft) / moduleSize);
+ var dimension = Math.floor((topDimension + sideDimension) / 2) + 7;
+ switch (dimension % 4) {
+ case 0:
+ dimension++;
+ break;
+ case 2:
+ dimension--;
+ break;
+ }
+ return { dimension: dimension, moduleSize: moduleSize };
+}
+// Takes an origin point and an end point and counts the sizes of the black white run from the origin towards the end point.
+// Returns an array of elements, representing the pixel size of the black white run.
+// Uses a variant of http://en.wikipedia.org/wiki/Bresenham's_line_algorithm
+function countBlackWhiteRunTowardsPoint(origin, end, matrix, length) {
+ var switchPoints = [{ x: Math.floor(origin.x), y: Math.floor(origin.y) }];
+ var steep = Math.abs(end.y - origin.y) > Math.abs(end.x - origin.x);
+ var fromX;
+ var fromY;
+ var toX;
+ var toY;
+ if (steep) {
+ fromX = Math.floor(origin.y);
+ fromY = Math.floor(origin.x);
+ toX = Math.floor(end.y);
+ toY = Math.floor(end.x);
+ }
+ else {
+ fromX = Math.floor(origin.x);
+ fromY = Math.floor(origin.y);
+ toX = Math.floor(end.x);
+ toY = Math.floor(end.y);
+ }
+ var dx = Math.abs(toX - fromX);
+ var dy = Math.abs(toY - fromY);
+ var error = Math.floor(-dx / 2);
+ var xStep = fromX < toX ? 1 : -1;
+ var yStep = fromY < toY ? 1 : -1;
+ var currentPixel = true;
+ // Loop up until x == toX, but not beyond
+ for (var x = fromX, y = fromY; x !== toX + xStep; x += xStep) {
+ // Does current pixel mean we have moved white to black or vice versa?
+ // Scanning black in state 0,2 and white in state 1, so if we find the wrong
+ // color, advance to next state or end if we are in state 2 already
+ var realX = steep ? y : x;
+ var realY = steep ? x : y;
+ if (matrix.get(realX, realY) !== currentPixel) {
+ currentPixel = !currentPixel;
+ switchPoints.push({ x: realX, y: realY });
+ if (switchPoints.length === length + 1) {
+ break;
+ }
+ }
+ error += dy;
+ if (error > 0) {
+ if (y === toY) {
+ break;
+ }
+ y += yStep;
+ error -= dx;
+ }
+ }
+ var distances = [];
+ for (var i = 0; i < length; i++) {
+ if (switchPoints[i] && switchPoints[i + 1]) {
+ distances.push(distance(switchPoints[i], switchPoints[i + 1]));
+ }
+ else {
+ distances.push(0);
+ }
+ }
+ return distances;
+}
+// Takes an origin point and an end point and counts the sizes of the black white run in the origin point
+// along the line that intersects with the end point. Returns an array of elements, representing the pixel sizes
+// of the black white run. Takes a length which represents the number of switches from black to white to look for.
+function countBlackWhiteRun(origin, end, matrix, length) {
+ var _a;
+ var rise = end.y - origin.y;
+ var run = end.x - origin.x;
+ var towardsEnd = countBlackWhiteRunTowardsPoint(origin, end, matrix, Math.ceil(length / 2));
+ var awayFromEnd = countBlackWhiteRunTowardsPoint(origin, { x: origin.x - run, y: origin.y - rise }, matrix, Math.ceil(length / 2));
+ var middleValue = towardsEnd.shift() + awayFromEnd.shift() - 1; // Substract one so we don't double count a pixel
+ return (_a = awayFromEnd.concat(middleValue)).concat.apply(_a, towardsEnd);
+}
+// Takes in a black white run and an array of expected ratios. Returns the average size of the run as well as the "error" -
+// that is the amount the run diverges from the expected ratio
+function scoreBlackWhiteRun(sequence, ratios) {
+ var averageSize = sum(sequence) / sum(ratios);
+ var error = 0;
+ ratios.forEach(function (ratio, i) {
+ error += Math.pow((sequence[i] - ratio * averageSize), 2);
+ });
+ return { averageSize: averageSize, error: error };
+}
+// Takes an X,Y point and an array of sizes and scores the point against those ratios.
+// For example for a finder pattern takes the ratio list of 1:1:3:1:1 and checks horizontal, vertical and diagonal ratios
+// against that.
+function scorePattern(point, ratios, matrix) {
+ try {
+ var horizontalRun = countBlackWhiteRun(point, { x: -1, y: point.y }, matrix, ratios.length);
+ var verticalRun = countBlackWhiteRun(point, { x: point.x, y: -1 }, matrix, ratios.length);
+ var topLeftPoint = {
+ x: Math.max(0, point.x - point.y) - 1,
+ y: Math.max(0, point.y - point.x) - 1,
+ };
+ var topLeftBottomRightRun = countBlackWhiteRun(point, topLeftPoint, matrix, ratios.length);
+ var bottomLeftPoint = {
+ x: Math.min(matrix.width, point.x + point.y) + 1,
+ y: Math.min(matrix.height, point.y + point.x) + 1,
+ };
+ var bottomLeftTopRightRun = countBlackWhiteRun(point, bottomLeftPoint, matrix, ratios.length);
+ var horzError = scoreBlackWhiteRun(horizontalRun, ratios);
+ var vertError = scoreBlackWhiteRun(verticalRun, ratios);
+ var diagDownError = scoreBlackWhiteRun(topLeftBottomRightRun, ratios);
+ var diagUpError = scoreBlackWhiteRun(bottomLeftTopRightRun, ratios);
+ var ratioError = Math.sqrt(horzError.error * horzError.error +
+ vertError.error * vertError.error +
+ diagDownError.error * diagDownError.error +
+ diagUpError.error * diagUpError.error);
+ var avgSize = (horzError.averageSize + vertError.averageSize + diagDownError.averageSize + diagUpError.averageSize) / 4;
+ var sizeError = (Math.pow((horzError.averageSize - avgSize), 2) +
+ Math.pow((vertError.averageSize - avgSize), 2) +
+ Math.pow((diagDownError.averageSize - avgSize), 2) +
+ Math.pow((diagUpError.averageSize - avgSize), 2)) / avgSize;
+ return ratioError + sizeError;
+ }
+ catch (_a) {
+ return Infinity;
+ }
+}
+function recenterLocation(matrix, p) {
+ var leftX = Math.round(p.x);
+ while (matrix.get(leftX, Math.round(p.y))) {
+ leftX--;
+ }
+ var rightX = Math.round(p.x);
+ while (matrix.get(rightX, Math.round(p.y))) {
+ rightX++;
+ }
+ var x = (leftX + rightX) / 2;
+ var topY = Math.round(p.y);
+ while (matrix.get(Math.round(x), topY)) {
+ topY--;
+ }
+ var bottomY = Math.round(p.y);
+ while (matrix.get(Math.round(x), bottomY)) {
+ bottomY++;
+ }
+ var y = (topY + bottomY) / 2;
+ return { x: x, y: y };
+}
+function locate(matrix) {
+ var finderPatternQuads = [];
+ var activeFinderPatternQuads = [];
+ var alignmentPatternQuads = [];
+ var activeAlignmentPatternQuads = [];
+ var _loop_1 = function (y) {
+ var length_1 = 0;
+ var lastBit = false;
+ var scans = [0, 0, 0, 0, 0];
+ var _loop_2 = function (x) {
+ var v = matrix.get(x, y);
+ if (v === lastBit) {
+ length_1++;
+ }
+ else {
+ scans = [scans[1], scans[2], scans[3], scans[4], length_1];
+ length_1 = 1;
+ lastBit = v;
+ // Do the last 5 color changes ~ match the expected ratio for a finder pattern? 1:1:3:1:1 of b:w:b:w:b
+ var averageFinderPatternBlocksize = sum(scans) / 7;
+ var validFinderPattern = Math.abs(scans[0] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&
+ Math.abs(scans[1] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&
+ Math.abs(scans[2] - 3 * averageFinderPatternBlocksize) < 3 * averageFinderPatternBlocksize &&
+ Math.abs(scans[3] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&
+ Math.abs(scans[4] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize &&
+ !v; // And make sure the current pixel is white since finder patterns are bordered in white
+ // Do the last 3 color changes ~ match the expected ratio for an alignment pattern? 1:1:1 of w:b:w
+ var averageAlignmentPatternBlocksize = sum(scans.slice(-3)) / 3;
+ var validAlignmentPattern = Math.abs(scans[2] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize &&
+ Math.abs(scans[3] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize &&
+ Math.abs(scans[4] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize &&
+ v; // Is the current pixel black since alignment patterns are bordered in black
+ if (validFinderPattern) {
+ // Compute the start and end x values of the large center black square
+ var endX_1 = x - scans[3] - scans[4];
+ var startX_1 = endX_1 - scans[2];
+ var line = { startX: startX_1, endX: endX_1, y: y };
+ // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with
+ // that line as the starting point.
+ var matchingQuads = activeFinderPatternQuads.filter(function (q) {
+ return (startX_1 >= q.bottom.startX && startX_1 <= q.bottom.endX) ||
+ (endX_1 >= q.bottom.startX && startX_1 <= q.bottom.endX) ||
+ (startX_1 <= q.bottom.startX && endX_1 >= q.bottom.endX && ((scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO &&
+ (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO));
+ });
+ if (matchingQuads.length > 0) {
+ matchingQuads[0].bottom = line;
+ }
+ else {
+ activeFinderPatternQuads.push({ top: line, bottom: line });
+ }
+ }
+ if (validAlignmentPattern) {
+ // Compute the start and end x values of the center black square
+ var endX_2 = x - scans[4];
+ var startX_2 = endX_2 - scans[3];
+ var line = { startX: startX_2, y: y, endX: endX_2 };
+ // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with
+ // that line as the starting point.
+ var matchingQuads = activeAlignmentPatternQuads.filter(function (q) {
+ return (startX_2 >= q.bottom.startX && startX_2 <= q.bottom.endX) ||
+ (endX_2 >= q.bottom.startX && startX_2 <= q.bottom.endX) ||
+ (startX_2 <= q.bottom.startX && endX_2 >= q.bottom.endX && ((scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO &&
+ (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO));
+ });
+ if (matchingQuads.length > 0) {
+ matchingQuads[0].bottom = line;
+ }
+ else {
+ activeAlignmentPatternQuads.push({ top: line, bottom: line });
+ }
+ }
+ }
+ };
+ for (var x = -1; x <= matrix.width; x++) {
+ _loop_2(x);
+ }
+ finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { return q.bottom.y !== y && q.bottom.y - q.top.y >= 2; }));
+ activeFinderPatternQuads = activeFinderPatternQuads.filter(function (q) { return q.bottom.y === y; });
+ alignmentPatternQuads.push.apply(alignmentPatternQuads, activeAlignmentPatternQuads.filter(function (q) { return q.bottom.y !== y; }));
+ activeAlignmentPatternQuads = activeAlignmentPatternQuads.filter(function (q) { return q.bottom.y === y; });
+ };
+ for (var y = 0; y <= matrix.height; y++) {
+ _loop_1(y);
+ }
+ finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { return q.bottom.y - q.top.y >= 2; }));
+ alignmentPatternQuads.push.apply(alignmentPatternQuads, activeAlignmentPatternQuads);
+ var finderPatternGroups = finderPatternQuads
+ .filter(function (q) { return q.bottom.y - q.top.y >= 2; }) // All quads must be at least 2px tall since the center square is larger than a block
+ .map(function (q) {
+ var x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4;
+ var y = (q.top.y + q.bottom.y + 1) / 2;
+ if (!matrix.get(Math.round(x), Math.round(y))) {
+ return;
+ }
+ var lengths = [q.top.endX - q.top.startX, q.bottom.endX - q.bottom.startX, q.bottom.y - q.top.y + 1];
+ var size = sum(lengths) / lengths.length;
+ var score = scorePattern({ x: Math.round(x), y: Math.round(y) }, [1, 1, 3, 1, 1], matrix);
+ return { score: score, x: x, y: y, size: size };
+ })
+ .filter(function (q) { return !!q; }) // Filter out any rejected quads from above
+ .sort(function (a, b) { return a.score - b.score; })
+ // Now take the top finder pattern options and try to find 2 other options with a similar size.
+ .map(function (point, i, finderPatterns) {
+ if (i > MAX_FINDERPATTERNS_TO_SEARCH) {
+ return null;
+ }
+ var otherPoints = finderPatterns
+ .filter(function (p, ii) { return i !== ii; })
+ .map(function (p) { return ({ x: p.x, y: p.y, score: p.score + (Math.pow((p.size - point.size), 2)) / point.size, size: p.size }); })
+ .sort(function (a, b) { return a.score - b.score; });
+ if (otherPoints.length < 2) {
+ return null;
+ }
+ var score = point.score + otherPoints[0].score + otherPoints[1].score;
+ return { points: [point].concat(otherPoints.slice(0, 2)), score: score };
+ })
+ .filter(function (q) { return !!q; }) // Filter out any rejected finder patterns from above
+ .sort(function (a, b) { return a.score - b.score; });
+ if (finderPatternGroups.length === 0) {
+ return null;
+ }
+ var _a = reorderFinderPatterns(finderPatternGroups[0].points[0], finderPatternGroups[0].points[1], finderPatternGroups[0].points[2]), topRight = _a.topRight, topLeft = _a.topLeft, bottomLeft = _a.bottomLeft;
+ var alignment = findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft);
+ var result = [];
+ if (alignment) {
+ result.push({
+ alignmentPattern: { x: alignment.alignmentPattern.x, y: alignment.alignmentPattern.y },
+ bottomLeft: { x: bottomLeft.x, y: bottomLeft.y },
+ dimension: alignment.dimension,
+ topLeft: { x: topLeft.x, y: topLeft.y },
+ topRight: { x: topRight.x, y: topRight.y },
+ });
+ }
+ // We normally use the center of the quads as the location of the tracking points, which is optimal for most cases and will account
+ // for a skew in the image. However, In some cases, a slight skew might not be real and instead be caused by image compression
+ // errors and/or low resolution. For those cases, we'd be better off centering the point exactly in the middle of the black area. We
+ // compute and return the location data for the naively centered points as it is little additional work and allows for multiple
+ // attempts at decoding harder images.
+ var midTopRight = recenterLocation(matrix, topRight);
+ var midTopLeft = recenterLocation(matrix, topLeft);
+ var midBottomLeft = recenterLocation(matrix, bottomLeft);
+ var centeredAlignment = findAlignmentPattern(matrix, alignmentPatternQuads, midTopRight, midTopLeft, midBottomLeft);
+ if (centeredAlignment) {
+ result.push({
+ alignmentPattern: { x: centeredAlignment.alignmentPattern.x, y: centeredAlignment.alignmentPattern.y },
+ bottomLeft: { x: midBottomLeft.x, y: midBottomLeft.y },
+ topLeft: { x: midTopLeft.x, y: midTopLeft.y },
+ topRight: { x: midTopRight.x, y: midTopRight.y },
+ dimension: centeredAlignment.dimension,
+ });
+ }
+ if (result.length === 0) {
+ return null;
+ }
+ return result;
+}
+exports.locate = locate;
+function findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft) {
+ var _a;
+ // Now that we've found the three finder patterns we can determine the blockSize and the size of the QR code.
+ // We'll use these to help find the alignment pattern but also later when we do the extraction.
+ var dimension;
+ var moduleSize;
+ try {
+ (_a = computeDimension(topLeft, topRight, bottomLeft, matrix), dimension = _a.dimension, moduleSize = _a.moduleSize);
+ }
+ catch (e) {
+ return null;
+ }
+ // Now find the alignment pattern
+ var bottomRightFinderPattern = {
+ x: topRight.x - topLeft.x + bottomLeft.x,
+ y: topRight.y - topLeft.y + bottomLeft.y,
+ };
+ var modulesBetweenFinderPatterns = ((distance(topLeft, bottomLeft) + distance(topLeft, topRight)) / 2 / moduleSize);
+ var correctionToTopLeft = 1 - (3 / modulesBetweenFinderPatterns);
+ var expectedAlignmentPattern = {
+ x: topLeft.x + correctionToTopLeft * (bottomRightFinderPattern.x - topLeft.x),
+ y: topLeft.y + correctionToTopLeft * (bottomRightFinderPattern.y - topLeft.y),
+ };
+ var alignmentPatterns = alignmentPatternQuads
+ .map(function (q) {
+ var x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4;
+ var y = (q.top.y + q.bottom.y + 1) / 2;
+ if (!matrix.get(Math.floor(x), Math.floor(y))) {
+ return;
+ }
+ var lengths = [q.top.endX - q.top.startX, q.bottom.endX - q.bottom.startX, (q.bottom.y - q.top.y + 1)];
+ var size = sum(lengths) / lengths.length;
+ var sizeScore = scorePattern({ x: Math.floor(x), y: Math.floor(y) }, [1, 1, 1], matrix);
+ var score = sizeScore + distance({ x: x, y: y }, expectedAlignmentPattern);
+ return { x: x, y: y, score: score };
+ })
+ .filter(function (v) { return !!v; })
+ .sort(function (a, b) { return a.score - b.score; });
+ // If there are less than 15 modules between finder patterns it's a version 1 QR code and as such has no alignmemnt pattern
+ // so we can only use our best guess.
+ var alignmentPattern = modulesBetweenFinderPatterns >= 15 && alignmentPatterns.length ? alignmentPatterns[0] : expectedAlignmentPattern;
+ return { alignmentPattern: alignmentPattern, dimension: dimension };
+}
+
+
+/***/ })
+/******/ ])["default"];
+});
\ No newline at end of file
diff --git a/uni_modules/mumu-getQrcode/components/mumu-getQrcode/mumu-getQrcode.vue b/uni_modules/mumu-getQrcode/components/mumu-getQrcode/mumu-getQrcode.vue
new file mode 100644
index 0000000..b38fba0
--- /dev/null
+++ b/uni_modules/mumu-getQrcode/components/mumu-getQrcode/mumu-getQrcode.vue
@@ -0,0 +1,423 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ trackStatus ? '关闭闪光灯' : '打开闪光灯' }}
+
+
+
+
+
+
+
+
+
+
+
+ 相机权限被拒绝,请尝试如下操作:
+ · 刷新页面后重试;
+ · 在系统中检测当前App或浏览器的相机权限是否被禁用;
+ · 如果依然不能体验,建议在微信中打开链接;
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/mumu-getQrcode/package.json b/uni_modules/mumu-getQrcode/package.json
new file mode 100644
index 0000000..0f10116
--- /dev/null
+++ b/uni_modules/mumu-getQrcode/package.json
@@ -0,0 +1,83 @@
+{
+ "id": "mumu-getQrcode",
+ "displayName": "H5调用摄像头识别二维码(原生H5调用,不需要任何sdk,本地扫描识别,不需要后端)",
+ "version": "1.3.0",
+ "description": "在浏览器中调用手机摄像头进行扫码,无须任何sdk,支持市面上绝大部分手机。在安卓系统上可以打开闪光灯",
+ "keywords": [
+ "h5扫码",
+ "原生H5调用摄像头",
+ "二维码",
+ "闪光灯"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "4.55"
+ },
+ "sourcecode": {
+ "price": "30.00"
+ }
+ },
+ "contact": {
+ "qq": "1139027508"
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "摄像头"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "n",
+ "app-nvue": "n"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "n",
+ "IE": "n",
+ "Edge": "n",
+ "Firefox": "n",
+ "Safari": "n"
+ },
+ "小程序": {
+ "微信": "n",
+ "阿里": "n",
+ "百度": "n",
+ "字节跳动": "n",
+ "QQ": "n"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/mumu-getQrcode/readme.md b/uni_modules/mumu-getQrcode/readme.md
new file mode 100644
index 0000000..b3d49cc
--- /dev/null
+++ b/uni_modules/mumu-getQrcode/readme.md
@@ -0,0 +1,137 @@
+## 插件简绍
+### 实现原理
+
+> 二维码识别功能使用的是jsQR这个库,调用摄像头使用的 navigator.mediaDevices.getUserMedia 这个H5的api。通过canvas画布把摄像头获取到的数据展现到页面上,同时循环监听jsQR解析。
+
+
+### 使用环境
+经测试发现大部分浏览器都可以正常使用(微信,QQ,谷歌,火狐,safari),少数的安卓自带浏览器无法使用(浏览器内核版本过低)。需要https环境才能使用,本地测试可以在 manifest.json 中点击源码展示,找到h5 ,添加:"devServer" : { "https" : true}
+
+需要https环境才能使用!!!
+
+需要https环境才能使用!!!
+
+需要https环境才能使用!!!
+
+**小知识点:苹果设备上不论什么浏览器都是safari套壳的,不论是谷歌还是火狐都是safari套壳。这也就是代表在苹果上无需担心无法使用此插件。(造成这样的现象是因为苹果有一则协议,浏览器只能使用safari内核)**
+
+在安卓系统上可以打开闪光灯
+
+#### 通过脚手架创建的 uni 项目,需要看这里
+
+如果你是通过脚手架创建的 uni 的项目,需要自行安装 `jsQR` 依赖,并且修改组件中源码中的引入。通过 HBuilder 创建的项目不需要此操作。
+
+```bash
+# 安装 jsQR
+npm install jsqr --save
+# 修改组件源码对 jsQR 依赖
+import jsQR from "jsqr"
+```
+
+
+
+### 插件使用
+**插件已支持 uni_modules 支持组件easycom,以下代码演示的是普通使用**
+
+``` html
+
+
+```
+
+``` javascript
+// js
+import mumuGetQrcode from '@/uni_modules/mumu-getQrcode/components/mumu-getQrcode/mumu-getQrcode.vue'
+// 嫌路径长的话可以单独复制出来
+export default {
+ components: {
+ mumuGetQrcode
+ },
+ methods: {
+ qrcodeSucess(data) {
+ uni.showModal({
+ title: '成功',
+ content: data,
+ success: () => {
+ uni.navigateBack({})
+ }
+ })
+ },
+ qrcodeError(err) {
+ console.log(err)
+ uni.showModal({
+ title: '摄像头授权失败',
+ content: '摄像头授权失败,请检测当前浏览器是否有摄像头权限。',
+ success: () => {
+ uni.navigateBack({})
+ }
+ })
+ }
+ }
+ }
+```
+### 相关API
+
+##### 可传属性(Props)
+
+| 参数 | 说明 | 类型 | 默认值 |
+| ---------- | ------------------------------------------------- | ------- | ----------- |
+| continue | 是否连续获取。false 监听一次 true 持续监听 | Boolean | false |
+| exact | 选调用摄像头。environment 后摄像头 user 前摄像头 | String | environment |
+| size | 扫码屏幕大小。whole 全屏 balf 半屏 | String | whole |
+| definition | 调用摄像头清晰度。fasle 正常 true 高清 | Boolean | false |
+
+
+
+##### 事件(Events)
+
+| 事件名 | 说明 | 回调参数 |
+| ------- | ------------------------------------------ | ------------------ |
+| success | 检测到图中有二维码并读取到数据是回调 | 二维码数据 |
+| error | 组件内部发送错误,通常是摄像头没有调用成功 | 错误信息,详情见下 |
+
+**常见的错误信息:**
+
+- `AbortError`[中止错误]
+
+ 尽管用户和操作系统都授予了访问设备硬件的权利,而且未出现可能抛出`NotReadableError`异常的硬件问题,但仍然有一些问题的出现导致了设备无法被使用。
+
+- `NotAllowedError`[拒绝错误]
+
+ 用户拒绝了当前的浏览器实例的访问请求;或者用户拒绝了当前会话的访问;或者用户在全局范围内拒绝了所有媒体访问请求。
+
+- `NotFoundError`[找不到错误]
+
+ 找不到满足请求参数的媒体类型。
+
+- `NotReadableError`[无法读取错误]
+
+ 尽管用户已经授权使用相应的设备,操作系统上某个硬件、浏览器或者网页层面发生的错误导致设备无法被访问。
+
+- `OverconstrainedError`[无法满足要求错误]
+
+ 指定的要求无法被设备满足,此异常是一个类型为`OverconstrainedError`的对象,拥有一个`constraint`属性,这个属性包含了当前无法被满足的`constraint`对象,还拥有一个`message`属性,包含了阅读友好的字符串用来说明情况。
+
+- `SecurityError`[安全错误]
+
+ 在`getUserMedia()` 被调用的 [`Document`](https://developer.mozilla.org/zh-CN/docs/Web/API/Document) 上面,使用设备媒体被禁止。这个机制是否开启或者关闭取决于单个用户的偏好设置。
+
+- `TypeError`[类型错误]
+
+ constraints 对象未设置[空],或者都被设置为`false`。
+
+
+
+##### 插槽 (slot)
+
+| 插槽名称 | 说明 | 默认值 |
+| -------- | -------------------------------- | ------------------ |
+| error | 当发送错误时,在页面上显示的内容 | 相机权限被拒绝提示 |
+
+
+
+### 案例演示
+
+
+
+## 支持作者
+
diff --git a/uni_modules/uni-badge/changelog.md b/uni_modules/uni-badge/changelog.md
new file mode 100644
index 0000000..544ecc1
--- /dev/null
+++ b/uni_modules/uni-badge/changelog.md
@@ -0,0 +1,29 @@
+## 1.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-badge](https://uniapp.dcloud.io/component/uniui/uni-badge)
+## 1.1.7(2021-11-08)
+- 优化 升级ui
+- 修改 size 属性默认值调整为 small
+- 修改 type 属性,默认值调整为 error,info 替换 default
+## 1.1.6(2021-09-22)
+- 修复 在字节小程序上样式不生效的 bug
+## 1.1.5(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.4(2021-07-29)
+- 修复 去掉 nvue 不支持css 的 align-self 属性,nvue 下不暂支持 absolute 属性
+## 1.1.3(2021-06-24)
+- 优化 示例项目
+## 1.1.1(2021-05-12)
+- 新增 组件示例地址
+## 1.1.0(2021-05-12)
+- 新增 uni-badge 的 absolute 属性,支持定位
+- 新增 uni-badge 的 offset 属性,支持定位偏移
+- 新增 uni-badge 的 is-dot 属性,支持仅显示有一个小点
+- 新增 uni-badge 的 max-num 属性,支持自定义封顶的数字值,超过 99 显示99+
+- 优化 uni-badge 属性 custom-style, 支持以对象形式自定义样式
+## 1.0.7(2021-05-07)
+- 修复 uni-badge 在 App 端,数字小于10时不是圆形的bug
+- 修复 uni-badge 在父元素不是 flex 布局时,宽度缩小的bug
+- 新增 uni-badge 属性 custom-style, 支持自定义样式
+## 1.0.6(2021-02-04)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-badge/components/uni-badge/uni-badge.vue b/uni_modules/uni-badge/components/uni-badge/uni-badge.vue
new file mode 100644
index 0000000..fcbfe93
--- /dev/null
+++ b/uni_modules/uni-badge/components/uni-badge/uni-badge.vue
@@ -0,0 +1,268 @@
+
+
+
+ {{displayValue}}
+
+
+
+
+
+
diff --git a/uni_modules/uni-badge/package.json b/uni_modules/uni-badge/package.json
new file mode 100644
index 0000000..4e9e631
--- /dev/null
+++ b/uni_modules/uni-badge/package.json
@@ -0,0 +1,88 @@
+{
+ "id": "uni-badge",
+ "displayName": "uni-badge 数字角标",
+ "version": "1.2.0",
+ "description": "数字角标(徽章)组件,在元素周围展示消息提醒,一般用于列表、九宫格、按钮等地方。",
+ "keywords": [
+ "",
+ "badge",
+ "uni-ui",
+ "uniui",
+ "数字角标",
+ "徽章"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "y",
+ "联盟": "y"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-badge/readme.md b/uni_modules/uni-badge/readme.md
new file mode 100644
index 0000000..bdf175d
--- /dev/null
+++ b/uni_modules/uni-badge/readme.md
@@ -0,0 +1,10 @@
+## Badge 数字角标
+> **组件名:uni-badge**
+> 代码块: `uBadge`
+
+数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景,
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-badge)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
diff --git a/uni_modules/uni-breadcrumb/changelog.md b/uni_modules/uni-breadcrumb/changelog.md
new file mode 100644
index 0000000..016e6ce
--- /dev/null
+++ b/uni_modules/uni-breadcrumb/changelog.md
@@ -0,0 +1,6 @@
+## 0.1.2(2022-06-08)
+- 修复 微信小程序 separator 不显示问题
+## 0.1.1(2022-06-02)
+- 新增 支持 uni.scss 修改颜色
+## 0.1.0(2022-04-21)
+- 初始化
diff --git a/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue b/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue
new file mode 100644
index 0000000..b9edbd6
--- /dev/null
+++ b/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+ {{ separator }}
+
+
+
+
diff --git a/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue b/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue
new file mode 100644
index 0000000..94493a2
--- /dev/null
+++ b/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-breadcrumb/package.json b/uni_modules/uni-breadcrumb/package.json
new file mode 100644
index 0000000..0a04e50
--- /dev/null
+++ b/uni_modules/uni-breadcrumb/package.json
@@ -0,0 +1,88 @@
+{
+ "id": "uni-breadcrumb",
+ "displayName": "uni-breadcrumb 面包屑",
+ "version": "0.1.2",
+ "description": "Breadcrumb 面包屑",
+ "keywords": [
+ "uni-breadcrumb",
+ "breadcrumb",
+ "uni-ui",
+ "面包屑导航",
+ "面包屑"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "n"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-breadcrumb/readme.md b/uni_modules/uni-breadcrumb/readme.md
new file mode 100644
index 0000000..6976b8d
--- /dev/null
+++ b/uni_modules/uni-breadcrumb/readme.md
@@ -0,0 +1,66 @@
+
+## breadcrumb 面包屑导航
+> **组件名:uni-breadcrumb**
+> 代码块: `ubreadcrumb`
+
+显示当前页面的路径,快速返回之前的任意页面。
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
+
+### 基本用法
+
+在 ``template`` 中使用组件
+
+```html
+
+ {{route.name}}
+
+```
+
+```js
+export default {
+ name: "uni-stat-breadcrumb",
+ data() {
+ return {
+ routes: [{
+ to: '/A',
+ name: 'A页面'
+ }, {
+ to: '/B',
+ name: 'B页面'
+ }, {
+ to: '/C',
+ name: 'C页面'
+ }]
+ };
+ }
+ }
+```
+
+
+## API
+
+### Breadcrumb Props
+
+|属性名 |类型 |默认值 |说明 |
+|:-: |:-: |:-: |:-: |
+|separator |String |斜杠'/' |分隔符 |
+|separatorClass |String | |图标分隔符 class |
+
+### Breadcrumb Item Props
+
+|属性名 |类型 |默认值 |说明 |
+|:-: |:-: |:-: |:-: |
+|to |String | |路由跳转页面路径 |
+|replace|Boolean | |在使用 to 进行路由跳转时,启用 replace 将不会向 history 添加新记录(仅 h5 支持) |
+
+
+
+
+## 组件示例
+
+点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/breadcrumb/breadcrumb](https://hellouniapp.dcloud.net.cn/pages/extUI/breadcrumb/breadcrumb)
\ No newline at end of file
diff --git a/uni_modules/uni-calendar/changelog.md b/uni_modules/uni-calendar/changelog.md
new file mode 100644
index 0000000..6df4493
--- /dev/null
+++ b/uni_modules/uni-calendar/changelog.md
@@ -0,0 +1,16 @@
+## 1.4.5(2022-02-25)
+- 修复 条件编译 nvue 不支持的 css 样式
+## 1.4.4(2022-02-25)
+- 修复 条件编译 nvue 不支持的 css 样式
+## 1.4.3(2021-09-22)
+- 修复 startDate、 endDate 属性失效的 bug
+## 1.4.2(2021-08-24)
+- 新增 支持国际化
+## 1.4.1(2021-08-05)
+- 修复 弹出层被 tabbar 遮盖 bug
+## 1.4.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.3.16(2021-05-12)
+- 新增 组件示例地址
+## 1.3.15(2021-02-04)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-calendar/components/uni-calendar/calendar.js b/uni_modules/uni-calendar/components/uni-calendar/calendar.js
new file mode 100644
index 0000000..b8d7d6f
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/calendar.js
@@ -0,0 +1,546 @@
+/**
+* @1900-2100区间内的公历、农历互转
+* @charset UTF-8
+* @github https://github.com/jjonline/calendar.js
+* @Author Jea杨(JJonline@JJonline.Cn)
+* @Time 2014-7-21
+* @Time 2016-8-13 Fixed 2033hex、Attribution Annals
+* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug
+* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year
+* @Version 1.0.3
+* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0]
+* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0]
+*/
+/* eslint-disable */
+var calendar = {
+
+ /**
+ * 农历1900-2100的润大小信息表
+ * @Array Of Property
+ * @return Hex
+ */
+ lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909
+ 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919
+ 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929
+ 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939
+ 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949
+ 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959
+ 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969
+ 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979
+ 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989
+ 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999
+ 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009
+ 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019
+ 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029
+ 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039
+ 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049
+ /** Add By JJonline@JJonline.Cn**/
+ 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059
+ 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069
+ 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079
+ 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089
+ 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099
+ 0x0d520], // 2100
+
+ /**
+ * 公历每个月份的天数普通表
+ * @Array Of Property
+ * @return Number
+ */
+ solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+
+ /**
+ * 天干地支之天干速查表
+ * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
+ * @return Cn string
+ */
+ Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'],
+
+ /**
+ * 天干地支之地支速查表
+ * @Array Of Property
+ * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
+ * @return Cn string
+ */
+ Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'],
+
+ /**
+ * 天干地支之地支速查表<=>生肖
+ * @Array Of Property
+ * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
+ * @return Cn string
+ */
+ Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'],
+
+ /**
+ * 24节气速查表
+ * @Array Of Property
+ * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
+ * @return Cn string
+ */
+ solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'],
+
+ /**
+ * 1900-2100各年的24节气日期速查表
+ * @Array Of Property
+ * @return 0x string For splice
+ */
+ sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f',
+ '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f',
+ 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f',
+ '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa',
+ '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f',
+ '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f',
+ '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f',
+ '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
+ '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722',
+ '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
+ '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
+ '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
+ '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2',
+ '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
+ '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
+ '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5',
+ '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722',
+ '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35',
+ '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd',
+ '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35',
+ '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5',
+ '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35',
+ '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35',
+ '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'],
+
+ /**
+ * 数字转中文速查表
+ * @Array Of Property
+ * @trans ['日','一','二','三','四','五','六','七','八','九','十']
+ * @return Cn string
+ */
+ nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'],
+
+ /**
+ * 日期转农历称呼速查表
+ * @Array Of Property
+ * @trans ['初','十','廿','卅']
+ * @return Cn string
+ */
+ nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'],
+
+ /**
+ * 月份转农历称呼速查表
+ * @Array Of Property
+ * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊']
+ * @return Cn string
+ */
+ nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'],
+
+ /**
+ * 返回农历y年一整年的总天数
+ * @param lunar Year
+ * @return Number
+ * @eg:var count = calendar.lYearDays(1987) ;//count=387
+ */
+ lYearDays: function (y) {
+ var i; var sum = 348
+ for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 }
+ return (sum + this.leapDays(y))
+ },
+
+ /**
+ * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
+ * @param lunar Year
+ * @return Number (0-12)
+ * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
+ */
+ leapMonth: function (y) { // 闰字编码 \u95f0
+ return (this.lunarInfo[y - 1900] & 0xf)
+ },
+
+ /**
+ * 返回农历y年闰月的天数 若该年没有闰月则返回0
+ * @param lunar Year
+ * @return Number (0、29、30)
+ * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
+ */
+ leapDays: function (y) {
+ if (this.leapMonth(y)) {
+ return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29)
+ }
+ return (0)
+ },
+
+ /**
+ * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
+ * @param lunar Year
+ * @return Number (-1、29、30)
+ * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
+ */
+ monthDays: function (y, m) {
+ if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1
+ return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29)
+ },
+
+ /**
+ * 返回公历(!)y年m月的天数
+ * @param solar Year
+ * @return Number (-1、28、29、30、31)
+ * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
+ */
+ solarDays: function (y, m) {
+ if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1
+ var ms = m - 1
+ if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29
+ return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28)
+ } else {
+ return (this.solarMonth[ms])
+ }
+ },
+
+ /**
+ * 农历年份转换为干支纪年
+ * @param lYear 农历年的年份数
+ * @return Cn string
+ */
+ toGanZhiYear: function (lYear) {
+ var ganKey = (lYear - 3) % 10
+ var zhiKey = (lYear - 3) % 12
+ if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干
+ if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支
+ return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1]
+ },
+
+ /**
+ * 公历月、日判断所属星座
+ * @param cMonth [description]
+ * @param cDay [description]
+ * @return Cn string
+ */
+ toAstro: function (cMonth, cDay) {
+ var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf'
+ var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22]
+ return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座
+ },
+
+ /**
+ * 传入offset偏移量返回干支
+ * @param offset 相对甲子的偏移量
+ * @return Cn string
+ */
+ toGanZhi: function (offset) {
+ return this.Gan[offset % 10] + this.Zhi[offset % 12]
+ },
+
+ /**
+ * 传入公历(!)y年获得该年第n个节气的公历日期
+ * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
+ * @return day Number
+ * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
+ */
+ getTerm: function (y, n) {
+ if (y < 1900 || y > 2100) { return -1 }
+ if (n < 1 || n > 24) { return -1 }
+ var _table = this.sTermInfo[y - 1900]
+ var _info = [
+ parseInt('0x' + _table.substr(0, 5)).toString(),
+ parseInt('0x' + _table.substr(5, 5)).toString(),
+ parseInt('0x' + _table.substr(10, 5)).toString(),
+ parseInt('0x' + _table.substr(15, 5)).toString(),
+ parseInt('0x' + _table.substr(20, 5)).toString(),
+ parseInt('0x' + _table.substr(25, 5)).toString()
+ ]
+ var _calday = [
+ _info[0].substr(0, 1),
+ _info[0].substr(1, 2),
+ _info[0].substr(3, 1),
+ _info[0].substr(4, 2),
+
+ _info[1].substr(0, 1),
+ _info[1].substr(1, 2),
+ _info[1].substr(3, 1),
+ _info[1].substr(4, 2),
+
+ _info[2].substr(0, 1),
+ _info[2].substr(1, 2),
+ _info[2].substr(3, 1),
+ _info[2].substr(4, 2),
+
+ _info[3].substr(0, 1),
+ _info[3].substr(1, 2),
+ _info[3].substr(3, 1),
+ _info[3].substr(4, 2),
+
+ _info[4].substr(0, 1),
+ _info[4].substr(1, 2),
+ _info[4].substr(3, 1),
+ _info[4].substr(4, 2),
+
+ _info[5].substr(0, 1),
+ _info[5].substr(1, 2),
+ _info[5].substr(3, 1),
+ _info[5].substr(4, 2)
+ ]
+ return parseInt(_calday[n - 1])
+ },
+
+ /**
+ * 传入农历数字月份返回汉语通俗表示法
+ * @param lunar month
+ * @return Cn string
+ * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
+ */
+ toChinaMonth: function (m) { // 月 => \u6708
+ if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1
+ var s = this.nStr3[m - 1]
+ s += '\u6708'// 加上月字
+ return s
+ },
+
+ /**
+ * 传入农历日期数字返回汉字表示法
+ * @param lunar day
+ * @return Cn string
+ * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
+ */
+ toChinaDay: function (d) { // 日 => \u65e5
+ var s
+ switch (d) {
+ case 10:
+ s = '\u521d\u5341'; break
+ case 20:
+ s = '\u4e8c\u5341'; break
+ break
+ case 30:
+ s = '\u4e09\u5341'; break
+ break
+ default :
+ s = this.nStr2[Math.floor(d / 10)]
+ s += this.nStr1[d % 10]
+ }
+ return (s)
+ },
+
+ /**
+ * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
+ * @param y year
+ * @return Cn string
+ * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
+ */
+ getAnimal: function (y) {
+ return this.Animals[(y - 4) % 12]
+ },
+
+ /**
+ * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON
+ * @param y solar year
+ * @param m solar month
+ * @param d solar day
+ * @return JSON object
+ * @eg:console.log(calendar.solar2lunar(1987,11,01));
+ */
+ solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31
+ // 年份限定、上限
+ if (y < 1900 || y > 2100) {
+ return -1// undefined转换为数字变为NaN
+ }
+ // 公历传参最下限
+ if (y == 1900 && m == 1 && d < 31) {
+ return -1
+ }
+ // 未传参 获得当天
+ if (!y) {
+ var objDate = new Date()
+ } else {
+ var objDate = new Date(y, parseInt(m) - 1, d)
+ }
+ var i; var leap = 0; var temp = 0
+ // 修正ymd参数
+ var y = objDate.getFullYear()
+ var m = objDate.getMonth() + 1
+ var d = objDate.getDate()
+ var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000
+ for (i = 1900; i < 2101 && offset > 0; i++) {
+ temp = this.lYearDays(i)
+ offset -= temp
+ }
+ if (offset < 0) {
+ offset += temp; i--
+ }
+
+ // 是否今天
+ var isTodayObj = new Date()
+ var isToday = false
+ if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) {
+ isToday = true
+ }
+ // 星期几
+ var nWeek = objDate.getDay()
+ var cWeek = this.nStr1[nWeek]
+ // 数字表示周几顺应天朝周一开始的惯例
+ if (nWeek == 0) {
+ nWeek = 7
+ }
+ // 农历年
+ var year = i
+ var leap = this.leapMonth(i) // 闰哪个月
+ var isLeap = false
+
+ // 效验闰月
+ for (i = 1; i < 13 && offset > 0; i++) {
+ // 闰月
+ if (leap > 0 && i == (leap + 1) && isLeap == false) {
+ --i
+ isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数
+ } else {
+ temp = this.monthDays(year, i)// 计算农历普通月天数
+ }
+ // 解除闰月
+ if (isLeap == true && i == (leap + 1)) { isLeap = false }
+ offset -= temp
+ }
+ // 闰月导致数组下标重叠取反
+ if (offset == 0 && leap > 0 && i == leap + 1) {
+ if (isLeap) {
+ isLeap = false
+ } else {
+ isLeap = true; --i
+ }
+ }
+ if (offset < 0) {
+ offset += temp; --i
+ }
+ // 农历月
+ var month = i
+ // 农历日
+ var day = offset + 1
+ // 天干地支处理
+ var sm = m - 1
+ var gzY = this.toGanZhiYear(year)
+
+ // 当月的两个节气
+ // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year`
+ var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始
+ var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始
+
+ // 依据12节气修正干支月
+ var gzM = this.toGanZhi((y - 1900) * 12 + m + 11)
+ if (d >= firstNode) {
+ gzM = this.toGanZhi((y - 1900) * 12 + m + 12)
+ }
+
+ // 传入的日期的节气与否
+ var isTerm = false
+ var Term = null
+ if (firstNode == d) {
+ isTerm = true
+ Term = this.solarTerm[m * 2 - 2]
+ }
+ if (secondNode == d) {
+ isTerm = true
+ Term = this.solarTerm[m * 2 - 1]
+ }
+ // 日柱 当月一日与 1900/1/1 相差天数
+ var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10
+ var gzD = this.toGanZhi(dayCyclical + d - 1)
+ // 该日期所属的星座
+ var astro = this.toAstro(m, d)
+
+ return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro }
+ },
+
+ /**
+ * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON
+ * @param y lunar year
+ * @param m lunar month
+ * @param d lunar day
+ * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
+ * @return JSON object
+ * @eg:console.log(calendar.lunar2solar(1987,9,10));
+ */
+ lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1
+ var isLeapMonth = !!isLeapMonth
+ var leapOffset = 0
+ var leapMonth = this.leapMonth(y)
+ var leapDay = this.leapDays(y)
+ if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
+ if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值
+ var day = this.monthDays(y, m)
+ var _day = day
+ // bugFix 2016-9-25
+ // if month is leap, _day use leapDays method
+ if (isLeapMonth) {
+ _day = this.leapDays(y, m)
+ }
+ if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验
+
+ // 计算农历的时间差
+ var offset = 0
+ for (var i = 1900; i < y; i++) {
+ offset += this.lYearDays(i)
+ }
+ var leap = 0; var isAdd = false
+ for (var i = 1; i < m; i++) {
+ leap = this.leapMonth(y)
+ if (!isAdd) { // 处理闰月
+ if (leap <= i && leap > 0) {
+ offset += this.leapDays(y); isAdd = true
+ }
+ }
+ offset += this.monthDays(y, i)
+ }
+ // 转换闰月农历 需补充该年闰月的前一个月的时差
+ if (isLeapMonth) { offset += day }
+ // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
+ var stmap = Date.UTC(1900, 1, 30, 0, 0, 0)
+ var calObj = new Date((offset + d - 31) * 86400000 + stmap)
+ var cY = calObj.getUTCFullYear()
+ var cM = calObj.getUTCMonth() + 1
+ var cD = calObj.getUTCDate()
+
+ return this.solar2lunar(cY, cM, cD)
+ }
+}
+
+export default calendar
diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json
new file mode 100644
index 0000000..fcbd13c
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json
@@ -0,0 +1,12 @@
+{
+ "uni-calender.ok": "ok",
+ "uni-calender.cancel": "cancel",
+ "uni-calender.today": "today",
+ "uni-calender.MON": "MON",
+ "uni-calender.TUE": "TUE",
+ "uni-calender.WED": "WED",
+ "uni-calender.THU": "THU",
+ "uni-calender.FRI": "FRI",
+ "uni-calender.SAT": "SAT",
+ "uni-calender.SUN": "SUN"
+}
diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js
new file mode 100644
index 0000000..de7509c
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json
new file mode 100644
index 0000000..1ca43de
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json
@@ -0,0 +1,12 @@
+{
+ "uni-calender.ok": "确定",
+ "uni-calender.cancel": "取消",
+ "uni-calender.today": "今日",
+ "uni-calender.SUN": "日",
+ "uni-calender.MON": "一",
+ "uni-calender.TUE": "二",
+ "uni-calender.WED": "三",
+ "uni-calender.THU": "四",
+ "uni-calender.FRI": "五",
+ "uni-calender.SAT": "六"
+}
diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json
new file mode 100644
index 0000000..e0fe33b
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json
@@ -0,0 +1,12 @@
+{
+ "uni-calender.ok": "確定",
+ "uni-calender.cancel": "取消",
+ "uni-calender.today": "今日",
+ "uni-calender.SUN": "日",
+ "uni-calender.MON": "一",
+ "uni-calender.TUE": "二",
+ "uni-calender.WED": "三",
+ "uni-calender.THU": "四",
+ "uni-calender.FRI": "五",
+ "uni-calender.SAT": "六"
+}
diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue
new file mode 100644
index 0000000..30bd6c8
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue
@@ -0,0 +1,188 @@
+
+
+
+
+ {{weeks.date}}
+ {{todayText}}
+ {{weeks.isDay ? todayText : (weeks.lunar.IDayCn === '初一'?weeks.lunar.IMonthCn:weeks.lunar.IDayCn)}}
+ {{weeks.extraInfo.info}}
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue
new file mode 100644
index 0000000..88381db
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue
@@ -0,0 +1,562 @@
+
+
+
+
+
+
+
+
+ {{nowDate.month}}
+
+
+
+ {{SUNText}}
+
+
+ {{monText}}
+
+
+ {{TUEText}}
+
+
+ {{WEDText}}
+
+
+ {{THUText}}
+
+
+ {{FRIText}}
+
+
+ {{SATText}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-calendar/components/uni-calendar/util.js b/uni_modules/uni-calendar/components/uni-calendar/util.js
new file mode 100644
index 0000000..2d6100b
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/util.js
@@ -0,0 +1,350 @@
+import CALENDAR from './calendar.js'
+
+class Calendar {
+ constructor({
+ date,
+ selected,
+ startDate,
+ endDate,
+ range
+ } = {}) {
+ // 当前日期
+ this.date = this.getDate(new Date()) // 当前初入日期
+ // 打点信息
+ this.selected = selected || [];
+ // 范围开始
+ this.startDate = startDate
+ // 范围结束
+ this.endDate = endDate
+ this.range = range
+ // 多选状态
+ this.cleanMultipleStatus()
+ // 每周日期
+ this.weeks = {}
+ // this._getWeek(this.date.fullDate)
+ }
+ /**
+ * 设置日期
+ * @param {Object} date
+ */
+ setDate(date) {
+ this.selectDate = this.getDate(date)
+ this._getWeek(this.selectDate.fullDate)
+ }
+
+ /**
+ * 清理多选状态
+ */
+ cleanMultipleStatus() {
+ this.multipleStatus = {
+ before: '',
+ after: '',
+ data: []
+ }
+ }
+
+ /**
+ * 重置开始日期
+ */
+ resetSatrtDate(startDate) {
+ // 范围开始
+ this.startDate = startDate
+
+ }
+
+ /**
+ * 重置结束日期
+ */
+ resetEndDate(endDate) {
+ // 范围结束
+ this.endDate = endDate
+ }
+
+ /**
+ * 获取任意时间
+ */
+ getDate(date, AddDayCount = 0, str = 'day') {
+ if (!date) {
+ date = new Date()
+ }
+ if (typeof date !== 'object') {
+ date = date.replace(/-/g, '/')
+ }
+ const dd = new Date(date)
+ switch (str) {
+ case 'day':
+ dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期
+ break
+ case 'month':
+ if (dd.getDate() === 31) {
+ dd.setDate(dd.getDate() + AddDayCount)
+ } else {
+ dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期
+ }
+ break
+ case 'year':
+ dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期
+ break
+ }
+ const y = dd.getFullYear()
+ const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0
+ const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0
+ return {
+ fullDate: y + '-' + m + '-' + d,
+ year: y,
+ month: m,
+ date: d,
+ day: dd.getDay()
+ }
+ }
+
+
+ /**
+ * 获取上月剩余天数
+ */
+ _getLastMonthDays(firstDay, full) {
+ let dateArr = []
+ for (let i = firstDay; i > 0; i--) {
+ const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate()
+ dateArr.push({
+ date: beforeDate,
+ month: full.month - 1,
+ lunar: this.getlunar(full.year, full.month - 1, beforeDate),
+ disable: true
+ })
+ }
+ return dateArr
+ }
+ /**
+ * 获取本月天数
+ */
+ _currentMonthDys(dateData, full) {
+ let dateArr = []
+ let fullDate = this.date.fullDate
+ for (let i = 1; i <= dateData; i++) {
+ let nowDate = full.year + '-' + (full.month < 10 ?
+ full.month : full.month) + '-' + (i < 10 ?
+ '0' + i : i)
+ // 是否今天
+ let isDay = fullDate === nowDate
+ // 获取打点信息
+ let info = this.selected && this.selected.find((item) => {
+ if (this.dateEqual(nowDate, item.date)) {
+ return item
+ }
+ })
+
+ // 日期禁用
+ let disableBefore = true
+ let disableAfter = true
+ if (this.startDate) {
+ // let dateCompBefore = this.dateCompare(this.startDate, fullDate)
+ // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate)
+ disableBefore = this.dateCompare(this.startDate, nowDate)
+ }
+
+ if (this.endDate) {
+ // let dateCompAfter = this.dateCompare(fullDate, this.endDate)
+ // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate)
+ disableAfter = this.dateCompare(nowDate, this.endDate)
+ }
+ let multiples = this.multipleStatus.data
+ let checked = false
+ let multiplesStatus = -1
+ if (this.range) {
+ if (multiples) {
+ multiplesStatus = multiples.findIndex((item) => {
+ return this.dateEqual(item, nowDate)
+ })
+ }
+ if (multiplesStatus !== -1) {
+ checked = true
+ }
+ }
+ let data = {
+ fullDate: nowDate,
+ year: full.year,
+ date: i,
+ multiple: this.range ? checked : false,
+ beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate),
+ afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate),
+ month: full.month,
+ lunar: this.getlunar(full.year, full.month, i),
+ disable: !(disableBefore && disableAfter),
+ isDay
+ }
+ if (info) {
+ data.extraInfo = info
+ }
+
+ dateArr.push(data)
+ }
+ return dateArr
+ }
+ /**
+ * 获取下月天数
+ */
+ _getNextMonthDays(surplus, full) {
+ let dateArr = []
+ for (let i = 1; i < surplus + 1; i++) {
+ dateArr.push({
+ date: i,
+ month: Number(full.month) + 1,
+ lunar: this.getlunar(full.year, Number(full.month) + 1, i),
+ disable: true
+ })
+ }
+ return dateArr
+ }
+
+ /**
+ * 获取当前日期详情
+ * @param {Object} date
+ */
+ getInfo(date) {
+ if (!date) {
+ date = new Date()
+ }
+ const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate)
+ return dateInfo
+ }
+
+ /**
+ * 比较时间大小
+ */
+ dateCompare(startDate, endDate) {
+ // 计算截止时间
+ startDate = new Date(startDate.replace('-', '/').replace('-', '/'))
+ // 计算详细项的截止时间
+ endDate = new Date(endDate.replace('-', '/').replace('-', '/'))
+ if (startDate <= endDate) {
+ return true
+ } else {
+ return false
+ }
+ }
+
+ /**
+ * 比较时间是否相等
+ */
+ dateEqual(before, after) {
+ // 计算截止时间
+ before = new Date(before.replace('-', '/').replace('-', '/'))
+ // 计算详细项的截止时间
+ after = new Date(after.replace('-', '/').replace('-', '/'))
+ if (before.getTime() - after.getTime() === 0) {
+ return true
+ } else {
+ return false
+ }
+ }
+
+
+ /**
+ * 获取日期范围内所有日期
+ * @param {Object} begin
+ * @param {Object} end
+ */
+ geDateAll(begin, end) {
+ var arr = []
+ var ab = begin.split('-')
+ var ae = end.split('-')
+ var db = new Date()
+ db.setFullYear(ab[0], ab[1] - 1, ab[2])
+ var de = new Date()
+ de.setFullYear(ae[0], ae[1] - 1, ae[2])
+ var unixDb = db.getTime() - 24 * 60 * 60 * 1000
+ var unixDe = de.getTime() - 24 * 60 * 60 * 1000
+ for (var k = unixDb; k <= unixDe;) {
+ k = k + 24 * 60 * 60 * 1000
+ arr.push(this.getDate(new Date(parseInt(k))).fullDate)
+ }
+ return arr
+ }
+ /**
+ * 计算阴历日期显示
+ */
+ getlunar(year, month, date) {
+ return CALENDAR.solar2lunar(year, month, date)
+ }
+ /**
+ * 设置打点
+ */
+ setSelectInfo(data, value) {
+ this.selected = value
+ this._getWeek(data)
+ }
+
+ /**
+ * 获取多选状态
+ */
+ setMultiple(fullDate) {
+ let {
+ before,
+ after
+ } = this.multipleStatus
+
+ if (!this.range) return
+ if (before && after) {
+ this.multipleStatus.before = ''
+ this.multipleStatus.after = ''
+ this.multipleStatus.data = []
+ } else {
+ if (!before) {
+ this.multipleStatus.before = fullDate
+ } else {
+ this.multipleStatus.after = fullDate
+ if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) {
+ this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after);
+ } else {
+ this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before);
+ }
+ }
+ }
+ this._getWeek(fullDate)
+ }
+
+ /**
+ * 获取每周数据
+ * @param {Object} dateData
+ */
+ _getWeek(dateData) {
+ const {
+ year,
+ month
+ } = this.getDate(dateData)
+ let firstDay = new Date(year, month - 1, 1).getDay()
+ let currentDay = new Date(year, month, 0).getDate()
+ let dates = {
+ lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天
+ currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数
+ nextMonthDays: [], // 下个月开始几天
+ weeks: []
+ }
+ let canlender = []
+ const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length)
+ dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData))
+ canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays)
+ let weeks = {}
+ // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天
+ for (let i = 0; i < canlender.length; i++) {
+ if (i % 7 === 0) {
+ weeks[parseInt(i / 7)] = new Array(7)
+ }
+ weeks[parseInt(i / 7)][i % 7] = canlender[i]
+ }
+ this.canlender = canlender
+ this.weeks = weeks
+ }
+
+ //静态方法
+ // static init(date) {
+ // if (!this.instance) {
+ // this.instance = new Calendar(date);
+ // }
+ // return this.instance;
+ // }
+}
+
+
+export default Calendar
diff --git a/uni_modules/uni-calendar/package.json b/uni_modules/uni-calendar/package.json
new file mode 100644
index 0000000..40455c8
--- /dev/null
+++ b/uni_modules/uni-calendar/package.json
@@ -0,0 +1,88 @@
+{
+ "id": "uni-calendar",
+ "displayName": "uni-calendar 日历",
+ "version": "1.4.5",
+ "description": "日历组件",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "日历",
+ "",
+ "打卡",
+ "日历选择"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-calendar/readme.md b/uni_modules/uni-calendar/readme.md
new file mode 100644
index 0000000..4f3ca0e
--- /dev/null
+++ b/uni_modules/uni-calendar/readme.md
@@ -0,0 +1,103 @@
+
+
+## Calendar 日历
+> **组件名:uni-calendar**
+> 代码块: `uCalendar`
+
+
+日历组件
+
+> **注意事项**
+> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
+> - 本组件农历转换使用的js是 [@1900-2100区间内的公历、农历互转](https://github.com/jjonline/calendar.js)
+> - 仅支持自定义组件模式
+> - `date`属性传入的应该是一个 String ,如: 2019-06-27 ,而不是 new Date()
+> - 通过 `insert` 属性来确定当前的事件是 @change 还是 @confirm 。理应合并为一个事件,但是为了区分模式,现使用两个事件,这里需要注意
+> - 弹窗模式下无法阻止后面的元素滚动,如有需要阻止,请在弹窗弹出后,手动设置滚动元素为不可滚动
+
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
+
+### 基本用法
+
+在 ``template`` 中使用组件
+
+```html
+
+
+
+```
+
+### 通过方法打开日历
+
+需要设置 `insert` 为 `false`
+
+```html
+
+
+ 打开日历
+
+```
+
+```javascript
+
+export default {
+ data() {
+ return {};
+ },
+ methods: {
+ open(){
+ this.$refs.calendar.open();
+ },
+ confirm(e) {
+ console.log(e);
+ }
+ }
+};
+
+```
+
+
+## API
+
+### Calendar Props
+
+| 属性名 | 类型 | 默认值| 说明 |
+| | |
+| date | String |- | 自定义当前时间,默认为今天 |
+| lunar | Boolean | false | 显示农历 |
+| startDate | String |- | 日期选择范围-开始日期 |
+| endDate | String |- | 日期选择范围-结束日期 |
+| range | Boolean | false | 范围选择 |
+| insert | Boolean | false | 插入模式,可选值,ture:插入模式;false:弹窗模式;默认为插入模式 |
+|clearDate |Boolean |true |弹窗模式是否清空上次选择内容 |
+| selected | Array |- | 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}] |
+|showMonth | Boolean | true | 是否显示月份为背景 |
+
+### Calendar Events
+
+| 事件名 | 说明 |返回值|
+| | | |
+| open | 弹出日历组件,`insert :false` 时生效|- |
+
+
+
+
+
+## 组件示例
+
+点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar](https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar)
\ No newline at end of file
diff --git a/uni_modules/uni-card/changelog.md b/uni_modules/uni-card/changelog.md
new file mode 100644
index 0000000..c3cd8c4
--- /dev/null
+++ b/uni_modules/uni-card/changelog.md
@@ -0,0 +1,26 @@
+## 1.3.1(2021-12-20)
+- 修复 在vue页面下略缩图显示不正常的bug
+## 1.3.0(2021-11-19)
+- 重构插槽的用法 ,header 替换为 title
+- 新增 actions 插槽
+- 新增 cover 封面图属性和插槽
+- 新增 padding 内容默认内边距离
+- 新增 margin 卡片默认外边距离
+- 新增 spacing 卡片默认内边距
+- 新增 shadow 卡片阴影属性
+- 取消 mode 属性,可使用组合插槽代替
+- 取消 note 属性 ,使用actions插槽代替
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-card](https://uniapp.dcloud.io/component/uniui/uni-card)
+## 1.2.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.2.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.8(2021-07-01)
+- 优化 图文卡片无图片加载时,提供占位图标
+- 新增 header 插槽,自定义卡片头部( 图文卡片 mode="style" 时,不支持)
+- 修复 thumbnail 不存在仍然占位的 bug
+## 1.1.7(2021-05-12)
+- 新增 组件示例地址
+## 1.1.6(2021-02-04)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-card/components/uni-card/uni-card.vue b/uni_modules/uni-card/components/uni-card/uni-card.vue
new file mode 100644
index 0000000..38cf594
--- /dev/null
+++ b/uni_modules/uni-card/components/uni-card/uni-card.vue
@@ -0,0 +1,270 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-card/package.json b/uni_modules/uni-card/package.json
new file mode 100644
index 0000000..f16224d
--- /dev/null
+++ b/uni_modules/uni-card/package.json
@@ -0,0 +1,90 @@
+{
+ "id": "uni-card",
+ "displayName": "uni-card 卡片",
+ "version": "1.3.1",
+ "description": "Card 组件,提供常见的卡片样式。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "card",
+ "",
+ "卡片"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-icons",
+ "uni-scss"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-card/readme.md b/uni_modules/uni-card/readme.md
new file mode 100644
index 0000000..7434e71
--- /dev/null
+++ b/uni_modules/uni-card/readme.md
@@ -0,0 +1,12 @@
+
+
+## Card 卡片
+> **组件名:uni-card**
+> 代码块: `uCard`
+
+卡片视图组件。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-card)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
diff --git a/uni_modules/uni-collapse/changelog.md b/uni_modules/uni-collapse/changelog.md
new file mode 100644
index 0000000..292e4c7
--- /dev/null
+++ b/uni_modules/uni-collapse/changelog.md
@@ -0,0 +1,36 @@
+## 1.4.3(2022-01-25)
+- 修复 初始化的时候 ,open 属性失效的bug
+## 1.4.2(2022-01-21)
+- 修复 微信小程序resize后组件收起的bug
+## 1.4.1(2021-11-22)
+- 修复 vue3中个别scss变量无法找到的问题
+## 1.4.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-collapse](https://uniapp.dcloud.io/component/uniui/uni-collapse)
+## 1.3.3(2021-08-17)
+- 优化 show-arrow 属性默认为true
+## 1.3.2(2021-08-17)
+- 新增 show-arrow 属性,控制是否显示右侧箭头
+## 1.3.1(2021-07-30)
+- 优化 vue3下小程序事件警告的问题
+## 1.3.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.2.2(2021-07-21)
+- 修复 由1.2.0版本引起的 change 事件返回 undefined 的Bug
+## 1.2.1(2021-07-21)
+- 优化 组件示例
+## 1.2.0(2021-07-21)
+- 新增 组件折叠动画
+- 新增 value\v-model 属性 ,动态修改面板折叠状态
+- 新增 title 插槽 ,可定义面板标题
+- 新增 border 属性 ,显示隐藏面板内容分隔线
+- 新增 title-border 属性 ,显示隐藏面板标题分隔线
+- 修复 resize 方法失效的Bug
+- 修复 change 事件返回参数不正确的Bug
+- 优化 H5、App 平台自动更具内容更新高度,无需调用 reszie() 方法
+## 1.1.7(2021-05-12)
+- 新增 组件示例地址
+## 1.1.6(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+## 1.1.5(2021-02-05)
+- 调整为uni_modules目录规范
\ No newline at end of file
diff --git a/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue b/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue
new file mode 100644
index 0000000..d62a6a7
--- /dev/null
+++ b/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue
@@ -0,0 +1,402 @@
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue b/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue
new file mode 100644
index 0000000..384c39a
--- /dev/null
+++ b/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-collapse/package.json b/uni_modules/uni-collapse/package.json
new file mode 100644
index 0000000..65349cf
--- /dev/null
+++ b/uni_modules/uni-collapse/package.json
@@ -0,0 +1,89 @@
+{
+ "id": "uni-collapse",
+ "displayName": "uni-collapse 折叠面板",
+ "version": "1.4.3",
+ "description": "Collapse 组件,可以折叠 / 展开的内容区域。",
+ "keywords": [
+ "uni-ui",
+ "折叠",
+ "折叠面板",
+ "手风琴"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-icons"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-collapse/readme.md b/uni_modules/uni-collapse/readme.md
new file mode 100644
index 0000000..bc758eb
--- /dev/null
+++ b/uni_modules/uni-collapse/readme.md
@@ -0,0 +1,12 @@
+
+
+## Collapse 折叠面板
+> **组件名:uni-collapse**
+> 代码块: `uCollapse`
+> 关联组件:`uni-collapse-item`、`uni-icons`。
+
+
+折叠面板用来折叠/显示过长的内容或者是列表。通常是在多内容分类项使用,折叠不重要的内容,显示重要内容。点击可以展开折叠部分。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-collapse)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-combox/changelog.md b/uni_modules/uni-combox/changelog.md
new file mode 100644
index 0000000..23c2748
--- /dev/null
+++ b/uni_modules/uni-combox/changelog.md
@@ -0,0 +1,15 @@
+## 1.0.1(2021-11-23)
+- 优化 label、label-width 属性
+## 1.0.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-combox](https://uniapp.dcloud.io/component/uniui/uni-combox)
+## 0.1.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 0.0.6(2021-05-12)
+- 新增 组件示例地址
+## 0.0.5(2021-04-21)
+- 优化 添加依赖 uni-icons, 导入后自动下载依赖
+## 0.0.4(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+## 0.0.3(2021-02-04)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-combox/components/uni-combox/uni-combox.vue b/uni_modules/uni-combox/components/uni-combox/uni-combox.vue
new file mode 100644
index 0000000..500b6f8
--- /dev/null
+++ b/uni_modules/uni-combox/components/uni-combox/uni-combox.vue
@@ -0,0 +1,275 @@
+
+
+
+ {{label}}
+
+
+
+
+
+
+
+
+
+
+ {{emptyTips}}
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-combox/package.json b/uni_modules/uni-combox/package.json
new file mode 100644
index 0000000..4a05c3f
--- /dev/null
+++ b/uni_modules/uni-combox/package.json
@@ -0,0 +1,90 @@
+{
+ "id": "uni-combox",
+ "displayName": "uni-combox 组合框",
+ "version": "1.0.1",
+ "description": "可以选择也可以输入的表单项 ",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "combox",
+ "组合框",
+ "select"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-icons"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "n"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-combox/readme.md b/uni_modules/uni-combox/readme.md
new file mode 100644
index 0000000..ffa2cc8
--- /dev/null
+++ b/uni_modules/uni-combox/readme.md
@@ -0,0 +1,11 @@
+
+
+## Combox 组合框
+> **组件名:uni-combox**
+> 代码块: `uCombox`
+
+
+组合框组件。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-combox)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-countdown/changelog.md b/uni_modules/uni-countdown/changelog.md
new file mode 100644
index 0000000..f25beef
--- /dev/null
+++ b/uni_modules/uni-countdown/changelog.md
@@ -0,0 +1,24 @@
+## 1.2.2(2022-01-19)
+- 修复 在微信小程序中样式不生效的bug
+## 1.2.1(2022-01-18)
+- 新增 update 方法 ,在动态更新时间后,刷新组件
+## 1.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-countdown](https://uniapp.dcloud.io/component/uniui/uni-countdown)
+## 1.1.3(2021-10-18)
+- 重构
+- 新增 font-size 支持自定义字体大小
+## 1.1.2(2021-08-24)
+- 新增 支持国际化
+## 1.1.1(2021-07-30)
+- 优化 vue3下小程序事件警告的问题
+## 1.1.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.5(2021-06-18)
+- 修复 uni-countdown 重复赋值跳两秒的 bug
+## 1.0.4(2021-05-12)
+- 新增 组件示例地址
+## 1.0.3(2021-05-08)
+- 修复 uni-countdown 不能控制倒计时的 bug
+## 1.0.2(2021-02-04)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json b/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json
new file mode 100644
index 0000000..06309cb
--- /dev/null
+++ b/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json
@@ -0,0 +1,6 @@
+{
+ "uni-countdown.day": "day",
+ "uni-countdown.h": "h",
+ "uni-countdown.m": "m",
+ "uni-countdown.s": "s"
+}
diff --git a/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js b/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js
new file mode 100644
index 0000000..de7509c
--- /dev/null
+++ b/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json
new file mode 100644
index 0000000..358cdd1
--- /dev/null
+++ b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json
@@ -0,0 +1,6 @@
+{
+ "uni-countdown.day": "天",
+ "uni-countdown.h": "时",
+ "uni-countdown.m": "分",
+ "uni-countdown.s": "秒"
+}
diff --git a/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json
new file mode 100644
index 0000000..e5a63de
--- /dev/null
+++ b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json
@@ -0,0 +1,6 @@
+{
+ "uni-countdown.day": "天",
+ "uni-countdown.h": "時",
+ "uni-countdown.m": "分",
+ "uni-countdown.s": "秒"
+}
diff --git a/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue b/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue
new file mode 100644
index 0000000..1f8ef4e
--- /dev/null
+++ b/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue
@@ -0,0 +1,271 @@
+
+
+ {{ d }}
+ {{dayText}}
+ {{ h }}
+ {{ showColon ? ':' : hourText }}
+ {{ i }}
+ {{ showColon ? ':' : minuteText }}
+ {{ s }}
+ {{secondText}}
+
+
+
+
diff --git a/uni_modules/uni-countdown/package.json b/uni_modules/uni-countdown/package.json
new file mode 100644
index 0000000..70e99ee
--- /dev/null
+++ b/uni_modules/uni-countdown/package.json
@@ -0,0 +1,86 @@
+{
+ "id": "uni-countdown",
+ "displayName": "uni-countdown 倒计时",
+ "version": "1.2.2",
+ "description": "CountDown 倒计时组件",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "countdown",
+ "倒计时"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-countdown/readme.md b/uni_modules/uni-countdown/readme.md
new file mode 100644
index 0000000..4bcb1aa
--- /dev/null
+++ b/uni_modules/uni-countdown/readme.md
@@ -0,0 +1,10 @@
+
+
+## CountDown 倒计时
+> **组件名:uni-countdown**
+> 代码块: `uCountDown`
+
+倒计时组件。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-countdown)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-data-checkbox/changelog.md b/uni_modules/uni-data-checkbox/changelog.md
new file mode 100644
index 0000000..dbc517a
--- /dev/null
+++ b/uni_modules/uni-data-checkbox/changelog.md
@@ -0,0 +1,43 @@
+## 1.0.2(2022-06-30)
+- 优化 在 uni-forms 中的依赖注入方式
+## 1.0.1(2022-02-07)
+- 修复 multiple 为 true 时,v-model 的值为 null 报错的 bug
+## 1.0.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-data-checkbox](https://uniapp.dcloud.io/component/uniui/uni-data-checkbox)
+## 0.2.5(2021-08-23)
+- 修复 在uni-forms中 modelValue 中不存在当前字段,当前字段必填写也不参与校验的问题
+## 0.2.4(2021-08-17)
+- 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题
+## 0.2.3(2021-08-11)
+- 修复 在 uni-forms 中重置表单,错误信息无法清除的问题
+## 0.2.2(2021-07-30)
+- 优化 在uni-forms组件,与label不对齐的问题
+## 0.2.1(2021-07-27)
+- 修复 单选默认值为0不能选中的Bug
+## 0.2.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 0.1.11(2021-07-06)
+- 优化 删除无用日志
+## 0.1.10(2021-07-05)
+- 修复 由 0.1.9 引起的非 nvue 端图标不显示的问题
+## 0.1.9(2021-07-05)
+- 修复 nvue 黑框样式问题
+## 0.1.8(2021-06-28)
+- 修复 selectedTextColor 属性不生效的Bug
+## 0.1.7(2021-06-02)
+- 新增 map 属性,可以方便映射text/value属性
+## 0.1.6(2021-05-26)
+- 修复 不关联服务空间的情况下组件报错的Bug
+## 0.1.5(2021-05-12)
+- 新增 组件示例地址
+## 0.1.4(2021-04-09)
+- 修复 nvue 下无法选中的问题
+## 0.1.3(2021-03-22)
+- 新增 disabled属性
+## 0.1.2(2021-02-24)
+- 优化 默认颜色显示
+## 0.1.1(2021-02-24)
+- 新增 支持nvue
+## 0.1.0(2021-02-18)
+- “暂无数据”显示居中
diff --git a/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue b/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue
new file mode 100644
index 0000000..2e51712
--- /dev/null
+++ b/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue
@@ -0,0 +1,817 @@
+
+
+
+
+
+ {{mixinDatacomErrorMessage}}
+
+
+
+
+
+
+
+
+
+
+ {{item[map.text]}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item[map.text]}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-data-checkbox/package.json b/uni_modules/uni-data-checkbox/package.json
new file mode 100644
index 0000000..51470a9
--- /dev/null
+++ b/uni_modules/uni-data-checkbox/package.json
@@ -0,0 +1,87 @@
+{
+ "id": "uni-data-checkbox",
+ "displayName": "uni-data-checkbox 数据选择器",
+ "version": "1.0.2",
+ "description": "通过数据驱动的单选框和复选框",
+ "keywords": [
+ "uni-ui",
+ "checkbox",
+ "单选",
+ "多选",
+ "单选多选"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "^3.1.1"
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-load-more","uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-data-checkbox/readme.md b/uni_modules/uni-data-checkbox/readme.md
new file mode 100644
index 0000000..6eb253d
--- /dev/null
+++ b/uni_modules/uni-data-checkbox/readme.md
@@ -0,0 +1,18 @@
+
+
+## DataCheckbox 数据驱动的单选复选框
+> **组件名:uni-data-checkbox**
+> 代码块: `uDataCheckbox`
+
+
+本组件是基于uni-app基础组件checkbox的封装。本组件要解决问题包括:
+
+1. 数据绑定型组件:给本组件绑定一个data,会自动渲染一组候选内容。再以往,开发者需要编写不少代码实现类似功能
+2. 自动的表单校验:组件绑定了data,且符合[uni-forms](https://ext.dcloud.net.cn/plugin?id=2773)组件的表单校验规范,搭配使用会自动实现表单校验
+3. 本组件合并了单选多选
+4. 本组件有若干风格选择,如普通的单选多选框、并列button风格、tag风格。开发者可以快速选择需要的风格。但作为一个封装组件,样式代码虽然不用自己写了,却会牺牲一定的样式自定义性
+
+在uniCloud开发中,`DB Schema`中配置了enum枚举等类型后,在web控制台的[自动生成表单](https://uniapp.dcloud.io/uniCloud/schema?id=autocode)功能中,会自动生成``uni-data-checkbox``组件并绑定好data
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-checkbox)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-data-picker/changelog.md b/uni_modules/uni-data-picker/changelog.md
new file mode 100644
index 0000000..083e521
--- /dev/null
+++ b/uni_modules/uni-data-picker/changelog.md
@@ -0,0 +1,64 @@
+## 1.0.7(2022-07-06)
+- 优化 pc端图标位置不正确的问题
+## 1.0.6(2022-07-05)
+- 优化 显示样式
+## 1.0.5(2022-07-04)
+- 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug
+## 1.0.4(2022-04-19)
+- 修复 字节小程序 本地数据无法选择下一级的Bug
+## 1.0.3(2022-02-25)
+- 修复 nvue 不支持的 v-show 的 bug
+## 1.0.2(2022-02-25)
+- 修复 条件编译 nvue 不支持的 css 样式
+## 1.0.1(2021-11-23)
+- 修复 由上个版本引发的map、v-model等属性不生效的bug
+## 1.0.0(2021-11-19)
+- 优化 组件 UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-data-picker](https://uniapp.dcloud.io/component/uniui/uni-data-picker)
+## 0.4.9(2021-10-28)
+- 修复 VUE2 v-model 概率无效的 bug
+## 0.4.8(2021-10-27)
+- 修复 v-model 概率无效的 bug
+## 0.4.7(2021-10-25)
+- 新增 属性 spaceInfo 服务空间配置 HBuilderX 3.2.11+
+- 修复 树型 uniCloud 数据类型为 int 时报错的 bug
+## 0.4.6(2021-10-19)
+- 修复 非 VUE3 v-model 为 0 时无法选中的 bug
+## 0.4.5(2021-09-26)
+- 新增 清除已选项的功能(通过 clearIcon 属性配置是否显示按钮),同时提供 clear 方法以供调用,二者等效
+- 修复 readonly 为 true 时报错的 bug
+## 0.4.4(2021-09-26)
+- 修复 上一版本造成的 map 属性失效的 bug
+- 新增 ellipsis 属性,支持配置 tab 选项长度过长时是否自动省略
+## 0.4.3(2021-09-24)
+- 修复 某些情况下级联未触发的 bug
+## 0.4.2(2021-09-23)
+- 新增 提供 show 和 hide 方法,开发者可以通过 ref 调用
+- 新增 选项内容过长自动添加省略号
+## 0.4.1(2021-09-15)
+- 新增 map 属性 字段映射,将 text/value 映射到数据中的其他字段
+## 0.4.0(2021-07-13)
+- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 0.3.5(2021-06-04)
+- 修复 无法加载云端数据的问题
+## 0.3.4(2021-05-28)
+- 修复 v-model 无效问题
+- 修复 loaddata 为空数据组时加载时间过长问题
+- 修复 上个版本引出的本地数据无法选择带有 children 的 2 级节点
+## 0.3.3(2021-05-12)
+- 新增 组件示例地址
+## 0.3.2(2021-04-22)
+- 修复 非树形数据有 where 属性查询报错的问题
+## 0.3.1(2021-04-15)
+- 修复 本地数据概率无法回显时问题
+## 0.3.0(2021-04-07)
+- 新增 支持云端非树形表结构数据
+- 修复 根节点 parent_field 字段等于 null 时选择界面错乱问题
+## 0.2.0(2021-03-15)
+- 修复 nodeclick、popupopened、popupclosed 事件无法触发的问题
+## 0.1.9(2021-03-09)
+- 修复 微信小程序某些情况下无法选择的问题
+## 0.1.8(2021-02-05)
+- 优化 部分样式在 nvue 上的兼容表现
+## 0.1.7(2021-02-05)
+- 调整为 uni_modules 目录规范
diff --git a/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js b/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js
new file mode 100644
index 0000000..6ef26a2
--- /dev/null
+++ b/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js
@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+ name: 'Keypress',
+ props: {
+ disable: {
+ type: Boolean,
+ default: false
+ }
+ },
+ mounted () {
+ const keyNames = {
+ esc: ['Esc', 'Escape'],
+ tab: 'Tab',
+ enter: 'Enter',
+ space: [' ', 'Spacebar'],
+ up: ['Up', 'ArrowUp'],
+ left: ['Left', 'ArrowLeft'],
+ right: ['Right', 'ArrowRight'],
+ down: ['Down', 'ArrowDown'],
+ delete: ['Backspace', 'Delete', 'Del']
+ }
+ const listener = ($event) => {
+ if (this.disable) {
+ return
+ }
+ const keyName = Object.keys(keyNames).find(key => {
+ const keyName = $event.key
+ const value = keyNames[key]
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
+ })
+ if (keyName) {
+ // 避免和其他按键事件冲突
+ setTimeout(() => {
+ this.$emit(keyName, {})
+ }, 0)
+ }
+ }
+ document.addEventListener('keyup', listener)
+ this.$once('hook:beforeDestroy', () => {
+ document.removeEventListener('keyup', listener)
+ })
+ },
+ render: () => {}
+}
+// #endif
diff --git a/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue
new file mode 100644
index 0000000..4553627
--- /dev/null
+++ b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue
@@ -0,0 +1,554 @@
+
+
+
+
+
+ {{errorMessage}}
+
+
+
+
+
+
+ {{item.text}} {{split}}
+
+
+
+ {{placeholder}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{popupTitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js
new file mode 100644
index 0000000..c12fd54
--- /dev/null
+++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js
@@ -0,0 +1,563 @@
+export default {
+ props: {
+ localdata: {
+ type: [Array, Object],
+ default () {
+ return []
+ }
+ },
+ spaceInfo: {
+ type: Object,
+ default () {
+ return {}
+ }
+ },
+ collection: {
+ type: String,
+ default: ''
+ },
+ action: {
+ type: String,
+ default: ''
+ },
+ field: {
+ type: String,
+ default: ''
+ },
+ orderby: {
+ type: String,
+ default: ''
+ },
+ where: {
+ type: [String, Object],
+ default: ''
+ },
+ pageData: {
+ type: String,
+ default: 'add'
+ },
+ pageCurrent: {
+ type: Number,
+ default: 1
+ },
+ pageSize: {
+ type: Number,
+ default: 20
+ },
+ getcount: {
+ type: [Boolean, String],
+ default: false
+ },
+ getone: {
+ type: [Boolean, String],
+ default: false
+ },
+ gettree: {
+ type: [Boolean, String],
+ default: false
+ },
+ manual: {
+ type: Boolean,
+ default: false
+ },
+ value: {
+ type: [Array, String, Number],
+ default () {
+ return []
+ }
+ },
+ modelValue: {
+ type: [Array, String, Number],
+ default () {
+ return []
+ }
+ },
+ preload: {
+ type: Boolean,
+ default: false
+ },
+ stepSearh: {
+ type: Boolean,
+ default: true
+ },
+ selfField: {
+ type: String,
+ default: ''
+ },
+ parentField: {
+ type: String,
+ default: ''
+ },
+ multiple: {
+ type: Boolean,
+ default: false
+ },
+ map: {
+ type: Object,
+ default() {
+ return {
+ text: "text",
+ value: "value"
+ }
+ }
+ }
+ },
+ data() {
+ return {
+ loading: false,
+ errorMessage: '',
+ loadMore: {
+ contentdown: '',
+ contentrefresh: '',
+ contentnomore: ''
+ },
+ dataList: [],
+ selected: [],
+ selectedIndex: 0,
+ page: {
+ current: this.pageCurrent,
+ size: this.pageSize,
+ count: 0
+ }
+ }
+ },
+ computed: {
+ isLocaldata() {
+ return !this.collection.length
+ },
+ postField() {
+ let fields = [this.field];
+ if (this.parentField) {
+ fields.push(`${this.parentField} as parent_value`);
+ }
+ return fields.join(',');
+ },
+ dataValue() {
+ let isModelValue = Array.isArray(this.modelValue) ? (this.modelValue.length > 0) : (this.modelValue !== null || this.modelValue !== undefined)
+ return isModelValue ? this.modelValue : this.value
+ },
+ hasValue() {
+ if (typeof this.dataValue === 'number') {
+ return true
+ }
+ return (this.dataValue != null) && (this.dataValue.length > 0)
+ }
+ },
+ created() {
+ this.$watch(() => {
+ var al = [];
+ ['pageCurrent',
+ 'pageSize',
+ 'spaceInfo',
+ 'value',
+ 'modelValue',
+ 'localdata',
+ 'collection',
+ 'action',
+ 'field',
+ 'orderby',
+ 'where',
+ 'getont',
+ 'getcount',
+ 'gettree'
+ ].forEach(key => {
+ al.push(this[key])
+ });
+ return al
+ }, (newValue, oldValue) => {
+ let needReset = false
+ for (let i = 2; i < newValue.length; i++) {
+ if (newValue[i] != oldValue[i]) {
+ needReset = true
+ break
+ }
+ }
+ if (newValue[0] != oldValue[0]) {
+ this.page.current = this.pageCurrent
+ }
+ this.page.size = this.pageSize
+
+ this.onPropsChange()
+ })
+ this._treeData = []
+ },
+ methods: {
+ onPropsChange() {
+ this._treeData = []
+ },
+ getCommand(options = {}) {
+ /* eslint-disable no-undef */
+ let db = uniCloud.database(this.spaceInfo)
+
+ const action = options.action || this.action
+ if (action) {
+ db = db.action(action)
+ }
+
+ const collection = options.collection || this.collection
+ db = db.collection(collection)
+
+ const where = options.where || this.where
+ if (!(!where || !Object.keys(where).length)) {
+ db = db.where(where)
+ }
+
+ const field = options.field || this.field
+ if (field) {
+ db = db.field(field)
+ }
+
+ const orderby = options.orderby || this.orderby
+ if (orderby) {
+ db = db.orderBy(orderby)
+ }
+
+ const current = options.pageCurrent !== undefined ? options.pageCurrent : this.page.current
+ const size = options.pageSize !== undefined ? options.pageSize : this.page.size
+ const getCount = options.getcount !== undefined ? options.getcount : this.getcount
+ const getTree = options.gettree !== undefined ? options.gettree : this.gettree
+
+ const getOptions = {
+ getCount,
+ getTree
+ }
+ if (options.getTreePath) {
+ getOptions.getTreePath = options.getTreePath
+ }
+
+ db = db.skip(size * (current - 1)).limit(size).get(getOptions)
+
+ return db
+ },
+ getNodeData(callback) {
+ if (this.loading) {
+ return
+ }
+ this.loading = true
+ this.getCommand({
+ field: this.postField,
+ where: this._pathWhere()
+ }).then((res) => {
+ this.loading = false
+ this.selected = res.result.data
+ callback && callback()
+ }).catch((err) => {
+ this.loading = false
+ this.errorMessage = err
+ })
+ },
+ getTreePath(callback) {
+ if (this.loading) {
+ return
+ }
+ this.loading = true
+
+ this.getCommand({
+ field: this.postField,
+ getTreePath: {
+ startWith: `${this.selfField}=='${this.dataValue}'`
+ }
+ }).then((res) => {
+ this.loading = false
+ let treePath = []
+ this._extractTreePath(res.result.data, treePath)
+ this.selected = treePath
+ callback && callback()
+ }).catch((err) => {
+ this.loading = false
+ this.errorMessage = err
+ })
+ },
+ loadData() {
+ if (this.isLocaldata) {
+ this._processLocalData()
+ return
+ }
+
+ if (this.dataValue != null) {
+ this._loadNodeData((data) => {
+ this._treeData = data
+ this._updateBindData()
+ this._updateSelected()
+ })
+ return
+ }
+
+ if (this.stepSearh) {
+ this._loadNodeData((data) => {
+ this._treeData = data
+ this._updateBindData()
+ })
+ } else {
+ this._loadAllData((data) => {
+ this._treeData = []
+ this._extractTree(data, this._treeData, null)
+ this._updateBindData()
+ })
+ }
+ },
+ _loadAllData(callback) {
+ if (this.loading) {
+ return
+ }
+ this.loading = true
+
+ this.getCommand({
+ field: this.postField,
+ gettree: true,
+ startwith: `${this.selfField}=='${this.dataValue}'`
+ }).then((res) => {
+ this.loading = false
+ callback(res.result.data)
+ this.onDataChange()
+ }).catch((err) => {
+ this.loading = false
+ this.errorMessage = err
+ })
+ },
+ _loadNodeData(callback, pw) {
+ if (this.loading) {
+ return
+ }
+ this.loading = true
+
+ this.getCommand({
+ field: this.postField,
+ where: pw || this._postWhere(),
+ pageSize: 500
+ }).then((res) => {
+ this.loading = false
+ callback(res.result.data)
+ this.onDataChange()
+ }).catch((err) => {
+ this.loading = false
+ this.errorMessage = err
+ })
+ },
+ _pathWhere() {
+ let result = []
+ let where_field = this._getParentNameByField();
+ if (where_field) {
+ result.push(`${where_field} == '${this.dataValue}'`)
+ }
+
+ if (this.where) {
+ return `(${this.where}) && (${result.join(' || ')})`
+ }
+
+ return result.join(' || ')
+ },
+ _postWhere() {
+ let result = []
+ let selected = this.selected
+ let parentField = this.parentField
+ if (parentField) {
+ result.push(`${parentField} == null || ${parentField} == ""`)
+ }
+ if (selected.length) {
+ for (var i = 0; i < selected.length - 1; i++) {
+ result.push(`${parentField} == '${selected[i].value}'`)
+ }
+ }
+
+ let where = []
+ if (this.where) {
+ where.push(`(${this.where})`)
+ }
+ if (result.length) {
+ where.push(`(${result.join(' || ')})`)
+ }
+
+ return where.join(' && ')
+ },
+ _nodeWhere() {
+ let result = []
+ let selected = this.selected
+ if (selected.length) {
+ result.push(`${this.parentField} == '${selected[selected.length - 1].value}'`)
+ }
+
+ if (this.where) {
+ return `(${this.where}) && (${result.join(' || ')})`
+ }
+
+ return result.join(' || ')
+ },
+ _getParentNameByField() {
+ const fields = this.field.split(',');
+ let where_field = null;
+ for (let i = 0; i < fields.length; i++) {
+ const items = fields[i].split('as');
+ if (items.length < 2) {
+ continue;
+ }
+ if (items[1].trim() === 'value') {
+ where_field = items[0].trim();
+ break;
+ }
+ }
+ return where_field
+ },
+ _isTreeView() {
+ return (this.parentField && this.selfField)
+ },
+ _updateSelected() {
+ var dl = this.dataList
+ var sl = this.selected
+ let textField = this.map.text
+ let valueField = this.map.value
+ for (var i = 0; i < sl.length; i++) {
+ var value = sl[i].value
+ var dl2 = dl[i]
+ for (var j = 0; j < dl2.length; j++) {
+ var item2 = dl2[j]
+ if (item2[valueField] === value) {
+ sl[i].text = item2[textField]
+ break
+ }
+ }
+ }
+ },
+ _updateBindData(node) {
+ const {
+ dataList,
+ hasNodes
+ } = this._filterData(this._treeData, this.selected)
+
+ let isleaf = this._stepSearh === false && !hasNodes
+
+ if (node) {
+ node.isleaf = isleaf
+ }
+
+ this.dataList = dataList
+ this.selectedIndex = dataList.length - 1
+
+ if (!isleaf && this.selected.length < dataList.length) {
+ this.selected.push({
+ value: null,
+ text: "请选择"
+ })
+ }
+
+ return {
+ isleaf,
+ hasNodes
+ }
+ },
+ _filterData(data, paths) {
+ let dataList = []
+ let hasNodes = true
+
+ dataList.push(data.filter((item) => {
+ return (item.parent_value === null || item.parent_value === undefined || item.parent_value === '')
+ }))
+ for (let i = 0; i < paths.length; i++) {
+ var value = paths[i].value
+ var nodes = data.filter((item) => {
+ return item.parent_value === value
+ })
+
+ if (nodes.length) {
+ dataList.push(nodes)
+ } else {
+ hasNodes = false
+ }
+ }
+
+ return {
+ dataList,
+ hasNodes
+ }
+ },
+ _extractTree(nodes, result, parent_value) {
+ let list = result || []
+ let valueField = this.map.value
+ for (let i = 0; i < nodes.length; i++) {
+ let node = nodes[i]
+
+ let child = {}
+ for (let key in node) {
+ if (key !== 'children') {
+ child[key] = node[key]
+ }
+ }
+ if (parent_value !== null && parent_value !== undefined && parent_value !== '') {
+ child.parent_value = parent_value
+ }
+ result.push(child)
+
+ let children = node.children
+ if (children) {
+ this._extractTree(children, result, node[valueField])
+ }
+ }
+ },
+ _extractTreePath(nodes, result) {
+ let list = result || []
+ for (let i = 0; i < nodes.length; i++) {
+ let node = nodes[i]
+
+ let child = {}
+ for (let key in node) {
+ if (key !== 'children') {
+ child[key] = node[key]
+ }
+ }
+ result.push(child)
+
+ let children = node.children
+ if (children) {
+ this._extractTreePath(children, result)
+ }
+ }
+ },
+ _findNodePath(key, nodes, path = []) {
+ let textField = this.map.text
+ let valueField = this.map.value
+ for (let i = 0; i < nodes.length; i++) {
+ let node = nodes[i]
+ let children = node.children
+ let text = node[textField]
+ let value = node[valueField]
+
+ path.push({
+ value,
+ text
+ })
+
+ if (value === key) {
+ return path
+ }
+
+ if (children) {
+ const p = this._findNodePath(key, children, path)
+ if (p.length) {
+ return p
+ }
+ }
+
+ path.pop()
+ }
+ return []
+ },
+ _processLocalData() {
+ this._treeData = []
+ this._extractTree(this.localdata, this._treeData)
+
+ var inputValue = this.dataValue
+ if (inputValue === undefined) {
+ return
+ }
+
+ if (Array.isArray(inputValue)) {
+ inputValue = inputValue[inputValue.length - 1]
+ if (typeof inputValue === 'object' && inputValue[this.map.value]) {
+ inputValue = inputValue[this.map.value]
+ }
+ }
+
+ this.selected = this._findNodePath(inputValue, this.localdata)
+ }
+ }
+}
diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue
new file mode 100644
index 0000000..065aac2
--- /dev/null
+++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue
@@ -0,0 +1,333 @@
+
+
+
+
+
+
+ {{item.text}}
+
+
+
+
+
+
+
+
+ {{item[map.text]}}
+
+
+
+
+
+
+
+
+
+ {{errorMessage}}
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-data-picker/package.json b/uni_modules/uni-data-picker/package.json
new file mode 100644
index 0000000..9900380
--- /dev/null
+++ b/uni_modules/uni-data-picker/package.json
@@ -0,0 +1,93 @@
+{
+ "id": "uni-data-picker",
+ "displayName": "uni-data-picker 数据驱动的picker选择器",
+ "version": "1.0.7",
+ "description": "单列、多列级联选择器,常用于省市区城市选择、公司部门选择、多级分类等场景",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "picker",
+ "级联",
+ "省市区",
+ ""
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-load-more",
+ "uni-icons",
+ "uni-scss"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-data-picker/readme.md b/uni_modules/uni-data-picker/readme.md
new file mode 100644
index 0000000..6cda224
--- /dev/null
+++ b/uni_modules/uni-data-picker/readme.md
@@ -0,0 +1,22 @@
+## DataPicker 级联选择
+> **组件名:uni-data-picker**
+> 代码块: `uDataPicker`
+> 关联组件:`uni-data-pickerview`、`uni-load-more`。
+
+
+`` 是一个选择类[datacom组件](https://uniapp.dcloud.net.cn/component/datacom)。
+
+支持单列、和多列级联选择。列数没有限制,如果屏幕显示不全,顶部tab区域会左右滚动。
+
+候选数据支持一次性加载完毕,也支持懒加载,比如示例图中,选择了“北京”后,动态加载北京的区县数据。
+
+`` 组件尤其适用于地址选择、分类选择等选择类。
+
+`` 支持本地数据、云端静态数据(json),uniCloud云数据库数据。
+
+`` 可以通过JQL直连uniCloud云数据库,配套[DB Schema](https://uniapp.dcloud.net.cn/uniCloud/schema),可在schema2code中自动生成前端页面,还支持服务器端校验。
+
+在uniCloud数据表中新建表“uni-id-address”和“opendb-city-china”,这2个表的schema自带foreignKey关联。在“uni-id-address”表的表结构页面使用schema2code生成前端页面,会自动生成地址管理的维护页面,自动从“opendb-city-china”表包含的中国所有省市区信息里选择地址。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-picker)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-data-select/changelog.md b/uni_modules/uni-data-select/changelog.md
new file mode 100644
index 0000000..d5beaa3
--- /dev/null
+++ b/uni_modules/uni-data-select/changelog.md
@@ -0,0 +1,16 @@
+## 0.1.6(2022-07-06)
+- 修复 pc端宽度异常的bug
+## 0.1.5
+- 修复 pc端宽度异常的bug
+## 0.1.4(2022-07-05)
+- 优化 显示样式
+## 0.1.3(2022-06-02)
+- 修复 localdata 赋值不生效的 bug
+- 新增 支持 uni.scss 修改颜色
+- 新增 支持选项禁用(数据选项设置 disabled: true 即禁用)
+## 0.1.2(2022-05-08)
+- 修复 当 value 为 0 时选择不生效的 bug
+## 0.1.1(2022-05-07)
+- 新增 记住上次的选项(仅 collection 存在时有效)
+## 0.1.0(2022-04-22)
+- 初始化
diff --git a/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
new file mode 100644
index 0000000..16995bd
--- /dev/null
+++ b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
@@ -0,0 +1,426 @@
+
+
+ {{label + ':'}}
+
+
+
+ {{current}}
+ {{typePlaceholder}}
+
+
+
+
+
+
+
+
+ {{emptyTips}}
+
+
+ {{formatItemName(item)}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-data-select/package.json b/uni_modules/uni-data-select/package.json
new file mode 100644
index 0000000..1ebd8dd
--- /dev/null
+++ b/uni_modules/uni-data-select/package.json
@@ -0,0 +1,88 @@
+{
+ "id": "uni-data-select",
+ "displayName": "uni-data-select 下拉框选择器",
+ "version": "0.1.6",
+ "description": "通过数据驱动的下拉框选择器",
+ "keywords": [
+ "uni-ui",
+ "select",
+ "uni-data-select",
+ "下拉框",
+ "下拉选"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "^3.1.1"
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-load-more"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "u",
+ "app-nvue": "n"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-data-select/readme.md b/uni_modules/uni-data-select/readme.md
new file mode 100644
index 0000000..eb58de3
--- /dev/null
+++ b/uni_modules/uni-data-select/readme.md
@@ -0,0 +1,8 @@
+## DataSelect 下拉框选择器
+> **组件名:uni-data-select**
+> 代码块: `uDataSelect`
+
+当选项过多时,使用下拉菜单展示并选择内容
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-select)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
diff --git a/uni_modules/uni-dateformat/changelog.md b/uni_modules/uni-dateformat/changelog.md
new file mode 100644
index 0000000..d551d7b
--- /dev/null
+++ b/uni_modules/uni-dateformat/changelog.md
@@ -0,0 +1,10 @@
+## 1.0.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-dateformat](https://uniapp.dcloud.io/component/uniui/uni-dateformat)
+## 0.0.5(2021-07-08)
+- 调整 默认时间不再是当前时间,而是显示'-'字符
+## 0.0.4(2021-05-12)
+- 新增 组件示例地址
+## 0.0.3(2021-02-04)
+- 调整为uni_modules目录规范
+- 修复 iOS 平台日期格式化出错的问题
diff --git a/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js b/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js
new file mode 100644
index 0000000..e00d559
--- /dev/null
+++ b/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js
@@ -0,0 +1,200 @@
+// yyyy-MM-dd hh:mm:ss.SSS 所有支持的类型
+function pad(str, length = 2) {
+ str += ''
+ while (str.length < length) {
+ str = '0' + str
+ }
+ return str.slice(-length)
+}
+
+const parser = {
+ yyyy: (dateObj) => {
+ return pad(dateObj.year, 4)
+ },
+ yy: (dateObj) => {
+ return pad(dateObj.year)
+ },
+ MM: (dateObj) => {
+ return pad(dateObj.month)
+ },
+ M: (dateObj) => {
+ return dateObj.month
+ },
+ dd: (dateObj) => {
+ return pad(dateObj.day)
+ },
+ d: (dateObj) => {
+ return dateObj.day
+ },
+ hh: (dateObj) => {
+ return pad(dateObj.hour)
+ },
+ h: (dateObj) => {
+ return dateObj.hour
+ },
+ mm: (dateObj) => {
+ return pad(dateObj.minute)
+ },
+ m: (dateObj) => {
+ return dateObj.minute
+ },
+ ss: (dateObj) => {
+ return pad(dateObj.second)
+ },
+ s: (dateObj) => {
+ return dateObj.second
+ },
+ SSS: (dateObj) => {
+ return pad(dateObj.millisecond, 3)
+ },
+ S: (dateObj) => {
+ return dateObj.millisecond
+ },
+}
+
+// 这都n年了iOS依然不认识2020-12-12,需要转换为2020/12/12
+function getDate(time) {
+ if (time instanceof Date) {
+ return time
+ }
+ switch (typeof time) {
+ case 'string':
+ {
+ // 2020-12-12T12:12:12.000Z、2020-12-12T12:12:12.000
+ if (time.indexOf('T') > -1) {
+ return new Date(time)
+ }
+ return new Date(time.replace(/-/g, '/'))
+ }
+ default:
+ return new Date(time)
+ }
+}
+
+export function formatDate(date, format = 'yyyy/MM/dd hh:mm:ss') {
+ if (!date && date !== 0) {
+ return ''
+ }
+ date = getDate(date)
+ const dateObj = {
+ year: date.getFullYear(),
+ month: date.getMonth() + 1,
+ day: date.getDate(),
+ hour: date.getHours(),
+ minute: date.getMinutes(),
+ second: date.getSeconds(),
+ millisecond: date.getMilliseconds()
+ }
+ const tokenRegExp = /yyyy|yy|MM|M|dd|d|hh|h|mm|m|ss|s|SSS|SS|S/
+ let flag = true
+ let result = format
+ while (flag) {
+ flag = false
+ result = result.replace(tokenRegExp, function(matched) {
+ flag = true
+ return parser[matched](dateObj)
+ })
+ }
+ return result
+}
+
+export function friendlyDate(time, {
+ locale = 'zh',
+ threshold = [60000, 3600000],
+ format = 'yyyy/MM/dd hh:mm:ss'
+}) {
+ if (time === '-') {
+ return time
+ }
+ if (!time && time !== 0) {
+ return ''
+ }
+ const localeText = {
+ zh: {
+ year: '年',
+ month: '月',
+ day: '天',
+ hour: '小时',
+ minute: '分钟',
+ second: '秒',
+ ago: '前',
+ later: '后',
+ justNow: '刚刚',
+ soon: '马上',
+ template: '{num}{unit}{suffix}'
+ },
+ en: {
+ year: 'year',
+ month: 'month',
+ day: 'day',
+ hour: 'hour',
+ minute: 'minute',
+ second: 'second',
+ ago: 'ago',
+ later: 'later',
+ justNow: 'just now',
+ soon: 'soon',
+ template: '{num} {unit} {suffix}'
+ }
+ }
+ const text = localeText[locale] || localeText.zh
+ let date = getDate(time)
+ let ms = date.getTime() - Date.now()
+ let absMs = Math.abs(ms)
+ if (absMs < threshold[0]) {
+ return ms < 0 ? text.justNow : text.soon
+ }
+ if (absMs >= threshold[1]) {
+ return formatDate(date, format)
+ }
+ let num
+ let unit
+ let suffix = text.later
+ if (ms < 0) {
+ suffix = text.ago
+ ms = -ms
+ }
+ const seconds = Math.floor((ms) / 1000)
+ const minutes = Math.floor(seconds / 60)
+ const hours = Math.floor(minutes / 60)
+ const days = Math.floor(hours / 24)
+ const months = Math.floor(days / 30)
+ const years = Math.floor(months / 12)
+ switch (true) {
+ case years > 0:
+ num = years
+ unit = text.year
+ break
+ case months > 0:
+ num = months
+ unit = text.month
+ break
+ case days > 0:
+ num = days
+ unit = text.day
+ break
+ case hours > 0:
+ num = hours
+ unit = text.hour
+ break
+ case minutes > 0:
+ num = minutes
+ unit = text.minute
+ break
+ default:
+ num = seconds
+ unit = text.second
+ break
+ }
+
+ if (locale === 'en') {
+ if (num === 1) {
+ num = 'a'
+ } else {
+ unit += 's'
+ }
+ }
+
+ return text.template.replace(/{\s*num\s*}/g, num + '').replace(/{\s*unit\s*}/g, unit).replace(/{\s*suffix\s*}/g,
+ suffix)
+}
diff --git a/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue b/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue
new file mode 100644
index 0000000..c5ed030
--- /dev/null
+++ b/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue
@@ -0,0 +1,88 @@
+
+ {{dateShow}}
+
+
+
+
+
diff --git a/uni_modules/uni-dateformat/package.json b/uni_modules/uni-dateformat/package.json
new file mode 100644
index 0000000..786a670
--- /dev/null
+++ b/uni_modules/uni-dateformat/package.json
@@ -0,0 +1,88 @@
+{
+ "id": "uni-dateformat",
+ "displayName": "uni-dateformat 日期格式化",
+ "version": "1.0.0",
+ "description": "日期格式化组件,可以将日期格式化为1分钟前、刚刚等形式",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "日期格式化",
+ "时间格式化",
+ "格式化时间",
+ ""
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "y",
+ "联盟": "y"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-dateformat/readme.md b/uni_modules/uni-dateformat/readme.md
new file mode 100644
index 0000000..37ddb6e
--- /dev/null
+++ b/uni_modules/uni-dateformat/readme.md
@@ -0,0 +1,11 @@
+
+
+### DateFormat 日期格式化
+> **组件名:uni-dateformat**
+> 代码块: `uDateformat`
+
+
+日期格式化组件。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-dateformat)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-datetime-picker/changelog.md b/uni_modules/uni-datetime-picker/changelog.md
new file mode 100644
index 0000000..5c9735a
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/changelog.md
@@ -0,0 +1,93 @@
+## 2.2.6(2022-06-30)
+- 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致
+## 2.2.5(2022-06-24)
+- 修复 日历顶部年月及底部确认未国际化 bug
+## 2.2.4(2022-03-31)
+- 修复 Vue3 下动态赋值,单选类型未响应的 bug
+## 2.2.3(2022-03-28)
+- 修复 Vue3 下动态赋值未响应的 bug
+## 2.2.2(2021-12-10)
+- 修复 clear-icon 属性在小程序平台不生效的 bug
+## 2.2.1(2021-12-10)
+- 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的 bug
+## 2.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker)
+## 2.1.5(2021-11-09)
+- 新增 提供组件设计资源,组件样式调整
+## 2.1.4(2021-09-10)
+- 修复 hide-second 在移动端的 bug
+- 修复 单选赋默认值时,赋值日期未高亮的 bug
+- 修复 赋默认值时,移动端未正确显示时间的 bug
+## 2.1.3(2021-09-09)
+- 新增 hide-second 属性,支持只使用时分,隐藏秒
+## 2.1.2(2021-09-03)
+- 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次
+- 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法
+- 优化 调整字号大小,美化日历界面
+- 修复 因国际化导致的 placeholder 失效的 bug
+## 2.1.1(2021-08-24)
+- 新增 支持国际化
+- 优化 范围选择器在 pc 端过宽的问题
+## 2.1.0(2021-08-09)
+- 新增 适配 vue3
+## 2.0.19(2021-08-09)
+- 新增 支持作为 uni-forms 子组件相关功能
+- 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug
+## 2.0.18(2021-08-05)
+- 修复 type 属性动态赋值无效的 bug
+- 修复 ‘确认’按钮被 tabbar 遮盖 bug
+- 修复 组件未赋值时范围选左、右日历相同的 bug
+## 2.0.17(2021-08-04)
+- 修复 范围选未正确显示当前值的 bug
+- 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug
+## 2.0.16(2021-07-21)
+- 新增 return-type 属性支持返回 date 日期对象
+## 2.0.15(2021-07-14)
+- 修复 单选日期类型,初始赋值后不在当前日历的 bug
+- 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效)
+- 优化 移动端移除显示框的清空按钮,无实际用途
+## 2.0.14(2021-07-14)
+- 修复 组件赋值为空,界面未更新的 bug
+- 修复 start 和 end 不能动态赋值的 bug
+- 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的 bug
+## 2.0.13(2021-07-08)
+- 修复 范围选择不能动态赋值的 bug
+## 2.0.12(2021-07-08)
+- 修复 范围选择的初始时间在一个月内时,造成无法选择的bug
+## 2.0.11(2021-07-08)
+- 优化 弹出层在超出视窗边缘定位不准确的问题
+## 2.0.10(2021-07-08)
+- 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的 bug
+- 优化 弹出层在超出视窗边缘被遮盖的问题
+## 2.0.9(2021-07-07)
+- 新增 maskClick 事件
+- 修复 特殊情况日历 rpx 布局错误的 bug,rpx -> px
+- 修复 范围选择时清空返回值不合理的bug,['', ''] -> []
+## 2.0.8(2021-07-07)
+- 新增 日期时间显示框支持插槽
+## 2.0.7(2021-07-01)
+- 优化 添加 uni-icons 依赖
+## 2.0.6(2021-05-22)
+- 修复 图标在小程序上不显示的 bug
+- 优化 重命名引用组件,避免潜在组件命名冲突
+## 2.0.5(2021-05-20)
+- 优化 代码目录扁平化
+## 2.0.4(2021-05-12)
+- 新增 组件示例地址
+## 2.0.3(2021-05-10)
+- 修复 ios 下不识别 '-' 日期格式的 bug
+- 优化 pc 下弹出层添加边框和阴影
+## 2.0.2(2021-05-08)
+- 修复 在 admin 中获取弹出层定位错误的bug
+## 2.0.1(2021-05-08)
+- 修复 type 属性向下兼容,默认值从 date 变更为 datetime
+## 2.0.0(2021-04-30)
+- 支持日历形式的日期+时间的范围选择
+ > 注意:此版本不向后兼容,不再支持单独时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker)
+## 1.0.6(2021-03-18)
+- 新增 hide-second 属性,时间支持仅选择时、分
+- 修复 选择跟显示的日期不一样的 bug
+- 修复 chang事件触发2次的 bug
+- 修复 分、秒 end 范围错误的 bug
+- 优化 更好的 nvue 适配
diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue
new file mode 100644
index 0000000..3d2dbea
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue
@@ -0,0 +1,185 @@
+
+
+
+
+ {{weeks.date}}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue
new file mode 100644
index 0000000..8f7f181
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue
@@ -0,0 +1,907 @@
+
+
+
+
+
+
+
+ {{nowDate.month}}
+
+
+
+ {{SUNText}}
+
+
+ {{MONText}}
+
+
+ {{TUEText}}
+
+
+ {{WEDText}}
+
+
+ {{THUText}}
+
+
+ {{FRIText}}
+
+
+ {{SATText}}
+
+
+
+
+
+
+
+
+
+
+ {{tempSingleDate ? tempSingleDate : selectDateText}}
+
+
+
+
+
+
+ {{tempRange.before ? tempRange.before : startDateText}}
+
+
+
+
+
+
+ {{tempRange.after ? tempRange.after : endDateText}}
+
+
+
+
+
+
+ {{confirmText}}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json
new file mode 100644
index 0000000..9acf1ab
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json
@@ -0,0 +1,22 @@
+{
+ "uni-datetime-picker.selectDate": "select date",
+ "uni-datetime-picker.selectTime": "select time",
+ "uni-datetime-picker.selectDateTime": "select datetime",
+ "uni-datetime-picker.startDate": "start date",
+ "uni-datetime-picker.endDate": "end date",
+ "uni-datetime-picker.startTime": "start time",
+ "uni-datetime-picker.endTime": "end time",
+ "uni-datetime-picker.ok": "ok",
+ "uni-datetime-picker.clear": "clear",
+ "uni-datetime-picker.cancel": "cancel",
+ "uni-datetime-picker.year": "-",
+ "uni-datetime-picker.month": "",
+ "uni-calender.MON": "MON",
+ "uni-calender.TUE": "TUE",
+ "uni-calender.WED": "WED",
+ "uni-calender.THU": "THU",
+ "uni-calender.FRI": "FRI",
+ "uni-calender.SAT": "SAT",
+ "uni-calender.SUN": "SUN",
+ "uni-calender.confirm": "confirm"
+}
diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js
new file mode 100644
index 0000000..de7509c
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json
new file mode 100644
index 0000000..d2df5e7
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json
@@ -0,0 +1,22 @@
+{
+ "uni-datetime-picker.selectDate": "选择日期",
+ "uni-datetime-picker.selectTime": "选择时间",
+ "uni-datetime-picker.selectDateTime": "选择日期时间",
+ "uni-datetime-picker.startDate": "开始日期",
+ "uni-datetime-picker.endDate": "结束日期",
+ "uni-datetime-picker.startTime": "开始时间",
+ "uni-datetime-picker.endTime": "结束时间",
+ "uni-datetime-picker.ok": "确定",
+ "uni-datetime-picker.clear": "清除",
+ "uni-datetime-picker.cancel": "取消",
+ "uni-datetime-picker.year": "年",
+ "uni-datetime-picker.month": "月",
+ "uni-calender.SUN": "日",
+ "uni-calender.MON": "一",
+ "uni-calender.TUE": "二",
+ "uni-calender.WED": "三",
+ "uni-calender.THU": "四",
+ "uni-calender.FRI": "五",
+ "uni-calender.SAT": "六",
+ "uni-calender.confirm": "确认"
+}
\ No newline at end of file
diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json
new file mode 100644
index 0000000..d23fa3c
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json
@@ -0,0 +1,22 @@
+{
+ "uni-datetime-picker.selectDate": "選擇日期",
+ "uni-datetime-picker.selectTime": "選擇時間",
+ "uni-datetime-picker.selectDateTime": "選擇日期時間",
+ "uni-datetime-picker.startDate": "開始日期",
+ "uni-datetime-picker.endDate": "結束日期",
+ "uni-datetime-picker.startTime": "開始时间",
+ "uni-datetime-picker.endTime": "結束时间",
+ "uni-datetime-picker.ok": "確定",
+ "uni-datetime-picker.clear": "清除",
+ "uni-datetime-picker.cancel": "取消",
+ "uni-datetime-picker.year": "年",
+ "uni-datetime-picker.month": "月",
+ "uni-calender.SUN": "日",
+ "uni-calender.MON": "一",
+ "uni-calender.TUE": "二",
+ "uni-calender.WED": "三",
+ "uni-calender.THU": "四",
+ "uni-calender.FRI": "五",
+ "uni-calender.SAT": "六",
+ "uni-calender.confirm": "確認"
+}
\ No newline at end of file
diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js
new file mode 100644
index 0000000..9601aba
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js
@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+ name: 'Keypress',
+ props: {
+ disable: {
+ type: Boolean,
+ default: false
+ }
+ },
+ mounted () {
+ const keyNames = {
+ esc: ['Esc', 'Escape'],
+ tab: 'Tab',
+ enter: 'Enter',
+ space: [' ', 'Spacebar'],
+ up: ['Up', 'ArrowUp'],
+ left: ['Left', 'ArrowLeft'],
+ right: ['Right', 'ArrowRight'],
+ down: ['Down', 'ArrowDown'],
+ delete: ['Backspace', 'Delete', 'Del']
+ }
+ const listener = ($event) => {
+ if (this.disable) {
+ return
+ }
+ const keyName = Object.keys(keyNames).find(key => {
+ const keyName = $event.key
+ const value = keyNames[key]
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
+ })
+ if (keyName) {
+ // 避免和其他按键事件冲突
+ setTimeout(() => {
+ this.$emit(keyName, {})
+ }, 0)
+ }
+ }
+ document.addEventListener('keyup', listener)
+ this.$once('hook:beforeDestroy', () => {
+ document.removeEventListener('keyup', listener)
+ })
+ },
+ render: () => {}
+}
+// #endif
\ No newline at end of file
diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue
new file mode 100644
index 0000000..699aa63
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue
@@ -0,0 +1,927 @@
+
+
+
+
+
+ {{time}}
+
+ {{selectTimeText}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue
new file mode 100644
index 0000000..9bdf8bc
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue
@@ -0,0 +1,1012 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{rangeSeparator}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js
new file mode 100644
index 0000000..efa5773
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js
@@ -0,0 +1,410 @@
+class Calendar {
+ constructor({
+ date,
+ selected,
+ startDate,
+ endDate,
+ range,
+ // multipleStatus
+ } = {}) {
+ // 当前日期
+ this.date = this.getDate(new Date()) // 当前初入日期
+ // 打点信息
+ this.selected = selected || [];
+ // 范围开始
+ this.startDate = startDate
+ // 范围结束
+ this.endDate = endDate
+ this.range = range
+ // 多选状态
+ this.cleanMultipleStatus()
+ // 每周日期
+ this.weeks = {}
+ // this._getWeek(this.date.fullDate)
+ // this.multipleStatus = multipleStatus
+ this.lastHover = false
+ }
+ /**
+ * 设置日期
+ * @param {Object} date
+ */
+ setDate(date) {
+ this.selectDate = this.getDate(date)
+ this._getWeek(this.selectDate.fullDate)
+ }
+
+ /**
+ * 清理多选状态
+ */
+ cleanMultipleStatus() {
+ this.multipleStatus = {
+ before: '',
+ after: '',
+ data: []
+ }
+ }
+
+ /**
+ * 重置开始日期
+ */
+ resetSatrtDate(startDate) {
+ // 范围开始
+ this.startDate = startDate
+
+ }
+
+ /**
+ * 重置结束日期
+ */
+ resetEndDate(endDate) {
+ // 范围结束
+ this.endDate = endDate
+ }
+
+ /**
+ * 获取任意时间
+ */
+ getDate(date, AddDayCount = 0, str = 'day') {
+ if (!date) {
+ date = new Date()
+ }
+ if (typeof date !== 'object') {
+ date = date.replace(/-/g, '/')
+ }
+ const dd = new Date(date)
+ switch (str) {
+ case 'day':
+ dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期
+ break
+ case 'month':
+ if (dd.getDate() === 31) {
+ dd.setDate(dd.getDate() + AddDayCount)
+ } else {
+ dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期
+ }
+ break
+ case 'year':
+ dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期
+ break
+ }
+ const y = dd.getFullYear()
+ const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0
+ const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0
+ return {
+ fullDate: y + '-' + m + '-' + d,
+ year: y,
+ month: m,
+ date: d,
+ day: dd.getDay()
+ }
+ }
+
+
+ /**
+ * 获取上月剩余天数
+ */
+ _getLastMonthDays(firstDay, full) {
+ let dateArr = []
+ for (let i = firstDay; i > 0; i--) {
+ const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate()
+ dateArr.push({
+ date: beforeDate,
+ month: full.month - 1,
+ disable: true
+ })
+ }
+ return dateArr
+ }
+ /**
+ * 获取本月天数
+ */
+ _currentMonthDys(dateData, full) {
+ let dateArr = []
+ let fullDate = this.date.fullDate
+ for (let i = 1; i <= dateData; i++) {
+ let isinfo = false
+ let nowDate = full.year + '-' + (full.month < 10 ?
+ full.month : full.month) + '-' + (i < 10 ?
+ '0' + i : i)
+ // 是否今天
+ let isDay = fullDate === nowDate
+ // 获取打点信息
+ let info = this.selected && this.selected.find((item) => {
+ if (this.dateEqual(nowDate, item.date)) {
+ return item
+ }
+ })
+
+ // 日期禁用
+ let disableBefore = true
+ let disableAfter = true
+ if (this.startDate) {
+ // let dateCompBefore = this.dateCompare(this.startDate, fullDate)
+ // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate)
+ disableBefore = this.dateCompare(this.startDate, nowDate)
+ }
+
+ if (this.endDate) {
+ // let dateCompAfter = this.dateCompare(fullDate, this.endDate)
+ // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate)
+ disableAfter = this.dateCompare(nowDate, this.endDate)
+ }
+ let multiples = this.multipleStatus.data
+ let checked = false
+ let multiplesStatus = -1
+ if (this.range) {
+ if (multiples) {
+ multiplesStatus = multiples.findIndex((item) => {
+ return this.dateEqual(item, nowDate)
+ })
+ }
+ if (multiplesStatus !== -1) {
+ checked = true
+ }
+ }
+ let data = {
+ fullDate: nowDate,
+ year: full.year,
+ date: i,
+ multiple: this.range ? checked : false,
+ beforeMultiple: this.isLogicBefore(nowDate, this.multipleStatus.before, this.multipleStatus.after),
+ afterMultiple: this.isLogicAfter(nowDate, this.multipleStatus.before, this.multipleStatus.after),
+ month: full.month,
+ disable: !(disableBefore && disableAfter),
+ isDay,
+ userChecked: false
+ }
+ if (info) {
+ data.extraInfo = info
+ }
+
+ dateArr.push(data)
+ }
+ return dateArr
+ }
+ /**
+ * 获取下月天数
+ */
+ _getNextMonthDays(surplus, full) {
+ let dateArr = []
+ for (let i = 1; i < surplus + 1; i++) {
+ dateArr.push({
+ date: i,
+ month: Number(full.month) + 1,
+ disable: true
+ })
+ }
+ return dateArr
+ }
+
+ /**
+ * 获取当前日期详情
+ * @param {Object} date
+ */
+ getInfo(date) {
+ if (!date) {
+ date = new Date()
+ }
+ const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate)
+ return dateInfo
+ }
+
+ /**
+ * 比较时间大小
+ */
+ dateCompare(startDate, endDate) {
+ // 计算截止时间
+ startDate = new Date(startDate.replace('-', '/').replace('-', '/'))
+ // 计算详细项的截止时间
+ endDate = new Date(endDate.replace('-', '/').replace('-', '/'))
+ if (startDate <= endDate) {
+ return true
+ } else {
+ return false
+ }
+ }
+
+ /**
+ * 比较时间是否相等
+ */
+ dateEqual(before, after) {
+ // 计算截止时间
+ before = new Date(before.replace('-', '/').replace('-', '/'))
+ // 计算详细项的截止时间
+ after = new Date(after.replace('-', '/').replace('-', '/'))
+ if (before.getTime() - after.getTime() === 0) {
+ return true
+ } else {
+ return false
+ }
+ }
+
+ /**
+ * 比较真实起始日期
+ */
+
+ isLogicBefore(currentDay, before, after) {
+ let logicBefore = before
+ if (before && after) {
+ logicBefore = this.dateCompare(before, after) ? before : after
+ }
+ return this.dateEqual(logicBefore, currentDay)
+ }
+
+ isLogicAfter(currentDay, before, after) {
+ let logicAfter = after
+ if (before && after) {
+ logicAfter = this.dateCompare(before, after) ? after : before
+ }
+ return this.dateEqual(logicAfter, currentDay)
+ }
+
+ /**
+ * 获取日期范围内所有日期
+ * @param {Object} begin
+ * @param {Object} end
+ */
+ geDateAll(begin, end) {
+ var arr = []
+ var ab = begin.split('-')
+ var ae = end.split('-')
+ var db = new Date()
+ db.setFullYear(ab[0], ab[1] - 1, ab[2])
+ var de = new Date()
+ de.setFullYear(ae[0], ae[1] - 1, ae[2])
+ var unixDb = db.getTime() - 24 * 60 * 60 * 1000
+ var unixDe = de.getTime() - 24 * 60 * 60 * 1000
+ for (var k = unixDb; k <= unixDe;) {
+ k = k + 24 * 60 * 60 * 1000
+ arr.push(this.getDate(new Date(parseInt(k))).fullDate)
+ }
+ return arr
+ }
+
+ /**
+ * 获取多选状态
+ */
+ setMultiple(fullDate) {
+ let {
+ before,
+ after
+ } = this.multipleStatus
+ if (!this.range) return
+ if (before && after) {
+ if (!this.lastHover) {
+ this.lastHover = true
+ return
+ }
+ this.multipleStatus.before = fullDate
+ this.multipleStatus.after = ''
+ this.multipleStatus.data = []
+ this.multipleStatus.fulldate = ''
+ this.lastHover = false
+ } else {
+ if (!before) {
+ this.multipleStatus.before = fullDate
+ this.lastHover = false
+ } else {
+ this.multipleStatus.after = fullDate
+ if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) {
+ this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus
+ .after);
+ } else {
+ this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus
+ .before);
+ }
+ this.lastHover = true
+ }
+ }
+ this._getWeek(fullDate)
+ }
+
+ /**
+ * 鼠标 hover 更新多选状态
+ */
+ setHoverMultiple(fullDate) {
+ let {
+ before,
+ after
+ } = this.multipleStatus
+
+ if (!this.range) return
+ if (this.lastHover) return
+
+ if (!before) {
+ this.multipleStatus.before = fullDate
+ } else {
+ this.multipleStatus.after = fullDate
+ if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) {
+ this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after);
+ } else {
+ this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before);
+ }
+ }
+ this._getWeek(fullDate)
+ }
+
+ /**
+ * 更新默认值多选状态
+ */
+ setDefaultMultiple(before, after) {
+ this.multipleStatus.before = before
+ this.multipleStatus.after = after
+ if (before && after) {
+ if (this.dateCompare(before, after)) {
+ this.multipleStatus.data = this.geDateAll(before, after);
+ this._getWeek(after)
+ } else {
+ this.multipleStatus.data = this.geDateAll(after, before);
+ this._getWeek(before)
+ }
+ }
+ }
+
+ /**
+ * 获取每周数据
+ * @param {Object} dateData
+ */
+ _getWeek(dateData) {
+ const {
+ fullDate,
+ year,
+ month,
+ date,
+ day
+ } = this.getDate(dateData)
+ let firstDay = new Date(year, month - 1, 1).getDay()
+ let currentDay = new Date(year, month, 0).getDate()
+ let dates = {
+ lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天
+ currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数
+ nextMonthDays: [], // 下个月开始几天
+ weeks: []
+ }
+ let canlender = []
+ const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length)
+ dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData))
+ canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays)
+ let weeks = {}
+ // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天
+ for (let i = 0; i < canlender.length; i++) {
+ if (i % 7 === 0) {
+ weeks[parseInt(i / 7)] = new Array(7)
+ }
+ weeks[parseInt(i / 7)][i % 7] = canlender[i]
+ }
+ this.canlender = canlender
+ this.weeks = weeks
+ }
+
+ //静态方法
+ // static init(date) {
+ // if (!this.instance) {
+ // this.instance = new Calendar(date);
+ // }
+ // return this.instance;
+ // }
+}
+
+
+export default Calendar
diff --git a/uni_modules/uni-datetime-picker/package.json b/uni_modules/uni-datetime-picker/package.json
new file mode 100644
index 0000000..60fa1d0
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/package.json
@@ -0,0 +1,90 @@
+{
+ "id": "uni-datetime-picker",
+ "displayName": "uni-datetime-picker 日期选择器",
+ "version": "2.2.6",
+ "description": "uni-datetime-picker 日期时间选择器,支持日历,支持范围选择",
+ "keywords": [
+ "uni-datetime-picker",
+ "uni-ui",
+ "uniui",
+ "日期时间选择器",
+ "日期时间"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-icons"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "n"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-datetime-picker/readme.md b/uni_modules/uni-datetime-picker/readme.md
new file mode 100644
index 0000000..162fbef
--- /dev/null
+++ b/uni_modules/uni-datetime-picker/readme.md
@@ -0,0 +1,21 @@
+
+
+> `重要通知:组件升级更新 2.0.0 后,支持日期+时间范围选择,组件 ui 将使用日历选择日期,ui 变化较大,同时支持 PC 和 移动端。此版本不向后兼容,不再支持单独的时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker)。若仍需使用旧版本,可在插件市场下载*非uni_modules版本*,旧版本将不再维护`
+
+## DatetimePicker 时间选择器
+
+> **组件名:uni-datetime-picker**
+> 代码块: `uDatetimePicker`
+
+
+该组件的优势是,支持**时间戳**输入和输出(起始时间、终止时间也支持时间戳),可**同时选择**日期和时间。
+
+若只是需要单独选择日期和时间,不需要时间戳输入和输出,可使用原生的 picker 组件。
+
+**_点击 picker 默认值规则:_**
+
+- 若设置初始值 value, 会显示在 picker 显示框中
+- 若无初始值 value,则初始值 value 为当前本地时间 Date.now(), 但不会显示在 picker 显示框中
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-drawer/changelog.md b/uni_modules/uni-drawer/changelog.md
new file mode 100644
index 0000000..6d2488c
--- /dev/null
+++ b/uni_modules/uni-drawer/changelog.md
@@ -0,0 +1,13 @@
+## 1.2.1(2021-11-22)
+- 修复 vue3中个别scss变量无法找到的问题
+## 1.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-drawer](https://uniapp.dcloud.io/component/uniui/uni-drawer)
+## 1.1.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.1.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.7(2021-05-12)
+- 新增 组件示例地址
+## 1.0.6(2021-02-04)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-drawer/components/uni-drawer/keypress.js b/uni_modules/uni-drawer/components/uni-drawer/keypress.js
new file mode 100644
index 0000000..62dda46
--- /dev/null
+++ b/uni_modules/uni-drawer/components/uni-drawer/keypress.js
@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+ name: 'Keypress',
+ props: {
+ disable: {
+ type: Boolean,
+ default: false
+ }
+ },
+ mounted () {
+ const keyNames = {
+ esc: ['Esc', 'Escape'],
+ tab: 'Tab',
+ enter: 'Enter',
+ space: [' ', 'Spacebar'],
+ up: ['Up', 'ArrowUp'],
+ left: ['Left', 'ArrowLeft'],
+ right: ['Right', 'ArrowRight'],
+ down: ['Down', 'ArrowDown'],
+ delete: ['Backspace', 'Delete', 'Del']
+ }
+ const listener = ($event) => {
+ if (this.disable) {
+ return
+ }
+ const keyName = Object.keys(keyNames).find(key => {
+ const keyName = $event.key
+ const value = keyNames[key]
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
+ })
+ if (keyName) {
+ // 避免和其他按键事件冲突
+ setTimeout(() => {
+ this.$emit(keyName, {})
+ }, 0)
+ }
+ }
+ document.addEventListener('keyup', listener)
+ // this.$once('hook:beforeDestroy', () => {
+ // document.removeEventListener('keyup', listener)
+ // })
+ },
+ render: () => {}
+}
+// #endif
diff --git a/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue b/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue
new file mode 100644
index 0000000..82331a8
--- /dev/null
+++ b/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-drawer/package.json b/uni_modules/uni-drawer/package.json
new file mode 100644
index 0000000..dd056e4
--- /dev/null
+++ b/uni_modules/uni-drawer/package.json
@@ -0,0 +1,87 @@
+{
+ "id": "uni-drawer",
+ "displayName": "uni-drawer 抽屉",
+ "version": "1.2.1",
+ "description": "抽屉式导航,用于展示侧滑菜单,侧滑导航。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "drawer",
+ "抽屉",
+ "侧滑导航"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-drawer/readme.md b/uni_modules/uni-drawer/readme.md
new file mode 100644
index 0000000..dcf6e6b
--- /dev/null
+++ b/uni_modules/uni-drawer/readme.md
@@ -0,0 +1,10 @@
+
+
+## Drawer 抽屉
+> **组件名:uni-drawer**
+> 代码块: `uDrawer`
+
+抽屉侧滑菜单。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-drawer)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-easyinput/changelog.md b/uni_modules/uni-easyinput/changelog.md
new file mode 100644
index 0000000..1e8c6f9
--- /dev/null
+++ b/uni_modules/uni-easyinput/changelog.md
@@ -0,0 +1,47 @@
+## 1.1.0(2022-06-30)
+- 新增 在 uni-forms 1.4.0 中使用可以在 blur 时校验内容
+- 新增 clear 事件,点击右侧叉号图标触发
+- 新增 change 事件 ,仅在输入框失去焦点或用户按下回车时触发
+- 优化 组件样式,组件获取焦点时高亮显示,图标颜色调整等
+-
+## 1.0.5(2022-06-07)
+- 优化 clearable 显示策略
+## 1.0.4(2022-06-07)
+- 优化 clearable 显示策略
+## 1.0.3(2022-05-20)
+- 修复 关闭图标某些情况下无法取消的bug
+## 1.0.2(2022-04-12)
+- 修复 默认值不生效的bug
+## 1.0.1(2022-04-02)
+- 修复 value不能为0的bug
+## 1.0.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-easyinput](https://uniapp.dcloud.io/component/uniui/uni-easyinput)
+## 0.1.4(2021-08-20)
+- 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug
+## 0.1.3(2021-08-11)
+- 修复 在 uni-forms 中重置表单,错误信息无法清除的问题
+## 0.1.2(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 0.1.1
+- 优化 errorMessage 属性支持 Boolean 类型
+## 0.1.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 0.0.16(2021-06-29)
+- 修复 confirmType 属性(仅 type="text" 生效)导致多行文本框无法换行的 bug
+## 0.0.15(2021-06-21)
+- 修复 passwordIcon 属性拼写错误的 bug
+## 0.0.14(2021-06-18)
+- 新增 passwordIcon 属性,当type=password时是否显示小眼睛图标
+- 修复 confirmType 属性不生效的问题
+## 0.0.13(2021-06-04)
+- 修复 disabled 状态可清出内容的 bug
+## 0.0.12(2021-05-12)
+- 新增 组件示例地址
+## 0.0.11(2021-05-07)
+- 修复 input-border 属性不生效的问题
+## 0.0.10(2021-04-30)
+- 修复 ios 遮挡文字、显示一半的问题
+## 0.0.9(2021-02-05)
+- 调整为uni_modules目录规范
+- 优化 兼容 nvue 页面
diff --git a/uni_modules/uni-easyinput/components/uni-easyinput/common.js b/uni_modules/uni-easyinput/components/uni-easyinput/common.js
new file mode 100644
index 0000000..df9abe1
--- /dev/null
+++ b/uni_modules/uni-easyinput/components/uni-easyinput/common.js
@@ -0,0 +1,56 @@
+/**
+ * @desc 函数防抖
+ * @param func 目标函数
+ * @param wait 延迟执行毫秒数
+ * @param immediate true - 立即执行, false - 延迟执行
+ */
+export const debounce = function(func, wait = 1000, immediate = true) {
+ let timer;
+ console.log(1);
+ return function() {
+ console.log(123);
+ let context = this,
+ args = arguments;
+ if (timer) clearTimeout(timer);
+ if (immediate) {
+ let callNow = !timer;
+ timer = setTimeout(() => {
+ timer = null;
+ }, wait);
+ if (callNow) func.apply(context, args);
+ } else {
+ timer = setTimeout(() => {
+ func.apply(context, args);
+ }, wait)
+ }
+ }
+}
+/**
+ * @desc 函数节流
+ * @param func 函数
+ * @param wait 延迟执行毫秒数
+ * @param type 1 使用表时间戳,在时间段开始的时候触发 2 使用表定时器,在时间段结束的时候触发
+ */
+export const throttle = (func, wait = 1000, type = 1) => {
+ let previous = 0;
+ let timeout;
+ return function() {
+ let context = this;
+ let args = arguments;
+ if (type === 1) {
+ let now = Date.now();
+
+ if (now - previous > wait) {
+ func.apply(context, args);
+ previous = now;
+ }
+ } else if (type === 2) {
+ if (!timeout) {
+ timeout = setTimeout(() => {
+ timeout = null;
+ func.apply(context, args)
+ }, wait)
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue b/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue
new file mode 100644
index 0000000..5818d7f
--- /dev/null
+++ b/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue
@@ -0,0 +1,593 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-easyinput/package.json b/uni_modules/uni-easyinput/package.json
new file mode 100644
index 0000000..3cc793e
--- /dev/null
+++ b/uni_modules/uni-easyinput/package.json
@@ -0,0 +1,90 @@
+{
+ "id": "uni-easyinput",
+ "displayName": "uni-easyinput 增强输入框",
+ "version": "1.1.0",
+ "description": "Easyinput 组件是对原生input组件的增强",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "input",
+ "uni-easyinput",
+ "输入框"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-icons"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-easyinput/readme.md b/uni_modules/uni-easyinput/readme.md
new file mode 100644
index 0000000..f1faf8f
--- /dev/null
+++ b/uni_modules/uni-easyinput/readme.md
@@ -0,0 +1,11 @@
+
+
+### Easyinput 增强输入框
+> **组件名:uni-easyinput**
+> 代码块: `uEasyinput`
+
+
+easyinput 组件是对原生input组件的增强 ,是专门为配合表单组件[uni-forms](https://ext.dcloud.net.cn/plugin?id=2773)而设计的,easyinput 内置了边框,图标等,同时包含 input 所有功能
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-easyinput)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-fab/changelog.md b/uni_modules/uni-fab/changelog.md
new file mode 100644
index 0000000..24e26b1
--- /dev/null
+++ b/uni_modules/uni-fab/changelog.md
@@ -0,0 +1,17 @@
+## 1.2.2(2021-12-29)
+- 更新 组件依赖
+## 1.2.1(2021-11-19)
+- 修复 阴影颜色不正确的bug
+## 1.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-fab](https://uniapp.dcloud.io/component/uniui/uni-fab)
+## 1.1.1(2021-11-09)
+- 新增 提供组件设计资源,组件样式调整
+## 1.1.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.7(2021-05-12)
+- 新增 组件示例地址
+## 1.0.6(2021-02-05)
+- 调整为uni_modules目录规范
+- 优化 按钮背景色调整
+- 优化 兼容pc端
diff --git a/uni_modules/uni-fab/components/uni-fab/uni-fab.vue b/uni_modules/uni-fab/components/uni-fab/uni-fab.vue
new file mode 100644
index 0000000..bef97f1
--- /dev/null
+++ b/uni_modules/uni-fab/components/uni-fab/uni-fab.vue
@@ -0,0 +1,475 @@
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-fab/package.json b/uni_modules/uni-fab/package.json
new file mode 100644
index 0000000..0f27daa
--- /dev/null
+++ b/uni_modules/uni-fab/package.json
@@ -0,0 +1,87 @@
+{
+ "id": "uni-fab",
+ "displayName": "uni-fab 悬浮按钮",
+ "version": "1.2.2",
+ "description": "悬浮按钮 fab button ,点击可展开一个图标按钮菜单。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "按钮",
+ "悬浮按钮",
+ "fab"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss","uni-icons"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-fab/readme.md b/uni_modules/uni-fab/readme.md
new file mode 100644
index 0000000..9a444e8
--- /dev/null
+++ b/uni_modules/uni-fab/readme.md
@@ -0,0 +1,9 @@
+## Fab 悬浮按钮
+> **组件名:uni-fab**
+> 代码块: `uFab`
+
+
+点击可展开一个图形按钮菜单
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fab)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-fav/changelog.md b/uni_modules/uni-fav/changelog.md
new file mode 100644
index 0000000..d8a08d4
--- /dev/null
+++ b/uni_modules/uni-fav/changelog.md
@@ -0,0 +1,19 @@
+## 1.2.1(2022-05-30)
+- 新增 stat 属性 ,是否开启uni统计功能
+## 1.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-fav](https://uniapp.dcloud.io/component/uniui/uni-fav)
+## 1.1.1(2021-08-24)
+- 新增 支持国际化
+## 1.1.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.6(2021-05-12)
+- 新增 组件示例地址
+## 1.0.5(2021-04-21)
+- 优化 添加依赖 uni-icons, 导入后自动下载依赖
+## 1.0.4(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+## 1.0.3(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+## 1.0.2(2021-02-05)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-fav/components/uni-fav/i18n/en.json b/uni_modules/uni-fav/components/uni-fav/i18n/en.json
new file mode 100644
index 0000000..9a0759e
--- /dev/null
+++ b/uni_modules/uni-fav/components/uni-fav/i18n/en.json
@@ -0,0 +1,4 @@
+{
+ "uni-fav.collect": "collect",
+ "uni-fav.collected": "collected"
+}
diff --git a/uni_modules/uni-fav/components/uni-fav/i18n/index.js b/uni_modules/uni-fav/components/uni-fav/i18n/index.js
new file mode 100644
index 0000000..de7509c
--- /dev/null
+++ b/uni_modules/uni-fav/components/uni-fav/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json
new file mode 100644
index 0000000..67c89bf
--- /dev/null
+++ b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json
@@ -0,0 +1,4 @@
+{
+ "uni-fav.collect": "收藏",
+ "uni-fav.collected": "已收藏"
+}
diff --git a/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json
new file mode 100644
index 0000000..67c89bf
--- /dev/null
+++ b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json
@@ -0,0 +1,4 @@
+{
+ "uni-fav.collect": "收藏",
+ "uni-fav.collected": "已收藏"
+}
diff --git a/uni_modules/uni-fav/components/uni-fav/uni-fav.vue b/uni_modules/uni-fav/components/uni-fav/uni-fav.vue
new file mode 100644
index 0000000..d2c58df
--- /dev/null
+++ b/uni_modules/uni-fav/components/uni-fav/uni-fav.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+ {{ checked ? contentFav : contentDefault }}
+
+
+
+
+
+
diff --git a/uni_modules/uni-fav/package.json b/uni_modules/uni-fav/package.json
new file mode 100644
index 0000000..cc14697
--- /dev/null
+++ b/uni_modules/uni-fav/package.json
@@ -0,0 +1,89 @@
+{
+ "id": "uni-fav",
+ "displayName": "uni-fav 收藏按钮",
+ "version": "1.2.1",
+ "description": " Fav 收藏组件,可自定义颜色、大小。",
+ "keywords": [
+ "fav",
+ "uni-ui",
+ "uniui",
+ "收藏"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-icons"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-fav/readme.md b/uni_modules/uni-fav/readme.md
new file mode 100644
index 0000000..4de125d
--- /dev/null
+++ b/uni_modules/uni-fav/readme.md
@@ -0,0 +1,10 @@
+
+
+## Fav 收藏按钮
+> **组件名:uni-fav**
+> 代码块: `uFav`
+
+用于收藏功能,可点击切换选中、不选中的状态。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fav)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-file-picker/changelog.md b/uni_modules/uni-file-picker/changelog.md
new file mode 100644
index 0000000..5c81026
--- /dev/null
+++ b/uni_modules/uni-file-picker/changelog.md
@@ -0,0 +1,63 @@
+## 1.0.2(2022-07-04)
+- 修复 在uni-forms下样式不生效的bug
+## 1.0.1(2021-11-23)
+- 修复 参数为对象的情况下,url在某些情况显示错误的bug
+## 1.0.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-file-picker](https://uniapp.dcloud.io/component/uniui/uni-file-picker)
+## 0.2.16(2021-11-08)
+- 修复 传入空对象 ,显示错误的Bug
+## 0.2.15(2021-08-30)
+- 修复 return-type="object" 时且存在v-model时,无法删除文件的Bug
+## 0.2.14(2021-08-23)
+- 新增 参数中返回 fileID 字段
+## 0.2.13(2021-08-23)
+- 修复 腾讯云传入fileID 不能回显的bug
+- 修复 选择图片后,不能放大的问题
+## 0.2.12(2021-08-17)
+- 修复 由于 0.2.11 版本引起的不能回显图片的Bug
+## 0.2.11(2021-08-16)
+- 新增 clearFiles(index) 方法,可以手动删除指定文件
+- 修复 v-model 值设为 null 报错的Bug
+## 0.2.10(2021-08-13)
+- 修复 return-type="object" 时,无法删除文件的Bug
+## 0.2.9(2021-08-03)
+- 修复 auto-upload 属性失效的Bug
+## 0.2.8(2021-07-31)
+- 修复 fileExtname属性不指定值报错的Bug
+## 0.2.7(2021-07-31)
+- 修复 在某种场景下图片不回显的Bug
+## 0.2.6(2021-07-30)
+- 修复 return-type为object下,返回值不正确的Bug
+## 0.2.5(2021-07-30)
+- 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题
+## 0.2.3(2021-07-28)
+- 优化 调整示例代码
+## 0.2.2(2021-07-27)
+- 修复 vue3 下赋值错误的Bug
+- 优化 h5平台下上传文件导致页面卡死的问题
+## 0.2.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 0.1.1(2021-07-02)
+- 修复 sourceType 缺少默认值导致 ios 无法选择文件
+## 0.1.0(2021-06-30)
+- 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改
+## 0.0.11(2021-06-30)
+- 修复 由 0.0.10 版本引发的 returnType 属性失效的问题
+## 0.0.10(2021-06-29)
+- 优化 文件上传后进度条消失时机
+## 0.0.9(2021-06-29)
+- 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug
+## 0.0.8(2021-06-15)
+- 修复 删除文件时无法触发 v-model 的Bug
+## 0.0.7(2021-05-12)
+- 新增 组件示例地址
+## 0.0.6(2021-04-09)
+- 修复 选择的文件非 file-extname 字段指定的扩展名报错的Bug
+## 0.0.5(2021-04-09)
+- 优化 更新组件示例
+## 0.0.4(2021-04-09)
+- 优化 file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔
+## 0.0.3(2021-02-05)
+- 调整为uni_modules目录规范
+- 修复 微信小程序不指定 fileExtname 属性选择失败的Bug
diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js b/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js
new file mode 100644
index 0000000..24a07f5
--- /dev/null
+++ b/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js
@@ -0,0 +1,224 @@
+'use strict';
+
+const ERR_MSG_OK = 'chooseAndUploadFile:ok';
+const ERR_MSG_FAIL = 'chooseAndUploadFile:fail';
+
+function chooseImage(opts) {
+ const {
+ count,
+ sizeType = ['original', 'compressed'],
+ sourceType = ['album', 'camera'],
+ extension
+ } = opts
+ return new Promise((resolve, reject) => {
+ uni.chooseImage({
+ count,
+ sizeType,
+ sourceType,
+ extension,
+ success(res) {
+ resolve(normalizeChooseAndUploadFileRes(res, 'image'));
+ },
+ fail(res) {
+ reject({
+ errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL),
+ });
+ },
+ });
+ });
+}
+
+function chooseVideo(opts) {
+ const {
+ camera,
+ compressed,
+ maxDuration,
+ sourceType = ['album', 'camera'],
+ extension
+ } = opts;
+ return new Promise((resolve, reject) => {
+ uni.chooseVideo({
+ camera,
+ compressed,
+ maxDuration,
+ sourceType,
+ extension,
+ success(res) {
+ const {
+ tempFilePath,
+ duration,
+ size,
+ height,
+ width
+ } = res;
+ resolve(normalizeChooseAndUploadFileRes({
+ errMsg: 'chooseVideo:ok',
+ tempFilePaths: [tempFilePath],
+ tempFiles: [
+ {
+ name: (res.tempFile && res.tempFile.name) || '',
+ path: tempFilePath,
+ size,
+ type: (res.tempFile && res.tempFile.type) || '',
+ width,
+ height,
+ duration,
+ fileType: 'video',
+ cloudPath: '',
+ }, ],
+ }, 'video'));
+ },
+ fail(res) {
+ reject({
+ errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL),
+ });
+ },
+ });
+ });
+}
+
+function chooseAll(opts) {
+ const {
+ count,
+ extension
+ } = opts;
+ return new Promise((resolve, reject) => {
+ let chooseFile = uni.chooseFile;
+ if (typeof wx !== 'undefined' &&
+ typeof wx.chooseMessageFile === 'function') {
+ chooseFile = wx.chooseMessageFile;
+ }
+ if (typeof chooseFile !== 'function') {
+ return reject({
+ errMsg: ERR_MSG_FAIL + ' 请指定 type 类型,该平台仅支持选择 image 或 video。',
+ });
+ }
+ chooseFile({
+ type: 'all',
+ count,
+ extension,
+ success(res) {
+ resolve(normalizeChooseAndUploadFileRes(res));
+ },
+ fail(res) {
+ reject({
+ errMsg: res.errMsg.replace('chooseFile:fail', ERR_MSG_FAIL),
+ });
+ },
+ });
+ });
+}
+
+function normalizeChooseAndUploadFileRes(res, fileType) {
+ res.tempFiles.forEach((item, index) => {
+ if (!item.name) {
+ item.name = item.path.substring(item.path.lastIndexOf('/') + 1);
+ }
+ if (fileType) {
+ item.fileType = fileType;
+ }
+ item.cloudPath =
+ Date.now() + '_' + index + item.name.substring(item.name.lastIndexOf('.'));
+ });
+ if (!res.tempFilePaths) {
+ res.tempFilePaths = res.tempFiles.map((file) => file.path);
+ }
+ return res;
+}
+
+function uploadCloudFiles(files, max = 5, onUploadProgress) {
+ files = JSON.parse(JSON.stringify(files))
+ const len = files.length
+ let count = 0
+ let self = this
+ return new Promise(resolve => {
+ while (count < max) {
+ next()
+ }
+
+ function next() {
+ let cur = count++
+ if (cur >= len) {
+ !files.find(item => !item.url && !item.errMsg) && resolve(files)
+ return
+ }
+ const fileItem = files[cur]
+ const index = self.files.findIndex(v => v.uuid === fileItem.uuid)
+ fileItem.url = ''
+ delete fileItem.errMsg
+
+ uniCloud
+ .uploadFile({
+ filePath: fileItem.path,
+ cloudPath: fileItem.cloudPath,
+ fileType: fileItem.fileType,
+ onUploadProgress: res => {
+ res.index = index
+ onUploadProgress && onUploadProgress(res)
+ }
+ })
+ .then(res => {
+ fileItem.url = res.fileID
+ fileItem.index = index
+ if (cur < len) {
+ next()
+ }
+ })
+ .catch(res => {
+ fileItem.errMsg = res.errMsg || res.message
+ fileItem.index = index
+ if (cur < len) {
+ next()
+ }
+ })
+ }
+ })
+}
+
+
+
+
+
+function uploadFiles(choosePromise, {
+ onChooseFile,
+ onUploadProgress
+}) {
+ return choosePromise
+ .then((res) => {
+ if (onChooseFile) {
+ const customChooseRes = onChooseFile(res);
+ if (typeof customChooseRes !== 'undefined') {
+ return Promise.resolve(customChooseRes).then((chooseRes) => typeof chooseRes === 'undefined' ?
+ res : chooseRes);
+ }
+ }
+ return res;
+ })
+ .then((res) => {
+ if (res === false) {
+ return {
+ errMsg: ERR_MSG_OK,
+ tempFilePaths: [],
+ tempFiles: [],
+ };
+ }
+ return res
+ })
+}
+
+function chooseAndUploadFile(opts = {
+ type: 'all'
+}) {
+ if (opts.type === 'image') {
+ return uploadFiles(chooseImage(opts), opts);
+ }
+ else if (opts.type === 'video') {
+ return uploadFiles(chooseVideo(opts), opts);
+ }
+ return uploadFiles(chooseAll(opts), opts);
+}
+
+export {
+ chooseAndUploadFile,
+ uploadCloudFiles
+};
diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue b/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue
new file mode 100644
index 0000000..0928a41
--- /dev/null
+++ b/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue
@@ -0,0 +1,656 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择文件
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue
new file mode 100644
index 0000000..625d92e
--- /dev/null
+++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue
@@ -0,0 +1,325 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+ 点击重试
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue
new file mode 100644
index 0000000..2a29bc2
--- /dev/null
+++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击重试
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/utils.js b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js
new file mode 100644
index 0000000..60aaa3e
--- /dev/null
+++ b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js
@@ -0,0 +1,109 @@
+/**
+ * 获取文件名和后缀
+ * @param {String} name
+ */
+export const get_file_ext = (name) => {
+ const last_len = name.lastIndexOf('.')
+ const len = name.length
+ return {
+ name: name.substring(0, last_len),
+ ext: name.substring(last_len + 1, len)
+ }
+}
+
+/**
+ * 获取扩展名
+ * @param {Array} fileExtname
+ */
+export const get_extname = (fileExtname) => {
+ if (!Array.isArray(fileExtname)) {
+ let extname = fileExtname.replace(/(\[|\])/g, '')
+ return extname.split(',')
+ } else {
+ return fileExtname
+ }
+ return []
+}
+
+/**
+ * 获取文件和检测是否可选
+ */
+export const get_files_and_is_max = (res, _extname) => {
+ let filePaths = []
+ let files = []
+ if(!_extname || _extname.length === 0){
+ return {
+ filePaths,
+ files
+ }
+ }
+ res.tempFiles.forEach(v => {
+ let fileFullName = get_file_ext(v.name)
+ const extname = fileFullName.ext.toLowerCase()
+ if (_extname.indexOf(extname) !== -1) {
+ files.push(v)
+ filePaths.push(v.path)
+ }
+ })
+ if (files.length !== res.tempFiles.length) {
+ uni.showToast({
+ title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`,
+ icon: 'none',
+ duration: 5000
+ })
+ }
+
+ return {
+ filePaths,
+ files
+ }
+}
+
+
+/**
+ * 获取图片信息
+ * @param {Object} filepath
+ */
+export const get_file_info = (filepath) => {
+ return new Promise((resolve, reject) => {
+ uni.getImageInfo({
+ src: filepath,
+ success(res) {
+ resolve(res)
+ },
+ fail(err) {
+ reject(err)
+ }
+ })
+ })
+}
+/**
+ * 获取封装数据
+ */
+export const get_file_data = async (files, type = 'image') => {
+ // 最终需要上传数据库的数据
+ let fileFullName = get_file_ext(files.name)
+ const extname = fileFullName.ext.toLowerCase()
+ let filedata = {
+ name: files.name,
+ uuid: files.uuid,
+ extname: extname || '',
+ cloudPath: files.cloudPath,
+ fileType: files.fileType,
+ url: files.path || files.path,
+ size: files.size, //单位是字节
+ image: {},
+ path: files.path,
+ video: {}
+ }
+ if (type === 'image') {
+ const imageinfo = await get_file_info(files.path)
+ delete filedata.video
+ filedata.image.width = imageinfo.width
+ filedata.image.height = imageinfo.height
+ filedata.image.location = imageinfo.path
+ } else {
+ delete filedata.image
+ }
+ return filedata
+}
diff --git a/uni_modules/uni-file-picker/package.json b/uni_modules/uni-file-picker/package.json
new file mode 100644
index 0000000..08bd66e
--- /dev/null
+++ b/uni_modules/uni-file-picker/package.json
@@ -0,0 +1,86 @@
+{
+ "id": "uni-file-picker",
+ "displayName": "uni-file-picker 文件选择上传",
+ "version": "1.0.2",
+ "description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "图片上传",
+ "文件上传"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "n"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-file-picker/readme.md b/uni_modules/uni-file-picker/readme.md
new file mode 100644
index 0000000..c8399a5
--- /dev/null
+++ b/uni_modules/uni-file-picker/readme.md
@@ -0,0 +1,11 @@
+
+## FilePicker 文件选择上传
+
+> **组件名:uni-file-picker**
+> 代码块: `uFilePicker`
+
+
+文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-file-picker)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-forms/changelog.md b/uni_modules/uni-forms/changelog.md
new file mode 100644
index 0000000..5a4bb79
--- /dev/null
+++ b/uni_modules/uni-forms/changelog.md
@@ -0,0 +1,86 @@
+## 1.4.6(2022-07-13)
+- 修复 model 需要校验的值没有声明对应字段时,导致第一次不触发校验的bug
+## 1.4.5(2022-07-05)
+- 新增 更多表单示例
+- 优化 子表单组件过期提示的问题
+- 优化 子表单组件uni-datetime-picker、uni-data-select、uni-data-picker的显示样式
+## 1.4.4(2022-07-04)
+- 更新 删除组件日志
+## 1.4.3(2022-07-04)
+- 修复 由 1.4.0 引发的 label 插槽不生效的bug
+## 1.4.2(2022-07-04)
+- 修复 子组件找不到 setValue 报错的bug
+## 1.4.1(2022-07-04)
+- 修复 uni-data-picker 在 uni-forms-item 中报错的bug
+- 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug
+## 1.4.0(2022-06-30)
+- 【重要】组件逻辑重构,部分用法用旧版本不兼容,请注意兼容问题
+- 【重要】组件使用 Provide/Inject 方式注入依赖,提供了自定义表单组件调用 uni-forms 校验表单的能力
+- 新增 model 属性,等同于原 value/modelValue 属性,旧属性即将废弃
+- 新增 validateTrigger 属性的 blur 值,仅 uni-easyinput 生效
+- 新增 onFieldChange 方法,可以对子表单进行校验,可替代binddata方法
+- 新增 子表单的 setRules 方法,配合自定义校验函数使用
+- 新增 uni-forms-item 的 setRules 方法,配置动态表单使用可动态更新校验规则
+- 优化 动态表单校验方式,废弃拼接name的方式
+## 1.3.3(2022-06-22)
+- 修复 表单校验顺序无序问题
+## 1.3.2(2021-12-09)
+-
+## 1.3.1(2021-11-19)
+- 修复 label 插槽不生效的bug
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-forms](https://uniapp.dcloud.io/component/uniui/uni-forms)
+## 1.2.7(2021-08-13)
+- 修复 没有添加校验规则的字段依然报错的Bug
+## 1.2.6(2021-08-11)
+- 修复 重置表单错误信息无法清除的问题
+## 1.2.5(2021-08-11)
+- 优化 组件文档
+## 1.2.4(2021-08-11)
+- 修复 表单验证只生效一次的问题
+## 1.2.3(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.2.2(2021-07-26)
+- 修复 vue2 下条件编译导致destroyed生命周期失效的Bug
+- 修复 1.2.1 引起的示例在小程序平台报错的Bug
+## 1.2.1(2021-07-22)
+- 修复 动态校验表单,默认值为空的情况下校验失效的Bug
+- 修复 不指定name属性时,运行报错的Bug
+- 优化 label默认宽度从65调整至70,使required为true且四字时不换行
+- 优化 组件示例,新增动态校验示例代码
+- 优化 组件文档,使用方式更清晰
+## 1.2.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.2(2021-06-25)
+- 修复 pattern 属性在微信小程序平台无效的问题
+## 1.1.1(2021-06-22)
+- 修复 validate-trigger属性为submit且err-show-type属性为toast时不能弹出的Bug
+## 1.1.0(2021-06-22)
+- 修复 只写setRules方法而导致校验不生效的Bug
+- 修复 由上个办法引发的错误提示文字错位的Bug
+## 1.0.48(2021-06-21)
+- 修复 不设置 label 属性 ,无法设置label插槽的问题
+## 1.0.47(2021-06-21)
+- 修复 不设置label属性,label-width属性不生效的bug
+- 修复 setRules 方法与rules属性冲突的问题
+## 1.0.46(2021-06-04)
+- 修复 动态删减数据导致报错的问题
+## 1.0.45(2021-06-04)
+- 新增 modelValue 属性 ,value 即将废弃
+## 1.0.44(2021-06-02)
+- 新增 uni-forms-item 可以设置单独的 rules
+- 新增 validate 事件增加 keepitem 参数,可以选择那些字段不过滤
+- 优化 submit 事件重命名为 validate
+## 1.0.43(2021-05-12)
+- 新增 组件示例地址
+## 1.0.42(2021-04-30)
+- 修复 自定义检验器失效的问题
+## 1.0.41(2021-03-05)
+- 更新 校验器
+- 修复 表单规则设置类型为 number 的情况下,值为0校验失败的Bug
+## 1.0.40(2021-03-04)
+- 修复 动态显示uni-forms-item的情况下,submit 方法获取值错误的Bug
+## 1.0.39(2021-02-05)
+- 调整为uni_modules目录规范
+- 修复 校验器传入 int 等类型 ,返回String类型的Bug
diff --git a/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue b/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue
new file mode 100644
index 0000000..250ed87
--- /dev/null
+++ b/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue
@@ -0,0 +1,627 @@
+
+
+
+
+ *
+ {{label}}
+
+
+
+
+
+
+ {{msg}}
+
+
+
+
+
+
+
+
+
+ {{msg}}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-forms/components/uni-forms/uni-forms.vue b/uni_modules/uni-forms/components/uni-forms/uni-forms.vue
new file mode 100644
index 0000000..ed2f6d9
--- /dev/null
+++ b/uni_modules/uni-forms/components/uni-forms/uni-forms.vue
@@ -0,0 +1,397 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-forms/components/uni-forms/utils.js b/uni_modules/uni-forms/components/uni-forms/utils.js
new file mode 100644
index 0000000..6da2421
--- /dev/null
+++ b/uni_modules/uni-forms/components/uni-forms/utils.js
@@ -0,0 +1,293 @@
+/**
+ * 简单处理对象拷贝
+ * @param {Obejct} 被拷贝对象
+ * @@return {Object} 拷贝对象
+ */
+export const deepCopy = (val) => {
+ return JSON.parse(JSON.stringify(val))
+}
+/**
+ * 过滤数字类型
+ * @param {String} format 数字类型
+ * @@return {Boolean} 返回是否为数字类型
+ */
+export const typeFilter = (format) => {
+ return format === 'int' || format === 'double' || format === 'number' || format === 'timestamp';
+}
+
+/**
+ * 把 value 转换成指定的类型,用于处理初始值,原因是初始值需要入库不能为 undefined
+ * @param {String} key 字段名
+ * @param {any} value 字段值
+ * @param {Object} rules 表单校验规则
+ */
+export const getValue = (key, value, rules) => {
+ const isRuleNumType = rules.find(val => val.format && typeFilter(val.format));
+ const isRuleBoolType = rules.find(val => (val.format && val.format === 'boolean') || val.format === 'bool');
+ // 输入类型为 number
+ if (!!isRuleNumType) {
+ if (!value && value !== 0) {
+ value = null
+ } else {
+ value = isNumber(Number(value)) ? Number(value) : value
+ }
+ }
+
+ // 输入类型为 boolean
+ if (!!isRuleBoolType) {
+ value = isBoolean(value) ? value : false
+ }
+
+ return value;
+}
+
+/**
+ * 获取表单数据
+ * @param {String|Array} name 真实名称,需要使用 realName 获取
+ * @param {Object} data 原始数据
+ * @param {any} value 需要设置的值
+ */
+export const setDataValue = (field, formdata, value) => {
+ formdata[field] = value
+ return value || ''
+}
+
+/**
+ * 获取表单数据
+ * @param {String|Array} field 真实名称,需要使用 realName 获取
+ * @param {Object} data 原始数据
+ */
+export const getDataValue = (field, data) => {
+ return objGet(data, field)
+}
+
+/**
+ * 获取表单类型
+ * @param {String|Array} field 真实名称,需要使用 realName 获取
+ */
+export const getDataValueType = (field, data) => {
+ const value = getDataValue(field, data)
+ return {
+ type: type(value),
+ value
+ }
+}
+
+/**
+ * 获取表单可用的真实name
+ * @param {String|Array} name 表单name
+ * @@return {String} 表单可用的真实name
+ */
+export const realName = (name, data = {}) => {
+ const base_name = _basePath(name)
+ if (typeof base_name === 'object' && Array.isArray(base_name) && base_name.length > 1) {
+ const realname = base_name.reduce((a, b) => a += `#${b}`, '_formdata_')
+ return realname
+ }
+ return base_name[0] || name
+}
+
+/**
+ * 判断是否表单可用的真实name
+ * @param {String|Array} name 表单name
+ * @@return {String} 表单可用的真实name
+ */
+export const isRealName = (name) => {
+ const reg = /^_formdata_#*/
+ return reg.test(name)
+}
+
+/**
+ * 获取表单数据的原始格式
+ * @@return {Object|Array} object 需要解析的数据
+ */
+export const rawData = (object = {}, name) => {
+ let newData = JSON.parse(JSON.stringify(object))
+ let formData = {}
+ for(let i in newData){
+ let path = name2arr(i)
+ objSet(formData,path,newData[i])
+ }
+ return formData
+}
+
+/**
+ * 真实name还原为 array
+ * @param {*} name
+ */
+export const name2arr = (name) => {
+ let field = name.replace('_formdata_#', '')
+ field = field.split('#').map(v => (isNumber(v) ? Number(v) : v))
+ return field
+}
+
+/**
+ * 对象中设置值
+ * @param {Object|Array} object 源数据
+ * @param {String| Array} path 'a.b.c' 或 ['a',0,'b','c']
+ * @param {String} value 需要设置的值
+ */
+export const objSet = (object, path, value) => {
+ if (typeof object !== 'object') return object;
+ _basePath(path).reduce((o, k, i, _) => {
+ if (i === _.length - 1) {
+ // 若遍历结束直接赋值
+ o[k] = value
+ return null
+ } else if (k in o) {
+ // 若存在对应路径,则返回找到的对象,进行下一次遍历
+ return o[k]
+ } else {
+ // 若不存在对应路径,则创建对应对象,若下一路径是数字,新对象赋值为空数组,否则赋值为空对象
+ o[k] = /^[0-9]{1,}$/.test(_[i + 1]) ? [] : {}
+ return o[k]
+ }
+ }, object)
+ // 返回object
+ return object;
+}
+
+// 处理 path, path有三种形式:'a[0].b.c'、'a.0.b.c' 和 ['a','0','b','c'],需要统一处理成数组,便于后续使用
+function _basePath(path) {
+ // 若是数组,则直接返回
+ if (Array.isArray(path)) return path
+ // 若有 '[',']',则替换成将 '[' 替换成 '.',去掉 ']'
+ return path.replace(/\[/g, '.').replace(/\]/g, '').split('.')
+}
+
+/**
+ * 从对象中获取值
+ * @param {Object|Array} object 源数据
+ * @param {String| Array} path 'a.b.c' 或 ['a',0,'b','c']
+ * @param {String} defaultVal 如果无法从调用链中获取值的默认值
+ */
+export const objGet = (object, path, defaultVal = 'undefined') => {
+ // 先将path处理成统一格式
+ let newPath = _basePath(path)
+ // 递归处理,返回最后结果
+ let val = newPath.reduce((o, k) => {
+ return (o || {})[k]
+ }, object);
+ return !val || val !== undefined ? val : defaultVal
+}
+
+
+/**
+ * 是否为 number 类型
+ * @param {any} num 需要判断的值
+ * @return {Boolean} 是否为 number
+ */
+export const isNumber = (num) => {
+ return !isNaN(Number(num))
+}
+
+/**
+ * 是否为 boolean 类型
+ * @param {any} bool 需要判断的值
+ * @return {Boolean} 是否为 boolean
+ */
+export const isBoolean = (bool) => {
+ return (typeof bool === 'boolean')
+}
+/**
+ * 是否有必填字段
+ * @param {Object} rules 规则
+ * @return {Boolean} 是否有必填字段
+ */
+export const isRequiredField = (rules) => {
+ let isNoField = false;
+ for (let i = 0; i < rules.length; i++) {
+ const ruleData = rules[i];
+ if (ruleData.required) {
+ isNoField = true;
+ break;
+ }
+ }
+ return isNoField;
+}
+
+
+/**
+ * 获取数据类型
+ * @param {Any} obj 需要获取数据类型的值
+ */
+export const type = (obj) => {
+ var class2type = {};
+
+ // 生成class2type映射
+ "Boolean Number String Function Array Date RegExp Object Error".split(" ").map(function(item, index) {
+ class2type["[object " + item + "]"] = item.toLowerCase();
+ })
+ if (obj == null) {
+ return obj + "";
+ }
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[Object.prototype.toString.call(obj)] || "object" :
+ typeof obj;
+}
+
+/**
+ * 判断两个值是否相等
+ * @param {any} a 值
+ * @param {any} b 值
+ * @return {Boolean} 是否相等
+ */
+export const isEqual = (a, b) => {
+ //如果a和b本来就全等
+ if (a === b) {
+ //判断是否为0和-0
+ return a !== 0 || 1 / a === 1 / b;
+ }
+ //判断是否为null和undefined
+ if (a == null || b == null) {
+ return a === b;
+ }
+ //接下来判断a和b的数据类型
+ var classNameA = toString.call(a),
+ classNameB = toString.call(b);
+ //如果数据类型不相等,则返回false
+ if (classNameA !== classNameB) {
+ return false;
+ }
+ //如果数据类型相等,再根据不同数据类型分别判断
+ switch (classNameA) {
+ case '[object RegExp]':
+ case '[object String]':
+ //进行字符串转换比较
+ return '' + a === '' + b;
+ case '[object Number]':
+ //进行数字转换比较,判断是否为NaN
+ if (+a !== +a) {
+ return +b !== +b;
+ }
+ //判断是否为0或-0
+ return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+ case '[object Date]':
+ case '[object Boolean]':
+ return +a === +b;
+ }
+ //如果是对象类型
+ if (classNameA == '[object Object]') {
+ //获取a和b的属性长度
+ var propsA = Object.getOwnPropertyNames(a),
+ propsB = Object.getOwnPropertyNames(b);
+ if (propsA.length != propsB.length) {
+ return false;
+ }
+ for (var i = 0; i < propsA.length; i++) {
+ var propName = propsA[i];
+ //如果对应属性对应值不相等,则返回false
+ if (a[propName] !== b[propName]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ //如果是数组类型
+ if (classNameA == '[object Array]') {
+ if (a.toString() == b.toString()) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/uni_modules/uni-forms/components/uni-forms/validate.js b/uni_modules/uni-forms/components/uni-forms/validate.js
new file mode 100644
index 0000000..1834c6c
--- /dev/null
+++ b/uni_modules/uni-forms/components/uni-forms/validate.js
@@ -0,0 +1,486 @@
+var pattern = {
+ email: /^\S+?@\S+?\.\S+?$/,
+ idcard: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
+ url: new RegExp(
+ "^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$",
+ 'i')
+};
+
+const FORMAT_MAPPING = {
+ "int": 'integer',
+ "bool": 'boolean',
+ "double": 'number',
+ "long": 'number',
+ "password": 'string'
+ // "fileurls": 'array'
+}
+
+function formatMessage(args, resources = '') {
+ var defaultMessage = ['label']
+ defaultMessage.forEach((item) => {
+ if (args[item] === undefined) {
+ args[item] = ''
+ }
+ })
+
+ let str = resources
+ for (let key in args) {
+ let reg = new RegExp('{' + key + '}')
+ str = str.replace(reg, args[key])
+ }
+ return str
+}
+
+function isEmptyValue(value, type) {
+ if (value === undefined || value === null) {
+ return true;
+ }
+
+ if (typeof value === 'string' && !value) {
+ return true;
+ }
+
+ if (Array.isArray(value) && !value.length) {
+ return true;
+ }
+
+ if (type === 'object' && !Object.keys(value).length) {
+ return true;
+ }
+
+ return false;
+}
+
+const types = {
+ integer(value) {
+ return types.number(value) && parseInt(value, 10) === value;
+ },
+ string(value) {
+ return typeof value === 'string';
+ },
+ number(value) {
+ if (isNaN(value)) {
+ return false;
+ }
+ return typeof value === 'number';
+ },
+ "boolean": function(value) {
+ return typeof value === 'boolean';
+ },
+ "float": function(value) {
+ return types.number(value) && !types.integer(value);
+ },
+ array(value) {
+ return Array.isArray(value);
+ },
+ object(value) {
+ return typeof value === 'object' && !types.array(value);
+ },
+ date(value) {
+ return value instanceof Date;
+ },
+ timestamp(value) {
+ if (!this.integer(value) || Math.abs(value).toString().length > 16) {
+ return false
+ }
+ return true;
+ },
+ file(value) {
+ return typeof value.url === 'string';
+ },
+ email(value) {
+ return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;
+ },
+ url(value) {
+ return typeof value === 'string' && !!value.match(pattern.url);
+ },
+ pattern(reg, value) {
+ try {
+ return new RegExp(reg).test(value);
+ } catch (e) {
+ return false;
+ }
+ },
+ method(value) {
+ return typeof value === 'function';
+ },
+ idcard(value) {
+ return typeof value === 'string' && !!value.match(pattern.idcard);
+ },
+ 'url-https'(value) {
+ return this.url(value) && value.startsWith('https://');
+ },
+ 'url-scheme'(value) {
+ return value.startsWith('://');
+ },
+ 'url-web'(value) {
+ return false;
+ }
+}
+
+class RuleValidator {
+
+ constructor(message) {
+ this._message = message
+ }
+
+ async validateRule(fieldKey, fieldValue, value, data, allData) {
+ var result = null
+
+ let rules = fieldValue.rules
+
+ let hasRequired = rules.findIndex((item) => {
+ return item.required
+ })
+ if (hasRequired < 0) {
+ if (value === null || value === undefined) {
+ return result
+ }
+ if (typeof value === 'string' && !value.length) {
+ return result
+ }
+ }
+
+ var message = this._message
+
+ if (rules === undefined) {
+ return message['default']
+ }
+
+ for (var i = 0; i < rules.length; i++) {
+ let rule = rules[i]
+ let vt = this._getValidateType(rule)
+
+ Object.assign(rule, {
+ label: fieldValue.label || `["${fieldKey}"]`
+ })
+
+ if (RuleValidatorHelper[vt]) {
+ result = RuleValidatorHelper[vt](rule, value, message)
+ if (result != null) {
+ break
+ }
+ }
+
+ if (rule.validateExpr) {
+ let now = Date.now()
+ let resultExpr = rule.validateExpr(value, allData, now)
+ if (resultExpr === false) {
+ result = this._getMessage(rule, rule.errorMessage || this._message['default'])
+ break
+ }
+ }
+
+ if (rule.validateFunction) {
+ result = await this.validateFunction(rule, value, data, allData, vt)
+ if (result !== null) {
+ break
+ }
+ }
+ }
+
+ if (result !== null) {
+ result = message.TAG + result
+ }
+
+ return result
+ }
+
+ async validateFunction(rule, value, data, allData, vt) {
+ let result = null
+ try {
+ let callbackMessage = null
+ const res = await rule.validateFunction(rule, value, allData || data, (message) => {
+ callbackMessage = message
+ })
+ if (callbackMessage || (typeof res === 'string' && res) || res === false) {
+ result = this._getMessage(rule, callbackMessage || res, vt)
+ }
+ } catch (e) {
+ result = this._getMessage(rule, e.message, vt)
+ }
+ return result
+ }
+
+ _getMessage(rule, message, vt) {
+ return formatMessage(rule, message || rule.errorMessage || this._message[vt] || message['default'])
+ }
+
+ _getValidateType(rule) {
+ var result = ''
+ if (rule.required) {
+ result = 'required'
+ } else if (rule.format) {
+ result = 'format'
+ } else if (rule.arrayType) {
+ result = 'arrayTypeFormat'
+ } else if (rule.range) {
+ result = 'range'
+ } else if (rule.maximum !== undefined || rule.minimum !== undefined) {
+ result = 'rangeNumber'
+ } else if (rule.maxLength !== undefined || rule.minLength !== undefined) {
+ result = 'rangeLength'
+ } else if (rule.pattern) {
+ result = 'pattern'
+ } else if (rule.validateFunction) {
+ result = 'validateFunction'
+ }
+ return result
+ }
+}
+
+const RuleValidatorHelper = {
+ required(rule, value, message) {
+ if (rule.required && isEmptyValue(value, rule.format || typeof value)) {
+ return formatMessage(rule, rule.errorMessage || message.required);
+ }
+
+ return null
+ },
+
+ range(rule, value, message) {
+ const {
+ range,
+ errorMessage
+ } = rule;
+
+ let list = new Array(range.length);
+ for (let i = 0; i < range.length; i++) {
+ const item = range[i];
+ if (types.object(item) && item.value !== undefined) {
+ list[i] = item.value;
+ } else {
+ list[i] = item;
+ }
+ }
+
+ let result = false
+ if (Array.isArray(value)) {
+ result = (new Set(value.concat(list)).size === list.length);
+ } else {
+ if (list.indexOf(value) > -1) {
+ result = true;
+ }
+ }
+
+ if (!result) {
+ return formatMessage(rule, errorMessage || message['enum']);
+ }
+
+ return null
+ },
+
+ rangeNumber(rule, value, message) {
+ if (!types.number(value)) {
+ return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
+ }
+
+ let {
+ minimum,
+ maximum,
+ exclusiveMinimum,
+ exclusiveMaximum
+ } = rule;
+ let min = exclusiveMinimum ? value <= minimum : value < minimum;
+ let max = exclusiveMaximum ? value >= maximum : value > maximum;
+
+ if (minimum !== undefined && min) {
+ return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMinimum ?
+ 'exclusiveMinimum' : 'minimum'
+ ])
+ } else if (maximum !== undefined && max) {
+ return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMaximum ?
+ 'exclusiveMaximum' : 'maximum'
+ ])
+ } else if (minimum !== undefined && maximum !== undefined && (min || max)) {
+ return formatMessage(rule, rule.errorMessage || message['number'].range)
+ }
+
+ return null
+ },
+
+ rangeLength(rule, value, message) {
+ if (!types.string(value) && !types.array(value)) {
+ return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
+ }
+
+ let min = rule.minLength;
+ let max = rule.maxLength;
+ let val = value.length;
+
+ if (min !== undefined && val < min) {
+ return formatMessage(rule, rule.errorMessage || message['length'].minLength)
+ } else if (max !== undefined && val > max) {
+ return formatMessage(rule, rule.errorMessage || message['length'].maxLength)
+ } else if (min !== undefined && max !== undefined && (val < min || val > max)) {
+ return formatMessage(rule, rule.errorMessage || message['length'].range)
+ }
+
+ return null
+ },
+
+ pattern(rule, value, message) {
+ if (!types['pattern'](rule.pattern, value)) {
+ return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
+ }
+
+ return null
+ },
+
+ format(rule, value, message) {
+ var customTypes = Object.keys(types);
+ var format = FORMAT_MAPPING[rule.format] ? FORMAT_MAPPING[rule.format] : (rule.format || rule.arrayType);
+
+ if (customTypes.indexOf(format) > -1) {
+ if (!types[format](value)) {
+ return formatMessage(rule, rule.errorMessage || message.typeError);
+ }
+ }
+
+ return null
+ },
+
+ arrayTypeFormat(rule, value, message) {
+ if (!Array.isArray(value)) {
+ return formatMessage(rule, rule.errorMessage || message.typeError);
+ }
+
+ for (let i = 0; i < value.length; i++) {
+ const element = value[i];
+ let formatResult = this.format(rule, element, message)
+ if (formatResult !== null) {
+ return formatResult
+ }
+ }
+
+ return null
+ }
+}
+
+class SchemaValidator extends RuleValidator {
+
+ constructor(schema, options) {
+ super(SchemaValidator.message);
+
+ this._schema = schema
+ this._options = options || null
+ }
+
+ updateSchema(schema) {
+ this._schema = schema
+ }
+
+ async validate(data, allData) {
+ let result = this._checkFieldInSchema(data)
+ if (!result) {
+ result = await this.invokeValidate(data, false, allData)
+ }
+ return result.length ? result[0] : null
+ }
+
+ async validateAll(data, allData) {
+ let result = this._checkFieldInSchema(data)
+ if (!result) {
+ result = await this.invokeValidate(data, true, allData)
+ }
+ return result
+ }
+
+ async validateUpdate(data, allData) {
+ let result = this._checkFieldInSchema(data)
+ if (!result) {
+ result = await this.invokeValidateUpdate(data, false, allData)
+ }
+ return result.length ? result[0] : null
+ }
+
+ async invokeValidate(data, all, allData) {
+ let result = []
+ let schema = this._schema
+ for (let key in schema) {
+ let value = schema[key]
+ let errorMessage = await this.validateRule(key, value, data[key], data, allData)
+ if (errorMessage != null) {
+ result.push({
+ key,
+ errorMessage
+ })
+ if (!all) break
+ }
+ }
+ return result
+ }
+
+ async invokeValidateUpdate(data, all, allData) {
+ let result = []
+ for (let key in data) {
+ let errorMessage = await this.validateRule(key, this._schema[key], data[key], data, allData)
+ if (errorMessage != null) {
+ result.push({
+ key,
+ errorMessage
+ })
+ if (!all) break
+ }
+ }
+ return result
+ }
+
+ _checkFieldInSchema(data) {
+ var keys = Object.keys(data)
+ var keys2 = Object.keys(this._schema)
+ if (new Set(keys.concat(keys2)).size === keys2.length) {
+ return ''
+ }
+
+ var noExistFields = keys.filter((key) => {
+ return keys2.indexOf(key) < 0;
+ })
+ var errorMessage = formatMessage({
+ field: JSON.stringify(noExistFields)
+ }, SchemaValidator.message.TAG + SchemaValidator.message['defaultInvalid'])
+ return [{
+ key: 'invalid',
+ errorMessage
+ }]
+ }
+}
+
+function Message() {
+ return {
+ TAG: "",
+ default: '验证错误',
+ defaultInvalid: '提交的字段{field}在数据库中并不存在',
+ validateFunction: '验证无效',
+ required: '{label}必填',
+ 'enum': '{label}超出范围',
+ timestamp: '{label}格式无效',
+ whitespace: '{label}不能为空',
+ typeError: '{label}类型无效',
+ date: {
+ format: '{label}日期{value}格式无效',
+ parse: '{label}日期无法解析,{value}无效',
+ invalid: '{label}日期{value}无效'
+ },
+ length: {
+ minLength: '{label}长度不能少于{minLength}',
+ maxLength: '{label}长度不能超过{maxLength}',
+ range: '{label}必须介于{minLength}和{maxLength}之间'
+ },
+ number: {
+ minimum: '{label}不能小于{minimum}',
+ maximum: '{label}不能大于{maximum}',
+ exclusiveMinimum: '{label}不能小于等于{minimum}',
+ exclusiveMaximum: '{label}不能大于等于{maximum}',
+ range: '{label}必须介于{minimum}and{maximum}之间'
+ },
+ pattern: {
+ mismatch: '{label}格式不匹配'
+ }
+ };
+}
+
+
+SchemaValidator.message = new Message();
+
+export default SchemaValidator
diff --git a/uni_modules/uni-forms/package.json b/uni_modules/uni-forms/package.json
new file mode 100644
index 0000000..e69d39b
--- /dev/null
+++ b/uni_modules/uni-forms/package.json
@@ -0,0 +1,91 @@
+{
+ "id": "uni-forms",
+ "displayName": "uni-forms 表单",
+ "version": "1.4.6",
+ "description": "由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据",
+ "keywords": [
+ "uni-ui",
+ "表单",
+ "校验",
+ "表单校验",
+ "表单验证"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-icons"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-forms/readme.md b/uni_modules/uni-forms/readme.md
new file mode 100644
index 0000000..63d5a04
--- /dev/null
+++ b/uni_modules/uni-forms/readme.md
@@ -0,0 +1,23 @@
+
+
+## Forms 表单
+
+> **组件名:uni-forms**
+> 代码块: `uForms`、`uni-forms-item`
+> 关联组件:`uni-forms-item`、`uni-easyinput`、`uni-data-checkbox`、`uni-group`。
+
+
+uni-app的内置组件已经有了 `