河南省青年企业家协会(HeNan Young
+ Entrepreneurs’Association),简称为省青企协,是全省性的青年企业家的群众组织,是共青团联系青年企业家的桥梁和纽带,是具有独立法人资格的非营利性社会团体,是中国青年企业家协会、河南省青年联合会、河南省企业联合会(河南省企业家协会)的团体会员。
+
河南省青年企业家协会(HeNan Young
+ Entrepreneurs’Association),简称为省青企协,是全省性的青年企业家的群众组织,是共青团联系青年企业家的桥梁和纽带,是具有独立法人资格的非营利性社会团体,是中国青年企业家协会、河南省青年联合会、河南省企业联合会(河南省企业家协会)的团体会员。
+
+
河南省青年企业家协会(HeNan Young
+ Entrepreneurs’Association),简称为省青企协,是全省性的青年企业家的群众组织,是共青团联系青年企业家的桥梁和纽带,是具有独立法人资格的非营利性社会团体,是中国青年企业家协会、河南省青年联合会、河南省企业联合会(河南省企业家协会)的团体会员。
+
+
河南省青年企业家协会(HeNan Young
+ Entrepreneurs’Association),简称为省青企协,是全省性的青年企业家的群众组织,是共青团联系青年企业家的桥梁和纽带,是具有独立法人资格的非营利性社会团体,是中国青年企业家协会、河南省青年联合会、河南省企业联合会(河南省企业家协会)的团体会员。
+
河南省青年企业家协会(HeNan Young
+ Entrepreneurs’Association),简称为省青企协,是全省性的青年企业家的群众组织,是共青团联系青年企业家的桥梁和纽带,是具有独立法人资格的非营利性社会团体,是中国青年企业家协会、河南省青年联合会、河南省企业联合会(河南省企业家协会)的团体会员。
+
+
河南省青年企业家协会(HeNan Young
+ Entrepreneurs’Association),简称为省青企协,是全省性的青年企业家的群众组织,是共青团联系青年企业家的桥梁和纽带,是具有独立法人资格的非营利性社会团体,是中国青年企业家协会、河南省青年联合会、河南省企业联合会(河南省企业家协会)的团体会员。
+
+
河南省青年企业家协会(HeNan Young
+ Entrepreneurs’Association),简称为省青企协,是全省性的青年企业家的群众组织,是共青团联系青年企业家的桥梁和纽带,是具有独立法人资格的非营利性社会团体,是中国青年企业家协会、河南省青年联合会、河南省企业联合会(河南省企业家协会)的团体会员。
+
河南省青年企业家协会(HeNan Young
+ Entrepreneurs’Association),简称为省青企协,是全省性的青年企业家的群众组织,是共青团联系青年企业家的桥梁和纽带,是具有独立法人资格的非营利性社会团体,是中国青年企业家协会、河南省青年联合会、河南省企业联合会(河南省企业家协会)的团体会员。
+
河南省青年企业家协会(HeNan Young
+ Entrepreneurs’Association),简称为省青企协,是全省性的青年企业家的群众组织,是共青团联系青年企业家的桥梁和纽带,是具有独立法人资格的非营利性社会团体,是中国青年企业家协会、河南省青年联合会、河南省企业联合会(河南省企业家协会)的团体会员。
+
+
+
+
+
+
+
+
+
+
+ 公司/产品介绍
+
+ 联系TA
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/01.png b/static/01.png
new file mode 100644
index 0000000..035eff4
Binary files /dev/null and b/static/01.png differ
diff --git a/static/01_1.png b/static/01_1.png
new file mode 100644
index 0000000..82156b2
Binary files /dev/null and b/static/01_1.png differ
diff --git a/static/02.png b/static/02.png
new file mode 100644
index 0000000..e207f9f
Binary files /dev/null and b/static/02.png differ
diff --git a/static/02_2.png b/static/02_2.png
new file mode 100644
index 0000000..d613624
Binary files /dev/null and b/static/02_2.png differ
diff --git a/static/03.png b/static/03.png
new file mode 100644
index 0000000..9393cb5
Binary files /dev/null and b/static/03.png differ
diff --git a/static/03_3.png b/static/03_3.png
new file mode 100644
index 0000000..e8987b0
Binary files /dev/null and b/static/03_3.png differ
diff --git a/static/04.png b/static/04.png
new file mode 100644
index 0000000..f1147e3
Binary files /dev/null and b/static/04.png differ
diff --git a/static/04_4.png b/static/04_4.png
new file mode 100644
index 0000000..729985d
Binary files /dev/null and b/static/04_4.png differ
diff --git a/static/05.png b/static/05.png
new file mode 100644
index 0000000..40c3aee
Binary files /dev/null and b/static/05.png differ
diff --git a/static/123.png b/static/123.png
new file mode 100644
index 0000000..08ce5c7
Binary files /dev/null and b/static/123.png differ
diff --git a/static/b1.png b/static/b1.png
new file mode 100644
index 0000000..ea9c6b5
Binary files /dev/null and b/static/b1.png differ
diff --git a/static/banner.jpg b/static/banner.jpg
new file mode 100644
index 0000000..ce6fa08
Binary files /dev/null and b/static/banner.jpg differ
diff --git a/static/banner1.jpg b/static/banner1.jpg
new file mode 100644
index 0000000..6f0d228
Binary files /dev/null and b/static/banner1.jpg differ
diff --git a/static/c1.jpg b/static/c1.jpg
new file mode 100644
index 0000000..5254169
Binary files /dev/null and b/static/c1.jpg differ
diff --git a/static/c1.png b/static/c1.png
new file mode 100644
index 0000000..2fdd620
Binary files /dev/null and b/static/c1.png differ
diff --git a/static/c1455.png b/static/c1455.png
new file mode 100644
index 0000000..a40e24c
Binary files /dev/null and b/static/c1455.png differ
diff --git a/static/c2.png b/static/c2.png
new file mode 100644
index 0000000..af3700d
Binary files /dev/null and b/static/c2.png differ
diff --git a/static/c3.png b/static/c3.png
new file mode 100644
index 0000000..e19103f
Binary files /dev/null and b/static/c3.png differ
diff --git a/static/css/components/demo_page_common.scss b/static/css/components/demo_page_common.scss
new file mode 100644
index 0000000..f40b136
--- /dev/null
+++ b/static/css/components/demo_page_common.scss
@@ -0,0 +1,193 @@
+/* 顶部 start */
+.header {
+ padding: 80rpx 60rpx 40rpx 60rpx;
+
+ .title {
+ font-size: 36rpx;
+ color: $tn-font-color;
+ font-weight: bold;
+ }
+
+ .sub-title {
+ font-size: 28rpx;
+ color: $tn-content-color;
+ padding-top: 18rpx;
+ }
+
+ .tips-title {
+ font-size: 24rpx;
+ color: $tn-font-sub-color;
+ padding-top: 5rpx;
+ }
+}
+/* 顶部 end */
+
+/* 展示内容容器 start */
+.show-content-container {
+
+ /* 标题容器 start */
+ .title-container {
+ display: flex;
+ position: relative;
+ align-items: center;
+ justify-content: space-between;
+ min-height: 100rpx;
+
+ // 标题样式
+ .title {
+ height: 100%;
+ max-width: 100%;
+ margin: 0 20rpx;
+ font-size: 30rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ // 标题前面小点
+ &:before {
+ content: " ";
+ background-color: $tn-main-color;
+ width: 15rpx;
+ height: 15rpx;
+ border-radius: 10rpx;
+ margin-right: 18rpx;
+ }
+ }
+ }
+ /* 标题容器 end */
+
+ /* 内容 start */
+ .content {
+ padding: 20rpx;
+ }
+ /* 内容 end */
+
+}
+/* 展示内容容器 end */
+
+/* 内容容器 start */
+.demo-content-container {
+ border: 1rpx dashed $tn-main-color;
+ margin: 20rpx;
+ margin-top: 0rpx;
+
+ position: fixed;
+ width: 95%;
+ z-index: 10;
+
+ transition: all 0.15s ease-out;
+
+ &.top {
+ width: 100%;
+ margin: 0;
+ }
+
+ &.no-fixed {
+ position: relative !important;
+ }
+
+ /* 标题容器 start */
+ .title-container {
+ display: flex;
+ position: relative;
+ align-items: center;
+ justify-content: center;
+ min-height: 100rpx;
+
+ // 标题样式
+ .title {
+ height: 100%;
+ max-width: 100%;
+ margin: 0 30rpx;
+ font-size: 30rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+ /* 标题容器 end */
+
+ /* 内容 start */
+ .content {
+ padding: 30rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ /* 内容 end */
+
+}
+/* 内容容器 end */
+
+/* 可选项内容容器 start */
+.demo-section-container {
+ margin: 20rpx;
+ height: 100%;
+
+ /* 标题容器 start */
+ .title-container {
+ display: flex;
+ position: relative;
+ align-items: center;
+ justify-content: center;
+ min-height: 100rpx;
+ margin-bottom: 10rpx;
+
+ // 标题样式
+ .title {
+ height: 100%;
+ max-width: 100%;
+ margin: 0 30rpx;
+ font-size: 30rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ &::after {
+ content: " ";
+ box-sizing: border-box;
+ width: 90%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 50%;
+ transform: translateX(-50%);
+ border-bottom: 1rpx solid $tn-border-solid-color;
+ }
+ }
+ /* 标题容器 end */
+
+ /* 参数内容 start*/
+ .content {
+ padding: 0 20rpx 10rpx 20rpx;
+
+ // 标题样式
+ .title {
+ padding-left: 20rpx;
+ height: 100%;
+ position: relative;
+
+ &::before {
+ content: " ";
+ position: absolute;
+ top: 50%;
+ left: 0;
+ width: 4rpx;
+ height: 90%;
+ background-color: $tn-main-color;
+ border-radius: 6rpx;
+ transform: translateY(-50%);
+ }
+ }
+
+ // 参数样式
+ .section {
+ margin-top: 15rpx;
+ margin-bottom: 20rpx;
+ }
+ }
+ /* 参数内容 end*/
+
+}
+/* 可选项内容容器 end */
\ No newline at end of file
diff --git a/static/css/my.scss b/static/css/my.scss
new file mode 100644
index 0000000..c5281d1
--- /dev/null
+++ b/static/css/my.scss
@@ -0,0 +1,240 @@
+.pages-a {
+ max-height: 100vh;
+}
+
+/* 自定义导航栏内容 start */
+.custom-nav {
+ height: 100%;
+
+ &__back {
+ margin: auto 5rpx;
+ font-size: 50rpx;
+ margin-right: 10rpx;
+ margin-left: 30rpx;
+ flex-basis: 5%;
+ }
+}
+
+/* 底部安全边距 start*/
+.tn-tabbar-height {
+ min-height: 120rpx;
+ height: calc(140rpx + env(safe-area-inset-bottom) / 2);
+ height: calc(140rpx + constant(safe-area-inset-bottom));
+}
+
+/* 图标容器5 start */
+.icon5 {
+ &__item {
+ // width: 30%;
+ background-color: #FFFFFF;
+ border-radius: 10rpx;
+ padding: 0rpx;
+ margin: 0rpx;
+ transform: scale(1);
+ transition: transform 0.3s linear;
+ transform-origin: center center;
+
+ &--icon {
+ width: 96rpx;
+ height: 96rpx;
+ border-radius: 50%;
+ margin-bottom: 18rpx;
+ position: relative;
+ z-index: 1;
+ }
+ }
+}
+
+/* 轮播视觉差 start */
+.card-swiper {
+ height: 450rpx;
+}
+
+.card-swiper swiper-item {
+ width: 750rpx;
+ left: 0rpx;
+ box-sizing: border-box;
+ padding: 40rpx 30rpx 30rpx 30rpx;
+ overflow: initial;
+}
+
+.card-swiper swiper-item .swiper-item {
+ width: 100%;
+ display: block;
+ height: 100%;
+ border-radius: 15rpx;
+ transform: scale(1);
+ transition: all 0.2s ease-in 0s;
+ will-change: transform;
+ // overflow: hidden;
+}
+
+.card-swiper swiper-item.cur .swiper-item {
+ transform: none;
+ transition: all 0.2s ease-in 0s;
+ will-change: transform;
+}
+
+.card-swiper swiper-item .swiper-item-text {
+ margin-top: -220rpx;
+ text-align: center;
+ width: 100%;
+ display: block;
+ border-radius: 10rpx;
+ transform: translate(100rpx, 0rpx) scale(0.9, 0.9);
+ transition: all 0.6s ease 0s;
+ will-change: transform;
+ overflow: hidden;
+}
+
+.card-swiper swiper-item.cur .swiper-item-text {
+ margin-top: -220rpx;
+ width: 100%;
+ transform: translate(0rpx, 0rpx) scale(0.9, 0.9);
+ transition: all 0.6s ease 0s;
+ will-change: transform;
+}
+
+.image-banner {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.image-banner image {
+ width: 100%;
+ height: 100%;
+}
+
+/* 轮播指示点 start*/
+.indication {
+ z-index: 9999;
+ width: 100%;
+ height: 36rpx;
+ position: absolute;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+}
+
+.spot {
+ background-color: #FFFFFF;
+ opacity: 0.6;
+ width: 10rpx;
+ height: 10rpx;
+ border-radius: 20rpx;
+ top: -70rpx;
+ margin: 0 8rpx !important;
+ position: relative;
+}
+
+.spot.active {
+ opacity: 1;
+ width: 30rpx;
+ background-color: #FFFFFF;
+}
+
+
+/* 胶囊banner*/
+.image-capsule {
+ padding: 100rpx 0rpx;
+ font-size: 40rpx;
+ font-weight: 300;
+ position: relative;
+}
+
+.image-piccapsule {
+ background-size: cover;
+ background-repeat: no-repeat;
+ // background-attachment:fixed;
+ background-position: top;
+ border-radius: 20rpx 20rpx 0 0;
+}
+
+/* 用户头像 start */
+.logo-image {
+ width: 40rpx;
+ height: 40rpx;
+ position: relative;
+}
+
+.logo-pic {
+ background-size: cover;
+ background-repeat: no-repeat;
+ // background-attachment:fixed;
+ background-position: top;
+ border: 1rpx solid rgba(255, 255, 255, 0.05);
+ // box-shadow: 0rpx 0rpx 80rpx 0rpx rgba(0, 0, 0, 0.15);
+ border-radius: 50%;
+ overflow: hidden;
+ // background-color: #FFFFFF;
+}
+
+/* 瀑布流*/
+.wallpaper__item {
+ background-color: #FFFFFF;
+ overflow: hidden;
+ margin: 0 10rpx;
+ margin-bottom: 40rpx;
+ // box-shadow: 0rpx 0rpx 30rpx 0rpx rgba(0, 0, 0, 0.07);
+
+ .item {
+
+ /* 图片 start */
+ &__image {
+ width: 100%;
+ height: auto;
+ background-color: #FFFFFF;
+ border: 1rpx solid #F8F7F8;
+ border-radius: 10rpx;
+ overflow: hidden;
+ }
+
+ /* 图片 end */
+
+ /* 内容 start */
+ &__data {
+ padding: 14rpx 0rpx;
+ }
+
+ /* 标题 start */
+ &__title-container {
+ text-align: justify;
+ line-height: 38rpx;
+ vertical-align: middle;
+ }
+
+ &__title {
+ font-size: 30rpx;
+ }
+
+ /* 标题 end */
+
+ /* 标签 start */
+ &__tags-container {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ align-items: center;
+ justify-content: flex-start;
+ }
+
+ &__tag {
+ margin: 10rpx;
+ color: #7C8191;
+ background-color: #F3F2F7;
+ padding: 4rpx 14rpx 6rpx;
+ border-radius: 10rpx;
+ font-size: 20rpx;
+
+ &:first-child {
+ margin-left: 0rpx !important;
+ }
+ }
+
+ /* 标签 end */
+
+ /* 内容 end */
+ }
+}
\ No newline at end of file
diff --git a/static/css/templatePage/custom_nav_bar.scss b/static/css/templatePage/custom_nav_bar.scss
new file mode 100644
index 0000000..7cc0960
--- /dev/null
+++ b/static/css/templatePage/custom_nav_bar.scss
@@ -0,0 +1,38 @@
+.tn-custom-nav-bar__back {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ display: flex;
+ justify-content: space-evenly;
+ align-items: center;
+ box-sizing: border-box;
+ background-color: rgba(0, 0, 0, 0.15);
+ border-radius: 1000rpx;
+ border: 1rpx solid rgba(255, 255, 255, 0.5);
+ color: #FFFFFF;
+ font-size: 18px;
+
+ .icon {
+ display: block;
+ flex: 1;
+ margin: auto;
+ text-align: center;
+ }
+
+ &:before {
+ content: " ";
+ width: 1rpx;
+ 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.7;
+ background-color: #FFFFFF;
+ }
+}
\ No newline at end of file
diff --git a/static/favicon.ico b/static/favicon.ico
new file mode 100644
index 0000000..7bf9037
Binary files /dev/null and b/static/favicon.ico differ
diff --git a/static/hd1.jpg b/static/hd1.jpg
new file mode 100644
index 0000000..dda511f
Binary files /dev/null and b/static/hd1.jpg differ
diff --git a/static/ico1.png b/static/ico1.png
new file mode 100644
index 0000000..be9f34a
Binary files /dev/null and b/static/ico1.png differ
diff --git a/static/ico10.png b/static/ico10.png
new file mode 100644
index 0000000..377b9db
Binary files /dev/null and b/static/ico10.png differ
diff --git a/static/ico11.png b/static/ico11.png
new file mode 100644
index 0000000..e050613
Binary files /dev/null and b/static/ico11.png differ
diff --git a/static/ico12.png b/static/ico12.png
new file mode 100644
index 0000000..50c1750
Binary files /dev/null and b/static/ico12.png differ
diff --git a/static/ico13.png b/static/ico13.png
new file mode 100644
index 0000000..5b6e737
Binary files /dev/null and b/static/ico13.png differ
diff --git a/static/ico2.png b/static/ico2.png
new file mode 100644
index 0000000..b140322
Binary files /dev/null and b/static/ico2.png differ
diff --git a/static/ico3.png b/static/ico3.png
new file mode 100644
index 0000000..c31de61
Binary files /dev/null and b/static/ico3.png differ
diff --git a/static/ico4.png b/static/ico4.png
new file mode 100644
index 0000000..09c2819
Binary files /dev/null and b/static/ico4.png differ
diff --git a/static/ico5.png b/static/ico5.png
new file mode 100644
index 0000000..dd89264
Binary files /dev/null and b/static/ico5.png differ
diff --git a/static/ico6.png b/static/ico6.png
new file mode 100644
index 0000000..67e6912
Binary files /dev/null and b/static/ico6.png differ
diff --git a/static/ico7.png b/static/ico7.png
new file mode 100644
index 0000000..4eb1717
Binary files /dev/null and b/static/ico7.png differ
diff --git a/static/ico8.png b/static/ico8.png
new file mode 100644
index 0000000..ee91af4
Binary files /dev/null and b/static/ico8.png differ
diff --git a/static/ico9.png b/static/ico9.png
new file mode 100644
index 0000000..233318c
Binary files /dev/null and b/static/ico9.png differ
diff --git a/static/s1.jpg b/static/s1.jpg
new file mode 100644
index 0000000..150d5d4
Binary files /dev/null and b/static/s1.jpg differ
diff --git a/static/t1.png b/static/t1.png
new file mode 100644
index 0000000..d2f328d
Binary files /dev/null and b/static/t1.png differ
diff --git a/static/t2.png b/static/t2.png
new file mode 100644
index 0000000..2948144
Binary files /dev/null and b/static/t2.png differ
diff --git a/static/t7.jpg b/static/t7.jpg
new file mode 100644
index 0000000..34e291b
Binary files /dev/null and b/static/t7.jpg differ
diff --git a/static/u1.jpg b/static/u1.jpg
new file mode 100644
index 0000000..68dd024
Binary files /dev/null and b/static/u1.jpg differ
diff --git a/static/u2.jpg b/static/u2.jpg
new file mode 100644
index 0000000..082b230
Binary files /dev/null and b/static/u2.jpg differ
diff --git a/store/$tn.mixin.js b/store/$tn.mixin.js
new file mode 100644
index 0000000..ab7689b
--- /dev/null
+++ b/store/$tn.mixin.js
@@ -0,0 +1,28 @@
+import { mapState } from 'vuex'
+import store from '@/store'
+
+// 尝试将用户在根目录中的store/index.js的vuex的state变量加载到全局变量中
+let $tStoreKey = []
+try {
+ $tStoreKey = store.state ? Object.keys(store.state) : []
+} catch(e) {
+
+}
+
+module.exports = {
+ beforeCreate() {
+ // 将vuex方法挂在在$t中
+ // 使用方法:
+ // 修改vuex的state中的user.name变量为图鸟小菜 => this.$tn.vuex('user.name', '图鸟小菜')
+ // 修改vuexde state中的version变量为1.0.1 => this.$tn.vuex('version', 1.0.1)
+ this.$tn.vuex = (name, value) => {
+ this.$store.commit('$tStore', {
+ name, value
+ })
+ }
+ },
+ computed: {
+ // 将vuex的state中的变量结构到全局混入mixin中
+ ...mapState($tStoreKey)
+ }
+}
\ No newline at end of file
diff --git a/store/index.js b/store/index.js
new file mode 100644
index 0000000..828212c
--- /dev/null
+++ b/store/index.js
@@ -0,0 +1,75 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+
+Vue.use(Vuex)
+
+let lifeData = {}
+
+// 尝试获取本地是否存在lifeData变量,第一次启动时不存在
+try {
+ lifeData = uni.getStorageSync('lifeData')
+} catch(e) {
+
+}
+
+// 标记需要永久存储的变量,在每次启动时取出,在state中的变量名
+let saveStateKeys = ['vuex_user']
+
+// 保存变量到本地存储
+const saveLifeData = function(key, value) {
+ // 判断变量是否在存储数组中
+ if (saveStateKeys.indexOf(key) != -1) {
+ // 获取本地存储的lifeData对象,将变量添加到对象中
+ let tmpLifeData = uni.getStorageSync('lifeData')
+ // 第一次启动时不存在,则放一个空对象
+ tmpLifeData = tmpLifeData ? tmpLifeData : {},
+ tmpLifeData[key] = value
+ // 将变量再次放回本地存储中
+ uni.setStorageSync('lifeData', tmpLifeData)
+ }
+}
+
+const store = new Vuex.Store({
+ state: {
+ // 如果上面从本地获取的lifeData对象下有对应的属性,就赋值给state中对应的变量
+ // 加上vuex_前缀,是防止变量名冲突,也让人一目了然
+ vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {name: '图鸟'},
+
+ // 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式
+ // app版本
+ vuex_version: "1.0.0",
+ // 是否使用自定义导航栏
+ vuex_custom_nav_bar: true,
+ // 状态栏高度
+ vuex_status_bar_height: 0,
+ // 自定义导航栏的高度
+ vuex_custom_bar_height: 0
+ },
+ mutations: {
+ $tStore(state, payload) {
+ // 判断是否多层调用,state中为对象存在的情况,例如user.info.score = 1
+ let nameArr = payload.name.split('.')
+ let saveKey = ''
+ let len = nameArr.length
+ if (len >= 2) {
+ let obj = state[nameArr[0]]
+ for (let i= 1; i < len - 1; i++) {
+ obj = obj[nameArr[i]]
+ }
+ obj[nameArr[len - 1]] = payload.value
+ saveKey = nameArr[0]
+ } else {
+ // 单层级变量
+ state[payload.name] = payload.value
+ saveKey = payload.name
+ }
+
+ // 保存变量到本地中
+ saveLifeData(saveKey, state[saveKey])
+ }
+ },
+ actions: {
+ }
+})
+
+export default store
\ No newline at end of file
diff --git a/tuniao-ui/README.md b/tuniao-ui/README.md
new file mode 100644
index 0000000..ccb9fcb
--- /dev/null
+++ b/tuniao-ui/README.md
@@ -0,0 +1,4 @@
+TuniaoUi for uniApp v1.0.0 | by 图鸟 2021-09-01
+仅供开发,如作它用所承受的法律责任一概与作者无关
+
+*使用TuniaoUi开发扩展与插件时,请注明基于tuniao字眼
\ No newline at end of file
diff --git a/tuniao-ui/components/tn-action-sheet/tn-action-sheet.vue b/tuniao-ui/components/tn-action-sheet/tn-action-sheet.vue
new file mode 100644
index 0000000..85ffe40
--- /dev/null
+++ b/tuniao-ui/components/tn-action-sheet/tn-action-sheet.vue
@@ -0,0 +1,206 @@
+
+
+
+
+
+ {{tips.text}}
+
+
+
+
+ {{item.text}}
+ {{item.subText}}
+
+
+
+
+
+
+ {{cancelText}}
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-avatar-group/tn-avatar-group.vue b/tuniao-ui/components/tn-avatar-group/tn-avatar-group.vue
new file mode 100644
index 0000000..4a7f11c
--- /dev/null
+++ b/tuniao-ui/components/tn-avatar-group/tn-avatar-group.vue
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-avatar/tn-avatar.vue b/tuniao-ui/components/tn-avatar/tn-avatar.vue
new file mode 100644
index 0000000..96e7100
--- /dev/null
+++ b/tuniao-ui/components/tn-avatar/tn-avatar.vue
@@ -0,0 +1,298 @@
+
+
+
+
+ {{ text }}
+
+
+
+
+
+
+
+
+
+ {{ badgeText }}
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-badge/tn-badge.vue b/tuniao-ui/components/tn-badge/tn-badge.vue
new file mode 100644
index 0000000..d92f5f6
--- /dev/null
+++ b/tuniao-ui/components/tn-badge/tn-badge.vue
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-button/tn-button.vue b/tuniao-ui/components/tn-button/tn-button.vue
new file mode 100644
index 0000000..793f343
--- /dev/null
+++ b/tuniao-ui/components/tn-button/tn-button.vue
@@ -0,0 +1,348 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tuniao-ui/components/tn-calendar/tn-calendar.vue b/tuniao-ui/components/tn-calendar/tn-calendar.vue
new file mode 100644
index 0000000..289b67b
--- /dev/null
+++ b/tuniao-ui/components/tn-calendar/tn-calendar.vue
@@ -0,0 +1,707 @@
+
+
+
+
+
+
+ {{ toolTips }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ dateTitle }}
+
+
+
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.day }}
+
+
+ {{ item.bottomInfo }}
+
+
+
+ {{ month }}
+
+
+
+
+
+ {{ mode === 'date' ? activeDate : startDate }}
+ 至{{ endDate }}
+
+
+ 确定
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-car-keyboard/tn-car-keyboard.vue b/tuniao-ui/components/tn-car-keyboard/tn-car-keyboard.vue
new file mode 100644
index 0000000..2e4c6cc
--- /dev/null
+++ b/tuniao-ui/components/tn-car-keyboard/tn-car-keyboard.vue
@@ -0,0 +1,320 @@
+
+ {}">
+
+
+
+
+ {{ sub_data }}
+
+
+
+
+
+
+
+
+ 中
+ /
+ 英
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-cascade-selection/tn-cascade-selection.vue b/tuniao-ui/components/tn-cascade-selection/tn-cascade-selection.vue
new file mode 100644
index 0000000..02ac406
--- /dev/null
+++ b/tuniao-ui/components/tn-cascade-selection/tn-cascade-selection.vue
@@ -0,0 +1,654 @@
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ subItem.text }}
+
+
+ {{ subItem.subText }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-checkbox-group/tn-checkbox-group.vue b/tuniao-ui/components/tn-checkbox-group/tn-checkbox-group.vue
new file mode 100644
index 0000000..5472ad5
--- /dev/null
+++ b/tuniao-ui/components/tn-checkbox-group/tn-checkbox-group.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-checkbox/tn-checkbox.vue b/tuniao-ui/components/tn-checkbox/tn-checkbox.vue
new file mode 100644
index 0000000..0ad3a3f
--- /dev/null
+++ b/tuniao-ui/components/tn-checkbox/tn-checkbox.vue
@@ -0,0 +1,328 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-circle-progress/tn-circle-progress.vue b/tuniao-ui/components/tn-circle-progress/tn-circle-progress.vue
new file mode 100644
index 0000000..31c1a38
--- /dev/null
+++ b/tuniao-ui/components/tn-circle-progress/tn-circle-progress.vue
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
+ {{ percent + '%' }}
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-collapse-item/tn-collapse-item.vue b/tuniao-ui/components/tn-collapse-item/tn-collapse-item.vue
new file mode 100644
index 0000000..998879f
--- /dev/null
+++ b/tuniao-ui/components/tn-collapse-item/tn-collapse-item.vue
@@ -0,0 +1,236 @@
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-collapse/tn-collapse.vue b/tuniao-ui/components/tn-collapse/tn-collapse.vue
new file mode 100644
index 0000000..00ec9a2
--- /dev/null
+++ b/tuniao-ui/components/tn-collapse/tn-collapse.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-color-icon/tn-color-icon.vue b/tuniao-ui/components/tn-color-icon/tn-color-icon.vue
new file mode 100644
index 0000000..c7ad83b
--- /dev/null
+++ b/tuniao-ui/components/tn-color-icon/tn-color-icon.vue
@@ -0,0 +1,318 @@
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-column-notice/tn-column-notice.vue b/tuniao-ui/components/tn-column-notice/tn-column-notice.vue
new file mode 100644
index 0000000..d5d795b
--- /dev/null
+++ b/tuniao-ui/components/tn-column-notice/tn-column-notice.vue
@@ -0,0 +1,251 @@
+
+
+
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-count-down/tn-count-down.vue b/tuniao-ui/components/tn-count-down/tn-count-down.vue
new file mode 100644
index 0000000..cd31e69
--- /dev/null
+++ b/tuniao-ui/components/tn-count-down/tn-count-down.vue
@@ -0,0 +1,314 @@
+
+
+
+
+ {{ d }}
+
+
+
+ {{ separator === 'en' ? ':' : '天'}}
+
+
+
+
+ {{ h }}
+
+
+
+ {{ separator === 'en' ? ':' : '时'}}
+
+
+
+
+ {{ m }}
+
+
+
+ {{ separator === 'en' ? ':' : '分'}}
+
+
+
+
+ {{ s }}
+
+
+
+ 秒
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-count-scroll/tn-count-scroll.vue b/tuniao-ui/components/tn-count-scroll/tn-count-scroll.vue
new file mode 100644
index 0000000..b9c2eef
--- /dev/null
+++ b/tuniao-ui/components/tn-count-scroll/tn-count-scroll.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
+ {{ value }}
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-count-to/tn-count-to.vue b/tuniao-ui/components/tn-count-to/tn-count-to.vue
new file mode 100644
index 0000000..c3d8854
--- /dev/null
+++ b/tuniao-ui/components/tn-count-to/tn-count-to.vue
@@ -0,0 +1,231 @@
+
+
+ {{ displayValue }}
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-cropper/index.wxs b/tuniao-ui/components/tn-cropper/index.wxs
new file mode 100644
index 0000000..0181a93
--- /dev/null
+++ b/tuniao-ui/components/tn-cropper/index.wxs
@@ -0,0 +1,332 @@
+var cropper = {
+ // 画布x轴起点
+ cutX: 0,
+ // 画布y轴起点
+ cutY: 0,
+ // 触摸点信息(手指与图片中心点的相对位置)
+ touchRelactive: [{
+ x: 0,
+ y: 0
+ }],
+ // 双指触摸时斜边的长度
+ hypotenuseLength:0,
+ // 是否结束触摸
+ touchEndFlag: false,
+ // 画布宽高
+ canvasWidth: 0,
+ canvasHeight: 0,
+ // 图片宽高
+ imgWidth: 0,
+ imgHeight: 0,
+ // 图片缩放比例
+ scale: 1,
+ // 图片旋转角度
+ angle: 0,
+ // 图片上边距
+ imgTop: 0,
+ // 图片左边距
+ imgLeft: 0,
+ // 窗口宽高
+ windowWidth: 0,
+ windowHeight: 0,
+ init: true
+}
+
+function bool(str) {
+ return str === 'true' || str === true
+}
+
+function propChange(prop, oldProp, ownerInstance, instance) {
+ if (prop && prop !== 'null') {
+ var params = prop.split(',')
+ var type = +params[0]
+ var dataset = instance.getDataset()
+ if (cropper.init || type == 4) {
+ cropper.canvasWidth = +dataset.width
+ cropper.canvasHeight = +dataset.height
+ cropper.imgTop = +dataset.windowheight / 2
+ cropper.imgLeft = +dataset.windowwidth / 2
+ cropper.imgWidth = +dataset.imgwidth
+ cropper.imgHeight = +dataset.imgheight
+ cropper.windowHeight = +dataset.windowheight
+ cropper.windowWidth = +dataset.windowwidth
+ cropper.init = false
+ } else if (type == 2 || type == 3) {
+ cropper.imgWidth = +dataset.imgwidth
+ cropper.imgHeight = +dataset.imgheight
+ }
+ cropper.angle = +dataset.angle
+ if (type == 3) {
+ imgTransform(ownerInstance)
+ }
+ switch(type) {
+ case 1:
+ setCutCenter(ownerInstance)
+ // // 设置裁剪框大小
+ computeCutSize(ownerInstance)
+ // // 检查裁剪框是否在范围内
+ cutDetectionPosition(ownerInstance)
+ break
+ case 2:
+ setCutCenter(ownerInstance)
+ break
+ case 3:
+ imgMarginDetectionScale(ownerInstance)
+ break
+ case 4:
+ imageReset(ownerInstance)
+ break
+ case 5:
+ setCutCenter(ownerInstance)
+ break
+ default:
+ break
+ }
+ }
+}
+
+function touchStart(event, ownerInstance) {
+ var touch = event.touches || event.changedTouches
+ cropper.touchEndFlag = false
+ if (touch.length === 1) {
+ cropper.touchRelactive[0] = {
+ x: touch[0].pageX - cropper.imgLeft,
+ y: touch[0].pageY - cropper.imgTop
+ }
+ } else {
+ var width = Math.abs(touch[0].pageX - touch[1].pageX)
+ var height = Math.abs(touch[0].pageY - touch[1].pageY)
+ cropper.touchRelactive = [{
+ x: touch[0].pageX - cropper.imgLeft,
+ y: touch[0].pageY - cropper.imgTop
+ },{
+ x: touch[1].pageX - cropper.imgLeft,
+ y: touch[1].pageY - cropper.imgTop
+ }]
+ cropper.hypotenuseLength = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2))
+ }
+}
+
+function touchMove(event, ownerInstance) {
+ var touch = event.touches || event.changedTouches
+ if (cropper.touchEndFlag) return
+ moveDuring(ownerInstance)
+ if (event.touches.length === 1) {
+ var left = touch[0].pageX - cropper.touchRelactive[0].x,
+ top = touch[0].pageY - cropper.touchRelactive[0].y;
+ cropper.imgLeft = left
+ cropper.imgTop = top
+ imgTransform(ownerInstance)
+ imgMarginDetectionPosition(ownerInstance)
+ } else {
+ var dataset = event.instance.getDataset()
+ var minScale = +dataset.minscale
+ var maxScale = +dataset.maxscale
+ var width = Math.abs(touch[0].pageX - touch[1].pageX),
+ height = Math.abs(touch[0].pageY - touch[1].pageY),
+ hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)),
+ scale = cropper.scale * (hypotenuse / cropper.hypotenuseLength),
+ current_deg = 0;
+ scale = scale <= minScale ? minScale : scale
+ scale = scale >= maxScale ? maxScale : scale
+ cropper.scale = scale
+ imgMarginDetectionScale(ownerInstance, true)
+ var touchRelative = [{
+ x: touch[0].pageX - cropper.imgLeft,
+ y: touch[0].pageY - cropper.imgTop
+ }, {
+ x: touch[1].pageX - cropper.imgLeft,
+ y: touch[1].pageY - cropper.imgTop
+ }]
+ cropper.touchRelactive = touchRelative
+ cropper.hypotenuseLength = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2))
+ // 更新视图
+ cropper.angle = cropper.angle + current_deg
+ imgTransform(ownerInstance)
+ }
+}
+
+function touchEnd(event, ownerInstance) {
+ cropper.touchEndFlag = true
+ moveStop(ownerInstance)
+ updateData(ownerInstance)
+}
+
+function moveDuring(ownerInstance) {
+ if (!ownerInstance) return
+ ownerInstance.callMethod('moveDuring')
+}
+
+function moveStop(ownerInstance) {
+ if (!ownerInstance) return
+ ownerInstance.callMethod('moveStop')
+}
+
+function setCutCenter(ownerInstance) {
+ var cutX = (cropper.windowWidth - cropper.canvasWidth) * 0.5
+ var cutY = (cropper.windowHeight - cropper.canvasHeight) * 0.5
+
+ cropper.imgTop = cropper.imgTop - cropper.cutY + cutY
+ cropper.cutY = cutY
+ cropper.imgLeft = cropper.imgLeft - cropper.cutX + cutX
+ cropper.cutX = cutX
+ cutDetectionPosition(ownerInstance)
+ imgTransform(ownerInstance)
+ updateData(ownerInstance)
+}
+
+// 检测剪裁框位置是否在允许的范围内(屏幕内)
+function cutDetectionPosition(ownerInstance) {
+ var windowHeight = cropper.windowHeight,
+ windowWidth = cropper.windowWidth;
+
+ // 检测上边距是否在范围内
+ var cutDetectionPositionTop = function() {
+ if (cropper.cutY < 0) {
+ cropper.cutY = 0
+ }
+ if (cropper.cutY > windowHeight - cropper.canvasHeight) {
+ cropper.cutY = windowHeight - cropper.canvasHeight
+ }
+ }
+
+ // 检测左边距是否在范围内
+ var cutDetectionPositionLeft = function() {
+ if (cropper.cutX < 0) {
+ cropper.cutX = 0
+ }
+ if (cropper.cutX > windowWidth - cropper.canvasWidth) {
+ cropper.cutX = windowWidth - cropper.canvasWidth
+ }
+ }
+
+ // 裁剪框坐标处理(如果只写一个参数则另一个默认为0,都不写默认为居中)
+ if (cropper.cutX === null && cropper.cutY === null) {
+ var cutX = (windowWidth - cropper.canvasWidth) * 0.5,
+ cutY = (windowHeight - cropper.canvasHeight) * 0.5;
+ cropper.cutX = cutX
+ cropper.cutY = cutY
+ } else if (cropper.cutX !== null && cropper.cutX !== null) {
+ cutDetectionPositionTop()
+ cutDetectionPositionLeft()
+ } else if (cropper.cutX !== null && cropper.cutY === null) {
+ cutDetectionPositionLeft()
+ cropper.cutY = (windowHeight - cropper.canvasHeight) / 2
+ } else if (cropper.cutX === null && cropper.cutY !== null) {
+ cutDetectionPositionTop()
+ cropper.cutX = (windowWidth - cropper.canvasWidth) / 2
+ }
+}
+
+// 图片边缘检测-缩放
+function imgMarginDetectionScale(ownerInstance, delay) {
+ var scale = cropper.scale,
+ imgWidth = cropper.imgWidth,
+ imgHeight = cropper.imgHeight;
+ if ((cropper.angle / 90) % 2) {
+ imgWidth = cropper.imgHeight
+ imgHeight = cropper.imgWidth
+ }
+ if (imgWidth * scale < cropper.canvasWidth) {
+ scale = cropper.canvasWidth / imgWidth
+ }
+ if (imgHeight * scale < cropper.canvasHeight) {
+ scale = Math.max(scale, cropper.canvasHeight / imgHeight)
+ }
+ imgMarginDetectionPosition(ownerInstance, scale, delay)
+}
+
+// 图片边缘检测-位置
+function imgMarginDetectionPosition(ownerInstance, scale, delay) {
+ var left = cropper.imgLeft,
+ top = cropper.imgTop,
+ imgWidth = cropper.imgWidth,
+ imgHeight = cropper.imgHeight;
+ scale = scale || cropper.scale
+ if ((cropper.angle / 90) % 2) {
+ imgWidth = cropper.imgHeight
+ imgHeight = cropper.imgWidth
+ }
+
+ left = cropper.cutX + (imgWidth * scale) / 2 >= left ? left : cropper.cutX + (imgWidth * scale) / 2
+ left = cropper.cutX + cropper.canvasWidth - (imgWidth * scale) / 2 <= left ? left : cropper.cutX + cropper.canvasWidth - (imgWidth * scale) / 2
+ top = cropper.cutY + (imgHeight * scale) / 2 >= top ? top : cropper.cutY + (imgHeight * scale) / 2
+ top = cropper.cutY + cropper.canvasHeight - (imgHeight * scale) / 2 <= top ? top : cropper.cutY + cropper.canvasHeight - (imgHeight * scale) / 2
+
+ cropper.imgLeft = left
+ cropper.imgTop = top
+ cropper.scale = scale
+ if (!delay || delay === 'null') {
+ imgTransform(ownerInstance)
+ }
+}
+
+// 改变截取值大小
+function computeCutSize(ownerInstance) {
+ if (cropper.canvasWidth > cropper.windowWidth) {
+ cropper.canvasWidth = cropper.windowWidth
+ } else if (cropper.canvasWidth + cropper.cutX > cropper.windowWidth) {
+ cropper.cutX = cropper.windowWidth - cropper.cutX
+ }
+ if (cropper.canvasHeight > cropper.windowHeight) {
+ cropper.canvasHeight = cropper.windowHeight
+ } else if (cropper.canvasHeight + cropper.cutY > cropper.windowHeight) {
+ cropper.cutY = cropper.windowHeight - cropper.cutY
+ }
+}
+
+// 图片动画
+function imgTransform(ownerInstance) {
+ try {
+ var image = ownerInstance.selectComponent('.tn-cropper__image')
+ if (!image) return
+ var x = cropper.imgLeft - cropper.imgWidth / 2,
+ y = cropper.imgTop - cropper.imgHeight / 2;
+ image.setStyle({
+ 'transform': 'translate3d('+ x + 'px,' + y + 'px,0) scale(' + cropper.scale +') rotate(' + cropper.angle + 'deg)'
+ })
+ } catch(e) {
+
+ }
+}
+
+// 图片重置
+function imageReset(ownerInstance) {
+ cropper.scale = 1
+ cropper.angle = 0
+ imgTransform(ownerInstance)
+}
+
+// 高度变化
+function canvasHeight(ownerInstance) {
+ if (!ownerInstance) return
+ computeCutSize(ownerInstance)
+}
+
+// 宽度变化
+function canvasWidth(ownerInstance) {
+ if (!ownerInstance) return
+ computeCutSize(ownerInstance)
+}
+
+// 更新数据
+function updateData(ownerInstance) {
+ if (!ownerInstance) return
+ ownerInstance.callMethod('change', {
+ cutX: cropper.cutX,
+ cutY: cropper.cutY,
+ imgWidth: cropper.imgWidth,
+ imgHeight: cropper.imgHeight,
+ scale: cropper.scale,
+ angle: cropper.angle,
+ imgTop: cropper.imgTop,
+ imgLeft: cropper.imgLeft
+ })
+}
+
+module.exports = {
+ touchStart: touchStart,
+ touchMove: touchMove,
+ touchEnd: touchEnd,
+ propChange: propChange
+}
\ No newline at end of file
diff --git a/tuniao-ui/components/tn-cropper/tn-cropper.vue b/tuniao-ui/components/tn-cropper/tn-cropper.vue
new file mode 100644
index 0000000..6d22d6f
--- /dev/null
+++ b/tuniao-ui/components/tn-cropper/tn-cropper.vue
@@ -0,0 +1,574 @@
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+
+ 完成
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-custom-swiper-item/index.wxs b/tuniao-ui/components/tn-custom-swiper-item/index.wxs
new file mode 100644
index 0000000..a6c12b7
--- /dev/null
+++ b/tuniao-ui/components/tn-custom-swiper-item/index.wxs
@@ -0,0 +1,288 @@
+
+function setTimeout(instance, cb, time) {
+ if (time > 0) {
+ var s = getDate().getTime()
+ var fn = function () {
+ if (getDate().getTime() - s > time) {
+ cb && cb()
+ } else
+ instance.requestAnimationFrame(fn)
+ }
+ fn()
+ }
+ else
+ cb && cb()
+}
+
+// 判断触摸的移动方向
+function decideSwiperDirection(startTouches, currentTouches, vertical) {
+ // 震动偏移容差
+ var toleranceShake = 150
+ // 移动容差
+ var toleranceTranslate = 10
+
+ if (!vertical) {
+ // 水平方向移动
+ if (Math.abs(currentTouches.y - startTouches.y) <= toleranceShake) {
+ // console.log(currentTouches.x, startTouches.x);
+ if (Math.abs(currentTouches.x - startTouches.x) > toleranceTranslate) {
+ if (currentTouches.x - startTouches.x > 0) {
+ return 'right'
+ } else if (currentTouches.x - startTouches.x < 0) {
+ return 'left'
+ }
+ }
+ }
+ } else {
+ // 垂直方向移动
+ if (Math.abs(currentTouches.x - startTouches.x) <= toleranceShake) {
+ // console.log(currentTouches.x, startTouches.x);
+ if (Math.abs(currentTouches.y - startTouches.y) > toleranceTranslate) {
+ if (currentTouches.y - startTouches.y > 0) {
+ return 'down'
+ } else if (currentTouches.y - startTouches.y < 0) {
+ return 'up'
+ }
+ }
+ }
+ }
+ return ''
+}
+
+// swiperItem参数数据更新
+var itemDataObserver = function(newVal, oldVal, ownerInstance, instance) {
+ if (!newVal || newVal === 'undefined') return
+ var state = ownerInstance.getState()
+ state.itemData = newVal
+}
+
+// swiperIndex数据更新
+var currentIndexObserver = function(newVal, oldVal, ownerInstance, instance) {
+ if ((!newVal && newVal != 0) || newVal === 'undefined') return
+ var state = ownerInstance.getState()
+ state.currentIndex = newVal
+}
+
+// containerData数据更新
+var containerDataObserver = function(newVal, oldVal, ownerInstance, instance) {
+ if (!newVal || newVal === 'undefined') return
+ var state = ownerInstance.getState()
+ state.containerData = newVal
+}
+
+// 开始触摸
+var touchStart = function(event, ownerInstance) {
+ console.log('touchStart');
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+ var itemData = state.itemData
+ var containerData = state.containerData
+
+ // 由于当前SwiperIndex初始为0,可能会导致swiperIndex数据没有更新
+ if (!state.currentIndex || state.currentIndex === 'undefined') {
+ state.currentIndex = 0
+ }
+
+ if (!containerData || containerData.circular === 'undefined') {
+ containerData.circular = false
+ }
+ state.containerData = containerData
+
+ // 如果当前切换动画还没执行结束,再次触摸会重新加载对应的swiperContainer的信息
+ // console.log(containerData.animationFinish);
+ if (!containerData.animationFinish) {
+ ownerInstance.callMethod('changeParentSwiperContainerStyleStatus',{
+ status: 'reload'
+ })
+ }
+
+ // 判断是否为为当前显示的SwiperItem
+ if (itemData.index != state.currentIndex) return
+
+ var touches = event.changedTouches[0]
+ if (!touches) return
+
+ // 标记滑动开始时间
+ state.touchStartTime = getDate().getTime()
+
+ // 记录当前滑动开始的x,y坐标
+ state.touchRelactive = {
+ x: touches.pageX,
+ y: touches.pageY
+ }
+ // 记录触摸id,用于处理多指的情况
+ state.touchId = touches.identifier
+
+ // 标记开始触摸
+ state.touching = true
+ ownerInstance.callMethod('updateTouchingStatus', {
+ status: true
+ })
+}
+
+// 正在移动
+var touchMove = function(event, ownerInstance) {
+ console.log('touchMove');
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+ var itemData = state.itemData
+ var containerData = state.containerData
+
+ // 判断是否为为当前显示的SwiperItem
+ if (itemData.index != state.currentIndex) return
+
+ // 判断是否开始触摸
+ if (!state.touching) return
+
+ var touches = event.changedTouches[0]
+ if (!touches) return
+ // 判断是否为同一个触摸点
+ if (state.touchId != touches.identifier) return
+
+ var currentTouchRelactive = {
+ x: touches.pageX,
+ y: touches.pageY
+ }
+
+ // 计算相对位移比例
+ if (containerData.vertical) {
+ var touchDistance = currentTouchRelactive.y - state.touchRelactive.y
+ var itemHeight = itemData.itemHeight
+ var distanceRate = touchDistance / itemHeight
+ // console.log(currentTouchRelactive.y, touchDistance, itemHeight, distanceRate);
+
+ // 判断是否为衔接轮播,如果不是衔接轮播,如果当前为第一个swiperItem并且向下滑、当前为最后一个swiperItem并且向上滑时不进行操作
+ if (!containerData.circular &&
+ ((state.currentIndex === 0 && touchDistance > 0) || (state.currentIndex === containerData.swiperItemLength - 1 && touchDistance < 0))
+ ) {
+ return
+ }
+
+ // 如果超出了距离则不进行操作
+ if((Math.abs(touchDistance) > (itemData.itemTop + itemData.itemHeight))) {
+ ownerInstance.callMethod('updateParentSwiperContainerStyle', {
+ value: distanceRate < 0 ? -1 : 1
+ })
+ return
+ }
+ } else {
+ var touchDistance = currentTouchRelactive.x - state.touchRelactive.x
+ var itemWidth = itemData.itemWidth
+ var distanceRate = touchDistance / itemWidth
+ // console.log(currentTouchRelactive.x, touchDistance, itemWidth, distanceRate);
+
+ // 判断是否为衔接轮播,如果不是衔接轮播,如果当前为第一个swiperItem并且向右滑、当前为最后一个swiperItem并且向左滑时不进行操作
+ if (!containerData.circular &&
+ ((state.currentIndex === 0 && touchDistance > 0) || (state.currentIndex === containerData.swiperItemLength - 1 && touchDistance < 0))
+ ) {
+ return
+ }
+
+ // 如果超出了距离则不进行操作
+ if((Math.abs(touchDistance) > (itemData.itemLeft + itemData.itemWidth))) {
+ ownerInstance.callMethod('updateParentSwiperContainerStyle', {
+ value: distanceRate < 0 ? -1 : 1
+ })
+ return
+ }
+ }
+
+ ownerInstance.callMethod('updateParentSwiperContainerStyle', {
+ value: distanceRate
+ })
+}
+
+// 移动结束
+var touchEnd = function(event, ownerInstance) {
+ console.log('touchEnd');
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+ var itemData = state.itemData
+ var containerData = state.containerData
+
+ // 判断是否为为当前显示的SwiperItem
+ if (itemData.index != state.currentIndex) return
+
+ // 判断是否开始触摸
+ if (!state.touching) return
+
+ var touches = event.changedTouches[0]
+ if (!touches) return
+ // 判断是否为同一个触摸点
+ if (state.touchId != touches.identifier) return
+
+
+ var currentTime = getDate().getTime()
+ var currentTouchRelactive = {
+ x: touches.pageX,
+ y: touches.pageY
+ }
+
+ if (containerData.vertical) {
+ // 判断触摸移动方向
+ var direction = decideSwiperDirection(state.touchRelactive, currentTouchRelactive, true)
+ // 判断是否为衔接轮播,如果不是衔接轮播,如果当前为第一个swiperItem并且向下滑、当前为最后一个swiperItem并且向上滑时不进行操作
+ if (containerData.circular ||
+ !((state.currentIndex === 0 && direction === 'down') || (state.currentIndex === containerData.swiperItemLength - 1 && direction === 'up'))
+ ) {
+ // 判断触摸的时间和移动的距离是否超过了当前itemHeight的一半,如果是则执行切换操作
+ // console.log(currentTime - state.touchStartTime, Math.abs(currentTouchRelactive.y - state.touchRelactive.y));
+ if ((currentTime - state.touchStartTime) > 200 && Math.abs(currentTouchRelactive.y - state.touchRelactive.y) < itemData.itemHeight / 2) {
+ ownerInstance.callMethod('changeParentSwiperContainerStyleStatus',{
+ status: 'reset'
+ })
+ } else {
+ // console.log(direction, state.touchRelactive.y, currentTouchRelactive.y);
+
+ ownerInstance.callMethod('updateParentSwiperContainerStyleWithDirection', {
+ direction: direction
+ })
+ }
+ }
+ } else {
+ // 判断触摸移动方向
+ var direction = decideSwiperDirection(state.touchRelactive, currentTouchRelactive, false)
+ // 判断是否为衔接轮播,如果不是衔接轮播,如果当前为第一个swiperItem并且向右滑、当前为最后一个swiperItem并且向左滑时不进行操作
+ if (containerData.circular ||
+ !((state.currentIndex === 0 && direction === 'right') || (state.currentIndex === containerData.swiperItemLength - 1 && direction === 'left'))
+ ) {
+ // 判断触摸的时间和移动的距离是否超过了当前itemWidth的一半,如果是则执行切换操作
+ // console.log(currentTime - state.touchStartTime, Math.abs(currentTouchRelactive.x - state.touchRelactive.x));
+ if ((currentTime - state.touchStartTime) > 200 && Math.abs(currentTouchRelactive.x - state.touchRelactive.x) < itemData.itemWidth / 2) {
+ ownerInstance.callMethod('changeParentSwiperContainerStyleStatus',{
+ status: 'reset'
+ })
+ } else {
+ // console.log(direction, state.touchRelactive.x, currentTouchRelactive.x);
+
+ ownerInstance.callMethod('updateParentSwiperContainerStyleWithDirection', {
+ direction: direction
+ })
+ }
+ }
+ }
+
+ // 清除标记
+ state.touchId = null
+ state.touchRelactive = null
+ state.touchStartTime = 0
+
+
+ // 标记停止触摸
+ state.touching = true
+ ownerInstance.callMethod('updateTouchingStatus', {
+ status: false
+ })
+}
+
+module.exports = {
+ itemDataObserver: itemDataObserver,
+ currentIndexObserver: currentIndexObserver,
+ containerDataObserver: containerDataObserver,
+ touchStart: touchStart,
+ touchMove: touchMove,
+ touchEnd: touchEnd
+}
\ No newline at end of file
diff --git a/tuniao-ui/components/tn-custom-swiper-item/tn-custom-swiper-item.vue b/tuniao-ui/components/tn-custom-swiper-item/tn-custom-swiper-item.vue
new file mode 100644
index 0000000..5fd3c5b
--- /dev/null
+++ b/tuniao-ui/components/tn-custom-swiper-item/tn-custom-swiper-item.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-custom-swiper/tn-custom-swiper.vue b/tuniao-ui/components/tn-custom-swiper/tn-custom-swiper.vue
new file mode 100644
index 0000000..2094fe6
--- /dev/null
+++ b/tuniao-ui/components/tn-custom-swiper/tn-custom-swiper.vue
@@ -0,0 +1,535 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ currentIndex + 1 }}/{{ children.length }}
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-drag/index.wxs b/tuniao-ui/components/tn-drag/index.wxs
new file mode 100644
index 0000000..6df1e84
--- /dev/null
+++ b/tuniao-ui/components/tn-drag/index.wxs
@@ -0,0 +1,265 @@
+// 判断是否出界
+var isOutRange = function(x1, y1, x2, y2, x3, y3) {
+ return x1 < 0 || x1 >= y1 || x2 < 0 || x2 >= y2 || x3 < 0 || x3 >= y3
+}
+var edit = false
+
+function bool(str) {
+ return str === 'true' || str === true
+}
+/**
+ * 排序核心
+ * @param {Object} startKey 开始时位置
+ * @param {Object} endKey 结束时位置
+ * @param {Object} instance wxs内的局部变量快照
+ */
+var sortCore = function(startKey, endKey, state) {
+ var basedata = state.basedata
+ var excludeFix = function(sortKey, type) {
+ // fixed 元素位置不会变化, 这里直接用 sortKey 获取,更加便捷
+ if (state.list[sortKey].fixed) {
+ var _sortKey = type ? --sortKey : ++sortKey
+ return excludeFix(sortKey, type)
+ }
+ return sortKey
+ }
+
+ // 先获取到 endKey 对应的 realKey, 防止下面排序过程中该 realKey 被修改
+ var endRealKey = -1
+ state.list.forEach(function(item) {
+ if (item.sortKey === endKey) endRealKey = item.realKey
+ })
+
+ return state.list.map(function(item) {
+ if (item.fixed) return item
+ var sortKey = item.sortKey
+ var realKey = item.realKey
+
+ if (startKey < endKey) {
+ // 正序拖动
+ if (sortKey > startKey && sortKey <= endKey) {
+ --realKey
+ sortKey = excludeFix(--sortKey, true)
+ } else if (sortKey === startKey) {
+ realKey = endRealKey
+ sortKey = endKey
+ }
+ } else if (startKey > endKey) {
+ // 倒序拖动
+ if (sortKey >= endKey && sortKey < startKey) {
+ ++realKey
+ sortKey = excludeFix(++sortKey, false)
+ } else if (sortKey === startKey) {
+ realKey = endRealKey
+ sortKey = endKey
+ }
+ }
+
+ if (item.sortKey != sortKey) {
+ item.translateX = (sortKey % basedata.columns) * 100 + '%'
+ item.translateY = Math.floor(sortKey / basedata.columns) * 100 + '%'
+ item.sortKey = sortKey
+ item.realKey = realKey
+ }
+ return item
+ })
+}
+
+var triggerCustomEvent = function(list, type, instance) {
+ if (!instance) return
+ var _list = [],
+ listData = [];
+
+ list.forEach(function(item) {
+ _list[item.sortKey] = item
+ })
+ _list.forEach(function(item) {
+ listData.push(item.data)
+ })
+
+ // 编译到小程序 funcName作为参数传递导致事件不执行
+ switch(type) {
+ case 'change':
+ instance.callMethod('change', {data: listData})
+ break
+ case 'sortEnd':
+ instance.callMethod('sortEnd', {data: listData})
+ break
+ }
+}
+
+var listObserver = function(newVal, oldVal, ownerInstance, instance) {
+ var state = ownerInstance.getState()
+ state.itemsInstance = ownerInstance.selectAllComponents('.tn-drag__item')
+
+ state.list = newVal || []
+
+ state.list.forEach(function(item, index) {
+ var itemInstance = state.itemsInstance[index]
+ if (item && itemInstance) {
+ itemInstance.setStyle({
+ 'transform': 'translate3d('+ item.translateX + ',' + item.translateY +', 0)'
+ })
+ if (item.fixed) itemInstance.addClass('tn-drag__fixed')
+ }
+ })
+}
+
+var baseDataObserver = function(newVal, oldVal, ownerInstance, instance) {
+ var state = ownerInstance.getState()
+ state.basedata = newVal
+}
+
+var longPress = function(event, ownerInstance) {
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+
+ edit = bool(dataset.edit)
+ if (!edit) return
+ if (!state.basedata || state.basedata === 'undefined') {
+ state.basedata = JSON.parse(dataset.basedata)
+ }
+ var basedata = state.basedata
+ var touches = event.changedTouches[0]
+ if (!touches) return
+
+ state.current = +dataset.index
+
+ // 初始项是固定项则返回
+ var item = state.list[state.current]
+ if (item && item.fixed) return
+
+ // 如果已经在 drag 中则返回, 防止多指触发 drag 动作, touchstart 事件中有效果
+ if (state.dragging) return
+
+ ownerInstance.callMethod("drag", {
+ dragging: true
+ })
+
+ // 计算X, Y轴初始位移,使item中心移动到点击处,单列的时候X轴初始不做位移
+ state.translateX = basedata.columns === 1 ? 0 : touches.pageX - (basedata.itemWidth / 2 + basedata.left)
+ state.translateY = touches.pageY - (basedata.itemHeight / 2 + basedata.top)
+ state.touchId = touches.identifier
+
+ instance.setStyle({
+ 'transform': 'translate3d(' + state.translateX + 'px,' + state.translateY +'px, 0)'
+ })
+ state.itemsInstance.forEach(function(item, index) {
+ item.removeClass("tn-drag__transition").removeClass("tn-drag__current")
+ item.addClass(index === state.current ? "tn-drag__current" : "tn-drag__transition")
+ })
+
+ ownerInstance.callMethod("vibrate")
+ state.dragging = true
+}
+
+var touchStart = function(event, ownerInstance) {
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ edit = bool(dataset.edit)
+}
+
+var touchMove = function(event, ownerInstance) {
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+ var basedata = state.basedata
+
+ if (!state.dragging || !edit) return
+ var touches = event.changedTouches[0]
+ if (!touches) return
+
+ // 如果不是同一个触发点则返回
+ if (state.touchId !== touches.identifier) return
+
+ // 计算X,Y轴位移, 单列时候X轴初始不做位移
+ var translateX = basedata.columns === 1 ? 0 : touches.pageX - (basedata.itemWidth / 2 + basedata.left)
+ var translateY = touches.pageY - (basedata.itemHeight / 2 + basedata.top)
+
+ // 到顶到低自动滑动
+ if (touches.clientY > basedata.windowHeight - basedata.itemHeight - basedata.realBottomSize) {
+ // 当前触摸点pageY + item高度 - (屏幕高度 - 底部固定区域高度)
+ ownerInstance.callMethod('pageScroll', {
+ scrollTop: touches.pageY + basedata.itemHeight - (basedata.windowHeight - basedata.realBottomSize)
+ })
+ } else if (touches.clientY < basedata.itemHeight + basedata.realTopSize) {
+ // 当前触摸点pageY - item高度 - 顶部固定区域高
+ ownerInstance.callMethod('pageScroll', {
+ scrollTop: touches.pageY - basedata.itemHeight - basedata.realTopSize
+ })
+ }
+
+ // 设置当前激活元素的偏移量
+ instance.setStyle({
+ 'transform': 'translate3d('+ translateX + 'px,' + translateY + 'px, 0)'
+ })
+
+ var startKey = state.list[state.current].sortKey
+ var currentX = Math.round(translateX / basedata.itemWidth)
+ var currentY = Math.round(translateY / basedata.itemHeight)
+ var endKey = currentX + basedata.columns * currentY
+
+ // 目标项时固定项则返回
+ var item = state.list[endKey]
+ if (item && item.fixed) return
+
+ // X轴或者Y轴超出范围则返回
+ if (isOutRange(currentX, basedata.columns, currentY, basedata.rows, endKey, state.list.length)) return
+
+ // 防止拖拽过程中发生乱序问题
+ if (startKey === endKey || startKey === state.preStartKey) return
+ state.preStartKey = startKey
+
+ var list = sortCore(startKey, endKey, state)
+ state.itemsInstance.forEach(function(itemInstance, index) {
+ var item = list[index]
+ if (index !== state.current) {
+ itemInstance.setStyle({
+ 'transform': 'translate3d('+ item.translateX + ',' + item.translateY +', 0)'
+ })
+ }
+ })
+
+ // ownerInstance.callMethod('vibrate')
+ ownerInstance.callMethod('listDataChange', {
+ data: list
+ })
+ triggerCustomEvent(list, "change", ownerInstance)
+}
+
+var touchEnd = function(event, ownerInstance) {
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+ var basedata = state.basedata
+
+ if (!state.dragging || !edit) return
+ triggerCustomEvent(state.list, "sortEnd", ownerInstance)
+
+ instance.addClass('tn-drag__transition')
+ instance.setStyle({
+ 'transform': 'translate3d('+ state.list[state.current].translateX + ',' + state.list[state.current].translateY + ', 0)'
+ })
+ state.itemsInstance.forEach(function(item, index) {
+ item.removeClass('tn-drag__transition')
+ })
+
+ state.preStartKey = -1
+ state.dragging = false
+ ownerInstance.callMethod('drag', {
+ dragging: false
+ })
+ state.current = -1
+ state.translateX = 0
+ state.translateY = 0
+}
+
+module.exports = {
+ longPress: longPress,
+ touchStart: touchStart,
+ touchMove: touchMove,
+ touchEnd: touchEnd,
+ baseDataObserver: baseDataObserver,
+ listObserver: listObserver
+}
\ No newline at end of file
diff --git a/tuniao-ui/components/tn-drag/tn-drag.vue b/tuniao-ui/components/tn-drag/tn-drag.vue
new file mode 100644
index 0000000..17d269d
--- /dev/null
+++ b/tuniao-ui/components/tn-drag/tn-drag.vue
@@ -0,0 +1,278 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-empty/tn-empty.vue b/tuniao-ui/components/tn-empty/tn-empty.vue
new file mode 100644
index 0000000..3a85b15
--- /dev/null
+++ b/tuniao-ui/components/tn-empty/tn-empty.vue
@@ -0,0 +1,190 @@
+
+
+
+
+
+ {{ text ? text : icons[mode]}}
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-fab/tn-fab.vue b/tuniao-ui/components/tn-fab/tn-fab.vue
new file mode 100644
index 0000000..9ce0cde
--- /dev/null
+++ b/tuniao-ui/components/tn-fab/tn-fab.vue
@@ -0,0 +1,523 @@
+
+
+
+
+
+
+ {{ item.text || '' }}
+
+
+
+
+ {{ item.text || '' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-form-item/tn-form-item.vue b/tuniao-ui/components/tn-form-item/tn-form-item.vue
new file mode 100644
index 0000000..f60dbec
--- /dev/null
+++ b/tuniao-ui/components/tn-form-item/tn-form-item.vue
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{label}}
+
+ *
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{validateMessage}}
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-form/tn-form.vue b/tuniao-ui/components/tn-form/tn-form.vue
new file mode 100644
index 0000000..6a2524f
--- /dev/null
+++ b/tuniao-ui/components/tn-form/tn-form.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-goods-nav/tn-goods-nav.vue b/tuniao-ui/components/tn-goods-nav/tn-goods-nav.vue
new file mode 100644
index 0000000..b3d3a60
--- /dev/null
+++ b/tuniao-ui/components/tn-goods-nav/tn-goods-nav.vue
@@ -0,0 +1,382 @@
+
+
+
+
+
+
+
+
+
+ {{ item.count }}
+
+ {{ item.text }}
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-grid-item/tn-grid-item.vue b/tuniao-ui/components/tn-grid-item/tn-grid-item.vue
new file mode 100644
index 0000000..2837bc2
--- /dev/null
+++ b/tuniao-ui/components/tn-grid-item/tn-grid-item.vue
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-grid/tn-grid.vue b/tuniao-ui/components/tn-grid/tn-grid.vue
new file mode 100644
index 0000000..f5487c6
--- /dev/null
+++ b/tuniao-ui/components/tn-grid/tn-grid.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-image-upload-drag/tn-image-upload-drag.vue b/tuniao-ui/components/tn-image-upload-drag/tn-image-upload-drag.vue
new file mode 100644
index 0000000..3a96b98
--- /dev/null
+++ b/tuniao-ui/components/tn-image-upload-drag/tn-image-upload-drag.vue
@@ -0,0 +1,995 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击重试
+
+
+
+
+
+
+
+
+
+
+
+ {{ uploadText }}
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-image-upload/tn-image-upload.vue b/tuniao-ui/components/tn-image-upload/tn-image-upload.vue
new file mode 100644
index 0000000..e7e9418
--- /dev/null
+++ b/tuniao-ui/components/tn-image-upload/tn-image-upload.vue
@@ -0,0 +1,695 @@
+
+
+
+
+
+
+
+
+
+
+
+ 点击重试
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ uploadText }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-index-anchor/tn-index-anchor.vue b/tuniao-ui/components/tn-index-anchor/tn-index-anchor.vue
new file mode 100644
index 0000000..435597d
--- /dev/null
+++ b/tuniao-ui/components/tn-index-anchor/tn-index-anchor.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+ {{ index }}
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-index-list/tn-index-list.vue b/tuniao-ui/components/tn-index-list/tn-index-list.vue
new file mode 100644
index 0000000..5187896
--- /dev/null
+++ b/tuniao-ui/components/tn-index-list/tn-index-list.vue
@@ -0,0 +1,361 @@
+
+
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+ {{ indexList[touchMoveIndex] }}
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-input/tn-input.vue b/tuniao-ui/components/tn-input/tn-input.vue
new file mode 100644
index 0000000..e16a1ad
--- /dev/null
+++ b/tuniao-ui/components/tn-input/tn-input.vue
@@ -0,0 +1,447 @@
+
+
+
+
+
+
+ {{defaultValue}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-keyboard/tn-keyboard.vue b/tuniao-ui/components/tn-keyboard/tn-keyboard.vue
new file mode 100644
index 0000000..8844421
--- /dev/null
+++ b/tuniao-ui/components/tn-keyboard/tn-keyboard.vue
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
+
+
+
+ {{ cancelBtn ? cancelText : ''}}
+
+
+ {{ tips ? tips : mode === 'number' ? '数字键盘' : mode === 'card' ? '身份证键盘' : '车牌号码键盘'}}
+
+
+ {{ confirmBtn ? confirmText : ''}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-landscape/tn-landscape.vue b/tuniao-ui/components/tn-landscape/tn-landscape.vue
new file mode 100644
index 0000000..114c1f7
--- /dev/null
+++ b/tuniao-ui/components/tn-landscape/tn-landscape.vue
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-lazy-load/tn-lazy-load.vue b/tuniao-ui/components/tn-lazy-load/tn-lazy-load.vue
new file mode 100644
index 0000000..90fb876
--- /dev/null
+++ b/tuniao-ui/components/tn-lazy-load/tn-lazy-load.vue
@@ -0,0 +1,254 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-line-progress/tn-line-progress.vue b/tuniao-ui/components/tn-line-progress/tn-line-progress.vue
new file mode 100644
index 0000000..7e4af3e
--- /dev/null
+++ b/tuniao-ui/components/tn-line-progress/tn-line-progress.vue
@@ -0,0 +1,143 @@
+
+
+
+
+ {{ percent + '%' }}
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-list-cell/tn-list-cell.vue b/tuniao-ui/components/tn-list-cell/tn-list-cell.vue
new file mode 100644
index 0000000..514ebb5
--- /dev/null
+++ b/tuniao-ui/components/tn-list-cell/tn-list-cell.vue
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-list-view/tn-list-view.vue b/tuniao-ui/components/tn-list-view/tn-list-view.vue
new file mode 100644
index 0000000..810e335
--- /dev/null
+++ b/tuniao-ui/components/tn-list-view/tn-list-view.vue
@@ -0,0 +1,184 @@
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-load-more/tn-load-more.vue b/tuniao-ui/components/tn-load-more/tn-load-more.vue
new file mode 100644
index 0000000..22b6fd2
--- /dev/null
+++ b/tuniao-ui/components/tn-load-more/tn-load-more.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+
+ {{ showText }}
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-loading/tn-loading.vue b/tuniao-ui/components/tn-loading/tn-loading.vue
new file mode 100644
index 0000000..f623c93
--- /dev/null
+++ b/tuniao-ui/components/tn-loading/tn-loading.vue
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-modal/tn-modal.vue b/tuniao-ui/components/tn-modal/tn-modal.vue
new file mode 100644
index 0000000..ddcf234
--- /dev/null
+++ b/tuniao-ui/components/tn-modal/tn-modal.vue
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+ {{ title }}
+ {{ content }}
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-nav-bar/tn-nav-bar.vue b/tuniao-ui/components/tn-nav-bar/tn-nav-bar.vue
new file mode 100644
index 0000000..48f7173
--- /dev/null
+++ b/tuniao-ui/components/tn-nav-bar/tn-nav-bar.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ backTitle }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-notice-bar/tn-notice-bar.vue b/tuniao-ui/components/tn-notice-bar/tn-notice-bar.vue
new file mode 100644
index 0000000..22b1974
--- /dev/null
+++ b/tuniao-ui/components/tn-notice-bar/tn-notice-bar.vue
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-number-box/tn-number-box.vue b/tuniao-ui/components/tn-number-box/tn-number-box.vue
new file mode 100644
index 0000000..63b2a52
--- /dev/null
+++ b/tuniao-ui/components/tn-number-box/tn-number-box.vue
@@ -0,0 +1,401 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-number-keyboard/tn-number-keyboard.vue b/tuniao-ui/components/tn-number-keyboard/tn-number-keyboard.vue
new file mode 100644
index 0000000..9d3201a
--- /dev/null
+++ b/tuniao-ui/components/tn-number-keyboard/tn-number-keyboard.vue
@@ -0,0 +1,182 @@
+
+ {}">
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-picker/tn-picker.vue b/tuniao-ui/components/tn-picker/tn-picker.vue
new file mode 100644
index 0000000..26308de
--- /dev/null
+++ b/tuniao-ui/components/tn-picker/tn-picker.vue
@@ -0,0 +1,727 @@
+
+
+
+
+
+
+
+ {{cancelText}}
+
+ {{ title }}
+
+ {{confirmText}}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item }}
+ 年
+
+
+
+
+ {{ formatNumber(item) }}
+ 月
+
+
+
+
+ {{ formatNumber(item) }}
+ 日
+
+
+
+
+ {{ formatNumber(item) }}
+ 时
+
+
+
+
+ {{ formatNumber(item) }}
+ 分
+
+
+
+
+ {{ formatNumber(item) }}
+ 秒
+
+
+
+
+
+
+
+ {{ getItemValue(item, 'selector') }}
+
+
+
+
+
+
+
+ {{ getItemValue(sub_item, 'multiSelector') }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-popup/tn-popup.vue b/tuniao-ui/components/tn-popup/tn-popup.vue
new file mode 100644
index 0000000..ddbb83e
--- /dev/null
+++ b/tuniao-ui/components/tn-popup/tn-popup.vue
@@ -0,0 +1,492 @@
+
+
+
+ {}"
+ hover-stop-propagation
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-radio-group/tn-radio-group.vue b/tuniao-ui/components/tn-radio-group/tn-radio-group.vue
new file mode 100644
index 0000000..8d4f135
--- /dev/null
+++ b/tuniao-ui/components/tn-radio-group/tn-radio-group.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-radio/tn-radio.vue b/tuniao-ui/components/tn-radio/tn-radio.vue
new file mode 100644
index 0000000..dd2fc43
--- /dev/null
+++ b/tuniao-ui/components/tn-radio/tn-radio.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-rate/tn-rate.vue b/tuniao-ui/components/tn-rate/tn-rate.vue
new file mode 100644
index 0000000..77b4724
--- /dev/null
+++ b/tuniao-ui/components/tn-rate/tn-rate.vue
@@ -0,0 +1,325 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-read-more/tn-read-more.vue b/tuniao-ui/components/tn-read-more/tn-read-more.vue
new file mode 100644
index 0000000..da012f1
--- /dev/null
+++ b/tuniao-ui/components/tn-read-more/tn-read-more.vue
@@ -0,0 +1,222 @@
+
+
+
+
+
+
+
+
+
+
+ {{ showMore ? closeText : openText }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-row-notice/tn-row-notice.vue b/tuniao-ui/components/tn-row-notice/tn-row-notice.vue
new file mode 100644
index 0000000..9cc965e
--- /dev/null
+++ b/tuniao-ui/components/tn-row-notice/tn-row-notice.vue
@@ -0,0 +1,301 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ showText }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-scroll-list/tn-scroll-list.vue b/tuniao-ui/components/tn-scroll-list/tn-scroll-list.vue
new file mode 100644
index 0000000..1dd86eb
--- /dev/null
+++ b/tuniao-ui/components/tn-scroll-list/tn-scroll-list.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-scroll-view/tn-scroll-view.vue b/tuniao-ui/components/tn-scroll-view/tn-scroll-view.vue
new file mode 100644
index 0000000..5fef53e
--- /dev/null
+++ b/tuniao-ui/components/tn-scroll-view/tn-scroll-view.vue
@@ -0,0 +1,401 @@
+
+
+
+
+
+
+
+
+ {{ refreshStateText }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-select/tn-select.vue b/tuniao-ui/components/tn-select/tn-select.vue
new file mode 100644
index 0000000..ab9b952
--- /dev/null
+++ b/tuniao-ui/components/tn-select/tn-select.vue
@@ -0,0 +1,446 @@
+
+
+
+
+
+
+ {{ cancelText }}
+ {{ title }}
+ {{ confirmText }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ sub_item[labelName] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-sign-board/tn-sign-board.vue b/tuniao-ui/components/tn-sign-board/tn-sign-board.vue
new file mode 100644
index 0000000..1b3929c
--- /dev/null
+++ b/tuniao-ui/components/tn-sign-board/tn-sign-board.vue
@@ -0,0 +1,690 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 清除
+ 保存
+ 预览
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-skeleton/tn-skeleton.vue b/tuniao-ui/components/tn-skeleton/tn-skeleton.vue
new file mode 100644
index 0000000..cb3fc7b
--- /dev/null
+++ b/tuniao-ui/components/tn-skeleton/tn-skeleton.vue
@@ -0,0 +1,254 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-slider/tn-slider.vue b/tuniao-ui/components/tn-slider/tn-slider.vue
new file mode 100644
index 0000000..d29d848
--- /dev/null
+++ b/tuniao-ui/components/tn-slider/tn-slider.vue
@@ -0,0 +1,255 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-stack-swiper/index-h5.wxs b/tuniao-ui/components/tn-stack-swiper/index-h5.wxs
new file mode 100644
index 0000000..92b8627
--- /dev/null
+++ b/tuniao-ui/components/tn-stack-swiper/index-h5.wxs
@@ -0,0 +1,657 @@
+
+function setTimeout(instance, cb, time) {
+ if (time > 0) {
+ var s = getDate().getTime()
+ var fn = function () {
+ if (getDate().getTime() - s > time) {
+ cb && cb()
+ } else
+ instance.requestAnimationFrame(fn)
+ }
+ fn()
+ }
+ else
+ cb && cb()
+}
+
+// 判断触摸的移动方向
+function decideSwiperDirection(startTouches, currentTouches, direction) {
+ // 震动偏移容差
+ var toleranceShake = 30
+ // 移动容差
+ var toleranceTranslate = 10
+
+ if (direction === 'horizontal') {
+ // 水平方向移动
+ if (Math.abs(currentTouches.y - startTouches.y) <= toleranceShake) {
+ // console.log(currentTouches.x, startTouches.x);
+ if (Math.abs(currentTouches.x - startTouches.x) > toleranceTranslate) {
+ if (currentTouches.x - startTouches.x > 0) {
+ return 'right'
+ } else if (currentTouches.x - startTouches.x < 0) {
+ return 'left'
+ }
+ }
+ }
+ } else if (direction === 'vertical') {
+ // 垂直方向移动
+ if (Math.abs(currentTouches.x - startTouches.x) <= toleranceShake) {
+ // console.log(currentTouches.x, startTouches.x);
+ if (Math.abs(currentTouches.y - startTouches.y) > toleranceTranslate) {
+ if (currentTouches.y - startTouches.y > 0) {
+ return 'down'
+ } else if (currentTouches.y - startTouches.y < 0) {
+ return 'up'
+ }
+ }
+ }
+ }
+ return ''
+}
+
+// 更新轮播样式信息
+function updateSwiperStyle(currentTouches, instance, state) {
+ var itemData = state.itemData
+ var itemsInstance = state.itemsInstance
+ var list = state.list
+ var currentIndex = state.currentIndex
+ var touchRelactive = state.touchRelactive
+ // console.log(itemAnimationWidth);
+
+ if (itemData.direction === 'horizontal') {
+ // 水平方向
+ var itemAnimationWidth = state.itemAnimationWidth
+ // 偏移的x轴距离
+ var translateX = currentTouches.x - touchRelactive.x
+ if (currentTouches.x > itemData.windowWidth || currentTouches.x < 0) return
+ // console.log(translateX);
+ // 更新其他轮播样式
+ if (state.direction == 'left') {
+ // 设置当前激活元素的偏移量
+ instance.setStyle({
+ 'transform': 'translate3d('+ translateX + 'px, 0px, 0px)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 移动距离是否超过了指定的容器宽度
+ if (Math.abs(translateX) > itemAnimationWidth) {
+ state.itemsInstance.forEach( function(itemInstance, index) {
+ if (index != currentIndex) {
+ var preIndex = (index == 0) ? list.length - 1 : index - 1
+ var distanceRate = (Math.abs(translateX) - itemAnimationWidth) / (itemData.itemWidth - itemAnimationWidth)
+ var itemTranslateX = list[index].translateX - (list[index].translateX - list[preIndex].translateX) * distanceRate
+ var itemScale = list[index].scale + (list[preIndex].scale - list[index].scale) * distanceRate
+ var itemOpacity = list[index].opacity + (list[preIndex].opacity - list[index].opacity) * distanceRate
+ // console.log(preIndex);
+ // console.log(list[index]);
+ // console.log(distanceRate);
+ // console.log(itemTranslateX);
+ // console.log(itemScale);
+ // console.log(itemOpacity);
+ // console.log('-----------------------------------------------------------');
+ itemInstance.setStyle({
+ 'transform': 'translate3d(' + itemTranslateX + 'px, 0px, 0px) scale(' + itemScale + ')',
+ 'z-index': list[index].zIndex,
+ 'opacity': itemOpacity
+ })
+ }
+ })
+ }
+ } else if (state.direction == 'right') {
+ var preIndex = (currentIndex == 0) ? list.length - 1 : currentIndex - 1
+ // 右滑的时候把最底部的取出,并放到最高层级
+ state.itemsInstance[preIndex].setStyle({
+ 'transform': 'translate3d(-' + (itemData.itemWidth - translateX) + 'px, 0px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 当前轮播逐渐缩小
+ if (Math.abs(translateX) < itemAnimationWidth) {
+ state.itemsInstance.forEach( function(itemInstance, index) {
+ if (index != preIndex) {
+ var replaceIndex = index == list.length - 1 ? 0 : index + 1
+ var distanceRate = Math.abs(translateX) / itemAnimationWidth
+ var itemTranslateX = list[index].translateX + (list[replaceIndex].translateX - list[index].translateX) * distanceRate
+ var itemScale = list[index].scale - (list[index].scale - list[replaceIndex].scale) * distanceRate
+ var itemOpacity = list[index].opacity - (list[index].opacity - list[replaceIndex].opacity) * distanceRate
+ // console.log(preIndex);
+ // console.log(index);
+ // console.log(replaceIndex);
+ // console.log(list[index]);
+ // console.log(list[replaceIndex].translateX - list[index].translateX);
+ // console.log(distanceRate);
+ // console.log(itemTranslateX);
+ // console.log(itemScale);
+ // console.log('-----------------------------------------------------------');
+ itemInstance.setStyle({
+ 'transform': 'translate3d(' + itemTranslateX + 'px, 0px, 0px) scale(' + itemScale + ')',
+ 'z-index': list[index].zIndex,
+ 'opacity': itemOpacity
+ })
+ }
+ })
+ }
+ }
+ } else if (itemData.direction === 'vertical') {
+ // 垂直方向
+ var itemAnimationHeight = state.itemAnimationHeight
+ // 偏移的y轴距离
+ var translateY = currentTouches.y - touchRelactive.y
+ if (currentTouches.y > itemData.windowHeight || currentTouches.y < 0) return
+ // console.log(translateX);
+ // 更新其他轮播样式
+ if (state.direction == 'up') {
+ // 设置当前激活元素的偏移量
+ instance.setStyle({
+ 'transform': 'translate3d(0px, '+ translateY + 'px, 0px)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 移动距离是否超过了指定的容器宽度
+ if (Math.abs(translateY) > itemAnimationHeight) {
+ state.itemsInstance.forEach( function(itemInstance, index) {
+ if (index != currentIndex) {
+ var preIndex = (index == 0) ? list.length - 1 : index - 1
+ var distanceRate = (Math.abs(translateY) - itemAnimationHeight) / (itemData.itemHeight - itemAnimationHeight)
+ var itemTranslateY = list[index].translateY - (list[index].translateY - list[preIndex].translateY) * distanceRate
+ var itemScale = list[index].scale + (list[preIndex].scale - list[index].scale) * distanceRate
+ var itemOpacity = list[index].opacity + (list[preIndex].opacity - list[index].opacity) * distanceRate
+ // console.log(preIndex);
+ // console.log(list[index]);
+ // console.log(distanceRate);
+ // console.log(itemTranslateX);
+ // console.log(itemScale);
+ // console.log('-----------------------------------------------------------');
+ itemInstance.setStyle({
+ 'transform': 'translate3d(0px, ' + itemTranslateY + 'px, 0px) scale(' + itemScale + ')',
+ 'z-index': list[index].zIndex,
+ 'opacity': itemOpacity
+
+ })
+ }
+ })
+ }
+ } else if (state.direction == 'down') {
+ var preIndex = (currentIndex == 0) ? list.length - 1 : currentIndex - 1
+ // 下滑的时候把最底部的取出,并放到最高层级
+ state.itemsInstance[preIndex].setStyle({
+ 'transform': 'translate3d(0px, -' + (itemData.itemHeight - translateY) + 'px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 当前轮播逐渐缩小
+ if (Math.abs(translateY) < itemAnimationHeight) {
+ state.itemsInstance.forEach( function(itemInstance, index) {
+ if (index != preIndex) {
+ var replaceIndex = index == list.length - 1 ? 0 : index + 1
+ var distanceRate = Math.abs(translateY) / itemAnimationHeight
+ var itemTranslateY = list[index].translateY + (list[replaceIndex].translateY - list[index].translateY) * distanceRate
+ var itemScale = list[index].scale - (list[index].scale - list[replaceIndex].scale) * distanceRate
+ var itemOpacity = list[index].opacity - (list[index].opacity - list[replaceIndex].opacity) * distanceRate
+ // console.log(preIndex);
+ // console.log(index);
+ // console.log(replaceIndex);
+ // console.log(list[index]);
+ // console.log(list[replaceIndex].translateX - list[index].translateX);
+ // console.log(distanceRate);
+ // console.log(itemTranslateX);
+ // console.log(itemScale);
+ // console.log('-----------------------------------------------------------');
+ itemInstance.setStyle({
+ 'transform': 'translate3d(0px, ' + itemTranslateY + 'px, 0px) scale(' + itemScale + ')',
+ 'z-index': list[index].zIndex,
+ 'opacity': itemOpacity
+ })
+ }
+ })
+ }
+ }
+ }
+}
+
+// 更新当前轮播序号
+function updateCurrentSwiperIndex(index, ownerInstance, state) {
+ state.currentIndex = index
+ ownerInstance.callMethod('changeSwiperIndex', {
+ index: index
+ })
+}
+
+// 切换到下一个轮播
+function switchNextSwiper(newIndex, touches, instance, state) {
+ var currentIndex = state.currentIndex
+ var list = state.list
+ var direction = state.itemData.direction
+ var touchRelactive = state.touchRelactive || {x: 0, y: 0}
+
+ // 已经完成轮播切换
+ var currentListItemData = JSON.parse(JSON.stringify(list))
+
+ if (direction === 'horizontal') {
+ // 水平方向移动
+ var itemWidth = state.itemData.itemWidth
+ // 当前轮播移动到最左边
+ instance.setStyle({
+ 'transform': 'translate3d(-'+ itemWidth + 'px, 0px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 计算当前移动需要的剩余时间
+ var time = Math.floor((itemWidth - Math.abs(touches.pageX - touchRelactive.x)) / itemWidth * 250)
+
+ setTimeout(instance, function() {
+ for (var i = list.length - 1; i >= 0; i--) {
+ var replaceIndex = i - 1 < 0 ? list.length - 1 : i - 1
+ // console.log(i);
+ // console.log(replaceIndex);
+ state.itemsInstance[i].setStyle({
+ 'transform': 'translate3d('+ currentListItemData[replaceIndex].translateX + 'px, 0px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')',
+ 'z-index': currentListItemData[replaceIndex].zIndex,
+ 'opacity': currentListItemData[replaceIndex].opacity
+ })
+ state.list[i] = currentListItemData[replaceIndex]
+ }
+ }, time)
+ } else if (direction === 'vertical') {
+ // 垂直方向移动
+ var itemHeight = state.itemData.itemHeight
+ // 当前轮播移动到最上边
+ instance.setStyle({
+ 'transform': 'translate3d(0px, -'+ itemHeight + 'px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 计算当前移动需要的剩余时间
+ var time = Math.floor((itemHeight - Math.abs(touches.pageY - touchRelactive.y)) / itemHeight * 250)
+
+ setTimeout(instance, function() {
+ for (var i = list.length - 1; i >= 0; i--) {
+ var replaceIndex = i - 1 < 0 ? list.length - 1 : i - 1
+ // console.log(i);
+ // console.log(replaceIndex);
+ state.itemsInstance[i].setStyle({
+ 'transform': 'translate3d(0px, '+ currentListItemData[replaceIndex].translateY + 'px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')',
+ 'z-index': currentListItemData[replaceIndex].zIndex,
+ 'opacity': currentListItemData[replaceIndex].opacity
+ })
+ state.list[i] = currentListItemData[replaceIndex]
+ }
+ }, time)
+ }
+}
+
+// 切换到上一个轮播
+function switchPrevSwiper(newIndex, touches, instance, state) {
+ var currentIndex = state.currentIndex
+ var list = state.list
+ var direction = state.itemData.direction
+ var touchRelactive = state.touchRelactive || {x: 0, y: 0}
+
+ var currentListItemData = JSON.parse(JSON.stringify(list))
+
+ if (direction === 'horizontal') {
+ // 水平方向移动
+ var itemWidth = state.itemData.itemWidth
+ // 当前上一个轮播移动到正常位置
+ state.itemsInstance[newIndex].setStyle({
+ 'transform': 'translate3d(0px, 0px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 计算当前移动需要的剩余时间
+ var time = Math.floor((itemWidth - Math.abs(touches.pageX - touchRelactive.x)) / itemWidth * 250)
+ // 更新除当前上一个轮播外的其他轮播,向后移动一个层级
+ // 更新列表位置相关数据
+ setTimeout(instance, function() {
+ for (var i = 0; i < list.length; i++) {
+ var replaceIndex = (i + 1 > list.length - 1) ? 0 : i + 1
+ state.itemsInstance[i].setStyle({
+ 'transform': 'translate3d('+ currentListItemData[replaceIndex].translateX + 'px, 0px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')',
+ 'z-index': currentListItemData[replaceIndex].zIndex,
+ 'opacity': currentListItemData[replaceIndex].opacity
+ })
+ state.list[i] = currentListItemData[replaceIndex]
+ }
+ }, time)
+ } else if (direction === 'vertical') {
+ // 垂直方向移动
+ var itemHeight = state.itemData.itemHeight
+ // 当前上一个轮播移动到正常位置
+ state.itemsInstance[newIndex].setStyle({
+ 'transform': 'translate3d(0px, 0px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 计算当前移动需要的剩余时间
+ var time = Math.floor((itemHeight - Math.abs(touches.pageY - touchRelactive.y)) / itemHeight * 250)
+ // 更新除当前上一个轮播外的其他轮播,向后移动一个层级
+ // 更新列表位置相关数据
+ setTimeout(instance, function() {
+ for (var i = 0; i < list.length; i++) {
+ var replaceIndex = (i + 1 > list.length - 1) ? 0 : i + 1
+ state.itemsInstance[i].setStyle({
+ 'transform': 'translate3d(0px, '+ currentListItemData[replaceIndex].translateY + 'px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')',
+ 'z-index': currentListItemData[replaceIndex].zIndex,
+ 'opacity': currentListItemData[replaceIndex].opacity
+ })
+ state.list[i] = currentListItemData[replaceIndex]
+ }
+ }, time)
+ }
+}
+
+// 反转动画
+function toggleSwiperAnimation(state, add) {
+ if (!state.itemsInstance) return
+ if (add === true) {
+ state.itemsInstance.forEach(function(item, index) {
+ if (!item.hasClass('tn-stack-swiper__item__transition')) {
+ item.addClass('tn-stack-swiper__item__transition')
+ }
+ })
+ } else {
+ state.itemsInstance.forEach(function(item, index) {
+ if (item.hasClass('tn-stack-swiper__item__transition')) {
+ item.removeClass('tn-stack-swiper__item__transition')
+ }
+ })
+ }
+}
+
+// 更新数据
+var itemDataObserver = function (newVal, oldVal, ownerInstance, instance) {
+ var state = ownerInstance.getState()
+ state.itemData = newVal
+}
+
+// 列表初始化
+var listObserver = function(newVal, oldVal, ownerInstance, instance) {
+ var state = ownerInstance.getState()
+ var itemData = state.itemData
+ state.itemsInstance = ownerInstance.selectAllComponents('.tn-stack-swiper__item')
+
+ state.list = newVal || []
+
+ state.list.forEach(function(item, index) {
+ var itemInstance = state.itemsInstance[index]
+ if (item && itemInstance) {
+ if (itemData.direction === 'horizontal') {
+ itemInstance.setStyle({
+ 'transform': 'translate3d('+ item.translateX + 'px, 0px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex,
+ 'opacity': item.opacity
+ })
+ } else if (itemData.direction === 'vertical') {
+ itemInstance.setStyle({
+ 'transform': 'translate3d(0px, '+ item.translateY + 'px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex,
+ 'opacity': item.opacity
+ })
+ }
+ }
+ })
+}
+
+// 切换轮播位置
+var swiperIndexChange = function(newVal, oldVal, ownerInstance, instance) {
+ var state = ownerInstance.getState()
+ // console.log(newVal);
+ // ownerInstance.callMethod('printLog', newVal)
+ // console.log(oldVal);
+ // ownerInstance.callMethod('printLog', oldVal)
+ // 排除第一次初始化和手动切换的情况
+ if (oldVal < 0 || typeof oldVal == 'undefined' || state.currentIndex == newVal) {
+ if (oldVal < 0 || typeof oldVal == 'undefined') {
+ state.currentIndex = 0
+ }
+ return
+ }
+ state.currentIndex = newVal
+ // console.log(state.currentIndex);
+ if (newVal > oldVal || (oldVal == state.list.length - 1 && newVal == 0)) {
+ // console.log("next");
+ // state.itemsInstance.forEach(function(item, index) {
+ // item.addClass("tn-stack-swiper__item__transition")
+ // })
+ switchNextSwiper(newVal, {
+ pageX: 0
+ }, state.itemsInstance[oldVal], state)
+ } else if (newVal < oldVal || (oldVal == 0 && newVal == state.list.length - 1)) {
+ // console.log("prev");
+ }
+}
+
+// 自动轮播切换状态
+var autoplayFlagChange = function(newVal, oldVal, ownerInstance, instance) {
+ var state = ownerInstance.getState()
+
+ if (newVal === true) {
+ toggleSwiperAnimation(state, true)
+ } else {
+ toggleSwiperAnimation(state, false)
+ }
+}
+
+// 开始触摸
+var touchStart = function (event, ownerInstance) {
+ // console.log('touchStart');
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+
+ var itemData = state.itemData
+
+ // 判断是否为为当前显示的轮播
+ if (dataset.index != state.currentIndex) return
+
+ var touches = event.changedTouches[0]
+ if (!touches) return
+
+ // 记录当前滑动开始的x,y坐标
+ state.touchRelactive = {
+ x: touches.pageX,
+ y: touches.pageY
+ }
+ // 记录触摸id,用于处理多指的情况
+ state.touchId = touches.identifier
+
+ if (itemData.direction === 'horizontal') {
+ // 水平方向移动
+ // 设置左右滑动时相对偏移距离
+ state.itemAnimationWidth = itemData.itemWidth * (dataset.switchrate / 100)
+ } else if (itemData.direction === 'vertical') {
+ // 垂直方向移动
+ // 设置上下滑动时相对偏移距离
+ state.itemAnimationHeight = itemData.itemHeight * (dataset.switchrate / 100)
+ }
+
+ // 移除运动动画时间
+ toggleSwiperAnimation(state, false)
+
+ // 标记开始触摸
+ state.touching = true
+ ownerInstance.callMethod('changeTouchState', {
+ touching: true
+ })
+ // 停止执行自动轮播
+ ownerInstance.callMethod('clearAutoPlayTimer')
+}
+
+// 开始移动
+var touchMove = function (event, ownerInstance) {
+ // console.log('touchMove');
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+ var itemData = state.itemData
+
+ // 判断是否为为当前显示的轮播
+ if (dataset.index != state.currentIndex) return
+
+ // 还没开始触摸直接返回
+ if (!state.touching) return
+
+ var touches = event.changedTouches[0]
+ if (!touches) return
+
+ // 判断是否为同一个触摸点
+ if (state.touchId != touches.identifier) return
+
+ var currentTouchRelactive = {
+ x: touches.pageX,
+ y: touches.pageY
+ }
+ // 是否已经确定了移动方向
+ if (!state.direction) {
+ state.direction = decideSwiperDirection(state.touchRelactive, currentTouchRelactive, itemData.direction)
+ }
+ // console.log(decideSwiperDirection(state.touchRelactive, currentTouchRelactive));
+ updateSwiperStyle(currentTouchRelactive, instance, state)
+}
+
+// 移动结束
+var touchEnd = function (event, ownerInstance) {
+ // console.log('touchEnd');
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+ var itemData = state.itemData
+ var list = state.list
+ var touchRelactive = state.touchRelactive
+
+ // 判断是否为为当前显示的轮播
+ if (dataset.index != state.currentIndex) return
+
+ // 还没开始触摸直接返回
+ if (!state.touching) return
+
+ var touches = event.changedTouches[0]
+ if (!touches) return
+
+ // 判断是否为同一个触摸点
+ if (state.touchId != touches.identifier) return
+
+ // 添加运动动画时间
+ toggleSwiperAnimation(state, true)
+
+ if (itemData.direction === 'horizontal') {
+ // 水平方向移动
+ var itemAnimationWidth = state.itemAnimationWidth
+ // 判断时左滑还是右滑
+ // 判断是否超过自动滚动到下一页还是回滚
+ if (state.direction == 'left') {
+ if (Math.abs(touches.pageX - touchRelactive.x) < itemAnimationWidth) {
+ list.forEach(function(item, index) {
+ var itemInstance = state.itemsInstance[index]
+ if (item && itemInstance) {
+ itemInstance.setStyle({
+ 'transform': 'translate3d('+ item.translateX + 'px, 0px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex
+ })
+ }
+ })
+ } else {
+ var newIndex = state.currentIndex + 1 > list.length - 1 ? 0 : state.currentIndex + 1
+ switchNextSwiper(newIndex, touches, instance, state)
+
+ updateCurrentSwiperIndex(newIndex, ownerInstance, state)
+ }
+ } else if (state.direction == 'right') {
+ if (Math.abs(touches.pageX - touchRelactive.x) < itemAnimationWidth) {
+ // 滑动显示图片回滚
+ var preIndex = (state.currentIndex == 0) ? list.length - 1 : state.currentIndex - 1
+ state.itemsInstance[preIndex].setStyle({
+ 'transform': 'translate3d(-' + itemData.itemWidth + 'px, 0px, 0px) scale(1)',
+ 'z-index': list[state.currentIndex].zIndex + 1,
+ 'opacity': list[state.currentIndex].opacity
+ })
+ list.forEach(function(item, index) {
+ var itemInstance = state.itemsInstance[index]
+ if (item && itemInstance) {
+ itemInstance.setStyle({
+ 'transform': 'translate3d('+ item.translateX + 'px, 0px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex,
+ 'opacity': item.opacity
+ })
+ }
+ })
+ } else {
+ var newIndex = (state.currentIndex - 1 < 0) ? list.length - 1 : state.currentIndex - 1
+ switchPrevSwiper(newIndex, touches, instance, state)
+
+ updateCurrentSwiperIndex(newIndex, ownerInstance, state)
+ }
+ }
+ } else if (itemData.direction === 'vertical') {
+ // 垂直方向移动
+ var itemAnimationHeight = state.itemAnimationHeight
+ // 判断时上滑还是下滑
+ // 判断是否超过自动滚动到下一页还是回滚
+ if (state.direction == 'up') {
+ if (Math.abs(touches.pageY - touchRelactive.y) < itemAnimationHeight) {
+ list.forEach(function(item, index) {
+ var itemInstance = state.itemsInstance[index]
+ if (item && itemInstance) {
+ itemInstance.setStyle({
+ 'transform': 'translate3d(0px, '+ item.translateY + 'px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex,
+ 'opacity': item.opacity
+ })
+ }
+ })
+ } else {
+ var newIndex = state.currentIndex + 1 > list.length - 1 ? 0 : state.currentIndex + 1
+ switchNextSwiper(newIndex, touches, instance, state)
+
+ updateCurrentSwiperIndex(newIndex, ownerInstance, state)
+ }
+ } else if (state.direction == 'down') {
+ if (Math.abs(touches.pageY - touchRelactive.y) < itemAnimationHeight) {
+ // 滑动显示图片回滚
+ var preIndex = (state.currentIndex == 0) ? list.length - 1 : state.currentIndex - 1
+ state.itemsInstance[preIndex].setStyle({
+ 'transform': 'translate3d(0px, -' + itemData.itemHeight + 'px, 0px) scale(1)',
+ 'z-index': list[state.currentIndex].zIndex + 1,
+ 'opacity': list[state.currentIndex].opacity
+ })
+ list.forEach(function(item, index) {
+ var itemInstance = state.itemsInstance[index]
+ if (item && itemInstance) {
+ itemInstance.setStyle({
+ 'transform': 'translate3d(0px, '+ item.translateY + 'px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex,
+ 'opacity': item.opacity
+ })
+ }
+ })
+ } else {
+ var newIndex = (state.currentIndex - 1 < 0) ? list.length - 1 : state.currentIndex - 1
+ switchPrevSwiper(newIndex, touches, instance, state)
+
+ updateCurrentSwiperIndex(newIndex, ownerInstance, state)
+ }
+ }
+ }
+
+ // 清除对应的标志位
+ state.touchRelactive = null
+ state.touching = false
+ state.direction = null
+ state.touchId = null
+
+ ownerInstance.callMethod('changeTouchState', {
+ touching: false
+ })
+ // 重新开始执行自动轮播
+ ownerInstance.callMethod('setAutoPlay')
+}
+
+module.exports = {
+ itemDataObserver: itemDataObserver,
+ listObserver: listObserver,
+ swiperIndexChange: swiperIndexChange,
+ autoplayFlagChange: autoplayFlagChange,
+ touchStart: touchStart,
+ touchMove: touchMove,
+ touchEnd: touchEnd
+}
\ No newline at end of file
diff --git a/tuniao-ui/components/tn-stack-swiper/index.wxs b/tuniao-ui/components/tn-stack-swiper/index.wxs
new file mode 100644
index 0000000..92b8627
--- /dev/null
+++ b/tuniao-ui/components/tn-stack-swiper/index.wxs
@@ -0,0 +1,657 @@
+
+function setTimeout(instance, cb, time) {
+ if (time > 0) {
+ var s = getDate().getTime()
+ var fn = function () {
+ if (getDate().getTime() - s > time) {
+ cb && cb()
+ } else
+ instance.requestAnimationFrame(fn)
+ }
+ fn()
+ }
+ else
+ cb && cb()
+}
+
+// 判断触摸的移动方向
+function decideSwiperDirection(startTouches, currentTouches, direction) {
+ // 震动偏移容差
+ var toleranceShake = 30
+ // 移动容差
+ var toleranceTranslate = 10
+
+ if (direction === 'horizontal') {
+ // 水平方向移动
+ if (Math.abs(currentTouches.y - startTouches.y) <= toleranceShake) {
+ // console.log(currentTouches.x, startTouches.x);
+ if (Math.abs(currentTouches.x - startTouches.x) > toleranceTranslate) {
+ if (currentTouches.x - startTouches.x > 0) {
+ return 'right'
+ } else if (currentTouches.x - startTouches.x < 0) {
+ return 'left'
+ }
+ }
+ }
+ } else if (direction === 'vertical') {
+ // 垂直方向移动
+ if (Math.abs(currentTouches.x - startTouches.x) <= toleranceShake) {
+ // console.log(currentTouches.x, startTouches.x);
+ if (Math.abs(currentTouches.y - startTouches.y) > toleranceTranslate) {
+ if (currentTouches.y - startTouches.y > 0) {
+ return 'down'
+ } else if (currentTouches.y - startTouches.y < 0) {
+ return 'up'
+ }
+ }
+ }
+ }
+ return ''
+}
+
+// 更新轮播样式信息
+function updateSwiperStyle(currentTouches, instance, state) {
+ var itemData = state.itemData
+ var itemsInstance = state.itemsInstance
+ var list = state.list
+ var currentIndex = state.currentIndex
+ var touchRelactive = state.touchRelactive
+ // console.log(itemAnimationWidth);
+
+ if (itemData.direction === 'horizontal') {
+ // 水平方向
+ var itemAnimationWidth = state.itemAnimationWidth
+ // 偏移的x轴距离
+ var translateX = currentTouches.x - touchRelactive.x
+ if (currentTouches.x > itemData.windowWidth || currentTouches.x < 0) return
+ // console.log(translateX);
+ // 更新其他轮播样式
+ if (state.direction == 'left') {
+ // 设置当前激活元素的偏移量
+ instance.setStyle({
+ 'transform': 'translate3d('+ translateX + 'px, 0px, 0px)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 移动距离是否超过了指定的容器宽度
+ if (Math.abs(translateX) > itemAnimationWidth) {
+ state.itemsInstance.forEach( function(itemInstance, index) {
+ if (index != currentIndex) {
+ var preIndex = (index == 0) ? list.length - 1 : index - 1
+ var distanceRate = (Math.abs(translateX) - itemAnimationWidth) / (itemData.itemWidth - itemAnimationWidth)
+ var itemTranslateX = list[index].translateX - (list[index].translateX - list[preIndex].translateX) * distanceRate
+ var itemScale = list[index].scale + (list[preIndex].scale - list[index].scale) * distanceRate
+ var itemOpacity = list[index].opacity + (list[preIndex].opacity - list[index].opacity) * distanceRate
+ // console.log(preIndex);
+ // console.log(list[index]);
+ // console.log(distanceRate);
+ // console.log(itemTranslateX);
+ // console.log(itemScale);
+ // console.log(itemOpacity);
+ // console.log('-----------------------------------------------------------');
+ itemInstance.setStyle({
+ 'transform': 'translate3d(' + itemTranslateX + 'px, 0px, 0px) scale(' + itemScale + ')',
+ 'z-index': list[index].zIndex,
+ 'opacity': itemOpacity
+ })
+ }
+ })
+ }
+ } else if (state.direction == 'right') {
+ var preIndex = (currentIndex == 0) ? list.length - 1 : currentIndex - 1
+ // 右滑的时候把最底部的取出,并放到最高层级
+ state.itemsInstance[preIndex].setStyle({
+ 'transform': 'translate3d(-' + (itemData.itemWidth - translateX) + 'px, 0px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 当前轮播逐渐缩小
+ if (Math.abs(translateX) < itemAnimationWidth) {
+ state.itemsInstance.forEach( function(itemInstance, index) {
+ if (index != preIndex) {
+ var replaceIndex = index == list.length - 1 ? 0 : index + 1
+ var distanceRate = Math.abs(translateX) / itemAnimationWidth
+ var itemTranslateX = list[index].translateX + (list[replaceIndex].translateX - list[index].translateX) * distanceRate
+ var itemScale = list[index].scale - (list[index].scale - list[replaceIndex].scale) * distanceRate
+ var itemOpacity = list[index].opacity - (list[index].opacity - list[replaceIndex].opacity) * distanceRate
+ // console.log(preIndex);
+ // console.log(index);
+ // console.log(replaceIndex);
+ // console.log(list[index]);
+ // console.log(list[replaceIndex].translateX - list[index].translateX);
+ // console.log(distanceRate);
+ // console.log(itemTranslateX);
+ // console.log(itemScale);
+ // console.log('-----------------------------------------------------------');
+ itemInstance.setStyle({
+ 'transform': 'translate3d(' + itemTranslateX + 'px, 0px, 0px) scale(' + itemScale + ')',
+ 'z-index': list[index].zIndex,
+ 'opacity': itemOpacity
+ })
+ }
+ })
+ }
+ }
+ } else if (itemData.direction === 'vertical') {
+ // 垂直方向
+ var itemAnimationHeight = state.itemAnimationHeight
+ // 偏移的y轴距离
+ var translateY = currentTouches.y - touchRelactive.y
+ if (currentTouches.y > itemData.windowHeight || currentTouches.y < 0) return
+ // console.log(translateX);
+ // 更新其他轮播样式
+ if (state.direction == 'up') {
+ // 设置当前激活元素的偏移量
+ instance.setStyle({
+ 'transform': 'translate3d(0px, '+ translateY + 'px, 0px)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 移动距离是否超过了指定的容器宽度
+ if (Math.abs(translateY) > itemAnimationHeight) {
+ state.itemsInstance.forEach( function(itemInstance, index) {
+ if (index != currentIndex) {
+ var preIndex = (index == 0) ? list.length - 1 : index - 1
+ var distanceRate = (Math.abs(translateY) - itemAnimationHeight) / (itemData.itemHeight - itemAnimationHeight)
+ var itemTranslateY = list[index].translateY - (list[index].translateY - list[preIndex].translateY) * distanceRate
+ var itemScale = list[index].scale + (list[preIndex].scale - list[index].scale) * distanceRate
+ var itemOpacity = list[index].opacity + (list[preIndex].opacity - list[index].opacity) * distanceRate
+ // console.log(preIndex);
+ // console.log(list[index]);
+ // console.log(distanceRate);
+ // console.log(itemTranslateX);
+ // console.log(itemScale);
+ // console.log('-----------------------------------------------------------');
+ itemInstance.setStyle({
+ 'transform': 'translate3d(0px, ' + itemTranslateY + 'px, 0px) scale(' + itemScale + ')',
+ 'z-index': list[index].zIndex,
+ 'opacity': itemOpacity
+
+ })
+ }
+ })
+ }
+ } else if (state.direction == 'down') {
+ var preIndex = (currentIndex == 0) ? list.length - 1 : currentIndex - 1
+ // 下滑的时候把最底部的取出,并放到最高层级
+ state.itemsInstance[preIndex].setStyle({
+ 'transform': 'translate3d(0px, -' + (itemData.itemHeight - translateY) + 'px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 当前轮播逐渐缩小
+ if (Math.abs(translateY) < itemAnimationHeight) {
+ state.itemsInstance.forEach( function(itemInstance, index) {
+ if (index != preIndex) {
+ var replaceIndex = index == list.length - 1 ? 0 : index + 1
+ var distanceRate = Math.abs(translateY) / itemAnimationHeight
+ var itemTranslateY = list[index].translateY + (list[replaceIndex].translateY - list[index].translateY) * distanceRate
+ var itemScale = list[index].scale - (list[index].scale - list[replaceIndex].scale) * distanceRate
+ var itemOpacity = list[index].opacity - (list[index].opacity - list[replaceIndex].opacity) * distanceRate
+ // console.log(preIndex);
+ // console.log(index);
+ // console.log(replaceIndex);
+ // console.log(list[index]);
+ // console.log(list[replaceIndex].translateX - list[index].translateX);
+ // console.log(distanceRate);
+ // console.log(itemTranslateX);
+ // console.log(itemScale);
+ // console.log('-----------------------------------------------------------');
+ itemInstance.setStyle({
+ 'transform': 'translate3d(0px, ' + itemTranslateY + 'px, 0px) scale(' + itemScale + ')',
+ 'z-index': list[index].zIndex,
+ 'opacity': itemOpacity
+ })
+ }
+ })
+ }
+ }
+ }
+}
+
+// 更新当前轮播序号
+function updateCurrentSwiperIndex(index, ownerInstance, state) {
+ state.currentIndex = index
+ ownerInstance.callMethod('changeSwiperIndex', {
+ index: index
+ })
+}
+
+// 切换到下一个轮播
+function switchNextSwiper(newIndex, touches, instance, state) {
+ var currentIndex = state.currentIndex
+ var list = state.list
+ var direction = state.itemData.direction
+ var touchRelactive = state.touchRelactive || {x: 0, y: 0}
+
+ // 已经完成轮播切换
+ var currentListItemData = JSON.parse(JSON.stringify(list))
+
+ if (direction === 'horizontal') {
+ // 水平方向移动
+ var itemWidth = state.itemData.itemWidth
+ // 当前轮播移动到最左边
+ instance.setStyle({
+ 'transform': 'translate3d(-'+ itemWidth + 'px, 0px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 计算当前移动需要的剩余时间
+ var time = Math.floor((itemWidth - Math.abs(touches.pageX - touchRelactive.x)) / itemWidth * 250)
+
+ setTimeout(instance, function() {
+ for (var i = list.length - 1; i >= 0; i--) {
+ var replaceIndex = i - 1 < 0 ? list.length - 1 : i - 1
+ // console.log(i);
+ // console.log(replaceIndex);
+ state.itemsInstance[i].setStyle({
+ 'transform': 'translate3d('+ currentListItemData[replaceIndex].translateX + 'px, 0px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')',
+ 'z-index': currentListItemData[replaceIndex].zIndex,
+ 'opacity': currentListItemData[replaceIndex].opacity
+ })
+ state.list[i] = currentListItemData[replaceIndex]
+ }
+ }, time)
+ } else if (direction === 'vertical') {
+ // 垂直方向移动
+ var itemHeight = state.itemData.itemHeight
+ // 当前轮播移动到最上边
+ instance.setStyle({
+ 'transform': 'translate3d(0px, -'+ itemHeight + 'px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 计算当前移动需要的剩余时间
+ var time = Math.floor((itemHeight - Math.abs(touches.pageY - touchRelactive.y)) / itemHeight * 250)
+
+ setTimeout(instance, function() {
+ for (var i = list.length - 1; i >= 0; i--) {
+ var replaceIndex = i - 1 < 0 ? list.length - 1 : i - 1
+ // console.log(i);
+ // console.log(replaceIndex);
+ state.itemsInstance[i].setStyle({
+ 'transform': 'translate3d(0px, '+ currentListItemData[replaceIndex].translateY + 'px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')',
+ 'z-index': currentListItemData[replaceIndex].zIndex,
+ 'opacity': currentListItemData[replaceIndex].opacity
+ })
+ state.list[i] = currentListItemData[replaceIndex]
+ }
+ }, time)
+ }
+}
+
+// 切换到上一个轮播
+function switchPrevSwiper(newIndex, touches, instance, state) {
+ var currentIndex = state.currentIndex
+ var list = state.list
+ var direction = state.itemData.direction
+ var touchRelactive = state.touchRelactive || {x: 0, y: 0}
+
+ var currentListItemData = JSON.parse(JSON.stringify(list))
+
+ if (direction === 'horizontal') {
+ // 水平方向移动
+ var itemWidth = state.itemData.itemWidth
+ // 当前上一个轮播移动到正常位置
+ state.itemsInstance[newIndex].setStyle({
+ 'transform': 'translate3d(0px, 0px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 计算当前移动需要的剩余时间
+ var time = Math.floor((itemWidth - Math.abs(touches.pageX - touchRelactive.x)) / itemWidth * 250)
+ // 更新除当前上一个轮播外的其他轮播,向后移动一个层级
+ // 更新列表位置相关数据
+ setTimeout(instance, function() {
+ for (var i = 0; i < list.length; i++) {
+ var replaceIndex = (i + 1 > list.length - 1) ? 0 : i + 1
+ state.itemsInstance[i].setStyle({
+ 'transform': 'translate3d('+ currentListItemData[replaceIndex].translateX + 'px, 0px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')',
+ 'z-index': currentListItemData[replaceIndex].zIndex,
+ 'opacity': currentListItemData[replaceIndex].opacity
+ })
+ state.list[i] = currentListItemData[replaceIndex]
+ }
+ }, time)
+ } else if (direction === 'vertical') {
+ // 垂直方向移动
+ var itemHeight = state.itemData.itemHeight
+ // 当前上一个轮播移动到正常位置
+ state.itemsInstance[newIndex].setStyle({
+ 'transform': 'translate3d(0px, 0px, 0px) scale(1)',
+ 'z-index': list[currentIndex].zIndex + 1,
+ 'opacity': list[currentIndex].opacity
+ })
+ // 计算当前移动需要的剩余时间
+ var time = Math.floor((itemHeight - Math.abs(touches.pageY - touchRelactive.y)) / itemHeight * 250)
+ // 更新除当前上一个轮播外的其他轮播,向后移动一个层级
+ // 更新列表位置相关数据
+ setTimeout(instance, function() {
+ for (var i = 0; i < list.length; i++) {
+ var replaceIndex = (i + 1 > list.length - 1) ? 0 : i + 1
+ state.itemsInstance[i].setStyle({
+ 'transform': 'translate3d(0px, '+ currentListItemData[replaceIndex].translateY + 'px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')',
+ 'z-index': currentListItemData[replaceIndex].zIndex,
+ 'opacity': currentListItemData[replaceIndex].opacity
+ })
+ state.list[i] = currentListItemData[replaceIndex]
+ }
+ }, time)
+ }
+}
+
+// 反转动画
+function toggleSwiperAnimation(state, add) {
+ if (!state.itemsInstance) return
+ if (add === true) {
+ state.itemsInstance.forEach(function(item, index) {
+ if (!item.hasClass('tn-stack-swiper__item__transition')) {
+ item.addClass('tn-stack-swiper__item__transition')
+ }
+ })
+ } else {
+ state.itemsInstance.forEach(function(item, index) {
+ if (item.hasClass('tn-stack-swiper__item__transition')) {
+ item.removeClass('tn-stack-swiper__item__transition')
+ }
+ })
+ }
+}
+
+// 更新数据
+var itemDataObserver = function (newVal, oldVal, ownerInstance, instance) {
+ var state = ownerInstance.getState()
+ state.itemData = newVal
+}
+
+// 列表初始化
+var listObserver = function(newVal, oldVal, ownerInstance, instance) {
+ var state = ownerInstance.getState()
+ var itemData = state.itemData
+ state.itemsInstance = ownerInstance.selectAllComponents('.tn-stack-swiper__item')
+
+ state.list = newVal || []
+
+ state.list.forEach(function(item, index) {
+ var itemInstance = state.itemsInstance[index]
+ if (item && itemInstance) {
+ if (itemData.direction === 'horizontal') {
+ itemInstance.setStyle({
+ 'transform': 'translate3d('+ item.translateX + 'px, 0px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex,
+ 'opacity': item.opacity
+ })
+ } else if (itemData.direction === 'vertical') {
+ itemInstance.setStyle({
+ 'transform': 'translate3d(0px, '+ item.translateY + 'px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex,
+ 'opacity': item.opacity
+ })
+ }
+ }
+ })
+}
+
+// 切换轮播位置
+var swiperIndexChange = function(newVal, oldVal, ownerInstance, instance) {
+ var state = ownerInstance.getState()
+ // console.log(newVal);
+ // ownerInstance.callMethod('printLog', newVal)
+ // console.log(oldVal);
+ // ownerInstance.callMethod('printLog', oldVal)
+ // 排除第一次初始化和手动切换的情况
+ if (oldVal < 0 || typeof oldVal == 'undefined' || state.currentIndex == newVal) {
+ if (oldVal < 0 || typeof oldVal == 'undefined') {
+ state.currentIndex = 0
+ }
+ return
+ }
+ state.currentIndex = newVal
+ // console.log(state.currentIndex);
+ if (newVal > oldVal || (oldVal == state.list.length - 1 && newVal == 0)) {
+ // console.log("next");
+ // state.itemsInstance.forEach(function(item, index) {
+ // item.addClass("tn-stack-swiper__item__transition")
+ // })
+ switchNextSwiper(newVal, {
+ pageX: 0
+ }, state.itemsInstance[oldVal], state)
+ } else if (newVal < oldVal || (oldVal == 0 && newVal == state.list.length - 1)) {
+ // console.log("prev");
+ }
+}
+
+// 自动轮播切换状态
+var autoplayFlagChange = function(newVal, oldVal, ownerInstance, instance) {
+ var state = ownerInstance.getState()
+
+ if (newVal === true) {
+ toggleSwiperAnimation(state, true)
+ } else {
+ toggleSwiperAnimation(state, false)
+ }
+}
+
+// 开始触摸
+var touchStart = function (event, ownerInstance) {
+ // console.log('touchStart');
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+
+ var itemData = state.itemData
+
+ // 判断是否为为当前显示的轮播
+ if (dataset.index != state.currentIndex) return
+
+ var touches = event.changedTouches[0]
+ if (!touches) return
+
+ // 记录当前滑动开始的x,y坐标
+ state.touchRelactive = {
+ x: touches.pageX,
+ y: touches.pageY
+ }
+ // 记录触摸id,用于处理多指的情况
+ state.touchId = touches.identifier
+
+ if (itemData.direction === 'horizontal') {
+ // 水平方向移动
+ // 设置左右滑动时相对偏移距离
+ state.itemAnimationWidth = itemData.itemWidth * (dataset.switchrate / 100)
+ } else if (itemData.direction === 'vertical') {
+ // 垂直方向移动
+ // 设置上下滑动时相对偏移距离
+ state.itemAnimationHeight = itemData.itemHeight * (dataset.switchrate / 100)
+ }
+
+ // 移除运动动画时间
+ toggleSwiperAnimation(state, false)
+
+ // 标记开始触摸
+ state.touching = true
+ ownerInstance.callMethod('changeTouchState', {
+ touching: true
+ })
+ // 停止执行自动轮播
+ ownerInstance.callMethod('clearAutoPlayTimer')
+}
+
+// 开始移动
+var touchMove = function (event, ownerInstance) {
+ // console.log('touchMove');
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+ var itemData = state.itemData
+
+ // 判断是否为为当前显示的轮播
+ if (dataset.index != state.currentIndex) return
+
+ // 还没开始触摸直接返回
+ if (!state.touching) return
+
+ var touches = event.changedTouches[0]
+ if (!touches) return
+
+ // 判断是否为同一个触摸点
+ if (state.touchId != touches.identifier) return
+
+ var currentTouchRelactive = {
+ x: touches.pageX,
+ y: touches.pageY
+ }
+ // 是否已经确定了移动方向
+ if (!state.direction) {
+ state.direction = decideSwiperDirection(state.touchRelactive, currentTouchRelactive, itemData.direction)
+ }
+ // console.log(decideSwiperDirection(state.touchRelactive, currentTouchRelactive));
+ updateSwiperStyle(currentTouchRelactive, instance, state)
+}
+
+// 移动结束
+var touchEnd = function (event, ownerInstance) {
+ // console.log('touchEnd');
+ var instance = event.instance
+ var dataset = instance.getDataset()
+ var state = ownerInstance.getState()
+ var itemData = state.itemData
+ var list = state.list
+ var touchRelactive = state.touchRelactive
+
+ // 判断是否为为当前显示的轮播
+ if (dataset.index != state.currentIndex) return
+
+ // 还没开始触摸直接返回
+ if (!state.touching) return
+
+ var touches = event.changedTouches[0]
+ if (!touches) return
+
+ // 判断是否为同一个触摸点
+ if (state.touchId != touches.identifier) return
+
+ // 添加运动动画时间
+ toggleSwiperAnimation(state, true)
+
+ if (itemData.direction === 'horizontal') {
+ // 水平方向移动
+ var itemAnimationWidth = state.itemAnimationWidth
+ // 判断时左滑还是右滑
+ // 判断是否超过自动滚动到下一页还是回滚
+ if (state.direction == 'left') {
+ if (Math.abs(touches.pageX - touchRelactive.x) < itemAnimationWidth) {
+ list.forEach(function(item, index) {
+ var itemInstance = state.itemsInstance[index]
+ if (item && itemInstance) {
+ itemInstance.setStyle({
+ 'transform': 'translate3d('+ item.translateX + 'px, 0px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex
+ })
+ }
+ })
+ } else {
+ var newIndex = state.currentIndex + 1 > list.length - 1 ? 0 : state.currentIndex + 1
+ switchNextSwiper(newIndex, touches, instance, state)
+
+ updateCurrentSwiperIndex(newIndex, ownerInstance, state)
+ }
+ } else if (state.direction == 'right') {
+ if (Math.abs(touches.pageX - touchRelactive.x) < itemAnimationWidth) {
+ // 滑动显示图片回滚
+ var preIndex = (state.currentIndex == 0) ? list.length - 1 : state.currentIndex - 1
+ state.itemsInstance[preIndex].setStyle({
+ 'transform': 'translate3d(-' + itemData.itemWidth + 'px, 0px, 0px) scale(1)',
+ 'z-index': list[state.currentIndex].zIndex + 1,
+ 'opacity': list[state.currentIndex].opacity
+ })
+ list.forEach(function(item, index) {
+ var itemInstance = state.itemsInstance[index]
+ if (item && itemInstance) {
+ itemInstance.setStyle({
+ 'transform': 'translate3d('+ item.translateX + 'px, 0px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex,
+ 'opacity': item.opacity
+ })
+ }
+ })
+ } else {
+ var newIndex = (state.currentIndex - 1 < 0) ? list.length - 1 : state.currentIndex - 1
+ switchPrevSwiper(newIndex, touches, instance, state)
+
+ updateCurrentSwiperIndex(newIndex, ownerInstance, state)
+ }
+ }
+ } else if (itemData.direction === 'vertical') {
+ // 垂直方向移动
+ var itemAnimationHeight = state.itemAnimationHeight
+ // 判断时上滑还是下滑
+ // 判断是否超过自动滚动到下一页还是回滚
+ if (state.direction == 'up') {
+ if (Math.abs(touches.pageY - touchRelactive.y) < itemAnimationHeight) {
+ list.forEach(function(item, index) {
+ var itemInstance = state.itemsInstance[index]
+ if (item && itemInstance) {
+ itemInstance.setStyle({
+ 'transform': 'translate3d(0px, '+ item.translateY + 'px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex,
+ 'opacity': item.opacity
+ })
+ }
+ })
+ } else {
+ var newIndex = state.currentIndex + 1 > list.length - 1 ? 0 : state.currentIndex + 1
+ switchNextSwiper(newIndex, touches, instance, state)
+
+ updateCurrentSwiperIndex(newIndex, ownerInstance, state)
+ }
+ } else if (state.direction == 'down') {
+ if (Math.abs(touches.pageY - touchRelactive.y) < itemAnimationHeight) {
+ // 滑动显示图片回滚
+ var preIndex = (state.currentIndex == 0) ? list.length - 1 : state.currentIndex - 1
+ state.itemsInstance[preIndex].setStyle({
+ 'transform': 'translate3d(0px, -' + itemData.itemHeight + 'px, 0px) scale(1)',
+ 'z-index': list[state.currentIndex].zIndex + 1,
+ 'opacity': list[state.currentIndex].opacity
+ })
+ list.forEach(function(item, index) {
+ var itemInstance = state.itemsInstance[index]
+ if (item && itemInstance) {
+ itemInstance.setStyle({
+ 'transform': 'translate3d(0px, '+ item.translateY + 'px, 0px) scale(' + item.scale + ')',
+ 'z-index': item.zIndex,
+ 'opacity': item.opacity
+ })
+ }
+ })
+ } else {
+ var newIndex = (state.currentIndex - 1 < 0) ? list.length - 1 : state.currentIndex - 1
+ switchPrevSwiper(newIndex, touches, instance, state)
+
+ updateCurrentSwiperIndex(newIndex, ownerInstance, state)
+ }
+ }
+ }
+
+ // 清除对应的标志位
+ state.touchRelactive = null
+ state.touching = false
+ state.direction = null
+ state.touchId = null
+
+ ownerInstance.callMethod('changeTouchState', {
+ touching: false
+ })
+ // 重新开始执行自动轮播
+ ownerInstance.callMethod('setAutoPlay')
+}
+
+module.exports = {
+ itemDataObserver: itemDataObserver,
+ listObserver: listObserver,
+ swiperIndexChange: swiperIndexChange,
+ autoplayFlagChange: autoplayFlagChange,
+ touchStart: touchStart,
+ touchMove: touchMove,
+ touchEnd: touchEnd
+}
\ No newline at end of file
diff --git a/tuniao-ui/components/tn-stack-swiper/tn-stack-swiper.vue b/tuniao-ui/components/tn-stack-swiper/tn-stack-swiper.vue
new file mode 100644
index 0000000..3982da5
--- /dev/null
+++ b/tuniao-ui/components/tn-stack-swiper/tn-stack-swiper.vue
@@ -0,0 +1,284 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-steps/tn-steps.vue b/tuniao-ui/components/tn-steps/tn-steps.vue
new file mode 100644
index 0000000..e43ba61
--- /dev/null
+++ b/tuniao-ui/components/tn-steps/tn-steps.vue
@@ -0,0 +1,346 @@
+
+
+
+
+
+
+ {{ index + 1}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-sticky/tn-sticky.vue b/tuniao-ui/components/tn-sticky/tn-sticky.vue
new file mode 100644
index 0000000..a3d04e8
--- /dev/null
+++ b/tuniao-ui/components/tn-sticky/tn-sticky.vue
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-subsection/tn-subsection.vue b/tuniao-ui/components/tn-subsection/tn-subsection.vue
new file mode 100644
index 0000000..fef2dc6
--- /dev/null
+++ b/tuniao-ui/components/tn-subsection/tn-subsection.vue
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tuniao-ui/components/tn-swipe-action-item/index.wxs b/tuniao-ui/components/tn-swipe-action-item/index.wxs
new file mode 100644
index 0000000..977b970
--- /dev/null
+++ b/tuniao-ui/components/tn-swipe-action-item/index.wxs
@@ -0,0 +1,230 @@
+/**
+ * 此为wxs模块,只支持APP-VUE,微信和QQ小程序以及H5平台
+ * wxs内部不支持es6语法,变量只能使用var定义,无法使用解构,箭头函数等特性
+ */
+
+// 开始触摸
+function touchStart(event, ownerInstance) {
+ // 触发事件的组件的ComponentDescriptor实例
+ var instance = event.instance
+ // wxs内的局部变量快照,此快照是属于整个组件,在touchstart和touchmove事件中都能获取到相同的结果
+ var state = instance.getState()
+ if (state.disabled) return
+ var touches = event.touches
+ // 如果进行的是多指触控,不允许操作
+ if (touches && touches.length > 1) return
+ // 标识当前为滑动中状态
+ state.moving = true
+ // 记录触摸开始点的坐标点
+ state.startX = touches[0].pageX
+ state.startY = touches[0].pageY
+ // 记录开始触摸的时间
+ state.touchStartTime = getDate().getTime()
+
+ ownerInstance.callMethod('closeOther')
+}
+
+// 触摸滑动
+function touchMove(event, ownerInstance) {
+ // 触发事件的组件的ComponentDescriptor实例
+ var instance = event.instance
+ // wxs内的局部变量快照,此快照是属于整个组件,在touchstart和touchmove事件中都能获取到相同的结果
+ var state = instance.getState()
+ if (state.disabled || !state.moving) return
+ var touches = event.touches
+ var pageX = touches[0].pageX
+ var pageY = touches[0].pageY
+ var moveX = pageX - state.startX
+ var moveY = pageY - state.startY
+ var buttonsWidth = state.buttonsWidth
+
+ // 移动的X轴距离大于Y轴距离,也即终点与起点位置连线,与X轴夹角小于45度时,禁止页面滚动
+ if (Math.abs(moveX) > Math.abs(moveY) || Math.abs(moveX) > state.threshold) {
+ // event.preventDefault && event.preventDefault()
+ // event.stopPropagation && event.stopPropagation()
+ }
+ // 移动的Y轴距离大于X轴距离,也即终点与起点位置连线,与Y轴夹角小于45度时,认为页面时上下滑动而不是左右滑动单元格
+ if (Math.abs(moveX) < Math.abs(moveY)) return
+
+ // 限制右滑的距离,不允许内容部分往右偏移,右滑会导致X轴偏移值大于0,以此做判断
+ // 此处不能直接return,因为滑动过程中会缺失某些关键点坐标,会导致错乱,所以处理的方法是在超出后设置为0
+ if (state.status === 'open') {
+ // 在开启状态下,忽略左滑动
+ if (moveX < 0) moveX = 0
+ // 要收起菜单,最大能移动的距离为按钮的总宽度
+ if (moveX > buttonsWidth) moveX = buttonsWidth
+ // 如果是已经打开的状态,向左滑动时,移动收起菜单
+ moveSwipeAction(-buttonsWidth + moveX, instance, ownerInstance)
+ } else {
+ // 关闭状态下,忽略右滑
+ if (moveX > 0) return
+ // 滑动的距离不允许超过所有按钮的总宽度,此时只能左滑
+ // 滑动距离设置为按钮的宽度(负数)
+ if (Math.abs(moveX) > buttonsWidth) moveX = -buttonsWidth
+ // 在滑动过程中不断移动单元格内容,使其不断显示出来
+ moveSwipeAction(moveX, instance, ownerInstance)
+ }
+}
+
+// 触摸结束
+function touchEnd(event, ownerInstance) {
+ // 触发事件的组件的ComponentDescriptor实例
+ var instance = event.instance
+ // wxs内的局部变量快照,此快照是属于整个组件,在touchstart和touchmove事件中都能获取到相同的结果
+ var state = instance.getState()
+ if (!state.moving || state.disabled) return
+ var touches = event.changedTouches ? event.changedTouches[0] : {}
+ var pageX = touches.pageX
+ var pageY = touches.pageY
+ var moveX = pageX - state.startX
+ if (state.status === 'open') {
+ // 在开启状态下,忽略左滑动
+ if (moveX < 0) moveX = 0
+ // 在开启状态下,点击一下内容区域,moveX为0,也即没有移动,这是执行收起操作
+ if (moveX === 0) {
+ return closeSwipeAction(instance, ownerInstance)
+ }
+
+ // 在开启状态下,滑动距离小于阈值,则默认不关闭同时恢复原来的打开状态
+ if (Math.abs(moveX) < state.threshold) {
+ openSwipeAction(instance, ownerInstance)
+ } else {
+ // 如果滑动距离大于阈值则执行收起逻辑
+ closeSwipeAction(instance, ownerInstance)
+ }
+ } else {
+
+ // 获取手指离开的时间
+ var touchEndTime = getDate().getTime()
+ // 判断是否点击了
+ if (Math.abs(pageX - state.startX) < 5 && Math.abs(pageY - state.startY) < 5 && touchEndTime - state.touchStartTime < 100) {
+ ownerInstance.callMethod('handlerItemClick')
+ }
+
+ // 在关闭状态下,忽略右滑动
+ if (moveX > 0) return
+ if (Math.abs(moveX) < state.threshold) {
+ closeSwipeAction(instance, ownerInstance)
+ } else {
+ openSwipeAction(instance, ownerInstance)
+ }
+ }
+}
+
+// 获取过渡时间
+function getDuration(value) {
+ if (value.toString().indexOf('s') >= 0) return value
+ return value > 30 ? value + 'ms' : value + 's'
+}
+
+// 移动滑动选择器内容区域,同时显示出其隐藏的菜单
+function moveSwipeAction(moveX, instance, ownerInstance) {
+ var state = instance.getState()
+ // 获取所有按钮的实例,需要通过它去设置按钮的位移
+ var buttons = ownerInstance.selectAllComponents('.tn-swipe-action-item__right__button')
+
+ // 设置菜单内容部分的偏移
+ instance.requestAnimationFrame(function () {
+ instance.setStyle({
+ // 设置translateX的值
+ 'transition': 'none',
+ transform: 'translateX('+ moveX +'px)',
+ '-webkit-transform': 'translateX('+ moveX +'px)'
+ })
+ })
+}
+
+// 一次性展开滑动菜单
+function openSwipeAction(instance, ownerInstance) {
+ var state = instance.getState()
+ // 获取所有按钮的实例,需要通过它去设置按钮的位移
+ var buttons = ownerInstance.selectAllComponents('.tn-swipe-action-item__right__button')
+ // 处理duration单位问题
+ var duration = getDuration(state.duration)
+ // 展开过程中,是向左移动,所以x的偏移应该是负值
+ var buttonsWidth = -state.buttonsWidth
+ instance.requestAnimationFrame(function () {
+ // 设置菜单主体内容
+ instance.setStyle({
+ 'transition': 'transform ' + duration,
+ 'transform': 'translateX('+ buttonsWidth +'px)',
+ '-webkit-transform': 'translateX('+ buttonsWidth +'px)'
+ })
+ })
+ setStatus('open', instance, ownerInstance)
+}
+
+// 一次性收起滑动菜单
+function closeSwipeAction(instance, ownerInstance) {
+ var state = instance.getState()
+ // 获取所有按钮的实例,需要通过它去设置按钮的位移
+ var buttons = ownerInstance.selectAllComponents('.tn-swipe-action-item__right__button')
+ var len = buttons.length
+ // 处理duration单位问题
+ var duration = getDuration(state.duration)
+ instance.requestAnimationFrame(function () {
+ // 设置菜单主体内容
+ instance.setStyle({
+ 'transition': 'transform ' + duration,
+ 'transform': 'translateX(0px)',
+ '-webkit-transform': 'translateX(0px)'
+ })
+ // 设置各个隐藏按钮的收起状态
+ for (var i = len - 1; i >= 0; i--) {
+ buttons[i].setStyle({
+ 'transition': 'transform ' + duration,
+ 'transform': 'translateX(0px)',
+ '-webkit-transform': 'translateX(0px)'
+ })
+ }
+ })
+ setStatus('close', instance, ownerInstance)
+}
+
+// 标记菜单的当前状态,open - 打开 close - 关闭
+function setStatus(status, instance, ownerInstance) {
+ var state = instance.getState()
+ state.status = status
+ ownerInstance.callMethod('setStatus', status)
+}
+
+// status的状态发生变化
+function statusChange(newValue, oldValue, ownerInstance, instance) {
+ var state = instance.getState()
+ if (state.disabled) return
+ // 打开或关闭单元格
+ if (newValue === 'close' && state.status === 'open') {
+ closeSwipeAction(instance, ownerInstance)
+ } else if (newValue === 'open' && state.status === 'close') {
+ openSwipeAction(instance, ownerInstance)
+ }
+}
+
+// 菜单尺寸发生变化
+function sizeChange(newValue, oldValue, ownerInstance, instance) {
+ // wxs内的局部变量快照
+ var state = instance.getState()
+ state.disabled = newValue.disabled
+ state.duration = newValue.duration
+ state.show = newValue.show
+ state.threshold = newValue.threshold
+ state.buttons = newValue.buttons
+
+ if (state.buttons) {
+ var len = state.buttons.length
+ var buttonsWidth = 0
+ var buttons = newValue.buttons
+ for (var i = 0; i < len; i++) {
+ buttonsWidth += buttons[i].width
+ }
+ }
+ state.buttonsWidth = buttonsWidth
+}
+
+module.exports = {
+ touchStart: touchStart,
+ touchMove: touchMove,
+ touchEnd: touchEnd,
+ sizeChange: sizeChange,
+ statusChange: statusChange
+}
\ No newline at end of file
diff --git a/tuniao-ui/components/tn-swipe-action-item/tn-swipe-action-item.vue b/tuniao-ui/components/tn-swipe-action-item/tn-swipe-action-item.vue
new file mode 100644
index 0000000..7fd29a0
--- /dev/null
+++ b/tuniao-ui/components/tn-swipe-action-item/tn-swipe-action-item.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-swipe-action/tn-swipe-action.vue b/tuniao-ui/components/tn-swipe-action/tn-swipe-action.vue
new file mode 100644
index 0000000..1b238b4
--- /dev/null
+++ b/tuniao-ui/components/tn-swipe-action/tn-swipe-action.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-swiper/tn-swiper.vue b/tuniao-ui/components/tn-swiper/tn-swiper.vue
new file mode 100644
index 0000000..9b854fe
--- /dev/null
+++ b/tuniao-ui/components/tn-swiper/tn-swiper.vue
@@ -0,0 +1,364 @@
+
+
+
+
+
+
+
+
+ {{ item[titleName] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ swiperIndex + 1 }}/{{ list.length }}
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-switch/tn-switch.vue b/tuniao-ui/components/tn-switch/tn-switch.vue
new file mode 100644
index 0000000..ba9c419
--- /dev/null
+++ b/tuniao-ui/components/tn-switch/tn-switch.vue
@@ -0,0 +1,241 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-tabbar/tn-tabbar.vue b/tuniao-ui/components/tn-tabbar/tn-tabbar.vue
new file mode 100644
index 0000000..f310729
--- /dev/null
+++ b/tuniao-ui/components/tn-tabbar/tn-tabbar.vue
@@ -0,0 +1,549 @@
+
+ {}">
+
+
+
+
+
+
+
+
+
+
+
+ {{ $tn.number.formatNumberString(item.count) }}
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tuniao-ui/components/tn-table/tn-table.vue b/tuniao-ui/components/tn-table/tn-table.vue
new file mode 100644
index 0000000..519b178
--- /dev/null
+++ b/tuniao-ui/components/tn-table/tn-table.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-tabs-swiper/tn-tabs-swiper.vue b/tuniao-ui/components/tn-tabs-swiper/tn-tabs-swiper.vue
new file mode 100644
index 0000000..c5de9be
--- /dev/null
+++ b/tuniao-ui/components/tn-tabs-swiper/tn-tabs-swiper.vue
@@ -0,0 +1,444 @@
+
+
+
+
+
+
+
+
+ {{ item[count] || item['count']}}
+ {{ item[name] || item['name'] }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-tabs/tn-tabs.vue b/tuniao-ui/components/tn-tabs/tn-tabs.vue
new file mode 100644
index 0000000..e449a4b
--- /dev/null
+++ b/tuniao-ui/components/tn-tabs/tn-tabs.vue
@@ -0,0 +1,348 @@
+
+
+
+
+
+
+
+
+
+ {{ item[count] || item['count']}}
+ {{ item[name] || item['name'] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-tag/tn-tag.vue b/tuniao-ui/components/tn-tag/tn-tag.vue
new file mode 100644
index 0000000..180ca59
--- /dev/null
+++ b/tuniao-ui/components/tn-tag/tn-tag.vue
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-td/tn-td.vue b/tuniao-ui/components/tn-td/tn-td.vue
new file mode 100644
index 0000000..00b230f
--- /dev/null
+++ b/tuniao-ui/components/tn-td/tn-td.vue
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue b/tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue
new file mode 100644
index 0000000..5372a10
--- /dev/null
+++ b/tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue_bk b/tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue_bk
new file mode 100644
index 0000000..5372a10
--- /dev/null
+++ b/tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue_bk
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-time-line/tn-time-line.vue b/tuniao-ui/components/tn-time-line/tn-time-line.vue
new file mode 100644
index 0000000..951dd3f
--- /dev/null
+++ b/tuniao-ui/components/tn-time-line/tn-time-line.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-time-line/tn-time-line.vue_bk b/tuniao-ui/components/tn-time-line/tn-time-line.vue_bk
new file mode 100644
index 0000000..951dd3f
--- /dev/null
+++ b/tuniao-ui/components/tn-time-line/tn-time-line.vue_bk
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-tips/tn-tips.vue b/tuniao-ui/components/tn-tips/tn-tips.vue
new file mode 100644
index 0000000..3c49cd6
--- /dev/null
+++ b/tuniao-ui/components/tn-tips/tn-tips.vue
@@ -0,0 +1,240 @@
+
+
+ {{ msg }}
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-toast/tn-toast.vue b/tuniao-ui/components/tn-toast/tn-toast.vue
new file mode 100644
index 0000000..6e77b93
--- /dev/null
+++ b/tuniao-ui/components/tn-toast/tn-toast.vue
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+ {{ title }}
+ {{ content }}
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-tr/tn-tr.vue b/tuniao-ui/components/tn-tr/tn-tr.vue
new file mode 100644
index 0000000..0380511
--- /dev/null
+++ b/tuniao-ui/components/tn-tr/tn-tr.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-tree-node/tn-tree-node.vue b/tuniao-ui/components/tn-tree-node/tn-tree-node.vue
new file mode 100644
index 0000000..10f3f4d
--- /dev/null
+++ b/tuniao-ui/components/tn-tree-node/tn-tree-node.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ node.text }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-tree-view/tn-tree-view.vue b/tuniao-ui/components/tn-tree-view/tn-tree-view.vue
new file mode 100644
index 0000000..99e8c7f
--- /dev/null
+++ b/tuniao-ui/components/tn-tree-view/tn-tree-view.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-verification-code-input/tn-verification-code-input.vue b/tuniao-ui/components/tn-verification-code-input/tn-verification-code-input.vue
new file mode 100644
index 0000000..1b7a587
--- /dev/null
+++ b/tuniao-ui/components/tn-verification-code-input/tn-verification-code-input.vue
@@ -0,0 +1,324 @@
+
+
+
+
+
+
+
+
+
+
+ {{ charArr[index] ? charArr[index] : '' }}
+
+
+ {{ charArr[index] ? '●' : '' }}
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-verification-code/tn-verification-code.vue b/tuniao-ui/components/tn-verification-code/tn-verification-code.vue
new file mode 100644
index 0000000..9076ce4
--- /dev/null
+++ b/tuniao-ui/components/tn-verification-code/tn-verification-code.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/components/tn-waterfall/tn-waterfall.vue b/tuniao-ui/components/tn-waterfall/tn-waterfall.vue
new file mode 100644
index 0000000..827be0e
--- /dev/null
+++ b/tuniao-ui/components/tn-waterfall/tn-waterfall.vue
@@ -0,0 +1,165 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/tuniao-ui/iconfont.css b/tuniao-ui/iconfont.css
new file mode 100644
index 0000000..c6df848
--- /dev/null
+++ b/tuniao-ui/iconfont.css
@@ -0,0 +1,3061 @@
+@charset "UTF-8";
+
+@font-face {
+ font-family: "tuniaoFont"; /* Project id 3063751 */
+ src:
+ url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAYU0AAsAAAADlmQAAYTgAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYADWOAqM1ACKgkUBNgIkA5doC5dsAAQgBYR/B8lsW/3gkoThQnbpNkEAqL7qNgQAeqWq2+zuK8Y2j2jdhoDTlpb5jGMnmJsTXNE5ZDfY86XPtE7J/v/////fkVRkqLITJCcBACil3Vjpv++/S8lEUW2yhQEagaYXaqAMQjFlwDiVuVktKzaz3UCvx37HYR/ZCvMvNyzVPD+GSkfS4IS23ol8+1Adjp9TKfZMbvm1FiMs2Ny7zy6tY0uL7n0tS3WiuPTZnYXuyOxkthc7s/tMr7RbQySsxZ2TJ2W7ltWL7uvLI2iOYmXCCTR6Som06+LpSXT4Zsov+9vGaUZmmzEXLYZZR/qVWdqbzim5J0E6kiefpCFOBr2gbYaQDRmBjuQIkiOKEEFIRgkEIeq433DrUWxzekyCBhFFQTAwQWLYxzMQ7duUZYVepjgV6ntSO/RnhhzRtqv8FMiERjqvqbUCxt+hVnO0Yb8en3hifuLHO1LucoR/6srhfrf3+Ngwos8/+0yRafa/P9CbMHfkEUO55gBIo1SRTgaZJEvb5LAvvP/n+bX1574bL++bN8EAb2ZghoFWJNIiUokyA3B1MRszsAjdVdZF1A1xE1fXRbfK2G3t71e3SwunWb4TaoCuwdBvvPKJPT5Nfq1R1tKlBMDw/Nx6q/h/+3/E9v/G9v+IFBa0wmAb1SNVSko9bQYYgMWGhQFs6AkoSoiFNqiYp4Ke0XdYF2nc6Z2XMkBz68YqWAPbgEWxAYuit2b0YBtVI0qlB4qCijCwCqxCMAPfyFfx38g34638V7lX1a/HVRxyhhiQGBAkIVKSqWjJlhxkOe7/m1Io90IZcn1FnUIZ2y36+//fqf1b7UOpvShZ6bTDCQ9Rb5P0IhQEgYGGL3Av50de78/+3ftsgaFJJXbitLXjoF1IAQdqeO/n5/l9OS1X+unSpZYWAst8Y7iSZCWDzgCQL67r/9e4tWMNsJcok2W4xnEBEESAla6xz30BIoVMb1V5IKfdtvXBuVJAV0hBMJXsa+3tte1OeODvhkhFRmN5QpXycOCiZuyMXRIq0t2hhZf9AfjEtPD///u18+56iCbzJpoKbdwQT/jOQxWRRurzKYHz+Wqur+v/1aq3txE+RMBbwGNGBAiiJQlDZgI+qrkk1+6dw2VdkTEFxrxkYF3GsIXiVOZQ2F4+iQ+PrIUmdTW+wtoqtMTbIeBjAQgMbNs5vgkYTXWHwCA7L2QMQYumig7sasEpoCGO6UMPPgVwDG8RwdEFakP66WgQhBz6GfZkz4xlJtH2qKsX+yR+fUKaGPjpddr/6L6/mZSfmTmA7u1gsP1aKSqA7EVI2CTBbUMSNjs/6Ff6BTVcklyKSpzbUl1f29r/yumrdf5pV9YvyEkJ6NTp8YMsf0B/N5nplc7a69N1wRSWzXHIEEI7BNJqpvOfU7+XZin9/1cXbCt2mhdZlu1AIYDtg0LaN8OGwkBhmLORzt9J23uvbKv4ahAEiknaOk6Bk1IioAf+Sv++sUQoC7iauy3gCdQCpcAJYMEuhJaH/N3tnY2oYqJcvxKJ4o8im82sowJudM0CBWEBpxoYP/nnAADwvi17+yZgvLBk8rtdLlwPwlZAjbGoLJLh25hiwzQDiqQFJR6J//3/Vc2vpTT6KcWi0vwQuz17+m1KvXvvA+bhPQBDgKRMgtSYSbJIaWyR0oRkAKSkB4iSOcE+0swPTv+f8Y8z/imO5Bg3pqbYKoTcbVV6O+92TbtUtOM80WwBLPu5+S/VrGsVKLUB0QGUk3qiZD+9NEk96ZzDNabD6f9fAIlfHyDxq0iKhSIlAmB7EKg2CiW1WUCrTSU2SanbTC3LHLdGcopyyvUBSY0iOqAA9QxBOhCk7UdKE0T1JE0IYUOOV/q0Pmrn5L356OMcjt3eGI6nndscvbe97s2X424+XBbe9hP1mJmQchyPQAnh8KVClarKmZvr/z9VdRXcR3nZMmaYPWXLtur/O1K6O8D0HaCCA2gZAKVnglJigGqEG+VK0Y1K6X1kseXaxzYNntOmvm1Zxvh9a6W+zIEKtjy1Osawx+dXboTbre6ufZu6CtFPhybc4ZGhub4QydkAqQmBcIAyL8JEKVKBlJEiB10DycafJ6Tdx5hWGUxpXvQUjYnGgigIWFL7bb5V3QTr9v4xRaRIEZEgUsK2cRiidIPhGUM8ZNOedGUvlYkhHiAhwkUJ616lP40tD52r/FLExgxEJfeDzFmPIt0DUaashCUgSEI2ov3bF539g978a3F3wG8pBBIgzBCc7SHZkh0fY2o/xk7TbdwZTcwQNaCsgzvo/8Sc9XlDNP2yfkQkgpQ2A4zYsHT60HTz78zN+O8mNkWqLWSRj4hIkBCGEB5bX1afgqxSB78aQACgQAIMBCG/MCkL6A0Tl8wDJhC4bEUAXweihqkVxUBa+0CYAxFIgIBJ75MA2gkogLCJOgIAO97+5NHXkIQkAAEohsvDqaw3zgI9d3VfReLGSQC+AmsLIJjetgAAFAAwAPQylhOX8XW2APCH6HVJhTqcsMEAYAPj/W+PcHf03Z6715/feFF5r+ae7avIB93Nvjvj7r67Y89vvai+V3evIxx3+f/naghsUAyfIDdKETr+PUJzvlxv98dzu9sfjvPFcrUejsaTabvT7fWb9UalWssXiqVyNpfOJFPxRDQWjnzbvbndXrfajWatns9lsql0Mp6IxsKRq8D56dnJxeXh0XGl+vRcKu8f7O3UwPgWd599aXNjQ/3YcTVjqqorK8qLiwoL8vNycrOyMzITEuPiY61mizPdaIqSBYfYHeIgkaC2Tvg6C6z/R0Ho15kDB/cPWvsHjgw1R207HK1NsSVtTN/Qm5Gsi3aVlJbFRESGhas1wyNaVaiEx991zJXDlitYUmagfwCdQfPz9aFSyCQCEY/hzc0Ph4sni81g0hRJ8AD283G/Xa7HuW/rMk/j0HdtU1dlXmRRnKShH3iOa1umoWuqIkuiwHMsQ1MkgWMoAkMg8P/5dDzsd9vNum3qqizyLE3iKAx8z3Vsy9QNTVV4QZRkDgAhGEExnCApmmFHzsl0Nl8sV/8arU5vMJrMFqvNrlSJJVKZXCESCPk8NodLZzBZYAgUBkcgUWgMFocnEElkCpXm7+vn4enl7fOAZ4fT/R3uzBarDVFrtDq9wShXKFUvecUXCEViiVQGQjAXYLLYHCqNziBTzJIdOZCKNMSRjizwI0OrEJANMSQiCclIQQRRJCCM0KsYdX88mU87zsv1tm77vExZXpRV3bRdP6SGadmO6/lBGMX/zpcrCMEIiuEESdEMy/GCKMmKqv3d7W/c2hZlVX817XqT5X4QRnGSup+e7ZiWbqiarEg0w3K8QFI4gWIgBCPL1Xwxs2t4nJPp4OK/l7Ufxqms6qbt8iLNojixHdfzg1BU3dAUVRAlmWE5nqJJnMB+fxhBP9/n631/3ACb3WG2mAxGRK5QqtQarU4vlgiEIh4fgkEOl81iMClUGp2I9eAJKLdtLCcgsZBKOwZGD2CyeNrB5g+9Fl3S6kWDfQ8FNBriTiPca4wHTfCoKZ40w7PmPx0CLkXiShSuReNGDG7F4lgcTsTjVALOJOJcEnYlY08K9qXiQBoOpWNdBjZkYlMWtmRjWy5W5WFZPlYUYEEhFhVhSTGmlWBGKWaVYU455lVgUiWmVGFcC0xoiVGtMKY1hrXBiLYY1A5D2qNfBwzoiAKdUKgzmlWjRRc06oom3ZCnO/L1QI6eyNULWXojWx8k64sk/ZCgPxINQJyBiDcIsQYj2hDEGIpIwxBl+HFHHHckgo2aVNEQYAz8jIW/cfA1HoEmIMhEeJkEb5PhYwoyTEWmaeg0HV1mzK1MoyzwMBue5sDdXLiaBzfz4WIB1BYhxWKkWgInS+FsGRwth4MVsLcS1lbBxmpYWgMra6GyDhbWQ2kDFDZCbhNENkNoCwS2gm8beLaDawfYdoJjF5h2g2UP6PaCYR/Q9gPjAJAOAuUQzB0GwhGYOgozx0F1AjQnYewUTJyGjjP47yx+OYffzoPsAigu4qdL+O4yfrgKLddg6zrs3MA3N3HhFo7cfnacVLvQ7R563EevB+jzEK0eoc1jVHqCKk9R7hkqPEeoFyj1EmVeodZr1HmDMG9hqAbV3qHGexj5AH0fgfcJBJ+B9QUlvoLoG4p8R7EfIPkJnO9Rc5TTBXDRgThXXlxJYK40CFcWlIsJxkUE5yJDcGEhufBQnDo0pwnDDYflDoXjlHlzqvBcaAROEpHjReL4kbldUbjdUTluPhwnX46dHyePximic6wYnDR/jlnAu8B2K6adWHap2Hbi2PXi4vzicb7xOZ8EHDUhRymIIyfiSIk5QsEcsRAOXyiHScJhk3K4ZJx3cg6ZgkOl5NCpOHhqDpGGgxbGwQrnIEVw4CI5r6I4UNEc8IrBaFr8Todf6fEzA/7LiP8z4Xtm/MiCb8Xia1Z8KQ6fi8enEvCxRHwoCe9LxrtS8DYb3pSK16Xh3+x4lQMvc+J56XhRBp6ViUdl4XHZeFIOnpaLh+Xhfvl4UAHuVYg7FeFuxbidC/9UgluV4mZluFE5rleBa1XiatW4Ug0uNwaXGouLjcPf1eKv6nCheozUgPM14lxNOFsz/syNM7XgdONxqgk4WRtONBHHm4RjteNoHTjSZBxuCv5oKg7VieGm4WBdOFA39ufBvnqwt17saTp2NwO7momdzcKOZmN7c7CtudjaPGxpPja3AJtaiKEWYbDF2FgfBlqCDS3F+pZhXcuxthVY00qsbtWcrTZaYyatNanWmUbrYXEb0NcA+tuIJQ1iaUNY1CZ42oyetqC3rZjeNsxoO2a2A7Paidntwpx2Y257MK+9mN8+LGg/FnYA7R1ER8OY3CFM6Q9M7TA6O4JpHUVXx9DdcdR3Ag2dRGOn0NRpNHcG7v5ES2fR2jmM7zwmNIK2LmBif2FSf6O2i6jrEqq6jOquoKarGNM1jO06xnUDld1EebdQ0T8o6zZKu4Pi7sLVPZR0H/k9QEEPUdgjFPUY8T1BQk+R2DMk9RzJvUBKL2HrFVL7F2m9hr03cPQWzt4hvffI6AMy+4isPiG7z8jpC3L7iry+Ia7viO0HrP0HQ//D2E+Y+gVzv2FplPcZgJiBoJ0XdANDPwjvNyjCB0PE4IgcAlFDInoohAwN+TBQDAvlcFDNG+rhoRkBYSMidCRIRoZ0FMhG5f0B8wF3vuDND/zRIBgdwjEQNH+IFgDxAhE85sPaw97D2UziGvGAPj4YE8B/QgQsCD4TwXdi+C0YtIWAslBQJwFpUpAnA3pyYKYAdkrgpoL31Lz/aYBfGO+7cBAWAeIiAVsU4IsGYjFATgvUdIBMD+gM8JoR4JkAorKawm3QDMY0h/8iYFwkBIsiANHwSwz8Fgt/xMFf8fBPAnyXCD8kwU/J8FUKfJMKX6TBK5AOr0EGvAGZIMiCtyAb3oEceA9y4QPIg48gHz6BAvisEF6CIrgDiuEuKIF7oBTugzJ4AMrhIaiAR6ASHoMqeAJawFPQEp6BVvActIaD2sAhbeGwdnAEtIejoAMcAx3hOOgEJ0BnOAmq4RToAqdBVzgDusFZ0B3OgR5wHvSEC6AXXAS94RLoA5dBX7gC+sFV0B+ugQFwHQyEG2AQ3ASD4RYYAgcMhX2GwX7DIdQICDMS9hoFW42GbcbAdmNhh3FQZDzsNAF2mQi7TYI9JsNmU2CLqbDGNFhrOqwzA9abCRvMgo1mwyZzYJW5UGgerDb/cC04XAuHigwVgxWWwEpLYZllsNxyWGIFLLUSFlsFc62GedbAfGthgXWw0HpYZAPMthHm2AQzbYZZtsB0W2GGbTDZdphiB0y1E6bZBRPthkn2wKi9MME+GLEf+h2AAQdh0CEYchiGHYE+RyHQMQhyHLqdgB4nodcpaHcaOpyBTmehyzlodB6aXIBmF6HFJWh1GdpcgXpXocE1qHUd6tyAKjeh2i2ocRuK3YESd6HUPShzH8o9gAoPodIjyPcYCjyBPE8hxzPI9RwyvIBMLyHLK8j2GlK8gVRvIU0NpHsHSd5Dsg+Q6CPE+wQJPkOcLxDpK0T5BtG+Q4wfEOsnhPsFEfrvgs+u+OqG7+5474GPnnjrhSe98awPXvTFq3540B+PonAvGrdicCcWx+JwIh6nEnAmEeeScCEZl1JwJRXX0nAjHfsycCATO7KwKxt7crAlF9sC2BDEptCcYTPPM/JNo8C0C817RUYxrCqZP0uNMiMCS8oxpwLzKrGgCouqMa0GM2oxqw4T6jGpAVMaMaAJg5oxpAXDWjGiDaPaMabjpBKNY/Cfkb839bvQ58amft9cHra+p8rAKcLIZTkCicZzQy55JKhbXB4QKpPJsAlc7y5Z4hoxB6VqrwyR9RSrGeQpv90dctHGTzWK6rD+KjfL6khrGaKNA6u/WXl9D/eMa/qUlfrr9I2m9fNN7BTaWtewKaaVz2TyiOxGApWALxzYfOOKOApVDpi7aPBYB9uxZWDgbLYRHH/c0uPcira3c/dyjcQT4sbB7IttdFd+ndRSIuYuEKD5oG2lAuSkrF0gjbmjTfhJBx8yFrwVOK/gu7fmF4+loohTP82e6CoAw0mUA2DvXrok1+3u2I2mMIlu5doWglkVanyAW2FbQe41CnHOR/EaSTh7prdbFsBW0tCjX2GFA46Bp+l9JIeYVYZfzl93hwY7iuXlLWD4+Ux8w3xCT3W/OHdCR0Q2BMaL4AlaTEXFGJkHeEdZHdlfo+eT5akeLatw81W6E+k6HHeNo2QcKMj7MyrftkaYhEyHdtpXjNa2Wf3RSGp5XTWK/zKlygyLDIiRZ43jQNt4VEX8lRWm0fgVYwq24KB2bKys4FTuNhvIsZprFYB6+JIgC5YioLXyyQN0fNgLkRWTBhgYtmZtOAqjSXCpcKFESoYBlDLzimxt//8qSrrSJCkCcEPtQQtxjMCTSeMc0fssrziGq33FirHIc+56v+Cu56rYouJDNzochS7LMPMWSIwaiaHAtgaouUasxwcH4zGNwpi722MRRCE0eEGXrxHsVn7n2f18z18jsba6/ZB1uwPaZ8IIpbWfeN4GVEMUVkVzff4EZAP0TGOwOHItai0cbhiReRZAwsssY47ugjECuuj7r2M5rwmMcRwgiiGHbGjqrNX67JGUrIhory75Ai+xjGzmwgTFYjEe7QgRtNN2F4hJFbgjgH0EtN8DIGDFiwoCmXsI/ZjvwHDwxaYwjkkZFuac4uWDvmlouZxVvXah2qq/hXaUQn8WluGp49XmbkDZZhOGXvDbhAmpNpLdIN2EERINsYV0Ao6f2UONgNWoQVt82u3z9JSAcOgUSVppy9pMsCASJSeIvxGSIsIm1prB+IBZ+BlOs8LPalnI89P+RbSGc1jPp9fzdX0xKMHH3qBf37vMuUWChgFTfGZV2EsDqomYuRz2DQAetwEKOx8C+9vgYQjQaQ2Za28pslDTNm8b0P7JYnRb0LQ0L/T8zQWuxZY2HcjPNmxoWDvAjc5DdFEwQrevSyK6zQ8ANh6xNCPsGb/nGitk5AOGPkOpPuXUx1iEcuNTKfX3545oM2xDWGPMNMAaQAjBfkLF9vAqVWpjr9VvOODIOSKAgXVONdlD+6S996TIfbm32RNQAjnPSQRKuB9CHyql6UMAncAuKJwa/Tjsuy917MCm3mZEAVnaCUDUYDL0Qyx4TdKEG7AstynAr2a+AZ50u51OzPWVYXNQKeKca654HiwJE0ZEJjKyj/pRO2rhUnV1H+Je3xHVTY6qJJ+yIaySGGVuYdh7D7mkTClGNUFpNrepuxfHWgnHFGeZk8wo6ITUH5Xh2ZMcox7FsRO+xHGOOL4Uy8tpMh0+HiQBYeaQiB994vVYpHn00QwJiWl5dqwu/biYilxrNZUiL+NRMUn94DaZzfqIVYx6B0rxTikHwPOgW40yPCJqjZxg4hiRGruXirC1rDndaBXHth/Mw8w6tiUiVtUXd2ytEDNjEU2kwXR9r/JtfhRFyEkb6/RRBQ2KeghR9WII+7jbtb1Dj9jvt1ph2Mx0Qj2rkiJcdI0K2i4KdWAYaQPwGLHhQ5Gf6jFAtrcj0Vk8dWjM/GfBQQ9f9kajTbe7pE1Uc50+Gb8PuHlq/ggsW91Wq6N2J2bUUUWEqnbUEixoa72fNwNSJoqHyAkozpwKbhCjqGpGhXsBlCHAza4uARruxePds3buiCTrHhMgR+5Wy9W4RBawy/hkVYxuxooAU0E+ShUnS0NYDWV4zIlwEY3iaRSPizSKT11mBfbANwBgwxaxdgzmWmaaJxtH8QfM7IbMREbjqzBW/tav3TPOPbtoyvnYuSCRyQ8nycM+RY//EhogNXw8mz0QxO82Y8RzQpS9iREZY4wQ3rYelDiriAnFBGhTtHYOsaa4WxGcrbLsfXtzy8w3jBuDx/CMBNj3uIAAq+/Ikjg2K96WhIiX9YC0VvOQ5zpOQmbIBLF9eGEi6/VUJEK0SXysd8e7UfIbCIzL5gOgR+Jo+Ohjj2RZ9JmiENWqrwe4XaxF/d7ByL0eEbf1kE++Rc8AKX7Y0MUX9L/QfglU/zbYuZ89/mdxErqfZv+CEvs79/z6n+q5JGl1nu1UcxAZeFO4xV4D8925yCme5XLsq+JgwA6AGYiJbzVoBoBXAR4WF1lwEWGDhhROIZ0MYa8Iw4IJNP3lHZ1rNr5Bj+TmJOJSj9FqVtxKxFMe93TwPBqZ2RCjsv1EM9oypxcBpivHYc/VP4ngpiffPvZU/ozt9Hu9LnWz8N24QEBcAJQAyebERNaqmUy5aYqzITAxmhBsmq1FSrYJkrCIJhogJtjKPhxdvf0dwdsUuBZRZOpFWmYtOharFKrOQzyeUTWnaYw0O5gSMXwYDLBeYAze5soHFFBFBFWlPcDJ/SiisJXjfnizn2T77EbvQKmIhNPjAeJ0PsXymEgAKuEKaLTtBTcwowGsaCfE6+TZrom2DnG4JRp59sZ4TgwSGkbEMTgoqBw0ww4+6stEESEEM54CdF4BMFRGI7fpjIxk2JoMR5TNuGNv9vaVurDe0HyGiI3V1qZgILT7QR6JUgQBxLRmMjyma1rRQjaXIgGJFAlzwwjGcAFISYp98rZDTmjMZO79YU7rde0c7XB3TpvNtLAimeS2/OvSCzbDjfft6uaZ6xOxsFcBo5uogOkui+hi8IQ7RJcdgcumNQU4olFNsIYBrSpH0FSEAWFDMOY4oDGMAE7v66ymIk2xEP2gtt3JhIlSXSXeDiw3NreWbYLY2eU4DwJvw605aoRQID7LUUVgecUgSYDsxlqATHwtnjmVRGBwanqheC/ScsLEshEEE4tLUxFXmBIztRYXG3FlmsZ+agobxxFSLpn8/vgirL3dXgSWMxUlt419d5UEboeF0g2KY7ecoFWNtWzyPy/GNKaimcdcYzropGcuXc6EjJYU4lhPXIpv3EyHVAFtIK/xjBMTUG4yFtMswOCmjWTIcqoiqaTnnkyM/jPrpMNUMlOWpd3VOJVm6JhHu17SkEQSZ3mhkURs+KW01IMZHRmlVZoKswdEGPTWoh6w7k7v8JEqlZSllE01ARLakrEzFQT3xazOhFwHurMKRlg9VUs0Vo4QVc6z+C8pz1cFqNbP7x4NOa4wNTJX9SQad0Az8dLPXyYzNTA8JydKN0q0+SeshwcGdp4MUcOdaDcPaiADaWsp89yi4bQbYUt008Uezrw8+YByftjz/Hvm6ccF1sQp2tyWZAdzyewuJuwU4kzv2/bB+eCWrEReDZMGxHFpO49XhCCNl0tiW0yMm8jTxRl6aIjH2wFu7jnlTdUoVw+X4pn0JmIqpZj0O6m0/d5+XyeayUI+AtDKmqqqIiRS5rJYiyAWGOiFy5wFPLLfmjYiHhP3AhEfWrCyQiAtNeOaXC9uFBSABiUUq2D1MNM9FShDcG4WEjEd9za9S+fCPatXGygkIlVbeu/RBXfp4bJBasER477CGlCJg4RvqeGOSEqNvlZn+duMuw9CIIhqQHaKMRpq+Lu/eNjwibNyIp5iQi2eaY2eAY2NYZ2CAHQu1ldPk83fKr4P+AKCGM/igtF0xaVbSjLoPLAO7+Xq7BO7uljn1yXm2Sjezcleg4APpPZMh3tuacydCQNa1KTZvx4VTyd3pQuR9PjOeeiqy0IXSEEYpZELEy/YxjJqVoGwJvZgaHC9uuoKQK+wRO9bd0CDOYmWx3lCjF9d2H7dR3NqOul9CygJtPwy3IwjjbU6n2Vk1MjhgGgHowrcDrYafYz4BdDWH7/lJD9OQca2BoU5st7Bwbwp7Ab/M9HBRtRpRnp04Ls4ETZ7iAkdLRSGhh65JWYS4xQAPosWWaMPHCNSO4iYNmsLj7y9MXBm2tCOJTF7sY4o9TCsSgd1bjyroJaog1/mmy1ItLfehRnebsvSefeDPpBaSa6yI8HsI1ZorKwlg2brbq6+LXCv9hV6EDCl9tQ9GdQLQBfoDpMmpRlGm5exSEyN29OGv4TXmxV6+70t3d7Zdt15v+Do6RprTAKirqjFvgDi+htqL3iRdGpyf6p+Vg9qbHVC0h7WIDSWBfDIQg8bXIiHyY7Almzp4GQyOJHQCb9PlCqwMQSP5O8QplYhu0bf+a27ZifomSEkQjPA7kMg1hKo31cuuTrlTv1UY+AD0BUkQrcmCoIPZ7bg1MXgmmkBZZGs7MdJJ+Y38lEMGRqFXA5JfsZtK7n73WIkMQYrpz04LuQ/XoUq7CZhykYUec1Xi2Ygk1Th7aCpdlvjUKHSI9cw3ZYN/gR6TDmSWPMKhXBAp2caO0pnwssVyseNZBojPBmlKV9MVhV/bB8AYAI4NqlRbo4w6aU4wo/A8B2Ylr716tjnEzFtfeSZx+R88Pkn9AO2uGowIILUDudVISDMGaualBX30S+cn59Qam3zTtwLdWu6yjthFG0hkjWlhrcVYiiaavthEHZJa8Dr1Jg3XhRcLfqMgYC8HbrrDTD4a3PVe0TCJMhcvPEK7RX3TaxhC2cXRFIDl4nmd+OroayO7ddnixLMenl5c/Ub7ttkmn5rMTFN00TTeH31m+NvMbt5YJq2ieaa19w4E3NAYn/kJQnAGAuVXaqoU8Pxf11Fgo24Dor92+JUXdTICNUoXggePpqf9W369PifbAZ9TsaZxg9i8fNBAr1S8FYu+vOfIyRN8wsJjmmvSIhpvJiZpHyGeDpPMJr94c2T8a+htFwezXKm0fKYUM+HC3Fr6Vqylm204BPjWeNd4x3jhPGc8Z7xfvrv8xoz6E8JFnkw/jOqFyzg/WqxuIvswTX/Xj1xaO90v9V3MgXy1qGNxHo2jXCiMoAuCfRBdn46Cs3RLrCo4Dhu9pr2vRRFst71hRomVIDuzS9zE/UAPLZBmRnsfF6f2tpnLNSZaLWQbkSAoTyaQiemBpfMxz9/IKUtmXCX9VSyy2Qjc+DvYWwEv5b8FF5flhBcj33M+FvHnf5uNCC2KnUddzAYPP3J+Qa7tapvIdStoTIHn2Yd6w7/m4O7Ht5KjhoaKzFvxUTkg6J1MaXlqaBVdP27ZdiDoEz49kMGAFgZnDnsAKCGZCy/IouVP2mxsTw5Zj13/SuG9sDwUvlx1Pd6IsxC6K/QUv6BbgzUQFcD990DcjT88J1Fsojd5SdtHtQK35BeLQfYKXNF0g50sy0DXQncuN5IrUrXPyatjWzX5a6U0tPA6szOQvZla2PMVdV5hzdW9wNgmTIhHYILWYIa5jXg9K9kOnAkyT10lkLNKvmy41ewA5VckMf7EEDr/v3nFMSk5T4bo+674te1U8yl/jAWwBRRs/blTuVLz5POOWYM13YGTYHGfpOD31rLTdA58EsgOAOTErNIxaOLPJsk55Z8ONMr4PyHJY39YmtRwpsmYLXquNVzhpqLdkQlfQnPfSU3pMDrdJg0hY8pb9IVrZ47y6FNHHMczQt4H5vHoN4JG3+gXmqsyYNaM0sKv8zidh0kVlHfGDZ+fyN8bUhHmMiaUwU0W0najFicwEznvS0Uf+OHDBrhTRYyGYikpQog/pbhWHrpnjyRTNJcY+mwFToqSC7+C0zcjlmucnO0ZfQGJFot6DZvq6dcYzoioQZmZWc+oekJY6hg7/X0tq7yOM7lG2XN4W3lxH053xUFWO4m1obrFoBQ1yPoa85RQcosB8PbGHp0bCc8s6qaa8vCO/2JZCmdKIobZJBGq5hX0lekbEX2hLmBUzCYZmOz4h6dOuRuLI+IwXi7CxOmMTD2TjtXn5z4XgkD3bnzcUXAg8EMizvFKN8N3eKktWkMDdV6QPhhZ/IVi1T1yTza7c+2ubYeFUKlVSE4kOovcBId7C/dS/aLquX8Ou5hS4Wxd6rRjQc1Jbz+8PytV7JTn5uPVhbjl/uPXiPKddREeIGz9iiZDjv0z0aszexMbKrh9e8gGIUmfzLU/dxU+GL2B5ww5vzMymKP88f+29+aV78UNpxGcW2jeWFkiiPri1nEqMTuM0xhok1a95KL0lr4Dxl5ItNz0b9FWPJeWTrZ3Oan0qp4+e2wK0paF/iSw9/QyQ3SCWSwAg/M7rRskBLEGmxj/jrpQ2SyBawlc77IDDoPzSzuG2SYR4w8bX+AzdVI6izmBm7KB7x3I8wXsghT1x/Eo+xjRFz/YMk3SCu2dmPZnc6kKsP7Xd3GPX9effZ+Eb5bLDSiDJqeK0/kwLV4uDSe4ZAsmmQSx/nCE/dKwEd479SAh8Ig0Emb4Y4PKg4Qy4FhQe9+tT7qSGQtxsxKkFCq2y7Ir2wIcg9Vs72ytHPUU1/YMTi87dqfNZJYGy1BcNTuuPJhGFv1fRE0CimUm9VM1SaF7j+V9SQ5K5WKn7LQCq7sw41Msd/pl0tNtHRLhWShLx+4rSxmvWmJE/SFT6Ozc/WM8oT270ioSNU0P6s/Wh90MuliZHNXKp9cmf+8MT/FubI71Rr3Lr1IKM0ET+UleExqSYMn0YRTWouexZHILCIT+ali7C1l7AcICnGXmE/k04X5/T5TDkvNV76m6EsZLrnW860Ygh6QgFZB/AEY/BvyUIyeYVhe4//xruynuZvKHCF8UL3fVboocxHpC0CkJEOyImsZg6IYvKGuNlbhSkUVhouqhu5XaPtKRlBh+rlclffgLYNhuWOJlMNdlEF2gYtYiknOaFIMcgGmHE3e7ajzDFzjRdKKP7F5tD2itdwR3qkXTWgpk+Xu8d6WRp1UQSSYKxk4fouxJi1JDiY86zsMqa/eLzGm89Yin8TZfJqEkRiMjdp8qCl1mPkY6koKlEqODutJalaUoVAd8kv1lblPWGXPZHSzBqYdO26JGBOzXioHj4ohy7Taid5fGa/+jKfGx2seLnwHjWniHOXyE4hAF2z/8NU33ZtduCG/jNNv4uP56Bhc00eJeax96j5l/FvHCiAd6Ezk/5K09E8omPiF4kwBChjKPO7KwqDPgkjUbynOWQpSeFHLZIyY9wmCq70l1K/m3eJu4Op3X3VsbnvYY6E5tZm7wIvhKhDHvGnIUlay8M7fIuPDZWqr3rTpelJym8WicOPayZNI9T0ghbKtTGh+CBbHA7xeCyNzmIEWFU06CE3srxbib1ZJ53GmmFnt77JT1hE5LqD+ZiinuyCKQiZ83IeUKF02uzlWnQpVqKfeUoRIkZ3P3XGvPvMWEyeeu9NQIbHhl7g/zfHwNDa/OhyZq96rp0DGLASD368YX9eUI6oEEONtyztGD9UVIWChWBeoYfwxAEHadtwFtJLSvvlnhCk7vF21YwhjI6ERKtBi0mMixUoCsV9tUODWt9WGYzaHUFJkpgEP8T1lKHNpJDNwA3zcLsQo3TzoOY2FgVpCKjdHiTWhFIfN7SCD0hn2lpCMJlGuNuwFg++EUoTcuvFiK0ud2S1gGFfeJF//ixsumD63k+310dWdD88s8GJIiruT9XGsh1Puy9RLA/iX0s+tMKHlHudpsbmk3+5LTl5/BG3JWYfNoNZSdNtu85CEfGIohZo/TIMerfGEWsho8lmmi6CmKPmBl5QWFGkdmVAz7BzgDS4GV6eRxTRUibJ15Jw+2loauSmZgi46uT+4uRkKwrBj/8JNgtBCsBOTpFnRX8ayUVNWbLtTLdmM5wWNr1TNBtVyfCBd0p6pvLvJBDD+XIofGTXnukDV8fTXTs3go4n6paXL3XO7mKZqoBF+cD4pYFFgx18U8swXIxrakGRN7L4uPPB5oaGZSlsbN/GBGXQMwX+WGvi1wwQQJHNAryaGH+jDVDgmWuqkgzcBLsjtZnEBR47ujl0cgxpLYQsC2D4TDYp8FA8kAeHL0XMfP1/jpVAQcjlb2/yLivjBm16LGX54AOOnlh1CMq1Vn/C7j4Yzc1KqoD/MZ/gal6BDIipXtYwOm8/Jkkg002KaF/MFG9F0DJ2nDuOw3kvBlfobmzBH13A7c41SR+CoMixgMG1OnEFmsfQU+yXNnUSiHUJyT565BoHg4madiKbqyZSfqw2HMo4c3M1pjg4o6wWWSrMqfVsoVITx6oq5SLGmqntSqhoYCc7HWe6wLqgfYihMOjEGDbbE+aBNCHgenKSCsMjuJLMcgga8eTh+jklA8294eMXV06pt39fOIu4PPOsEo93zH62z4xnOCnviD8mhbsfo/uM87tGxF+wSabObNMjuG+9yX0pnLd3YS/jMBN+s2Peno1BNMhIr52obwnJdwTSYdV2m1zXZCKt3zc6A3mPov4XsjMEm3cbic0H1QjD6WyBcMU0L5uahVm9/HJTlRFrwG2osh8zYFVFS2sLU3N8zHm3x6TOkT7gWw84hbVJBlI76kHkYXju5jzi7O9rk7btrx4XDsMVq+YhDDcdcATM7zKfi/d3kU8TvHPdd4djfGvfh6I2AVRZzfaHodLzHNFjNCoN+ivQIEFE7yhc9h4f2Q5SwDYkJMYWBR1AQmUnsr5GGf5Hsh45KEh8ru/Ew8GVPHSaDSi4nN0/kA31vYb40cdiWLh+JQu250visFhr7Bx4MFX9Fux7U7uOT6CrUttiZ07DPX5Gkb+Y8g8a5zJ2PR9Kn2UQaBS0lxBhY9PQ0dvxqYwvZFmGe043hzUieHcA8+Fn0zAxrpqRGw/DLMIOk31tGsgtFbIyih7H0ciR3JXkxsBVHJcZ+FuxJzkZqodCKIDRCPsJCw8xNBQcMGeBdyn6Gns4I447kgEyyw/SpWld5hzQ0GduAmCcltqUhuYxOZ/q8lqvuT68IWLF5iy1Xgb+N7Z4OdXG7uQxF5lyU+4v86g56uwD2AogosR55x8ghr4pMpgenL4XxGwLVGkXPdLvo6OUowdYiMa/TNGPEML4WusbF9fyMQ4j5EoclQhQcagG4hHlWbUVHpcWnZB2SJ5GB5rjdSEU12ylb8YWMfYVi4k5ldrscdGGjC7K32fJgybPOsVRaCNdRDHDlr26dgpKuO/N7hSz9ulx1Tfb6as3udGhQ5omufIK+hX3oe81VgOnoszEcaPdZAHCq4lKxTShfMmHKoguAcS5dinBRIp7wZR7qq5ONXUSI8LegLHWT3mPUKAqZ0HC+LOkNxFs0Rj0NQy03IivHIerOipW7xB6tRtc764RK7ww7bdMHMhx7geNr77AmtwV7XABqG4JU4v0pjdvHBbG2KdAlMeClbZM1MXZr35wv1bU367OpCjVapgTrNSEilQrbtOlgD74h+1EetxK82ALywdsAWyhXrFnSrBo1p1H94lAS9GjXV51PiB1wkmSLPfhaqjGykr0WmavnlDr56KefqUwUUME0h0y47Z+pYfobLQF2CJtWT0oDwFGMw0gXcrPO4SntxsihJNgII+c8niwaI+/5M2FErDE1pmw7PIvstjfqhiCR0r6LHTKN5pB5uViY9nzmHHWulYoz/poiMdUpIa6aqAo3IvD97G6RGplLH41MHqIG51mTlvsu7asav7v6WVEEf26Uhxq7Uj6YFO0kZG0yFnR2MArTRVa+jdhOvTvbPFILu1qYubMFdAeucMelnB+n0oNtwjvAIUByost0wSYLM3cl9tbM3yuEXVtTW/86gITRRgRtyUaJQmmlAVRVk9sraKQAnUIiWwGQfSAWGsuSVaTLOUusNkdhKaj61lO/KY9HXdS8OTzX3T2b3ghhNfMAjFPJMfWzNWtdCeMczL4zkQUg12si1O9/ZTiLOWXkZ5goo2SZZM3odY3J7xSR+EkEU6ytyGPM2/G8/UV8KF0gVZUFW0pKfRxSzuNRerQ5nk5O7SL41FUBpgqcD+INGMKDm+gJIQTwdKOf5fJ7GfN3rnIAwR9yBJUhoZN9kPZGDwTamGGd5gPowXRQgJl9dHSiYUvmhQw0/KNMDV6joxF2kicCGMtxL+D3LjBdUvJf9POB2RWQtiE7jwjzdmLNHW4pAprZCzHMJr2uYDpPccFOtcm8uEAiBsu+yfUoQAzn/g7DICCgN0/WSlUGv6Md+kABMsZVGdeWOwyiAwzzOGC5GphA+Yx3DeoFIPPHyVuR33aFm17EwWPvvCMKPfi/nKGAto5vJwylBwrLpnCc9BDCfQCEHEUD/HGsnuBfNqlC9HB/cleORHmZvBDOqmcMpd60wldmwizjasvGCZKjVOHvIJpwN1afIaz7RHfpA31b1bfsQuyblUqYfIC+5Ron4u8JkXlLWPcmcp+Z6LUt27H8PG/WEurKei9DDLCy6gq5HU/n+/JD/Y7kXJN1xaxXbUTuy3d9M2NZV3uLKTs1YN0+vBnu3kzkmcl1qsei0r41AQAYTjZbIpNJu8VkFKqMMS1/DOF9LXa0CjF1GKBGkM+ODwjX4Zh7z33bdGFQkljONwQUB5BTs6blasjHeXOp3E/+pGQ0z2MA/ZSMrq9HeJ6cKBN5KbVvmMw6w5v2Kai6jQvT6p8ANUMuQ8TrzhuQxhidAqIHSUnt93jrLvFMmXEwfNckEjzpMr6ac9OoAMbzU8wqv8TYEY/nAXSjPvvac8l8Myz+EuNvaGcz9W9A/UhOcLbPGkb4hFVMGj44sShe34an6tvfsif8cyR395s/2Y+/f+mGegA/UoP06ZfVAjNoqF6vDlbyaEJSvHU8v7+G/mdksn3NTvpG+YKrKmgcDQynlzKrhxuVtlwQzae5Ruq4N04RaXUwAmWwYY7gDNZDeDbjYhZZYtqHmtVRFSK6OSaR27Mvn0ZVgoDKIEodxuHBvbprZBbRP0UTVht4qNg80QbLew6yjPUA7Gl/giY09T9lZ3Z4UVn9rVqImYKwlTDHLQmq4f4G8ClzgWRlvSRqSqg70ZF0RCILgvG2IMNVQHHhZi1TK5LJovyNaqqsQnnlaHMCVMXu78okI2EtxQQnpHUR0yEiGOOjxIUHKfJfFH8ZUkbAoR88fCJdilvWI1nIxapFkMvYvlum0+3wcv0bc5tb0ohkMASgi5CWamPatkOwl6KiurApdLtocG1SpDpJ6JC1sEjtBahvNKrtrKJamFpDVSEIVUETVNAswevmzFVNzdQX0ok44nrIUBHnK/F0pelLteL8F7Re0c7cC+fyq+W0Yrnuzh3GsNP8/tCqaR+740Cd+wH3Ior199Qb6dr3gA37ZWZhfRuQp+/5k6I/q8WKj0aJx4ww2ZUBDIqPd0A6fPSTQx7fXBUHTPiInEVmPEqmnp9/TOoTObOWw8EHKdhCtIQOO+q3ueXoVLMnSlJHYtakfDYVv1exLS09eNgV/1N4RJNrUU0lP1WOmFgNtfs/CuzyOlfOvUed12eLxSSO59NpqHLXu4vbD58+1k+WwDbAHlCyPGxtdvEqBVeTEbYCJ46vVTYPk9+ijw2DEjunAClDguAog1owR50xbfReRy6fZZcsdc4g9AIYPov4jzOYsRmkZkJbMmxu3IpUQtibwdp9hQoA7yTmtgJbLnP0C41f0KosJ9icRsk/wSyUjqEKDEpmnHv4+GWEG1CKZKiic0U4gSWFlFp7h7Z6G0K06T2ISNaEHSQTrcHEvwmI35P2vXC2QfJBzMZYTpAED9C5SAtkQk5iMyIQR+0noPvQVWUqack9oCBlzufF/pKCdEsjAW5MXokvoVwcB17hXP9vo2k7dqfNdi0wQSql1783vme/EmIVjM6iMa76MkWluFbWGNa99Wpyt2Q/fLvVdQoIWJCuvYR6S76Ck3SF4UNQckPrB7p5/bii4FGqikDx75XDW0XrwVsdgS8LOajC5ZfQZsVTbuqzwnUS9aRLrlcPG5w7TdliSNTZE8yypMvDNIAHZJmi8YFGRSqQhgeBQKStEdBEnR+W1Fgbe2azcNJAUsUW0dvfFqjQ5IwBdRjSfDyt2sdv8uAcxGl51fs6JMySfyAFa5x9uXWI3ZQlTyQORiuSU2AT6XwXiL1tcYoOtg2LCyTWQmM4sSxdMeNVQFdHOoeGn/yKojOIY4gVdirz8VjIfA3IoVJIGdB0KCi8D9yE2XcpaZU3HdBYPpdE/c6g3D2cVDPtHChvJVvYKQHgNd8oi3z1LV/zxrI3jqqRgAFajnucfwsGTjHl/0GHJy3ae0zhXyDTX0kYsZOtrI+l0pXeD8DGAkXiUyl0jLTKZVL7sZW7SCtdmHRB49RBn5DBMV7uDG8sI4Yj8A2KfjNK8qfBkcJw9gJEifoJPZidw9oqnv4QXvzhLgV8PT1VHMllkfZ9luAf7fGx/qcZz+mjNKN5se3C2AacKAUhh++2kUzXK5kAIn4kp7oDTomB3t4t9VHdK+C43J+wdnvuWAszmc8qhU/Fth3+SC4vPyiLQMZJPLpvyeK2xDnbbe96cYdMuVMBJly9KExOMeF9Nsj7wKFSQiB+VnJO1M8X/vJydjrVhNfa5Jd8a6uhYubvLUCfukAy9sdwXDjHTThNY/bHT/eEapQFffDYKGjt0mpX+YBA8ceqH135Jx+C9T3VrSj7p9sh3DQ2+fFgK+vE0Gc64WqgYPr0+FTP7Njp6/qQjo5NZiyOj8K9tEPaWjxnsiF2B9AHaUJ6c/VgVU/5d3BJYPxNATkTfZXQI/jMXSkj/CJWaSQDvpBC5qoB14StE7368nv3NHf38gOkfPN4q5gybp296/Jl3j7Zlg5HUSMmezJiNwp891yjOWCkeIwuDXqY1rkUcWsXuoVByT+5OVnNPqOQVXW+WYl9NI3oxepUQNbyJ1jyRc2MX87zSPLDLcm8/GajUHJuV/q8bD0DUWfqkMDSndPD68WJI2HVf66H3jdhJTdLsDgaK7AHUA627wGdpI/MqweYecJ2Sd+E12REpq8DbqbTIwfOeS29kxXnjCZFm3t4eBvxEeJhKd0xG8eLMndHypYjfVaJ/Ri4zESruzaVfimEjfqrbIPbHdCdfPCepBhXE3afZ7iC0YqnTh0hc+K6PmnKGJ08nZzH82JJlBAOjBiSv63zD0j+gfk6/JdDquEucq45HN3OOhRdUs73S4s6AkNVyr8shUf1cEquEhA+q1x8VaSfzgVx5vkh4DHjDhOLSU/GZifv41R5HeOgKt1WE2R5sFkRqzQ3Tb48Q11O8ezumqsz28U45Ps+dYdQtua+pDx76D6lbLrg1yuQ0otRaxpfp4BLm/hRXJQvmcQ8S1K4L/Fxyc9wv5MqNviitTCR7zP39fjyM6upYsbexH2nb+dNW+ljCB9xjS82kYp1mW1wQbQ6t2AxJTs2djCJdJmVtgaOWUl0QYEq7MPLl2M2kE8IMYlYARiIja7fDjUCbqvX0znkFMiELtOQETbZ//BlTLkcYmtWjTqdJbLrQRxLU022RSqLI9lahry0dWs0TMr1JYfpZPwZCIbbTwM6iAS3beZwuqGynX9brdDUMovhiqhYb6RB0j+XKUMsnjEUqgC4oVSJyr+ZZGQP2Hs9JLBrPPsROOOJ9yGB77xHM5K6nUz4JsibqS7+gdXZwxlQvNtmyeEKc1ubiYE/ThDiMxMQQjGbWIyrOJ/2BMBwFgGpIrHTtBMM2U0Myzj7i3BcusyyKrJv8oo9hhAsJPHvQWY1XUVZjeUWsUAJPcUog8U+BmjZopdtgGB4klnU5oWDKKnpTDKfkIpSlK5DDJHqWhaCdEi/Hp5iSs7vsZAfQENLIfSMnhMRnJOMM6xfcXEkJ3IykimAspytqKH2KRXoUETd8PZWQp46NfVPNfKTvrTn9aM5cTqp/Ex30pGk6E2XLYQ5cURaZfKv/3YFEq1za2J/DTGoYftbO514wDycwaEfQp/qa7OBSevJYlP2kUFegy7CZSnF8wz74y6Q2pe6as+20HkK2thNL5bmdW2rS6KXq06HpqoMbl/V0PYdglHpSqfYsK8eXVZ3Z+snQtI6th++32XxsKtTTXlr4TAaSInkfFOyC76yc6p9XOEd372Q203AgfAGVj7Kb58MSBtonO6+HUXbj5eF3f9wHUqaNfTVSl9hOweUbQws2TJmE9uJ3REF4T6fSU0uEIFN1ih0qc9XRfsAesDgzygmDJNRkxsnn0fqVihMoU+sSHaEKPFU4j5+0uZxGfGzJ4FZmfGmxx/7L6ymsxp8loHJ7FQqHddrie6t0tVIZFFv1uOTGoKUs37wx/jjVIyUVSkMcHavnAU8Z+99brfAMWHFkb3Lbg8bS+XT1rC6BEwS62mpRmq9/zLL2KsqondmBWN2yHSsQiD5ZtRJo+IO8gZKtPFYiRH5iBCEoe++29Kt0FS641mdYIArvfdBUI/EaxcI9+X7rlpxWA+tFzjtWUvxYcppnxQSWMnHuhpbnGLPwWSFsgPIGA7WXZmeR1cKDOhhu0Q7o48piu2uK8NRXoogisJJ2Ow4tT5yNcM6TMKkdMsMPEQExYVVBC7TzBEplBAg0tQCCzK3C9SQAPbDrJdYu3w71PuyQjouHSh88TwCXZ3w4fVCYHoBp/JqJMsAwdjBMqohTCujJJhWg0IueVvREFIHg9eLdWYqhERJDAx2T3vE+reuz5qFtTCHEfcUKQ/QwKs9bOpIF3kA1KsD3sDBWnl//1FdPimGgQ8KzPXezchMO7bSH37Wc/dKUZjTiuYBIm992jQO5+ttAdG/gGnwsDseKeSKid5VTAIE3bFdQJ0tkMnAbmtKN/cws37IkZ5/r4P3YuFQG9PY9fUea5PFYy2A+edTvJFcBuP5f4mHvSxW6+reWHXm2uynZUU747fDbdKcuFN07pSSRRg6fa5m+qoEvrmF5MLElgOl9TtvqrNOnatSiw5ert8mFK0PE2JNuQEHm6hrTG0gEzvNIjrwHEG7WUSY+xM0wqMb0LQ2sKrMdfnq9F7Kh/ItYfWUyV9CiwqfKR+OdRO/4Wt2rTF0m88v4TFJEjYHh6mIJ/Is8WPNFr+wTw2djzMg0c7jjFDFoKQia89i9CEQ0aXG0JKqDMMFELOitX6iiJKj7R2hfWUo0sZ47GZNI083cUJfHs5wO0tQGKkpFndLp2mO0Nmy5M4xvAiFgC1zP/2VryomwxF2NoPezUGWlI9MY2Z8B5/4uTgPGGdV4nxcsclm1xwhwzeznikXgyn2vctgISqf6zhz2bQiVsl979E+wlwzFuRup4ikEdLXWxYzfNxx5BPqkkseXo2NtPWETov1zD6S14qYDI+TXMWjiaxj9MV0xtqr1Bpr1mZ/kRpyaKnQbSUpGhJuBN5tfDu6HHp/0PXM0PBu7kMMWx+inLVvXX71r9iBWsKF9uDVw41T/cWRrOIC8JJ9mS2gtYkgO1/I/s+xd1I92lXAFqLuFV08UPoMqcw6nMlwjjXpxtwjzhdDCDF8Zp/h+1KiGp5aWWC1fkrpwDVRGdQNB7AFv6BGT0SuMwOicUM/PuP7f0Nofe/w/zDc7s2eibyRbfPNXQ/7f3CedVCHqAkuFKYNLKUWKenjYJUpnk9n35o4T785XI97zHga6ucyaHUIsCX4Oc8tokbzY+7bemaDs11hbfjA1JanXFnMCq9VXUGcMLPA9SLZMjg0lEHw04eVLGK2RHHXMOUOD13wH98DAHhXnPJ5d4QzzPWBikTRwMYA8iEm3e1Y6Gzsy5G7pvrBt3t3ovk8ornCNRtJQ093QiRFYdMB5enYTmuxnCXd5DA0ZSZlZaL0Z+xlL5fDE7JX8OhnyLlIahm7RLrPt/rIF6CRqTGUxPC1/dZMR7DLwc88R4POXF4AsrQWOqpH3kAdcAxbVXaBLAlKLPNPKa0e8BlStAxWFCd16+t2z/E5WtGsxHbwQbXsXGzZglbDFVTkn8wxTbv+pOZfwyC4Mc3tRWe58pFVXbZGF/uycoEtotxUWheoS7N21z0lzYS8qQkOmGTSfC+y66jLDM12LU2eo0XgZW8YEhY8MFEir7UaVcI+B4BN5k+HjvL+CwJIuGO66uBUQhBxJ2ZOd65+o+rSh/4ziwbUfmYDTMQbVP5hbmrsf5Sa93Z754M3W5u23FFscCgvnxFd7c3Udo4L0pLAlx26VJzJb66wtadQSqYfqSIwr7DItF3ufX20Y/Mwsrn7bL8vrwIIBaxlh5J1MEWDjk7RLy4vRFcj+n5hM8R4KLPIr9MAj/IXJFcNKeCgEfpbk0m/sYFIr7GDvZm5dPDn7vPUyKb0m8NBWD1eVzrIPms4BTMqUE0zku3d6swKFU36lMvsTZ8KZvWCmmv3FO1qZFvMmbuYcszRI8uAU7wYTllVDBciJ5IA5h2Akrq+UVFRQ/AutFBAba5ijyonJJPWwHKnnE7+UbbFCP/54NmCehikdLmc/0//CjSz8twezpdGn1CERO4m2lpO+kXOH1EbnC+PXccYF9QtiY4Gf0rvKM9mcn769GOi1b8TtGU89bP4Is9P5sXxW4xMStGzih0UP0f9VhK2bRFwxE6dYmpF1QL6X2Tb0p24LPfta4MWtswNrMy+lGbrsu48Iso3Xklty8S88T79ZLdQNnjpCDwH9oaZaaZ9jxabxBqFUmu2524dQmyAnvlqEclaezrnU6zc3JBOQHNH1toRL15z2YzHsib8x32RXJBllCyo96+6nDX8pfcQUv6YDYdyEEFsfWz9SDZA8RGTMjYQfIwYAyvYIVwSMjDOMQseWrub9xULUF0ViO/D60kuUAgerorhVOr2g2rnuaXOZKyaNzZuywIpdzi+LB45DcnruVW5m2l535E/TlA01rhIVKkEdGLyZbKYXtu0tNINTlpbaZWG6GMLKqLyDQJXRy+3uGKDTCWo+jFFacmhrmieNuzkwOOlg86wvVS0gmdazge10BQw5Z/9uz1Dk977aRTrR5k4q80sJKqxWPHCM1F63BpyPTSsygkp3CqT0wSVXoN8SUggjtC4BFH/1UEHO9WDVbAq3bMgn+mwEFR9Eghyx5q0HwQzZ/unUGKXFZZpiLRWAalm/h5lE0Ch5DBCgztfgLfbtV984LzZqv703UKqelf7529JK0wydei9TQFjB3q5NFbmlEl4nvZyzzKHEX3wRJ4jzY2tlXeZbFU5Z2RzjzPIYlRLvVsTOXnXqlQnK4JxnlnMFSkZx76z8ufzJd4yq4VGpYsdvrOLU0rBpXBuUH9e/aBRWD9DRLHHTMgKs/NNyHL++TWeBRZ1N8/wwEQHJ6V++fRa7B7uk5hQim8aGHLvUH6h3LRZmoGSGUP+jqVcnvxZFRh4EwOm1bf2vdqZ4fOJ/r/2Rc5p7oJnB8FROEUYUSpR6/zQGUNa5/mzkT1IdOXcyNmVKUkscdk46fkkKUlx+v3RkbNYMbdp4fxUxvJYPKms/P7gsD6SPrWCI7rlIc1U10PPXDhznJ3Lf+etah7PHf2RYTjedxZbfvm7ahayvLWlOVc5IwxrNEwA3QUgAmhh9GN4yiRTUOw+FGwwEZxIDpFEtwk12jnAzb/yMAKFZtyiM2MjKrZSbBs72Kn4+Ci7E9icSO9EIQDVsRggjaLvZAAxH8Fo+vm2KUyS2NdYIQHAhJgLislgaZAjC+qDGRvk3WLSKLvGydyjUVfRbMpG7lCYABTJhQGCTikWiJClgvWsl4/CZ6+lGWeUQpjbHTscqEQyEp86OFIQVxJXfpEtrCvW5cLGwsLxrvQURx2/SqFqBpJH40KyPq7t+tkfYvOk1JtV7kyuTlcXStl7KZkbEFt9hfnoJLSEfx3yuMwqs7thVzSgd5s7axz29i9Ldzmb3/zTt75qYMtlOI9vkJPvkh7TlKnOx8H6m+dLK5PCYB8ZOZPr2tI+lNSJzo7LpZfdmP9V16RJjazmQ7ObU+eQr8rSHzwUCMSx6ay6Ej5/aca8SY9pdcX5SZjHbTv3z4+Hj2uTr/ffMvOao8iZfKGuFJbPLZ5RF+bcwkYE5jdcqtBO7GOpoGmP674rHXdMUY86uoybaWjrs9azqauZq7KjHqX6UMpKXklf4YbS3aw6Paq58j3fPfgUdSU82ToZD3IPgw9Ry6Irxqn2KctMbPRtgHLWdZW+7nydcKRr/ddwee1cC0sLYykve99//2AUWfcVdrB4UPOVB4EHh+JSeXY8UDjwm1xooKg1dh55r0ZlPiRxF0cj0AHEe8QRhBOmbT702We0B/aIda4+2ypWLW3LKa1iZY++WDd/59gdLHFuWRw3ZBarnUswz3wXanKOIY2hN2duG/4vwYBKqqSoo1Rv9VYUqDF8E25GGoawH1bZbQhFI4K14Q2RxxsFEDzkg9C9zlc21LK6Rfd7hm3zmyhhThrTEYUNK2AaZqguAICIo8flRJioAsO/Cz4/yHzUk4pbR2ujyaHXK9UOCtxLIpM1pPo9I0qAXLVV6OgSTnZbnDt1KkwfK2q9acLaqfLRF2JQFNjF7VpN1mDVCUG6UTFZ/V6AAYL61suAefs4jEYgVQrp7iclbSfAZSvDUiGuYhv4TPBRlEkVtwtM0R7Ek0vGfHc06p8mn2bCbqw3cITNTkF5c2b1O0exz1LoA+/mqzi532O6Nbt2Lp04YqdmQpWPkeqqsaIGxSirRvBIUpw50khHrT/BRmE2rUd0ZGjQhHL1NeKdygJCrMauoGL2EY+50zx5pmC5BgSdNehm5bhzyS8BifQ+Gmx3je05zPqELddYAv9u3Db/KIjnIlm3ruIRkOGYzdx3xt7lNBDwvjbQaw3gonSbUizxOpLRdOeSmA2c+K49ahv83lrMZdrG7Bb/j39MOJmu00GuDorVh2mi0Sn9OQORrVk0TMqc5yL+tJF2MRUcdOlkAHDO/kaFA8KZg4C1uYmFtxEGmwe1tio+x5iziUmsQUodVSApdwb0QN2b8IucU55BP1jHn5d5Rja8n+Pi7fQqio+P63QU4LNRibKjV2PDp0rKoWIdDzgXEwVB+ugoDUe5HposRk82xeTbbCmPs5plbH+nbsJ80vaszdmSp52nZ2ggTJUnLmIrPBpt3tRIvmhQvERa2G8R6LYCMxpr5AumesO4Hq0opMrWYt9wtb3JNpoj97KOgAqbBcuVQ27G+JPSx4+q9iF7KqXnHbIZa16C57brmvrOPKcnx1NHbn8lMgCHrHT0wndS7ZMktW0XeObw8BfkLeXI9AvE4qa+/psMGbe7a9jktMcK4nVdOZw5411WU6wWprYsQNxuqESnADFd0bXV5Mj2dCHdYgINj/ToW1NxqgkbFhuJLOdvaglRTrX3LTtf5t1l1ZCgOrUzoUCSXVU47APQm2qLJiDIanblIajPbo+rlLCl6BL9hAemc8474lItnNuZecu6/sOhQU7V9C5AZbR/dzZKKrIgXihB2N4zUbdZaXa4CIh5zvsgPh91LZXKTh6pTKjhZkCZjfhb9pSBV7xVXdqGnVcyb17t/On9/c1Fp/v/ncw+/Gv0wMoUiM6SbVW7LWzmblUTkTtmrokH3IY6qiM3Z33dp3yjs/aaVHQeWrrhMpD5wV1D1Fi9+vIndTVmjYdCTQ9AjL2eky5nVp+asdIvAkpvMEIjyntZba68mMxJUVKhKL/fkSwPc689KTQuAKHmUH4IGL96kIHOas9KOeDWZeVY0KUC32KTn2VYKYOdlO3pLlEDgJyW1azOaJWCW/tOyg1M2oLDUVDSzCJeJqeyq25xOJ1ukUvOLah7+1pkc1CUnlnnLRo66P2Udzu8nY+SK3NbpZ2hbiKOlJXkiL4NJrPzpa+K7Edt4hzFymjzSDP2154MabMWfLznq67pZ1q8YL+8V2emC8NrTw56Ev0qSo6CzDt+3K8dC/9QOQ5543KFLjqgN+1RLXns9HZeJAR7AlklEmqHU9mkaSijOLXG5M4zRM2qFp9EjwWF6ZraP8c++HruF69lFaJYIpbYdX200JGhh9M3zBfQzibKgI2pd6sHmbCJobIQ9M7H7cnNn1+8v68Xn6Ka7Gfa78vXeriEmK/ujDOZH/nDQHxAfLRaeIKPxve83gNiwZfH70gp+LDjoHX+fnR51MutDaxoZ1ZVv/yjh0GE+f3lrtvM+YSbv3IlDWDz1FKBXd2t3Dj7/Xu+NEOlQ5Wttwo9Mm+X9YYuy3DuggPIoNT1z1b7rxV9/9J599hu2ExuHd15+eTPl+3WyUWJGZRrYFIVjncjTmr3RO/FtijMuWJJbipQAeJ9ADGwFSXLri8S5T2OYXWj8BagS/+tCH8iriRu3gGmpFUmY6OmfE+cvyKclU7yu8mm/qfLqXorlVuohvSEZgihfva1RPmQdD7sBQgL02eSOfb+LT0BOHvaI0GJIOveecprOQ8w4CRqDwYPuuQiIL/ACul1xEhXdDdiHpiyW2AZu9Lf8QTpypfGEnnHlmNC9VS6iHrCndc/t2YLbOW1J0SmhMsr0TDOS0FyiHNw8sKw0sBkn+8q1+xNzOODBgrl51eScuVoHJbWoFdPBN+gH9ikHoyxvl9o0b1g8ODYySmb9KEG8Fo9mffR1uZbT4E1OOMljH21hS5KtfA9Lh0WTMJOjff2E83WjRIv/lVadQwLurtKNRejydx5PE2FUBzpvNty5T/6qu+3vaW91RW2P0G10Hy/e8dGsbDB7HwB1+OsP4JIZpsBdwEsBLoYBgEmL9YuhWL4PSYFel5syUmcKWyvNlLnmcTmwKIrzd/TTk9dkgFM13v0sK4/l35F6AGJmavamAJwgoyYPJ+fjtAnTphmLFnDzt7wHYvWpbhxwtxbUlHnEkL1caiS9YCEoS/r1GEC1m3bWtTSuhXbMtVwSZnzgXktZPHZUw8gx4OIxJXGVpxcJGZynRouzDn9p0ey8xhOD2WKTrMblsXU6U808ZzWiH7AzovJCVYoqUoLIWFVKrX8Z7Y2tawrL796ViU34iMlx/vX3SIV4WD16PDfmdCZ2ISTr70BbAF38QxxzUwSqGhBYprJloSL+ikosSbvBJ0q+MBSgbQ71BnZsdxI9QzecvIu5P52yxE20aRIbRFtXfeQNnC87fcgxzskNgGkznP9Z5Vtkd87nVOBB9m/jTHULcKhi3YSxKiB2h2J/WeIlVe0DT0+WF1wMcJOiZXhbfymVIPoVz4aTpyLUxqQJW2ul6Wa8x2t3xPpjAlBMf9iWaZu9ZT/eRlSnm6x4oIQiOTe3keIyiyn3XQ68LDmXCcxMZXOD0POunlr47jwKxNhStkDsj0eHA8LoDEJS9ngptyvpP2WxQs/FAMTFmJKzUBYoCypPpWI9lyjKx/HV3e1UNOEx5HvWYQwO1lEWfQGLaJ4fq+ilWYkvaU4WA+FKx+AmV3RpGDJqJYgavKgqLzGzAMqV0YK/GuOGlTe6tf6fEMzjfe9F1CuAjCy2CyvE36qeswLpBnf+bFbtxEaX8D65eMKb3duwNFUikr9kLDJjv6zTsSIeXgO+IL6Z5vKM5Cs0VDmWTsLYgooQCyDAqaLkQZc42UpBpaxEe5tAobK2plT4Yk/xdd31I+k0+NJIXpcSqVj5BtlNcr+lhh7IYbt4PImUqZ+qfNujooyWd6YSRH0XrIpo4YzNCR51eEcXZVlwkPWclN4cZ4+qWwdxdIuKa5BLjwGlZYt75ImPEPXFLVHoMKYL7flWs+c61Q658+2Les0S8vPjjIEEv0nxU29MRqdKoyHSxfL/7hKZe1daUChV5jJXTTN8osmbetsW6ruLFpPn/Od+Ow6P86XLtw4c2KjZ8+bz5TRPYHpqnH2YHnjcu2bC7cW+r4cYyBMlBOpQh4ht1/ezxNiuUO30o2RyYxQrOW3J4OyJfmb4+49it7jZECE0tq0565ZKwpFJT8jQQPTzcClLK2UNwedzlHzY6r6bcSBPMPQn9JX3rlo6AkucZTdgz7mbt1nHRsIsdNgZHuOaPp+m5SDQpBLRqcdCWMWpQfLQ9dTPv75DA/HwmQOE3Z+UJZb44pNg+s1jpfTX+DEJC3rLB70rw+WRpOWZoKhRqU41tEzpZ4MbVYHuYXrA2ayTabmElHbk+zIrH5EOEttNih2GTLGF71cINKEX0apybvidNJYhChySDlEnDXdbMo/b+AtPzx/79XTBuIT7SULYXhb7DKgAJiX9q4AJSXUzr1VHXnExRKIT9zRCL1EH5rzH9TK9Ln9d3ZzNVOOqEsh3DCYYJHqoZPNpwRS+gq9zORrzNpQCIetxcT2c/gEg/MGcLTGrAUHPAZXKrXpw0WZiYRSZNmG1GJrZOxKpB5oBcJdxSZ58+pK/PJSOgGkwmoYg2SS6IbkBfFwmLSgniNqn1YM+euEJsi6czVz3/T3DvMBjfeCJut+YtViOHByX/qkSofV8nh7YH5Al+Fu/QK4M2ujo0RZIflsRzKw9oF4SVecWksbpBkcO55mukMVm/xqujA7cP7zrhu4nD+bmhlu4e4KI8mLa2S+UTRP+bUa/5xVOBIX8hV3TPlBnJoNGm570TtutJPwDtKI6nZqgNMSEYfIJui69bV7zjZqGS4QRR7O9UAnytTs9km7hjJgFiahF9uoT7K23peUgZcjMg8HWvD7CdwLFy43kjt8Foe5mXQ1MGcPIhAYYOlaP06/lFAjVZCfhiBSJUh38h4lZTD8BmodwAN2QwzFqV4rUWGe3CCE8Rlh7RnJROI5HYZ2dln5AKfiWZYW4TCd8FISmzFRX56HRUUXl3GAnyNT9iXA/aRODGvsFkkRhpAUY6UkM0JGcoZjX68vWoZKATlfBdqc2461j8uThixnnRLBMuoaW0DSQZP73wD9Ek54kdYihJZYIvLAWZwCFVWsbZd/uyE1+q4Zto5PRtO07Y2fSVR7K7NlnUZqG3oXO4n01RhpllgdTDKntPK6ufM3mA4+EqGnCPfC8rsy3FPMNyNgz975a5/c1q2a5mtxGfXNfCIKk+4VqpxfWjYkVMZgSXdmEbyfzton8evCgS5r2vJ1fRXiYBcDNebYC4XToubO+xtYSkMOJWUXECxYxVzRKCNZ4VTs4gNvO9gjgKeRCxAqEMN+6aqusJuHrkVTDSFJMuP1XDAVtwDR30R46ercbfNNri++ubY+s/GqNBVbmSA8qYWB7SaIrTAK8cksB1iS1Jcsj58LeTGmJ316H27H2HhBbi7Y1b/heA70nX3KR6FKwYk1+RVWs40JVrR8qc4xKvJxMLLUjN6ucfPH8kg7fhBj9UdTDw2irrqhC/+ZOFmdBDTtFmI9rb481BfNgyRPxc4exsLC3NZQ+PkKgC5bfgEhqwtG1md2Lk5fosAnCrc2i3hMycCl7HiNSm7hr0e3+XpFdTP79bpth9Qis2CEWmzBugiek5U9/EBnMpGHBMJsMVuZq4y8/2rvuCbEfH9Sefnhsqyw9o+x/fT/kkRvL919evLk6PLFq+P2J/d20c5EYSgv3I2VzNr2PnXsn+kYiIMFEXUFaXWyVnpl+Er4g50dVQKZHZPtYla8CMynCBxCKQx6L1dIRWlKc2akrazpnzeQMqJ7kSfIpv1o8GT36n0LiSoKgNZA3ZZz0ZL4T5L7F3uXKKKuirvZQOidWao0MozsF0zuJb0yr9yTCDuCrR+zF2snfORXxoaxfPnFXXNGwuYbiWhe0Br49yJdW2qZoUCNA5uwEAjG/lDnKifOq7hXzg+1VOxF8J0DJ3rCuWhwPKcsbioMnSaTsq/6Jmty1nJvRRn5q9C7kJEqZS3ImNWK0SRZvsrvv6P0jiuzzoqxnyvkRHa7SWt4DVpKadKss46sN99bu4+jTdqRedePwFwCXRSWkH0ejC1Sa9rUxonzcEPHPr4nHMYop2qskB62hjZIe2CrioVBHTHv9LihzYF8ylO6/WGEMOQckWP0J4zFUAWaEj3pzmBzMUpxzAwhL99qwOLYJXhfU8eZTJARNMapQ9BKNGoYwnzM2XK25hmDm8mnFENbbNp9W9pGZihu+tNX0FAJYcBzZS/mxmVWeZcRCliYhiYTCnUFtA7tSk44hl0wQzupy4WEY+VI9L3LQ5JESgjp0+sYEpxD2HcUV8eOxAcxJN+7Jv3XC/SWzLlQ7kcLIejSN4uK7BcR0jgH4X0AY7HwqJ92BSmPalAayji+sNtiWuuJ0kRkws8I6/OETXVjhSCQZZhcsiAG7qL5aVUEwzilEuhthHISMWEX+un4TyGWtK8lixUAK9z8T7APdrX6DkLdQXU+dHTPLIet/UTVsFJrQU5+X9EQJVXsPLYFs1PO81Pfpi4W5WaP6H8Nn8bU8faQrwCvCRG8C6/RVnwggNrl6YUnxVqssKefUnZ2An7v0WU114LNdpEL5wdNREJvE7FzdlM7CQpaDkOQkxqtU72BM0vF/JtfrDAWgajGwa73YQwvJOGgt9dd7W2Y2FKgrtJOTzaSxhM7u+iCLQDU8AjURyMUbyUBPoiI4EUtIFsKamvTXlDJjptdJdnuRg3R+nxY6/UrwJkr1tSb1ulj2LTv4YjROlzfTIfGfLw23ixuCPsbGK8DCiQQFEjCsmkmKweNgGq8A9/ULxKoUe2caCbWqjFsgbcW/IBLH1YfE8dGxgbVUloZURpyFNlxCAHdQmhmei/iZ01HxlvXA2y/lTpLaXezudyRtDoA4wCQW9VbHGNrkf1hxNqCdw9+Z0DCNuJhoL1kNP08HwQsGUDQuR4NUSkb06Og2cY2/AtSRtRXvXwBECLBioDNzASf8NMMAIm8Gyy0f1ToQwg6UEOEjLXJ+d/mzFVUI+HZpcAjmcIgKMRKYVfl35qocv643BZoptQ5aoNDFbZd5qVn0vNr+UqYNzF1bE4EDjsF4m2tqIKDB14m/xEn18RJ6TGJhMfBh9j/VOlZ6NrcPX9C+8YFJXHfCAmrka2933GXo8jdXCDid+CIm5IqPvLW1hE/jHmK5SBb+yQ2X8uvnmJ8nhKd1g67UTV8MKQoU3B0C28I0hJZnWO/hQGIrsc30cB3zARV7f5xZa/75ga87LaKxM/8n9UcvcZbiHcIEeZWlQkHWGTujKwL9zZB7DNdFINOk5VIxWy+NWaK5zzPOzkmfWmwWvWWC7ZjVwy2qt7miaz5OUKTOjKgC2UWaT25dDJ600b+JOObhS4TkjIaR2drMQpkN2qqjlkA9sMl2YU/uhtc9rso7Nz4vG94nysS9lG1FW6nykPHgo24aa5yGg2IT/qhgtMmdv/cQMqKFXGO/mtd83K1RkU4YcraD+TZtrzzOWB5L7AHJDLBU9SP+y9Vi+Wj2anDE7aWBUUffFF0VhGYQK3Xm2vlisXFLmPe+Wlmup/wdoHNqBKGXuPZWX0kbJ30fjX3UNbg0Qz3+vJoRrTV8hagD5AfvtO0NFXh27rQVvmOUEzoqqoJla5SRmJ0AR2a0CX3l5KpghHwj8Lg8qc5FxjCpLvr4TrzHhbpysUJnvQZ5zKVLZ8/UJzbEmIS631AgipMTeKxlCXIGSaLe/kw6JmAz2T+CGfX4/6rkRwxHxCXIppQmGRLnU4FMa9DMz1R1FXZnpc9vMBzNVY9ccZ7Kg8/PGFgo85FYsbrgFIrMHwAlDrxVWRTWLuR34+OyQWR73dmAbhWY/fdSsJa2/Wda+abqSWuTTdQz/gjIvQowOn+kvplYv6IimlGRmMmiUDHC5AltILYdobr7Iv9F5YtoIZhmuwoEBFEPRe4WQDgikpBZrGv2sL1PS+5L1hnPCZnnW+aG6jwiK0D23hzywXTwY7fzd3GBIsIBVcon67UndyGd+tMrmyKWKJ1/9zrmUYwm6j3VRPdWAUMdDxlkbLIBRxpDiIrHWyiaDAMYhe8xfFvZ59oL9gdJTHLiVkZBXfeh6q3UU+KmMQqpdUyD5U3gePjdIjPenLlhEQgNjzN9T3sVwfWcUo9MDODjdkuYyurLdrVH1f/oy9l33umNOahhevv3OokH2PDDZPX6DogY0tsC6FOX0WhhG5PiA0grOdOuyJpR5TiI0Njoq2RXAGnhwJsH2P6I1qAJu6AE6VECOdyH7w6eQ+Kp4f+8rmJf2GxuxcMcsKsfWVFJ5CNTHmHSDyErY7DnjMC/C5Xs/iS/BJ0/7xeh0Kocy/uwBY4fUcsaQU+sLIExaWDV6dCLETxhL+xf9xLIXPXFxb4zvqNqQmhaFrke1MYygI3oQBQXABXYriwzPD4IEFse+sypUZ30b6mlJOqH0J4VNlWySlop+9QLDjfuhZTc5TOHnJ9u2t1a7ikN+euij1PRgjygToFK7vxeIVkt1SghrsdyAZ/mpY2eIeST4Y7QYUYWU+EuqR0mO0qTjZRAzEo8vGeszIitmEkywz/rtjZoqkNVnNXS+sTZxj2NP4ZepD1lvfLZ9ohhFhdU1OmbwXkRgKLf4GNhdMXRayvD8l60qYmg1tljZCt8A4cTxLpgbrwQAwzATFX2MDxbjYjzz6h+VGsYDFnSkX6sgR6Dvnfebzd9aR/kHr1tEycY8wYoA8+xK6lflrm3VC3imB5DyntuK7ZMD+51t7LxOZNY0Y+lZtLezPVeK7Lw1RfORG6085il/Qx8Q3mNiMfi3c/5TcTcru1W+bIch8Gitbg6cfyThiOjkiUlGDu9ZFipxjyNrkimA+MND2PnuEeMY5ghJSUBVV+/8KI9i9cEb8L2FyvkzaYTnnwJ8K1dV4Squy6Ncwa4KBxZyFkaK9Ly9OdNaTDznLX09cmgE9yyDc+dhqzSdxeq8ICCOVjwexva2H2QOxeIHnx+A81GHNNwaVB3phLQw/uV+IZsd0bwVJZCZbHoj1fzvakrdUiF5phcsA+RWrGyqrGZNfanjoKLKtWoZrbxmpWpS2ZRw+KLZud64Gj+aGoHEMTutZIs1iRKvjulaW/WeYdWeGSNqBSszx7AQ1nTlMkflh7MI1dcTlYBxPnAAecXrMZlrfLyehfnmQG+sHagzq4FPngbuAdLAp/kEZmFsIv7GH6k1iu9phLUUPRws6PhAVBvVxjSVfmpTEEAPFvDLZ45hfQzB17+NAngoxsId1ovWjqQhC91ginOFvPTaAVcMYeJcs8Cg8RRM+DU7w9UmDwkWtjq2HBfSVN3JPCsflsjYWSHOjUws6aXcBe29jByvtL2q2XlPVtLcPrE+1NHJrvfeEhEobx/QuYkse9bDhFVX2b74EzSqPuHVKeawGLJfd1ofkSfJ7ie307B/uY5yZ0gP6jo835FS7aYujYGCJBRKUcRcGnhKxI7Gq5OCpDW9cD46fRLW1zI5MZkNKR9iJZsJ6gO62FM5+q1q7l9p3DFaZKq0l/YtZuoDPwg5Kn7hZ6eGfSyyw70WvIbDo1tgUf+ZMjm1sTfz4Kxzr3J9k8CVOdW4E/SPC7ySq+2DexUaF1pVqmPbvfVie/w+Wu9E6ry8gE+FDhiqIqvhEVax0gguLwhLW1FcJGK11ke6kBs/v/IHKzyzmNSx8GnUpldzMDxAiT0bdGnReZpG9m+BG9HRZXYB03mtNdM6BGXOYGNN75KOpg8Njz8snEzYEy6+vTmZb7eUQznXX20CC7FoyuYxPxWzTYzFH7l9Ok7s4MT1KuT+SbTJPErgtNQquYdjbL6cAN0q4vf6hbk4NIZyEMiZmqXQVqQ0l41nx5Pqm9DWxAHtOkmeWW6OlXKyEtyJ5XpHZ8P1RT4+y6ItGI+OILO8H8sr1ATnappOlmLMpkHhhHGSOzBIqpSIS0wCvZvLLxSk55hFKdjryVnMirj8bSQpyaykiJohOArMdMFp4Ykai9UtS1B2RpDwRgyS65E9WZtsJMcX3S1Yn70XwvunxEfspQLRltLGQktybVTo/tT7cyB7aOS/MW0dreBMRnDX7nNiv9stxzip8jIDjVE75M9m7ZWFmM0GEKTYjUIf9nRU0/IstzPELSZH9czjIzPE208JfjsYfBavRftYQNeWb1O6p9db4fb4luE8q6eUwRRqh87OuCg43QopMaAeWylp1FMCrTxGg01pjNzpeSVdT6gjkMHEhi8SwVq/j5r2TDx3YAQz4hOhG0pyzSR+Ua59GJpgUaaeqTQo19g42AX63k+91XVpVxaPA3HyD0OZ9k1Gnk4oFlCBD2Ff0TfoYpTOH3s8zHtZgshrTrvKCsnHNm/xawTSLwHGQq9ZRCpBY3WFnWGLJpVHIyIF/0V9cuoUGfytahAhu6nQA3yVTLM3lXxzxxg+Jq7+OwXsJZryBU8et2EcFE3qo965licu9AcE6Be0vapAVguZg8rcAan3C/rmXXygqNV/Ze4VOAM/vKSf8kF9jzTtOfo6oTTQhB3RdtkSVzhuJrPc7UnKJAXo83Nac0eFvO1JxKD/ITge+kKLXDqVxFwKf1l83QwUbiFD8v5qO9HmfJnJnXqe+pOY2pT/qZpvv5OoWvnOIw2rrfEViV1Dy9VKXnieHas1eBcj84M+wvx8mRqH3oJV/F7PcQ4hU6CslnraWnS9+I1yyoMNI/BHobb4Dg9FWLP2N3fy3G+1mb55vZdxKqcJX2K3ZMN4lcL7+0A2u1Mcw1Mdh4sN4sU7qo2OGVG7nX9bNKMY5y/cLviS7kNUyat2XBsxfGfYv5jkx0c1yHU4YmnSQp7rUoFK5vP/SpajJMQQ27WaoRa0415KJ56sG/ZxlVhkRX98WfIAYSj7fbWn3sMm+/11F/RrORCLGxmFD+/Ir9v3xqD///6EJBByaH/ZQCabe8Afa9GFgqPtpcGPxYuzVAwfx8DFx3dtSaZVIjVYpJyoUJ/U5r3PGtxUE50ZKjzFQlfCyCS3ID2tKlLjuNkqtisnYQqksI5tLr2J82P1u/HtOYlNj0r3HrWu3SW4BY9tWNNJcL4l/O/VIE9neljG1/cvrW4z8+fmnkH/tcjePosz5iVexp/+ERWcEuUEynrEDdugrWHb+q880Bik44U423MSYh7DxcwkObFSItilTbfTAshdeuTJpDHx4Ox9/HxOkE9GfXK0axBKGQ7HDcC9+URubSveCYvZVgw5fYuXcvZhoZgJgNS4m5vBB7hlx0BQK+SfUXSRr7x5r4L6J3V/EXafMoLOdSMdmmxTHIVsx1Ze6+Gx0CarmFbjgPjKaMN2vwm9a/l+HdyDESXXt/B1N55mzcEeGVOz3yXHhTt4RXzVRE2VPFyTobJjpYhbxiGyVGGIUc/0XfgsZOkCALrn4H9hi7XRt0HoEMJ7FnNZJD7UBX5yTiyHfA+QV24bQjeAhBGLhByl4rttygilGI9OcVdj6fRj/ZNpTkvd7mGLRHNKtNwsPNEoW3pDQaNxR+drNJsafognj49irOWil6j9/7XBbdydmefVpatkszO7hqg1neHNd5pbWzGaQy3qZB6qucTVdyFa52L7aH/tetKlvE4PbkOqo9pPUTOhepdareOKrfITsiSlafhiUsVU/T1q2p7xoeij+hr8MyplatpTWMr8zOdvhFeAXG/mVQWsNbfBH+EXZ3PYY38gx6fA0Xd1hZwY68BUjrSKJi8pdYO+HIDotV8K4QjXm3v4H260134ZO/9mHPU9xd/TD2bGTnQ2+M7Yxur7AzSX+uFCfxWf30ui84VpxtW4FYVAPErwEVpzyASIIcAWk/+ApWM56u7GRbztsL1H+hJbmuX5FNVhk7BrfLfqq8WzxlwflFg+k79ZzT14f8w/yeaMAn46LJfLjKLiorsrM8R0iIzmIEPPTtW7SyR02TxQSkDRm5wVjAgkzC6f0l99vym6+7b1qZZZIC3tY+jNixKTkmtpDKjAFrrbc1d7kVb1tP8UOEp4SnrXmKPhaeY0afkhpBqXP2HHSOjOIyDjkQMGyidmX7HI21+AASTyw8HmbDbY9biRyP9bDC/Ebss6vZh/hSt2glUxGM0iv/O8SFrgCFIeZQe/iRim4+wKStMGAIt/fYq5enRJlHcfGrmLayPH1GVnYMOkzIhW4rvbI/zLcT3st6lzx50xzt7HPwTL42how97ZGsFzfCg/TZIj/M9KJTRMq80XFZ6nyXW/OMqqA9KobJj87NA3zQR+15P6HGGuMU6o02/5h5yev65VHilEnFXi9x+C9e5JL99KM1BzsS11+IFUbQd1RRVUwoWVmyRcu0HoQrLrFyQ4MBkjI13/I9S26M/hLGhYnMhZfppZijsrXhKI1AdJuF7L+WasjpzAE3ciVtKR4R6lpsS+pVBD3BHQ9a3udYqiF6TYWnAunz/w0OLbirOFpPO0JgRIj9/chLTj3WXpX61Ooze8UEZ7qXgnyV86RwJN/w5i3xWeAXSqrWKRCx504WnCKKQqmbRI9bBgc9HflIPp6xmJW8koiwEq/vpBsF5lQiBEkMArt76h/XvIjYSsETFFhq6ORXwJNIVTJ2VLhApRnoTjG3u/RjxuA0UfYq3odAN0wL6iBt0bj1+oVerfV2/3Y77WckVBkIXhgSk83lkman7LzEXfxxE233x4EuQpvPiv7LVh8svW+cWkyKYmv6zcd1mRhXdh8ZLu9jd4OnL7pyGiZT5k2I93E/GeErgg1npneA7GYMHAvf7057zCvFV8PATe4jyoSaaL/ER5d99wNE6LY7uw56dOGcP4wELgErCke4GxaBP8V8GT3/8OL5Tgfn4o6e3JXEUlEo1F/ryuxdECB0Th2k3Vc/m13i9M8UU9H8bsG0FymvbkskFlQMXy22SraO9W8NsvTkR761U1lFCJqv33uMdXi60FZNsrZrks7HoM4rupYRS+B6gHA1wz/myLRANS7ZzG4GQByfIeX2AHOKuF1GKK/yxgniiGsNDpyFbwVbkhv0Issqg2hxGwtyMEHUXVxJNMtUJObPBTpFaYbeAjaivKnsps0B56BTZEs4pJBf2eIALsNLrGxsoY8Tcw0jkZCNKWMtbFFthrdyVHUSdFRkKuY0+2nnxroYENqH2kUOdIKayoCrbNwa9HSxdXro4XZ1ZYVpnDUOjX9I/ngmEP12gTDpj8K1GpgVdTehr08nXizeDxlLkrhQZdsFPjO3VJ4pkFRJFl5sEjxFLP1sfoptDHeWOxMIstKVtzpntYcwOrvSCPg8pDdCyGbRRRdBs5JdLJU53euLSPjPd4zf/ykweJmsAdcvNwyjo56IWzbaGCQUj5tk/4Mdg2Kl8El2rigU3rGvRcAobJzt1bVfDTejY0xocwGaV//TWk58W8y7tpCq2wxelbR81fae09kwOe6LXL5TJ1eRfDcywGGJbRc9lXpPk32kfJyYJ+Zyd61AqTmwEQxZ+ejhJHRIILbBvcbvpnSD+gpuldtd1KfvBN9x1UF+OFPec4IBoC6Pj1CA++4vfUJaFTahtKUWUmsB5TGdzojGE1kTZRHvkc+g4u1/OgNbtHFIF30t4laRbFNwq2kEk+zhjw1xjF9d2kPKT4xPwCmRSTukqah0TXAOly3B3E4zQ0NnsT0FkpJfeGMHrQcQsQAPFZhHBjEKHya4T4IxBZdTYjkS9T3VvbZW/iOOUManUCjuowOc86hSE0mp2QevZi/HqOnhYsa+yruzD3tWWaB4+sIqFOp8edKTqiKHyLkKA2I4PpSjHMT8fpm7myvhC3iR6cCMn2JW+pIii36Umuhe3qZPTf9egs42EQJ+KFJMCf6odr5sVLzrxbV8lGzH24i43YfjIVZu8GRIUZgmz2COZjshLo7jwvy3yWJeHt/u1fBLxc+YDcmzk15dc8caXuqOLOi3ZqTtFNc5HBrBF868D0aMckZdZyrcWO0TXU4hI/FJXqdvfBGvh9ow6YKjO+J1eJNQ3VLvHuItP7lPd2X+e60DNSlzbSAXUSvx5yMs5OiQ5pNGUrKSqDv1Ko/I8BuzIuTMs10VDP5UWRPgWzqSF4sZWriQy9zXnfUDTqibuCumIyBKiKFOtyrnIzKw1VP7/LQV3oqUO5aKR6tqGdd1hdKNH9Y4ghAwuMbbwfXD8XfRh0i6WEFVlYexLXRTkqBBTBggsZb8/ikLpsjfVSoVg1WZz7J4jbXLVqIqSMyn9vP7w/GGQ6YK0MVZJaYHRGuYWXzBaxRG7IDHjMos+BcxPXvkt87I5KKRPwegzfGy8rlH7aNVRllbVBAKGDbbEUjxQ7Qg1TpfRSxVIqoz6zNm0oLjkhHpwAfzbaet5QioQ+N28WADSxq90s0SqofoDcsM8wgfEqtksf3hoFgaSCkX1nvhlQFsXdkiXz2oOuNKwS68PacM55XfgEnuOZIia49N2WHJ+bsHrHxqNkPb2rANzslIK5KiuKadBr1QRRnYE+25oP4/+iAs4vGAhvkxrB8EP7Tlmv/QdvbnuZuspxDbV2WLn8CMjV/OpfogTFiOOBJmo/lKPh4bNXW7RJoxuKUWikSS493/BgvNktnytQg/9biXbVNS++xKUdjNJbGGoKbAfKswfMUJMuiVeV114q96ZkE3lN7Or+1xuwqqGCqTgCbn/BWZ90iP9EKJAb4EBC37KCBgyjARzUIJrTwS2luVe3wqVNeWcn3+I+2sLEHdkjYMEPw8HCQb7wGLiCO7xPnpGabDw2B9sMEugaqmtwWaipX7/n14AHHUW9jzAfMlW320spcoc0CD4Hvch86qUySzSO0ywjWUWNmcEMhQeNjswtWKZgXzXAS9rCTkegoWMzPHHogVLMlR0NroQTVNm2coK03p3tM1sVyRJA00FeWkEi4KUhwH2Vfm7+HO1+T/jvpVRhdXCtTEJzW0+bCbRifIGYQzJb2jbCYUhglTY3MKORlMRoSz47Fcr1wdc9VVdo0lf0VqcHLOvr3FyNRngTZACEybgdjS+3I1LZjLEoawqvNBy3pYxh5hylxm5GbCdEeObs2KmW4P50OZezDKF1qJ7AzjZ7hsKo6egudPVJf3b5SppsNZibTI0dX5IxV67e6hOMUwiSzLGPNSNJ+k9GA5SjsBVO/UAWUnscyDLVSyfV9ETGW/AYckrmxug3PAsHLLGWwvoBj2JeeXQoEKiJf8gjUj/Uk4EjG8M5I8HqrIYgJenbBPJKXTCyD3Zj0C8AjPtKAU2ehkDOuTanw32RwkbwCWzqvhmJgF5UcxxL70qt0pGSgucgmz34p9GwsjDChxBC2iBfqouDUmOLDEl+tNS38bSnyB1oZghW4VjjAUUrDO2+pKIg0Jj9j0LeKGcTXYKW01jKnh0WOXHs5YQGX6pDE0wcme6Q8WXF4tEBYEQX4WHJpmgKLFES2Rh+JfWbrqGlOLXvwa00Ee06tDuJh9amVZpFYFbuTPpMmDU5ahE1BnEYdLl+Ows4+rAiY2G0Iz1+DsDLmqhhxPwo3rLOwE1d3JhogdtJ5TDTMGek2k+OP0WLViX6kXpXKMV9QJogwSzTotxbrrbcoyZxjaundFhZ7FM/akKHsCglnvCn/klbu16AhvMUtUWjhoeOT0UrYkeTvcKDEnSyFGuucMgU1ciEWZqhpiM7kTZgycTNqu41E4SIO2T84160mIAAhenrwJRIdkqUzJW9FZkFFuhKJ5mSw/sOl/gbCBNaS6WpHc0RE7C5Xfz+TEjWh5Evo8hQT0ruEI4HtD5jo9N87tX3rZxOI+IatQcQY1h+IBr9gfSwtHIbyoD2iWOZ79VO7Nr+nRC1BDXNCl0MR+XAVjUxXTxCO+1dURs890tCec68dCzeCvylPgXrUhKaLn7E/88i8MaQ5H/WUs9Wb4T5JYIh6RzWRclKLrrc2PpqPUbD+gMble9wf3alPjfX+aH0lmi4VxOa5OPxK+1Rf0l0YYagjYcwtTkYst3J3sxiUEiPChoCq7sshn0dzT0SI5bpbTheYY7nUAMdtbCl0EaALg0h+6Q3n9udz6DqeDYH+1IkRZosTBdMsUrNFHt+B7u32n0PDYjZKf0jJjCI/sjuyBnSheVX6XDcmwEQ6RVasJ343T2WiW/1SEc5IWXZKPE7JV/9VujcbQMP1DMK6mQ/g3LCQbvlzi/QEs++H5UMMVMv/nixhEzhX6cUqCCMjRUCQA3JY+zXup6kDkmo1HTIv9eykjOWRbOa1xxsYIFttUNBNhY4aOwhalzLYY3nxH+qB5DW1e5G3QVdLPc2FiqlAFFBDtTm8b3TDhTECAGbn5FmToR5GQF2ofXxEwYr1tVbr7x/JiX21PnSIWWbU5oldhzCk5XZ6DC9uzXhqGoBDtXA4CEeL3tdK5Fw28GJ4OVPqdDJcZzdNOJqdC4tL+1jQrf2ZHM3zLVnOZrQz+IUWbr/1Zylw5vR+I8MXl2Ej/tKv96+b3U0az1yjsjqoWXAvLU8k9q2fFJlE0B4zYmxjuNAa0TCrGH2gJ6qSajs7gg72jT+3GnDME/VME/F6O+2C/ihOoO4iROO1uLHB85bMINvlyHD6XsppCu/0v/jkqvtoqVrygcloOixQSi2SULEkJzm8CVUJiWP4jnwbFLaCOj9CdbQXraocUfXv0R21DCSBOtxfKj974Jy1CMYudJ2fl/I00jj5dwoTKIO7qGjQGab/HX0huJO+Y7Zp9xhjIT8FXJ3LMJ+d3+iUU3oDzVJ3kuG9z9YUIO1ubvI4A58wIXDMhCDXyA0H7XF+aXtPtho8+FZ7XJrczo49HdGdKolfh4+Ti55j6+5+MYjm79v2AIx2XLilN5dJUAYX2sMODNJX1bE0JskONDTJwp0aoi3lSNQJr1EM/FzWE152tR5IRjuHAGSuSFMFvw4rm1suLpjETY/Xzl1QO/RRZ1EgGP07ALOaMRGYcH896jGHhkXMQcZipzNhkYXhFyBPi52VmxjxNg8fO0B2JbfiTI6EJ48Ro6XBxjBChj5hqVhgz5xv237rj4wJuIj2EinyH/3xVGKQY96CDptmp/lzjCdpJniLXCTrFpg6jfyppzqV0mvJ8PWt3qRhzNUmx6g6JEj2I75Mdg/Xo8rhbnl60SEHRBzhJfGdvaXqG8Xri6oXdSOJaeQnydLerG71jk6jPp7761Kpa1672E0xTy9mxaAIdOznoEtgWZoeLVgjUYUUVLYQnCSJ5dnL+GKx/qUTOlpHk1hnvVsWs4eWk8N2aONRzumM/eZ5Bd3qo3YeUhPT1MUygNFYfwU+YgDkz7jDBAVBYZwGNZUqNwW4GPKPOysxZiSw/qtynx9NRNUxynkiaN3yiYcvSM3AD+Bufan39mGBXxZ4GSBhPLT07o7TgbPhDUsYvaWuHSR+CZ647AX5sh37nUTU4hv5ESxb6fqJL5yoHdOQpRFDH2NvOByJVHnMr3TNUd2t/nj84a7+8S4ZDq0KDKB02r/4RFT+c/kcuKpyQpVh+DUj4YGXDQ9VASPKIvVqSVaSf2Up/MPs8O5wsnqXN7E9+MM/afcCeR/mLWbSfDCimzhnV5ef2OPFSU6cVv1U4Fdgx+tgbQ9+JrAKHvrWRTzZb6lT8Tqp7wdaji40hLPF9vBPHnz5NxHBPs2PS4iSsC853XfbunknWLPf2+2tPaTVwH+vv0A968qGBZMknB8xyK329WTJi1uafxD3c1N5r06e6m+V4wImBWasJJkb/nt1fDsgA4URK+gkZ3V0xqXYmhZzOmcLfgVCYx1mJ8guIeX/YWe9X25bdK+cVxPXxdr41HWVz+LhMfZmxjLGdiTuSWVai6+XuIpTWtZOUoLg7duC7ypn8iYQxriDK5qAjrB7xAZBDEHK0CDle6TV1eDh6d/t3nBWeJLz8dta7+rv+KV7nxEGPMwDO768Mrw1HDxZW22sKO4XGQQAX++sSxYKzUhU431iNTMztDV1vvOSd1T0mgS7o2XroGpRStsIUZS+gbRIxQF4lXa1tB+/mduUV4oRZae442IrHa3FPBU2QWerTd2xFoU6t8Xjk2pLAqP/exw/ze4tsRczgriFWQPAaGWYxJ/ukZn0ZoctaKTnKoMnIg8pcpYuXuwOD4xnGv88I8kxsycgrUGQDLwhqXiRlkTv+1J+YJRd6P3UlZUuZa+AMN2gRvWxHHhbzjiFVMBDX5/U2mMSTCe2Ou1R2+fldJWlKnzBGfwiEiTCWC2DghfbRnRBBgGchC/gwVP0K2VoSOSGxiD9Wv/xNVdM81GXCBO9fEhd+M1T1A97ofOyZYmWOaFHlZCzlgluD0YNMiBvlXkCbxm8DeXXYcHojjaMSVeHjN22YBeXkiTWKIw6pEvN4Olt1/AY/mNUczmFCjiK4SYOSRfPvahBGzGVM988lBDjYfqqAHWb/UtQeZ4aJg+xthuX9PGp3SurG9VrL58wTtThYV8hROrcHEcv1nCIUOv8w+s6thtWTBdboZrb/Nj3q3JWJo0cezdHBDN9V6KFSHpiqj74aChD9JT5vt7yFEOKE5oBqq2iUD3K1UW5/0aM2kHof6Gd72b4zmJGcXDBeK8cw23Tp2kTTZ6KXjCbPdwUJM4kwVMt9BrToIpcLX3gJuJy+IjxSMU1QcvfdKfAPua00+y13dti8jbeRWHes/lz930MjYi3WRZ5knGYRqkc+i0sHsp+wrhR5OyTovvquvwinUFmtCqQd/ThguFrh2L+cieRQe0AjCdpZI5xwuSWgfNExXfLUL854ivvj/g+TEiCinz/HdDM+05yrJ/oZ6AUGFZJHpYZKyQSewL/AmsFVtPJVVdApbtXgl558SSteUAQn9Y5WG5XZxMClQatVm9rQOLD2HQ4qGIFO4ivG6nC74M2UPNUgybK3bNMv19qS+ISEP8KqfzJujlYuYqQSAlRkxAy6BlMnQvZNR9pykuO3oA+x/P5AbaFI2bvXvjQycwV5bTKxqsRbNHmicPfyA1e+Y/bJ0P296KkcntL+8P6AAeiHzDvptToE9YkoMdXG+ZNHYsU5JcyBO3Fn8y0fUvU46ZfJNnIK79+Rzu6ZlJN6TofGVuB6gdB1F/lTNicEd6UzuxDeJOetSn17K+sa5fk0md0A55cOB67tTFu6fOIOifxqciyHqLL4b3BH0uL73frVWOUK757/sBLwoht/GIki6mzEH53lJ7dxa8WKNyqcsi2ttbWsktnzDePxKR3GuJlPeCPaE1AV5aabsSNS5kuQADhC8PSLFcdaUsaywmBYV+nW3lmuTY1Seufd692wCHWKg/LsF9qmJmwmWzAv6SQbKEA3nw50yxxLqV7ZxKRJniiTIglSf/BMQfGEyU6ffXRqGHWvaGnOEr/VNEQb6GxJvZfZLrgN9EGXBDk9ndmAPaP+QmkaQ8b5PF5qb9dAZcu5gy/k2/oEwLCXamji3Jb7jzc02iLhS+QNCPgZVodl0TNLaozPjiqRmmhfHzyKDVQ8tVRT4jWLMG9Dz9DaGDr+v8S3gYVWierEe8VCIGBBZGr+KPJNDG6ODdsP3bKyFRivAjDBO8hS3cej/Nz1iXD5IGWqZ57KVPRykgU564G7o2uRS4XXSCJcx1xuz8sVT/Pk9A6rFdFRAPo2EwCqE4zUxwKqdYg0+ek4wxjv/mTeJAucVZnsiKFDw1CnFoOp0vVxVBhxsIy/HcM2msPW0kiZPXv1GlRTTec2l5pWcZ6oK5g4L7+qX4UYoMFwxIAnYjtqPNb12Xgy/srGrKtPp1fKH9/5eGmu8myQMF3MTbryVL/+NAJo0zWlSlFe+ndbHSrISPmAMdpSNW49ZdLS5p/1KHaE3PyetHSOxwop4rlWR0IcpeZuMWXQSai7zFLfj1ujUyfD+xWk57Bz8FQ5wtVW8Qtp525VrhnpUlh0ovO0jtkvYKdEgz1stKoSScdOjPtr5awmAP1ttEL8NRN5i6GqIeVVdW2ypwyxQN5i6GGJZkwp6mageKDIVEPDrDk2csyBQt6CUahRUUeJHbi+btj2mghj2KpLfnpi8BwD2kzoNEkNcIH9Mgh0WG9oK3eZATyfwRBDR9wWAhBj0q3QJYmUhPo8qLGTRcqLPJAPH9FcqPWsqCKH2eek1mJZmrWI/eZ43zOPRbElJKPd+yYWGpUw9moOfgB+3jGqg5yzDqoCxcga0utSV7SpQlrpqzrZWz9AWrPNvSWPbWFSbhvTNmpFJkvFyBAiZFCDusoHulZ+/P6G/VqIRWJ4LeTXAU0gy5mQ+xZGsghtXivWWMSkMsVWGtbM+r/dCLb4LU5iPbGpnejrDVqI2Rw4vGW4UjgChhsh6BZX7CdX2oKIsWTYwtgTWIraWLEYld4/Maf3hrCIjvo2d8+29UJXjv66XxsUcrQQfNPhYdYG/BBda1Gsc69iC7kPwfQZK6JE8x9Dx7iK5Cn9Q0XQResmgci5IgFQmMMeBr9hUrAd1NIod+x7LDOvBTjfLVejJosaHvUWD/ghc93dfNyG7jLmjuaw40MgC3dzQ8HPWHUZ1KYhURQYCqw7hHPzcHl4wGai0G88yZH3OChTjAqwG19P7uPVX3SZIw8sRWnT/KVa4GTINHrqvJWV7WfZVecIlprFJFf/sSkHDAxRTR0jLevaqLlzg/NgTSm/2jRHGU4bAhdfpOqAgNxIBIibzKWXKf+ktMgDkcXAQlF3iqfkiXAwz4XrrQRKEI4BWcTl3vaG3rI54DsX3jC49vrUVp+ouI8ZnqU2A7O1eG8O/7137gEZrJh0q5LbLFpd96IuXsX77OjWuObdKMFblPimXuT1uza5F3aaYV1PeI3qlXFvl+T+StmZfQyPa4bm6DANcmlAEuflgQ8YNJEgRYf+R0jJa2eFIY4JceKBnW3K7sYAdpRUyJgEIOBemXiBrQmoFzwHqEWDBJ24sxNROEVD8PB+czmiqOYQ7gINzhzk3frElSfSr6AZQtAgkQIRfWXo3UmRZfWJzecBcnjlkKyPwpm5e9R0KOYF4d52UE6UR/ateljptb5hU4VVVz/tlBqN1xIVY8Z+IgyLK+xpzRvISLo5D/LzXkWUDFLCPl/y0DTWn9GsAdw1J5NXj60o/AHRMhwTAyt5xvv1YaUUgfl65nIvxb40DLSunXzliPnl5BbO31ImDvRdkw+lJ2gvM9gavebZ2ixw7y1tqn/PhgFcmfyxBApT0unpCp54/Xr9EpU8lw9QOb2UxKfAMgs/i5E5f8mgNMlMNH8JSG5evN1vV7RYT4jN1AyNhtfP37II517iIEu1wur+06Ul6l+Qth37yJNtOWOyQ4a9yaEeAty5BNKmE3ugwXWmLYo1nCGGpib4nTM7V+vew0c/eef+Hx9bNfpGWP+YZqOV2BFyyaI7Z/hyS9oje7HrL11M7wzy/3zLg7I/xcZaBt9ZPF+v6GH9NDvjPnuRHx1mz5+2rKjmmWtzN058rCjH1AKe8aFB3+rV6u2HIWsWzYey6TNDoqHM/odZkYV8sEX5zSQ4RYNP5ezcoa3itv+YVXTwZdH6xLgrnPWis1rmD9dHeStczOANxjyLACtDVSN7g94+SFYcGPpeLPDiHOZyHZh2EFtLWeZff9t5vFIQJ/I7sMOErrRXuTblQdPdmMF/zn7VFWjHSmA5tFtxCqzgXNZiPxs/0y/IlH1xRQx79W6/3Dij9W53IbfRiI0lF+bLmF8wiM12Junzd94/HtGrKOwfVpgC9kF6DcKpOb7BV6yudkaNrf52u557Jo4k8fxsHZ1f/NgzxNNYJtar+g5t/ZIEbFgWDOE6GjKXWVkFXxZCVCJN6IP+DF+xN4a9yOb2DpDVMKvOn+6K/a5WIqnJEiN3iYWk/fnlZZQEEISmFAENnMlAdiUX2d21nFY9lCDWTeR4SsL2D8/F8AG1Pq0CgY72TmCd2yVtaEMWH2mISZoNIRdZDLqxCRzNnaoMoF3VvCtinwgp+G1eOdkKuCy6FhJqV5mrXRrymaBsmXYv0ki94JUMUh+07uvL1dHNqStsi1IsOIvAv5Nno5j9esYamVYyXR8k1+5FZmuJPPRzlYoyOF29trINHuVby/k7E0fZVbjTH2SJbocuwxmQLWb2FO2jv3k320272zHa74MUYPMp82cqWWc4CmKCnEUuxDePQTZYeUQkmtgEr0pcPUOS9x/mpyXP9jeR+ibW5LJcu9oh8X8IGB12vmeU/j2SkbQWow0R0/WIXHD14UlKBI60gGL7W8u+RIYK9d61WBujXSsLj7ulv9Ne0XSe83QcQch7n7OH7+Skx+1OIYzldUw6LM7q3geZFw0JtfPo85c+yV0m7K8jg1RcwbDvyLUsbUG92HDTtUYck3FkzWk7Vt5oc/XVwNdqHWlS+3ZJWyE6wh2/EHainscjp+BBdZcxamY66bvC1V2i52brTVSiZ3H6peBfdB2CStfzXZUARTQrKtNdZzPm/6hgR1zTFjqBeoKsDMFfgbUsK5DyFTEWzz4eoICzhlLd8V5/CVt8IqXWaOcVZn+HXriMzNbePR/rSFqJeSPp7kbwCEr7hB8GsuW+UqPbp+nME1skelw0gCFDW1ffwiK0YjfO4tXF2FmRq+RTet93qFXrg4TXgMFyg37qItOYbVJeWjcdNh/2KaZb1aNz7SCd6+k07hHs9LNEV44kNx8ppzArFove4fN7Y4rryXrp9aGvXuBUmFD04NnQRtXT2hBrNIqCPWiznYzKpRO1vvxafuoj/zjvu6x82wlGLJrVHvZXJig54v/hK5BhxnPONtdoeS7bpc2vcrryy6Jw0Wrhr6v8H6K7pmBRUimsNKXabtjJC+LhLY7gdty21NYynM3q8smrdSajFf6X0FqHxtqIsVD29J1ClHRut+ss7PpQYbe4eSSnmwn9ijFYaCKGfSOTAn7IpE4jvgeS1mDqiRJrWut+z+ND3aa9ikXbJ+zof00roPWvtscOyUqzS4l6drY4peaLznTomYicEr7/t8K85uqKd9GPQ8sIu5pJd/+0HFNxniSVB3NWlFtpG42K2oVKfViL4MsjhvEPw2SOTCOQ77pUOd6ADYiLee2KpsM5OrIDcCTi1DO+Px8ZSYRy2CgSfXCUANkKpSGMjToPPmmLs2p9zcqCVN6w3YXCMjA7pvwGgp88XtMmmLea7C6UpG/6oatAit8dHAhu5+/TjKe9/rTe026utXVHU90XolPMvRFanVk5VmNbeWKieL3H4nKbCy25Y4D4/D1acFn/IKeeqVCF8IK8fWdF95zvn0doKL78oNgTfuafiLsUiZKShLEJ84JqeW+hzxsh2Idqqogmedpu8P7m+hO+fLM10baFYZ/J0oMD9R7uY5aflklvnois7QTdH6FGzWVon4SVRXMRHZb/huWK0zG4SJQuL7L2VKlbYJqhfF/qwKJB1UZAYAwBYjMN62jg7pnoIOuVEyQYg26mRqRkZm1kCwjmgQlcQ7hRkEUGxSX6Q5xVTMy40gIFRjXQ1VMzRvSX0M5geeKtTJXbevRlpoToi8ZRBUpMp5/pZL0EgFS55IfcYYP3GAwl714FSZerobfyZ0jPgU/tP031qjlJoocwehM7YYPMkcUwK3lJK2FeVtLLTzDcCLslNkpjYPYU7jmhP8OEvMZ9RK1Ah1K9F7OqmI4DHGJXETpnBKPBbI9LQE2E87kqm0APv9OkMZl7wf6+0PL2NCJK9yQ/DT8NXaP7Ql6kvJ8227kfViOy6qpJduhFq3waPee7E7lYrcIKLIq1CIJcUR5EnvR3NgWLneyy9cFMimP2dpvCy94Pb8/fIOuTRMeRrF26lb4y0O5tcaDyTICkUubqD30dS0H51F/qJ2sxY20yu6/L5isTB23EkM0HqBOa+xwFBow8Mn2uvD/fZ2qYLCU2c2DmWBwXsE6h2RbygcFCrIyR9czqYJfF5CihxQVNZU95LxfmkPA+GOWF18gLIrXDHhzkRN1TaNeMFtIZQ8yUrXsl8iGUH0i+xtdH1g+f0BOTEz4xLP3gLnIrtoSJNpP3JhjFJzUfjpRnXV1yN1aUeftlxm38JheE7gtPieEYT3nyLRdi1EvgbN56Z819X6C/8ROCJ9tPOzTKfBjLdKfnrWSrXgG9j/YP3jNZLGMgvn5P8XfzecDmBMgM57PoKSK72Hi1OIkRf/A+KtoaUdHJcVmVQOfn5LNi4iOvn8UopEKJLak+iN1c+wIi0O9VWmrGEbyAETjqxVoPOzesrHoqFS5mNTQ4nCPu5JCYEFVgZWCSHw81/MtS9fvG8Mv1cWWKAiKt5tMnLeuCZ6NcXJmMLqwpHB3e6j2Q2O455cwIj6b3Ao1m5WR9KNvLuaK1XnmR9vJVTPQv/l8EaPKoEqFAWD/K5MVAGBcSTaTEaaZj9ALI3I+DOM2po+9mtlgxsRH7uIviIR9knqMmq6k4QYdT1v1dCD0Qb0cPhtp/EGMHI35Kun6xB82vlycDwQtrzrJfUCtLcCnFFlazLkI3AjHoxi80UJjGXbU25dvRBtQ4tRRAPCuvtfid2/kA8qUqgoh9slO+xQ6HO636CEQ0fti9GFQwUOdUGEg1IMRVZSvmORJaW2H7xt34HLMK0fHU+leh6r/QbvPO5BHppu9FZ0KyGX9MbovvCl0cCy4TXRrHjc4Da/PRD97f35ZLu8mRp9atHpWROFeey0lYKpVLXHxwmXZ+Y2SdXznruTlD5blQngsfLIw5m8nlTCoQ7NZIXA1RYzAGLQPje9eiMxnxvTbZXwHXFMOmDrn5afSkhKR0xTzGaTvTrzGUeXrRKZz8pnC9No0wJtf7cpRaFWP8jI/GnV09u6XiYapo16QopHh7EmmseZVGnohhTdjrAROQhLbVvazQbaChxabhKaJ4AgiJF25HqWaaRkELRPZtq8LdRh1tvP9oKEvpDbjSfj7JXIwbZHtJDgPdWZBtymUsLyfn9weD3817xcJebRVFbi9D8L79eizF4zvWtp11tXKnzmVVyyIRfj48MO3KGwbv3iIFeEOBFx6NO2V3py68XlTOYPF2MBlAy+EgMFdSQ/eP73yqXnuowN6QzYx5kBXP/XoOazuRcKeMmwxbdeoY4UVB/hthFGuem7wudfYCPfeG6olhQSwKWFmUs4SDQOIeJ8swzZ6/HlXgHPH+oLnuLxQBMVBBzr0lC/PLu3gVyWsbS6hCag2GzQ+DqqwSRQX6EEUZEpZGaplld2Uy9Bf7fM3wj7ZZUvDkg0K8/fl5+nE1X4tUi5yYi/a8ZLQCwJkSCVJlp+8BwmCf6Q4IZ1tIBv1LpAiIFyuaH+B5yZ/TAdje0Qh296iXsG3eJ65eqAsDALGwg3gQYGyDQos37FmsYVEgDz3eAWtwqZN1fOYxWBInf6OYixrLcyuQvbaREHKMlCZ/46GHLUnWwc+NTkei1Ec9BKr/vllFOpqWX6ZPfCfBQvs5MaxxuVlrfMcA9L1qRyrHrUtIFNEy7qABFgYAEnQHpXhd5ukGyKrI7SQAMQvCSok5S7o+oAuIH73PhejHnAhZe7NqfVQ4ueYAqYj1CwUj6gl2udqjpFrh63Nt9qecVyCPxAJuo1hx4Jm2l2XY+qm5JiL/N5wVBon95QaDAbqeBoSvi1B0yDQWcf9YYashf32DQRtIZp4h4c7JTsusdvMwvYsfQG/Oxgv9XlJNfZHHVSHwfGh9Rspi2N+7x7IL0gdwJSd1o3FCItC6afDbryhtDUNlw/i0UrxIE+Vs5EWi/aJ3Rs5KK7SGGrBW9i+7xZqq+6XJZGs1hTWlNuqxA79B4D71K+tikUmdDkZ8KlM3Sm9iTDvnca1pgR55/zcJ1LBWUT+ycy8nrb75mBos6379SYcub7E+arhyJPRDwcEGOSmSItI68URGuHVuPZtvtaFi6rGsQHR6G6Q1lKEjFsJpYCboGjVaIxYKMOHyC+x8lncpHYrxIiNNqQX0+m++g1vivExxLuWdTkncf5mgb9ZgX0RAx/3QcryBakGfp2dG6pyOUEw81anLDCrMSlZK38n03RR6vCKgL5etjU4e8XkWZZ1/mrrNvfN0FvYh3/gJGIymZPbc/X+VRDtCahVkzjfAUurwSK/Zi1W7EZbK1rgedBEW1ZNpN0FtNTnR6t08fL0McpymXlGajqsTOiizTMjenIPC/1xeocd5I79oi7M5iJSE3eOofNJLAUihd+HKhC8eS+HBzk0FbhOQICe0J6xiEPtYbv7fmQPsCpkIh8yfsyWyd+s+wlQTonGBsIFKmrHj+Zt/Fb2+70eMA6nP8v4T7Am5sL/BsbtUHtLfxLYNzJ86Z+xdX1kh8ip+XOL71lLUBKuxhTaF7/5VwhzLpdBuRc6NObM35wD638vqb8ZSOHF0HXnsP9UxyBL9s54Rsi8QgwzxMINekb30aFjAdt2g+H/b0RfuUTmIJG0srZvG0AJANxU7U4tm9/8quL6PDdsXKdOV2nX6Pmmn6AAqfCXwaR916dfkIEWY6sUEPxFxKdl3sBNhrtEqhFC/LqGpRH1i/kdnjX/9uHByZubkwqn/94s/c/LkzKmFHYjehszlq8yl8nSZ3S5Ll5/jxbfLZJny9HPwR8bTbf1S+4u/bBKSax/s7Jf2H+iy4yhmAQpwoJlzE7BOjQx22rmkxPbiLybbvvzbgqG4/UDXgGR+GuGLY0tla9Jo22nWvzrdemCVkF32zsEOaUfXATtOqBgeN/nWg9zX/PKhBSNwe9eBl5POQXsXKYGR6vGSDe4v8bs8SKhfFb9pTCobcjTZU4Mt1potANRpmNRIA0+n4xkEKwwKbHDO5fLUrmhuDkeboEskuug3LjH5MgxKGNXUqU8AMZNzBV+SOieTYiLLyyInjEWNLB8fWVIStYM7VBodPiuHfl5A7D1OiCLGhz0dXo1k2uVKMsM+DFJPCeyZdoAOVZn9co3cPuH26755T60HfsjPwCI4AuXoCJeANg54lEc5PIDG1oDEZuLZCxBEhMOIo0oshCnjVN0UKIVZns1ZQUekzOhDI9uMimzFCkcWKlE5jjhMJVgLwwhEAxs8rF1IV0VGEDpbEedszwJK/6FcKp57ykzD0zYGOiSC50+zjNeBExymiRAh13JNG1V47b+TQNUgJZAL4YSjYkZHMSlGJKh4jssL8znBJEbCTgS7gaCA/G97Y+rFSlx0W/Fs6pRr6Adpqdr9TVw5faPWLQFcOC22chx0qki7ke7PbTrd4v8HeNJJmdUEAqf0a/L5sjCxCvF+IhufNMmDkZhlYMBc6V9NnX/GLp2vvv3lQZJ3XayWd/XfIxrXAhcvB8hlZhQbaekgQOsplZIdrF6dd5c9diCDDVd9e0NR7JXWKSr/hxKJGZQOlUNp8uZ+No5UR1J10MtyvtUweQKGcbg5fdENBVnd3G3oBgZZ6l+dR9pn18YGLWgIys6N/O9ECmqCk7gcGXVlNNuEiIuJ9XEgdN7dviG/8i6Y3GZ3s5utOFu1tblq7DP55/BGsyKMSE9MHAJmJ7fT7Zu5TAhbspQRWqQ/KVd2aaaRRVAV8NlvmQ3d/G2QPwWn41SvKS9YDc0AbAcgEi7mDZ4HKtbJPaVYEroSgFjsBM6b4ED3tIFrFN4CHuWje+x8fhUonM9JMNmBVLDK2WXscrxO7pBKs+RYlEExglmUW/uVUCnfDuLRPD+muTw31T49YrqgzPQHtsGVdHCMle5XDEeKG3v/h/VHlxqmD61Rf18K47zEOUx+ks/I1BdehjK0/y3VNx29ERXMN/CtdjQDfunQlCygwPfSp9T+8YWFty5WcLruREmzaP7GLZKaBAOUShFbpg8VUyS4JWSnJjEhMdHtB5w+2PBMvRJJYa9Mg9oJq20dz7lD0R0JLnwJaHvJ7vD93g3PVUd6WT7sR4vb49LEcdMaEgw7HSYmibszQdtL8TI6dZndQLQyaxiVVaul35TzKJtFBqMVTmWaj8R3vFAjQXauFQgae+O7hmeWWeyC+Hb5Qoo/QBWbuvqxiGW7wN8XGdcnuiPedQMIewQ/9OTvUkoR1XBx65MsUMzi8raNbrRFm/ObeqnGwaqsprJLIF5TaUsLNOfE0+lwMbuqPfikgjrL3nPY2kVi1nPXiRo0Yz0Y2WX98bvLLgXX7kPL3sQ9gq+uoO89PHfDVeTVvQfn7J1BXr2W0RpdbdCjoxsMsgUdU/eFzGYWPGF2KL7LZ3rxUac31A4rMNs9FNVu/KHuyA0vLfXcjaIJLlMpSgn4Q5ajh3uUJ5cJ5nJ+Cp75h/6suKC7rjVn/Nfgn0g/hi160oYFwQA0ReFl1jStW7aQI9xZF67cr4xWk3a8ipn/NGHntwVMz37+2vbQ2hlCfnlHbZPd9T+3glPEFGj5nKeiMn/S1H2d7qnrTpQBvMrILSpF4KBqbSM0M5tkvIkInvTY2JobTlqbfysGtMzsSByBk3A4RHKR2++YPi2Xt/954+m8QS8DZl2fMqAgtYUSZqEGKjpdZrVe/sshYK8vl7dIe//qoaQ/+1M74hP8ZGRUKItFlpcq51WydBh2i6qaEtMZuFS+GyxKG96w74GPTsaORkdtClEwiXUFPR8T0bqEXYHrsq19W49v80PWf2u6HcuW0fgp2EC48z0pLqmI697xTeWzByES+opRTr3ogY+6Vqvk27O6D1DFfjHxQv6/q0K4B5W2Fju9gctYDfa1w0pcgyu5mpEaYFZHMcq62e8mdJlvPz+oDv6uasGUwNxmISdyWaIGR9LYIaUkw80av2hNGCXg1IqDGalu+PYMqkj3X88VFK+OtRlKPVaDm8ZGEQCq/Z+ddzLTz2ruO/NxREY874/C95UJ7W/7jxbMcKCgYx49MSpatN7sFhYOUjvleMt53m3vmBGcreyUIpxJp1YFqaY+5L7tb+z48+KCa+vj40fs+CJy3gWkUef+T8yrUkabmvTWutxIVXGTpqQgIvyf0CRJiK0wOCVRAkiFG/1/X4w48UuGrDtXwGgIT02XyMLywneEITp2FhmEfIvdoJZGoA8viNCUNKmKcyPrrE16U3SVMiHv/9EkSXBKYYgtSRIKhFNWZaJXD+qtrqhZmKPKy0R3B1jGxkzUGJ3oIuLkLXwsfq66qo5lUqy91V01ldnqfKvV2BhHjTM0ZGaq8rOzahblLLFSMo/lLHpvqDoWtwal0Qn5GGOUzLwm6xp0k0KRWj2tpiKnN/OFhO1VGRHq6pG9ORVjuqrFUZQH+Qw40FuxsQplTfGaRdl4CUdDVrYqPzPT0OyHhcatqvyqSg33ouClbJTMnGM86zTKGDWTCUSc6s7LWcio7rXOw4TqbJm91abusdvr/McyBFZ4YEBWN/WNBdwHCJfEQUOkPlqSI8l02xcZC0Gx/fZxc8XnuCM1ugkwqGhiqsvC9FERlLPNqVyGaN0JUTUjujaK6pmAiOC8znAoZSmzDymRA6GAYesAe+YRbUhrPTXnyJHAe2fp+1pzO/jD6QHuSEAjNDLTHs48+jLUurhg35HYtpVv1FoXF+7tYLRpjgkXz3v8jVqcuJckzDIL9w78kncsLmiLgZSQStq3L8EIzviKv/fUnH3M/R1F8XvxvgACft+qDjSiNcf15n0MBU6n3KdtUg+8JZpu1BLhLFzQPpvJNaijeI8ihSOcDkrei1CkQSfyyq+eSNAj9Zm8WpYfdzzsTnRfc0tRsg1PypIxr7X+fP6mhnwOTY5x3OKDAk4+GUWGhikzuEs2llN/UKhnEOFe39sV0iQZXDpOpgA/wSzRxyQjK0kKl42VKb0A2/9B9GmlTdRm2Eatb0FN8xinm1U7m2CoGeeViPnlZ1CCy1fW6d0pcMUbXS+3u4BfVzqGVbvYuMWRCjVnfydIwLHghIs9Zt2m+aHR9tggk1BoDrI4TOGtiUttaLyG5AtdGJ++qbdBTR+I4+KjQ8c9zr+QUPZrStAE5hDd3BZzRR0O6SwlUwHpgrqwSv5KHFjPGCXcvKfk9PBbwiOaAlMawAp8kjHufmeYElKoMujHjdNNHauvCfXuaIi3NvDU3R224biXtao11taprRAt882hzj5za2d4grKpFWepDV6gUzPjEsIJfi0A4nCKT2kQLmO17I56kU+XmekqkCk1ps1hQcRJLapj23Pt0K2jO32OxfsbAGnRcxypT7YTiGzeZJzalOMmx7uzy0Mn40grhpfG4D3i8DIjOApX5paQI1jSQmKP9Nqa4VJy0nSpYo9T5/SIlbOymGTNwIHaaizHxcEmkHQqomVE9+L+A0+YYfHxZbtlAwH6+4GQ8s/DUSDgxbO7J+zkrds8tq0wyvddWXMM0+BacZ5+sVvSgb6jCuU4OYGQUO/kCaQB9foTPXr+CaAoDcBy+K6AHWXfYot+9hxL2oXVmArsrt6Rsa/2Cz/dviC9VbILq3xfjW1AngMp+8ERra5bk5hw9Cj/mTbJ2xrr+Snxockvm6grsTP+L2fXRLDN6w+fEyP3KD0ZIfHERnkJj9IWB+B4ONJXy1FjeQExlvdFw5OlqVJX74geaZBb8tBm9RsBpKPPLp6wc1ds89y2ItCw78SaS98+xa1HKSSiHEdzVpBKcx7euOQAHf/f/J36RvvT4FdLPtw+Ek12mpS2vx7H0tCY2Zc1YtWO1RUHY4MznhPX6CSbj9LDQnJXD5McctiCWyg2zDaiR2vGPXgNKP4cfORtUj5edPXqnTPNhxfoKjY7/5mjWbNC8Prb1TD1taJ7pJQnom7V5mCWdxn68WVGlFIZmB71ULr7SMkh2Xw1Iz6u4OnPyAgR0wISeni5JXoLX6jbaJwbeHiTxuNbHowcUUwwA9f1Kr72fhMmWEm+XZflGX8D695iNZgaegOpMSUIJGbHDUegNf4XkpOBVbaQkNOgxjTCYb4jZwSWI1fnIW9oyVuaAVdNm5uBJTElXyRSETqdZItSgTxKcCILh+II3HoSsNqejUMxAroEIzgJXez1odiHETjBkxiFUr/D8zPKmCPIK5yvheXZGQcIoN3eCpPAlJOjGMpCIrGRDKSyORSj2nmYmVFZETkzNS2yp6p0enh6el9iQSoWxVHo7DmIyLSoab+t1Fu7Rk6saRo+C+WPTU1DLNSEuCvEtZS4xtSuSgNuanqc8YM/q59uxZ17SoriQ7PfvvvklB847LI/7MkvIb4z3QIJTCHmANNF5/ObgqwQE0w4D5GDLjEnPjD9cTbrlMVF2aHxb99OHirADoNAFzOBvN8lH+wCWde1+xkm0i08M3QUZ2RRUaZ5amw07GZZ6cYPtiL5TNqnLdS9CGz89yKyl9r91i9gNgGX9d3JQfrLZz1w1NXQ8P0abGBkQfZFwjIZOVtWMhFPKgOE6giDPGOs31+oNxx2oTLBjQwslN52tmbSkAIKdv1pVkuBgcVPCfDwuQ3QfpfnkviIrQaZZcloEbUUeUDskDO2ggME1X19jj65lXJmllQQvKPCJN/ypfaS5wEDMLeB3+SSwjew8x2tT89iCnXVOHK67xbOLHAqPLoUZMcAnOBc5/h/CmSqSKWVHXah/IZ7SzIvwySPCRKWMwNXlHbi1NI2b4WyamxynunIjNwpGPvjUndrvn+mXSb669ct88YaQ0K0p09Dt2HMGM/3AhXLhkeUw8PjHBs57naXbyy15zkW5TX08BxGxy3KkRo3EQw8rM0DCPg4arn+7+K1djJuR6Jn0py28B5v6YgpBvOIpeYoT560PAz4c5mnTqlbNPMnbX9vGMlIjcniuUc1Q1GMTtIeFnxuJyCuYJVx25M8n8xpC+5nlNJTC36/oY8+ZcqPXld225MS2Y7TnLOC2E2JxF/F5WXUi8RET6z3L+rPzMSkpP6E3KmRmmFD5wWl3mjA5hTc6Q6ZQh1bvhls4kqJhj+ehdU06DsuJKa51EzoaRgNRI2VeKdmyX5eJhgJNtTnuPtxe2p7OERXTYj5EXgRX2PLKoJDeK79cRRn8Jhw2sUIhC8C7/7s3a1E35Ngv/IUcYUtJDhVhYKw36WnGn1juGO17c76VBARanx9x6kjsKsdA+Mm3NEhoUbb8618Byr3q2Xvw43e2Y8+5Z6IskYdtx4PbpfWCWAKM0I9zjcYqEFBV4e2S7ljo4NshtSHflBUUFyqLbgyRRSc4qWvAscH3Xv3xfEPgrx+JsAZ9Ao1PdKx9bmJSNEh7ywdN0D+UPmb8nfd+Tct49xL/6SMyDf8+/RWyCvpj5DOI7/YsRlZ2PR/vlvbpE+93eGiMPlJn2uuCQ2SvjlrRK/qfMOI6rvVFzSMSX62/4VTEyDlOwHa8VsUE/T7P0Z9x3/p+vTRJxR1New//d3hLebF7gY07/hAWE4Ewc7evdYfz0xhFwWQWTC/6+uRzEyhMtWUys+z8dWmSrIBjth7zWiTQRkvbfa0NcSz+tbI9Ghiy+fIcxX5SnNg/ZqIe9hfDj4Tx2Mih8ZMAlcWaQp8+VaCZwyMTQyuiikAAt5WXzEGlCaNqXqs5IZxYQKRXEzmfnKFMLIppgAWnBVi59N1XCCigYn2z1nTl8BqsAk3H5RCZXm2e+sRrGhHpdpk4+el8lWmSi87Q+697gdjOQKKUtjxzMFrz8/CKGg9HiDYZr4M4yr5R+k6vp1n3ERh6CBCoKh/1OACVl4DELEgkOGvnzf+edfrhFvOYh29Btv99QhxNQR5qvMVjalSiv80kCl4EL4Z0FbPNutzqdmULJ9c355ecb5PjjS+eb3TZ/pOfT6rRLNZq1NswWcCwd8tGMsgV0SfT0hITb27a+jVdMLr1krHaoYa/7Fr1s1nVPdmOM4/1eau2jKHPttzoqZyr1t7BGc52GnFWbSeRe1DZ2/3gYCmcQHwEg77qPm9fy/06cyeHW8hczomNfZxiyB9J/V7nqlCDJW1EecC89H1d6Y9huY1b1r1KG0ax9Ky70fOAWIjOACp0n1FfuWXsMDffduJSuBsYc4w02JL5yfw4qaVpGG/yDMS+HE8mWH8NTHSYI1mHRnfPMl6ZCIGXNHHd3jye7PUZzgDNHTvRvnEWc4Xz7MnTgLCfhu2p7WYW+z2bnN3ut1m90dvMdnCo6L7/Qe5fsfgR+/3Dz2pCFd0dWmmacOV06Z5kwDPvFIIaLxlS/g95vrNddMyk2kIcujI218+g1R3xNzU5vKKwZWbNFMBUGoiR/ZK9pZGJgPdYwnQ994d5mdZI7OxJbCB2RBjDS/VM6xII+Vg3vOuIAq/s3LcJSEeyHPBufCkbKkbww1mwZQ1sLPY2TchYJiSWoMXaxsgBEY4VqDHjW8XwkIONPeANy7ZmQIxSCbNTSokF/hwbkpKSEiyZO8JLSUltHlSc+gbJTkkdGGDX0pSiESSJMVCCCaHWAAakqwhIk6+agF0aCdOmiuATd9NyM98WsCsqWF+XqT6kXGipppZ8GUe/DKzk2oCqQx11zCTvyCOCr3Mo9PPQQNz9gQzY5AItJvk5Z80C/SnaNLwGHHRzv+fLAn3ATBpuz9LQew5DzMIWKPFevrvCmT+rdjWBzBZvemuGWOW3O/Fk+O9z2pOw86GnTVSeGOjx2AIHMv5J+TRsWy25sBgVJfZqy9s+GMCNtZWBza/tOk/BKJbasYJh3/0X7uTL3D5G1qqQcaNxd8KJU0DXTiMn8IKWvLTJC2FIhKM2xMOhf3gwBD6YYoGtTZV9l576qnQ7D+U39a4Tr1rvGdg0YwI71cnmNteBeJFAyIaB5zm1+Y3lTqbSmoLKPNjqUWTZteziMxhPfhnY3Qh+uSXcuyEUGOCLtaFwOU6i8zJdabkIi98vf6w/70WHMVkHqYCF9thmj6m5DpDssuYAtSCTY+qPT5FAralMuccDwnlTRvxpDXobE3QUrpsfhwzPPXfWqRoUGBoasK8rF5YqfNC8R0O3ZPy/gMZFPtSmgwOLPgvRlVlx8Unc+ys1J1o52Y8kUPyIjMIk7fiQ93uiGn5sydu2xkI6v6yqczZVKr4r9cHZxBAZ0aviqoFmGoQE9UBGGbQXpXk/f/A4pkrJpX7mVdTMTBiaAdM091EbkoqIS4saJI2HzA9NLFh+IB5qkJ60Nc4ohZMWJqXUpLOc6UX2IgTvKRWwLomaElqX4KMILXm2JSLZck9ye9J8zTUsU5L3Un+npIJOcO94Os3EMlRt8JLULiORdguXtOG4846S0LhCBcL59HIuuaShxtqsCf5nCMP3UJf4PolS/ReqJvhjUhcx8b0/BINlnQRW2LS8tX8XG7RsTLqLcLw2HyHJnq5gfrIVABEzQLM6trna+q5+oy+9OA4BHF1YHsj+t4QeIvLSLtJc9CYMsb/5xh5MLLfAONutK4dReyJNkWON1tMZTfZFQ5UbEEVuQYOo7LKxVW9Qpb5/SoJIMA87LRVmyrM3jH3Ydh/XJbq1YHErDfhwT7B4dlvEgc8tYlPS310Kj/T/qMykg933cB6fUVhzdZAmmlLrVR3nNRXBkf9E3IdVBal7iS2enqTsovh82SCc12H2BdGIZCsz4+yB8UKTCZBbNAGgyooNATF2qPGSG1KkdxYYazIb6dIFZDWFmXQjx2rmzpfpxtriGqT2lQEDgxPI9/wmUy7x+DJAP1xfkbbASjp3NQw0GnCkZgaiuCSQ5+HTDti7Ecbo2Nnbgiz8BgAhYKszFKmy+XZyqwKLAlFJVAmxK8p7xfMRP4hJSb/SWBAFJaAqlKy5Onp8kwl0D01XEysi1UEEBe1EMOrD0iFAd/soGFpUz2/09FKlpYe27gXURp5wbDwSr/N9uFPQMz69SyTvbAEUhRSaLEVKWq9Z9tzwsIzimYFmsc543DUw7MGB5/7URKvcjz0fJ8gZOdnXPWvOYw2aBXP3BO4vq6DKQtv8/nI1Xxuh2RLmwa4C9DtAkrxLT8WIwxbx2h1s2/+hYcJgb7Yg33IUPRzUmH5kheDcyv6cLTFFr37blY36Ha3HAWBjQv+d7/i8paibxXHG0gNqTwvWq5X4+a85m0HwVG9LWM5wD8yMlHErUx9JucvtHLV87aUyJAfIaXe3/++uAypejM5oFS/i7HN9SZKW6H/K+MhxhQlTeqWVTZgx6xF5UO3VVzLRbue0QSOwLza1n1XrsPaq3ywTTRCVlPk8N3qmIEM/X16Vn37UuMux+vaNYPIHyptMWIV07h0ysUPob1jsRNxm/02F1VPCW1fHVpYHTob3hw38fyihC/bemOV6fOFA/0eWFpn4RClK1erdurlTWjhhub4gUDXJYJWl7WjNFYwfk9PNRD2YVuvQS7bCc/xMC5EjDLCpKMRFxjwHFufqzj7BQKRZ2HBM/I0hfgZVSiIhGNQXbG1FYiFkS1kH0RiKlh66+dh4YZKFEzAo0khIUmNE7j2R0A1yFohtgaJ4p1B1ljRnB9WxYiCYtOD4qwi0bH46VXw6R2aHf2YO0UHxir/pzHZs/6QH2ax82SnueyFyImANjzof17k+y+QkPDxV1b7V8zaAOeRD+/PV0iHP9DOnN5nyDLq+hFR6SP5C9tee03YLa+9xx8uqqwywKavEqA/defLotZnXs/Ab6ggcM8grCqGRCG/8wvUM1bErze6yOuitgmvCTskOApV4Exna6L9Wkru2RlFMGkm0noDjTe3OROJ7jMJzvUaqAh/dP6UAUJ3/xT7teXfsslfpRnKLg32370652lJXGcNWHynenN+3UKhs38I2jUWC6I5DfKXuDK/O3OpNA5h+XeEzQbGdhMfAjlFv4OkP2D1bSfUnnBkQ+T22KsTS0vTtqzMUCVI+FnsuMxUlpWd8NMgzamOk/6nSPI3OeSDI/FLM9i2x7ulEekM3bUHxgCUoGuRfb82YMJJM6N0z6bFnFh+0IyTDC9PVsSmk/6wR8WPBBqexooqsgy+aQHBemXK5ERRSog9SZ0eVQmHEBC66v8oXRahE8sKwSrhPEhS4/NGrbg9UkfIjJdnA4L9FTgpK+FgLn7UhlkNtS62kpJZGLTBK7lm1p/26t5pADysPtefJfjUXrSzvNX2+SETxoYM2aGIM3jv+yuxPraY7FXfhhaNI0cqXnWbOJbz3WnX0nA/RLwMq9Pm+8QL/X5j/D+/1MQ5VAHlVlwGnDbCKFT2GBLitsupAY5chhr69KdwrBhHg8Ds9r9PeS6kTGz0MQagbTWp7LM+1yad6nTJ8VgxEuIuDdZGzKmO0cYP+bQvBPGp8OLT/k/OSS1SebCjzMtVsSc2NCjh9Bk71QcE6WKquE3uRQB08qJ3mV+xr3rRIi+OxZym0CY/X81Tp6Z1ynLdPZyFhxWrT3/xcDVHysp1NOYZGgz8dkGigKIi2+l5pX1m4WhXn0pSe0T2Vn7ZxQLNeHich9d3+4IOMPwb3dt8Pwk66HgPwaEMrD/ud65vhgnC8d8DyBnAi4A5Y/qgno9S9IovKv5HjIivEqWfHMYunFZz1OMHYMGb9ZzvDMP9n/w+ZZ9Z15DrGRX0YWh/ZoEEEvZPevMrROnHY3wn+OZpkkv2+Bj3jT/CZrmAq3dgC5nPk4dXKrTHnHOi0z04glvycvowW362B0dxK+LuUokeXhsdp62XDFtwyvABC2YjPVyqMGfWRMdr60LP92BpEIP1UyuVkqP1oc71+dk9uFXTh4FQgi+9XutBShrJhS908iwIVkg8NDaMwItAdDfkfLt9vp8C89AIX50N58tQ40GKt5DzsSSGgLC6ub+GtCrmfFEcvle1RcmR/nJYOj/gKMYlibbyjGMUrwVOmb74Y3mMJTxiSXpHyCzAoTWGdgF90Oc7y+i5NVvcWDZn6SzTinAi3F8aKhtHWZAnPn4hTNSyyf8HhqGPM9Ww/jteI+AdiXr2tbswyndsPWCp5KG1acngSVf+0BeFfE9EIk7K7/I/poK6Sn0Z955eOpJUsgj+LaAhmpJ9JUzHj+Z+Mb3zr0vBVND6MyObYlz0f12zLRnvxNfh0/FmUBMIp3/VJRH4VQ8qEQLFi28nmttuLkamVVz+xx7oX3B+SkMJEFJ8k+yfeh2uk9pDMWr3KjcuuEKwcKLT7YRISHrSgjg0fvVAhA8C0vmL30ghUqTgGlHsWhQWFQJ5EegJx2eUN5TXl9u4r29z6nPya7q2tMQDbYLJCEO2Utc6IpW5gjlQeBPfOqukD7eRlM0QCZJtFnClQXgTErQZ7tTDFR0e+4W6aeMVccY4lnmqmHBZuWQKZXMB9QppxUGYrLuQtFJ/fJwHPuvuW6XZEuI9uCU+ZagqWGeFpDBUqZPkLlt8HIIIAoAR10KfrLbHK+NMstmJzkQ+d3pGeU1+7TnrqnVD/x/riAkrqohlNXP6Z5QJCu0VhWLDSdwq/6GvjhzLtUuj7QGXGS49ru6Sv4t8PQQUJ3CI8PRdDvUkNOK9dAmp/MVuXoJWEzBZIWxJ6U5127pZhboQp2AERgnw+dbbKYHlk8Axx/laOO5cWBJrdkm9zzyheV9527UJZW+TMO+05N9WBULn1Ifo4iGta1Osn2MaceVlTl0IOqm3rlSHYs6Go5KuU3KDkxc8iWvTu6o+mEPs4BXtYYX7eD8u4XRQUnezEGmW1JITOig/EJ9v3ds9p2dCayEm27GI4ZR8eu58cJAXENSNO/DorfjyhaATndO99v2ivZN9R/n5pNf0zr2UvVOyR1BRj+KaGgl0f7HBzgHomRuyyEXoS7/lRe/QI4zy76515nhQ4tG9JOJY4GGr6pokiVgUAp07QIwxdd/kUnZFz4X6WQslyafiVFsjTenS0325oPiF647d1SGN0o4BWV/DwL7mbpxqzjosUztcMOyPZ3S3xCcBOkf6dY94Je7REhTkz2O6xZ3AQ1SMhJhDYVMu+7qt8cQetyQ51mxgueaeANahMGtLjis+7muLdpNvjaNmJUQpvAO2w/3wAHMj+db0W/8WiAjZBfbe9p93pjIvhtvhDngA7mceJicby/DWNKoohfcL+uFB6SoVJXHx7g2hx5sSvBIXr9sYdqzdeSCxdQ/lSk2MmJFYsZv6lpXwHd8YerwuAUi0UZ3mWG0kKLFZpejZEObaV4Uxj9cAxyyJ4TOSFh8VdsGYRsHA18MlML9jtr6a3b0PZmzILZ0dHrXb1m49tjTttubH58uKM6P2tCemx1f19eFGKvP0JYETF+2mXG5PdGl2W5No+oTu5s6ei/WdV3oSQXzLAyVuAD91BXKG2TthVIrCJySIOG1PykqXCGU2WYV/v8zTek3KAzwggLmiH6YaFZHSBteZPJpIOvc1L1p9zW3VGqSKg3/xyiIBshY/dfi5DOzezAO1Yr1OEKZi5BTXQ7Iw30gqKMOltRbNr6LBy7/VoVIHlVxOI6oNYy6JHkGq2Xi2xNUNzWTNZBZrFkPEXlczzES7qD2gF54s9rq7oPUTeh+G2fZRhWVDZO/a/kl/Drl/Ij/tmzaVlPwZwNMvThRuR1GLWiKVPUTvyNio/YPV2Ndtwzujdf1jfPhpQ3nC1WjHfAy8mSnPUnsRJPdKu6AdYnNcMzSUNjt4Z6HrwM3DsZqdqpAJwjknZZ2ghLIlgI2K1Ro/Gtr1HglaQYPvQ2YRVQo0NV37s1wXTublUKpgFOwQRA04qAkTJ0BKix5jPcZGUsnYQ50LSi4ybVhH69zd0Kw2srKUAM7QQQcpfJK7GTap9TK8RvrRfQmcS2Ch/1EP6AyYDzPrLtGvlu2iJxNTGKvnQMobBeD5ifLigARiAj2PkI+JiibUQFeH5nD5FNpOiDMRhkQzowNnjFkXPx6G65c9QwUrZuDmTnel9+A0Whw77pY7KiptBZXHdwW4aFyaptH5OuAeoT2AvGD62oV/xLewXrh52RYF7qbCTaouyU6OU5Yp1vb+vvibsNSf5+89IkIZimQwe8PQNc6BJbOnC075vdrvE5TgH4jNKWrdWj1xwNr2hS64EYS0hJgEKuK+sPlhtfkJ3ujw7WFOsswTfQtbMObaokhrrnIgc4p/XtK4JGD5FvPavfoz+zaObJ+Z4Etq4/FuodB+iVecaiY+40GShjQhR3e1cHzznb23vfY2cZPFR3FI62PkOYQGY+l3OWeyc/Pi049l9I1nH7iiFBvg/59eY3dfj7raq3zV25UvBZidadW8VmC/+WTY6itesz6zn8MWeNSBuPMKlHP2YYAv70sPdWH4WLxEs/umeGzO+DOWjpwNEdygSCIYWT4wYB53IwJ2+Cs1iljw4rBkb+MLY5BSl85q66oamjghdUGxr56hV3AVFi1AFYEhS2mz2MrE96ac91kp93VorWhmrcPJ3lEpeNYTIH4Jv6id+aaag5m0tkcVY1LC0JwF9YkOZ5ikmT8BgZc14fnUjwYOGD+iyW/iM/PtbDCkmmbQJjIloAc2jSsK8lbnZueGDNZDqXmnirWQn2BrhooWbNqlNjs71PxL+KtuI1N3hwnrEbvYOsIyduY0KibqwODYlNZlhpT+sT58+y+S2guvSquANjO5bPXoYpEY9sb0uocapA9rlHWTYISZTYlz6jQzERMWW86hJYG7INWszqfxvkVuhmJ3tr05h2HNok7q3blz5OhhFLqZ2ek0uicgocEtm6iRNtEDjqQcjHVspdgLZ3h8JvXXoQ0MMu4RzJqJd5qOfaJFRpYEGQB38iA+j8x4L2WIT9dhfxXOf1Z2mey6FHF/3erf/qHtHfCZdB4gNg37cZsL3puwaij7Sm/OnzfNsWlevnmyuWBeE2XaumRzIY2DJMklUvg4PbX/JM2DaGl0Rton+1f94P0lPkQ7sBRjITGua2603NGh1WTutzSdC627cq/+FRGsxAgI5Zucb6mV2L37Qh667JoHA3uh2c5R5yBWyRE0Awb9svLtCE83WYd60wSJyUZf2HCjk4NBEubSA9iWJzBVV/uvvtzK0aWGLWkebKD0MdhEKIYCiwPcS3Nc00+SMV4hdlahxSR1Ap/CGCh7lqR9lOxShbxDNM5wKdhE04L6Xai8CwSUgbMKzOk6M9SQRKSzSpHX6V38Lfcu3Hx+QLCbmV+g1dwuzmTLd+k6dPYotK4uXzbnk7KzZY1E62rxC9BLmwqaR5znLVLS2mlPFtz5PwYy9z/OzAUo3ejs/02ft7xB+TOv8/cB5cvvXFFR4bhpMYu6IgrGkWNR3DBuLrfSODKBSejazWRXnabdoKq++6eXp9EsDEJWBTkaA4anDrsYKZYpwsACSVRmA9RVTR9V3Bhv+KAILI5Ub4zFevDmEsZ8awBTF8PhXWUzz8bQ1tO4N7nTlfGLi6Iol9ZM40xwphf8MEJMkong1v2I4CCGcqxGPvMZUaDaYXVyRPJfBxcgWDBd7DbL9Jw+nMBs1U3g5BR6vcmYwSnIx3JytOAIln3pzBdJHhT3K3c3ezrYAkmMxKJ8fbKl6RYxVsE/mEAS46DBEeHoN4Q7etxvBj68lWnNSlLaeYbZOGo483lXBBbGKlIxCDQyNyq+ZvXLb7L6iHFmv+JmwHb5cIQZd8kMHI50T4ocbu73SESPyAnIPBCDBze+PiD3YaI5IW2izQOwzdsh+VjMeMwIdbnikTHJfJfhtQDn/V4Yr4zHjPUggjoeQxDhCOJAVO7WazOr1E/u7dqsNJdHkCHwr37TwTLpGOT3Fcp2bRPN73vkvKzX/ZWR3MdtCotVm3OFhaJamBSzA7fR/lrdADARprQQhCcdVIcerW0scT8eioZBKJS0CzDFTd5IsDQ4IDWWQh4RjAjPC84vTiGfFw6b6efvcR3OCA/No6/ayMPhlSh4mqHHEscdheJ3oi9yRer2txsW/elqhULiVwsoj6TpeQ4+omzfXIK8y7Ak4PxoT9c6pKKCgHszM+cX3FUqh/AQnvGpZr62Oxym71myWOzVvY6oECvIlXrgpRetjDYDaqYCWk6buy3f5H6KNk51MHsDlk1rWFLfXP5DluzKle6+biq3/Vi/BbPYt5Ejaszq2n1NuL5LqVjZ3NdF45HH+2uqrV+GWDHE/+As/LdNnBp500d0lv/wE/8tlzoutd9rR3wWUGcRn0crP+Bn0dzpGIbnYsfFdmBiAuElY3gJIcu2YIn04KyJ/i2gwDJm3iGCeNZERgtoOBDvZf1pQhDLS25YZo6iJlcZlkUZKQusq2RujB+JLxynaR+jTii4zaEbGMaEj65LKU30N9MNUdSQxGBxYnZwYkJwjv3BHg3G3nMJhx3+NwwflSOvlOiZfWgsociPnlhwnsPQM0zxmzkc0nTF2ascvKmO8oE54oTENQk5YUA5tKzmZV59P4mG93TiRNyxi7GuDVZ4RmDK54gvKdrkpzFP88kN1Gd5cxz8RvQWUOrCqrvXh4WZGxOMHX2kLrAh3hwetH7xyZo9H+LT40JjQ4KSxCnDYlsFY4PPl0563PvjLeIzjKKKAr6f0bLiF7dGRzE0+zIOgWssiAwR1GgqxY1+iH7Z0COxZtr7MFJim8riq/g1OsWFAi+1IM/TsfYse79EjVlGaT0Y+dXcGhwiowhqOCFDDh0PK420dTj/kvBnlJCT8ntdyXk9i+f7euW/wY8TMwZS/Lw5/0Rf4oeGlboiZfJMOxthovsYJonMsCtqFXqgtrG+l57N6QA8DEk0anMccar3RArqJAzws9uC1wvb4akjphp5Fv6aWL6Jt82A9hJfuj3QLSorK6xUC6TdLmf7RlTT/QrkpoIkdOiPOL8+UgLvf9z9bJhO/viruyETnZQyJ+iCzjvoV+XEGqQrIM+DDT+7aWSvO998WVSZVOCXKzu08WZAYeDQmWRqjOngvhR+DGzrLVModVMhNocN2a4+nrvE/Lj+SttQux1i5NCZJJ8Y04G9aeqHikqoeIGZPlKdr8rPysWMSc2r8qvK7jGYnFF9C3Vedg5mTNAvm9+eVaiSzgw5QqnJew8YYsr4fF5Ja3kyRsoBOWD8s/C5eqaR2Z9pRsVrRTNBxkGlI9398wUN41elYcgfH7IAoT6rfjSn7mvAEUpvl3qvWHN4InS7nb8G4gDZufawi6/HyW3C+iTK+EpWLDu+kYV/z+Rig/5SYNtQguqNgV/OpmNKQ8CF4sJXOoYFRB8loS0Dlmdd/W7YrQss1tdDd11qaNpqG9jUPkU37D38UL8vui7973ybpgWKSsh65JKkMEsOm8sGiPidPfdCcwqACKC3DqB91O9D0dm+mXHSpb9PPdh2hU7f8g/9HP2fLfR7hpCe3+ra95nkrFPPE4/HTTnnbbDQqsFZAb8NFGP2FxOXstrojnMtaJfv7rH1HeuKoW7JIRu8PqOvvg8BwMcj/xITV7r2tAyc0EMRmbn7cYZFras75eS6nftLQWwFrpbWXGqqEf02Tr/Wd9aYauYaOVmTUEnImXoEd+2GMQGOePGhnhvLT81ICH6NarSKEzKQYH18i0TcOxuZZ7ZH0pUFvWFFwerGyLdmqqnr7qo2bVsyv11xonVx3+Xz47NZhyt9XBtram42xcbUqK1Fm9pKdrcOnLBB4SVJBbFVtdGc7t3egw51jQsCrLW0y0+29mXSUreU+8Rfmlntyl5xNlivrd/3VTnuzE1DAtwBleK35qoLBXW5Ak41ZEX6Ubuf7CiGFXBjkgsc57MGb3jRiRY0FQovXet0qrb/XrDKfjryHbCaeWv87IvsF9VV1A2FEJ9yghX2oIfjaFC7hI1ew31eK0aAFpzZktzkwPZK1BgodhQWtfG7uijtpGbmayP4/t51bJHrlh1HmJLB7tpZ4gf8erJ431Set/pjRY6Krm3ab08PSpMd3Q6nv1juglh91pD1L6dW/5WuczqV239PWddY8XKfOOBipT8481/2gLAiTnagysA6tlgM3/s9qMt3c8Ksi+znNdVoKAL7niv08pVf4+xWgZmf2Q1Lz02NuTo3udGB63NOV03g/3XuWb/evOXATud1fOkb+XhPFT8iycgysLKbsXF7gHObPbhnZMRGY9P6Ri440ojlZ1LxXUBPq9V404JqX7+UXOscPXHoLWfqcAiXcYkzZZCbluuqpb4NFvdbbQ0YOeNXRkbsubl+4QYBMamQQPdsG3VTyq1p6V4jyhbla6H85OjIJDFyx0JjFey00GnPndxGNt0DnBsZuWDh0yjRZ7wwIotPo/aiNG5PjuNIj0A8Mp7YJi+1X8pbtwqwbyBSFPph8gouZ55n20JAaKLi/MbBQRP2+cBkFMjPlzzMHxUH9DKRMzHsOxUZTyYBLxLDg+wyCD0Us5sTPKeNmtu4sraWQK/ABYNub5Bi42D16KWwcIk7kMxgOQtI1K6jKPfxX9zy+V9S+cjtq6PgWIQDghl1X68xL2296M83JZr4/hdjFoTcXxyzujgq1sRaSljUYhns1gwmmBIGuS1LaGbTcAuTaeNizRLdEkXLD3PpWURXaSuWVxSbdb/4Mx1SvOhIkAlzarjHYult5ZRUdA++iFhlO03m6eHDbpQtGR+AHnUyx16xVMp2XlPCeMYBeZMBtc3U35PxLkyVvDOg1p1xcqfiQRnaw+vYjh2bWhohQfzEd5zsx+Vq/kvgOOLq6jV/HP81K6DS/VpX94jf/fMXB56CR7UfU4WlbCaPXFsALM00iLMLTX9YxJneOTwlZqyP1R51M6sssjlOlvFm2NE773j/TAt+5eYkhyZeOGtDknOxbF7S9+VudDltlhya/eavYHVBgXqsQaWM0+TlqWsB7I++iMnGxhdPuvKldWJcUkpCsF9uGhhGvT2/Np+v9oAOyf7ZjMSkn9uoJdk70IdS6658sUH6W8bnoTfehUk+8o5/uZdkP487yF3H4PIYB+GoRgc+6yMn+H8xSMGHqNBBBp9fHrlzzypXoLlsLaQRdmxO48nj5bz3Mfr8gOh70XejXQr9CK1L8gNDvon6JuRkOmrC4TVqPWSbnU8jbF9aQL59jDsU0vDbZlOdF44tOOFpSfWktaS0CDoOFsiMgvnxT57pCTgZsSkBIXtSTUioRMZOCGcrXzN4FrZ7eVIZH6zHbikQuuVf6Wsi6ciqkqoGHRHoQ0zS+pveeGtctLM/3jOa2+C1uXdTRLZ7VfdsopS7qb2s15yvOcuVYRY4/Zj/CK+3su6AeG+FeWq9fsRljcvYaFn9WxRDoTcsFpPKAcduUZ0W/q4YYPtnlpa1xGxo/OvRsgS7n80WbkyYcfnCkoGYlvLGOH/8hoyfZXw/S+S4mISVM43cWN6AQV1UM1cmYiJn7Y75SzetQUTR3TDNowMBwUNOCMIw41CpxkYmgrDF5248upAWEG9Tlx4aa0JATMc1AQB9q+kGWRdUsvBXULYyXF84LqwTQDBceWqcC3Baj8JkKe+w2cjZf4p+bEZOZqoEKNv8JBATGSTZdAPOIhJsIv8oE8rXxGBT/tOGCfEBaqIbXTSP3lYm+ifuwEaSyTGwt+AQ3J3QbDIYie+kEDInsBLG4aGsjbScDBADZtEmv+bv5Yk3JNQP4jPgO8qbxH+Qb+Sv202ZdguCf+iFlKsB2UbvyM+UvO97wkZAj/omFU48NjG6cNJ8rZFqUEIMyT7Gr/mXUjFFjNQM6Ri4GcCB9YkHRQtzDyreuMu/wNvLM00x4qnCY7f2ADWbt2W2xnaErpnJsrHohNUifrbSCOsDTcChcQNYUh+Y+YCVjpvlcIRwJ1bJF90skwVj58AFGl7fZGkCQtn8aYc3mvDO7TP0MEjAHrRUKdm8fSO5Sr9TcHVBIsr43qwMDxrJyJy5PRtvSRMNHEJNUOla7+RPCokiaTE13oZSDnYMHr+yje3bYexAGCQ8F76ApkT9GupgLh3EqHG+l9q5NVWTuUddPrTBpRgZ+jq0aKMPnmQCrLfP2t0eznVtpJTIxbtXH+RCBEf9W/I/jx61XnitlXAiJyHofy5EcuShNcfawrklA00TuWj36kOc8IuF+tcrIecEzX3BwSfyhdvXbIfy9L5WEwBWykOWHY153gkRYhN7yzImn7S8+ELYgNwfWXDIbMaDQ9U35FY7mBGXgLwZWXBBrwc0W2oqUxAGqT16ms53iZFgh+wznSozDccy2Vh27DzLGhp793uI5EeLUut1vr8TWyZ4ssd2IOgrB/dNaMn5rfP5vrtVh2W/P/p/W74Aq8hzwLQcbDT69X6ghcHtOkSi4gKWj8gaJ7JlYFlcs7p6NJxQ4at3EQjOIa7FuYGwUXzIQ6xGb9A5npDHuEDjordWz/fko++rHouRdxSY+7X8mBv0u62FdCedwLhZyUv5nPg5lVfxgkGkO9VOOpHxolyjys1VjTUYZ9KUP/cnoswQ1kJk+RC5PvoIptr1AoO6zLkpP5mjM4VPfyJhznyxhwBeGFbighoq1vm2ZA7lspfP1AcrMosJLuRubTRPXPS0prsR8mFmjlzXOumD68I+/fcrUYGTWuruVZThKrTuq3M9K+WlZ99A0KkFrDnDJTkBVWCwBofiEt+KHBYitdksF6QuKBBYSYIR+wu5G9lgcgC3jzFOKPFxJQ0m+qgYh4ZC5/nvctSQ4N86LVT5eSlxFzYIrJ0nJfu/4Q/o9zEM1kUvB5LLY0JYRhpu09OV63lsIVSLlRDfkH46vXlvk9jeffKZCH5TXsFGkZUVb4MnvHpfwYi6Zy/c7Dd9glFZYWb6l1VWjEqcA5DJLWKf/wBF8/EnJjlif7DDM486brXswx1R9zNQJWb7T7606NWS8o6qO0tRZmNPsJ4vu8tGEfMp4B8f8ZZJJMBZMllVUerPNFZUgPzFnEnCH2gaqG8r5HFUyOJPUkLvXgCoLrU1GbDFXa+A6Q+O0dLIlySMdK1JABr5704oOD2F2FeDf9Ezj+yK3rWN0vlW8yNC6DXv2Rf+9XzjtYPzu1SU+D3HNbcza0/uc/CFkMKgjll18QCrnKMtKBTPas99VXK5KMUSSOk5uxpQ7RQ0HzdrkY8tSilzgKlcSOLvQ5HkTPT+DFRFhWAKDMY2XaN/uO0GYLRlWHho3YttCmXtXp5T3OZhBffBv3XngBzuby0+sfMAGfwYIcRm+oHBgBfT0UxKbEsvqyGhbBJqZVZdOsCe0rvJ4CA0f7GuhhA+BUIgH5+WhYPsYIjgU/gIdJmmpTCpXZSKCBqSh5212CclUi11hKk8SEJ6SrJnwTBx32qITwhjoa7HGxZW7DxcQhc6paLLWUc0q13UeIbpVtBbQJsxQwj4elDVteFv17qofg3ir20r/cNxVtzExQOU29G484yq7LoDrCyOYCi0AS68ztQikDez9vyB+6sRCPAx6IF6HBQhFlJ6rAQFBDtn3y75jhlY46QHn5oGWxR/j/yKZyzsIj9FgQ8qPHsKMXdG/mEsPvai6ekMIY0Pu1eK/r8210DLHSBLkjAoRIVQ/nEmCKcZZMWod7a8KvKOfzwvCdqLrm8O9sJhzMqcwv3sBA2BaHyE70I3eottIHaMNRtbutAnxYtCiXAWULn/RksyZ1fbT/BSaaMeU9xz7BZRZVdv4f729Bf0Tnx3RuOWmOkCSOBeqz5sXKle4oVNRVxXi/I5ekBEC8onmZTZV3Wr6jxI0KwFMTk9exeX2vsiWdiKxb5OSISzkMuTAIpdXDALng+fKk1CikeTl/Stpr9veuFvsimBvS+ShHXlMpOpfTGsZtAeiWwy6PT+jtJRmYOH5k2+aPymY6nl9UH00tZ3Z/oUmStCX5tu8Mvd918d311ZdGBL7eWROwZswqqiPe/V4cOZlVW6kwoZZPSYOQgKO6iu37h0ITUFRAHlHrd54M/spVjjnItgc7U5/wPlJvQUi+OX3TYwOLKQSAmUl+0d4u/1f9dGbcH2C7T2gIuQ7idNxzT55DjfqfstarIwSWmRFMJQ89Nk+vr5lkpUVRxjtf+rE4++8Qhyklz7PR4BG/SLtu5meLlqZticLSeKZp1rLkuQ0uevLm+dESf1K+s0pRf6gwQGBiNKM+6RVgKz30qGSY56vw0vT+Mc4rDfIen7c6IP0HffLXv9c39QKXUruHpkTSSK2/argTtu6n7BrUE82PRJysPz2Kx9CJvpHwfYfYmtPvFlOax+7OFp7N1SmY3JhQ0g2z2emQ6+O1DVCbgAYFdnQXNlf/6eKl1MzuTGguKk2NvZDbM56MtvneUKa3Zy4uRVSUnlNsMYemwu/r7QbPsqCdqHehXjKIb+W5fTdczAHvegw+ERJIvEExP9XAkS98GGippws1R/PuzmIvsTF/JfMV0XPe1w4ERPku2pBTRj47zfewixHt4zbM4f39lpshij7TQFbkcVkeVbDFwUuRno3TryU3BQFBAZ9i6FTHC5vqt3yciEQygtT0AP0dK2JD85jC2NM6QTaUchbFscdsYA+sylwyzr4d0IivINajxmAwaAL+Gpz5OIFun8FGWgAU7re5qxJY7pY3u+cb4d+fBuJLoHHvBSsbfTij91MuBsuAgOdP0lU6PzfweLi6QJth6clFqK/6geHBlzhc+NwG1FRU6Soj+43MH/Pa/7edxjgZnfD8lh6/9v+KuguEWkRX3eYQv0FnmkCE7JS0lK4kDtxab4C+RyYpyQd93ITwWrT0TJUW9EJhSs2wQ8hOCdsij1N0zCPBtEHlF2Y8oGJdathG7HxL09mzxXAa/XrMZO78D9NbTqCB3NSesAr6gFd8EIhuAwSzB5kIYZ1CYauC/yBlYGeZJYd8xqjPTl3OTrBN06r6v4632443BkfZbqoWNYqMG42ruUr3c/YeIGej4ObVFDydIA+2+ZsybqaBcJFbkcQOR9DGEmlaJMRYYkh0T20FR7FJoUtIDJc2mIf8Ip7+K8r1gHiQVuLlx/SAy7yXj+D07YMBFm21rd16LA7ZrdCej94WW6nuz0tLCbjptBCuED1zf9+fXbTOdEPwBiQ1UNvabKoGYeYXv4LUgIepqD3cV75mCeurCMdBvFACl4i1f4KnyFf9uUz+CrleWKMnnY7nu+y2ltDN9jm0PU5YpSztREeh29TZrJPl6rRUvNWZqtQ+zlrol0n6E9fZ83/xIHhN63JluPG0BG2ERdQ5VcjYtvq2WuSvJWUqbO4GKS4EX08qKg7Z5Fk0Noi1yNtLG1557e8Q+pzir0dTQQEc7B2+Mb6pC3V5n7g8Nv1+7EDJgYIybOh0N/JCQVTw9HA5RQpemcpz8t1VYkTBudRTp1oa6My15HfOuipKDNGOh/7ozVFGAbtN2mkmyrKKAeiRiXKQGN5Ef/m6fOQ5bnWNkPl/Daz08yaIUE76NTgx56fB4rsB+lLzy+qTCxn6BAt4eWURRNqz+eLyAYGcczAQhHo4dEfsYoUkG1dBhJQwo0GWeRMFJPJCFD8g2CrIIauV2BDSaGHIEu6MNJ2Tu7giJTSvpfuKrJ8lahajlDU411GYftxLxguk5HRZCJElD0pbL+5VzQ8XHPU6gquQRBurTrcGRSZuS4/r1SnAmM4lFggGkQePkmijAmzKACGH8Jdez26I1iivFFFKHePOilEprZZAEQX+7X6JFMn4nVPuvQa7PAiwyhFlHrAjdu0kIsOdrLKFpDnqIlJR9BswUbVjp4vWQkq4PNkNpYRnVSAT/4O+91vjLA8ocCWZ4NsreyT29uB/sIakJGGkNRSv3iKtEuKSdYCOvPR5UJKgYYH6096eRIBTg1iH5mZh5ug8Iow6fnAmL+6vEj+K73JfiJgCjLuz5IKfoiqI778Lb5smQgyDaNHuKjZxVjtbbcz8a1QOvZdW4FEq/Ul3UrKhdL4HzXA2cPMS9Rst50tRCKUke0SZM33bXEx5E8is1LORFyIfZKH1Ovf0G/cvilDyfyAMhNB9TUj7eJtyw49uHzm7PX/smBMM7+y/A/YFZlOeXApAMmVTbSoH9pF82/9KUHTmc7kzr00wm5cOIFi+mEv6VlmnKNW1OWzyhaFiZLB9Sq0/kSW3UQMZskH5SfqIoIC4mtYJqwOfmfzQIhlmUGPk+UO6VMyMORdrInc1IufJ0bOBy9KeZgzNAL0OOx6KtdSahrwKQZl5RHl0RElkaVfzIosDsqoj72fVU95dGthsqueVPDyeuvFViOYplTbjmxQOasZyior6QxbQiGgrZXGdaJBzH9ug65cEJ85pN09LS764YvzaBpzOJlp2mQJSOzKl9aojPawezsJQHMnSOmyCmBYWGc3CSF+yBruOwgQJn/FvBn/eXH/xNEHvv6uxP+YPkwa3jTwql+cFVjh5uxJE+faq5cBeEf782uNqXNV5q3HSonl83YUD2XNp5pN/HD1OaSUkA4blw6aQr1ZKa9X2rfsNG0zC0HhXapJLqw8JDrsGGEM66w85RSu4Tf8lq8na8+YnsHhvdjrmNKu5TUr+Gwcsx0SDlcXOT2614x0SMB1wRZqXONoljxICUhJjYoKEYU57Sj3/Ai0IIumA/V5zbVJOuxRyL4QHnA/Y73wszSY+dWGBuheuUF7zvuJ3USmgLav2xOs9BMvgl5E+Q51F5/+Nr7tdBLIqOaLLPi6jV1SIgmOY8TTnI/zD3Tk+IyF1/yu/7Y0rI0P1CXVcmST4ZIIGjHobSben1QCUpvXd40BrpyJMmlw4Mp/gYVrEigRXPq1mjvJxD1MI1PwBmYtlD1yg13AApgc8EqhXTjQ/d3FxT2ZKA6gq5pey3GkZXRn+CAgCDQDUgNcyLYxlPDZT3YV367TRKA27OH18cgIjhpdSRdqJwTaYTvHDH1S5SYrcOCoVhf9sgZVkwWsgoDkrE+IBKbdY+UezCC6/jYasxuOrQhBh75SWTUi/CtcEv5oZNsjLrOyvCw+yKdEf/Bo5vaxaSqAAgFnd388d9uhYJs/LflEdf/t+GvfxTdis6pmzEB0R2P5ZlSWZbLoEQXO/vnyyW1O2QuCmfZ3SPf9fk3/Q39/4dLRk6HnHZn4hfpOxp6rIbaZ1bRIuZW2NKalyzB0ZtC8Wdsj9jOiMAc7XsUA/42Ct22FpvH1i3owKZSLNj0N6h/QnI+OsGDJVjBD0nVfRsTS9DhbnSxysgsQSd07k5feQlL6DcX1rd8UycwGIvfgKkXfvFl3T104cv87xrMK4xra/P9BcjAYrwYnykRIOkhbTgSoduYfwlTpf5uSNAdPPppwpSw4DDJlGc0wh0h32jkL6iBlpHbNJt60bMTCOe1kcwYH8MzJhOSLpuJXrMEpnZB93gjk88TIenEC9PfXXFMph8oH/qJwi/WDgwkhwWrdVE85JcdVTRCo24ahCIq1q09EyzkN9o5/nPyfbjbyxGcf7Wb77JAEYUxMpYHKHH3asmyFO0v6uW1Rfhz7y7HV10TQ5pICCtnIIYmLCVJ6FsOk6XEhXKejkvkbu/iuJ4B0od/kUIDO0YmVi5r0eryC0oLUW3Bcy+zN3CmSvF6KxB2f0BVgi3YHrNgAmC1YcA7F1gDQOuhlq5PTCjUfM1KXzhSCF5v2QbC25NW3FAo1umxB3UUoT1hJW3VZMWAVwTuK8mGpQksoI13Zc/BFVe9uY/FDrJFft5zX9ungAgpAXEuutihqOij8R+es4ir3pzHEjPn8ud/FYERKQJzh1w6+Aoy5AItuqL5HS5DXHezUZw8vtxbssifLHmMFFwlWM9/SzgqjMLaXS4i/Y2qj/niyRrO7XsT9XdyvfArg46FsZnA6O7ICt2e01qlJitLY38yJkxXqfXN0o601IaIeoLA5kFNTVYL2E5ioy18vllohdiJuai52WqGTGkdugizFHxauMBnbkmm6JntYLlhagLXOXdqXergJoZx3Jug82IzS3I5aRxbe2tagIOZC6mheRnZGk12WB60huR6HQFpre22j3gOPzDm8YDECJqAtZQLwruguQA8MDsdB4rllJysWAdjzNHjxNN9L4ZpHI9FkX3x7g+cvDFeybSiCjiJGJ3OMnJ6crIxHlZD4/TahosRmjBzjCiyd605MAt5uhxsW08BogwEO5hEild+MnMbRnulcKBPkWldz7pq/ENPlXvNF5AcRbGeND0lyxXvrIlGjsJOqbwvu59+2/t05km3KQ/fpq+X5UntQjMzlw6zcL0BpQsMQrNdHjjjeuqbU8ncG0ufgm9GjdFqP5sMqJbJUkHkR9NEp945xlOkfIn8I0W3wgqur2xtMVMsLAzLU6tnhBU+MiiwJy8Me6TShrWUx4xox/k5S7zHNzKcDHMiw5QeY8d3V/ATBMmZJXKn1J4mdcpLACrUBEgzSwz3wypVMe6kBiMg+NInhB70ngT9427ze2PLyIjFABjMdweBTU8wEeQcy9RH0gJpqLBj3K0dtIxUHg7+q2Gz2T0yCN5pP2JtOVmalBFaADQRTWFP17AGBFnvDY2b93mOmPBDwqwRgwJxRpB1puOm3bC0o2MgNnZooF+ydNDeEUccHOjQbh434YcExvcgS0AbYRlsowUvuzAfTtMyTtGRBIbN5FwNWq7A/6/JGQpy2HaeOEI8dGhliZ/9OixslGPwN0WNoqf13z4TlFPoAyKsXeCDSR+Qq4xbrdTy5nlpyv/9GSzzlS+OpHDI/D/XJ1oW8HYEXNZ3ruaw5k8faH6p+x4DXZCSpanbnK/1glIS3nGw5giJRtYNoltknTNFlst0KkpW0D+txvVOjYOo7n3lEgk+skbm+1TBi4VhWb/6gOfa41PfMxaIoPTr6jF7oOy2F+NWXPnjN9X5vSmDPF73nuNHS+Xd22/XLEcMG5sIw977oXpBgZafXpttEPk05P/lb3bKZxV/nppW+tcKs6+VcK9svNU8e/Xdgw6MVT+YjS7baB6L+16kG7pNaFjAB9tjLTPqahInTH3GsQnzZct5f6U0+GJLW5ZPe1Wfmq5+8fNQRzVCNhfsU0bEH1x18d0YteRpLSeqU3ZMynm6qdG/0kneWX87Z0Gjw4tQRb/fWBpwaaNLXV6UrjLtK/ZtonVS7Gj9ALAhj9i8Z95ngDo6KKVFPrXg5DPPLZ9gC/FElCn0xoln6q1EaVqatNigjqIMSG4ZeXC8O3KLUJ4b8VGmE8QtAtYtfwbwyxza3K84PMLVFFFcHNFsUODGrqnu2iCzcHD2nWZhGjIBRoPtQUKzRZgG3HKb0ER+Xg35uOP3YzYHJjULLP4HEewBT2yyu4cUpX4q3wiHD7stQp19n5w5fmRAt7js1Cmzz6iTmiVsqQaTzIkHTp1GGAzCIaHvAjmzjKBVxRARCASrbpu0Ki0RAaNQdfjpLnw3p4zbzF3UQjjPLh8zuvFc1zCnmQAQ3zSsuyQOO5aryMriVCNHbBdIF4gjgCqqMgBDCHpaaO1bIXpNDCVoHmWeiCJas6VEgbvRQG87Qz/TRq+5cShBz3CqSzWlaifjVBJzRPf0YYbO5fKdiWXX+Y4LuBQS5X8p6rJ/VMhlYPTBtgVFVxQkay8uk87LiORtntrD6QyPg0X3XiySIhp21Q7Gg1FNTcRPUXfKPDp12QWylrW2G/ISs9hHZ7ZkZLC05AtP36Q7+k9o99rSAOr3DKNfWjeGfmfJKr1Yv6p3d29GkxiY+Ne5YBbUGPXRxni8Fb/xlYUaCCMc8t0vAntElAdXtViCCiEn9p1IX9BLCQrcOk3XDyVi4ugqnWZMobbOoIK6KWf+w8yQmux7bffiK7J09VV7sBbdvOWwqlDCTzWEcmAUl+STO//ShS/eQuPYZjnd2IhI+y/GmgwqY58xVLs3fFlPb5Jha8jSZGUTCtk0R97xjZa/rjS9T0LrtuUnKbAkB+1zvTQ+UrvXGLohvmoFwlmbrOz00m9N3LhEQDSzWjgt7Oal3GFlE2Ehy7lAcPH547kisdu3yTxRyjaiYS6GHfT72mKqp+IU7dk+GcmDsnZvjy7OC4xqg6hKrZYGhsSVbYIQ6Al6TubF98ddtLBn+srPGjvsiKs77VlbkT4YLEuZ/57Pqold3EbMyHnzbupVZ5kRU1GIlFTsldNNA7c5ugyEv9FsiA/o4xm5Py4LhGOWJJD7fJw26RABAIHFdB2X7iJhUE03D5moDG2HZ8cUrTfxa/vvp1lEKzj9AB4MNDjOMm8f9iua6z9ewwKNFFShQDlaHFOI8Y+VCPBC2b8id/9U+gE0x5b+Nx7EIEcJ31/lfZDByNuw8EFW4qZ7ISIsmhZw/unUcc9OdObH18xFkZs+JT6fBEQuU2+6JxGnJF/lK+CrbLOyYGOTe6VI/hrm84b/kgRrO9jcZSRioETDfEnubSrXF+/p2LKuooJKeNy69Wiltm6yFpirrZ+iNWp7tnpTQaamDaYLDH6MYbeuT4ml7S8nPPZjd/iZ/DrYAX9U1I8lsO7q7+nvsjC7ptTH8Ly13eXnBEU/bvBK/fLUlFj1BkX6v8Cvc5+9zU1FaG1BQotZKIKrggwCyWIbT8H7whew8eS8z26Gcexd3Smq/DRp30oPbdndNL0wt10uvV6ftwHhJJMxK7zRGjg7bQKuehJzdlBz+AyvJROOIUgIFZgsPnzpQtf5suJqOO7xzydfeGeqo1Mm1UzLixdD9ixbteNE/gt+akwvd/10V1sM//kYDaD72jvZDkZ2SI7SJoniULl5JMp/TBybuHNWnZ+KfqeM+rfqW6i8W+btyiBh3vN3aW8PMdHU55N2M3xggEMzhe7125pL+b0Qo9vogotVGxhVNjJVPihT/lQTlLYqKgA7XrkTz/JYW4vD++3qb9I/ADslaEaMap1wG4rCWhewmrIY5iEuDphDWQTnnMvIjabHS+pgJIkZKItK83WoE253OOwJgh5AiH1CunAfwWANO6+EaIRm19zvocqEOHJcPAf6/ZZZzYAaujJwmPX49Eo/pUTw9FqavIHclp591yF13CuwGfL61DP/CCUayUpWfnGZz9tg50y7ZrJzvwzLPdyj9fwUg+pM4eulnqjeoA+NKCChKhDo1ReFuY/MyHudSDxlwBSLWGN83ps8Vp1CG2eP5TyOzNHHyVX3fwE3pe4nLjRpsjGN8VfeUMa5PmFT1yu8zk29LkAH6+MkDz3wwe9jpuJY3CFEJoUzRhpZTGyhkHnNR5tmqpIz3rvtg9dAJPqnH6D+jZiIkDoYLf4kSMeKjs8O/i0MbGL/2CsY5QM/tr8yv3I/jf1eSZu+aOai6RgbYDt2RFlWQ2UL/clSGyJ8dcQ/lQf8yB0n97lefboFPSVbC4tPYLD9XR8yw6c0/Z59MkLsLfoKEWDHJs50vL7pLverUefzoi1zYSLcQfQa8GnFT001ayeJq7SSyQ5DcYrBRbLHktVc0k6Wovr1vwYPiyOTHkG2W5YyfLLfk13k2P8SxzLpPpHlerJiI4FlWwehmZyMN4/yNsyV+ll3PfGT6UkVbxBE9bS0Pc+gdHtUua08hS87Lxx5/Po3B/Pqd4u3Pr5/MfU0K7XCfor2wRJ3KpT3JsroYblT19XmDDO1Mm0PbYXa9/MerhUZuQIvhkVN0ZHlg4AsagFlyTbXtZ/F3vzuVB4FC/72UfzeDpkfgHSJbhZOK4hP5PKV8hT3s569k4TjRZdNFILJgjI3/4MtRUk5/M9uOr4+aRqOMIlYQfRNRixApyPgeFFZSaDzV74RxUXaANYAie56nu5zNN8Lu3zstmv/8Uk3IvD4xRuSBdoGFGDvJcXhhRpNUXjxC4N6zoWa4vAXKhnxfC2WE2N3iq3eiQp/L9EkMM7aj6kxW1qqcN/4WnucVWWYH+jp5EoQMU+CSHhi/hucGnkRi0C3wmnyI8xHH2p1EHhtnEyER16CtxsB7Yaj7J00M32HebXYLFojUWUoFBmViswMeWWmXJ5ZKc/IVAC0UqYHXs/G8jkyFRjwHfuSR0rLrCs7LPHF/i6feIt/kU+JecKX3FczioGR3x3AzDQz9Hr2jLiEFFY8mqtYl6ouZndN9Jsyd9QIRAXUbfwWsZTEMy01nQJMHSvCBH7QEpzNnqSr3zutOKHu8NKNID+B5rE0sqOZUcHGkBJMfJg5jcQzeye+Q4Om/8LlskQu5L8tp9ZHhATCBFUsJOgHe22t1PXpv2P363yAk44DCb9P1Rpt8R0qCRF3CTtvLoJLg4qBysGQHcA/PZwLvWsgXXgs1uoxMJxeqcK1ZAkBqTRJcHisJFWHWCW1+ItZkb4M9ppkHWbperfORUIDRbfHNuP7yOiiv2fVTn05/O/am9R3Ie+C+YtPPZiQ/Q+66aR34an8kEXOZzzhuptLk3km6snTrVpyARmCTzMjrqqvnj9b3J7ke/oBuWoGKB/TklbyUBjRgVHqX2zkxIZJNareFp4vQ92V1Q0r8OuiqOW7ydvvrDLHFTKKqHFmRiG1iGMAp3/huh0kaYnbHL0pG0a3IYjvTstGSSziLlRDkaXRQrAkNMZ2/PMbS0DBqvwVuaOHh6b4I9yQ+fJEpVMuTy+XpafLyg1KKZeno5/7w9lzkAZpbv5khEGeE0nDsZj1HUdPYRiJMj09k/5S3M89y+2+wbAPer7cRPgl4Rp9yJFVes0nPsykj2NlU6PwwV6UZR6caFltqXdTsWneccf65p7GhCJY/hZLCuEexXbs+ukeLPm8vpmCVWMk5FTv9nSjWDuWy9zGUTaCsLqJrOdF73NGZc8evKkGPNoNs52J6t+3qwnBErUIZHxv+JYOdPBj3eabfPFhIXBuN7TzAUGXM0VyUS5T8d79UPx8jcFPoRl6TKQg1MdDGo1jJUGuGfOfvvzJnpeHNGqXj0VXSJhy8MWppwem48aQcReaFAKl4bxy/lh75eKIBhzyDNFadwpwo9pEJ96ZBSiwXIibHr3kMIPC7EKf7FRr1Op79y2rnCbeQAgRYoOvQgREG6zTA84ptC/48J1Tv4zJMJ8VMrxQtULMRNUoCHo4/miws+Sd6fBBU2WlM8ZZUUGQOndPGr+dfpxSUYGXOrcIkADfUdXpj8Y+rrQQhZcNML8ZOCB/8/pSjI8eVES5glu4awz6/GUBDjn5SDOnb84iFBKAkB1fkA8FjhYmPibAG/FNcQZDEZnnEU0mNBfxWPM5BrBgVtsPnxA/w/fQhBw2Bkjjkk65K37jQLIBS+Q1PPeKijfbcgKqLo+gB6DRviBBuC8GQvD7mOlO4v5E0NbTSBGxaoR4e8Y9Tinh7r467xTsWH7Vi0n9GinbnFOIvrxaWb24vnqz6F4bEYYEusnduiSaM+Z7Q71LQFea+mp6/f4u56V3kK5XQMdGstmCF58pdMpsS/beS9/YWsmf3/Qgmeb9pjDf0byIjZ96yCsN1AIeEJBmHhMc5B5rCJlyLyUoJCE0dAFrlDxKvmVLyU/Ko8TkJl83Y6OvYef3m7jk6KQPAqPxNVyWWSXmDoA7uv/xZpOJDrr32W4HPKonCu786ZcMx1YmOmne5150IKJG4U144u0PQvDZ0rUhHC+e88aGyjgI3NNuJ7ytpw3nNc9640NkbIT307GA5YH5+YKrvTRPIc9L14iMRvHUSR4pjbT9P1LjKeaMjPfTS/Pk8jyLVT8saijNR870sO+BJpGExlmFVqV7XOwj/5NqT3I6+8GOBHFovJgjzcyUKXbEh4oT6LjAUbTUN2V3kv2mfQBdCcEhcWKuIitXam4wiURGTZAim2Z/w36T4hdO9SpWz1mFUo9gdtPp/J+QG4iYD5JSqthrv9/3ROSX0bMo96o9DXA0V8hoG7ooZAsEqLfC1ig0+p2s9LyYOtb4Bna+Xpt9HCyZXNucJMGnhhB1ZVBaBjOFRt1H4EC54rQMmkGvn86XkBO7VhR7I89PZua7KUZKqjHt9dVU+EuIAdRLeChW56EvBxtMaontZyBjdcjsy+C7v4NmyVYoj9+U+2cEhl/o5kEIp+MHez28GoVtxnMOXQ6s0L6zIELFUYG6+PBWJp9nYbQHCpq6VDsf9BcUxv6eNoG4i2dx9G3B1U0kDEL4xJrrAS8i9JnmLW6iFMLmPH61c82uRd/90/3S4IQVKUMgrlmVj9YtxLIWPX0ozJTFzxNWNRZLCkPDksNTC5MEFr7RKN2PpdFFRRS0W2WPVm3A0BtzSHEWbBWkSxNf+QCqbg9/xX35aDzaQ5ZlFP9rgDLTul1kB6noqOY7kranJaf4OEkD+SSx6X1tgk9UJksWsr3l9A3URrDDWmhn0u8lBudLCbZl3vP5GXCWdWD5CuN2ZWpRSd70qa3FGxYlCZilBbm5zamV5nHaMp597Jf9pRWAXMPT864kc7W8pKvS5XA1mgedkNwTaWaFmc08iyA+6s8mQQLS+er96bPg0hqcUcv14J6WsTeF/836OwNCGga3115gX4jc6OcKTposSfQ76CwE9nNjHnN/3CDK+l53Dhx9w5SETbahE8PvXjYAnyd3dClo6vFj0zzGns1KD53k12NcHPHeA4G8S6a6lgenIhzywpqSTvEyRIbsiI4L2MX9qTyB044bS6ZV8VbmiW2zHxJ+oQ9n++Nn8royx403xcIfBoH1i0PRkwf0pkqVmQ0B2SwXe3sAls3lp/MQdn1wGiJ1xRzqbHem2C9S8be2QLj1Ivpl7LICLSB9eZphZibvL8IEa2Eon9hYa1CGQVExSjlvxrDXrCZc/U0vGgs7tQQTNAtRn9IeOfbhm5hvWE8Id4YtASaYmwZbFp3Oqmn2bmWD4jdiP0sT8MBsP9+iay3dOC+tGWbU064wtvamTaVcHUFC9lS1KrwFtNmyUhwU6/QFV4l+Z5f4ET8/SEixY+NBoFDvvLNcn9FUElkUFlYUWdKUoV8+fvxyXYalO6R3cRhp3uIPi/hR8V2aigpNV3xKR12aFD9NVc20eL5vj0csJfLOYEWH2FgYLcO3x0JJu5IkS0QuRS3LzwlTB8UyNym3KxLuczssQcfdiwIzdatLG9IMXI6eF2MwPJZWUnri+a+8s7i272d+wfiWnZMmZObptJ6OtlOyfuKUkdjkqbFxExNbVy5fYTk3+e0mHNCi9aUbtRudfB7x6DHkTig/5C6Pl0fJ3cfjz4aA8kTy74SSBB7bweDgu2mUVMqbsvHerfVicVHd91UFi38Tadks29tUVlYa661Go+D/KWf2LPGnF9CQQBTeXn5inXxck13rj2PzdbY9TLV+AuI4GNvi2jacNHbFJg/9TWukn1j+l7Zgmegh+vbTwgLtep1nU3IR6TXwAzQvuZD827xLymypTkR+eDCbbcERzu/IqqFBff6LV12KUZuujv/b8Q55PmWEMjor0Nm7AfnzMFf9gqYS/4g3L9kgfNmg5H/HlF79mf21+MAxnuJM4NOHGwLQu9/pG63AxS+yLD17Bfs2NTs6mf49Ph2xiOPR7/k67T2vrhDPr+nnTnC9fg+snB75zRPl++Pt345Xpe/Q+s6C9YkR4kYm3haH6JmTz49Js44VtvknKS1Wy8+vr/AdPgOHdzmqWQCyl30b+wZchkZHY/mQhIYd/S4HzrWWfDD9RLcSY9o+q4rkXJ5Roh6jmDFWgVGiE407Zlt0fEpMPzttLo0oDg8vjih9Y1C4eBvwvelIxUWuirztEXDXVrEC8tT8rvoWCz9tWV+76KAZTyZOPcqG4FNOef3tltGGlvwZFtk2WsK9ffZmEELo0Qn3zdpkmGVuzG1WfrYD7SlpH53cdhlcmHAIgAu4ce6WLgdGq3JTeckcnYGl8AKQdEdJSHnow4rQupRtdgLgpfHpDEmcVC5wN63Fw9+Hx2BA4q5FoLtAk/8ORAFUYpA4Pnj82d37t1Hpk6yKO3yBEwf5DkA+BRJPoolXA5Q6exGy6BEaCFU9AV/QyTBAs6S5Al4ip39zGTBvyDf4nXZsynK8FyCkee+Ra5gzalkrsP16YDKEPGb81lf+TTsfHV0+uWpdwYS4DGTZu0+BdTPfEDMGpxPkCpYHV74Eog7OF3hAh8oToDpWOP3TDpxv4FDTs20XhnN3n20NFsezrF5eQPFsXIGm2avn5fp1aQ/uxwmPO2UE4N9K9Qc85WLC9o9/NOxe9PMfDxbkp0HQQCs8d2EHIqp0nuCKzIt0YPjfBMilh28NVrgzKnYFFa2qsAdwMiQYRLJs8cXn1cXPg1f9UvNzlLL5oU8WCoo7II6WCkAoRN+eDwfezKmLQMKIyp338/O32LDMjwZSJ3+hKPRfjhoM9XV6z0KDoc7TF67eYMSzrY83XxPfmDF04NqMVJJPE6KYJdKBn4WC4LSPA3f2sEat5f2fcl9VkGnnMEFdXbnhraG5dTxBnuWI/BXqtEvKN8Ks44zElr1ayA5p68aXIb46mdwrVidxFKryyBaHwBEI1Jn8woPmWIiWw4AphjglJ6tr4mh589jFdSt32btsu8HXbWaH//rHDa+KiOMhEkXVqqJKDGKsC85f8DSE0RlcsOAZAD+RCzUEJoHAZ3X3MjAlOZBrswwF8sa8ysbpYgxiRXzV9oVlEYHLL3sFzpta5GtWMg9mZvVh6VTRvHnwkCIXC5bKUGt/DCvNoi9KVNkn4wpOVOMUF3U8RfxgjtOE9/vAq5PCY1Pp8ldjinth8MOnOTvIjfM5YTL0hOpB4K7+Z/UcfiwIIDls23Xf0FH2zR2wMxLLDMp47wQjCZ8V3JIUUNvPCrm16696qrVB/QyxQu8Lz1hdGQubd/bSyz9L5G5kv6cusRKNHx24WJ1oj4/v3T42UQjlXaBs3ygS6lRZ+oXraXmp0jDSpzLKRR44gi3Mzsan0Sv8chX2Nu8YfUaK3TeXXoFPG8i8XSFHyUdPpmFyf+Dj8VWacjK771eH/JYCsPX/uT+ndPQqk5+3sD3Q7WqSL1JccTBboFSPUY4PsA4OBja3b20kmL1tYXsPjbmqdXC3BfMM87SofGFxiwKHA+/cxtXcJWXETU/TQbhoM9JRWNg7Zv6Wk3wdwJS72x8dGXd/tKC9n8bcjocfihC+0V+uBQBrENfDTXToMw2R1ZuySpZPQgxLL/Yy5pYXVmbvK9xpOmnzsApTscPhFdAW1R+wEseihvwDZfwS7rgC18+/TRBLRCYoSyhvujnQXzfQa+ehmP3ceVsazp9vkhGY7fwfVEFW0N5L/j4bRsiazp/Ppp9+fLWJW7CYKIcEwcV//osZaRQeXPAgBVAuCAXuaG8fNgVTS8goNfR0GNnKcCJ9043Cdsx2bkhRHnZ+kA1CQKMPIQTmwuTto2J592EEeggRcDNE2tz5k7xO3iQ/9UnHf8uXt7W1c0RqG90kcavMgQH0qH87REJtc+7O2vgk0NZ1LlnBcYdJOJM/gxZLUeHSgwDx2idNEvHKUYEi4eQvgEyPgFM833+eUSSys+LLfEqW6oMlWQCqUGhz5IrcCkVGhkK52XHEYbNWnZspzz6yWS93RaZCnqOc7TBijdysnYgVxmLFK9RRxtdEDqGbJmuC0XkBgomGrOOdojX5x2/IH+acbCC6ck9el7vEuQj20E2l+Ablph+e7y0rWZ9x+IdvyYdblzShDmk7hvgh56zS1/EfP35P/qN1aWMMJN13/rtBzBdTMclPiojPxz4ygotW5GSMcEZyM7Lr0tzMfLvWGZnnOdkB/i5ZBJO/v4ng9HChGzeMw/kx4Z19RgJw3CSCMjraG85dm+FAb4AJjITrqcPRrxLP76IzvFdDLv5kPdSxub3l4LVlqgSBobC3qTvh9k53PSdH7R61fiYUQyFvBn1H++az5G49Ts6cWC+rXy+m4vX8cJFTGoBOle2OuynRh6ZQ5WTI5EPPDwiOoykrmlY8VS8SGTTp8rw8eWmDUSzSxz4pM2d0aj5AD6HBapZdTJbKzSRbFCpXJISYY0VzUVOIPEMu9kyMle1m8OWeHy70hOmCmI4bqLMWWEJKihaH1XIyMgErTnBAeuEXR844Z7bNgz5HjXMim5Mrvw7sRywILys4ehrOC8SCzkZBRxTcBoFWMeBoFngAsiMCjXw1QDuft1Umu+O/POASQ/ZjgxX5Q0yVOpSXKX+P7lzCS5z70l96IWA55oLM+KfOWXy1xJObQGeXBbdkZOW7+lpIjsU8oafF/vIK4LFYMRVOjpG1WWQXbUEH0OW8douoA72R4MHO7G+xmid4OGSLbabrqRu3dHWnbRUGQgHrzLZuvQVZk1VaqtudDDOE6zhXbJUaYCljDeVVMVfivN6Pn7hUAMk9VY0XjrLxgEISJ/mTDTIIgNa5KzPQP/1FOsmNNm07IjeIgGQD6dyjm66Log5EOnQVREK6XTYULEB7/IJopnRrlB4VvTdyPL0INffb+/YoWRPkOjOqVS9rhI7RlVFzp0VDbzCWvClNp4ddZSwtPkmpW9rhuAyWap9ESoHhXyLjJk4vB83sLXlQ3IBwZ53MeFjgQpDRqfrXpfWEevR+VaHn9+0rG/ANnBpEwyf5qXvhHlLDx9lpZxAbfPGw+zhEBwSIjtFqAIxs9VassjRv0ecMbIgCJp8DLKlXcTYX9bxKJ05v0u11Rd3BpjWtUAezTLYi9Eqd3cCbjh5cAG282t2HVHNWg7OHHQUK2phLh2NGXeyQhhHBTWsxCIXOMVkynsXtDrB0b8B6dJBCfUul8lofCvW34xFKwkajBoNCHYVHs+q2IL78WFIyDs3unTM6NVuJY+ticf7s0FrI8RNGtzfSzQak7F8q+CzgDmWMYrD5YM/dF6OLkxlF12GTMwp+RqVDYVfLLKJONOVYPOtmdB6jPv81eRlW6xJVrfm6DFrJHmsJIwvL2qs6i6xk1jNEv+jp3B5QbvZ2+splmSinnWMoRuJYA1JQJhoLxcYKLN6rCisTlaWjJM3ULuIBqMmewhGwg6WhLQyHf7xBLBSb5X+S7OB7ZIn9T7NMTAObsujf+URIAB84lWnOJZy0q95R+PhnnUqd9O7EBgOWuVImPnh7O/UeJZ16h3rxd58wd73qGpmV1v9ekgs8L5oKpW9sONgnIal0zVCW5ncF5aH84jjNW6dZl64J9wIHCj5FlFyAwMjAcwYkZ4oV3jCmidh9FwKDzYqz/J7iNEqf5lx8evRLJrMZrBDqK2HSEVtQYGDpx+Ndsy3t1vYOj1RcUe3aqQRAZZN0MIB2vL50d1VLHQpH8oaFkVBBzDKsykXELWdmzc2W6yi3l0f8lyPVcuZd3QXg4hybkqiZ2HzOMl9mgtPd8PDDV4DfcVPy/sG4DfuOG+A55soDQeEk/8lHI2eWKhK8u16Y3XVz9RDLfvdzn/3vzLwIz8p50/KFKJivHwvtG1c3f/Lz8pU/zMcn24pmrholIu847pBGvCaOtXVNUhOVuk/8n8fWW98Cj7fFwRkuuMO3Vj3+do4P3fA9fuPnH6zwgaYfu6r2diV6K+bPFB+dwiCFqw+sDIxc+NzYyC827Ck5iBG+9cP445oAOlO7R9bAazI+X2hw11wdcVePXJ3bHVObtGjsypb4JGv8qpkLdY+sHP/RUn5vSlOweQf9fig22c1k9ZLynmOwnMD7a4ueSR9ex0dxIPbQxQxzKNgm8DpnnQapmiNIZLLsyJZwReb+muC87LgqNn/EQcbU5KHtqsJhsgNJzoEOwzpNFZUZT0OLeIYvDAiVS/r6a0IxHiKxxWsdZrOPc1Szb62DAcMPUNsc6MakdwAICAkYQY0VCdNFRiLCTCQIQRKADRHBAMNLsAA4RRSsTYOstSBYLc+FIBgICFhrET1BWCyxiSQHywpRpFyFpyA7klQJdxRrqVISpFzEF1C1UDJ7Jq/IQbYyK2R2sDhVYSXZTlozWrsopB6AfMgzisCD0sEQqCLZfF6gOVa/QBzWJC9Budlg+pCqwchnR1Sw+RDxJlGCMPEZFFmRjdoDFRfQZOQQ4CkwFmVTxkKiYU8SbKGygaldYBiDF1mtAlgNUX2Fr+pcDK7L82RjBdgRtkiWfw82KFphZE+soUwNadjPkvHTDyn2oix4lQRNRGj6tulORxeKG/uj9neBYWasGSeJ9sg+ue5QM1CL9euOADl24qBYhGZGTY5FmUf/cIrfomhJ8aF2LiZGH3MVmobeO6pfYHxggH3CrOgstme24Q6DZlfdhkKpAQF9hA/7ubOqqFoFc+NJ9zMIvAVRIp3Fovy1z8Uisjo3lvDq3uIMsj4MFqFVtDYMfOJ8hfEtnCkxhVX77n8i67iEI97FXaacBaYr+j71RjvygnxVCYvMPGN9ncEEaBoa9TetVyP4/VWFz7otUo9eEbWTrhxdxEAMS5c5lZQPilLhy00hBgm4xSGtxwsOWkQ+hK2EelqL4DrDyaFkKymUxOVwIVINwMB4wYJTRelZDRwku3FDXVDKvJ5FC5QY5Zz5vVtTRa0dG/SqGtlorluw9pHOhMqKSowP2qWIi1NIMs0KJCc33dpfkeVlcJCKFEsAQbyAtSs+SLBwJCYk6035U0mI8mIQX3ECwlT8Spp3cRACr5wpZ8IUdycEsqB5YjZAui6jDLB+YfY6Pl5F0BFuEPdwCnUe+ciQ/zb/I0H7ylPSDfX/QDDO1kkOCr4sQF9cluUrH5Dz5Gfkvi7DovkwOxOIm5j1ZGAw0dX3waFQQ9bZ49vAJy1nZx4RUOAGmCITbkqnV+IqmIyyCkZGqPgOFFYm1sGNMhMKSAauXTqiR+sTxt4u2T9XlhK+dXJAJuI7w/MT7V10rJ3+tYanoT+3SRwFvPYfzmRdQ4AKTufiYjjf/MfdpQZ9Vq9lsUkj5w34Q0PPHAWKOmBZbOEn4x7iYVbPEgUa3PxyaSeOX+6lyrMHB0x4Z0ayCKYhCfCUs/AK8lKvxXQZaAEEscSnTtX4AuLuU6fNo1yhHbGxHmcgdltjdcK1iKNHe7KzByXFh703bZJXsXGjxVko/gyX6y+3xpZzrOPXWPXH9hpafFvKh87A1mJsMpQ5ygxNG3wsa9dWk2M5xkZQtsVst8MaNnkFBUZPU1fXjNFlTFhtySo3NA14W9ICBXkZJqdb1tnrbRvYX83NGL/GsnISlpC3VeiFvdWWyWr5tH24xVTGzahebaub4OZkOFjSNz27Qefq3m11abRtnIVpiYrtX92RlOoEzPq4/jn2WIuTYLGOm0lEdB7Jq6pc23Z5KCXJhHcaEwZp/Qk2Kz8ZUUmbLi11rxkfXkYzWJ9iBpyR3EVu7Y7k+a24H7yj+YG0PtfYWUU6c6sApS7RGJg5D1awtytI9hey/OHzDIF7PCdq9jgEVdth816Bz5u6wyHIM5xtORYdmDEflt9ebSJjtTh9xDxjwPruxPrfTVglUzOKlZMhcT0OpkzZb1RFGuFHSHwfsOGYMkM6NJgjU6qzVarsGmV2jqpRwny8y9HxUVfjr0ZzVyhjK8KTrsa9i8ZFX+HhTlOPUqpyqu3O9E4naul8clPp6wz0CpfeRFaTHdIwvYlER01bx3W9/Ubjr+Cg6HZDKTyaHCKQiepcy8Udzpgw62fkmqSMFairN7hr9nCI9s3JUaoVGZKDB4MoplHAAMjJwZvGUrAZjgzLJPioBKAz0DcuFRz1gmdZ1K0YfTq3CDsxultREzx7p4Ktlb5GrkAnNKYw54wVfNHxllDCl0K+LskWZBDoz2yNckVEuJobGC1uqRCg2LrvRN71aXvTFnDSQKnJtm1Y+DBrQ6GF9L+BOHltCM8iIhv0G1JBadU0EJ6rq7L21pmJ/8eQukZ1nImg597LRcWAVrwUoGTBQofNUyzIal28Px7VMhC9zEBN6/QaP21mghNjUnqtQ5vvqe0litR0MZgEgDC7nitFmf99bkARciwCfcQs2TslT8Pgqhdyf1707oH0qvkF4b1NsxIcmNLwynTh8AmNo0sGAoR0b5eQE/6+Q5NvRz4MALlB8WLF7mVRXW1+zBEmHUoEds/fVtWNyISUifpAIysRrhOrBkfVA3rGygvJocEpBaE2m6TA3xESm1TANJ+JUa5gq1RZWcqqbKUyS8Vnxal9ZxIs6JjpOv3psEwlENn3WUU6giTTKkpGPzSBVcjbDhz12eLiE/xsHFkHQa56tghpaKSz8j3gNVkMMDhfJM/qgIhHe8fU+g9UJoS9JLoCFjq6Lx4laZRL0t3GWH5OYMrb7qXZux5X66OP0b/SgtfuX7Qx49GiQqLpPBNLvlATwAEMvG3PshzSAYVuZMyaKwizae29ikN0mLmkkYI+8nfo/+cZlM4ENxxL8qtttOq77Do3JDgpMTjXyZDEUM6Dqn0WGFCrghrwjrjQgczrC/etjPABJMDnHJu2ms2AkeyUcAFFa4Jc9AaBj1XBXO83x6D/iJmUJtqHm67kw8TqEPNbvX4cjDUfPgvk5FTfCO/iIuP2pw+n5/TQ2SVg5YsXWc4EL13aiAnNbv05OVevPq3r847PiiU5cUKBySiw6bgxs62cW2HJwPIrgadYJc3pIz/Bwma/9kORSi+8fP/eFlmBuPizBI8BX54R9GhJvnR7gm+7QmgU8A1ASmgMAuFT9mhBQKAajILgrrMVuyv21NBvTvS+XDqteqL/xOqEaZdxGz9l1FTsqdit+eCZOEdBEs2vMWKnJXYmdbpfrj2x2YVrT242zQ/ILIZF2pM6E8GJa7rYqZTGan9sgI+suhEJwXEicbw4YadvosgqSuIdqmmJ4oMTssB8PQchFk8WxsM9yiBYnRTrtljcsw3qPMSOZ4/q37HptAaPNmcmKIxpcZt//o75ab7xuz3nawQtKUKX/ETPT/C+99fyJ0DJgouIdLuqiiNgogAlTcjBDDT8v/NA+cPTs9AgsVY9PjPRfyx6wzs+nzUuTpQQDG5IA68z9xgYDdEGfqzFYm7RwyyTFuDyZwjFy8J1Api10N1iAf75bRNp0lBDvr4Bo0kc0GYlEJWtwTMnwFucNV5gEAj0An+HxyK9EkUsIoFTwy1c08+QAlnQ8/HWGVwMK+Pphrt6pm1iIgxXfPbiGHotGEo8yBPkzc9tObVuIEFWk1uxqTmXV3+yKjFoXOKijbMTqlD0hnMramS7F5+uPFUjPdXdtp0yMi7oSlbfosvak7tlSygJi0PLDwthOxhYo77wuTD6r4HH/o4J8/tERbUsvbprTEW2PCNnEW5HZp2cr/qdUhfa4UhlFapqfU1FDq2q26OtvRri91ZWIW5UjahaP6Dd0OJvUJZRuA4elE1Di/ATrOZ37nftBYg6PNjkDwHwCLO7JRXq1RDdJYBRRUuLWfN6YbZa++JTbNZ61+eN2saFWZqUm5AgxQ+uT5ukisAXs6sraqZVz0bsW/+wYu/3zVWVYxblzP5+outqBSC9QHyDmeLC8fS3pm92aNmj40sH/pFSB0KfJeGcFdcZlCLeBXdNCR2tYM5H9xhTYiIShQ+p3/q5n74wTkTgcj0Ld6L0oiELY+QvKByWSTkjdYN39qR5mG6MnGytCr87EJAcc3ETKKbERCYEPUTwYBIazrbBDRcAfn/hLJmOfokSYlzRP55LHxZt2Fm/SkTfg1kMAF+UfSrzC9iyHPKVQw5fOQVXwzU6ss27thXt1Ts2jMBsHsE+1diJkO8bX6GN4UdeX7NBiY3NrPQJXyqyisVxztVhFaUPMAo5xVarGFB3fPKM5gv0KQBabJKp4J1HeXJ5cllKGbqmp751eosuVyaXLqwKS8IPajPmHurU3hAJ7T9YQCQdrG2lnrfFekJsYzqkUPyRwqz+JqBte0KrjXQVf8Io5LOn/wn4QCQIqIN5Rgs8N9j4BqNA8JtHHw5wOYLexj5xy9U3MBOwkOW1AtJfcx+d8CUDHk8dgC+5SjKnn8YaPJs8gafHswyuSU/14JZUjDDcN44Shf0/v7p0SEM6n3y+/4BCRgVLMD6Sno1maRq6ytSmDdKYnwoWrFqqcmrhylS5akXATkzI9YzXuoy8lIXygCOB9TRvLhsiucSKiSWor5DOVQp2O4v2+7JNixvwkBnKGLFrsRTZxqLftTeLiPnjQOM5cD7x4ttTZDHiC4/CYaMFoPXhvaY/6xIy4v3IRx7z7+r1yTeE/KEefp5us5lACtfi4Zfy/gVZgKAkIljPdiMwOW/IZRQsEUIAwQk5OVPGexLgDvNdcLDhxd7lk3jB3vFx4mB3PWsMIFbEPfxv+21wqvFOnX9ETkUa1sXkuGKaKRMI1WFJmazKrmxTdUzeD4tXKRm+ydHm9JBSXKE1WRJqKm+UlhRZfyJ646kJb5e75q24t9CXfm4ZjcrWY/tiwPO+WklzqJwqs8q0KAVbW1qwYj7YvkdZ2Awt81Hc/1305SvWA9Qg1KK8cstcYImQBhPkrdYOIz/Fbr4xxQNZSeXJzSllqJbK9YkqlAxhlJ8DpLuBx3KKz67j6VehSlIXuM7mHPtp7klDo+g3h5bZfXh3ZSvnnfU+UbZ+z8Uy0R/zOgn+XYZn9c5nmB9fYEWxT0Pbcnfm7GXszbeHfhGUfD2KNXu6JsJ2xv9oQU76bi6GPHx3TsrRP2UwcXIaT0gLoqrfOj9eczJM/OPrMHymZrTqd/u4lguC6pq4VCYui5zqtcPtcI12TpTZjsPVYSKumnOhEz+hdRKliahEHvsWXCyI85tsFHU1QjIasB2nsHAIgSkGVYFMr/kDc09X1k2oiC6LjCyLrpiQZ924pt7J1MMYulQWbrtcwjNl1WfP2yngLe0MrYNtZvNLpeq8sGhIXHTSwf2QJyM+WOfAKsSvdril6WNi8e60GVVl667W/LNUEQWN30wzBprp53sZsV5DO9Uom7qocZxVh3uNpnz0S4lTx6vVKZSzl+5diloGRae7KZdSu2PC0WTG8SjBvXZJDVFJ7KmNYGVMcc/twNbI08M7g+PCmemUPzkptaBpCam6sHcNgnJQ7uDXY6UVRc3rq6kXU7sEk4Vnt8VG/B2+JEPTckesBp4uHZ14+jSJMdn2tQAGfrkbI1eJU33gDeIPC2sByQgGsja5CTnvicrG9rSVB0iWMtRFFepntIrmIVlpiS5ZsFu6h27p9WG09ZC3wnE9tXShOjir+Krh5TA7pwcL4C7dEMOnaJmEPM1CMZ92x+naybBGqoGLhCv6C200EQGfdStpy67TQjLUtIWDNScrgZMSEvpzcP4GsPQoNF8nu8hIVGugdnFjyN0SJUSB3u2vwXL0ZjRuoB3BjHRA0FaJxXme+5qutuxdI7Tzmemo0nLLEEZlTmKoXniYinW79UeQc7/Mc55+uiR9JSyI07Wakk5hi3W2ODKXIPucUrLb0LtTSMEM9MMvPm1Q+pEJK7PULjc0Qnm8sU/BNCj4nywol1h1tEsgUKEFFSIXZiwWLCBhjy+mnG+Ltu0xLHjnXr3nh/wulLkO/WlR2foEikNwIo7l8GFrF8G1Dx2pTS14vQPbkaMWHOVajxy2IplC95DQOptBIACGI3QoEwaI0AMnHat64xoyEsxLbPEJXfToKTx/54pdrZYOk7fxpSMmPaclj0p4vQczxFKOtraYcizRum5gsOjNHui3etP7Dpmhr0YRVoul6/SRdmOL0eKRT/HeLjC0YFa9ucWaGRebMXVWVmDqh1GchKcyTBJCb1vTkIXy/9sN+mtVdhg52a5MktMVdLUKbvvzvwUGQ7/9W0DgJuaF2YcDDgp5NmaziO8dhCWT894FaLjx7ec1+6I8RxPnrS6nNZxG2mDxSQsk52N+Z3VJASA5xvw7YiRU4B87fE+P2HETA0dffFFujRyrF/ncP+6QTuTEGgb78I3JcemEdPKJdyxvhH6jzneut5V5dv7zwXOlNB3t97N6gmi35XcBpxtg3RQ7AetJO1yo27bZk1WIxYz2fv2mJUfkzfLl276VU9wLJ0jd49nsncD5XDb7X/yfTtswhPj2HXv5+et6yAR4QWJHY753ZCW+h557bfuElznX/us6zC1WVVTV1ymh9gawg0QTB7ZPp5hqaxXI1wsztZHqDGwtvPxs2/khudhEHvf2Os0JseSp7JJCyqP+YfsUSqHErsqzhPyOxsaVgaBmCkrdhY3eJM4Z186t60pCv9yB5zpxVytK2t6zeLCTwVhzfHGfH9kba36uLUdg9KFpfF7eQYnPyyuo32rqofXn5uQSTG2aa8GItL4S8hPmycn10B7/hEn9Ly77b07m0bFsblUwrRoRhi95aBykZzcDU074YsfOcxzPUTExnd0XzqOsg2Vp05KjQCHVrBgdOzVkAc7+zUNo7jQDha3pr8fjcegdGaw0KvxwME5RT7qNlFmqOOU2vsiAZkdAaDPr1BcbVIfnT6vy5xRcm83QFOlQydEn3g4YNMabMVY+w6HIX5htLNKdoISQWgFiR78mg83GTY8EIueEpPfoSiM3oRMGVFUzbkwM037h7SkWJ8aiDvdmpY6mEyGgkLSp07JSQw7DnXxpYTu2IKifSpR/j38Ebx/J67WjxYsoe3fn5U1mzs0z7kApuS+XKJcpRXw1ieofAcR7LYKUk0VMpfGiXHDiohNi58i/vfpCkk3fPXoh4v1RAyiPkjK6cMeVWBR6Hu1jzUlNwi6LLIQEqmh+gInFrbSZgiCdiAMY5dR2zPo2A6V15BHhCBl7uoFWc7qoC7dyO2PmxN6USuRyQkLOswne3spgFtZ4iKgK6+10npEMtobpTnKvcE+y9WDLJsi1cJ6P0ptkbqEoUHqTg5lYxYT1NKT1t9C+JKirJr1HL5Me4TnApKrJ33Tt0G9ps3u5ozki0ho9DYLfXfQsZeznH1InqmxLui9Ve/Zdsiz608uxzpRcwiylJJs+tp2latlk/nAyxoQzOp9gDe2Lrv2XATD1hJqRXGXBgtMTROp1+Y163uvODYDZzYI/Nugpd1KRL7OXBdZnPBsbvhUC6yEbcP7Eu72LDG3PzvfKO4jD1j//mN2+I9NW+Oi743xqScM+L6EILd8eEbWGD2prd761dU57s6NDFsHFxrZTyNCXKVTuer5vQ95UaUmuNnsPd7R3MPKP9Qfsy28L0qjXe2CEd4h6VkFfB2ON98qoopY5cOejnu+xsuR9tdSJNfJ8j6WV9QeXuszqYQN+7x3Hw3Pp9Muy482/Y4uC5yMabhQXD8C8JdfNgrR9YuSLTDxMgbi36np+A4L23avK/havS/WpL117vq7UAwXcwCxfbc9tWbv2k3VreAIcKOsXnj0JPIDBimxjiU2Ap81pmad6xeFClQqfIvK1Px8Fel+i8lvGSd6rE6In/yXj6AWyMFiHJXKnTKRuN/A9voiTfKEFJ0X3OVDE+H0ayCVeZKigIPLvsw4/eCey/XhOjVh5FYfqGTZlD1bmgb7AizGtksPLLnU3Z7SR0DDe8hgk1+9XQJijUrFHMb9Yi28BcYVSxS5UhBgfbHtjuW1CdZ+zB5RDicxxXwnB6OCfA6P80ISPbdPD3Mr4uD+Y0WBh6G7uVXZlgYGfIXm6jZIdEBqQpdYGagK+ODMpmRfeYZZOAA7sb0je8dmtxegT/1qAZu31dr9fFShkfS2kuKnv/QbvbKNVhGt1Om+8B/AeoarCIawFyawcYBfQNIDRSbqE6Pgcbh9FxUAlCD5ATPGb13N8ns/p7SUnqkgGjS2kcpNcKkZfAWfSYrQk+BkFH0aKw/Ejm4HBAHs2uHgXg8+687DR6KVgUGmgriBCPZ2HjggvKw1WrCwGTnf76RUwJ6LUS0HxmXXtzkPgKyUDyfysofvlA7QWegMHpdEbWSrk5UMkEIUo42NKrjI+jo1SazRczQDJVU4h0akup8p+fsOwmqvuCNjN/MPIV72YBTmKsvt/V7uJKpTUtFpjwP2Gtm1Vcsm33lME76zT+o4hRj8yvvxbwwUZk7/38OyE3qhAKfUGtgp9+SBgzvxszfkdai45QLh1WCkG7L4Ghqnwl5sh6gTgNAoZH/eqGT9vwBnW6mAyGAlz89/3y+mqEAU++AGTkJJhIkoYwRFYSTcR18vjka50dS2pEiK5W0MKNZqZ4drAHM4d9O0USGxvc7DYGBILSaWzEtJDHfbQDGkJTG9tL4uYg75tqc/Ita7Mf/PASwpi68GGsgxLWppzyhh8vSC+uK3NGu+/p3HE05hqqxEBjbF+3ByclsznlwTnrpn0YfmvTr3J6l8Uo4GSSTdkO2cyMmhZ/2q7Q5JecibZkJ0xg55BQehUxVzQzPRstTpfkw/ad7A406UpLNC4whpAn6EZejgP6OIMsC5Uu8Lhi4V8ITk+ISQkMTQJNKUJTklaGsHHc3nlCSnx8cHIkf6T4ZRmnp+lyctyxjiHp5yhttuldn4SkF4xdRzt8t+CNfZ/D32wcAKhq94XtS8TvGYPsMO49a8hEp68IaQzZhS1Z1Iy9DfsZ4Wz9jcQMED27M/Vfj95x477TDrDei3cWdieSX23MjQ5HfkH2NjB7mf/IWdnJnExefQPcYC1kxOmFCVGa2GF+GcCBGE6r1/czs/y11z26cLap86UZG2tviy8LLzbnLnV0GD89H2xY+nlLWLm+qlZfYoe5DJxe0Bm36H7U3zAKcHrlmN5VAjBURBWr5haH9anW3mdk4XZfhvXR3r2Sd9gykxmbfX3TLNHIDf5gfNjdCBMQCREwIHHcEHhghF0kQ+wRmA/iIQCIATWQiSGwloVTwJQhASEUYiERajvQXwA9kO9gRCJo4TgANCMKjz6LoxUEUhNVkWhUH9JsD1Mio0KTNgGNKAY2kFA/qiwCv6M40Tamj3TG3ogEtrzynsgJHXRcac3VH6zAmYBFoV4hCeeEgl8L7+3ieaGAfkJCUPqKUZyHOKCyH0Wwf4Wj6BA7pRgCKUIMNIfolMwPVxwiHyhCGTXqCFhEbRBKAiLR7DnUXj0eT/IybC2c6FQ4OBJ0KGp4YxSwbaLncTJhtxhEidiy3bsRegRmMBSn/gZmZ46eTOx0ifZwX6DmLTTmJR5o6e6LUIy0xJ5WwvGgpi/H59AviHPCDcRiuVB075/tvYh4uqCaBOrzI5IyPRcxYRGUucc136nMM0kYoiunbKFF7LXXeB+IviXXNNM4CegYlf+mls+wPkz7xHD7/ZGpvRwI/KiJwFJkJsj24p7FFGJ51k/id+53Z+Rkb7ls3gSYwpAAnzz0V/pIPQbREIt6zJYST66tByngCh78232eT6MwpvPm3s3j7K/x8owKbSiS6AOi3TN82DtCurGCNxW4R6cvSNWBjyExgyg1uHwjN8R032h5xaB4REKvqAIk5CXB/bJVAHPbcpZt8mkDg9bcRSzlnD6BBA8m2zYuT7LeHv2/SBCYSz/54VGRmaTTNqh8hmA3KIAucBvyPsu8Z3Cb7fPXdK7OrbMQmsc9w2wUFeNV8xZfXKZK92yb469jJVTO8yil2d3DDs37dMiUb9bvzu/POy+Wm34DDn9nU0q9rma21s1tce0X9ft2BnkqdMlJmQXF5aWFCWl6Q3CnccoJDX6FL2+4Zomf0yFMlOWni7PUlZkpfBzzwDtKgiuHF/Otr/88ahYqyzmcUf2ibOMv3FFtqaxsaGdawTVI3Za8xSRH10ErRdMYZ0r1QUOsQzFrgjPc8Tc6ekqbuegydGpORWKTDnmBVAAYWgaKEvldKQVlDSxRt/Rh5Vm2JRytME3zjTFa6HgwsVFgV2Fzj1hqoa0hNfPG+QN5aWeSpMk/PhoT80NqahfYElLIyJKoipaa5UurvLQvlMBgLbalhE5ruirOjc7IcNeGBqnSAuFlQ1ck+6asE9dZq/e9yBM+l50WbwmhHnleFREOysHM23QFjukqRJJqtRx0qDAntwhPakqSb78C5xWlpR8y3VXfSv5yydbXl7S50Jv1Ce8Dgy4mh+9ZWvEyTxgDIiHY2eQiEg3k4mHL6xVUy/lXh6puJvb/Ce+YGE0arrxoHSQbJNGfV5rZ+DwS+RoBwg+5aTsbD8OeSwOIPojKErax8Hn9NOIyL4n58paaqSb+zmIy8Nx8P2yWJ21uUbaUiPb3MdBzX57ON/9UnvoBCRQ2Elo6xMvblXNM9W3yhfT2fN6Fgj2Yyhw39xQhY7555G9YoJvG34kpJfY5of33c75RUqwxC4CjlQ+x2oyvF8qCwn32RRzXhAeUHpqght0CNFsimAKVp0CIqPutsobzFPxxjybBNis3km8zSEX3xSyCd8mVbKXc0AGhi4wvTctEgOjky930yz1/0AhyT5CcyoHsWkFIPisylakpSmcyhI46Bh1ZtAs0ZmSplCkKZ3wkulDtqHOmKTV3VtbDZsxPGMGLEMOHuDL0zwjJw1mogId2BRUYgpDfuHoxZW9ug6IhryPFhTCKJodhE2H8ZRIucqRrmBNiafdPIhfRDj4bwp9FzgzWWmXRr44fX6TcD7ehjlLabcrwLsq6P/fEM5r4f0xdMGJPqeupYBmmT40sz18H386PHjCdOqZuBS5LUXxec/0jP3wYHF/1YT5n9NkipSU+AOmm4WI0yNPR7lSbc4JxZzWPWnC2nclhdxGzxl3PNgVJxTGRRLi5xOknrgFf9B7x7DCF2hsD/8fGuGZFL6uLzUUzSkLYjx+vFcnAWHZ8movKTTkmAyz4IGY0qPrLUO08+V4agkh36dQnd/EVOEmX+ID5k9apZMm+C3iJw9gugIqSOx3UEW2xhCT6AV0iUewOgtnvQNQ0+Z7puik4P5R6xcQj4Svjn5sNEcj1aXirhSMrEiyf/G70VPP+/d0aKhTvek7xtK6dc6T1QNGjnRu1lZ06ahwVKCSwr8eeyLJbm+jaA25EF7DFvpp3eSkjcZyxtfmZCoUX4pxDfZ2rVlMXFmWuBFTS4WNsHIhzPK5cw1mfPMrLfa3o1sIa2ItDCMF34uBaYfUOTJZjoLmF28NXjNZp6T5xmWKpeh5Qf5X8T0uFmLRNPcEP1ZgrvTYVnEDstCITEaRhMbehlaltTSwDbtOze8+/JU+Z8zoLMmTy/LMViRL/LBQjwvnC4fQdIcxy84eBw0CKx6qtno3zQFfpUlGYWxBOg4Kha7QaGHZiznX5V3Wseo8VU6OMk9zZ4CKKXM0eXcATJmjylOPjZp7Ym9F2y6cZkxKGwJSEkOTD4SmADY4Ww8kv802Jdcob70/FDi4sNXahaD6ID7U0mgyNVoU/Dx5S+vZNqgOo1+xqDVuGPUztbaeiZu1tCry+DkyHMvs3wYTrci3OC6ueNRlGj/eAbzp0ncqJ7+YOZnZ8QCzlnHcAmBRzArDNmxwljx20F4/0GvloZKC9rAsfoo5gIBZK66287Zy/a5eO2dhm+h+M0+cnrq/KrLmODB+dxisCq4u6ztQOEo4rFwxMZ1wCC0bM7Z2rJMwLDK95nISZnUVZVFPX1lOHZkVgYobOnSoM0j22Gk2xkk4hJRPnGgmKHOnY5ARACNIWhWYFTgsv8/bMAWcD3yAHXa9JHIcp6x1nKDQn/g17T5LOoK/C1DvCjRZhU6c0AMlSQs1DpxH92iUMv6mljysemkKII1EX3QCPynv9/wPcHdJj3rjbOQH/YK4Kasf1N0PjZ2LNA70W4PioM3f9m68p7KhhZZoVZZSkTXm76ymxPLsGCEvB/2lIjXH1FMiqnblMpPjTfogG8lL/PrxX4L1IbykkwmXg4Xl8hpZpS3REHPOWYEQckIwERs8B3lvbLwl26Fq1LQ0hckzs+Q1JM+TKjwqi0/9tQc4GRIrpq4yI6G/UYChCq+48zJ6iz+FX7/hP9F2JRmcINws4EWnWfIxWXP/Cr52ckdGlvg+G1RrSWRNaPtRWX94SyebfEEIueMqDcK9vRdbfOrPScYy+vrHLkm90GsMSHCBZsl4LygWlBCeGJ4cHyJJ5AIHM7kPXRxjDymi6sh30T9Z74VWCicvj/pEcxp8fnZFlqJzNb2KrIuKrGu7louqhyqzZPc7wPYIIjCaYVGNWjJbxH0kj9R3ZDKphel7x+wy3lWKgR3GC1wR6O5+LuM91LzJTaRoYyrHMtGBK5RMeRu2ZbIaDOEJtSwZ4xWHh22Srks7WPeULMwa5pzoi/ZN9IHPh/Pl9L36TsjmhaXfWn2Ckzhq3eBzkOExtGO9Uzw/dgIl1dBOXMPdIZliqqtv8Ozv24Kxz7gtfJUiM1Ox+Z3Viy1YdXOoyRtCF2SFOhG2TVnB4PTsLL0VQiwInZDYaV2DZlecnI0iG1+ksSYNWZTBeNLwuiQ21Gi8M+7grc/xo7Jdi/izh2g42rcn+EVIKudvraMHu1M+pffJwZzt6snLJXzUfEScaloM8csHBUrRsU6J5jxjwjtmLmoINeNC+5uO4axnrc+GOLUyK1tVbVD+GmkPpTJ7rtGvzrVoAnzIMuhaPebbHNsPzSz4kD5g6df7IWEBiIk65zQ3yR5kxyZdmZe1cgzAXsA6KIdBEftSFgqzb6bcKnRSkoIX3oT27PMJIFtlOpkDAo+2+JTkQ0ppM5e4/VW4ac5glRKsQ8cbn/nEijc0IqC61/ZG+aXQmbDMQIn/SXqZGliANWT4+ffy2ZOaXwilz961YKtsCul4JEhuvVw+jrery6I3uclvpX9ZTKPtfbqYY81Zrov5WiBIZSjWDuKEjr7shP7Ios+et/V+XLSyi6tYGfY9IXiaKVOgcm4fv65VgMfgt16XyvQV16Y6gA13pizKTTVRFmalGg/HjlUx7H1le2/86PrT/jUVkf+cpnryI3vFR+fEAs2Ztpf7T6cK9HNn/CjbaQCt6W5dMO3sTmNvZ9HCs6qp87+cWnPfjz1vX9uCrrM7DMBaWHtrtXF70SJg/PkKJqRxtZimk7rQ9XiL/sTD+Hx67RDGmj8AFlr2anV23VxjqWWRSiBTbWHtALBj27uBbTHe5oy4Jd6+4QAW5TOxtgpc6l5jzdF6adK8FEMyg1XQxIGMHFL2Bw2dO5kcD1bgMqKxPTrKGd3V6mMgC4JMRvEUZZZUmmUMksUmCiOGAh5GXqxbIsDuCgmAzonU1+Rs/Ic6i2+YMSlYsKSuQA9MZrRVUT9t/zr3zCneLp4TEYTiRks+++qwChYQrihaNDk9tXkGC0S7vIpFBjO70zMyJi9q3pZpMjuoQfbSlOi+fmm0pqNZ6SO1Z9I8QFZuxvuiMq85s/3w726lKkExDf0fJPAiQVUx/bCALmzyQXqVs9EZMxb9tqCJbUZufeN2mQxOTe696AXZ8s3Nss1VzLpdxYnrfuvElzzcto5enX8c7DYupLEsLKrXs73HU0iklHYmiKJDSno4Y0/0jvOA0u0alnacqVYvcavnoZcWkOk7z5rwBUy+n6FMD3zuGSaUVjC0UjMDH6oYYwbK8k9czq9cX0p8rpmSPuyfrnmOX7ynqur4rtlRPGX8uYBOjzRTGDvSwShnocxyGii6wxjVWdgyLAqnFdqydZAXGzdUCJzuJYQmXut+w01GNSWn7qAAOxFRl+Ln7RZGy0AkxY1CA4gAEkBxQxHgGQ34IkSqkcYicNR6KVQ6k/YCTQVFbNs5pHVPnGweH4xgWINTLBvSZhjwbIWa4uX4TRBViWsLw3LV6lxNQW1y2Jy4vjkEsqdH2mpoWKAnVXIota9LzTdIW4+23rr6rLA5ybWaAnVurrowDAhpSQwVpyk3VGTPISEbq1WNJYk1qSyryg1m8d69M7KbFy2chSLtqGrdUHCeuVG8e9flWSH84wtLQaCFKowuTJhc73pp/EMV7/ICoekWx+34T6iX18L5C8UPfBvXFYpCRN0p+pVDhTisMEQV4CUgEOASz9N+tRDyaQHoNI3tJsaJ5wMf639t2lgGZesAjediBm78URAdyz/VORGJpXUn0dYt9OEWixbu3ubm9tIbaR8PIGCCV8u0pKgJhbnd7nxW9/GRb7EORnqJhPHakoQTrZw28Bz5NGg+eFbiE1IK6YmsBDxf+hle/uSMZSok3VfqF0PdWReoF3D5cTc/c8blwfHjy1Aj6hqFiv2SM2cpRN037DdJ9E88tfBB6ruFwQvfpT5YeCrRnwj6LXgz5XwQD/PBcirfffquvo+dszijstqrzmVqRmv138lYEtdboauSsPG67DOZa3tYmPVAPnIrIBjkM9Yf8XnnoyrELF7OWQ7k0KGWMdPV6aTUqAxnZ9dGSoxIi3jsAuA+fo7bbjdQjkKKz3MYTWoTxm38nGb97YBt72pWghIIoosPDVBQdu4N+gcWCSFu5Rhqp4DlA/J5Y1fbc5tKQL8NPZYpH75xyfxfv50S2tNUQgElm3b/DIefyVXR4+LOvCztefpE3/KAx6sbyT2ucIjcaJ2CHLeNIJ2WKMe7F8NyrVwKq6iAICWWExLG3gKdbaoJoWV6Lx824o2rtAMHAg8sw9ACX8WSLXJaOJSWvw2wihoLiWxpARFi8J2sJn0Chl8+0iMZQm3SM2gaSAYTaLT9Z5Vnl9IwNMYBDoOWrqzjsfl1k0egJhrMUx8iWpFSEj+QZ04wxzvjTY28khi+UV1eAZNw9MBrggxMCbhDwS40jEeHqqq634nD5mfQTfRC+Kn8TVdTQoyGQfHnimh10Q4NbM48lJoZRba8Zc7bE3+HraI5aSqIk4jpD2U1iWB9SoCtOLQyAMvmDjckLoJCsZ4u2r03nJLL8watp1UiUz8bngKrjvyRHsr3BvFg7zMdsS7k1KGXE+wCIZlqTfA9ee8un67OUaly1Ru952RWz5IQAeSP6frWGuyB4pI8zFhAFkI/2I11HwwcFnINy+zyMlNaU/caXlpZmUoxKRf3OAO/D5uUNV2O/OEprcrBohMwL11j6TVuLJTy+f/ti3TdwkqZRZ7Y3nVZgD0mBy4lsbs5CU3VptGegglassiwr3ZnSHzNrmfvPs9MQpsfxMZ14R9C0g7X5GviLF3M33GERi96LS3gIrQy3LLMB5ZuJh/xuFBn5QS75DlD/ibVy7bsIahEbppJRcmbwuQX6h5KUXPXvZMA432w3ae1dENhuZXDLg28lctGsdFRSqekB2pxrO9YMK/0MrbALZBQ2pXxlLleWwfhFBM42ktejYmJ9Kgx4fVrGuOGFcgfwYnhfiipvCL9vBz1Mr3o7wHicphxnmmmLw8YDmDcH5Eb6iCk2cw3wgimj1WCNc4IJOy60EaAWv5NMKGPtV8u8oaQtuKElkhT1sQxH6ksiyqehQzsHUjaUaWw2z2M3o8dvksEp/KWcziiNWzm8PhmB8EZER8qrm2yVoFWuoPmkQTbkiUAoA2lm2mtYqug2PwcASneY/ID2TRZ9I12/2VX4Q9pu4hI4nESuvPTishkJLRCdVMsmka+DBln/8s4eWDdOzkXfH/emotoIFz0+J+DX6aKIw6MspHhfGlkUHqZ/QC/06CcGjG22hs0eTZWPIjOx/RQTHdvzKNXstBgZg0LEomWTYP9g7fMLjnSYGyglmYeJIvgDBbm1EW1UV1qFyw2Ws9jxOLTAuray8Y8dIOG0nyJ2QKF74j5DpF26nvjLF4FS3KD6M7FOWjBl/zcOmsKEfG8kN3mSm1EQ6Jo3xz1us4QGI59bdaiQ1Z8/IzRMgxCYz7dCCFVk0nw4Ra2VnqW7N5+GRyEvCRSrd3t1E6rCXNoil/65fsM3o6XoQXVIcIpfbnLCf5iR9gD6s25Ib5VK2iwfrF81V00QpiHCTxfmPFEPQsRZMyIcCZEdVG7FrgdkVEASLEvNaS+KDZm9elJlt5fu/FwD4skJULysZEDgESWqbzoYF5jayC0fJpDtaIjISbiJz9Pf+WgB2AAgavH1cStgHbTXAfdJEWiPBdR4GxaIbOUoP7zVLSFyYH33900PkGkbPzz9HtRKn75S+4O7uYxkAwaaTr9mDte+sSs2ZOfIJiBDJF9lSTUoO3pLEHbo86I04B2gtyWFpCCr5+L1nIyRDcfyjWdNAlWf+6Rn0y9hNPfpjCdsLaStf4MwXlCf8yMiMwowsyo7CxKS06Wd0dxKp+yFg+v6VcvN37c2AzWJLHy7rxNupSOjHB08YpXMWMYggD3eLf6gamMpWJP6TBTM7O7owjL06dkUpvvKfyUfN+4jIDYPXKI98eDq8F/aepPBUlMWRJrhpESznoofcgKmHjr3hfvhnmhFMpEyeAaSrzl9rdHpTGRBZUqU65bkO6jHt00U8sBBc2Z482/clhkGJXE1P0g1MimWYOTa8dNkTL/XOA6/2XdyRH9Oqt5PhDkbuwtjlxXdNRG9F18wotBN1IH8XrH8shlZhj0j02mQDpRZ/pYpKCn8v5au3ftnkzGkjKKdPSyvt73QMvaVsZC311hqcajX6P8k4S6gFhOuN1IGu8/Oy8wDJy8nQBlOoJGBIyKScCOAwqUuur62U9aaRJfbHS63KeFZgnm+tpnbkDm4IW/x8Kzr9axoXCqUljlXSaNvPK2nFjmofekAwr/l79Sr+ogOViGO9s8CVOZzaF7nvESzkwFbL2RlNoQuPIJdsSzGUSpEANnceZ3SP3jRU3fvUZ9vpUG/Ss182OeD/sQA9nVJoQSNor7g/y3zX5UvwDFZJgIivYSYvpRQkZsEBNL5Eh53L09iJMWbUf0IPW+gx7SmDc4PHKbBLonv8gmYvAFbmpFlJj8hAdBAJreODkB2O1uE0m8Hv73a4xQb2iS82AK02vmsw+vYhmrO4LtopdeewdOr5xKhh/ptywsKZmgYiUlEVVNzKzMbs3OzGSrru9eKCS0EMA7L/OIm509tPjUyzMg5SAsNzwsLtt9QwRxkmB+eYVemSloJywjh7aKkwV4DwMM1w+ukPv8OxRT0re6DtQa3Jd893YckQvGsLQ3TKWD56SRsxvVPMQT/4XBQDaMeJYYqZL+O34MoCnbxZ85n5g4kV7pGatcfjv5GobeI1L4yuBpbYRVbU4CBK6XJaf6gCOjGRMXOOqa1nxwwVWC3i/1JslH7pDWkarObIBFOVS71vVPjRWRgiXt7zQ/ONMsS3sJuVGZvF1UxqW2OxrJJYww3RMeqJbg72Bp8UCsnMKiDXfj7vOqc25690G9+FhytqKCnAljKy8yOLHnjOQyKCB3R8UuI0Gpg3wk5JFej5+aE+ergfuXaJNhECPxkl31921wQKBTqeHzIP1H3ribFNj37VLUPO57VJaQyd0eLThAvwl8bFX/WON2MDXdVsx6diYDVh1M06NBhEBcmIk6gS3AFkKcszh5DlbzmF5PqwrWl8WDco/uBfPS+ijph63NPdd0OiD0/BmXIVB1TucOaeB/xiJ8BrJ9QLox9CXHyjInAaVBqTMjh4UGMISc9CyNFzCDgCjNqwIJVZQNKwVNAHwBR/nZ2Xw5xKQ9I/6Qw1HyLUQzkwtLFQ/HNnEQnBHf94kl0KYca0gqTaHT1vFi10PrS89gScWv5Ej5yCwPrQdkNfuzcwp+aO9PIsJYQ9OncwJ9NM+Qfi2F6wvHtl3UulPv+AAYy+7v6Y0pB1tzyldVLTGDt2QkB5TdxiI77GISDsSn8vPYx5ye9pc1+/XL7Y/Qs1SCK5nMFF8ueFn0MEzZLCPCvFbn4ThuEFahCT+J1nDD+upOMnxw5wrnbed6OM9FZx4W83pdsXPjVF0pMV2FbxI4ytUf+ECQcUvzc22zTU4jRzQdDMEh8v4+uXE6KG7KgryApRselpTnBs3f2tjgLSkgUBA2eA3CtMq+upEjRxg8aVXgID5gzzudJ54252Qjujr4rMW28CQ/B9Nvgnp/FlXGhrNSQdbg//+YRwBQnasvV1oIM+t7p2rKo/QlIHagLWQREE9ZkJA0i+kFFDPNkecX+bgvRk9Cw+M6/y+AHUP8Vp5/+70Ur6WwDK89NACfZemyT63dMWh23xs8EBSTq5S6jBljqkvQunpIUivMoFIfWVrpUw70BvSCzW1sQi5ULmN9Am8hSlHrX/lh+3pCB0D7VtcWmdzfq58mB5m4HN0rq1Pf0Wou/IAdavH3bAra7JG1DANgOQaXZO24hC42p+/HdLT907FC9KWT84NC1RCwR1phL0J7uIVzJKkUl6xZ0w1D7TMctUsNvVBjHU+etWoDv3B6gR4gDLFmNM8rNRzvH+Po4UY1NSfmJOa0rkml9cQ4JXjvVCGaa4wzYVUcJWyMwYpa1JCPMW0tB/0OXZEd9ajB+9silo7Iir/FL36UEMVaGNrHtcY4JPjQ1CA0zxhrugTINMZiaN1a2MtQIbARNsSZUTzPVJGXd+/swVLX1CbmJOT0bikf32TC/MJZmquiSUYd0O5vWbZhYcsS8f7PBsqkI2HU0O69B7lvlJ3OdxTA5w11Gfq55/g3T3ivlRlFp//EyEO9UfdcPF3N9SFxLG2njh3bZ2m+/MLLEzu39QIbynsnWvQ5rao8daN0/zA9WWSMiwj67gMFwtAiNYRv+9B97zlKOLXjfVVq/EDc0wUDxJFtRt85wIRpNib26vYmkk2XBfJCF1QU3sqM7CNEKp/f2/oB4UM0Rhl+CV5lxXvJsdI1a5Ok22/pClwJ1RmZPPwqHHqnEgBRWop83hrt9Ww+ZFxlHO3krwBdlO5f9WUk1lw0YS1vEioOhXYGYEZ5wkNUpjJhnrgHK3BWsYacohPwJvnyuU2ZeWxDOIMC1ADaEO0RGtpoQnJXc/F8naVP4SrdoLP1dp2oF+noXeaMA5emYBGIsZC93TdRsjam+cqjOMMnHzr6Z7P53hhRDDTOUxYo87LCcyPHwOrZ+bqYvAxIxpPvN8rjVzpzShzyNKnEIXV6laC8PrbQ5GRJiiTfqwA7eqWKy5bCZtJpic49i07W7C1QvXgAmFBT3zw6bah76+PHDiJIYh2tKFk7ZF62P6g3SXAmACg34wrKejRRhLyZwiNMqN8wCbCOwoQZIDm8DZO1Jwe/36jgJvKTvTKFvITUhbBIoamSPJBLSE+wS6RpckdJOi+BF6eTn/WGKI3NieFiZ3CmC1SX4VIX5oUXRdaBmoTSjGLNhlUBvdcqC84UpSdFLq4HAcEIA+J14Y6swD9WM7msUO97YsDTfCyF3tJg6HPyi+n+b9AyVzE/8mt4Tdfp4HvSwHzG0x1M4ai0pKOyWpV7qLqGADpqD5IenUPMWZEdkhT74i6XnfFCS7YwhVyOS+wXyrOH9PmB5zY/lI2JMuLt1DHBGYLv36zANDcHjb9+93QEnotNGB/z+Eui/MMxbxdymiCiMCysMAIrjJC9Z07bKluPzHy+pVqQQLORdZtnyXhGLrppesX14w7kRrKXWkQyIIwOi3+JPF/z/X8blqj0Gf0J+UFeKJ/q6mltWVW7/RDwiIWNAcb+/pwIdFdz6PhPl+umjYmruk5dFu1uX/dsWhLG3PDECVEYYicbKSrf/GtV2A/ghJrSSi3qoMtgM6VnVTdrQOfXL/KagM9P8u+uAT4Sshq1RgvlSHEfEpNhoHSXFSyzjmWAPVYd1AFvpoVJCYLgz4vQ3iUA4z0/AzikeVBuUpveiRBYnqHZzELWkzFtVGpUy6BR84pb8AEy6DAxauy70Q0kvoTW9GVIPfdFPTR7QweYwZTgj6MZl7+SwiafMm+OnXvlrTjolLZKjeiXqIyZCMsjcc05hiJyZ9eIwsWBQsCy6dgCC2VWwIxk31DKoMNZsU2DhTItlyFKZ0TDOuYTihxwTGjY7uVNLJtNNbEDxslxJvdTTW8xpNxiJDHJKllnYZSbJ7ei2fnv6Wx36GyulV4SqpZ9fpw2kEIKF6BpCm87RztHKQ/ncLCAXGAZSuVhhRyTge5cp9v1DQ6rYYucp7yZNeFP/huiupwEa8NV9cR2bGer9ma6kwlegR7gZl+pG2cmw3nyLW4Y9RqXc2tocw0VJvDJ/deZY3RNEe56sJ3O8mlK5zoiLiFbX1LuP5pf4hbTGsZa03Igq4PIZ6H7Zg09FOth9obHlRYN9RGEtQKIzhYBtmx3hQ3NUGDiPvRkNqSBNw02g91E2TYz5aoraE2z5y4SslJatGRjSYsB+II1fIWz5J5gjEXahplUaC+qFthi6qzJEIehMt38FEEjEKCrK6ls7NYkizyyZldbqCipIUlQw7LliUhmZ2tda/IIoBaW1VgHLHNkcD7FsumaYHSYIYqDOxTKDFlOE+2I7KjPELVJKRPUEmtwW7dhAZsEO5l6urKZmS2mMXkc8prS5PLAVXlEHCwokBoPrWGgl03kI4GWYnY4YFXgmMsePS+gdbSRmtBIdq2cbgyIJYIYduvDpHGC8mQVVfHR0RQAHmoVH580RtiV/ahWkTJ6chhHJFZeVQQJJQaPHRgoRmzDOC/StuVJffjpLn/5fNc+w5b6NvESIqaZuTLMTORyx1zSeSflHWmUDwRaQqTvdWUiRA+pvQYKdROFmeGLMRgeBt14KMDyPXFUttv7keRdL5iQWAy7aU5KOp+9dLCNsAE3rZyUFJnnTq4VWC5a93gvRMJzcvNDoURQ+pqVL9fHmuOTKqtsO0l844pOO5ZkV9eupiyrTwxWjyzSRLHQ/KZLmSwrPLXgvBGxGSXG5mYDUEDFInyFVnvhpfbSy1oMK3pxEGTe0Vf78dxvjuns2h+ci8rfxaz0705zcQh8XvxYKl+JYpWtEwmMYgm96JEs1+T/d7WtICRV0Iv4/3tp2v1dfsza8wX+9eFp6aGcJlXxyA3imx2GINhC93jpcjW7I+rizh1Q3uD30BeDbC5PYfmmi0NjynuQItdiI7zsjN/zAJi83yrbvj557iazH6xBtnhBSHARUNMdZaqvX3iQFAVLoxRA8Wpy4NN8bfLTQMGb+HB8qTcqkvjw+F8eOtwX7pd9xuFX9NKOuF8ezM+p2pTPCsGv+I5SxqutDDuxCD71jVjc20crXlDfitVFu50afwX3vRfYTebr2MuUa0e2JyB2bQ560MEFuNj2OzajJo9vepkbcCIeqjqg4/CDjAKhKU1gNAmDpElh/+ogtiJqUHwS2vmsHtbU8+FVNujUxLAvLmnUdjP4/6QwmV0xlYmyeR+JQ7QQYwlWQuKoa+cI4KVEQLlqMik4ROzcxMjsY6wKx6fjpYXVGGBpB6aK/hCwZ5MEyNft70QPZQhfx+d4myzoTh5pw+LfXLul+F1xQen6N+8Y5to7rF/PHcttb9/SzR/SiPd/pbshz3lJKwfk3gSBKIgSXp+bogbHFZjqTQk9CTmYuoeA3vj2TXqJsnqkoCHZgIJCOkEaZULbPMH6sVptTTugCneWhYeVm0Ie5S5aHWIxh5ktbyD6j/cAYy+rKbyMCWItQJR+V5C+pdIQ+iUFFbaKDMpbdZMc0fBvgB/723def09OATo6G4B8q/rslL+GtDCvc83m5GjRxae7JLHh0NRFuOyRI027cDGbLrjK1Zw/cjp+h2TNwbZg+qz7Z09PHKcDpMw7CyyUZYQn59ILDJuIab7ek6ylbRyQFMa2y48fgffbyve+uK36knAROnd+31uj16NKFFfuqGT6ruYGryl8MP9LVTQAROtsn7ytSqPvnnj4iX6orsml+EtXogzga2PtH/xBQFoh6V8v35V/uCbgPi6KrsteifTybTQUTeW8p27/hHhyHmd5/bR9HxyvOXkVMJjD+u/7fzat/hkv/X4iNprBTK4d1XMRuT0D+4F/Hu/Rw+62LL7i7uLHDXLvz/kZ50b8horOXPv+lTL96q51mY7YizMzjs4aXRCU+Gj6PLZS2F3TAAyutdM5ZyPqCn96bV/Z7psX9v+w2v22gWjKQU9yr0pAxkrzg7b8/e/OR/7SDVOS9/+VvJfSLjZBjs+6PHbBrL3RgqPHFhvpNT91Ep8Ndbe7Ofv+eH7ih5G2bEbhgjcrHnyMWs6ZFPH9vbKA/t1Jh/rzMj6IC3vq6DEPfUIaBJuxljHVgCf7fuMxecJwTfILEO1O7lSaCjpl9lGOnhuqh8MVmb5aPWtihYwb4bgCBaojozUxhNwEFPxcgtkrTSAbM/EG8B97WBEGjJBPgIJ+8hWBsTRQhkAJtQb5EADm0JRCEIPNxRyM461qGAxMpymE1AYdAsbSGywjCXze8Ycw+uH8ZQsIOq9bgs4azy4Bs7ZlZWOw3P8RaBMpyCI3w5BMxYUEEHeWfxLjBnXMsUiQ3ijAg0Hz/YaDfjBYhqDAeZiCOGrX5CMvNRZO4QLwoakC9xP34Qr7kv8uVZ8JH41kH6WN+74GO10P/l0X/IK8jZEm6h2Cki1j3GmqpJXhUVhQSt6boVvAGnEW+q4SobxR8jp0REFZsTfS3N4dzqahM3UkXDEBYTygPFP48uMB/4rL7ueQTcC7jJ+BfPilG50oVcLPqtd6+f7iF7etDwop6v8dlWOjpFQTPa9pjZ1pi1fOVELT5sz9KBBF7Vn5sWsHdw2ORfK8tfeXjksshRkFYftR3+jDQbQY/F8hSvh3fASHsjgKzh1sA9t3bfCLoJgl2ho5wPJOoDXLyoNtdqIXdP7D9pYlbYLLO4AitJy8T1lvgFOKjug+RtsS89BnVu9KCjs0OCsb/rB9cnHOdWq+iTdn3f10fxCl31sgLMzE+j2/Yu0yYPNazXuTHzHPsj9gf5wMCz5BQ58N2GWZHEAAfD1OKE5T+FenP6m0/CmfVt/+YAQPnPvgMBvlRbmd2FD238GJeiUwLmBDPGN6pBAwchMDC9NXIstzbqJ2Dbt1rPkU4N318fQ3Vz/EcWTP4kEseDGoxIIih/6m6V8/URwRCYqcFLHrlBH8tlYKwmo/DDiCEbiEHVb3rh8uanrwlxG3w5/foCDgDWnNDfnsylh/y18PluZfWD/e/AfbHx9yBAfkpaJxoIKMXI0mN6wANE5oyijVFBeFuyJe3WK5cK8iXOFFxZrSsPiqbzlyaY5njoPpvEw7FUS/5NhPUkzvnrI1xepXHpycWVZX2tMxGN8YFBV0ZjaUbGkoyUfvJXxPo6bcuDIxNpdD5Eztcd2aEte1f+zixIuQKCEQfoeviSgs1T7Dv8zIm6iK9dLPCxmS8zIkGmWREARKiUpxgEqQa6ho7sJRF7kDuRCB3qyOT2bQQLowFwxVDc4UwXyq2FQsTIV4U6ksSTenrj5I1kz20TXm6LLVMVk1Sp2qgGvW/cdsme639VGRBRps61akeK2hUVqs96qwqzJFivgMRVymuMK1V8aL/X/83GR3o1b3pUasRgnXsaftEAjXc5qZTZxp+7/EKNxMDGLjXeLzmfOX7yx+AB4gW/KPyMeNYCuD25ID+WNYeqvUbOuKKm8xhR87nO3ihzvaMpL5ePqWhw9LqKiWbEi2qY2qrI/OsxGaAhrZJQFNhxLgwSrALg0oqf43XCVfFGYw10WwsMFg2zQF5klZK9P6HG9Q9Ze6h+PTsAqxAkOaNlgoFuLjWgOtTJPoqfWEH8+jmnCITAhzEysM5NyTKxl5ExcliVKC96eGJIkL+ukF/S5gmkx1CLwkbgTPZoLTB/nLTfSgS0F9uWrXPGabUzYxv9x6W5YplWaUSNLsMpdUWE6Lu7FgJaOYYNDXFs5tWqCv94s06p6dUGUxGiYLc+g3LrH4kA9fV1HUqorzpgj8FN9GtQ99JzqxZWtkLy7js478KYWMp7m0zt+UiYPhJZe1si5KkcbBflP5i5VbDVwOleMSVVWlfWAGLcky1pu116/2uI6/CmVcv7Tx5Q3wx5YZSyjNr1jeCUKshqvg+8aKhIkSPhblvhaTMEv68DKTL8PNnpFWscIS11QdWPd5VtTjzzWaksLINfdqIrSVwPJp5XkGv4JafGwfLaCUPbq0vNAag7K71qdwwR9+wriCcX/pTjqdiYv9Z+aHtu6WHAMDFDTWt2WzIhKuuWl6vqSggz1RMF/B1UCeCSLWq15Kx4F1YMTStASeZ+bdh+WBlLXCQ5QMSLzrbYbrHb2ocaYdL4m4StpJwW2lCwfEj6R1NmRHbe/BseEUjp3Iu5KNg1KpBjRRL2dEapUyA0L2aGPWOxiIwExWNOg/wxE7G8XnxIB4Mk5BwiLHxFVRkA1SPywGZvqnhqYkh6ZJDhsU2KVLUgssNN3yFwqe1mYRV06/sKQ/22tJZeihHrU/cvYXH6mZXckmhYfwqPwbNpNQL+Tp+RZwGo4dNH5CfKxXGo6JMPIEUUEm20ky4TNzKctS0cNVSCx5mR5MidvvhgznZXmqKqysvKwfV2KLfIzwIVjTReN/AVnmVLef7aalK//MsC8wtBY97gjLMCYvDzUkOuHrxTQMyNwcM+z4IyS+m/DBg6BkitlMjMKR0FBbuxUjcGtnpwU+zydBYT2WhIpe5SLtMr5JFlKfH02qIy9bcQGWgsKjJnXP9c+dzWglbzDtomM/RHT1n9mHGJLhEVkGAdReCh2OmmxIb9Dc63diLzDk3CMX6R7CI88XyibmxcXychr+sccutXX5js3os3LtVkuNn9vtEdeqAYfgZvh1W6xqq57rNXZiu/krRH8zpcnR1SE80dOevPstIPzlS6vO9SCKuJAPktitH5KCE2XdO+dzFHm7FwckJIq9iIU46tRZcwrn80y8bL6C8/lr1vw9YLDJODf3RWJwrrRr10HW3R+rviiB3YtVkUnB36brpuKcl+yaHU+0ATwDJNvxLCCnbsBLNLKkMyk4DY7f4VyOB+PrNsz5M9tIJGRapiUGL3S0HdKwLCu/er7sMMHQb9V8NpKWjAc7/9F4WBedhLD6+VPznC7LWWCuwmfAJr95o+Frdn2GBcg0Lnieg+ouDSH96kvPVx3rXt7l52m/ofuN/2iaZp3c8WemyBwUZHYYVItDSgZ9cjPFD1b8rE/inyzymhm5EnBfvoY6E8o2Az+paWOY2iYb0+59QUHfMknM0xw/X0+CTTsZrd0lFBVFbeoRFdGfulS4p+Tk0F3eW0MUfI+uIqvzJyVl5sV7GEg6C99wdgtVJRD8EWMZLpoY0Aw82ihn7tHlzEK/DDnqDha6B1pPSMjUHL9NT55M9tfDJg56sB2HzGU/KIAmFR4zmRYByLc73l0NkB5ceGDDSG5HNXMhuOX74KQ4/OVhwE1ti4kt9C/ayP8O7ycbVIbAsmYva2EVRdGKQzfttalb1Blv+3BC0guGo4z+f+hMtV3+886lJSWRuqAca47zYe4E7UhHVGl3jQJG/prVI7HMzOgTN2VYjVj9WwySS8Ioi+bZJVYxwc8wX4Vb9rfrNmyfZq/sgwVWaGY0BFKtnbvhp1rnZD7O+/6yICPdwyUxW3LSubT757OSUwZaFmFsMzM8Emvea8vvOa1+i4ud3ZoFOLIlSgmmStzlSWOBTLwMsjw/YueQLfZK2DClbbRQY42azLKEOEXZQcbMUxE54nhRbGxQvDg99ucPacPl8qnBJ1OFrAlWCV+95xSvuQ9Nyz92PBBgeQjjKRPYY8BXJRxKOV5WwUpnBXmcQnbzBcWCNPB1Au+B09U+WUTzF9oEbvbBKG3Ji0dzOu7cV5jfliBEmtVc9htd6HXMi8dl3K+0Kb9TgdGMm0xGY/fhF9e7DLqQr26lCOwHNXyL02UvxRe72yVKzDHOAzFVq85x5E3TM7vTGPTkQJnwYvJO38UwRq1iPcvWeRQIRxZLOmA3CFfwV+gqrjLi+bDS4pEWWECBI69LBoc2JhvVGaI4kXVGWRkxix7cmtoPJl9mqNJEQbHi+AyCa3eYM22R2G5lg3I3RoaQRHYGKFio0JnmkhIUa3U8am8/mwHbFxJ2iYrZHBtmU5LFpF1Tl3l6w+VFNp8wlamwG00jAh2zMHLf0WIol6eZ3tNi4zMsvWe8Pr6F84uQb+micWx8C+4g0aViN0QkdILIXK854qNmunekHMerWrYGdnMTU4fXUHIc7HvE1LBi5hlNTRb+tSUfPzc8DJobGpZhQQxbhr8qGFd83HGfH2NqbDJF6FA8ryDH/6EIHCT91BYax8LvGyONb+PQuiwhGJXWEdzt6ufzA2OreaHTCkUYoEp8iRuk4IdDQr6TGGLxgRYjcRPHyTPSJAqqwj2trkSPnCd1sLsy0Gh7YIJLQt3Kmc7LQS2czLfpFGkSeY5VyFMtyBQe5gZw9ZlqbTRpExMOxFhjCypuJ7MELpLtP6M6eHZtUPLKAO45rzsDdLrX2do9z83Xmf7YSZRzKloBvoV3jSfgg8XKClbZsrN3j/dse9q1YNqHbZwiXzIzscBegTpliEied8FUOU3VywQXRZkEm81lArPCikpoWT9lMytKr0+N1mWwMSumR94kxhOD3tcatoKoeTWgGMEPolTEMXLrYooxHDwBJrz4/jCm/8GE1AZrFsUWhOH58vjeDqmx2a5HqhSMjhu1bkl0jdZ8+ehJ512gVLj8u5e30z+mdyuq0DXK/JH3mApIiZNwkIQRIcD6qkILP1rBmHiD8aiN0XZDsVSOxoShcaGAKa7ATndo/G+FjXQf/+L57V3mpDAxB4iNvHv0wwG3jXEnX6UKmhIFHk9sx3XF9aWYpwWc24oBSQXiy8oU6G+iXDQVvSY1RfDqZNxMtwMfRiditUBBIh42OfHC849x0t2m+Hscmv+fsC9G27/j8ykS6cappgn9FVGdkt1rXLKWMHn9citr0ga66jopatYAoYLWKTHhm5Ytzb1DXYd8Y8U7XX07OPrqhygvimODd35+pSOjo6fd7RrpzKKwaBcJRUeuvVMJQoRqN1dAZSEsC+s2REJEVpy/wGEC33EahKw+uZcj66Q4gndxEq6STvHLvex/SPYyVuvFcHUXlT+nyAdOB8gvCaqFLIp/WOyNMnPASndqw6RkhWe14AT6GRiUlq2WaNjcnDRzhxtuVL93Nahb2WiV/GRldL4z76XgE6xDrF6HV1/B899S8xPSzEf9XB4buKTe+pUwHBS47bx4b8v5h4CEsE4nIRI3qBx0NoTCCW0REs9SKrQkpNOF0KWX4iTMzw+aWOckHcVbNzvX5dEzW/9QA6le/80llOD3ODusC2hzEF8mACHoY3BR1kqJx+pD3E74rWZ15YtNcmL8jGd+960ggl096priR2Ine3OQjX9sWmS4Izsq4/tmX7dfJv+MDGZWVc31JAfXxdE2nvN2eTjlKRLMh1j97HHo9647ad4vzsxfrSIdxVUgkOgpJvpZIYGVp24FZUx5M9Vuq7ox7KKNZ4DyNzZese664SXhBpucPyYjOlivK/ubD9BDxAKgXRCJqYBaHlW64QeaAttxBp9Xq304Xbhsxxtb/TUDNAPKVsKLwpZPcObjzoRM4Z3SsW2yu+Jx8VHvANc9ivwPKcPvEpYRLhNivE8Ky/FXloX97gtIUAcju5K0AL0ETia1X21AXQlX+1nfvND8NDa/UPto6budh5+lNjS8Q619mDcTvyce8wBEzz1Rw4VzTUFQ1fWrPgXoGl8JaSEYVb95r395hc+TUx0SDu5UEAIF2JH6B4XWLFWpMteTAZ5G5swV5sBkM7NtZgxToFK2qTJkjLqJNVGMv4INmz0OGATfeWH4X5Qg5QGvHUbNC3FXweEPcjQDoJSfLvX1PpIRf6iYGPieupQT0CFWBysfhmQw9bLYIPGOzAPIUfIgn9wl6GSbSTqvpKoP/KCgpTu7hAv3/7y+V+/LywSwDQYfvhPtXmVqIQ6B9ztArnTEIT6R9DvYn6WQ3NojhjljuZl51YyTpP4fvD05TmFpUIb9pxo+YgF65Ha9AqfASGxnLaPhAStwYKprjdHcg9kM3vZ3Brd99JYW8+LTR9YVNskZNoP/kneGsg+QxUIhoLcMH8l1zk6M6+swEszf7Bi9TW2W1qMVvgy3CgNasi4xy6P5EOdBl4//bYCQt5o6qCUIeQQ+6++wxcF/Q6tav7LsieArwbdlxhXKNdchrWM7z4bdWDv4qJSlMqjMg6LMv2AECrgyL4efnyVa8yC4ysSfnrp5Unf4xCXD/iYjliD1e6VNhhX++wRfCfdN0a/yeYbeyv8yaly/laLzNZdTNZUXUIlkNbUsEBa0E4RddtUE5aBdMIEpO5rjAZESFPbg/u+S7lAvMslY37O9UuVpxE7f4t/F8TI+cRIntz7pGhEIZdy7pVaj8W8XDEc8o0w8RAk2DvWXN8Q9IwtIhf/M+YHzUhK4mLHMG+l4Vlu6sZLO9p8S9lq9gCYYDWzqpnsU09FvalLvEg1nNq53b5Sp0shIKu4tgjxCnsuRwJWGFA5sqlI2Dyhe1iD7exdypkwud7+RU4sjoK0Vdeu2QiR98M4sOO/ATyB1nUPl/NyOFUpoo0MuPDmmkqMd5UivA8O8BsHe7hue7aXLAiSqmextckCBhF08ReHTwAbot0kbDCFyNhm7T3oyqKxJPVqztPRPxNjGElPIhpIPUIP8j1QmJdLJ6S3Fj3W1NGqgqy9oaZN6QNb7VMFGfN/U0tNwP8e3/5pwJEcN3aMuK3IAVnJUUES2VuTjY5wUqV9645U0wg42Qg3XfVdQhYYcXk+nK+fs45NMfwCTQGMXZXLmWi0KmF7sAfZuPmVRc7R0MwEyMqRR0hyllL9bO42qSPkksDGMU9D3BlsJq3XqOSU9NTgydI0MBnucfs46RUIkVwWtWFbyqJX+unPSdt+GqzJbnd5Sqez97OQ2YsBBrmTEGTbV8TXE4vyRCrG6+rgTbIL35R8NUdJDZHA4OBpIIb2Pyb86AyJ+vVGYjFoMecxohEhvQCOvHakfJNkjPPzC7Yfe49ZgGGY7vjmD8y9bCUUuQiR8V1hxOUxCF5VI7cuPrvr8DJZcOMeNL7/37fVmnXR6HCvPcvwmTlD3wdt0ArtN+TWh4AfOIIm6Zrmg5HiCC5dVnEoNLPjyTZ8UaInJ3IlPC8h7HA1tw8m34nu+9xaIQyJMBVs6p3osuIB14iMLBCjaZ0W1vQVUFx+cZPxzmP5V+sdtxl7Gv1sYX/GtrxaPHory6nWiScSu9WIJnHSWpyNxwuHgwr11XaFWdThwL+P2Hw60h/9h7KO/2oqlz5Z/LzV6lxlfY3PLPovJ8lV4TESPAdtIjNZ1y0WsNl0E4FvRfbhTyJPomOgnAdRvbx14JuEGVBzAetSnlAmwgESIhbkXNAQ/ngwcmE4rqg1IvhL4yeVqdODtjH58ZvnjGIqL+pZSS3lL/SiqxyzDJyGCEMHMPQ2FRwCKmaP2yp4bAVCit3GNLIu33EWox5JAwsiQL06fRBWNpfFxhBEm8rtv4dgMfp+4F8DicO1BAnMFBoDqEsXPUrSQGR9YK6YUGCd2snEFVy1BVhwOYvZg6qgTUD856UofdL6lOrJZkUWCfOdR++Tuc6gwiz5HKZaujW6l/kKuY8f3RYelhb+cQZSrlNUyP4SGwAd2iwh+viHAHUjlIuHu6GoXuwnAowpWLNwwBEEzC49lc4eWj0inRhwrIy6IgBww68Nqk3TUjMVN9yHu0+SNQgTv0Amuq8MgynVZRxgEC8KRSetUeujEwwGOgObcdsv3AHJaYJNbfj8PXulSdoM5/UD+JHLy+d+OCcfURVyBJYxxvnSpGIgYxiJ1PQb6ZtHZQER3uh9lhPKeD3SJqVrWO7zJewZvY3ylgRKaQY8wniAfLsqfpDTLzh9klqqLvs22RtWE2pwaStEj6euNN2J9+WS72/6O+6LUVtcLz2hwEqBZ9YU4FNtff7BBz+13EZzhHbVw28n8WN8bG19LHxVRNDZnTWiUtepbsRoEaDTMsgD/Y/6VT3JAhcTEXnLjL3uhbaQy4iCAi69Q3QNXH/aedY0rTfaFyg6ft1T0UJ8OagezmgfmTHU3GIg8ZKCVdKJdxiuhi4PxwVjmvIYjMQ10X5hMSX1OTolnDenJauhDQWuxWAWbL9EApAQ3PpeGGTzaFCES8zVf81gzsvswq3kCQ4hfupnFaZk9uLWry4qpW4Am7Yv7UJsKSPbItGZk5hf3YwTHXX7MlpHtsVpa1BiQv2oGkXgLcqdXjwyAHNkP5EHou45pZ0d/Aa9HQneOg8FLYLZ4ML6rZNTDU2dBUDv5vpsB9gGVeI6ZkEG4qR+t9L/YQ87NVooaSU7swYkui9qO2RfUenAUu29Ti3nZBDml2WrFUNyyoDZYGrWli8Cth5aFXqC0DobvdLX2XMYqaGkjliSG2yLL6JO37nYoZ6RoEyMdyzOImAenvp6xAfgDqanZK3+FjpfgHa2tHozAgXKqi9NqetxDWUxaVMnkaIlZkekjNTr8DMqHlg6K7geD2OPS37G/EzpXf1mb02kmXW2rA18y0kl+mpripwJGdeGRN2xIrgOVx4oP9EEkXOR8u7/FUSLJfg9kH4tx6hD+oxRhyQhBaEsXf7m+SIEgxM+WmT1Vw2Orq8Ccddv/rNPjZDcW+fhZ/SMjkUL0588u8tUzuqnbc8NuBBQQqbS6qF3sru5diy/2GqhAMvgXsGRmWTB7dXdUtrUUutLzbJil+4JxifpqAwCPUs7s2PjxfT7bonpF7cTT0Ze5Ccme/eEN/MNfZv82EbPb2k1E02T7/d/6LNh0DxYDpET//7r+9S+l2w6BJ82EqE7nvfXk8NGh7L/OH95SWgIW0meUOu5VFxXxBkd+NmV09fkmJHI7nnSNBW7nk1VP6AMn0TXLYxOKit5d75hxev2sysSiDaXpm3deqXStv5o4/vrbkuKk06pKSyYtUa71+WLRZ2J2Pab0H6I+csyiq1Hkmo55LlMfwYKF0YzGteekLwUtOy77uA+RYMzXBr+KUKRvwloQxK6eFart/NWP7yxrmzo1cbd4QmKGMbVlFX/VYfxlY6V5zJilUcaefIXDMeOwkOakef9b7HNs09c6POzXpEWXlqZOYXBEq9kBAmhpnUMJjEb+dJjhtDd/+tVZjT9ph7EX2lMDtg1PfL1QvL/N3ur1z+vY10v1nDV+ZtEa0xqR2W9NVcFxYLReR794QQP6HE51ovHqrPzpJLqllw/TrlE757p5GwBKKgCiQu/uzwuVR5TFzMvpntCSwzJ0pSYY/7of05ak0zZKiQ8OYWwIlKIHGM/12wsBPelL5QXeMTqXyejQSFACXYMLXGivBZOo/bntQIErf2GMRRE+JeXu/ix5XkZI/0jY1H3fL8rU0hz+keUr3HrNBOsULPkN3k6FHtWEa0V1daU6SZqp3mCoN+kiakrN14JKNwC5tByHnDx627irnNj9hWZNVUwIw7aqtKypFtg+Q0UKh0zmKDOoljKpOPCkPtgGnTaCZxLE2jPEcUFpE76tAwywwXmmjFSehWvsyExGhGAWy843VVxSnUJun8aksmO6qanwDIlr4hqTgGzo79oTD/ko9xbSVbhpauVsUZO2QJIakpISmio5YpKSBcB3BFC3mxKSKimIrhM8vatKqSvHW3sOyiGEgBP4BaojEKTsT/2qJHJv5vVFG7IVpwB7QKpEmgg/rCxZ/qyn5c7qzDELqyJLmpvQOQCK4oH1bVdbNhSpn78DocLGCM1gxAt7ilM2v1Dlb6w5WBKZaQHaHwNfg/8Juewyoh0y+2kjf8DpPJm2e6gkRZbqVdCKOG8rwla/HTvircqDhL8EDQJQskMK+1MxShpfa7U1NdpJNSilXVtdre0wYCX5EAeUR6lHr9Po9OlDavsoT7K7Dxh58YKeTY+ScnKUlpHpv2oc9gUEHaUcDRyyYm+yWj34DmoyFCZLyAfk3JCoMp0QejDQlkpQcUNmcV3k7ifqIHoSj8G4CaXTTyudcWm7SRF4P5+Dhn0XqByrf+loGgepHCqT9szPJOuXYREYrekJ9WSx2rTQW+cyxZL41X7PzJztbXY9EKqvo3anfCvMVU0wz4xWm17awPkNY+MZu3psvXezsGxuThlfmPvt2KKa8ScSGL9VtPPTSlYctgpfSnvLvVZZp6e4B7KZHFpf+dzI5XPCm08JjifQ2El8YhPPkrnjjxqhifO6aUXup0UFR50+IYkPkggKZ0vMxBAh23S98KjZJzRB0ZETnNDPGio0sd80rSh9Y2YLbfYmBIdtYDzqoiCMekpX7JgewHiFKAvQpE/HkjqKrT0IkXnJLeyQ0HX6mkCWcClXERpLrm7vmaOit2QXZEQURoaVRx0tdvIr6micIM4oClqFQ+QekNLQ5lOGk2C59UtsojTxYXB6YopkFxMBCijFzQfBrV+SudLaNLy5NrIwfMP/f8WUejUJYzMKNLm5moKw+9DilHxZZFZUDmIM5xzCA5rd99ZR0oVzwtZ98jZNM30qh1YH0bzPa3UFbl0RNicPPnuZ/K3veMcTSRo6Ix4VvZALhNfNq19ZzqWe596j59A50qH50a4gnV/SjWKQZBUn+kpy0MJd9xJ9UiC6ehjKPb8qCg5b65daJI7uJ+sT/vRTN1aAS72JfmYBQe+F68tkFoMwRV4MTgPnblq0NUjPYntFIlGA2stpuOTjfDFRzv0no//8/Ej8oEmvFdxZdgNpFaNgvXYQ8SkcOu/J5SoQn/nFn4YhocR6A7njDj+SeZS6tX5A6Bkx9Xv92HWI77ziT4CtvsSZMaincVvRF8yYVjJQEtKR3hRuCY8p/VSbC4K7LaLoD67EEgMwRz2160YFDCTnqeorR5hfFVUhC1/jbg5n31Al7IYTbjo8+c6uk3Tdpkd2g4zo8bRBvFWTqU3jf7VRjCG9tYBXyPlva/LOoKZGpYRfoWQbOigf4LbJ5CwXJO6Hl6nvubXdCFTA/gse2XEP86me7nec5r1LBZIS9n+8xsuaR4JEKXfZl04oLc0aJpWpqbeG8tIV8mvcylG5RqymIHdIPgDs0n6ynNLM7sdnBdbCNO4zHnq8e1y6pMOek3iooev1T4mcW62bodOZB8Bxw8ZqSqA8Z3XknLkKgIKsXSjX1qAy186l7ZJyxgkgttrwfe40M2DHVBhHN554e5q2TdxJp/Afnn0JwfjXygNedBqYfzrryPB/sV0pR+Y/OydzKNPoEvwCakEeipE/Gql26s4vEdscdMCShj8/F84DfNv/uzwnE564ImT8Cu22mJ0OFdNVq574HoKjl7WuCfCq+6NvlZp9gEkrG5nGSTmUGxfkF61CGic6/h5PBG/GX00N884Y5XKrcmMfGRg+rV9CLyAXM3jkLkdluUfm3RQwk61PCWoaolx84MuRgX1eC+tUYWMd723j8tyZq9ezozxxyw5O7/AavBTQvM6/QqusXXPvS07E5vk7y4emZVz/T5fXvuWbnzOLk+VU+ebN29adXzng4F09ocSz66Weqoq1JsWwHFiVy34JjzxYlDt2ypGXgbvPjNvKADXwh27Pe30dV3NJ/oPCgSWpOWTxxTZDcN6Ch/QVBsbYhQ+u888PwxjT+b14eXHgqwLt7EikHqHXUh/7IF2mcKSGbzaIzclaN0dn9tJtnMWLT8qrPr36XfpVSVRkJWNN/ALvGSW4Fxf3Uk3JZ3rNp1VaV44oJdueQ9ljde06es8p4e8GjVWy/PZrjErRgvg1lYzI0kj32aIsvh73l5Ek6d0p8z7w6UZjATj8IVPrO926+eHyIA+MmFr/myJN0bPdO2X4SpqIG80Y0jjXP5kW5O/prxFLf0bUr2dwE9wjzRS38q3ojd7ggYU783yby8opZY574mfdhkyu6/dG2p1C6DjFy1//XNkFfFcmz1he7uZnzrw7VFnujucaGf0+hIT+Xn5xPs6h6Km8M04Np4gW9IjDVPl8xRsypbwImkIFqY+mICZuvoNLAABxPDhnx3hAnfpcMMZ3C+iCpuq4EFiHac5nKVlOLWOwKY55zQbI/IXxVkVFv9ye23LL+I8b5KQxIHgigLr4YePqURKijDbM7jAIjacD1u6vxGxpudK6dzVi42BbbjCzMjspVBe0SuKQuKISNwRzDq0GV1sts4Mhwe7zJNYN/7mo/0QgNPrugbUwLt+FER9PxFWsMvVjwnd2naqE91kL/Ik9aQ7BJ43A+ip74MI477IEhVyIAS0YNHqahYBni3AErq/ExGdLxQgfV14HeLp92u87d/jB8X6c9WsJhACYc6XKF/54X8CWCSNW88a9/VVbIjJYo7+f/SrZ+WQ4ge2USQLQ2NGzT8zE0fSoXG3pBRXbOYdrnAXEmzaaUdwf45VDRMj5b93oKNnZ1vAjCOUCja2QkF7g/EI7k6ZNL6jshRVOn5xGmzOCPB6dkObLQrH5dE8cjb0nVQSfjfmhcMGNzksMGshaCpjvg5tuEyQEJFx8rcMc24+1gyZ2zU0jA2J2bAcvyBUQvfs9qJEEYv05XQ0PXfhq7Uucss9D0cBYWRP2EsWdUcEOKzNLu8XtOYOw0iRmDorzd3QJdKVvsrNP3LQcG1LFEPXw0zfO0iNiqNKRa3JIss7w2wC2iWB7rLvjQQMeS0iQC2SzT+yHLYgm0H4DI5fUAO9o4CpqiEoQSFh6vWNdzqBxWRlUlYZcmyO2+rAaGSsnCX9wuAVlzLBSs3SxuMn/bctS2Hko7k8hmW5vh4e7Myd1oWdF53gli2fvQD2iqCtT071iI/a2F4TmrzzoPyOn+6qJ4/BKda7wiILeOZsMnwKgGmcIXveMPfBxxORTXhbaXO7DQWIJDmlhmsR2zruA0rSi8Kao9rb0HuVc16BL/xwXpye7rTayKbxImhaaYpOkSQpfCg1Cgb6Yri/VoMTUAr7PIEA+FXFfpjJPYdJKNDzlvNKR8wVCaoQKJHsYr9MTRsHyaEH5ntsTGJNlyVTfOcfGCT1oSfV0h/BnTqngex6CeUfOY0mdzOwfV+kN/29HFsn91QSEk0b9rQOqU2wKlH6z2w2Gn9t/pMGvTgtyUUk49iw/6tvgu8HlmtPKD3JiDRub+eesphnk4w+Y3kVmt9s806AKxYqoF487pM9OCox+HPMkZgafRGvA2y1w7KW1saSOgOjdeJPArRNIlMf6C1Us3pWTlkCPhQD0xjyOJtcWzC4j+C5A3OJb3uYr9G0r9/W5hQy4Zerf1NIQQTrzkwKmFHHLHpdNfUvddPsfiWbZaIyXp9AHIZR83phE/P9la7BVLLJm2G0VZSKJi/MfadGDiKWYsEQIpjTpHvHFJMKk8m+RScBov45faHpK/JoUeSswENsRAV4D6pO/jOu8Rl66LtyECb0p0Aw1//b8CxWKkGR3sjCVHu1NoGTxRSEuU8OJoUOBOKI9fY+AEoNJR9r0VL+drli9qKtknab+adFMELOFXy0Sfgr1fnkicOUP+Y/OwG0vSYY2lfr+J+D7rrNKCECBhSFMig/JBOJ8RfHBdxDXZ38WBmb+DPo/NiYTQ3sa+eNc+846g1BoqA+jPvZ9HPzZ6XNhZbJSWbSlWXFrH2+qESRnlMocsjR7qFP635jvYK4rPwcKG4+VwZswiia8MN6JWQ6EUR8wIEs5dj+1qwrzNs/dzAAx/3yCfBGvd+82i6SByIntfwtgausRvy+L/ULlWhs5ntHsb76GwnBbRJLbK8pJCAaa2s2ABairB63Oa85sqIue8xp1TFc3snAfmBRp+bHtsR+eb7TC431jZpzV7Mv8cR2B+XS07LJfCfPHgT2H6fqgW1i1ydJ2YtqvH80JDbNr5+JowP99RA08NyPr4U6COfBt7fLnsjK7u3NZuWwXrFrMzdT9eFnhufBq5gr7Q5Az5umoosYiS+6TdMSXjYTG0b3/oPCVsPLINK6yUyMiYr7895qG2AZiSWNCI7LIcMFywzJZ3d1EJicX7hJrMnI02VlFWqHHnWKuX9fNzoWFqjNzH3vlWXPDEY/TCwbUZcrKi6qgUwmwJHciM+C/s7psuTJTBajSLFteDnKmyjKV37Xt3JzKggjWno7cVCJICErKaseKMBXckFqDtWoULNt/QQiltGOy5uXHNeQHJQniZ5akI+lGRpPkePIuObfkyUk1NvqzgzApcftU9Pf09+9DdMxdPq5/u/ocNQBbJSRQ+m0Jn/7ajGegIKB9tHwxvmR7zbRQfqq06ccda4f8RD5J+0tlAQ1KUUPXHjZP48AiiMtZCQdzSwglSlYoL1Xe9BdlyUrIj9auAV3DgVE4WbNX04iCqTCXvQloCDsm9S7889lsC0G4DDv1L7ilmZrKggzRyGoEAutXu0JVnT9d8b+39X0tRiEhJHf9SAnO/gaqantsNs+/1Yr5ubC5xs79ta3FYtJhMaVPnUeCSpqyxw8jxJYQKmnXfgkAELim2wOfctbcbQztyc50HGjsX6yCiIjBBHh8/OHaksAhlx+jTHnJ9c5HOKc3FD/hsjV9WQ5nOqg2GO81nyFSxk6nk0PgswdYAEy70endf2S5t+8uKij44rAuDhx2+TFgWL4sohE5h5SRH3nDHHnJB+0wk+R2qxjt8PtvTN3OT+/3vxBTvyMlZQhigpfi409nIiNNQSpFK7S3WICFY0mOo7loRbRCWsltCljZaJc13xnYGFAnsEInBTb2oQrb1p7iTCsXWYVGL2+LSBaiiT89uJpAXV8LwfWmm+7yKxJY4EZpW3vZ8tIDGwPrAn1pRbE+WfxDF/H+9SSSIOSDTcVch6r5wkQuikJykGGMUNLenxQUp4k6TOH32+M6JWA6438dNwFUmQ0NPR+oH9s4fqFPB4+xrv0BRFrvYT0B1S3FCketS7AKqJFG8JctSfYPxcEYHEKo9JmPuhuazp17UF5dTYtxN/OfTXmqQkN10tJly84wrWP9rSuzq1andK4ugUHWrl21DEA7JbwWUXP2nG2LGreZW5QJTlA9BQDjvkAL15KToYxXOdUYwP13puMNLJ1dti7Q2pnwDhZDjalfaO9jNRKNDOJWq7UAuIGWfCIIWlWkP/Kl1sWI8VE7egjsLcSSnOewRAnJZZ5PKKjkc2LGBgK0D9ZXDMm81iFqk19rOZHIV7B199u8lVL7yHm7tP/sMKJZ37/y+wHndoDJ0YS8cfy00g6gvj5tbxwtDbyJH9RqUcT/EHxgRFFRxP5UA9FV6+TsRqKHO8geRNBr+/lErqUKoxwoxYC0EFvL7CV0c7s5fPtcr+a7IqMI2i2acxYDEUWTYhNviiNyI/3hzbReRl6SSLfKXC5HGtXZieitvKTn8XxrYmYCNSGzhU9vSCbQg5W85F26f30UX4kp+ft3j7f8ljjJyGMMtMYDtVXWnpnFP7qkc/bDU8+e7fRbbipRZDyiVTRdfjY9XXCHPOPso6ffYYnx+R6vs2ctLjWVqG8asmLvOSMYu9HoFwLoiA3aCFJxolXeikhsikavRKLmAx4mUZJ/RKki/UZyh1yapUg/h2Klhm97Q8gyB3TnoUv2gojzggZaEod0KRcXzQm5eDwBX1FBBeA9cyJGzVaHVVtYiFFKNHxAYQZ0fm9DakkJSRj2U/szFUOBw4G8SvoQbfVtgt9n6bz0e5eJ1p0Ex7KltR9iHgtjT94kolVR6n1N7mIHyoaApgWtdokmuHXi8v/Ho62n7ZJui+sy/xxrsOGnC1q9cpIdvyX7ga3pdAvRkyROLi0M6ti6vVYmWjxLl//utYUmAYFXq+yYddPA/fvxtLlf/dJlc9FCIXnhmAV/ca7Jm1REybQBNHQdNxEd/EXBDD+iPTgVtxf/EXvayIbGT9qHoyozwLedRLRiJGZDrxwOdkwpsYocHNAGDRNNIhEqasnwLWb3sM+cHy0WvyKffG3pVzhzU7FvfrjQd9amIfqJF83aWORnoPEp8kt5XfQH99Pgt44nQ3Gb6kqi4iuKzmre3GkLh5+foHuCaD4vSnDGSoH5MQoCvvD+qYZxTZkMFTjuLAH/bTQBD16Kuyh2i7h739W1CyGrt8uBaXKvOx6FOJcVoMRR2ImLN1Sw4KMp0Y/Mclw8xBy8atuSVzsnsB6rHtTykkYOUzuR6oJ+aV9qbV1U7DSETCRD8C8a8/sgYF3vl1+6yZPctX59mb+82UzxJlN9n1xdb2WramuaUeucC9RuV2D26nZHmD2qgfb4jYa6H1X92ECW0taF4u3hsnCpDbMN5Gg5mt6DrBLLGfC7+iUbw6rrHcofD0tp97Opig1c+g9XlGNsWinUwGm0Z1avj3PTTt+orBjZtY3ZCJ1ubpZ2FLgtXMVk9TVYpfah1KLqOLN+8rXFpibX5xUpNH0hbbiI0/fuLOvmtHzUlWTjRMFkWGN9s8MdNe9J2art3VTeL0rAD8R3EFJ8qFDVvDi1b/sQ6m9QLnVY2q3sjXu6TdN1Yb3rUscl3a69Id929m5yrnM2HpBg0cyHuCH5jP52HvX+rG9emQughMhbta1BxAGs0nLH8ptfuinP0LtWk0YNit5U5/ZJ+6NVmHs8BE8AzxALJuryawzTjTVnCLRWhYD8PWNCdVatjz8qNH1WWzEVZjVVZGNsVKmFs7aA/huQ5UnZgdlNKssRKvfcSsNl7VzLbw7W86gcwPqzVLZuFNOayi627Qd1A9WU6ls3ux1fU38FifpvCHgI611kwxcFzZHK2WwNXzWhhgkgbNlCclpi32dLhaN6C6f7rdBWidYwD2v+34IWwoah3F9lCkUp4ogbQq+tS4S1r24ExgoQ4Zd/uSmfdgibTVw1N2+VT6TWtpZxGxwOX5dxT7a3b35W0/naVTYaNlpaRBzPldSOnYdGjdvXrz+tgSMIQ/mKXSAwvSuwAxcH4gZofyj3rs/E3D799leFqdOgkxpIvrkoo/PhybsoVWT1Jt2QGnI4PKQMPDv/i+O3CiLqNWOlzCeSPX8EYYDC3Y+Wd18S1I/+ecM6UU4IEjfgOvk9mrdRgGNrEdbdh5XYhKV09G/Flhs44U53iYSgd82RSbKB/NGbyzG+2WS/nRQ3kWhKHejf1F6SaO13WHiwjmOP9N/6C8cbBq0aaeyizQ+H/Ooop28E1zvalISZoT7JCSY2HBmxhtzoyY0LDtoMZVhYKuvp8yXv6rsF5lqYd7UqDI1AF8VmXzesAq6SDoUSx7goQ3VCuIKAENy2wFbau7P2njK9F/n0xX5Qy/obmNNCG6na6DD0zfYosOuwXXlnKwfYg3qHHg4CN7iIgnfIxJ60FvWWRngLtrGbq/Nca05o69+Bae3luq2+m229vUn2T6WlJ9qyrzeL6TUjF/+N6FlD3H53b5YBKu3mhH5D766whVsSHFMtCDs60Y4fHKAvp1Y8inU8VWeN7NupJjsgWru9Rmg/r5DpmB22dEqyk2uHshKDwTAHpv/Moel/0xh/6OSyopFCpXYSTGqzqy56i5Y9ZRiFY48Xzges9Zcex8Im1xZYKSvNLgzmMirUEtlUueRdy5tt9DJ7BZZlEeBWikg40R+4wujzld3V+o3mhTlMs6eLi/fkK8ukR4GP9u4CByMjoh1Kzb0ho40A3fKIJED5TavNwOmxtRU6S3dZifYmbiU7GBwLmzhYY9ZzxuasT3vLrr7Pp05OgBA+/0Z8CYgkv0XfRj47STNTvaZX1hkdtDvC0cNMPi2poC3PIH7GqwsmUbno31aIVVAokO4iTIXH5pbicLCdmXHRVqRX9bzZ8t4ymeWJCLmQ/rayrhe/3SjROpl6Qy8fZRs6M0BPq5mmXfC69k5m5eo7gbzJyptOANlkXdLLAXPGi7IwWocyQYneWQgZG8je92xP3QNk6rQ4ecsJbiuJNwmnRTuj0gsmOTYhtWsELS8vx4div6G2KLyvuxvTaCO2JWpmQWVLD1uer/W0emlJJGuh2u8Zf0JHTS9PneFZ2bHLwHGIH9BTmn0jpiXF6Hprg804sNaILuOruflI80VTk5jsOCUO2ghXu9NKGSz9DAm1ughZtYyWF6vDfu4j8iwb/vQQWYA4Q1RsqSxw/a07itbKE3mHOu+IcI+VnmF33JOyUYllWm+HO/XUer/W2euq9rsFbk+fnDNfPSM64NN0nndDsTzWybXKpN2eCzX+GxWiaf1N2ugZb1ajRbU617/ROvj/XqRn1uDJ5Y5rv62rnq5kB8zMGVFZSm/923utC5vdMzXHqH5eFUN34ug6yyorXa4Sr2WxjvXucplCfWV/pqXu5PCwp5JhgRIx+V6a+Y4b3GtNzBIk+ACT45dWVQCYdMIscce4WosMb7NKVnn80OFSNAbIJW9seZHf8yZxOjl5gBF/OXFtD6b/LlWHQ4bh/rRWKL33nRI16MOtwrIyOwzchur3PsJOwQECNIxQKxYP+rmP6YCdAwKDGYdfm1jOoylPdr3qW0dnL6XKIU5NFnhssyJJrPcuJnqttir21TuMrncRac1i1C6s4oyBZtkpXi17Lv0KamKaRZ5rj/UMfe19D5s5F71BywJ7+PQYXKRCzuIixhGKH68XWfmq54SzkvWc2D4B6/VC1roGwOgN3vfUCID+Xco6lhKTV3RVkHFVhHtDQSnaLsK84zbUcJW6wtPI745SnXWsswehdICxCu3EEkIh1Uc3RchKKYNHb8wAaB6YRWbKLFbGRhtB9smuXyds0j0UfetI0fmPCrYSICw5LTT1ghXZf7oj4trEWlhRoS0ZKe1VrVe8iYzNUrkijjZgQ+xRg2OZdygSorPQ6m62P4oymsW++jwcZ9ADPUnpDQVblvlfxgIzBzx1NHttdHazMjZyVdFBtuhgZCRi5c+VEqIEYPF+jNvReLXKxgRfG0Z1fNWxI6Ob56BRqjGOlp4qcWQA7v+qgmUWQ7TVik5xFS7s6v4sucMg2e3VMUh3sydfAxbpSJwTmnfrUZJv+H+lJ1m48sFz5oYsvhraHV3UwyW/NOmqADJUraDbxBq82c1G1qbARZO72fe/nharckcuVoCrKX5djCwLfMVMBqAE+BftoTaNirZc/CsLM5lBkR0HygLRzXIS/r/cc8Cs0RKGypYxenVPnKANXuu/6CX0KEstLJvUCYJBG9hihSPAsKy9SIHkW3o09WucR1q6IysqbdkUVLYqaqtNgdXHE63TsK/8nfU7DF2QUYu020LptiySTKGiKbqZWK2vkkmvJau+Vlawliqn0qJq1HZIWxVc4Y9gQy8ru/0lXFedlVEyyFtkldfrgAtFKEhRKxnNgFMyOPM9WrAxY7tTlZzyL/IKDsCinDqx/FVoW2dWZX/XYa296BW6FaQt68Jq0Gv0JUXSjFlNjdBMdjOoclwswkA9C2U321+xLFYl98Q3Yu4rDa4LX4X1X18UowFQHA2LmVih1UMz/dfMR25UwwCsvcdiuvtyaPechufnkHTfOPTSK4O9+Vm2tUdEYe29+spad7rTb9cwXfAeVMct6inPtQB+PUWpcxp2PQ0qQHJGybN7a0wfX7I5S/4S9s+z+oL+D+55tABuTY29NZv7Vx4Nm/VVHmYlHsmaS9J/uiMz5ecvyqffu+HjjLG53u6snL3htjXiZ7tZdsUVD5+wZtUMKj9vM25QF/h6SNiQx8QQArB+XQK/rB9XKJj6KzsiAABwc0uX1d3rwecBPBHgP7MfBUDCf2dW/xjKYYneA8JfjvsHmwMAli1AAMJf8T1kAQCAAACKOQLgPx3uThtcuzXw26kFjJWAp7tRABE8GzEoEM6T1fEbKaiQsZGBAnkbFYiDsjtXwQ6LAAMiMgBEwpbWRgQOOLlRAB1e34jBAZd5svruRgpO+HsjAweyblRgGHIrTYVItDTvFy6JzmV6uCZF19WG3kcV/MM71S9eRyAX+sGP5x9zl+t0/vMv4rqfrExWuff39dJ1nVbxNrXvGSM8NfEj534o2tv98a8szvZh5u3uaxKdy/Twij+mZtc10P8f0+4p+EcY/xrHryP0wyfxgJr2H3NHKPiST+fDiYr/SSrlfhXT77frhbuyThZO2LlN+RSGmfTU4vM9cu6HkiPe7o9ouJWWHKrcs703Pvv14+GT6vICghH4uy1um2huJTyjKQHp9jEyBddtwGS77XEBgrdBemjeOgT3Ns75NoR+q3b+WxcELnrgbszfCdfww/2r2hwujy8QimRxP9NSBY6bfjDk9q2Tq3NkuR2Kqvnl/gE1LdtxPT8IozhJs7woq7pp15vtbn84ns6XKwjBCIrhBEnRDMvxgijJiqrphmnZcrrS89MthI66z/8lWV6UVd20XT+M07ys2y6u+2OX6+3+eB4XDwCBgtRY7IZWh7LLNrvSG+1+j4SMgsqHLz80t93v+QsQiImFjYMLugsBoQeviF14i6EkpGSsu2S8S9K7CBMuvvv+KNFiaOnoGch4YWbB4yVAXkLkRZJkFl6kSgtO6aS8xMpLtLyfy5OvQKEixT68sVyFSnTeYo0xxhpnyhvrNWiE6IVbC0mvTIDpdUa90ojVm60htF5Ya6brJb5eIuyVLZC9hNmLttq1egmul/h6ibaXeHuJuJeoewmaV/roecmflwx6KRxpCJeX3HvJvpdEegmbl3R72aaXLHxxxVUTX3LxJRtf8vEtMfk6Ll8y86187BNP9XwHv4D0Hfy9qe/gX3l992vtu9D/+Nd//vfJH/ynKMkKpUqt0dKpS7e2Pnr444v/yUKSFVXTDdOyHRdAhD0/CKM4STOSF2VVN23XD+M0L+u2H+f98Xy9P9/fH0ZQDCdIimZYjhdESVZUTTdMy3Zczw/CKE7SLC/Kqm7arh/GaV7WbT/OyXQ2XyxXAAjBCIrhBEnRDMvxgijJiqrphmnZjuv5QRjFSZrlRVnVTbvebHf7w/F0vtTmFwbQF1n/lwCCYjhBUjTDcrwgSrKiarphWrbjen4QRnGSZnlRVnXTdv1gNJktVpvd4XRxzbuJ4HzqLJKYcYb2I+M/5Z+kWZXzo/lT8A4QCdFz/Xdr3cYf7lftJPenvR32r1LeDRx2n128zu439rQkwVpreG6H0fXC2RFf+/rXwlRpcCJsf1cMtBbIgzEf8z2wKnEZNhIxRKU36eXa/7vO064p4qyIGF4dcxPsXFL/KiHPeDpB8F5L7C57szOmiW8srDw8Syn0hlx94wGip2Dtnh7Li8rqVIIfllf1EnxSkm36K3Oo/HlmeKHN5I0W0tFc8Iq8L31cl38MBh1ELvPukRO60gGPuCVWU7jtx0lSnJWgG3KZHMri9iDsLQkLT289rDoQKyhYq6c7JlRbVjPfVoNmB3VO9Us30xlxKuRoaU8+OrCsecQGt3IyT73cMzL/FKybE5QC7RoiY1J2wJAJVO0k+diTIW5RiZAqu/WZ5ti69TnqdhBRu8tl2649P/t7PuY1Vj7mgwZLrTLZMSZe54+X8ECQMHSwWnbIY0ITzJqqsqkOA+HJP27WY2Q1ycNwAlm5bnTcg+WcR+6Icz2U7t2n1vWaGeXl8f/M+SjbVJuaSYjDJ390hsuqrC58E5+1sPsDI3fEw8OiL1JHmv1SI6SK6smku8W78L6cdVhM9djh2RbBnKHleDXrIVRUYahvFR6wbP+ZwZrSzAzJFFe+CuzkTt7T6tMmvOTjyNV7KWs9WM32qZPQA0ayVyAXMPGdI0dsZ0BBJNv0YRg0EsitW896+5rsLXZZd4uOjNND6Q4sm187yGt4Iq64Q4ccG8OE8i6JDLtoJOK2tF2TAdd41TcWZ0G0pE9KRBDtLue6bseuZ8eNd87ihMG04Qp1eqtJPFdabjCrRm/SRLTl37VelP/efpobrheiCpB7PIhZnXnH2QnPMSLHuCgob4p+mDJWF4WgImtDmYyvunW90Sb1VdFfeFXEwrQC/eC82KccV8/sq+CuL0TuZEHEyB6cggqdX6ve1vpcmgSLOyaI/opDcT9QQE/BWQuXkC8YRaiiebzjimoTtX5YknX07vappOjv6XD0CF4gh83pQUn2kKFtDeu9kcJjtA0j2bqu9PcE5UnxqljX5ecDJZ+nJGUOrlt2oscxT5J2l/t1OtZaoyAW1/cIGZTFYpBGqDg8If4NJlrSae23o5GhaMX7IVir6S8HltQdlcSf6iohodX/kk2BMksTfqNJ5cyfjqGbnsuNx2VvuajzkRNcjsQwjVMcz9fDYNXBdD1zf7ie+pStrh6vXRUHdB/n/q7Wkg/7wGU+TnMaBKMlxvnD6G79KYg5bkDiJ0S6j6HIo46c1Qb5i3xLcEVwNA9Wom8BU1Go1EPPhk1cQ95evO9U69A1pTw4H2eliPN0r3zyi6Ff9TRVFEviGc+kcesC+866NathsUx3ELcnOQa8pgb+WI6RP350r1SVYhisjMLP/N/rzy+vhUGSl8x5TiiHRV4CQdJm+KwLEVsX9+FCyq8XDuI3pfm/HgK0tL9qVcinRJ47bNqsKsyHg7hDxuEI8e9Bq5KqbRWSZMDIJbVT5T/oMnkV2PtHWo05r62woLVKua+utSAsh0cZN2q+lbU9BTKalrBy6a3NeG+A56jme7ghUVm/I74IBPvxyt2ZlVBWNKx1OVe73YYrnHJrFVr7OaK0fQPKTvuPBJS4dL2umerWgJCbU4X0nbi/1zagW7XhjPHM2Gpk3ocLWgrq7gIUXHBK+Sp/P4loNpaF1HPwopctkgPm95aAWul5PY5kTThDetGDk4TIAXq7bVIhBwl+IwUneKQzguiCQBcPPFAWWIdbuKEXCGjcJgfBnIOfkCC0ppRZadMBGzw/1jFx7Vh0PowbqJEhlSVcOPs8UzC+cIoU5LRdQ92W7+tNOJ07d9RnaC1OfFySydwtVUIEEZqZHME2liW6JbiaRs7fLms3r4WF1OhfWmGpMzbKaGzAB8lcbeOCpvTSKcWDggoymMT9YTu+qDz2reZ7/DDjXvnU9uJR2VwzYN0WFPsj8imK9wA+XvN9IZ3ZegaIfYyQ6y2cb8wkD+nfFTNhibgkNB6ZKQ1NTt5S0MEgSNzmVLd5X7lCod+gxCt7fwbok5d1LGKYeRctoVwzIHfTyVgOFzOQc1NToMwvSmFmP77rKVBS7a9UerUxU2J1AQNp2VfHzLNY7dDdG/TulWcUKOtxtltVa5hWXHV8xROjmzW4TUm1Ea2BoVrwAX079ArIPvfn8bWh1M+Y1s26Px05O44TlVm3bri3ayTo6MVlpl2gRmf1RneqRqwurJyEz83CKXFdgzsVentnQYkoXeDk5I1Xstrv5FoEwlGYWQ7i6amNlVQronKLTSgqWwbQroo5b0hz4yHMMumVYUHn1obAGkaxD/s3qEw36P5MyjiibSO8L5w6Kn9M2IZl5wtG8QP59LnlYHCWBmuFFQNfIxDlYpMKYF7xZkkg/I2D0qQK1KoHtOw49vzKhJLkPcX7jkWXiM+DSzDXK6g7ODEpO9VK3MjZxIo30lVm1cqWoF13KNvBxrVLH4+6URd1UnCnqnJ1LM68Xi0pKkNuyixzqyEEPawqu1vdl9sswLEQry6YKAqcL6clfYnuhWhHO8+q/oygowlzcSeK69JRUvUmgjuw0FoOrjrcMKh+e3WsF4w/0SDpA4KDScV0mQuLP5OnS3wW9QBBe2qq8XAgNjbtT5SvTx7gDjHwcVBj3tHxw3KwWcRFlSLkBxLemZDqapPDpVZAv4fgqGfG72c+HHfmeNYbRQ600yNloOu2G81vSq5z6CETz8RGD7RWD5TSgFCEMiDTLCqvRpx45/2nogw3an3rapDcifOm7cIF/RlfZ2/FPP1FN/YQ+qD2QFHieYQR/MYqhzDoWP6rNGhdrXy82q/eo/g5PNMeLE9eiwpIMmF321YCFYeOsNeNjp3o96d6RoYSMYIMPTCq8M4LZfQ/J4I4/8ppvmb4dIWPAjL2lDD9j7JGPjfwUhT8BLdbxYRy3zR1ZjjqDD7i65pZJf0OeY/eY9JvbIaeektcZnNVyDZy5zb9QQmqsqJITgvdnTOTfu1OrLa8z4M4j6nBDMVsvvmFRpUVxUicjhVEj2nU8rKbG+tOJlAVxSrivnKEGeY1o10SR2Ci0tUzfclwTNHd0YfTQAVMgRfgdkgRzbm6nYtNvGhVyC/D59zm1/3UhXcsWg2HpMKFDjYuh9v9lfOJNcLuTlzTd/WN/6MZSKONQA1uOf6lPTk/XmkGcu/1zGlyTLXmTHx54UKnXWkvm9nHmMaMiuFiJD8BQW6gWsVT2iSHOBa9rDuiNk8317/qIImg9MYZnY8HwqUQwwvAseaSUMnHJozS+5QbaCDYeVt8rLjdXCcu7XeFH1KuzP5QoxEDJ/K3GMvlALlbKHw4wEUUPHg4F43Q6iMMjtnuXNOBUdlEZV4bTiAeq7GrphRDVLgY6qYlEenQ/koBVYGkwuzeQMMa1IVaZHU5cgf2WrAo6TXceH+dgIwlgQwAP2R7vEp/Jk/XtcGKHiDgzs8p/uhEzW81KLgTYTXQQftWmxw0ZNjhzCkC2HTAE4Dd0fSF1J1Q86p5vljz3LFsnW1sf8XZlNDdUEoXNxuDMPfOp2aOr+Y0ewN//B+XTC3rwM0QM+cd8dV/kdwS3pyVMVDc4CPGbNuoB+5oJJ/H3Hwu+YtCx8aDKgnK+kTFKA/+EHPkPKKAYBJy85zJJHzZvlccKLpbje17vzuDA4KOHbTpWGuCFYc+xlZjH2MEQmUNFwprqQTdyRBm6gdFc87VYHEpxLxD47r/b6zGJjem7No88uXPpqDj7npP7rJ7TpECuLE/aPBHLqXX8uAWtWnhGkjDBg5SZrdjjGBHgXChWaacZpwvCPsdcuN4ldXHqBRFW3Tm0Pnw/wNhF9CY8q8prWxBSBMf0tCjPZUBNGKk3wkjvuoBEUfAZTFU85FSiSSlkEd5iBXhq/o2w/+6JPo35VwztKTRRoz2N/j/KRoazJZjfffRU9BaZmFRlOBCIVr517bzqe3Djm1JMzaw6CBLGsXICdnJLPSbi0IOT7RA9TvEt+O7AylU1v5Ko3jiz7zPa+hwo5YhYmhw+OtxI0aMWOt6cH59hItPGf0pv7D5RkyG5gddtg7X71GmjsaYD3eiOuZKt47G+dTBMIlUOoRmGti0+umDEzgCpCWy0VrCiVA93IUlSGmlAyQQg22UpNrJcTehq+BgTqp/o8xqfDNpSeTu7eVfT7OmFK7bhvRAoVxHx0T3bGpCKZG4OY5dXMosPvW4RAY5OXgNhNInHwCTen8AAAAA') format('woff2'),
+ url('//at.alicdn.com/t/c/font_3063751_pd5m6puw4p.woff?t=1701183381697') format('woff'),
+ url('//at.alicdn.com/t/c/font_3063751_pd5m6puw4p.ttf?t=1701183381697') format('truetype');
+}
+
+[class*='tn-icon-'] {
+ font-family: 'tuniaoFont' !important;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ text-align: center;
+ text-decoration: none;
+}
+
+.tn-icon-left-circle-simple:before {
+ content: "\ea38";
+}
+
+.tn-icon-left-circle-simple-fill:before {
+ content: "\ea39";
+}
+
+.tn-icon-down-circle-simple:before {
+ content: "\ea3a";
+}
+
+.tn-icon-down-circle-simple-fill:before {
+ content: "\ea3b";
+}
+
+.tn-icon-right-circle-simple-fill:before {
+ content: "\ea3c";
+}
+
+.tn-icon-right-circle-simple:before {
+ content: "\ea3d";
+}
+
+.tn-icon-up-circle-simple:before {
+ content: "\ea3e";
+}
+
+.tn-icon-up-circle-simple-fill:before {
+ content: "\ea3f";
+}
+
+.tn-icon-my-love:before {
+ content: "\ea35";
+}
+
+.tn-icon-address-fill:before {
+ content: "\ea36";
+}
+
+.tn-icon-address:before {
+ content: "\ea37";
+}
+
+.tn-icon-like-lack-fill:before {
+ content: "\ea32";
+}
+
+.tn-icon-oa:before {
+ content: "\ea33";
+}
+
+.tn-icon-like-break-fill:before {
+ content: "\ea34";
+}
+
+.tn-icon-signal:before {
+ content: "\ea2e";
+}
+
+.tn-icon-help-question:before {
+ content: "\ea2f";
+}
+
+.tn-icon-radioactivity:before {
+ content: "\ea30";
+}
+
+.tn-icon-signal-no:before {
+ content: "\ea31";
+}
+
+.tn-icon-dice-face:before {
+ content: "\ea2d";
+}
+
+.tn-icon-vip-diamond:before {
+ content: "\e9c9";
+}
+
+.tn-icon-video-square:before {
+ content: "\e9ca";
+}
+
+.tn-icon-vip-diamond-fill:before {
+ content: "\ea29";
+}
+
+.tn-icon-vr:before {
+ content: "\ea2a";
+}
+
+.tn-icon-vr-fill:before {
+ content: "\ea2b";
+}
+
+.tn-icon-video-square-fill:before {
+ content: "\ea2c";
+}
+
+.tn-icon-arrivals:before {
+ content: "\ea27";
+}
+
+.tn-icon-departures:before {
+ content: "\ea28";
+}
+
+.tn-icon-parking:before {
+ content: "\ea26";
+}
+
+.tn-icon-fireworks:before {
+ content: "\ea25";
+}
+
+.tn-icon-cloud-fill:before {
+ content: "\ea23";
+}
+
+.tn-icon-cloud:before {
+ content: "\ea24";
+}
+
+.tn-icon-snowflake:before {
+ content: "\e949";
+}
+
+.tn-icon-prohibit:before {
+ content: "\ea22";
+}
+
+.tn-icon-honeycomb-fill:before {
+ content: "\ea20";
+}
+
+.tn-icon-honeycomb:before {
+ content: "\ea21";
+}
+
+.tn-icon-starry:before {
+ content: "\ea1e";
+}
+
+.tn-icon-vscode:before {
+ content: "\ea1f";
+}
+
+.tn-icon-tips-fill:before {
+ content: "\ea1b";
+}
+
+.tn-icon-tip:before {
+ content: "\ea1c";
+}
+
+.tn-icon-tips:before {
+ content: "\ea1d";
+}
+
+.tn-icon-write-feather-fill:before {
+ content: "\ea19";
+}
+
+.tn-icon-write-feather:before {
+ content: "\ea1a";
+}
+
+.tn-icon-eat:before {
+ content: "\e98b";
+}
+
+.tn-icon-eat-fill:before {
+ content: "\e98c";
+}
+
+.tn-icon-eat-west:before {
+ content: "\ea0f";
+}
+
+.tn-icon-eat-west-fill:before {
+ content: "\ea10";
+}
+
+.tn-icon-eat-other:before {
+ content: "\ea11";
+}
+
+.tn-icon-eat-other-fill:before {
+ content: "\ea12";
+}
+
+.tn-icon-food-fill:before {
+ content: "\ea13";
+}
+
+.tn-icon-food:before {
+ content: "\ea14";
+}
+
+.tn-icon-folder-reduce:before {
+ content: "\ea15";
+}
+
+.tn-icon-folder-add-fill:before {
+ content: "\ea16";
+}
+
+.tn-icon-folder-reduce-fill:before {
+ content: "\ea17";
+}
+
+.tn-icon-folder-add:before {
+ content: "\ea18";
+}
+
+.tn-icon-fold:before {
+ content: "\ea0d";
+}
+
+.tn-icon-unfold:before {
+ content: "\ea0e";
+}
+
+.tn-icon-refresh-simple:before {
+ content: "\ea0c";
+}
+
+.tn-icon-assign-fill:before {
+ content: "\ea0a";
+}
+
+.tn-icon-assign:before {
+ content: "\ea0b";
+}
+
+.tn-icon-praise-simple:before {
+ content: "\ea06";
+}
+
+.tn-icon-praise-simple-fill:before {
+ content: "\ea07";
+}
+
+.tn-icon-tread-simple-fill:before {
+ content: "\ea08";
+}
+
+.tn-icon-tread-simple:before {
+ content: "\ea09";
+}
+
+.tn-icon-fish:before {
+ content: "\ea05";
+}
+
+.tn-icon-pushpin-fill:before {
+ content: "\ea03";
+}
+
+.tn-icon-pushpin:before {
+ content: "\ea04";
+}
+
+.tn-icon-equal:before {
+ content: "\ea00";
+}
+
+.tn-icon-equal-fill:before {
+ content: "\ea01";
+}
+
+.tn-icon-totop-simple:before {
+ content: "\ea02";
+}
+
+.tn-icon-floral-fill:before {
+ content: "\e9fe";
+}
+
+.tn-icon-floral:before {
+ content: "\e9ff";
+}
+
+.tn-icon-my-job:before {
+ content: "\e9f9";
+}
+
+.tn-icon-my-job-fill:before {
+ content: "\e9fa";
+}
+
+.tn-icon-my-formal:before {
+ content: "\e9fb";
+}
+
+.tn-icon-my-formal-fill:before {
+ content: "\e9fc";
+}
+
+.tn-icon-history:before {
+ content: "\e9fd";
+}
+
+.tn-icon-seafox:before {
+ content: "\e9f8";
+}
+
+.tn-icon-norm-fill:before {
+ content: "\e9f6";
+}
+
+.tn-icon-norm:before {
+ content: "\e9f7";
+}
+
+.tn-icon-cargoship:before {
+ content: "\e9f5";
+}
+
+.tn-icon-menu-grille-fill:before {
+ content: "\e9f3";
+}
+
+.tn-icon-menu-grille:before {
+ content: "\e9f4";
+}
+
+.tn-icon-piggy-bank:before {
+ content: "\e9ef";
+}
+
+.tn-icon-skull-fill:before {
+ content: "\e9f0";
+}
+
+.tn-icon-skull:before {
+ content: "\e9f1";
+}
+
+.tn-icon-piggy-bank-fill:before {
+ content: "\e9f2";
+}
+
+.tn-icon-next-song:before {
+ content: "\e9eb";
+}
+
+.tn-icon-previous-song:before {
+ content: "\e9ec";
+}
+
+.tn-icon-previous-song-fill:before {
+ content: "\e9ed";
+}
+
+.tn-icon-next-song-fill:before {
+ content: "\e9ee";
+}
+
+.tn-icon-ai:before {
+ content: "\e9e9";
+}
+
+.tn-icon-ai-fill:before {
+ content: "\e9ea";
+}
+
+.tn-icon-headset-fill:before {
+ content: "\e9e8";
+}
+
+.tn-icon-reduce-rhombus-fill:before {
+ content: "\e9e6";
+}
+
+.tn-icon-reduce-rhombus:before {
+ content: "\e9e7";
+}
+
+.tn-icon-umbrella-fill:before {
+ content: "\e9a1";
+}
+
+.tn-icon-footprint-fill:before {
+ content: "\e992";
+}
+
+.tn-icon-folder:before {
+ content: "\e9df";
+}
+
+.tn-icon-folder-fill:before {
+ content: "\e9e0";
+}
+
+.tn-icon-folder-download-fill:before {
+ content: "\e9e1";
+}
+
+.tn-icon-pyramid:before {
+ content: "\e9e2";
+}
+
+.tn-icon-folder-upload:before {
+ content: "\e9e3";
+}
+
+.tn-icon-folder-download:before {
+ content: "\e9e4";
+}
+
+.tn-icon-folder-upload-fill:before {
+ content: "\e9e5";
+}
+
+.tn-icon-hotspot:before {
+ content: "\e9dc";
+}
+
+.tn-icon-router:before {
+ content: "\e9dd";
+}
+
+.tn-icon-router-fill:before {
+ content: "\e9de";
+}
+
+.tn-icon-menu-rhombus:before {
+ content: "\e9da";
+}
+
+.tn-icon-menu-rhombus-fill:before {
+ content: "\e9db";
+}
+
+.tn-icon-plane-fill:before {
+ content: "\e9d8";
+}
+
+.tn-icon-plane:before {
+ content: "\e9d9";
+}
+
+.tn-icon-spiral:before {
+ content: "\e9d2";
+}
+
+.tn-icon-lotus:before {
+ content: "\e9d3";
+}
+
+.tn-icon-koi:before {
+ content: "\e9d4";
+}
+
+.tn-icon-koi-fill:before {
+ content: "\e9d5";
+}
+
+.tn-icon-add-rhombus-fill:before {
+ content: "\e9d6";
+}
+
+.tn-icon-add-rhombus:before {
+ content: "\e9d7";
+}
+
+.tn-icon-bookmark:before {
+ content: "\e9ce";
+}
+
+.tn-icon-bookmark-fill:before {
+ content: "\e9cf";
+}
+
+.tn-icon-refresh:before {
+ content: "\e9d0";
+}
+
+.tn-icon-refresh-square:before {
+ content: "\e9d1";
+}
+
+.tn-icon-tread-fill:before {
+ content: "\e9cb";
+}
+
+.tn-icon-audio:before {
+ content: "\e9cc";
+}
+
+.tn-icon-tread:before {
+ content: "\e9cd";
+}
+
+.tn-icon-play:before {
+ content: "\e9c8";
+}
+
+.tn-icon-inventory-fill:before {
+ content: "\e9c3";
+}
+
+.tn-icon-percent-fill:before {
+ content: "\e9c4";
+}
+
+.tn-icon-percent:before {
+ content: "\e9c5";
+}
+
+.tn-icon-inventory:before {
+ content: "\e9c6";
+}
+
+.tn-icon-activity:before {
+ content: "\e9c7";
+}
+
+.tn-icon-qr-code-circle:before {
+ content: "\e9c2";
+}
+
+.tn-icon-task-fill:before {
+ content: "\e9c0";
+}
+
+.tn-icon-task:before {
+ content: "\e9c1";
+}
+
+.tn-icon-text-best:before {
+ content: "\e9be";
+}
+
+.tn-icon-text-free:before {
+ content: "\e9bf";
+}
+
+.tn-icon-text-zgs:before {
+ content: "\e8ff";
+}
+
+.tn-icon-text-xzx:before {
+ content: "\e9ba";
+}
+
+.tn-icon-text-like:before {
+ content: "\e9bb";
+}
+
+.tn-icon-text-sale:before {
+ content: "\e9bc";
+}
+
+.tn-icon-text-hot:before {
+ content: "\e9bd";
+}
+
+.tn-icon-home-leaf:before {
+ content: "\e9b8";
+}
+
+.tn-icon-home-leaf-fill:before {
+ content: "\e9b9";
+}
+
+.tn-icon-service-simple-fill:before {
+ content: "\e9b6";
+}
+
+.tn-icon-service-simple:before {
+ content: "\e9b7";
+}
+
+.tn-icon-meteor-fill:before {
+ content: "\e9b4";
+}
+
+.tn-icon-meteor:before {
+ content: "\e9b5";
+}
+
+.tn-icon-dice-five:before {
+ content: "\e9ae";
+}
+
+.tn-icon-dice-one:before {
+ content: "\e9af";
+}
+
+.tn-icon-dice-three:before {
+ content: "\e9b0";
+}
+
+.tn-icon-dice-six:before {
+ content: "\e9b1";
+}
+
+.tn-icon-dice-four:before {
+ content: "\e9b2";
+}
+
+.tn-icon-dice-two:before {
+ content: "\e9b3";
+}
+
+.tn-icon-theme-fill:before {
+ content: "\e938";
+}
+
+.tn-icon-theme:before {
+ content: "\e9ad";
+}
+
+.tn-icon-download-simple:before {
+ content: "\e9ab";
+}
+
+.tn-icon-upload-simple:before {
+ content: "\e9ac";
+}
+
+.tn-icon-on:before {
+ content: "\e9a9";
+}
+
+.tn-icon-off:before {
+ content: "\e9aa";
+}
+
+.tn-icon-my-circle:before {
+ content: "\e9a7";
+}
+
+.tn-icon-my-circle-fill:before {
+ content: "\e9a8";
+}
+
+.tn-icon-temperature-f:before {
+ content: "\e9a5";
+}
+
+.tn-icon-temperature-c:before {
+ content: "\e9a6";
+}
+
+.tn-icon-sunrise:before {
+ content: "\e9a3";
+}
+
+.tn-icon-sunset:before {
+ content: "\e9a4";
+}
+
+.tn-icon-password:before {
+ content: "\e9a0";
+}
+
+.tn-icon-umbrella:before {
+ content: "\e9a2";
+}
+
+.tn-icon-unite:before {
+ content: "\e999";
+}
+
+.tn-icon-unite-fill:before {
+ content: "\e99a";
+}
+
+.tn-icon-global:before {
+ content: "\e99b";
+}
+
+.tn-icon-reload-home:before {
+ content: "\e99c";
+}
+
+.tn-icon-reload-planet:before {
+ content: "\e99d";
+}
+
+.tn-icon-reload-home-fill:before {
+ content: "\e99e";
+}
+
+.tn-icon-reload-planet-fill:before {
+ content: "\e99f";
+}
+
+.tn-icon-route:before {
+ content: "\e997";
+}
+
+.tn-icon-route-fill:before {
+ content: "\e998";
+}
+
+.tn-icon-my-simple-fill:before {
+ content: "\e98e";
+}
+
+.tn-icon-my-simple:before {
+ content: "\e98f";
+}
+
+.tn-icon-around-fill:before {
+ content: "\e990";
+}
+
+.tn-icon-around:before {
+ content: "\e991";
+}
+
+.tn-icon-footprint:before {
+ content: "\e993";
+}
+
+.tn-icon-my-lack-fill:before {
+ content: "\e994";
+}
+
+.tn-icon-my-lack:before {
+ content: "\e995";
+}
+
+.tn-icon-bigscreen:before {
+ content: "\e996";
+}
+
+.tn-icon-escalator:before {
+ content: "\e98d";
+}
+
+.tn-icon-suitcase:before {
+ content: "\e989";
+}
+
+.tn-icon-suitcase-fill:before {
+ content: "\e98a";
+}
+
+.tn-icon-add-square-fill:before {
+ content: "\e904";
+}
+
+.tn-icon-cute:before {
+ content: "\e988";
+}
+
+.tn-icon-compress:before {
+ content: "\e96e";
+}
+
+.tn-icon-expend:before {
+ content: "\e96f";
+}
+
+.tn-icon-windows:before {
+ content: "\e970";
+}
+
+.tn-icon-trademark:before {
+ content: "\e971";
+}
+
+.tn-icon-tailor:before {
+ content: "\e972";
+}
+
+.tn-icon-move:before {
+ content: "\e973";
+}
+
+.tn-icon-pillow:before {
+ content: "\e974";
+}
+
+.tn-icon-bathtub:before {
+ content: "\e975";
+}
+
+.tn-icon-buy:before {
+ content: "\e976";
+}
+
+.tn-icon-buy-fill:before {
+ content: "\e977";
+}
+
+.tn-icon-allday:before {
+ content: "\e978";
+}
+
+.tn-icon-home-love-fill:before {
+ content: "\e979";
+}
+
+.tn-icon-home-love:before {
+ content: "\e97a";
+}
+
+.tn-icon-gesture-two:before {
+ content: "\e97b";
+}
+
+.tn-icon-gesture-four:before {
+ content: "\e97c";
+}
+
+.tn-icon-gesture-five:before {
+ content: "\e97d";
+}
+
+.tn-icon-gesture-one:before {
+ content: "\e97e";
+}
+
+.tn-icon-gesture-three:before {
+ content: "\e97f";
+}
+
+.tn-icon-gesture-dropdown:before {
+ content: "\e980";
+}
+
+.tn-icon-plant-fill:before {
+ content: "\e981";
+}
+
+.tn-icon-plant:before {
+ content: "\e982";
+}
+
+.tn-icon-pillow-fill:before {
+ content: "\e983";
+}
+
+.tn-icon-bathtub-fill:before {
+ content: "\e984";
+}
+
+.tn-icon-wheelchair:before {
+ content: "\e985";
+}
+
+.tn-icon-narrow-all:before {
+ content: "\e986";
+}
+
+.tn-icon-fullscreen-all:before {
+ content: "\e987";
+}
+
+.tn-icon-close-square-fill:before {
+ content: "\e945";
+}
+
+.tn-icon-add-square:before {
+ content: "\e962";
+}
+
+.tn-icon-close-square:before {
+ content: "\e963";
+}
+
+.tn-icon-my-reduce:before {
+ content: "\e964";
+}
+
+.tn-icon-square-fill:before {
+ content: "\e965";
+}
+
+.tn-icon-pay-fill:before {
+ content: "\e966";
+}
+
+.tn-icon-commissary:before {
+ content: "\e967";
+}
+
+.tn-icon-commissary-fill:before {
+ content: "\e968";
+}
+
+.tn-icon-notice-no-fill:before {
+ content: "\e969";
+}
+
+.tn-icon-cross-fill:before {
+ content: "\e96a";
+}
+
+.tn-icon-nintendo-switch:before {
+ content: "\e96b";
+}
+
+.tn-icon-mammoth:before {
+ content: "\e96c";
+}
+
+.tn-icon-open:before {
+ content: "\e96d";
+}
+
+.tn-icon-bed-fill:before {
+ content: "\e916";
+}
+
+.tn-icon-bed:before {
+ content: "\e961";
+}
+
+.tn-icon-menu-flex-fill:before {
+ content: "\e956";
+}
+
+.tn-icon-menu-flex:before {
+ content: "\e957";
+}
+
+.tn-icon-logistics-fill:before {
+ content: "\e958";
+}
+
+.tn-icon-ghost-fill:before {
+ content: "\e959";
+}
+
+.tn-icon-keyboard-circle-fill:before {
+ content: "\e95a";
+}
+
+.tn-icon-brand-fill:before {
+ content: "\e95b";
+}
+
+.tn-icon-clear-fill:before {
+ content: "\e95c";
+}
+
+.tn-icon-mouse-fill:before {
+ content: "\e95d";
+}
+
+.tn-icon-brand:before {
+ content: "\e95e";
+}
+
+.tn-icon-monitor-fill:before {
+ content: "\e95f";
+}
+
+.tn-icon-covid-19-fill:before {
+ content: "\e960";
+}
+
+.tn-icon-install-fill:before {
+ content: "\e936";
+}
+
+.tn-icon-install:before {
+ content: "\e955";
+}
+
+.tn-icon-restroom-female:before {
+ content: "\e953";
+}
+
+.tn-icon-restroom-male:before {
+ content: "\e954";
+}
+
+.tn-icon-first:before {
+ content: "\e950";
+}
+
+.tn-icon-third:before {
+ content: "\e951";
+}
+
+.tn-icon-second:before {
+ content: "\e952";
+}
+
+.tn-icon-ninja:before {
+ content: "\e94b";
+}
+
+.tn-icon-program:before {
+ content: "\e94c";
+}
+
+.tn-icon-program-fill:before {
+ content: "\e94d";
+}
+
+.tn-icon-circle-more:before {
+ content: "\e94e";
+}
+
+.tn-icon-windmill:before {
+ content: "\e94f";
+}
+
+.tn-icon-alien:before {
+ content: "\e946";
+}
+
+.tn-icon-taichi:before {
+ content: "\e947";
+}
+
+.tn-icon-knot:before {
+ content: "\e948";
+}
+
+.tn-icon-whale:before {
+ content: "\e94a";
+}
+
+.tn-icon-dragon:before {
+ content: "\e944";
+}
+
+.tn-icon-home-in-fill:before {
+ content: "\e942";
+}
+
+.tn-icon-home-in:before {
+ content: "\e943";
+}
+
+.tn-icon-home-loading:before {
+ content: "\e940";
+}
+
+.tn-icon-home-loading-fill:before {
+ content: "\e941";
+}
+
+.tn-icon-cell:before {
+ content: "\e93b";
+}
+
+.tn-icon-loading:before {
+ content: "\e93c";
+}
+
+.tn-icon-orange:before {
+ content: "\e93d";
+}
+
+.tn-icon-bigbug:before {
+ content: "\e93e";
+}
+
+.tn-icon-dinosaur:before {
+ content: "\e93f";
+}
+
+.tn-icon-dna:before {
+ content: "\e931";
+}
+
+.tn-icon-chain:before {
+ content: "\e932";
+}
+
+.tn-icon-email:before {
+ content: "\e933";
+}
+
+.tn-icon-education:before {
+ content: "\e934";
+}
+
+.tn-icon-english:before {
+ content: "\e935";
+}
+
+.tn-icon-seal:before {
+ content: "\e937";
+}
+
+.tn-icon-book:before {
+ content: "\e939";
+}
+
+.tn-icon-email-fill:before {
+ content: "\e93a";
+}
+
+.tn-icon-maths:before {
+ content: "\e92f";
+}
+
+.tn-icon-molecule:before {
+ content: "\e930";
+}
+
+.tn-icon-ghost:before {
+ content: "\e92d";
+}
+
+.tn-icon-money-fill:before {
+ content: "\e92e";
+}
+
+.tn-icon-menu-alone:before {
+ content: "\e929";
+}
+
+.tn-icon-menu-alone-fill:before {
+ content: "\e92a";
+}
+
+.tn-icon-tree:before {
+ content: "\e92b";
+}
+
+.tn-icon-rabbit:before {
+ content: "\e92c";
+}
+
+.tn-icon-block-fill:before {
+ content: "\e925";
+}
+
+.tn-icon-block:before {
+ content: "\e926";
+}
+
+.tn-icon-menu-classify:before {
+ content: "\e927";
+}
+
+.tn-icon-menu-classify-fill:before {
+ content: "\e928";
+}
+
+.tn-icon-home-totop-fill:before {
+ content: "\e923";
+}
+
+.tn-icon-home-totop:before {
+ content: "\e924";
+}
+
+.tn-icon-petal:before {
+ content: "\e920";
+}
+
+.tn-icon-clover-fill:before {
+ content: "\e921";
+}
+
+.tn-icon-clover:before {
+ content: "\e922";
+}
+
+.tn-icon-heartbeat:before {
+ content: "\e917";
+}
+
+.tn-icon-paperbag:before {
+ content: "\e918";
+}
+
+.tn-icon-paperbag-fill:before {
+ content: "\e919";
+}
+
+.tn-icon-menu-match:before {
+ content: "\e91a";
+}
+
+.tn-icon-menu-match-fill:before {
+ content: "\e91b";
+}
+
+.tn-icon-sofa-fill:before {
+ content: "\e91c";
+}
+
+.tn-icon-fullscreen:before {
+ content: "\e91d";
+}
+
+.tn-icon-narrow:before {
+ content: "\e91e";
+}
+
+.tn-icon-smallscreen:before {
+ content: "\e91f";
+}
+
+.tn-icon-payment-wechat:before {
+ content: "\e90a";
+}
+
+.tn-icon-cursor:before {
+ content: "\e912";
+}
+
+.tn-icon-cursor-fill:before {
+ content: "\e913";
+}
+
+.tn-icon-check:before {
+ content: "\e914";
+}
+
+.tn-icon-payment-alipay:before {
+ content: "\e915";
+}
+
+.tn-icon-dashboard:before {
+ content: "\e90b";
+}
+
+.tn-icon-module:before {
+ content: "\e90c";
+}
+
+.tn-icon-at-sign:before {
+ content: "\e90d";
+}
+
+.tn-icon-copyright:before {
+ content: "\e90e";
+}
+
+.tn-icon-pin:before {
+ content: "\e90f";
+}
+
+.tn-icon-module-fill:before {
+ content: "\e910";
+}
+
+.tn-icon-dashboard-fill:before {
+ content: "\e911";
+}
+
+.tn-icon-birthday:before {
+ content: "\e905";
+}
+
+.tn-icon-sofa:before {
+ content: "\e906";
+}
+
+.tn-icon-iot:before {
+ content: "\e907";
+}
+
+.tn-icon-monitor:before {
+ content: "\e908";
+}
+
+.tn-icon-iot-fill:before {
+ content: "\e909";
+}
+
+.tn-icon-tabs-smile:before {
+ content: "\e900";
+}
+
+.tn-icon-huawei:before {
+ content: "\e901";
+}
+
+.tn-icon-iphone:before {
+ content: "\e902";
+}
+
+.tn-icon-tiktok:before {
+ content: "\e903";
+}
+
+.tn-icon-sword-fill:before {
+ content: "\e8fa";
+}
+
+.tn-icon-job-fill:before {
+ content: "\e8fb";
+}
+
+.tn-icon-rocket-fill:before {
+ content: "\e8fc";
+}
+
+.tn-icon-totop:before {
+ content: "\e8fd";
+}
+
+.tn-icon-totop-fill:before {
+ content: "\e8fe";
+}
+
+.tn-icon-logout:before {
+ content: "\e8f8";
+}
+
+.tn-icon-login:before {
+ content: "\e8f9";
+}
+
+.tn-icon-expand:before {
+ content: "\e8f7";
+}
+
+.tn-icon-bug:before {
+ content: "\e8e3";
+}
+
+.tn-icon-bug-fill:before {
+ content: "\e8e4";
+}
+
+.tn-icon-company-fill:before {
+ content: "\e8e5";
+}
+
+.tn-icon-edit-write-fill:before {
+ content: "\e8e6";
+}
+
+.tn-icon-menu-circle-fill:before {
+ content: "\e8e7";
+}
+
+.tn-icon-level-fill:before {
+ content: "\e8e8";
+}
+
+.tn-icon-menu-fill:before {
+ content: "\e8e9";
+}
+
+.tn-icon-science-fill:before {
+ content: "\e8ea";
+}
+
+.tn-icon-deploy-fill:before {
+ content: "\e8eb";
+}
+
+.tn-icon-menu-more-fill:before {
+ content: "\e8ec";
+}
+
+.tn-icon-search-menu-fill:before {
+ content: "\e8ed";
+}
+
+.tn-icon-organizatio-fill:before {
+ content: "\e8ee";
+}
+
+.tn-icon-platform-fill:before {
+ content: "\e8ef";
+}
+
+.tn-icon-platform:before {
+ content: "\e8f0";
+}
+
+.tn-icon-search-list-fill:before {
+ content: "\e8f1";
+}
+
+.tn-icon-menu-sort-fill:before {
+ content: "\e8f2";
+}
+
+.tn-icon-cube-fill:before {
+ content: "\e8f3";
+}
+
+.tn-icon-menu-sorts-fill:before {
+ content: "\e8f4";
+}
+
+.tn-icon-server-fill:before {
+ content: "\e8f5";
+}
+
+.tn-icon-menu-list-fill:before {
+ content: "\e8f6";
+}
+
+.tn-icon-errands:before {
+ content: "\e8df";
+}
+
+.tn-icon-errands-fill:before {
+ content: "\e8e0";
+}
+
+.tn-icon-delivery-fill:before {
+ content: "\e8e1";
+}
+
+.tn-icon-delivery:before {
+ content: "\e8e2";
+}
+
+.tn-icon-vip-text:before {
+ content: "\e8dc";
+}
+
+.tn-icon-panda:before {
+ content: "\e8dd";
+}
+
+.tn-icon-logo-shangpu:before {
+ content: "\e8de";
+}
+
+.tn-icon-mouse:before {
+ content: "\e8db";
+}
+
+.tn-icon-notebook-fill:before {
+ content: "\e8da";
+}
+
+.tn-icon-headset:before {
+ content: "\e8d8";
+}
+
+.tn-icon-shears:before {
+ content: "\e8d9";
+}
+
+.tn-icon-notebook:before {
+ content: "\e8d7";
+}
+
+.tn-icon-battery-empty:before {
+ content: "\e8d1";
+}
+
+.tn-icon-battery-low:before {
+ content: "\e8d2";
+}
+
+.tn-icon-battery-mid:before {
+ content: "\e8d3";
+}
+
+.tn-icon-battery-high:before {
+ content: "\e8d4";
+}
+
+.tn-icon-battery-full:before {
+ content: "\e8d5";
+}
+
+.tn-icon-bluetooth:before {
+ content: "\e8d6";
+}
+
+.tn-icon-science:before {
+ content: "\e8cf";
+}
+
+.tn-icon-clip:before {
+ content: "\e8d0";
+}
+
+.tn-icon-con-aquarius:before {
+ content: "\e8c2";
+}
+
+.tn-icon-con-pisces:before {
+ content: "\e8c3";
+}
+
+.tn-icon-con-aries:before {
+ content: "\e8c4";
+}
+
+.tn-icon-con-taurus:before {
+ content: "\e8c5";
+}
+
+.tn-icon-con-gemini:before {
+ content: "\e8c6";
+}
+
+.tn-icon-con-cancer:before {
+ content: "\e8c7";
+}
+
+.tn-icon-con-leo:before {
+ content: "\e8c8";
+}
+
+.tn-icon-con-virgo:before {
+ content: "\e8c9";
+}
+
+.tn-icon-con-libra:before {
+ content: "\e8ca";
+}
+
+.tn-icon-con-scorpio:before {
+ content: "\e8cb";
+}
+
+.tn-icon-con-sagittarius:before {
+ content: "\e8cc";
+}
+
+.tn-icon-con-apricorn:before {
+ content: "\e8cd";
+}
+
+.tn-icon-constellation:before {
+ content: "\e8ce";
+}
+
+.tn-icon-wea-cloud-more:before {
+ content: "\e8b9";
+}
+
+.tn-icon-wea-cloud:before {
+ content: "\e8ba";
+}
+
+.tn-icon-wea-cloud-sun:before {
+ content: "\e8bb";
+}
+
+.tn-icon-wea-rain:before {
+ content: "\e8bc";
+}
+
+.tn-icon-wea-rain-middle:before {
+ content: "\e8bd";
+}
+
+.tn-icon-wea-rain-heavy:before {
+ content: "\e8be";
+}
+
+.tn-icon-wea-snow:before {
+ content: "\e8bf";
+}
+
+.tn-icon-wea-wind:before {
+ content: "\e8c0";
+}
+
+.tn-icon-wea-sun:before {
+ content: "\e8c1";
+}
+
+.tn-icon-empty-data:before {
+ content: "\e8ab";
+}
+
+.tn-icon-empty-message:before {
+ content: "\e8ac";
+}
+
+.tn-icon-empty-cart:before {
+ content: "\e8ad";
+}
+
+.tn-icon-empty-history:before {
+ content: "\e8ae";
+}
+
+.tn-icon-empty-favor:before {
+ content: "\e8af";
+}
+
+.tn-icon-empty-list:before {
+ content: "\e8b0";
+}
+
+.tn-icon-empty-network:before {
+ content: "\e8b1";
+}
+
+.tn-icon-empty-search:before {
+ content: "\e8b2";
+}
+
+.tn-icon-empty-order:before {
+ content: "\e8b3";
+}
+
+.tn-icon-empty-comment:before {
+ content: "\e8b4";
+}
+
+.tn-icon-empty-coupon:before {
+ content: "\e8b5";
+}
+
+.tn-icon-empty-address:before {
+ content: "\e8b6";
+}
+
+.tn-icon-empty-permission:before {
+ content: "\e8b7";
+}
+
+.tn-icon-empty-page:before {
+ content: "\e8b8";
+}
+
+.tn-icon-job:before {
+ content: "\e8aa";
+}
+
+.tn-icon-rocket:before {
+ content: "\e8a5";
+}
+
+.tn-icon-sword:before {
+ content: "\e8a6";
+}
+
+.tn-icon-notice-no:before {
+ content: "\e8a7";
+}
+
+.tn-icon-notice-fill:before {
+ content: "\e8a8";
+}
+
+.tn-icon-notice:before {
+ content: "\e8a9";
+}
+
+.tn-icon-font:before {
+ content: "\e8a4";
+}
+
+.tn-icon-chemistry:before {
+ content: "\e8a3";
+}
+
+.tn-icon-biology:before {
+ content: "\e8a2";
+}
+
+.tn-icon-level:before {
+ content: "\e8a0";
+}
+
+.tn-icon-deploy:before {
+ content: "\e8a1";
+}
+
+.tn-icon-server:before {
+ content: "\e89f";
+}
+
+.tn-icon-cube:before {
+ content: "\e89e";
+}
+
+.tn-icon-organizatio:before {
+ content: "\e89d";
+}
+
+.tn-icon-company:before {
+ content: "\e89c";
+}
+
+.tn-icon-pharmacy:before {
+ content: "\e89b";
+}
+
+.tn-icon-medical:before {
+ content: "\e89a";
+}
+
+.tn-icon-my-add:before {
+ content: "\e898";
+}
+
+.tn-icon-my:before {
+ content: "\e897";
+}
+
+.tn-icon-my-fill:before {
+ content: "\e896";
+}
+
+.tn-icon-trust:before {
+ content: "\e895";
+}
+
+.tn-icon-trust-fill:before {
+ content: "\e894";
+}
+
+.tn-icon-moon:before {
+ content: "\e893";
+}
+
+.tn-icon-moon-fill:before {
+ content: "\e892";
+}
+
+.tn-icon-funds:before {
+ content: "\e891";
+}
+
+.tn-icon-funds-fill:before {
+ content: "\e890";
+}
+
+.tn-icon-signpost:before {
+ content: "\e88f";
+}
+
+.tn-icon-signpost-fill:before {
+ content: "\e88e";
+}
+
+.tn-icon-vip:before {
+ content: "\e88d";
+}
+
+.tn-icon-vip-fill:before {
+ content: "\e88c";
+}
+
+.tn-icon-hardware:before {
+ content: "\e88b";
+}
+
+.tn-icon-hardware-fill:before {
+ content: "\e88a";
+}
+
+.tn-icon-honor:before {
+ content: "\e889";
+}
+
+.tn-icon-honor-fill:before {
+ content: "\e888";
+}
+
+.tn-icon-count:before {
+ content: "\e887";
+}
+
+.tn-icon-count-fill:before {
+ content: "\e886";
+}
+
+.tn-icon-discover-planet:before {
+ content: "\e885";
+}
+
+.tn-icon-discover-planet-fill:before {
+ content: "\e884";
+}
+
+.tn-icon-discover:before {
+ content: "\e883";
+}
+
+.tn-icon-discover-fill:before {
+ content: "\e882";
+}
+
+.tn-icon-home:before {
+ content: "\e881";
+}
+
+.tn-icon-home-fill:before {
+ content: "\e880";
+}
+
+.tn-icon-home-vertical:before {
+ content: "\e87f";
+}
+
+.tn-icon-home-vertical-fill:before {
+ content: "\e87e";
+}
+
+.tn-icon-home-smile:before {
+ content: "\e87d";
+}
+
+.tn-icon-home-smile-fill:before {
+ content: "\e87c";
+}
+
+.tn-icon-home-capsule:before {
+ content: "\e87b";
+}
+
+.tn-icon-home-capsule-fill:before {
+ content: "\e87a";
+}
+
+.tn-icon-focus:before {
+ content: "\e878";
+}
+
+.tn-icon-all:before {
+ content: "\e877";
+}
+
+.tn-icon-assort-fill:before {
+ content: "\e876";
+}
+
+.tn-icon-assort:before {
+ content: "\e875";
+}
+
+.tn-icon-menu-list:before {
+ content: "\e874";
+}
+
+.tn-icon-menu-sorts:before {
+ content: "\e873";
+}
+
+.tn-icon-menu-sort:before {
+ content: "\e872";
+}
+
+.tn-icon-menu-more:before {
+ content: "\e871";
+}
+
+.tn-icon-menu:before {
+ content: "\e870";
+}
+
+.tn-icon-menu-circle:before {
+ content: "\e86f";
+}
+
+.tn-icon-search-menu:before {
+ content: "\e86e";
+}
+
+.tn-icon-search-list:before {
+ content: "\e86d";
+}
+
+.tn-icon-search:before {
+ content: "\e86c";
+}
+
+.tn-icon-link:before {
+ content: "\e86b";
+}
+
+.tn-icon-code:before {
+ content: "\e869";
+}
+
+.tn-icon-computer:before {
+ content: "\e868";
+}
+
+.tn-icon-computer-fill:before {
+ content: "\e867";
+}
+
+.tn-icon-ipad:before {
+ content: "\e866";
+}
+
+.tn-icon-ipad-fill:before {
+ content: "\e865";
+}
+
+.tn-icon-phone:before {
+ content: "\e864";
+}
+
+.tn-icon-phone-fill:before {
+ content: "\e863";
+}
+
+.tn-icon-tel:before {
+ content: "\e862";
+}
+
+.tn-icon-tel-circle-fill:before {
+ content: "\e860";
+}
+
+.tn-icon-tel-circle:before {
+ content: "\e861";
+}
+
+.tn-icon-watercup:before {
+ content: "\e85f";
+}
+
+.tn-icon-gloves-fill:before {
+ content: "\e85d";
+}
+
+.tn-icon-gloves:before {
+ content: "\e85e";
+}
+
+.tn-icon-covid-19:before {
+ content: "\e85c";
+}
+
+.tn-icon-sport-jog:before {
+ content: "\e858";
+}
+
+.tn-icon-sport-run:before {
+ content: "\e859";
+}
+
+.tn-icon-sport-swim:before {
+ content: "\e85a";
+}
+
+.tn-icon-sport-cycle:before {
+ content: "\e85b";
+}
+
+.tn-icon-airplane:before {
+ content: "\e857";
+}
+
+.tn-icon-train:before {
+ content: "\e855";
+}
+
+.tn-icon-steamship:before {
+ content: "\e856";
+}
+
+.tn-icon-bus:before {
+ content: "\e854";
+}
+
+.tn-icon-balancecar:before {
+ content: "\e853";
+}
+
+.tn-icon-electromobile:before {
+ content: "\e852";
+}
+
+.tn-icon-zodiac-zhu:before {
+ content: "\e851";
+}
+
+.tn-icon-zodiac-gou:before {
+ content: "\e850";
+}
+
+.tn-icon-zodiac-ji:before {
+ content: "\e84f";
+}
+
+.tn-icon-zodiac-hou:before {
+ content: "\e84e";
+}
+
+.tn-icon-zodiac-yang:before {
+ content: "\e84d";
+}
+
+.tn-icon-zodiac-ma:before {
+ content: "\e84c";
+}
+
+.tn-icon-zodiac-she:before {
+ content: "\e84b";
+}
+
+.tn-icon-zodiac-long:before {
+ content: "\e84a";
+}
+
+.tn-icon-zodiac-tu:before {
+ content: "\e849";
+}
+
+.tn-icon-zodiac-hu:before {
+ content: "\e848";
+}
+
+.tn-icon-zodiac-niu:before {
+ content: "\e847";
+}
+
+.tn-icon-zodiac-shu:before {
+ content: "\e846";
+}
+
+.tn-icon-lucky-money:before {
+ content: "\e844";
+}
+
+.tn-icon-lucky-money-fill:before {
+ content: "\e845";
+}
+
+.tn-icon-prize:before {
+ content: "\e842";
+}
+
+.tn-icon-gift:before {
+ content: "\e843";
+}
+
+.tn-icon-pay:before {
+ content: "\e841";
+}
+
+.tn-icon-refund:before {
+ content: "\e840";
+}
+
+.tn-icon-money:before {
+ content: "\e83f";
+}
+
+.tn-icon-power:before {
+ content: "\e83e";
+}
+
+.tn-icon-fingerprint:before {
+ content: "\e83d";
+}
+
+.tn-icon-qr-beibei:before {
+ content: "\e83c";
+}
+
+.tn-icon-qr-code:before {
+ content: "\e83b";
+}
+
+.tn-icon-qr-barcode:before {
+ content: "\e83a";
+}
+
+.tn-icon-scan:before {
+ content: "\e839";
+}
+
+.tn-icon-revoke:before {
+ content: "\e837";
+}
+
+.tn-icon-filter:before {
+ content: "\e838";
+}
+
+.tn-icon-upload:before {
+ content: "\e835";
+}
+
+.tn-icon-download:before {
+ content: "\e836";
+}
+
+.tn-icon-fork:before {
+ content: "\e832";
+}
+
+.tn-icon-relation:before {
+ content: "\e833";
+}
+
+.tn-icon-master:before {
+ content: "\e834";
+}
+
+.tn-icon-facebook:before {
+ content: "\e82e";
+}
+
+.tn-icon-google:before {
+ content: "\e82f";
+}
+
+.tn-icon-linkedin:before {
+ content: "\e830";
+}
+
+.tn-icon-twitter:before {
+ content: "\e831";
+}
+
+.tn-icon-logo-tuniao:before {
+ content: "\e82d";
+}
+
+.tn-icon-sina:before {
+ content: "\e82b";
+}
+
+.tn-icon-taobao:before {
+ content: "\e82c";
+}
+
+.tn-icon-gitee:before {
+ content: "\e82a";
+}
+
+.tn-icon-github:before {
+ content: "\e829";
+}
+
+.tn-icon-dingtalk:before {
+ content: "\e828";
+}
+
+.tn-icon-alipay:before {
+ content: "\e827";
+}
+
+.tn-icon-qq:before {
+ content: "\e826";
+}
+
+.tn-icon-moments:before {
+ content: "\e825";
+}
+
+.tn-icon-wechat:before {
+ content: "\e824";
+}
+
+.tn-icon-wechat-fill:before {
+ content: "\e823";
+}
+
+.tn-icon-service:before {
+ content: "\e821";
+}
+
+.tn-icon-service-fill:before {
+ content: "\e822";
+}
+
+.tn-icon-team:before {
+ content: "\e81f";
+}
+
+.tn-icon-team-fill:before {
+ content: "\e820";
+}
+
+.tn-icon-emoji-sad:before {
+ content: "\e81e";
+}
+
+.tn-icon-emoji-sad-fill:before {
+ content: "\e81d";
+}
+
+.tn-icon-emoji-general:before {
+ content: "\e81b";
+}
+
+.tn-icon-emoji-general-fill:before {
+ content: "\e818";
+}
+
+.tn-icon-emoji-good:before {
+ content: "\e817";
+}
+
+.tn-icon-emoji-good-fill:before {
+ content: "\e816";
+}
+
+.tn-icon-clock:before {
+ content: "\e812";
+}
+
+.tn-icon-clock-fill:before {
+ content: "\e813";
+}
+
+.tn-icon-time-fill:before {
+ content: "\e7d9";
+}
+
+.tn-icon-time:before {
+ content: "\e7dc";
+}
+
+.tn-icon-delete:before {
+ content: "\e7d6";
+}
+
+.tn-icon-delete-fill:before {
+ content: "\e7d7";
+}
+
+.tn-icon-clear:before {
+ content: "\e7d5";
+}
+
+.tn-icon-set:before {
+ content: "\e7d1";
+}
+
+.tn-icon-set-fill:before {
+ content: "\e7d2";
+}
+
+.tn-icon-keyboard-circle:before {
+ content: "\e810";
+}
+
+.tn-icon-keyboard:before {
+ content: "\e811";
+}
+
+.tn-icon-wifi-no:before {
+ content: "\e81c";
+}
+
+.tn-icon-wifi:before {
+ content: "\e7d0";
+}
+
+.tn-icon-creative-stop:before {
+ content: "\e819";
+}
+
+.tn-icon-creative-stop-fill:before {
+ content: "\e81a";
+}
+
+.tn-icon-creative-fill:before {
+ content: "\e80e";
+}
+
+.tn-icon-creative:before {
+ content: "\e80f";
+}
+
+.tn-icon-trophy-fill:before {
+ content: "\e80a";
+}
+
+.tn-icon-trophy:before {
+ content: "\e80b";
+}
+
+.tn-icon-game-fill:before {
+ content: "\e808";
+}
+
+.tn-icon-game:before {
+ content: "\e809";
+}
+
+.tn-icon-tag-fill:before {
+ content: "\e806";
+}
+
+.tn-icon-tag:before {
+ content: "\e807";
+}
+
+.tn-icon-logistics:before {
+ content: "\e7cf";
+}
+
+.tn-icon-taxi-fill:before {
+ content: "\e800";
+}
+
+.tn-icon-taxi:before {
+ content: "\e805";
+}
+
+.tn-icon-flag:before {
+ content: "\e7f5";
+}
+
+.tn-icon-flag-fill:before {
+ content: "\e7ff";
+}
+
+.tn-icon-baby:before {
+ content: "\e7f1";
+}
+
+.tn-icon-baby-fill:before {
+ content: "\e7f4";
+}
+
+.tn-icon-shop:before {
+ content: "\e7cd";
+}
+
+.tn-icon-shop-fill:before {
+ content: "\e7ce";
+}
+
+.tn-icon-coupon-fill:before {
+ content: "\e7c8";
+}
+
+.tn-icon-coupon:before {
+ content: "\e7c9";
+}
+
+.tn-icon-shopbag-fill:before {
+ content: "\e7c6";
+}
+
+.tn-icon-shopbag:before {
+ content: "\e7c7";
+}
+
+.tn-icon-basket-fill:before {
+ content: "\e7c4";
+}
+
+.tn-icon-basket:before {
+ content: "\e7c5";
+}
+
+.tn-icon-cart-fill:before {
+ content: "\e7c2";
+}
+
+.tn-icon-cart:before {
+ content: "\e7c3";
+}
+
+.tn-icon-ticket:before {
+ content: "\e7f8";
+}
+
+.tn-icon-ticket-fill:before {
+ content: "\e7fe";
+}
+
+.tn-icon-receipt:before {
+ content: "\e7f6";
+}
+
+.tn-icon-receipt-fill:before {
+ content: "\e7f7";
+}
+
+.tn-icon-cardbag:before {
+ content: "\e7fa";
+}
+
+.tn-icon-cardbag-fill:before {
+ content: "\e7fd";
+}
+
+.tn-icon-bankcard-fill:before {
+ content: "\e7d3";
+}
+
+.tn-icon-bankcard:before {
+ content: "\e7d4";
+}
+
+.tn-icon-identity:before {
+ content: "\e7cb";
+}
+
+.tn-icon-identity-fill:before {
+ content: "\e7cc";
+}
+
+.tn-icon-calendar:before {
+ content: "\e7c0";
+}
+
+.tn-icon-calendar-fill:before {
+ content: "\e7c1";
+}
+
+.tn-icon-order:before {
+ content: "\e7be";
+}
+
+.tn-icon-order-fill:before {
+ content: "\e7bf";
+}
+
+.tn-icon-image:before {
+ content: "\e7bc";
+}
+
+.tn-icon-image-fill:before {
+ content: "\e7bd";
+}
+
+.tn-icon-image-text:before {
+ content: "\e7bb";
+}
+
+.tn-icon-image-text-fill:before {
+ content: "\e7ba";
+}
+
+.tn-icon-data:before {
+ content: "\e7b9";
+}
+
+.tn-icon-data-fill:before {
+ content: "\e7b8";
+}
+
+.tn-icon-statistics:before {
+ content: "\e7b7";
+}
+
+.tn-icon-statistics-fill:before {
+ content: "\e7b6";
+}
+
+.tn-icon-trusty-fill:before {
+ content: "\e801";
+}
+
+.tn-icon-trusty:before {
+ content: "\e802";
+}
+
+.tn-icon-safe-fill:before {
+ content: "\e803";
+}
+
+.tn-icon-safe:before {
+ content: "\e804";
+}
+
+.tn-icon-edit:before {
+ content: "\e7b5";
+}
+
+.tn-icon-edit-form:before {
+ content: "\e7b4";
+}
+
+.tn-icon-edit-write:before {
+ content: "\e7b3";
+}
+
+.tn-icon-write-fill:before {
+ content: "\e7b1";
+}
+
+.tn-icon-write:before {
+ content: "\e7b2";
+}
+
+.tn-icon-eye-hide:before {
+ content: "\e7af";
+}
+
+.tn-icon-eye-close:before {
+ content: "\e7b0";
+}
+
+.tn-icon-eye:before {
+ content: "\e7ad";
+}
+
+.tn-icon-eye-fill:before {
+ content: "\e7ae";
+}
+
+.tn-icon-unlock:before {
+ content: "\e7da";
+}
+
+.tn-icon-lock:before {
+ content: "\e7db";
+}
+
+.tn-icon-sex:before {
+ content: "\e7ac";
+}
+
+.tn-icon-sex-female:before {
+ content: "\e7ab";
+}
+
+.tn-icon-sex-male:before {
+ content: "\e7aa";
+}
+
+.tn-icon-circle-lack:before {
+ content: "\e7a8";
+}
+
+.tn-icon-circle-arrow:before {
+ content: "\e7a9";
+}
+
+.tn-icon-circle-fill:before {
+ content: "\e7a4";
+}
+
+.tn-icon-circle:before {
+ content: "\e7a3";
+}
+
+.tn-icon-copy-fill:before {
+ content: "\e7a1";
+}
+
+.tn-icon-copy:before {
+ content: "\e7a2";
+}
+
+.tn-icon-square:before {
+ content: "\e7a0";
+}
+
+.tn-icon-group-double:before {
+ content: "\e79e";
+}
+
+.tn-icon-group-square:before {
+ content: "\e79f";
+}
+
+.tn-icon-group-triangle:before {
+ content: "\e795";
+}
+
+.tn-icon-group-circle:before {
+ content: "\e796";
+}
+
+.tn-icon-group-null:before {
+ content: "\e797";
+}
+
+.tn-icon-share-triangle:before {
+ content: "\e792";
+}
+
+.tn-icon-share-square:before {
+ content: "\e790";
+}
+
+.tn-icon-share-circle:before {
+ content: "\e791";
+}
+
+.tn-icon-share:before {
+ content: "\e78f";
+}
+
+.tn-icon-send-fill:before {
+ content: "\e793";
+}
+
+.tn-icon-send:before {
+ content: "\e794";
+}
+
+.tn-icon-light-fill:before {
+ content: "\e78d";
+}
+
+.tn-icon-light:before {
+ content: "\e78e";
+}
+
+.tn-icon-praise-fill:before {
+ content: "\e7eb";
+}
+
+.tn-icon-praise:before {
+ content: "\e7f0";
+}
+
+.tn-icon-star-fill:before {
+ content: "\e78b";
+}
+
+.tn-icon-star:before {
+ content: "\e78c";
+}
+
+.tn-icon-caring:before {
+ content: "\e789";
+}
+
+.tn-icon-caring-fill:before {
+ content: "\e78a";
+}
+
+.tn-icon-fire:before {
+ content: "\e787";
+}
+
+.tn-icon-fire-fill:before {
+ content: "\e788";
+}
+
+.tn-icon-topic:before {
+ content: "\e786";
+}
+
+.tn-icon-topics:before {
+ content: "\e784";
+}
+
+.tn-icon-topics-fill:before {
+ content: "\e785";
+}
+
+.tn-icon-like-break:before {
+ content: "\e782";
+}
+
+.tn-icon-like-lack:before {
+ content: "\e783";
+}
+
+.tn-icon-like:before {
+ content: "\e781";
+}
+
+.tn-icon-like-fill:before {
+ content: "\e780";
+}
+
+.tn-icon-reply:before {
+ content: "\e7a6";
+}
+
+.tn-icon-reply-fill:before {
+ content: "\e7a7";
+}
+
+.tn-icon-comment-fill:before {
+ content: "\e79c";
+}
+
+.tn-icon-comment:before {
+ content: "\e79d";
+}
+
+.tn-icon-message-fill:before {
+ content: "\e798";
+}
+
+.tn-icon-message:before {
+ content: "\e799";
+}
+
+.tn-icon-flower-fill:before {
+ content: "\e77e";
+}
+
+.tn-icon-flower:before {
+ content: "\e77f";
+}
+
+.tn-icon-location-fill:before {
+ content: "\e77c";
+}
+
+.tn-icon-location:before {
+ content: "\e77d";
+}
+
+.tn-icon-map-fill:before {
+ content: "\e77a";
+}
+
+.tn-icon-map:before {
+ content: "\e77b";
+}
+
+.tn-icon-camera:before {
+ content: "\e774";
+}
+
+.tn-icon-camera-fill:before {
+ content: "\e775";
+}
+
+.tn-icon-live-stream:before {
+ content: "\e7fb";
+}
+
+.tn-icon-live-stream-fill:before {
+ content: "\e7fc";
+}
+
+.tn-icon-sing:before {
+ content: "\e7f9";
+}
+
+.tn-icon-music-fill:before {
+ content: "\e7ec";
+}
+
+.tn-icon-music-stop:before {
+ content: "\e7ed";
+}
+
+.tn-icon-video-fill:before {
+ content: "\e7e9";
+}
+
+.tn-icon-video:before {
+ content: "\e7ea";
+}
+
+.tn-icon-voice-fill:before {
+ content: "\e7e7";
+}
+
+.tn-icon-voice:before {
+ content: "\e7e8";
+}
+
+.tn-icon-previous-fill:before {
+ content: "\e7f2";
+}
+
+.tn-icon-next-fill:before {
+ content: "\e7f3";
+}
+
+.tn-icon-play-fill:before {
+ content: "\e7ee";
+}
+
+.tn-icon-stop:before {
+ content: "\e7ef";
+}
+
+.tn-icon-backspace:before {
+ content: "\e814";
+}
+
+.tn-icon-backspace-fill:before {
+ content: "\e815";
+}
+
+.tn-icon-sound-close-fill:before {
+ content: "\e778";
+}
+
+.tn-icon-sound-close:before {
+ content: "\e779";
+}
+
+.tn-icon-sound-fill:before {
+ content: "\e776";
+}
+
+.tn-icon-sound:before {
+ content: "\e777";
+}
+
+.tn-icon-sound-reduce-fill:before {
+ content: "\e7e5";
+}
+
+.tn-icon-sound-reduce:before {
+ content: "\e7e6";
+}
+
+.tn-icon-sound-add:before {
+ content: "\e80c";
+}
+
+.tn-icon-sound-add-fill:before {
+ content: "\e80d";
+}
+
+.tn-icon-sequence-vertical:before {
+ content: "\e79a";
+}
+
+.tn-icon-sequence:before {
+ content: "\e79b";
+}
+
+.tn-icon-align-center:before {
+ content: "\e7e1";
+}
+
+.tn-icon-align-right:before {
+ content: "\e7e2";
+}
+
+.tn-icon-align-left:before {
+ content: "\e7e3";
+}
+
+.tn-icon-align:before {
+ content: "\e7e4";
+}
+
+.tn-icon-title:before {
+ content: "\e772";
+}
+
+.tn-icon-sort:before {
+ content: "\e773";
+}
+
+.tn-icon-more-vertical:before {
+ content: "\e770";
+}
+
+.tn-icon-more-horizontal:before {
+ content: "\e771";
+}
+
+.tn-icon-more-circle:before {
+ content: "\e76e";
+}
+
+.tn-icon-more-circle-fill:before {
+ content: "\e76f";
+}
+
+.tn-icon-warning:before {
+ content: "\e76c";
+}
+
+.tn-icon-warning-fill:before {
+ content: "\e76d";
+}
+
+.tn-icon-zoom-out:before {
+ content: "\e76a";
+}
+
+.tn-icon-zoom-out-fill:before {
+ content: "\e76b";
+}
+
+.tn-icon-zoom-in-fill:before {
+ content: "\e768";
+}
+
+.tn-icon-zoom-in:before {
+ content: "\e769";
+}
+
+.tn-icon-success-square:before {
+ content: "\e763";
+}
+
+.tn-icon-success-circle-fill:before {
+ content: "\e764";
+}
+
+.tn-icon-success-circle:before {
+ content: "\e765";
+}
+
+.tn-icon-success-square-fill:before {
+ content: "\e766";
+}
+
+.tn-icon-success:before {
+ content: "\e767";
+}
+
+.tn-icon-close-fill:before {
+ content: "\e760";
+}
+
+.tn-icon-close:before {
+ content: "\e761";
+}
+
+.tn-icon-close-circle:before {
+ content: "\e762";
+}
+
+.tn-icon-help:before {
+ content: "\e75e";
+}
+
+.tn-icon-help-fill:before {
+ content: "\e75f";
+}
+
+.tn-icon-tip-fill:before {
+ content: "\e75d";
+}
+
+.tn-icon-left:before {
+ content: "\e7e0";
+}
+
+.tn-icon-left-triangle:before {
+ content: "\e757";
+}
+
+.tn-icon-left-fill:before {
+ content: "\e758";
+}
+
+.tn-icon-left-double:before {
+ content: "\e759";
+}
+
+.tn-icon-left-circle:before {
+ content: "\e75a";
+}
+
+.tn-icon-left-arrow:before {
+ content: "\e75b";
+}
+
+.tn-icon-down:before {
+ content: "\e7df";
+}
+
+.tn-icon-down-arrow:before {
+ content: "\e752";
+}
+
+.tn-icon-down-circle:before {
+ content: "\e753";
+}
+
+.tn-icon-down-double:before {
+ content: "\e754";
+}
+
+.tn-icon-down-fill:before {
+ content: "\e755";
+}
+
+.tn-icon-down-triangle:before {
+ content: "\e756";
+}
+
+.tn-icon-right:before {
+ content: "\e7de";
+}
+
+.tn-icon-right-fill:before {
+ content: "\e74d";
+}
+
+.tn-icon-right-arrow:before {
+ content: "\e74e";
+}
+
+.tn-icon-right-double:before {
+ content: "\e74f";
+}
+
+.tn-icon-right-triangle:before {
+ content: "\e750";
+}
+
+.tn-icon-right-circle:before {
+ content: "\e751";
+}
+
+.tn-icon-up:before {
+ content: "\e7dd";
+}
+
+.tn-icon-up-arrow:before {
+ content: "\e748";
+}
+
+.tn-icon-up-circle:before {
+ content: "\e749";
+}
+
+.tn-icon-up-triangle:before {
+ content: "\e74a";
+}
+
+.tn-icon-up-double:before {
+ content: "\e74b";
+}
+
+.tn-icon-up-fill:before {
+ content: "\e74c";
+}
+
+.tn-icon-add-circle:before {
+ content: "\e740";
+}
+
+.tn-icon-add:before {
+ content: "\e741";
+}
+
+.tn-icon-add-fill:before {
+ content: "\e742";
+}
+
+.tn-icon-reduce:before {
+ content: "\e743";
+}
+
+.tn-icon-reduce-square-fill:before {
+ content: "\e744";
+}
+
+.tn-icon-reduce-square:before {
+ content: "\e745";
+}
+
+.tn-icon-reduce-circle:before {
+ content: "\e746";
+}
+
+.tn-icon-reduce-circle-fill:before {
+ content: "\e747";
+}
diff --git a/tuniao-ui/index.js b/tuniao-ui/index.js
new file mode 100644
index 0000000..140fc71
--- /dev/null
+++ b/tuniao-ui/index.js
@@ -0,0 +1,73 @@
+// 引入全局mixin
+import mixin from './libs/mixin/mixin.js'
+// 全局挂载引入http相关请求拦截插件
+import Request from './libs/luch-request'
+
+// 调试输出信息
+function wranning(str) {
+ // 开发环境进行信息输出,主要是一些报错信息
+ // 这个环境的来由是在程序编写时候,点击hx编辑器运行调试代码的时候,详见:
+ // https://uniapp.dcloud.io/frame?id=%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e5%92%8c%e7%94%9f%e4%ba%a7%e7%8e%af%e5%a2%83
+ if (process.env.NODE_ENV === 'development') {
+ console.warn(str)
+ }
+}
+
+// 更新自定义状态栏的信息
+import updateCustomBarInfo from './libs/function/updateCustomBarInfo.js'
+// 获取颜色工具
+import color from './libs/function/color.js'
+// 消息工具
+import message from './libs/function/message.js'
+// 获取唯一id
+import uuid from './libs/function/uuid.js'
+// 数组工具
+import array from './libs/function/array.js'
+
+// 规则检验
+import test from './libs/function/test.js'
+// 获取整个父组件
+import $parent from './libs/function/$parent.js'
+// 格式化字符串工具
+import string from './libs/function/string.js'
+// 格式化数值工具
+import number from './libs/function/number.js'
+// 深度复制
+import deepClone from './libs/function/deepClone.js'
+
+// z-index配置信息
+import zIndex from './libs/config/zIndex.js'
+// 主题颜色信息
+import colorInfo from './libs/config/color.js'
+
+const $tn = {
+ http: new Request(),
+ updateCustomBar: updateCustomBarInfo,
+ color,
+ message,
+ uuid,
+ array,
+ test,
+ $parent,
+ string,
+ number,
+ deepClone,
+ zIndex,
+ colorInfo,
+}
+
+// 挂载到uni对象上
+uni.$tn = $tn
+
+const install = Vue => {
+ // 全局混入
+ Vue.mixin(mixin)
+
+ // Filter格式化
+
+ Vue.prototype.$tn = $tn
+}
+
+export default {
+ install
+}
diff --git a/tuniao-ui/index.scss b/tuniao-ui/index.scss
new file mode 100644
index 0000000..b0493b3
--- /dev/null
+++ b/tuniao-ui/index.scss
@@ -0,0 +1,13 @@
+// 引入公共基础类
+@import './libs/css/main.scss';
+@import './libs/css/color.scss';
+
+// 小程序特有的样式
+/* #ifdef MP */
+@import "./libs/css/style.mp.scss";
+/* #endif */
+
+// H5特有的样式
+/* #ifdef H5 */
+@import "./libs/css/style.h5.scss";
+/* #endif */
\ No newline at end of file
diff --git a/tuniao-ui/libs/config/color.js b/tuniao-ui/libs/config/color.js
new file mode 100644
index 0000000..eb71bf2
--- /dev/null
+++ b/tuniao-ui/libs/config/color.js
@@ -0,0 +1,15 @@
+// TuniaoUI颜色值
+export default {
+ mainColor: '#01BEFF',
+ reverseMainColor: '#FFF00D',
+ femaleColor: '#FF71D2',
+ maleColor: '#82B2FF',
+ mainOrange: '#FBBD12',
+ bgColor: '#FFFFFF',
+ spaceColor: '#F8F7F8',
+ fontColor: '#080808',
+ fontSubColor: '#AAAAAA',
+ contentColor: '#838383',
+ fontHolderColor: '#E6E6E6',
+ maskBgColor: 'rgba(0, 0, 0, 0.4)',
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/config/zIndex.js b/tuniao-ui/libs/config/zIndex.js
new file mode 100644
index 0000000..e3ba9a3
--- /dev/null
+++ b/tuniao-ui/libs/config/zIndex.js
@@ -0,0 +1,17 @@
+// 各组件的z-index值
+export default {
+ landsacpe: 29100,
+ navbar: 29090,
+ toast: 20090,
+ goodsNav: 20089,
+ alert: 20085,
+ modal: 20080,
+ popup: 20075,
+ tips: 19080,
+ sticky: 19075,
+ indexListSticky: 19070,
+ fab: 19060,
+ mask: 9999,
+ tableTr: 1001,
+ tableTd: 1000
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/css/color.scss b/tuniao-ui/libs/css/color.scss
new file mode 100644
index 0000000..51f98eb
--- /dev/null
+++ b/tuniao-ui/libs/css/color.scss
@@ -0,0 +1,563 @@
+
+@mixin getColor($color: #FFFFFF, $light-color: #FFFFFF, $dark-color: #FFFFFF, $disabled-color: #FFFFFF) {
+ color: $color !important;
+ @if $color != #FFFFFF and $color != #000000 {
+ &--light {
+ color: $light-color !important;
+ }
+ &--dark {
+ color: $dark-color !important;
+ }
+ &--disabled {
+ color: $disabled-color !important;
+ }
+ }
+}
+
+@mixin getBorderColor($color: #FFFFFF, $light-color: #FFFFFF, $dark-color: #FFFFFF, $disabled-color: #FFFFFF) {
+ @if $color != #FFFFFF and $color != #000000 {
+ &--light {
+ border-color: $light-color !important;
+ }
+ &--dark {
+ border-color: $dark-color !important;
+ }
+ &--disabled {
+ border-color: $disabled-color !important;
+ }
+ }
+ border-color: $color !important;
+}
+
+@mixin getBackgroundColor($color: #FFFFFF, $light-color: #FFFFFF, $dark-color: #FFFFFF, $disabled-color: #FFFFFF) {
+ background-color: $color !important;
+ @if $color != #FFFFFF and $color != #000000 {
+ color: $tn-font-color;
+ &--light {
+ background-color: $light-color !important;
+ }
+ &--dark {
+ background-color: $dark-color !important;
+ }
+ &--disabled {
+ background-color: $disabled-color !important;
+ }
+ }
+ @else {
+ color: $tn-font-color;
+ }
+}
+
+@mixin getShadowColor($type: box, $color: #FFFFFF) {
+ @if $type == box {
+ box-shadow: 12rpx 12rpx 16rpx #{$color};
+ } @else if $type == text {
+ text-shadow: 6rpx 6rpx 8rpx #{$color};
+ }
+}
+
+@mixin getGradientColor($start-color, $end-color, $font-color: #FFFFFF) {
+ background-image: repeating-linear-gradient(45deg, $start-color, $end-color);
+ color: $font-color;
+
+ &--reverse {
+ background-image: repeating-linear-gradient(-45deg, $start-color, $end-color);
+ color: $font-color;
+ }
+}
+
+@mixin getMainColorGradient($start-color, $start-color-light, $start-color-disabled, $end-color, $end-color-light) {
+ @include getGradientColor($start-color, $end-color);
+
+ &--light {
+ @include getGradientColor($start-color-light, $end-color-light, $start-color);
+ }
+
+ &--single {
+ @include getGradientColor($start-color, $start-color-disabled);
+ }
+}
+
+/* 颜色 start */
+.tn-color-red {
+ @include getColor($tn-color-red, $tn-color-red-light, $tn-color-red-dark, $tn-color-red-disabled);
+}
+.tn-color-purplered {
+ @include getColor($tn-color-purplered, $tn-color-purplered-light, $tn-color-purplered-dark, $tn-color-purplered-disabled);
+}
+.tn-color-purple {
+ @include getColor($tn-color-purple, $tn-color-purple-light, $tn-color-purple-dark, $tn-color-purple-disabled);
+}
+.tn-color-bluepurple {
+ @include getColor($tn-color-bluepurple, $tn-color-bluepurple-light, $tn-color-bluepurple-dark, $tn-color-bluepurple-disabled);
+}
+.tn-color-aquablue {
+ @include getColor($tn-color-aquablue, $tn-color-aquablue-light, $tn-color-aquablue-dark, $tn-color-aquablue-disabled);
+}
+.tn-color-blue {
+ @include getColor($tn-color-blue, $tn-color-blue-light, $tn-color-blue-dark, $tn-color-blue-disabled);
+}
+.tn-color-indigo {
+ @include getColor($tn-color-indigo, $tn-color-indigo-light, $tn-color-indigo-dark, $tn-color-indigo-disabled);
+}
+.tn-color-cyan {
+ @include getColor($tn-color-cyan, $tn-color-cyan-light, $tn-color-cyan-dark, $tn-color-cyan-disabled);
+}
+.tn-color-teal {
+ @include getColor($tn-color-teal, $tn-color-teal-light, $tn-color-teal-dark, $tn-color-teal-disabled);
+}
+.tn-color-green {
+ @include getColor($tn-color-green, $tn-color-green-light, $tn-color-green-dark, $tn-color-green-disabled);
+}
+.tn-color-yellowgreen {
+ @include getColor($tn-color-yellowgreen, $tn-color-yellowgreen-light, $tn-color-yellowgreen-dark, $tn-color-yellowgreen-disabled);
+}
+.tn-color-lime {
+ @include getColor($tn-color-lime, $tn-color-lime-light, $tn-color-lime-dark, $tn-color-lime-disabled);
+}
+.tn-color-yellow {
+ @include getColor($tn-color-yellow, $tn-color-yellow-light, $tn-color-yellow-dark, $tn-color-yellow-disabled);
+}
+.tn-color-orangeyellow {
+ @include getColor($tn-color-orangeyellow, $tn-color-orangeyellow-light, $tn-color-orangeyellow-dark, $tn-color-orangeyellow-disabled);
+}
+.tn-color-orange {
+ @include getColor($tn-color-orange, $tn-color-orange-light, $tn-color-orange-dark, $tn-color-orange-disabled);
+}
+.tn-color-orangered {
+ @include getColor($tn-color-orangered, $tn-color-orangered-light, $tn-color-orangered-dark, $tn-color-orangered-disabled);
+}
+.tn-color-brown {
+ @include getColor($tn-color-brown, $tn-color-brown-light, $tn-color-brown-dark, $tn-color-brown-disabled);
+}
+.tn-color-grey {
+ @include getColor($tn-color-grey, $tn-color-grey-light, $tn-color-grey-dark, $tn-color-grey-disabled);
+}
+.tn-color-gray {
+ @include getColor($tn-color-gray, $tn-color-gray-light, $tn-color-gray-dark, $tn-color-gray-disabled);
+}
+.tn-color-white {
+ @include getColor();
+}
+.tn-color-black {
+ @include getColor(#000000);
+}
+/* 颜色 end */
+
+/* 边框颜色 start */
+.tn-border-red {
+ @include getBorderColor($tn-color-red, $tn-color-red-light, $tn-color-red-dark, $tn-color-red-disabled);
+}
+.tn-border-purplered {
+ @include getBorderColor($tn-color-purplered, $tn-color-purplered-light, $tn-color-purplered-dark, $tn-color-purplered-disabled);
+}
+.tn-border-purple {
+ @include getBorderColor($tn-color-purple, $tn-color-purple-light, $tn-color-purple-dark, $tn-color-purple-disabled);
+}
+.tn-border-bluepurple {
+ @include getBorderColor($tn-color-bluepurple, $tn-color-bluepurple-light, $tn-color-bluepurple-dark, $tn-color-bluepurple-disabled);
+}
+.tn-border-aquablue {
+ @include getBorderColor($tn-color-aquablue, $tn-color-aquablue-light, $tn-color-aquablue-dark, $tn-color-aquablue-disabled);
+}
+.tn-border-blue {
+ @include getBorderColor($tn-color-blue, $tn-color-blue-light, $tn-color-blue-dark, $tn-color-blue-disabled);
+}
+.tn-border-indigo {
+ @include getBorderColor($tn-color-indigo, $tn-color-indigo-light, $tn-color-indigo-dark, $tn-color-indigo-disabled);
+}
+.tn-border-cyan {
+ @include getBorderColor($tn-color-cyan, $tn-color-cyan-light, $tn-color-cyan-dark, $tn-color-cyan-disabled);
+}
+.tn-border-teal {
+ @include getBorderColor($tn-color-teal, $tn-color-teal-light, $tn-color-teal-dark, $tn-color-teal-disabled);
+}
+.tn-border-green {
+ @include getBorderColor($tn-color-green, $tn-color-green-light, $tn-color-green-dark, $tn-color-green-disabled);
+}
+.tn-border-yellowgreen {
+ @include getBorderColor($tn-color-yellowgreen, $tn-color-yellowgreen-light, $tn-color-yellowgreen-dark, $tn-color-yellowgreen-disabled);
+}
+.tn-border-lime {
+ @include getBorderColor($tn-color-lime, $tn-color-lime-light, $tn-color-lime-dark, $tn-color-lime-disabled);
+}
+.tn-border-yellow {
+ @include getBorderColor($tn-color-yellow, $tn-color-yellow-light, $tn-color-yellow-dark, $tn-color-yellow-disabled);
+}
+.tn-border-orangeyellow {
+ @include getBorderColor($tn-color-orangeyellow, $tn-color-orangeyellow-light, $tn-color-orangeyellow-dark, $tn-color-orangeyellow-disabled);
+}
+.tn-border-orange {
+ @include getBorderColor($tn-color-orange, $tn-color-orange-light, $tn-color-orange-dark, $tn-color-orange-disabled);
+}
+.tn-border-orangered {
+ @include getBorderColor($tn-color-orangered, $tn-color-orangered-light, $tn-color-orangered-dark, $tn-color-orangered-disabled);
+}
+.tn-border-brown {
+ @include getBorderColor($tn-color-brown, $tn-color-brown-light, $tn-color-brown-dark, $tn-color-brown-disabled);
+}
+.tn-border-grey {
+ @include getBorderColor($tn-color-grey, $tn-color-grey-light, $tn-color-grey-dark, $tn-color-grey-disabled);
+}
+.tn-border-gray {
+ @include getBorderColor($tn-color-gray, $tn-color-gray-light, $tn-color-gray-dark, $tn-color-gray-disabled);
+}
+.tn-border-white {
+ @include getBorderColor();
+}
+.tn-border-black {
+ @include getBorderColor(#000000);
+}
+/* 边框颜色 end */
+
+/* 背景颜色 start */
+.tn-bg-red {
+ @include getBackgroundColor($tn-color-red, $tn-color-red-light, $tn-color-red-dark, $tn-color-red-disabled);
+}
+.tn-bg-purplered {
+ @include getBackgroundColor($tn-color-purplered, $tn-color-purplered-light, $tn-color-purplered-dark, $tn-color-purplered-disabled);
+}
+.tn-bg-purple {
+ @include getBackgroundColor($tn-color-purple, $tn-color-purple-light, $tn-color-purple-dark, $tn-color-purple-disabled);
+}
+.tn-bg-bluepurple {
+ @include getBackgroundColor($tn-color-bluepurple, $tn-color-bluepurple-light, $tn-color-bluepurple-dark, $tn-color-bluepurple-disabled);
+}
+.tn-bg-aquablue {
+ @include getBackgroundColor($tn-color-aquablue, $tn-color-aquablue-light, $tn-color-aquablue-dark, $tn-color-aquablue-disabled);
+}
+.tn-bg-blue {
+ @include getBackgroundColor($tn-color-blue, $tn-color-blue-light, $tn-color-blue-dark, $tn-color-blue-disabled);
+}
+.tn-bg-indigo {
+ @include getBackgroundColor($tn-color-indigo, $tn-color-indigo-light, $tn-color-indigo-dark, $tn-color-indigo-disabled);
+}
+.tn-bg-cyan {
+ @include getBackgroundColor($tn-color-cyan, $tn-color-cyan-light, $tn-color-cyan-dark, $tn-color-cyan-disabled);
+}
+.tn-bg-teal {
+ @include getBackgroundColor($tn-color-teal, $tn-color-teal-light, $tn-color-teal-dark, $tn-color-teal-disabled);
+}
+.tn-bg-green {
+ @include getBackgroundColor($tn-color-green, $tn-color-green-light, $tn-color-green-dark, $tn-color-green-disabled);
+}
+.tn-bg-yellowgreen {
+ @include getBackgroundColor($tn-color-yellowgreen, $tn-color-yellowgreen-light, $tn-color-yellowgreen-dark, $tn-color-yellowgreen-disabled);
+}
+.tn-bg-lime {
+ @include getBackgroundColor($tn-color-lime, $tn-color-lime-light, $tn-color-lime-dark, $tn-color-lime-disabled);
+}
+.tn-bg-yellow {
+ @include getBackgroundColor($tn-color-yellow, $tn-color-yellow-light, $tn-color-yellow-dark, $tn-color-yellow-disabled);
+}
+.tn-bg-orangeyellow {
+ @include getBackgroundColor($tn-color-orangeyellow, $tn-color-orangeyellow-light, $tn-color-orangeyellow-dark, $tn-color-orangeyellow-disabled);
+}
+.tn-bg-orange {
+ @include getBackgroundColor($tn-color-orange, $tn-color-orange-light, $tn-color-orange-dark, $tn-color-orange-disabled);
+}
+.tn-bg-orangered {
+ @include getBackgroundColor($tn-color-orangered, $tn-color-orangered-light, $tn-color-orangered-dark, $tn-color-orangered-disabled);
+}
+.tn-bg-brown {
+ @include getBackgroundColor($tn-color-brown, $tn-color-brown-light, $tn-color-brown-dark, $tn-color-brown-disabled);
+}
+.tn-bg-grey {
+ @include getBackgroundColor($tn-color-grey, $tn-color-grey-light, $tn-color-grey-dark, $tn-color-grey-disabled);
+}
+.tn-bg-gray {
+ @include getBackgroundColor($tn-color-gray, $tn-color-gray-light, $tn-color-gray-dark, $tn-color-gray-disabled);
+}
+.tn-bg-white {
+ @include getBackgroundColor();
+}
+.tn-bg-black {
+ @include getBackgroundColor(#000000);
+}
+/* 背景颜色 end */
+
+/* 阴影颜色 start */
+.tn-shadow-red {
+ @include getShadowColor(box, $tn-color-red-light);
+}
+.tn-shadow-purplered {
+ @include getShadowColor(box, $tn-color-purplered-light);
+}
+.tn-shadow-purple {
+ @include getShadowColor(box, $tn-color-purple-light);
+}
+.tn-shadow-bluepurple {
+ @include getShadowColor(box, $tn-color-bluepurple-light);
+}
+.tn-shadow-aquablue {
+ @include getShadowColor(box, $tn-color-aquablue-light);
+}
+.tn-shadow-blue {
+ @include getShadowColor(box, $tn-color-blue-light);
+}
+.tn-shadow-indigo {
+ @include getShadowColor(box, $tn-color-indigo-light);
+}
+.tn-shadow-cyan {
+ @include getShadowColor(box, $tn-color-cyan-light);
+}
+.tn-shadow-teal {
+ @include getShadowColor(box, $tn-color-teal-light);
+}
+.tn-shadow-green {
+ @include getShadowColor(box, $tn-color-green-light);
+}
+.tn-shadow-yellowgreen {
+ @include getShadowColor(box, $tn-color-yellowgreen-light);
+}
+.tn-shadow-lime {
+ @include getShadowColor(box, $tn-color-lime-light);
+}
+.tn-shadow-yellow {
+ @include getShadowColor(box, $tn-color-yellow-light);
+}
+.tn-shadow-orangeyellow {
+ @include getShadowColor(box, $tn-color-orangeyellow-light);
+}
+.tn-shadow-orange {
+ @include getShadowColor(box, $tn-color-orange-light);
+}
+.tn-shadow-orangered {
+ @include getShadowColor(box, $tn-color-orangered-light);
+}
+.tn-shadow-brown {
+ @include getShadowColor(box, $tn-color-brown-light);
+}
+.tn-shadow-grey {
+ @include getShadowColor(box, $tn-color-grey-light);
+}
+.tn-shadow-gray {
+ @include getShadowColor(box, $tn-color-gray-light);
+}
+
+.tn-text-shadow-red {
+ @include getShadowColor(text, $tn-color-red-light);
+}
+.tn-text-shadow-purplered {
+ @include getShadowColor(text, $tn-color-purplered-light);
+}
+.tn-text-shadow-purple {
+ @include getShadowColor(text, $tn-color-purple-light);
+}
+.tn-text-shadow-bluepurple {
+ @include getShadowColor(text, $tn-color-bluepurple-light);
+}
+.tn-text-shadow-aquablue {
+ @include getShadowColor(text, $tn-color-aquablue-light);
+}
+.tn-text-shadow-blue {
+ @include getShadowColor(text, $tn-color-blue-light);
+}
+.tn-text-shadow-indigo {
+ @include getShadowColor(text, $tn-color-indigo-light);
+}
+.tn-text-shadow-cyan {
+ @include getShadowColor(text, $tn-color-cyan-light);
+}
+.tn-text-shadow-teal {
+ @include getShadowColor(text, $tn-color-teal-light);
+}
+.tn-text-shadow-green {
+ @include getShadowColor(text, $tn-color-green-light);
+}
+.tn-text-shadow-yellowgreen {
+ @include getShadowColor(text, $tn-color-yellowgreen-light);
+}
+.tn-text-shadow-lime {
+ @include getShadowColor(text, $tn-color-lime-light);
+}
+.tn-text-shadow-yellow {
+ @include getShadowColor(text, $tn-color-yellow-light);
+}
+.tn-text-shadow-orangeyellow {
+ @include getShadowColor(text, $tn-color-orangeyellow-light);
+}
+.tn-text-shadow-orange {
+ @include getShadowColor(text, $tn-color-orange-light);
+}
+.tn-text-shadow-orangered {
+ @include getShadowColor(text, $tn-color-orangered-light);
+}
+.tn-text-shadow-brown {
+ @include getShadowColor(text, $tn-color-brown-light);
+}
+.tn-text-shadow-grey {
+ @include getShadowColor(text, $tn-color-grey-light);
+}
+.tn-text-shadow-gray {
+ @include getShadowColor(text, $tn-color-gray-light);
+}
+/* 阴影颜色 end */
+
+/* 主色渐变色 start */
+.tn-main-gradient-red {
+ @include getMainColorGradient($tn-color-red, $tn-color-red-light, $tn-color-red-disabled, $tn-color-purplered, $tn-color-purplered-light);
+}
+.tn-main-gradient-purplered {
+ @include getMainColorGradient($tn-color-purplered, $tn-color-purplered-light, $tn-color-purplered-disabled, $tn-color-purple, $tn-color-purple-light);
+}
+.tn-main-gradient-purple {
+ @include getMainColorGradient($tn-color-purple, $tn-color-purple-light, $tn-color-purple-disabled, $tn-color-bluepurple, $tn-color-bluepurple-light);
+}
+.tn-main-gradient-bluepurple {
+ @include getMainColorGradient($tn-color-bluepurple, $tn-color-bluepurple-light, $tn-color-bluepurple-disabled, $tn-color-aquablue, $tn-color-aquablue-light);
+}
+.tn-main-gradient-aquablue {
+ @include getMainColorGradient($tn-color-aquablue, $tn-color-aquablue-light, $tn-color-aquablue-disabled, $tn-color-blue, $tn-color-blue-light);
+}
+.tn-main-gradient-blue {
+ @include getMainColorGradient($tn-color-blue, $tn-color-blue-light, $tn-color-blue-disabled, $tn-color-indigo, $tn-color-indigo-light);
+}
+.tn-main-gradient-indigo {
+ @include getMainColorGradient($tn-color-indigo, $tn-color-indigo-light, $tn-color-indigo-disabled, $tn-color-cyan, $tn-color-cyan-light);
+}
+.tn-main-gradient-cyan {
+ @include getMainColorGradient($tn-color-cyan, $tn-color-cyan-light, $tn-color-cyan-disabled, $tn-color-teal, $tn-color-teal-light);
+}
+.tn-main-gradient-teal {
+ @include getMainColorGradient($tn-color-teal, $tn-color-teal-light, $tn-color-teal-disabled, $tn-color-green, $tn-color-green-light);
+}
+.tn-main-gradient-green {
+ @include getMainColorGradient($tn-color-green, $tn-color-green-light, $tn-color-green-disabled, $tn-color-yellowgreen, $tn-color-yellowgreen-light);
+}
+.tn-main-gradient-yellowgreen {
+ @include getMainColorGradient($tn-color-yellowgreen, $tn-color-yellowgreen-light, $tn-color-yellowgreen-disabled, $tn-color-lime, $tn-color-lime-light);
+}
+.tn-main-gradient-lime {
+ @include getMainColorGradient($tn-color-lime, $tn-color-lime-light, $tn-color-lime-disabled, $tn-color-yellow, $tn-color-yellow-light);
+}
+.tn-main-gradient-yellow {
+ @include getMainColorGradient($tn-color-yellow, $tn-color-yellow-light, $tn-color-yellow-disabled, $tn-color-orangeyellow, $tn-color-orangeyellow-light);
+}
+.tn-main-gradient-orangeyellow {
+ @include getMainColorGradient($tn-color-orangeyellow, $tn-color-orangeyellow-light, $tn-color-orangeyellow-disabled, $tn-color-orange, $tn-color-orange-light);
+}
+.tn-main-gradient-orange {
+ @include getMainColorGradient($tn-color-orange, $tn-color-orange-light, $tn-color-orange-disabled, $tn-color-orangered, $tn-color-orangered-light);
+}
+.tn-main-gradient-orangered {
+ @include getMainColorGradient($tn-color-orangered, $tn-color-orangered-light, $tn-color-orangered-disabled, $tn-color-red, $tn-color-red-light);
+}
+/* 主色渐变色 end */
+
+/* 动态背景颜色 start */
+
+.tn-dynamic-bg-1 {
+ color: #fff;
+ background: linear-gradient(45deg, #F15BB5, #9A5CE5, #01BEFF, #00F5D4);
+ background-size: 500% 500%;
+ animation: dynamicBg 15s ease infinite;
+}
+
+@keyframes dynamicBg {
+ 0% {
+ background-position: 0% 50%;
+ }
+
+ 50% {
+ background-position: 100% 50%;
+ }
+
+ 100% {
+ background-position: 0% 50%;
+ }
+}
+
+/* 动态背景颜色 end */
+
+/* 酷炫背景颜色图片 start */
+
+.tn-cool-bg-color-1 {
+ @include getGradientColor($tn-cool-bg-color-1-start, $tn-cool-bg-color-1-end);
+}
+.tn-cool-bg-color-2 {
+ @include getGradientColor($tn-cool-bg-color-2-start, $tn-cool-bg-color-2-end);
+}
+.tn-cool-bg-color-3 {
+ @include getGradientColor($tn-cool-bg-color-3-start, $tn-cool-bg-color-3-end);
+}
+.tn-cool-bg-color-4 {
+ @include getGradientColor($tn-cool-bg-color-4-start, $tn-cool-bg-color-4-end);
+}
+.tn-cool-bg-color-5 {
+ @include getGradientColor($tn-cool-bg-color-5-start, $tn-cool-bg-color-5-end);
+}
+.tn-cool-bg-color-6 {
+ @include getGradientColor($tn-cool-bg-color-6-start, $tn-cool-bg-color-6-end);
+}
+.tn-cool-bg-color-7 {
+ @include getGradientColor($tn-cool-bg-color-7-start, $tn-cool-bg-color-7-end);
+}
+.tn-cool-bg-color-8 {
+ @include getGradientColor($tn-cool-bg-color-8-start, $tn-cool-bg-color-8-end);
+}
+.tn-cool-bg-color-9 {
+ @include getGradientColor($tn-cool-bg-color-9-start, $tn-cool-bg-color-9-end);
+}
+.tn-cool-bg-color-10 {
+ @include getGradientColor($tn-cool-bg-color-10-start, $tn-cool-bg-color-10-end);
+}
+.tn-cool-bg-color-11 {
+ @include getGradientColor($tn-cool-bg-color-11-start, $tn-cool-bg-color-11-end);
+}
+.tn-cool-bg-color-12 {
+ @include getGradientColor($tn-cool-bg-color-12-start, $tn-cool-bg-color-12-end);
+}
+.tn-cool-bg-color-13 {
+ @include getGradientColor($tn-cool-bg-color-13-start, $tn-cool-bg-color-13-end);
+}
+.tn-cool-bg-color-14 {
+ @include getGradientColor($tn-cool-bg-color-14-start, $tn-cool-bg-color-14-end);
+}
+.tn-cool-bg-color-15 {
+ @include getGradientColor($tn-cool-bg-color-15-start, $tn-cool-bg-color-15-end);
+}
+.tn-cool-bg-color-16 {
+ @include getGradientColor($tn-cool-bg-color-16-start, $tn-cool-bg-color-16-end);
+}
+
+.tn-cool-bg-image::after {
+ content: " ";
+ position: absolute;
+ z-index: -1;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ bottom: 0;
+ border-radius: 10rpx;
+ opacity: 1;
+ transform: scale(1, 1);
+ background-size: 100% 100%;
+ background-image: inherit;
+}
+
+.tn-cool-bg-image:nth-of-type(1n)::after {
+ background-image: url(https://resource.tuniaokj.com/images/cool_bg_image/1.png);
+}
+
+.tn-cool-bg-image:nth-of-type(2n)::after {
+ background-image: url(https://resource.tuniaokj.com/images/cool_bg_image/2.png);
+}
+
+.tn-cool-bg-image:nth-of-type(3n)::after {
+ background-image: url(https://resource.tuniaokj.com/images/cool_bg_image/3.png);
+}
+
+.tn-cool-bg-image:nth-of-type(4n)::after {
+ background-image: url(https://resource.tuniaokj.com/images/cool_bg_image/4.png);
+}
+
+.tn-cool-bg-image:nth-of-type(5n)::after {
+ background-image: url(https://resource.tuniaokj.com/images/cool_bg_image/5.png);
+}
+
+.tn-cool-bg-image:nth-of-type(6n)::after {
+ background-image: url(https://resource.tuniaokj.com/images/cool_bg_image/6.png);
+}
+
+/* 酷炫背景颜色图片 end */
diff --git a/tuniao-ui/libs/css/main.scss b/tuniao-ui/libs/css/main.scss
new file mode 100644
index 0000000..f60ab11
--- /dev/null
+++ b/tuniao-ui/libs/css/main.scss
@@ -0,0 +1,722 @@
+$direction: top, right, bottom, left;
+
+body {
+ // 全局灰白效果
+ /* filter: grayscale(100%);
+ -webkit-filter: grayscale(100%); */
+
+ background-color: $tn-bg-color;
+ /* background-color: #ffffff; */
+ font-size: 28rpx;
+ color: $tn-font-color;
+ font-family: Helvetica Neue, Helvetica, sans-serif;
+ // 修复点击view标签的时候会有蓝色遮罩
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+}
+
+view,
+scroll-view,
+swiper,
+button,
+input,
+textarea,
+label,
+navigator,
+image {
+ box-sizing: border-box;
+}
+
+button::after {
+ border: none;
+}
+
+.tn-round {
+ border-radius: 5000rpx !important;
+}
+
+.tn-radius {
+ border-radius: 6rpx;
+}
+
+/* 基本样式 start */
+
+.tn-width-full {
+ width: 100%;
+}
+
+.tn-height-full {
+ height: 100%;
+}
+
+/* 基本样式 end */
+
+
+/* 边框 start */
+
+.tn-border-solid,
+.tn-border-solid-top,
+.tn-border-solid-right,
+.tn-border-solid-bottom,
+.tn-border-solid-left,
+.tn-border-solids,
+.tn-border-solids-top,
+.tn-border-solids-right,
+.tn-border-solids-bottom,
+.tn-border-solids-left,
+.tn-border-dashed,
+.tn-border-dashed-top,
+.tn-border-dashed-right,
+.tn-border-dashed-bottom,
+.tn-border-dashed-left {
+ border-radius: inherit;
+ box-sizing: border-box;
+}
+
+@for $i from 0 to length($direction) + 1 {
+ @if $i == 0 {
+ .tn-border-solid {
+ border-width: 1rpx !important;
+ border-style: solid;
+ border-color: $tn-border-solid-color;
+
+ &.tn-bold-border {
+ border-width: 6rpx !important;
+ }
+ }
+ .tn-border-solids {
+ border-width: 1rpx !important;
+ border-style: solid;
+ border-color: $tn-border-solids-color;
+
+ &.tn-bold-border {
+ border-width: 6rpx !important;
+ }
+ }
+ .tn-border-dashed {
+ border-width: 1rpx !important;
+ border-style: dashed;
+ border-color: $tn-border-dashed-color;
+
+ &.tn-bold-border {
+ border-width: 6rpx !important;
+ }
+ }
+ } @else {
+ .tn-border-solid-#{nth($direction, $i)} {
+ border: 0rpx;
+ border-#{nth($direction, $i)}-width: 1rpx !important;
+ border-style: solid;
+ border-color: $tn-border-solid-color;
+
+ &.tn-bold-border {
+ border-#{nth($direction, $i)}-width: 6rpx !important;
+ }
+ }
+ .tn-border-solids-#{nth($direction, $i)} {
+ border: 0rpx;
+ border-#{nth($direction, $i)}-width: 1rpx !important;
+ border-style: solid;
+ border-color: $tn-border-solids-color;
+
+ &.tn-bold-border {
+ border-#{nth($direction, $i)}-width: 6rpx !important;
+ }
+ }
+ .tn-border-dashed-#{nth($direction, $i)} {
+ border: 0rpx;
+ border-#{nth($direction, $i)}-width: 1rpx !important;
+ border-style: dashed;
+ border-color: $tn-border-dashed-color;
+
+ &.tn-bold-border {
+ border-#{nth($direction, $i)}-width: 6rpx !important;
+ }
+ }
+ }
+}
+
+.tn-none-border.tn-border-solid,
+.tn-none-border.tn-border-solid-top,
+.tn-none-border.tn-border-solid-right,
+.tn-none-border.tn-border-solid-bottom,
+.tn-none-border.tn-border-solid-left,
+.tn-none-border.tn-border-solids,
+.tn-none-border.tn-border-solids-top,
+.tn-none-border.tn-border-solids-right,
+.tn-none-border.tn-border-solids-bottom,
+.tn-none-border.tn-border-solids-left,
+.tn-none-border.tn-border-dashed,
+.tn-none-border.tn-border-dashed-top,
+.tn-none-border.tn-border-dashed-right,
+.tn-none-border.tn-border-dashed-bottom,
+.tn-none-border.tn-border-dashed-left {
+ border: 0 !important;
+}
+
+.tn-none-border-top.tn-border-solid,
+.tn-none-border-top.tn-border-solid-top,
+.tn-none-border-top.tn-border-solid-right,
+.tn-none-border-top.tn-border-solid-bottom,
+.tn-none-border-top.tn-border-solid-left,
+.tn-none-border-top.tn-border-solids,
+.tn-none-border-top.tn-border-solids-top,
+.tn-none-border-top.tn-border-solids-right,
+.tn-none-border-top.tn-border-solids-bottom,
+.tn-none-border-top.tn-border-solids-left,
+.tn-none-border-top.tn-border-dashed,
+.tn-none-border-top.tn-border-dashed-top,
+.tn-none-border-top.tn-border-dashed-right,
+.tn-none-border-top.tn-border-dashed-bottom,
+.tn-none-border-top.tn-border-dashed-left {
+ /* height: 0 !important; */
+ border-top: 0 !important;
+}
+
+.tn-none-border-right.tn-border-solid,
+.tn-none-border-right.tn-border-solid-top,
+.tn-none-border-right.tn-border-solid-right,
+.tn-none-border-right.tn-border-solid-bottom,
+.tn-none-border-right.tn-border-solid-left,
+.tn-none-border-right.tn-border-solids,
+.tn-none-border-right.tn-border-solids-top,
+.tn-none-border-right.tn-border-solids-right,
+.tn-none-border-right.tn-border-solids-bottom,
+.tn-none-border-right.tn-border-solids-left,
+.tn-none-border-right.tn-border-dashed,
+.tn-none-border-right.tn-border-dashed-top,
+.tn-none-border-right.tn-border-dashed-right,
+.tn-none-border-right.tn-border-dashed-bottom,
+.tn-none-border-right.tn-border-dashed-left {
+ /* width: 0 !important; */
+ border-right: 0 !important;
+}
+
+.tn-none-border-bottom.tn-border-solid,
+.tn-none-border-bottom.tn-border-solid-top,
+.tn-none-border-bottom.tn-border-solid-right,
+.tn-none-border-bottom.tn-border-solid-bottom,
+.tn-none-border-bottom.tn-border-solid-left,
+.tn-none-border-bottom.tn-border-solids,
+.tn-none-border-bottom.tn-border-solids-top,
+.tn-none-border-bottom.tn-border-solids-right,
+.tn-none-border-bottom.tn-border-solids-bottom,
+.tn-none-border-bottom.tn-border-solids-left,
+.tn-none-border-bottom.tn-border-dashed,
+.tn-none-border-bottom.tn-border-dashed-top,
+.tn-none-border-bottom.tn-border-dashed-right,
+.tn-none-border-bottom.tn-border-dashed-bottom,
+.tn-none-border-bottom.tn-border-dashed-left {
+ /* height: 0 !important; */
+ border-bottom: 0 !important;
+}
+
+.tn-none-border-left.tn-border-solid,
+.tn-none-border-left.tn-border-solid-top,
+.tn-none-border-left.tn-border-solid-right,
+.tn-none-border-left.tn-border-solid-bottom,
+.tn-none-border-left.tn-border-solid-left,
+.tn-none-border-left.tn-border-solids,
+.tn-none-border-left.tn-border-solids-top,
+.tn-none-border-left.tn-border-solids-right,
+.tn-none-border-left.tn-border-solids-bottom,
+.tn-none-border-left.tn-border-solids-left,
+.tn-none-border-left.tn-border-dashed,
+.tn-none-border-left.tn-border-dashed-top,
+.tn-none-border-left.tn-border-dashed-right,
+.tn-none-border-left.tn-border-dashed-bottom,
+.tn-none-border-left.tn-border-dashed-left {
+ /* width: 0 !important; */
+ border-left: 0 !important;
+}
+
+/* 边框 end */
+
+
+/* 阴影 start */
+
+.tn-shadow {
+ box-shadow: 6rpx 6rpx 8rpx $tn-shadow-color;
+}
+
+.tn-shadow-warp {
+ position: relative;
+ box-shadow: 0 0 10rpx $tn-shadow-color;
+}
+
+.tn-shadow-warp::before,
+.tn-shadow-warp::after {
+ content: " ";
+ position: absolute;
+ top: 20rpx;
+ bottom: 30rpx;
+ left: 20rpx;
+ width: 50%;
+ box-shadow: 0 30rpx 20rpx $tn-box-shadow-color;
+ transform: rotate(-3deg);
+ z-index: -1;
+}
+
+.tn-shadow-warp::after {
+ right: 20rpx;
+ left: auto;
+ transform: rotate(3deg);
+}
+
+.tn-shadow-blur {
+ position: relative;
+}
+
+.tn-shadow-blur::before {
+ content: " ";
+ display: block;
+ background: inherit;
+ filter: blur(10rpx);
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 10rpx;
+ left: 10rpx;
+ z-index: -1;
+ opacity: 0.4;
+ transform-origin: 0 0;
+ border-radius: inherit;
+ transform: scale(1, 1);
+}
+
+/* 阴影 end */
+
+
+/* flex start */
+
+.tn-flex {
+ display: -webkit-flex;
+ display: flex;
+}
+
+/* flex伸缩基准值 */
+.tn-flex-basic-xs {
+ flex-basis: 20%;
+}
+
+.tn-flex-basic-sm {
+ flex-basis: 40%;
+}
+
+.tn-flex-basic-md {
+ flex-basis: 50%;
+}
+
+.tn-flex-basic-lg {
+ flex-basis: 60%;
+}
+
+.tn-flex-basic-xl {
+ flex-basis: 80%;
+}
+
+.tn-flex-basic-full {
+ flex-basis: 100%;
+}
+
+/* flex布局的方向 */
+.tn-flex-direction-column {
+ flex-direction: column;
+}
+
+.tn-flex-direction-row {
+ flex-direction: row;
+}
+
+.tn-flex-direction-column-reverse {
+ flex-direction: column-reverse;
+}
+
+.tn-flex-direction-row-reverse {
+ flex-direction: row-reverse;
+}
+
+/* flex容器设置换行 */
+.tn-flex-wrap {
+ flex-wrap: wrap;
+}
+
+.tn-flex-nowrap {
+ flex-wrap: nowrap;
+}
+
+/* flex容器自身垂直方向对齐方式 */
+.tn-flex-center {
+ align-self: center;
+}
+
+.tn-flex-top {
+ align-self: flex-start;
+}
+
+.tn-flex-end {
+ align-self: flex-end;
+}
+
+.tn-flex-stretch {
+ align-self: stretch;
+}
+
+/* flex子元素垂直方向对齐方式 */
+.tn-flex-col-center {
+ align-items: center;
+}
+
+.tn-flex-col-top {
+ align-items: flex-start;
+}
+
+.tn-flex-col-bottom {
+ align-items: flex-end;
+}
+
+/* flex子元素水平方向对齐方式 */
+.tn-flex-row-center {
+ justify-content: center;
+}
+
+.tn-flex-row-left {
+ justify-content: flex-start;
+}
+
+.tn-flex-row-right {
+ justify-content: flex-end;
+}
+
+.tn-flex-row-between {
+ justify-content: space-between;
+}
+
+.tn-flex-row-around {
+ justify-content: space-around;
+}
+
+/* flex子元素空间分配 */
+@for $i from 0 to 12 {
+ .tn-flex-#{$i} {
+ flex: $i;
+ }
+}
+
+.tn-col-12 {
+ width: 100%;
+}
+
+.tn-col-11 {
+ width: 91.66666667%;
+}
+
+.tn-col-10 {
+ width: 83.33333333%;
+}
+
+.tn-col-9 {
+ width: 75%;
+}
+
+.tn-col-8 {
+ width: 66.66666667%;
+}
+
+.tn-col-7 {
+ width: 58.33333333%;
+}
+
+.tn-col-6 {
+ width: 50%;
+}
+
+.tn-col-5 {
+ width: 41.66666667%;
+}
+
+.tn-col-4 {
+ width: 33.33333333%;
+}
+
+.tn-col-3 {
+ width: 25%;
+}
+
+.tn-col-2 {
+ width: 16.66666667%;
+}
+
+.tn-col-1 {
+ width: 8.33333333%;
+}
+
+/* flex end */
+
+/* 内边距 start */
+
+@for $i from 0 to length($direction) + 1 {
+ @if $i == 0 {
+ .tn-no-margin {
+ margin: 0;
+ }
+ .tn-margin-xs {
+ margin: 10rpx;
+ }
+ .tn-margin-sm {
+ margin: 20rpx;
+ }
+ .tn-margin {
+ margin: 30rpx;
+ }
+ .tn-margin-lg {
+ margin: 40rpx;
+ }
+ .tn-margin-xl {
+ margin: 50rpx;
+ }
+ } @else {
+ .tn-no-margin-#{nth($direction, $i)} {
+ margin-#{nth($direction, $i)}: 0;
+ }
+ .tn-margin-#{nth($direction, $i)}-xs {
+ margin-#{nth($direction, $i)}: 10rpx;
+ }
+ .tn-margin-#{nth($direction, $i)}-sm {
+ margin-#{nth($direction, $i)}: 20rpx;
+ }
+ .tn-margin-#{nth($direction, $i)} {
+ margin-#{nth($direction, $i)}: 30rpx;
+ }
+ .tn-margin-#{nth($direction, $i)}-lg {
+ margin-#{nth($direction, $i)}: 40rpx;
+ }
+ .tn-margin-#{nth($direction, $i)}-xl {
+ margin-#{nth($direction, $i)}: 50rpx;
+ }
+ }
+}
+
+/* 内边距 end */
+
+/* 外边距 start */
+
+@for $i from 0 to length($direction) + 1 {
+ @if $i == 0 {
+ .tn-no-padding {
+ padding: 0;
+ }
+ .tn-padding-xs {
+ padding: 10rpx;
+ }
+ .tn-padding-sm {
+ padding: 20rpx;
+ }
+ .tn-padding {
+ padding: 30rpx;
+ }
+ .tn-padding-lg {
+ padding: 40rpx;
+ }
+ .tn-padding-xl {
+ padding: 50rpx;
+ }
+ } @else {
+ .tn-no-padding-#{nth($direction, $i)} {
+ padding-#{nth($direction, $i)}: 0;
+ }
+ .tn-padding-#{nth($direction, $i)}-xs {
+ padding-#{nth($direction, $i)}: 10rpx;
+ }
+ .tn-padding-#{nth($direction, $i)}-sm {
+ padding-#{nth($direction, $i)}: 20rpx;
+ }
+ .tn-padding-#{nth($direction, $i)} {
+ padding-#{nth($direction, $i)}: 30rpx;
+ }
+ .tn-padding-#{nth($direction, $i)}-lg {
+ padding-#{nth($direction, $i)}: 40rpx;
+ }
+ .tn-padding-#{nth($direction, $i)}-xl {
+ padding-#{nth($direction, $i)}: 50rpx;
+ }
+ }
+}
+
+/* 外边距 end */
+
+/* float start */
+
+.tn-float-left {
+ float: left;
+}
+
+.tn-float-right {
+ float: right;
+}
+
+.tn-clear-float {
+ clear: both;
+}
+
+.tn-clear-float::after,
+.tn-clear-float::before {
+ content: " ";
+ display: table;
+ clear: both;
+}
+
+/* float end */
+
+/* 文本 start */
+
+.tn-text-xs {
+ font-size: 20rpx;
+}
+
+.tn-text-sm {
+ font-size: 24rpx;
+}
+
+.tn-text-md {
+ font-size: 28rpx;
+}
+
+.tn-text-lg {
+ font-size: 32rpx;
+}
+
+.tn-text-xl {
+ font-size: 36rpx;
+}
+
+.tn-text-xxl {
+ font-size: 40rpx;
+}
+
+.tn-text-xl-xxl {
+ font-size: 80rpx;
+}
+
+.tn-text-xxl-xxl {
+ font-size: 120rpx;
+}
+
+.tn-text-upper {
+ text-transform: uppercase;
+}
+
+.tn-text-cap {
+ text-transform: capitalize;
+}
+
+.tn-text-lower {
+ text-transform: lowercase;
+}
+
+.tn-text-bold {
+ font-weight: bold;
+}
+
+.tn-text-center {
+ text-align: center;
+}
+
+.tn-text-left {
+ text-align: left;
+}
+
+.tn-text-right {
+ text-align: right;
+}
+
+.tn-text-justify {
+ text-align: justify;
+}
+
+.tn-text-content {
+ line-height: 1.6;
+}
+
+.tn-text-ellipsis {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+.tn-text-ellipsis-2 {
+ display: -webkit-box;
+ overflow: hidden;
+ white-space: normal !important;
+ text-overflow: ellipsis;
+ word-wrap: break-word;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+}
+
+.tn-text-clip {
+ -webkit-background-clip: text;
+ color: transparent !important;
+}
+
+.tn-text-break-word {
+ word-wrap: break-word;
+}
+
+/* 文本 end */
+
+/* hover 点击效果 start */
+.tn-hover {
+ opacity: 0.6;
+}
+/* hover 点击效果 end */
+
+/* 去除原生button样式 start */
+.tn-button--clear-style {
+ background-color: transparent;
+ padding: 0;
+ margin: 0;
+ font-size: inherit;
+ line-height: inherit;
+ border-radius: inherit;
+ color: inherit;
+}
+/* 去除原生button样式 end */
+
+/* 头像组 start */
+// .tn-avatar-group {
+// direction: rtl;
+// unicode-bidi: bidi-override;
+// padding: 0 10rpx 0 40rpx;
+// display: inline-block;
+
+// .tn-avatar {
+// margin-left: -30rpx !important;
+// border: 4rpx solid $tn-border-solid-color;
+// vertical-align: middle;
+
+// &--sm {
+// margin-left: -20rpx !important;
+// border: 1rpx solid $tn-border-solid-color;
+// }
+// }
+// }
+/* 头像组 end */
+
+/* 提升H5端uni.toast()的层级,避免被tn-modal等遮盖 start */
+/* #ifdef H5 */
+uni-toast {
+ z-index: 10090;
+}
+uni-toast .uni-toast {
+ z-index: 10090;
+}
+/* #endif */
+/* 提升H5端uni.toast()的层级,避免被tn-modal等遮盖 end */
+
+/* iPhoneX底部安全区定义 start */
+.tn-safe-area-inset-bottom {
+ padding-bottom: 0;
+ padding-bottom: constant(safe-area-inset-bottom);
+ padding-bottom: env(safe-area-inset-bottom);
+}
+/* iPhoneX底部安全区定义 end */
\ No newline at end of file
diff --git a/tuniao-ui/libs/css/style.h5.scss b/tuniao-ui/libs/css/style.h5.scss
new file mode 100644
index 0000000..647c902
--- /dev/null
+++ b/tuniao-ui/libs/css/style.h5.scss
@@ -0,0 +1,35 @@
+/* H5的时候,隐藏滚动条 */
+::-webkit-scrollbar {
+ display: none;
+ width: 0 !important;
+ height: 0 !important;
+ -webkit-appearance: none;
+ background: transparent;
+}
+
+/* 双标签 start*/
+.capsule {
+ display: inline-flex;
+ vertical-align: middle;
+ width: 20%;
+ min-width: 136rpx;
+ height: 45rpx;
+
+ .capsule-tag {
+ margin: 0;
+
+ &:first-child {
+ border-top-right-radius: 0rpx;
+ border-bottom-right-radius: 0rpx;
+ }
+
+ &:last-child {
+
+ &::after {
+ border-top-left-radius: 0rpx;
+ border-bottom-left-radius: 0rpx;
+ }
+ }
+ }
+}
+/* 双标签 end*/
\ No newline at end of file
diff --git a/tuniao-ui/libs/css/style.mp.scss b/tuniao-ui/libs/css/style.mp.scss
new file mode 100644
index 0000000..f5aed9e
--- /dev/null
+++ b/tuniao-ui/libs/css/style.mp.scss
@@ -0,0 +1,52 @@
+::-webkit-scrollbar {
+ display: none;
+ width: 0 !important;
+ height: 0 !important;
+ -webkit-appearance: none;
+ background: transparent;
+}
+/* 微信小程序编译后页面有组件名的元素,特别处理 start */
+/* #ifdef MP-WEIXIN || MP-QQ */
+// 各家小程序宫格组件外层设置为100%,避免受到父元素display: flex;的影响
+
+/* 双标签 start*/
+.capsule {
+ display: inline-flex;
+ vertical-align: middle;
+ width: 20%;
+ min-width: 136rpx;
+ height: 45rpx;
+
+ tn-tag {
+ margin: 0;
+ width: 100%;
+
+ &:first-child {
+ .tn-tag {
+ border-top-right-radius: 0rpx;
+ border-bottom-right-radius: 0rpx;
+ }
+ }
+
+ &:last-child {
+ .tn-tag {
+ &::after {
+ border-top-left-radius: 0rpx;
+ border-bottom-left-radius: 0rpx;
+ }
+ }
+
+
+ }
+ }
+}
+/* 双标签 end*/
+
+/* #endif */
+/* 微信小程序编译后页面有组件名的元素,特别处理 end */
+
+/* 头条小程序编译后页面有组件名的元素,特别处理 start */
+/* #ifdef MP-TOUTIAO */
+// 各家小程序宫格组件外层设置为100%,避免受到父元素display: flex;的影响
+/* #endif */
+/* 头条小程序编译后页面有组件名的元素,特别处理 end */
\ No newline at end of file
diff --git a/tuniao-ui/libs/function/$parent.js b/tuniao-ui/libs/function/$parent.js
new file mode 100644
index 0000000..49854cc
--- /dev/null
+++ b/tuniao-ui/libs/function/$parent.js
@@ -0,0 +1,18 @@
+// 获取父组件的参数,在支付宝小程序中不支持provide/inject的写法
+// 在非H5中this.$parent可以获取到父组件,但是在H5中需要多次调用this.$parent.$parent.xxx
+// 传递默认值undefined表示查找最顶层的$parent
+export default function $parent(name = undefined) {
+ let parent = this.$parent
+ // 通过whle遍历,这里主要是为了H5需要多层解析
+ while(parent) {
+ // 父组件
+ if (parent.$options && parent.$options.name !== name) {
+ // 如果组件的name不相等,则继续查找
+ parent = parent.$parent
+ } else {
+ return parent
+ }
+ }
+
+ return false
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/function/applyEven.js b/tuniao-ui/libs/function/applyEven.js
new file mode 100644
index 0000000..0176857
--- /dev/null
+++ b/tuniao-ui/libs/function/applyEven.js
@@ -0,0 +1,28 @@
+//防抖
+export function debounceFun(func, delay=500) {
+ //定时器
+ let timer;
+ return function(...args) {
+ // 清除之前设置的定时器
+ clearTimeout(timer);
+ timer = setTimeout(() => {
+ func.apply(this, args);
+ }, delay);
+ };
+}
+
+//节流
+export function throttleFun(func, delay=500) {
+ //定时器
+ let timer = null;
+ return function(...args) {
+ if(!timer){
+ timer = setTimeout(() => {
+ //执行前清空
+ timer = null;
+ console.log("执行了")
+ func.apply(this, args);
+ }, delay);
+ }
+ };
+}
diff --git a/tuniao-ui/libs/function/array.js b/tuniao-ui/libs/function/array.js
new file mode 100644
index 0000000..fa947ea
--- /dev/null
+++ b/tuniao-ui/libs/function/array.js
@@ -0,0 +1,22 @@
+/**
+ * 打乱传入的数组
+ *
+ * @param {Array} array 待打乱的数组
+ */
+function random(array = []) {
+ return array.sort(() => Math.random() - 0.5)
+}
+
+/**
+ * 判断是否为数组
+ *
+ * @param {Object} arr
+ */
+function isArray(arr) {
+ return Object.prototype.toString.call(arr) === '[object Array]'
+}
+
+export default {
+ random,
+ isArray
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/function/color.js b/tuniao-ui/libs/function/color.js
new file mode 100644
index 0000000..11f3365
--- /dev/null
+++ b/tuniao-ui/libs/function/color.js
@@ -0,0 +1,270 @@
+let color = [
+ 'red',
+ 'purplered',
+ 'purple',
+ 'bluepurple',
+ 'aquablue',
+ 'blue',
+ 'indigo',
+ 'cyan',
+ 'teal',
+ 'green',
+ 'yellowgreen',
+ 'lime',
+ 'yellow',
+ 'orangeyellow',
+ 'orange',
+ 'orangered',
+ 'brown',
+ 'grey',
+ 'gray'
+]
+
+// 酷炫颜色的数量
+const COOL_BG_COLOR_COUNT = 16
+
+/**
+ * 获取图鸟配色颜色列表
+ */
+function getTuniaoColorList() {
+ return color
+}
+
+/**
+ * 获取指定类型的随机颜色对应的类
+ * @param {String} type 颜色类型
+ */
+function getRandomColorClass(type = 'bg') {
+ const index = Math.floor(Math.random() * color.length)
+ const colorValue = color[index]
+
+ return 'tn-' + type + '-' + colorValue
+}
+
+/**
+ * 随机获取酷炫背景对应的类
+ */
+function getRandomCoolBgClass() {
+ const index = (Math.random() * COOL_BG_COLOR_COUNT) + 1
+ return 'tn-cool-bg-color-' + Math.floor(index)
+}
+
+/**
+ * 根据传入的值获取内部背景颜色类
+ *
+ * @param {String} backgroundColor 背景颜色信息
+ */
+function getBackgroundColorInternalClass(backgroundColor = '') {
+ if (!backgroundColor) return ''
+
+ if (['tn-bg', 'tn-dynamic-bg', 'tn-main-gradient', 'tn-cool-bg'].some(item => {
+ return backgroundColor.includes(item)
+ })) {
+ return backgroundColor
+ }
+ return ''
+}
+
+/**
+ * 根据传入的值获取背景颜色样式
+ *
+ * @param {String} backgroundColor 背景颜色信息
+ */
+function getBackgroundColorStyle(backgroundColor = '') {
+ if (!backgroundColor) return ''
+
+ if (!backgroundColor.startsWith('tn-') || ['#', 'rgb', 'rgba'].some(item => {
+ return backgroundColor.includes(item)
+ })) {
+ return backgroundColor
+ }
+ return ''
+}
+
+/**
+ * 根据传入的值获取内部字体颜色类
+ *
+ * @param {String} fontColor 背景颜色信息
+ */
+function getFontColorInternalClass(fontColor = '') {
+ if (!fontColor) return ''
+
+ if (['tn-color'].some(item => {
+ return fontColor.includes(item)
+ })) {
+ return fontColor
+ }
+ return ''
+}
+
+/**
+ * 根据传入的值获取字体颜色样式
+ *
+ * @param {String} fontColor 背景颜色信息
+ */
+function getFontColorStyle(fontColor = '') {
+ if (!fontColor) return ''
+
+ if (!fontColor.startsWith('tn-') || ['#', 'rgb', 'rgba'].some(item => {
+ return fontColor.includes(item)
+ })) {
+ return fontColor
+ }
+ return ''
+}
+
+/**
+ * 求两个颜色之间的渐变值
+ *
+ * @param {String} startColor 开始颜色
+ * @param {String} endColor 结束颜色
+ * @param {Number} step 颜色等分的份额
+ */
+function colorGradient(startColor = 'rgb(0, 0, 0)', endColor='rgb(255, 255, 255)', step = 10) {
+ let startRGB = hexToRGB(startColor, false)
+ let startR = startRGB[0]
+ let startG = startRGB[1]
+ let startB = startRGB[2]
+
+ let endRGB = hexToRGB(endColor, false)
+ let endR = endRGB[0]
+ let endG = endRGB[1]
+ let endB = endRGB[2]
+
+ // 求差值
+ let R = (endR - startR) / step
+ let G = (endG - startG) / step
+ let B = (endB - startB) / step
+
+ let colorArr = []
+ for (let i = 0; i < step; i++) {
+ // 计算每一步的hex值
+ let hex = rgbToHex(`rgb(${Math.round(R * i + startR)}, ${Math.round(G * i + startG)}, ${Math.round(B * i + startB)})`)
+ colorArr.push(hex)
+ }
+ return colorArr
+}
+
+/**
+ * 将hex的颜色表示方式转换为rgb表示方式
+ *
+ * @param {String} color 颜色
+ * @param {Boolean} str 是否返回字符串
+ * @return {Array|String} rgb的值
+ */
+function hexToRGB(color, str = true) {
+ let reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/
+
+ color = color.toLowerCase()
+ if (color && reg.test(color)) {
+ // #000 => #000000
+ if (color.length === 4) {
+ let colorNew = '#'
+ for (let i = 1; i < 4; i++) {
+ colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1))
+ }
+ color = colorNew
+ }
+ // 处理六位的颜色值
+ let colorChange = []
+ for (let i = 1; i < 7; i += 2) {
+ colorChange.push(parseInt("0x" + color.slice(i, i + 2)))
+ }
+ if (!str) {
+ return colorChange
+ } else {
+ return `rgb(${colorChange[0]}, ${colorChange[1]}, ${colorChange[2]})`
+ }
+ } else if (/^(rgb|RGB)/.test(color)) {
+ let arr = color.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(',')
+ return arr.map(item => Number(item))
+ } else {
+ return color
+ }
+}
+
+/**
+ * 将rgb的颜色表示方式转换成hex表示方式
+ *
+ * @param {Object} rgb rgb颜色值
+ */
+function rgbToHex(rgb) {
+ let reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/
+ if (/^(rgb|RGB)/.test(rgb)) {
+ let color = rgb.replace(/(?:\(|\)|rgb|GRB)*/g, "").split(',')
+ let strHex = '#'
+ for (let i = 0; i < color.length; i++) {
+ let hex = Number(color[i]).toString(16)
+ // 保证每个值否是两位数
+ hex = String(hex).length === 1 ? 0 + '' + hex: hex
+ if (hex === '0') {
+ hex += hex
+ }
+ strHex += hex
+ }
+ if (strHex.length !== 7) {
+ strHex = rgb
+ }
+ return strHex
+ } else if (reg.test(rgb)) {
+ let num = rgb.replace(/#/, '').split('')
+ if (num.length === 6) {
+ return rgb
+ } else if (num.length === 3) {
+ let numHex = '#'
+ for (let i = 0; i < num.length; i++) {
+ numHex += (num[i] + num[i])
+ }
+ return numHex
+ }
+ } else {
+ return rgb
+ }
+}
+
+/**
+ * 将传入的颜色值转换为rgba字符串
+ *
+ * @param {String} color 颜色
+ * @param {Number} alpha 透明度
+ */
+function colorToRGBA(color, alpha = 0.3) {
+ color = rgbToHex(color)
+ // 十六进制颜色值的正则表达式
+ let reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/
+
+ color = color.toLowerCase()
+ if (color && reg.test(color)) {
+ // #000 => #000000
+ if (color.length === 4) {
+ let colorNew = '#'
+ for (let i = 1; i < 4; i++) {
+ colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1))
+ }
+ color = colorNew
+ }
+ // 处理六位的颜色值
+ let colorChange = []
+ for (let i = 1; i < 7; i += 2) {
+ colorChange.push(parseInt("0x" + color.slice(i, i + 2)))
+ }
+ return `rgba(${colorChange[0]}, ${colorChange[1]}, ${colorChange[2]}, ${alpha})`
+ } else {
+ return color
+ }
+}
+
+export default {
+ COOL_BG_COLOR_COUNT: COOL_BG_COLOR_COUNT,
+ getTuniaoColorList,
+ getRandomColorClass,
+ getRandomCoolBgClass,
+ getBackgroundColorInternalClass,
+ getBackgroundColorStyle,
+ getFontColorInternalClass,
+ getFontColorStyle,
+ colorGradient,
+ hexToRGB,
+ rgbToHex,
+ colorToRGBA
+}
diff --git a/tuniao-ui/libs/function/deepClone.js b/tuniao-ui/libs/function/deepClone.js
new file mode 100644
index 0000000..81f4e42
--- /dev/null
+++ b/tuniao-ui/libs/function/deepClone.js
@@ -0,0 +1,29 @@
+/**
+ * 判断是否为数组
+ *
+ * @param {Object} arr
+ */
+function isArray(arr) {
+ return Object.prototype.toString.call(arr) === '[object Array]'
+}
+
+/**
+ * 深度复制数据
+ *
+ * @param {Object} obj
+ */
+function deepClone(obj) {
+ if ([null, undefined, NaN, false].includes(obj)) return obj
+ if (typeof obj !== 'object' && typeof obj !== 'function') {
+ return obj
+ }
+ var o = isArray(obj) ? [] : {}
+ for (let i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ o[i] = typeof obj[i] === 'object' ? deepClone(obj[i]) : obj[i]
+ }
+ }
+ return o
+}
+
+export default deepClone
\ No newline at end of file
diff --git a/tuniao-ui/libs/function/message.js b/tuniao-ui/libs/function/message.js
new file mode 100644
index 0000000..113cc0f
--- /dev/null
+++ b/tuniao-ui/libs/function/message.js
@@ -0,0 +1,74 @@
+/**
+ * 弹出系统内置的toast
+ */
+function toast(title, mask = false, cb = null, icon = 'none', duration = 1500) {
+ uni.showToast({
+ title: title,
+ icon: icon,
+ mask: mask,
+ duration: duration,
+ success: () => {
+ setTimeout(() => {
+ cb && cb()
+ }, duration)
+ }
+ })
+}
+
+/**
+ * 弹出内置的加载框
+ */
+function loading(title) {
+ uni.showLoading({
+ title: title,
+ mask: true
+ })
+}
+
+/**
+ * 弹出系统内置的modal
+ */
+function modal(title,
+ content,
+ confirmCb,
+ showCancel = false,
+ cancelCb = null,
+ confirmText = "确定",
+ cancelText = "取消") {
+ uni.showModal({
+ title: title,
+ content: content,
+ showCancel: showCancel,
+ cancelText: cancelText,
+ confirmText: confirmText,
+ success: (res) => {
+ if (res.cancel) {
+ cancelCb && cancelCb()
+ } else if (res.confirm) {
+ confirmCb && confirmCb()
+ }
+ }
+ })
+}
+
+/**
+ * 关闭系统内置toast
+ */
+function closeToast() {
+ uni.hideToast()
+}
+
+/**
+ * 关闭系统内置的加载框
+ */
+function closeLoading() {
+ uni.hideLoading()
+}
+
+export default {
+ toast,
+ loading,
+ modal,
+ closeToast,
+ closeLoading
+}
diff --git a/tuniao-ui/libs/function/number.js b/tuniao-ui/libs/function/number.js
new file mode 100644
index 0000000..ec64ff0
--- /dev/null
+++ b/tuniao-ui/libs/function/number.js
@@ -0,0 +1,128 @@
+/**
+ * 格式化数字字符串
+ * @param {String, Number} value 待格式化的字符串
+ * @param {Number} digits 保留位数
+ */
+function formatNumberString(value, digits = 2) {
+ let number = 0
+ // 判断是什么类型
+ if (typeof value === 'string') {
+ number = Number(value)
+ } else if (typeof value === 'number') {
+ number = value
+ }
+ if (isNaN(number) || number === 0) {
+ return 0
+ }
+
+ let maxNumber = Math.pow(10, digits) - 1
+ if (number > maxNumber) {
+ return `${maxNumber}+`
+ }
+
+ return number
+}
+
+/**
+ * 格式化数字字符串,往数字前添加0
+ *
+ * @param {Object} num 待格式化的数值
+ */
+function formatNumberAddZero(value) {
+ let number = 0
+ // 判断是什么类型
+ if (typeof value === 'string') {
+ number = Number(value)
+ } else if (typeof value === 'number') {
+ number = value
+ }
+ if (isNaN(number) || +number < 10) {
+ return '0' + number
+ } else {
+ return String(number)
+ }
+
+}
+
+/**
+ * 格式化数字,往数值后添加单位
+ *
+ * @param {Object} value 待格式化的数值
+ * @param {Object} digits 保留位数
+ */
+function formatNumberAddPriceUnit(value, digits = 2) {
+ // 数值分割点
+ const unitSplit = [
+ { value: 1, symbol: ''},
+ { value: 1E3, symbol: 'K'},
+ { value: 1E4, symbol: 'W'},
+ ]
+
+ const reg = /\.0+$|(\.[0=9]*[1-9])0+$/
+
+ let number = 0
+ // 判断是什么类型
+ if (typeof value === 'string') {
+ number = Number(value)
+ } else if (typeof value === 'number') {
+ number = value
+ }
+
+ let i
+ for (i = unitSplit.length - 1; i > 0; i--) {
+ if (number >= unitSplit[i].value) break
+ }
+ return (number / unitSplit[i].value).toFixed(digits).replace(reg, "$1") + unitSplit[i].symbol
+}
+
+/**
+ * 获取数值的整数位数
+ *
+ * @param {Object} number 数值
+ */
+function getDigit(number) {
+ let digit = -1
+ while (number >= 1) {
+ digit++
+ number = number / 10
+ }
+ return digit
+}
+
+/**
+ * 获取指定范围的随机数(返回整数)
+
+ * @param {Object} min 最小值
+ * @param {Object} max 最大值
+ */
+function random(min, max) {
+ if (min >= 0 && max > 0 && max >= min) {
+ let gab = max - min
+ return Math.random() * gab + min
+ } else {
+ return 0
+ }
+}
+
+/**
+ * 获取指定范围的随机数(返回整数)
+
+ * @param {Object} min 最小值
+ * @param {Object} max 最大值
+ */
+function randomInt(min, max) {
+ if (min >= 0 && max > 0 && max >= min) {
+ let gab = max - min + 1
+ return Math.floor(Math.random() * gab + min)
+ } else {
+ return 0
+ }
+}
+
+export default {
+ formatNumberString,
+ formatNumberAddZero,
+ formatNumberAddPriceUnit,
+ random,
+ randomInt
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/function/string.js b/tuniao-ui/libs/function/string.js
new file mode 100644
index 0000000..dadc24c
--- /dev/null
+++ b/tuniao-ui/libs/function/string.js
@@ -0,0 +1,69 @@
+/**
+ * 去掉字符串中空格
+ *
+ * @param {String} str 待处理的字符串
+ * @param {String} type 处理类型
+ */
+function trim(str, type = 'both') {
+ if (type === 'both') {
+ return str.replace(/^\s+|\s+$/g, "")
+ } else if (type === 'left') {
+ return str.replace(/^\s*/g, "")
+ } else if (type === 'right') {
+ return str.replace(/(\s*$)/g, "")
+ } else if (type === 'all') {
+ return str.replace(/\s+/g, "")
+ } else {
+ return str
+ }
+}
+
+/**
+ * 获取带单位的长度值
+ *
+ * @param {String} value 待处理的值
+ * @param {String} unit 单位
+ */
+function getLengthUnitValue(value, unit = 'rpx') {
+ if (!value) {
+ return ''
+ }
+ if (/(%|px|rpx|auto)$/.test(value)) return value
+ else return value + unit
+}
+
+/**
+ * 将驼峰命名的字符串转换为指定连接符来进行连接
+ *
+ * @param {Object} string 待转换的字符串
+ * @param {Object} replace 进行连接的字符
+ */
+function humpConvertChar(string, replace = '_') {
+ if (!string || !replace) {
+ return ''
+ }
+ return string.replace(/([A-Z])/g, `${replace}$1`).toLowerCase()
+}
+
+/**
+ * 将用指定连接符来进行连接的字符串转为驼峰命名的字符串
+ *
+ * @param {Object} string 待转换的字符串
+ * @param {Object} replace 进行连接的字符
+ */
+function charConvertHump(string, replace = '_') {
+ if (!string || !replace) {
+ return ''
+ }
+ let reg = RegExp(replace + "(\\w)", "g")
+ return string.replace(reg, function(all, letter) {
+ return letter.toUpperCase()
+ })
+}
+
+export default {
+ trim,
+ getLengthUnitValue,
+ humpConvertChar,
+ charConvertHump
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/function/test.js b/tuniao-ui/libs/function/test.js
new file mode 100644
index 0000000..94fddac
--- /dev/null
+++ b/tuniao-ui/libs/function/test.js
@@ -0,0 +1,232 @@
+/**
+ * 验证电子邮箱格式
+ */
+function email(value) {
+ return /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/.test(value);
+}
+
+/**
+ * 验证手机格式
+ */
+function mobile(value) {
+ return /^1[3-9]\d{9}$/.test(value)
+}
+
+/**
+ * 验证URL格式
+ */
+function url(value) {
+ return /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/.test(value)
+}
+
+/**
+ * 验证日期格式
+ */
+function date(value) {
+ return !/Invalid|NaN/.test(new Date(value).toString())
+}
+
+/**
+ * 验证ISO类型的日期格式
+ */
+function dateISO(value) {
+ return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value)
+}
+
+/**
+ * 验证十进制数字
+ */
+function number(value) {
+ return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value)
+}
+
+/**
+ * 验证整数
+ */
+function digits(value) {
+ return /^\d+$/.test(value)
+}
+
+/**
+ * 验证身份证号码
+ */
+function idCard(value) {
+ return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(
+ value)
+}
+
+/**
+ * 是否车牌号
+ */
+function carNo(value) {
+ // 新能源车牌
+ const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
+ // 旧车牌
+ const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
+ if (value.length === 7) {
+ return creg.test(value);
+ } else if (value.length === 8) {
+ return xreg.test(value);
+ } else {
+ return false;
+ }
+}
+
+/**
+ * 金额,只允许2位小数
+ */
+function amount(value) {
+ //金额,只允许保留两位小数
+ return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value);
+}
+
+/**
+ * 中文
+ */
+function chinese(value) {
+ let reg = /^[\u4e00-\u9fa5]+$/gi;
+ return reg.test(value);
+}
+
+/**
+ * 只能输入字母
+ */
+function letter(value) {
+ return /^[a-zA-Z]*$/.test(value);
+}
+
+/**
+ * 只能是字母或者数字
+ */
+function enOrNum(value) {
+ //英文或者数字
+ let reg = /^[0-9a-zA-Z]*$/g;
+ return reg.test(value);
+}
+
+/**
+ * 验证是否包含某个值
+ */
+function contains(value, param) {
+ return value.indexOf(param) >= 0
+}
+
+/**
+ * 验证一个值范围[min, max]
+ */
+function range(value, param) {
+ return value >= param[0] && value <= param[1]
+}
+
+/**
+ * 验证一个长度范围[min, max]
+ */
+function rangeLength(value, param) {
+ return value.length >= param[0] && value.length <= param[1]
+}
+
+/**
+ * 是否固定电话
+ */
+function landline(value) {
+ let reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/;
+ return reg.test(value);
+}
+
+/**
+ * 判断是否为空
+ */
+function empty(value) {
+ switch (typeof value) {
+ case 'undefined':
+ return true;
+ case 'string':
+ if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true;
+ break;
+ case 'boolean':
+ if (!value) return true;
+ break;
+ case 'number':
+ if (0 === value || isNaN(value)) return true;
+ break;
+ case 'object':
+ if (null === value || value.length === 0) return true;
+ for (var i in value) {
+ return false;
+ }
+ return true;
+ }
+ return false;
+}
+
+/**
+ * 是否json字符串
+ */
+function jsonString(value) {
+ if (typeof value == 'string') {
+ try {
+ var obj = JSON.parse(value);
+ if (typeof obj == 'object' && obj) {
+ return true;
+ } else {
+ return false;
+ }
+ } catch (e) {
+ return false;
+ }
+ }
+ return false;
+}
+
+
+/**
+ * 是否数组
+ */
+function array(value) {
+ if (typeof Array.isArray === "function") {
+ return Array.isArray(value);
+ } else {
+ return Object.prototype.toString.call(value) === "[object Array]";
+ }
+}
+
+/**
+ * 是否对象
+ */
+function object(value) {
+ return Object.prototype.toString.call(value) === '[object Object]';
+}
+
+/**
+ * 是否短信验证码
+ */
+function code(value, len = 6) {
+ return new RegExp(`^\\d{${len}}$`).test(value);
+}
+
+
+export default {
+ email,
+ mobile,
+ url,
+ date,
+ dateISO,
+ number,
+ digits,
+ idCard,
+ carNo,
+ amount,
+ chinese,
+ letter,
+ enOrNum,
+ contains,
+ range,
+ rangeLength,
+ empty,
+ isEmpty: empty,
+ jsonString,
+ landline,
+ object,
+ array,
+ code
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/function/updateCustomBarInfo.js b/tuniao-ui/libs/function/updateCustomBarInfo.js
new file mode 100644
index 0000000..eae9f45
--- /dev/null
+++ b/tuniao-ui/libs/function/updateCustomBarInfo.js
@@ -0,0 +1,44 @@
+/**
+ * 更新自定义顶部导航栏的高度
+ */
+function updateCustomBarInfo () {
+ return new Promise((resolve, reject) => {
+ uni.getSystemInfo({
+ success: (e) => {
+ let statusBarHeight = 0
+ let customBarHeight = 0
+ // #ifndef MP
+ statusBarHeight = e.statusBarHeight
+ if (e.platform == 'android') {
+ customBarHeight = e.statusBarHeight + 50
+ } else {
+ customBarHeight = e.statusBarHeight + 45
+ };
+ // #endif
+
+ // #ifdef MP-WEIXIN
+ statusBarHeight = e.statusBarHeight
+ let custom = wx.getMenuButtonBoundingClientRect()
+ customBarHeight = custom.bottom + ((custom.top - e.statusBarHeight) <= 4 ? (custom.top - e
+ .statusBarHeight) + 4 : (custom.top - e.statusBarHeight))
+ // #endif
+
+ // #ifdef MP-ALIPAY
+ statusBarHeight = e.statusBarHeight
+ customBarHeight = e.statusBarHeight + e.titleBarHeight
+ // #endif
+ resolve({
+ statusBarHeight,
+ customBarHeight
+ })
+ },
+ fail: (err) => {
+ console.log("获取设备信息失败", err);
+ reject()
+ }
+ })
+
+ })
+}
+
+export default updateCustomBarInfo
diff --git a/tuniao-ui/libs/function/uuid.js b/tuniao-ui/libs/function/uuid.js
new file mode 100644
index 0000000..e3cf39e
--- /dev/null
+++ b/tuniao-ui/libs/function/uuid.js
@@ -0,0 +1,41 @@
+/**
+ * 本算法来源于简书开源代码,详见:https://www.jianshu.com/p/fdbf293d0a85
+ * 全局唯一标识符(uuid,Globally Unique Identifier),也称作 uuid(Universally Unique IDentifier)
+ * 一般用于多个组件之间,给它一个唯一的标识符,或者v-for循环的时候,如果使用数组的index可能会导致更新列表出现问题
+ * 最可能的情况是左滑删除item或者对某条信息流"不喜欢"并去掉它的时候,会导致组件内的数据可能出现错乱
+ * v-for的时候,推荐使用后端返回的id而不是循环的index
+ * @param {Number} len uuid的长度
+ * @param {Boolean} firstT 将返回的首字母置为"t"
+ * @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制
+ */
+function uuid(len = 32, firstT = true, radix = null) {
+ let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
+ let uuid = []
+ radix = radix || chars.length
+
+ if (len) {
+ // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
+ for (let i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]
+ } else {
+ let r;
+ // rfc4122标准要求返回的uuid中,某些位为固定的字符
+ uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
+ uuid[14] = '4'
+
+ for (let i = 0; i < 36; i++) {
+ if (!uuid[i]) {
+ r = 0 | Math.random() * 16
+ uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]
+ }
+ }
+ }
+ // 移除第一个字符,并用t替代,因为第一个字符为数值时,该uuid不能用作id或者class
+ if (firstT) {
+ uuid.shift()
+ return 't' + uuid.join('')
+ } else {
+ return uuid.join('')
+ }
+}
+
+export default uuid
\ No newline at end of file
diff --git a/tuniao-ui/libs/luch-request/adapters/index.js b/tuniao-ui/libs/luch-request/adapters/index.js
new file mode 100644
index 0000000..5a478b5
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/adapters/index.js
@@ -0,0 +1,99 @@
+import buildURL from '../helpers/buildURL'
+import buildFullPath from '../core/buildFullPath'
+import settle from '../core/settle'
+import { isUndefined } from "../utils"
+
+/**
+ * 返回可选值存在的配置
+ * @param {Array} keys - 可选值数组
+ * @param {Object} config2 - 配置
+ * @return {{}} - 存在的配置项
+ */
+const mergeKeys = (keys, config2) => {
+ let config = {}
+ keys.forEach(prop => {
+ if (!isUndefined(config2[prop])) {
+ config[prop] = config2[prop]
+ }
+ })
+ return config
+}
+export default (config) => {
+ return new Promise((resolve, reject) => {
+ let fullPath = buildURL(buildFullPath(config.baseURL, config.url), config.params)
+ const _config = {
+ url: fullPath,
+ header: config.header,
+ complete: (response) => {
+ config.fullPath = fullPath
+ response.config = config
+ try {
+ // 对可能字符串不是json 的情况容错
+ if (typeof response.data === 'string') {
+ response.data = JSON.parse(response.data)
+ }
+ // eslint-disable-next-line no-empty
+ } catch (e) {
+ }
+ settle(resolve, reject, response)
+ }
+ }
+ let requestTask
+ if (config.method === 'UPLOAD') {
+ delete _config.header['content-type']
+ delete _config.header['Content-Type']
+ let otherConfig = {
+ // #ifdef MP-ALIPAY
+ fileType: config.fileType,
+ // #endif
+ filePath: config.filePath,
+ name: config.name
+ }
+ const optionalKeys = [
+ // #ifdef APP-PLUS || H5
+ 'files',
+ // #endif
+ // #ifdef H5
+ 'file',
+ // #endif
+ // #ifdef H5 || APP-PLUS
+ 'timeout',
+ // #endif
+ 'formData'
+ ]
+ requestTask = uni.uploadFile({..._config, ...otherConfig, ...mergeKeys(optionalKeys, config)})
+ } else if (config.method === 'DOWNLOAD') {
+ // #ifdef H5 || APP-PLUS
+ if (!isUndefined(config['timeout'])) {
+ _config['timeout'] = config['timeout']
+ }
+ // #endif
+ requestTask = uni.downloadFile(_config)
+ } else {
+ const optionalKeys = [
+ 'data',
+ 'method',
+ // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN
+ 'timeout',
+ // #endif
+ 'dataType',
+ // #ifndef MP-ALIPAY
+ 'responseType',
+ // #endif
+ // #ifdef APP-PLUS
+ 'sslVerify',
+ // #endif
+ // #ifdef H5
+ 'withCredentials',
+ // #endif
+ // #ifdef APP-PLUS
+ 'firstIpv4',
+ // #endif
+ ]
+ requestTask = uni.request({..._config,...mergeKeys(optionalKeys, config)})
+ }
+ if (config.getTask) {
+ config.getTask(requestTask, config)
+ }
+ })
+}
diff --git a/tuniao-ui/libs/luch-request/core/InterceptorManager.js b/tuniao-ui/libs/luch-request/core/InterceptorManager.js
new file mode 100644
index 0000000..3ea0d5e
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/core/InterceptorManager.js
@@ -0,0 +1,51 @@
+'use strict'
+
+
+function InterceptorManager() {
+ this.handlers = []
+}
+
+/**
+ * Add a new interceptor to the stack
+ *
+ * @param {Function} fulfilled The function to handle `then` for a `Promise`
+ * @param {Function} rejected The function to handle `reject` for a `Promise`
+ *
+ * @return {Number} An ID used to remove interceptor later
+ */
+InterceptorManager.prototype.use = function use(fulfilled, rejected) {
+ this.handlers.push({
+ fulfilled: fulfilled,
+ rejected: rejected
+ })
+ return this.handlers.length - 1
+}
+
+/**
+ * Remove an interceptor from the stack
+ *
+ * @param {Number} id The ID that was returned by `use`
+ */
+InterceptorManager.prototype.eject = function eject(id) {
+ if (this.handlers[id]) {
+ this.handlers[id] = null
+ }
+}
+
+/**
+ * Iterate over all the registered interceptors
+ *
+ * This method is particularly useful for skipping over any
+ * interceptors that may have become `null` calling `eject`.
+ *
+ * @param {Function} fn The function to call for each interceptor
+ */
+InterceptorManager.prototype.forEach = function forEach(fn) {
+ this.handlers.forEach(h => {
+ if (h !== null) {
+ fn(h)
+ }
+ })
+}
+
+export default InterceptorManager
diff --git a/tuniao-ui/libs/luch-request/core/Request.js b/tuniao-ui/libs/luch-request/core/Request.js
new file mode 100644
index 0000000..43bb14c
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/core/Request.js
@@ -0,0 +1,200 @@
+/**
+ * @Class Request
+ * @description luch-request http请求插件
+ * @version 3.0.7
+ * @Author lu-ch
+ * @Date 2021-09-04
+ * @Email webwork.s@qq.com
+ * 文档: https://www.quanzhan.co/luch-request/
+ * github: https://github.com/lei-mu/luch-request
+ * DCloud: http://ext.dcloud.net.cn/plugin?id=392
+ * HBuilderX: beat-3.0.4 alpha-3.0.4
+ */
+
+
+import dispatchRequest from './dispatchRequest'
+import InterceptorManager from './InterceptorManager'
+import mergeConfig from './mergeConfig'
+import defaults from './defaults'
+import { isPlainObject } from '../utils'
+import clone from '../utils/clone'
+
+export default class Request {
+ /**
+ * @param {Object} arg - 全局配置
+ * @param {String} arg.baseURL - 全局根路径
+ * @param {Object} arg.header - 全局header
+ * @param {String} arg.method = [GET|POST|PUT|DELETE|CONNECT|HEAD|OPTIONS|TRACE] - 全局默认请求方式
+ * @param {String} arg.dataType = [json] - 全局默认的dataType
+ * @param {String} arg.responseType = [text|arraybuffer] - 全局默认的responseType。支付宝小程序不支持
+ * @param {Object} arg.custom - 全局默认的自定义参数
+ * @param {Number} arg.timeout - 全局默认的超时时间,单位 ms。默认60000。H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付宝小程序
+ * @param {Boolean} arg.sslVerify - 全局默认的是否验证 ssl 证书。默认true.仅App安卓端支持(HBuilderX 2.3.3+)
+ * @param {Boolean} arg.withCredentials - 全局默认的跨域请求时是否携带凭证(cookies)。默认false。仅H5支持(HBuilderX 2.6.15+)
+ * @param {Boolean} arg.firstIpv4 - 全DNS解析时优先使用ipv4。默认false。仅 App-Android 支持 (HBuilderX 2.8.0+)
+ * @param {Function(statusCode):Boolean} arg.validateStatus - 全局默认的自定义验证器。默认statusCode >= 200 && statusCode < 300
+ */
+ constructor(arg = {}) {
+ if (!isPlainObject(arg)) {
+ arg = {}
+ console.warn('设置全局参数必须接收一个Object')
+ }
+ this.config = clone({...defaults, ...arg})
+ this.interceptors = {
+ request: new InterceptorManager(),
+ response: new InterceptorManager()
+ }
+ }
+
+ /**
+ * @Function
+ * @param {Request~setConfigCallback} f - 设置全局默认配置
+ */
+ setConfig(f) {
+ this.config = f(this.config)
+ }
+
+ middleware(config) {
+ config = mergeConfig(this.config, config)
+ let chain = [dispatchRequest, undefined]
+ let promise = Promise.resolve(config)
+
+ this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
+ chain.unshift(interceptor.fulfilled, interceptor.rejected)
+ })
+
+ this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
+ chain.push(interceptor.fulfilled, interceptor.rejected)
+ })
+
+ while (chain.length) {
+ promise = promise.then(chain.shift(), chain.shift())
+ }
+
+ return promise
+ }
+
+ /**
+ * @Function
+ * @param {Object} config - 请求配置项
+ * @prop {String} options.url - 请求路径
+ * @prop {Object} options.data - 请求参数
+ * @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型
+ * @prop {Object} [options.dataType = config.dataType] - 如果设为 json,会尝试对返回的数据做一次 JSON.parse
+ * @prop {Object} [options.header = config.header] - 请求header
+ * @prop {Object} [options.method = config.method] - 请求方法
+ * @returns {Promise}
+ */
+ request(config = {}) {
+ return this.middleware(config)
+ }
+
+ get(url, options = {}) {
+ return this.middleware({
+ url,
+ method: 'GET',
+ ...options
+ })
+ }
+
+ post(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'POST',
+ ...options
+ })
+ }
+
+ // #ifndef MP-ALIPAY
+ put(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'PUT',
+ ...options
+ })
+ }
+
+ // #endif
+
+ // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-BAIDU
+ delete(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'DELETE',
+ ...options
+ })
+ }
+
+ // #endif
+
+ // #ifdef H5 || MP-WEIXIN
+ connect(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'CONNECT',
+ ...options
+ })
+ }
+
+ // #endif
+
+ // #ifdef H5 || MP-WEIXIN || MP-BAIDU
+ head(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'HEAD',
+ ...options
+ })
+ }
+
+ // #endif
+
+ // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-BAIDU
+ options(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'OPTIONS',
+ ...options
+ })
+ }
+
+ // #endif
+
+ // #ifdef H5 || MP-WEIXIN
+ trace(url, data, options = {}) {
+ return this.middleware({
+ url,
+ data,
+ method: 'TRACE',
+ ...options
+ })
+ }
+
+ // #endif
+
+ upload(url, config = {}) {
+ config.url = url
+ config.method = 'UPLOAD'
+ return this.middleware(config)
+ }
+
+ download(url, config = {}) {
+ config.url = url
+ config.method = 'DOWNLOAD'
+ return this.middleware(config)
+ }
+}
+
+
+/**
+ * setConfig回调
+ * @return {Object} - 返回操作后的config
+ * @callback Request~setConfigCallback
+ * @param {Object} config - 全局默认config
+ */
diff --git a/tuniao-ui/libs/luch-request/core/buildFullPath.js b/tuniao-ui/libs/luch-request/core/buildFullPath.js
new file mode 100644
index 0000000..f2852f4
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/core/buildFullPath.js
@@ -0,0 +1,20 @@
+'use strict'
+
+import isAbsoluteURL from '../helpers/isAbsoluteURL'
+import combineURLs from '../helpers/combineURLs'
+
+/**
+ * Creates a new URL by combining the baseURL with the requestedURL,
+ * only when the requestedURL is not already an absolute URL.
+ * If the requestURL is absolute, this function returns the requestedURL untouched.
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} requestedURL Absolute or relative URL to combine
+ * @returns {string} The combined full path
+ */
+export default function buildFullPath(baseURL, requestedURL) {
+ if (baseURL && !isAbsoluteURL(requestedURL)) {
+ return combineURLs(baseURL, requestedURL)
+ }
+ return requestedURL
+}
diff --git a/tuniao-ui/libs/luch-request/core/defaults.js b/tuniao-ui/libs/luch-request/core/defaults.js
new file mode 100644
index 0000000..38afc3a
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/core/defaults.js
@@ -0,0 +1,30 @@
+/**
+ * 默认的全局配置
+ */
+
+
+export default {
+ baseURL: '',
+ header: {},
+ method: 'GET',
+ dataType: 'json',
+ // #ifndef MP-ALIPAY
+ responseType: 'text',
+ // #endif
+ custom: {},
+ // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN
+ timeout: 60000,
+ // #endif
+ // #ifdef APP-PLUS
+ sslVerify: true,
+ // #endif
+ // #ifdef H5
+ withCredentials: false,
+ // #endif
+ // #ifdef APP-PLUS
+ firstIpv4: false,
+ // #endif
+ validateStatus: function validateStatus(status) {
+ return status >= 200 && status < 300
+ }
+}
diff --git a/tuniao-ui/libs/luch-request/core/dispatchRequest.js b/tuniao-ui/libs/luch-request/core/dispatchRequest.js
new file mode 100644
index 0000000..c5f2c85
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/core/dispatchRequest.js
@@ -0,0 +1,6 @@
+import adapter from '../adapters/index'
+
+
+export default (config) => {
+ return adapter(config)
+}
diff --git a/tuniao-ui/libs/luch-request/core/mergeConfig.js b/tuniao-ui/libs/luch-request/core/mergeConfig.js
new file mode 100644
index 0000000..a3ccbf7
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/core/mergeConfig.js
@@ -0,0 +1,103 @@
+import {deepMerge, isUndefined} from '../utils'
+
+/**
+ * 合并局部配置优先的配置,如果局部有该配置项则用局部,如果全局有该配置项则用全局
+ * @param {Array} keys - 配置项
+ * @param {Object} globalsConfig - 当前的全局配置
+ * @param {Object} config2 - 局部配置
+ * @return {{}}
+ */
+const mergeKeys = (keys, globalsConfig, config2) => {
+ let config = {}
+ keys.forEach(prop => {
+ if (!isUndefined(config2[prop])) {
+ config[prop] = config2[prop]
+ } else if (!isUndefined(globalsConfig[prop])) {
+ config[prop] = globalsConfig[prop]
+ }
+ })
+ return config
+}
+/**
+ *
+ * @param globalsConfig - 当前实例的全局配置
+ * @param config2 - 当前的局部配置
+ * @return - 合并后的配置
+ */
+export default (globalsConfig, config2 = {}) => {
+ const method = config2.method || globalsConfig.method || 'GET'
+ let config = {
+ baseURL: globalsConfig.baseURL || '',
+ method: method,
+ url: config2.url || '',
+ params: config2.params || {},
+ custom: {...(globalsConfig.custom || {}), ...(config2.custom || {})},
+ header: deepMerge(globalsConfig.header || {}, config2.header || {})
+ }
+ const defaultToConfig2Keys = ['getTask', 'validateStatus']
+ config = {...config, ...mergeKeys(defaultToConfig2Keys, globalsConfig, config2)}
+
+ // eslint-disable-next-line no-empty
+ if (method === 'DOWNLOAD') {
+ // #ifdef H5 || APP-PLUS
+ if (!isUndefined(config2.timeout)) {
+ config['timeout'] = config2['timeout']
+ } else if (!isUndefined(globalsConfig.timeout)) {
+ config['timeout'] = globalsConfig['timeout']
+ }
+ // #endif
+ } else if (method === 'UPLOAD') {
+ delete config.header['content-type']
+ delete config.header['Content-Type']
+ const uploadKeys = [
+ // #ifdef APP-PLUS || H5
+ 'files',
+ // #endif
+ // #ifdef MP-ALIPAY
+ 'fileType',
+ // #endif
+ // #ifdef H5
+ 'file',
+ // #endif
+ 'filePath',
+ 'name',
+ // #ifdef H5 || APP-PLUS
+ 'timeout',
+ // #endif
+ 'formData',
+ ]
+ uploadKeys.forEach(prop => {
+ if (!isUndefined(config2[prop])) {
+ config[prop] = config2[prop]
+ }
+ })
+ // #ifdef H5 || APP-PLUS
+ if (isUndefined(config.timeout) && !isUndefined(globalsConfig.timeout)) {
+ config['timeout'] = globalsConfig['timeout']
+ }
+ // #endif
+ } else {
+ const defaultsKeys = [
+ 'data',
+ // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN
+ 'timeout',
+ // #endif
+ 'dataType',
+ // #ifndef MP-ALIPAY
+ 'responseType',
+ // #endif
+ // #ifdef APP-PLUS
+ 'sslVerify',
+ // #endif
+ // #ifdef H5
+ 'withCredentials',
+ // #endif
+ // #ifdef APP-PLUS
+ 'firstIpv4',
+ // #endif
+ ]
+ config = {...config, ...mergeKeys(defaultsKeys, globalsConfig, config2)}
+ }
+
+ return config
+}
diff --git a/tuniao-ui/libs/luch-request/core/settle.js b/tuniao-ui/libs/luch-request/core/settle.js
new file mode 100644
index 0000000..b2f1659
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/core/settle.js
@@ -0,0 +1,16 @@
+/**
+ * Resolve or reject a Promise based on response status.
+ *
+ * @param {Function} resolve A function that resolves the promise.
+ * @param {Function} reject A function that rejects the promise.
+ * @param {object} response The response.
+ */
+export default function settle(resolve, reject, response) {
+ const validateStatus = response.config.validateStatus
+ const status = response.statusCode
+ if (status && (!validateStatus || validateStatus(status))) {
+ resolve(response)
+ } else {
+ reject(response)
+ }
+}
diff --git a/tuniao-ui/libs/luch-request/helpers/buildURL.js b/tuniao-ui/libs/luch-request/helpers/buildURL.js
new file mode 100644
index 0000000..d26dc30
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/helpers/buildURL.js
@@ -0,0 +1,69 @@
+'use strict'
+
+import * as utils from './../utils'
+
+function encode(val) {
+ return encodeURIComponent(val).
+ replace(/%40/gi, '@').
+ replace(/%3A/gi, ':').
+ replace(/%24/g, '$').
+ replace(/%2C/gi, ',').
+ replace(/%20/g, '+').
+ replace(/%5B/gi, '[').
+ replace(/%5D/gi, ']')
+}
+
+/**
+ * Build a URL by appending params to the end
+ *
+ * @param {string} url The base of the url (e.g., http://www.google.com)
+ * @param {object} [params] The params to be appended
+ * @returns {string} The formatted url
+ */
+export default function buildURL(url, params) {
+ /*eslint no-param-reassign:0*/
+ if (!params) {
+ return url
+ }
+
+ var serializedParams
+ if (utils.isURLSearchParams(params)) {
+ serializedParams = params.toString()
+ } else {
+ var parts = []
+
+ utils.forEach(params, function serialize(val, key) {
+ if (val === null || typeof val === 'undefined') {
+ return
+ }
+
+ if (utils.isArray(val)) {
+ key = key + '[]'
+ } else {
+ val = [val]
+ }
+
+ utils.forEach(val, function parseValue(v) {
+ if (utils.isDate(v)) {
+ v = v.toISOString()
+ } else if (utils.isObject(v)) {
+ v = JSON.stringify(v)
+ }
+ parts.push(encode(key) + '=' + encode(v))
+ })
+ })
+
+ serializedParams = parts.join('&')
+ }
+
+ if (serializedParams) {
+ var hashmarkIndex = url.indexOf('#')
+ if (hashmarkIndex !== -1) {
+ url = url.slice(0, hashmarkIndex)
+ }
+
+ url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams
+ }
+
+ return url
+}
diff --git a/tuniao-ui/libs/luch-request/helpers/combineURLs.js b/tuniao-ui/libs/luch-request/helpers/combineURLs.js
new file mode 100644
index 0000000..7b9d1ef
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/helpers/combineURLs.js
@@ -0,0 +1,14 @@
+'use strict'
+
+/**
+ * Creates a new URL by combining the specified URLs
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} relativeURL The relative URL
+ * @returns {string} The combined URL
+ */
+export default function combineURLs(baseURL, relativeURL) {
+ return relativeURL
+ ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
+ : baseURL
+}
diff --git a/tuniao-ui/libs/luch-request/helpers/isAbsoluteURL.js b/tuniao-ui/libs/luch-request/helpers/isAbsoluteURL.js
new file mode 100644
index 0000000..2a82517
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/helpers/isAbsoluteURL.js
@@ -0,0 +1,14 @@
+'use strict'
+
+/**
+ * Determines whether the specified URL is absolute
+ *
+ * @param {string} url The URL to test
+ * @returns {boolean} True if the specified URL is absolute, otherwise false
+ */
+export default function isAbsoluteURL(url) {
+ // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL).
+ // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
+ // by any combination of letters, digits, plus, period, or hyphen.
+ return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url)
+}
diff --git a/tuniao-ui/libs/luch-request/index.d.ts b/tuniao-ui/libs/luch-request/index.d.ts
new file mode 100644
index 0000000..e939ce1
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/index.d.ts
@@ -0,0 +1,116 @@
+type AnyObject = Record
+type HttpPromise = Promise>;
+type Tasks = UniApp.RequestTask | UniApp.UploadTask | UniApp.DownloadTask
+export interface RequestTask {
+ abort: () => void;
+ offHeadersReceived: () => void;
+ onHeadersReceived: () => void;
+}
+export interface HttpRequestConfig {
+ /** 请求基地址 */
+ baseURL?: string;
+ /** 请求服务器接口地址 */
+ url?: string;
+
+ /** 请求查询参数,自动拼接为查询字符串 */
+ params?: AnyObject;
+ /** 请求体参数 */
+ data?: AnyObject;
+
+ /** 文件对应的 key */
+ name?: string;
+ /** HTTP 请求中其他额外的 form data */
+ formData?: AnyObject;
+ /** 要上传文件资源的路径。 */
+ filePath?: string;
+ /** 需要上传的文件列表。使用 files 时,filePath 和 name 不生效,App、H5( 2.6.15+) */
+ files?: Array<{
+ name?: string;
+ file?: File;
+ uri: string;
+ }>;
+ /** 要上传的文件对象,仅H5(2.6.15+)支持 */
+ file?: File;
+
+ /** 请求头信息 */
+ header?: AnyObject;
+ /** 请求方式 */
+ method?: "GET" | "POST" | "PUT" | "DELETE" | "CONNECT" | "HEAD" | "OPTIONS" | "TRACE" | "UPLOAD" | "DOWNLOAD";
+ /** 如果设为 json,会尝试对返回的数据做一次 JSON.parse */
+ dataType?: string;
+ /** 设置响应的数据类型,支付宝小程序不支持 */
+ responseType?: "text" | "arraybuffer";
+ /** 自定义参数 */
+ custom?: AnyObject;
+ /** 超时时间,仅微信小程序(2.10.0)、支付宝小程序支持 */
+ timeout?: number;
+ /** DNS解析时优先使用ipv4,仅 App-Android 支持 (HBuilderX 2.8.0+) */
+ firstIpv4?: boolean;
+ /** 验证 ssl 证书 仅5+App安卓端支持(HBuilderX 2.3.3+) */
+ sslVerify?: boolean;
+ /** 跨域请求时是否携带凭证(cookies)仅H5支持(HBuilderX 2.6.15+) */
+ withCredentials?: boolean;
+
+ /** 返回当前请求的task, options。请勿在此处修改options。 */
+ getTask?: (task: T, options: HttpRequestConfig) => void;
+ /** 全局自定义验证器 */
+ validateStatus?: (statusCode: number) => boolean | void;
+}
+export interface HttpResponse {
+ config: HttpRequestConfig;
+ statusCode: number;
+ cookies: Array;
+ data: T;
+ errMsg: string;
+ header: AnyObject;
+}
+export interface HttpUploadResponse {
+ config: HttpRequestConfig;
+ statusCode: number;
+ data: T;
+ errMsg: string;
+}
+export interface HttpDownloadResponse extends HttpResponse {
+ tempFilePath: string;
+}
+export interface HttpError {
+ config: HttpRequestConfig;
+ statusCode?: number;
+ cookies?: Array;
+ data?: any;
+ errMsg: string;
+ header?: AnyObject;
+}
+export interface HttpInterceptorManager {
+ use(
+ onFulfilled?: (config: V) => Promise | V,
+ onRejected?: (config: E) => Promise | E
+ ): void;
+ eject(id: number): void;
+}
+export abstract class HttpRequestAbstract {
+ constructor(config?: HttpRequestConfig);
+ config: HttpRequestConfig;
+ interceptors: {
+ request: HttpInterceptorManager;
+ response: HttpInterceptorManager;
+ }
+ middleware(config: HttpRequestConfig): HttpPromise;
+ request(config: HttpRequestConfig): HttpPromise;
+ get(url: string, config?: HttpRequestConfig): HttpPromise;
+ upload(url: string, config?: HttpRequestConfig): HttpPromise;
+ delete(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise;
+ head(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise;
+ post(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise;
+ put(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise;
+ connect(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise;
+ options(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise;
+ trace(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise;
+
+ download(url: string, config?: HttpRequestConfig): Promise;
+
+ setConfig(onSend: (config: HttpRequestConfig) => HttpRequestConfig): void;
+}
+
+declare class HttpRequest extends HttpRequestAbstract { }
+export default HttpRequest;
diff --git a/tuniao-ui/libs/luch-request/index.js b/tuniao-ui/libs/luch-request/index.js
new file mode 100644
index 0000000..d8fe348
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/index.js
@@ -0,0 +1,2 @@
+import Request from './core/Request'
+export default Request
diff --git a/tuniao-ui/libs/luch-request/utils.js b/tuniao-ui/libs/luch-request/utils.js
new file mode 100644
index 0000000..0b5bf21
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/utils.js
@@ -0,0 +1,135 @@
+'use strict'
+
+// utils is a library of generic helper functions non-specific to axios
+
+var toString = Object.prototype.toString
+
+/**
+ * Determine if a value is an Array
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Array, otherwise false
+ */
+export function isArray (val) {
+ return toString.call(val) === '[object Array]'
+}
+
+
+/**
+ * Determine if a value is an Object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Object, otherwise false
+ */
+export function isObject (val) {
+ return val !== null && typeof val === 'object'
+}
+
+/**
+ * Determine if a value is a Date
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Date, otherwise false
+ */
+export function isDate (val) {
+ return toString.call(val) === '[object Date]'
+}
+
+/**
+ * Determine if a value is a URLSearchParams object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a URLSearchParams object, otherwise false
+ */
+export function isURLSearchParams (val) {
+ return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams
+}
+
+
+/**
+ * Iterate over an Array or an Object invoking a function for each item.
+ *
+ * If `obj` is an Array callback will be called passing
+ * the value, index, and complete array for each item.
+ *
+ * If 'obj' is an Object callback will be called passing
+ * the value, key, and complete object for each property.
+ *
+ * @param {Object|Array} obj The object to iterate
+ * @param {Function} fn The callback to invoke for each item
+ */
+export function forEach (obj, fn) {
+ // Don't bother if no value provided
+ if (obj === null || typeof obj === 'undefined') {
+ return
+ }
+
+ // Force an array if not already something iterable
+ if (typeof obj !== 'object') {
+ /*eslint no-param-reassign:0*/
+ obj = [obj]
+ }
+
+ if (isArray(obj)) {
+ // Iterate over array values
+ for (var i = 0, l = obj.length; i < l; i++) {
+ fn.call(null, obj[i], i, obj)
+ }
+ } else {
+ // Iterate over object keys
+ for (var key in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
+ fn.call(null, obj[key], key, obj)
+ }
+ }
+ }
+}
+
+/**
+ * 是否为boolean 值
+ * @param val
+ * @returns {boolean}
+ */
+export function isBoolean(val) {
+ return typeof val === 'boolean'
+}
+
+/**
+ * 是否为真正的对象{} new Object
+ * @param {any} obj - 检测的对象
+ * @returns {boolean}
+ */
+export function isPlainObject(obj) {
+ return Object.prototype.toString.call(obj) === '[object Object]'
+}
+
+
+
+/**
+ * Function equal to merge with the difference being that no reference
+ * to original objects is kept.
+ *
+ * @see merge
+ * @param {Object} obj1 Object to merge
+ * @returns {Object} Result of all merge properties
+ */
+export function deepMerge(/* obj1, obj2, obj3, ... */) {
+ let result = {}
+ function assignValue(val, key) {
+ if (typeof result[key] === 'object' && typeof val === 'object') {
+ result[key] = deepMerge(result[key], val)
+ } else if (typeof val === 'object') {
+ result[key] = deepMerge({}, val)
+ } else {
+ result[key] = val
+ }
+ }
+ for (let i = 0, l = arguments.length; i < l; i++) {
+ forEach(arguments[i], assignValue)
+ }
+ return result
+}
+
+export function isUndefined (val) {
+ return typeof val === 'undefined'
+}
diff --git a/tuniao-ui/libs/luch-request/utils/clone.js b/tuniao-ui/libs/luch-request/utils/clone.js
new file mode 100644
index 0000000..2fee704
--- /dev/null
+++ b/tuniao-ui/libs/luch-request/utils/clone.js
@@ -0,0 +1,264 @@
+/* eslint-disable */
+var clone = (function() {
+ 'use strict';
+
+ function _instanceof(obj, type) {
+ return type != null && obj instanceof type;
+ }
+
+ var nativeMap;
+ try {
+ nativeMap = Map;
+ } catch(_) {
+ // maybe a reference error because no `Map`. Give it a dummy value that no
+ // value will ever be an instanceof.
+ nativeMap = function() {};
+ }
+
+ var nativeSet;
+ try {
+ nativeSet = Set;
+ } catch(_) {
+ nativeSet = function() {};
+ }
+
+ var nativePromise;
+ try {
+ nativePromise = Promise;
+ } catch(_) {
+ nativePromise = function() {};
+ }
+
+ /**
+ * Clones (copies) an Object using deep copying.
+ *
+ * This function supports circular references by default, but if you are certain
+ * there are no circular references in your object, you can save some CPU time
+ * by calling clone(obj, false).
+ *
+ * Caution: if `circular` is false and `parent` contains circular references,
+ * your program may enter an infinite loop and crash.
+ *
+ * @param `parent` - the object to be cloned
+ * @param `circular` - set to true if the object to be cloned may contain
+ * circular references. (optional - true by default)
+ * @param `depth` - set to a number if the object is only to be cloned to
+ * a particular depth. (optional - defaults to Infinity)
+ * @param `prototype` - sets the prototype to be used when cloning an object.
+ * (optional - defaults to parent prototype).
+ * @param `includeNonEnumerable` - set to true if the non-enumerable properties
+ * should be cloned as well. Non-enumerable properties on the prototype
+ * chain will be ignored. (optional - false by default)
+ */
+ function clone(parent, circular, depth, prototype, includeNonEnumerable) {
+ if (typeof circular === 'object') {
+ depth = circular.depth;
+ prototype = circular.prototype;
+ includeNonEnumerable = circular.includeNonEnumerable;
+ circular = circular.circular;
+ }
+ // maintain two arrays for circular references, where corresponding parents
+ // and children have the same index
+ var allParents = [];
+ var allChildren = [];
+
+ var useBuffer = typeof Buffer != 'undefined';
+
+ if (typeof circular == 'undefined')
+ circular = true;
+
+ if (typeof depth == 'undefined')
+ depth = Infinity;
+
+ // recurse this function so we don't reset allParents and allChildren
+ function _clone(parent, depth) {
+ // cloning null always returns null
+ if (parent === null)
+ return null;
+
+ if (depth === 0)
+ return parent;
+
+ var child;
+ var proto;
+ if (typeof parent != 'object') {
+ return parent;
+ }
+
+ if (_instanceof(parent, nativeMap)) {
+ child = new nativeMap();
+ } else if (_instanceof(parent, nativeSet)) {
+ child = new nativeSet();
+ } else if (_instanceof(parent, nativePromise)) {
+ child = new nativePromise(function (resolve, reject) {
+ parent.then(function(value) {
+ resolve(_clone(value, depth - 1));
+ }, function(err) {
+ reject(_clone(err, depth - 1));
+ });
+ });
+ } else if (clone.__isArray(parent)) {
+ child = [];
+ } else if (clone.__isRegExp(parent)) {
+ child = new RegExp(parent.source, __getRegExpFlags(parent));
+ if (parent.lastIndex) child.lastIndex = parent.lastIndex;
+ } else if (clone.__isDate(parent)) {
+ child = new Date(parent.getTime());
+ } else if (useBuffer && Buffer.isBuffer(parent)) {
+ if (Buffer.from) {
+ // Node.js >= 5.10.0
+ child = Buffer.from(parent);
+ } else {
+ // Older Node.js versions
+ child = new Buffer(parent.length);
+ parent.copy(child);
+ }
+ return child;
+ } else if (_instanceof(parent, Error)) {
+ child = Object.create(parent);
+ } else {
+ if (typeof prototype == 'undefined') {
+ proto = Object.getPrototypeOf(parent);
+ child = Object.create(proto);
+ }
+ else {
+ child = Object.create(prototype);
+ proto = prototype;
+ }
+ }
+
+ if (circular) {
+ var index = allParents.indexOf(parent);
+
+ if (index != -1) {
+ return allChildren[index];
+ }
+ allParents.push(parent);
+ allChildren.push(child);
+ }
+
+ if (_instanceof(parent, nativeMap)) {
+ parent.forEach(function(value, key) {
+ var keyChild = _clone(key, depth - 1);
+ var valueChild = _clone(value, depth - 1);
+ child.set(keyChild, valueChild);
+ });
+ }
+ if (_instanceof(parent, nativeSet)) {
+ parent.forEach(function(value) {
+ var entryChild = _clone(value, depth - 1);
+ child.add(entryChild);
+ });
+ }
+
+ for (var i in parent) {
+ var attrs = Object.getOwnPropertyDescriptor(parent, i);
+ if (attrs) {
+ child[i] = _clone(parent[i], depth - 1);
+ }
+
+ try {
+ var objProperty = Object.getOwnPropertyDescriptor(parent, i);
+ if (objProperty.set === 'undefined') {
+ // no setter defined. Skip cloning this property
+ continue;
+ }
+ child[i] = _clone(parent[i], depth - 1);
+ } catch(e){
+ if (e instanceof TypeError) {
+ // when in strict mode, TypeError will be thrown if child[i] property only has a getter
+ // we can't do anything about this, other than inform the user that this property cannot be set.
+ continue
+ } else if (e instanceof ReferenceError) {
+ //this may happen in non strict mode
+ continue
+ }
+ }
+
+ }
+
+ if (Object.getOwnPropertySymbols) {
+ var symbols = Object.getOwnPropertySymbols(parent);
+ for (var i = 0; i < symbols.length; i++) {
+ // Don't need to worry about cloning a symbol because it is a primitive,
+ // like a number or string.
+ var symbol = symbols[i];
+ var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);
+ if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {
+ continue;
+ }
+ child[symbol] = _clone(parent[symbol], depth - 1);
+ Object.defineProperty(child, symbol, descriptor);
+ }
+ }
+
+ if (includeNonEnumerable) {
+ var allPropertyNames = Object.getOwnPropertyNames(parent);
+ for (var i = 0; i < allPropertyNames.length; i++) {
+ var propertyName = allPropertyNames[i];
+ var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);
+ if (descriptor && descriptor.enumerable) {
+ continue;
+ }
+ child[propertyName] = _clone(parent[propertyName], depth - 1);
+ Object.defineProperty(child, propertyName, descriptor);
+ }
+ }
+
+ return child;
+ }
+
+ return _clone(parent, depth);
+ }
+
+ /**
+ * Simple flat clone using prototype, accepts only objects, usefull for property
+ * override on FLAT configuration object (no nested props).
+ *
+ * USE WITH CAUTION! This may not behave as you wish if you do not know how this
+ * works.
+ */
+ clone.clonePrototype = function clonePrototype(parent) {
+ if (parent === null)
+ return null;
+
+ var c = function () {};
+ c.prototype = parent;
+ return new c();
+ };
+
+// private utility functions
+
+ function __objToStr(o) {
+ return Object.prototype.toString.call(o);
+ }
+ clone.__objToStr = __objToStr;
+
+ function __isDate(o) {
+ return typeof o === 'object' && __objToStr(o) === '[object Date]';
+ }
+ clone.__isDate = __isDate;
+
+ function __isArray(o) {
+ return typeof o === 'object' && __objToStr(o) === '[object Array]';
+ }
+ clone.__isArray = __isArray;
+
+ function __isRegExp(o) {
+ return typeof o === 'object' && __objToStr(o) === '[object RegExp]';
+ }
+ clone.__isRegExp = __isRegExp;
+
+ function __getRegExpFlags(re) {
+ var flags = '';
+ if (re.global) flags += 'g';
+ if (re.ignoreCase) flags += 'i';
+ if (re.multiline) flags += 'm';
+ return flags;
+ }
+ clone.__getRegExpFlags = __getRegExpFlags;
+
+ return clone;
+})();
+
+export default clone
diff --git a/tuniao-ui/libs/mixin/components_color.js b/tuniao-ui/libs/mixin/components_color.js
new file mode 100644
index 0000000..4cda18a
--- /dev/null
+++ b/tuniao-ui/libs/mixin/components_color.js
@@ -0,0 +1,47 @@
+module.exports = {
+ data() {
+
+ },
+ props: {
+ // 背景颜色
+ backgroundColor: {
+ type: String,
+ default: ''
+ },
+ // 字体颜色
+ fontColor: {
+ type: String,
+ default: ''
+ },
+ // 字体大小
+ fontSize: {
+ type: Number,
+ default: 0
+ },
+ // 字体大小单位
+ fontUnit: {
+ type: String,
+ default: 'rpx'
+ }
+ },
+ computed: {
+ backgroundColorStyle() {
+ return this.$tn.color.getBackgroundColorStyle(this.backgroundColor)
+ },
+ backgroundColorClass() {
+ return this.$tn.color.getBackgroundColorInternalClass(this.backgroundColor)
+ },
+ fontColorStyle() {
+ return this.$tn.color.getFontColorStyle(this.fontColor)
+ },
+ fontColorClass() {
+ return this.$tn.color.getFontColorInternalClass(this.fontColor)
+ },
+ fontSizeStyle() {
+ return this.$tn.string.getLengthUnitValue(this.fontSize, this.fontUnit)
+ }
+ },
+ methods: {
+
+ }
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/mixin/mixin.js b/tuniao-ui/libs/mixin/mixin.js
new file mode 100644
index 0000000..1110dde
--- /dev/null
+++ b/tuniao-ui/libs/mixin/mixin.js
@@ -0,0 +1,68 @@
+module.exports = {
+ data() {
+ return {}
+ },
+ onLoad() {
+ // getRect挂载再$t上,用为这个方法需要使用in(this),所以无法把它独立层一个单独的文件导出
+ this.$tn.getRect = this._tGetRect
+ },
+ beforeDestory() {
+ // 判断当前页面是否存在parent和children
+ // 组件销毁时,移除子组件在父组件children数组中的实例,释放资源,避免数据混乱
+ if (this.parent && uni.$tn.test.array(this.parent.children)) {
+ // 组件销毁时,移除子组件在父组件children数组中的实例
+ const childrenList = this.parent.children
+ childrenList.map((child, index) => {
+ // 如果相对,则移除
+ if (child === this) {
+ childrenList.splice(index, 1)
+ }
+ })
+ }
+ },
+ methods: {
+ /**
+ * 查询节点信息
+ * 当前方法在支付宝小程序中无法获取组件跟接点的尺寸
+ * 解决办法:为组件根部再套一个没有任何作用的view元素
+ */
+ _tGetRect(selector, all) {
+ return new Promise((resolve) => {
+ uni.createSelectorQuery()
+ .in(this)[all ? 'selectAll' : 'select'](selector)
+ .boundingClientRect(rect => {
+ if (all && Array.isArray(rect) && rect.length) {
+ resolve(rect)
+ }
+ if (!all && rect) {
+ resolve(rect)
+ }
+ })
+ .exec()
+ })
+ },
+ /**
+ * 获取父组件的数据
+ */
+ getParentData(parentName = '') {
+ // 避免再created中定义parent变量
+ if (!this.parent) this.parent = false
+ // 通过获取父组件实例
+ // 将父组件this中对应的参数,赋值给本组件的parentData对象中对应的属性
+ // 头条小程序不支持通过this.parent.xxx去监听父组件参数的变化,所以需要本方法进行实现
+ this.parent = this.$tn.$parent.call(this, parentName)
+ if (this.parent) {
+ // 遍历parentData中的属性,将parent中同名的属性赋值给parentData
+ Object.keys(this.parentData).map(key => {
+ this.parentData[key] = this.parent[key]
+ })
+ }
+ },
+ /**
+ * 阻止事件冒泡
+ */
+ preventEvent(e) {
+ e && e.stopPropagation && e.stopPropagation()
+ }
+ }
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/mixin/mpShare.js b/tuniao-ui/libs/mixin/mpShare.js
new file mode 100644
index 0000000..b1ae33f
--- /dev/null
+++ b/tuniao-ui/libs/mixin/mpShare.js
@@ -0,0 +1,30 @@
+module.exports = {
+ onLoad() {
+ // 设置默认的转发参数
+ this.$tn.mpShare = {
+ // 分享的标题,默认为小程序名称
+ title: '',
+ // 分享的路径,默认为当前页面
+ path: '',
+ // 分享时显示的图片,默认为当前页面截图
+ imageUrl: '',
+ // 当前页面是否可以分享
+ share: true
+ }
+ if (!this.$tn.mpShare.share) {
+ uni.hideShareMenu()
+ }
+ },
+ onShareAppMessage() {
+ return this.$tn.mpShare
+ },
+ // #ifdef MP-WEIXIN
+ onShareTimeline() {
+ return {
+ title: this.$tn.mpShare.title,
+ query: this.$tn.mpShare.path.substring(this.$tn.mpShare.path.indexOf('?') + 1, this.$tn.mpShare.path.length),
+ imageUrl: this.$tn.mpShare.imageUrl
+ }
+ }
+ // #endif
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/mixin/touch.js b/tuniao-ui/libs/mixin/touch.js
new file mode 100644
index 0000000..a77445f
--- /dev/null
+++ b/tuniao-ui/libs/mixin/touch.js
@@ -0,0 +1,61 @@
+const MIN_DISTANCE = 10
+
+function getDirection(x, y) {
+ if (x > y && x > MIN_DISTANCE) {
+ return 'horizontal'
+ }
+ if (y > x && y > MIN_DISTANCE) {
+ return 'vertical'
+ }
+ return ''
+}
+
+export default {
+ methods: {
+ touchStart(e) {
+ this.resetTouchStatus()
+ const touch = this.getTouchPoint(e)
+ this.startX = touch.x
+ this.startY = touch.y
+ },
+ touchMove(e) {
+ const touch = this.getTouchPoint(e)
+ this.deltaX = touch.x - this.startX
+ this.deltaY = touch.y - this.startY
+ this.offsetX = Math.abs(this.deltaX)
+ this.offsetY = Math.abs(this.deltaY)
+ this.direction = this.direction || getDirection(this.offsetX, this.offsetY)
+ },
+ getTouchPoint(e) {
+ if (!e) {
+ return {
+ x: 0,
+ y: 0
+ }
+ }
+ if (e.touches && e.touches[0]) {
+ return {
+ x: e.touches[0].pageX,
+ y: e.touches[0].pageY
+ }
+ }
+ if (e.changedTouches && e.changedTouches[0]) {
+ return {
+ x: e.changedTouches[0].pageX,
+ y: e.changedTouches[0].pageY
+ }
+ }
+ return {
+ x: e.clientX || 0,
+ y: e.clientY || 0
+ }
+ },
+ resetTouchStatus() {
+ this.direction = ''
+ this.deltaX = 0
+ this.deltaY = 0
+ this.offsetX = 0
+ this.offsetY = 0
+ }
+ }
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/utils/area.js b/tuniao-ui/libs/utils/area.js
new file mode 100644
index 0000000..0d602e9
--- /dev/null
+++ b/tuniao-ui/libs/utils/area.js
@@ -0,0 +1 @@
+var areaData=[[[{"label":"东城区","value":"110101"},{"label":"西城区","value":"110102"},{"label":"朝阳区","value":"110105"},{"label":"丰台区","value":"110106"},{"label":"石景山区","value":"110107"},{"label":"海淀区","value":"110108"},{"label":"门头沟区","value":"110109"},{"label":"房山区","value":"110111"},{"label":"通州区","value":"110112"},{"label":"顺义区","value":"110113"},{"label":"昌平区","value":"110114"},{"label":"大兴区","value":"110115"},{"label":"怀柔区","value":"110116"},{"label":"平谷区","value":"110117"},{"label":"密云区","value":"110118"},{"label":"延庆区","value":"110119"}]],[[{"label":"和平区","value":"120101"},{"label":"河东区","value":"120102"},{"label":"河西区","value":"120103"},{"label":"南开区","value":"120104"},{"label":"河北区","value":"120105"},{"label":"红桥区","value":"120106"},{"label":"东丽区","value":"120110"},{"label":"西青区","value":"120111"},{"label":"津南区","value":"120112"},{"label":"北辰区","value":"120113"},{"label":"武清区","value":"120114"},{"label":"宝坻区","value":"120115"},{"label":"滨海新区","value":"120116"},{"label":"宁河区","value":"120117"},{"label":"静海区","value":"120118"},{"label":"蓟州区","value":"120119"}]],[[{"label":"长安区","value":"130102"},{"label":"桥西区","value":"130104"},{"label":"新华区","value":"130105"},{"label":"井陉矿区","value":"130107"},{"label":"裕华区","value":"130108"},{"label":"藁城区","value":"130109"},{"label":"鹿泉区","value":"130110"},{"label":"栾城区","value":"130111"},{"label":"井陉县","value":"130121"},{"label":"正定县","value":"130123"},{"label":"行唐县","value":"130125"},{"label":"灵寿县","value":"130126"},{"label":"高邑县","value":"130127"},{"label":"深泽县","value":"130128"},{"label":"赞皇县","value":"130129"},{"label":"无极县","value":"130130"},{"label":"平山县","value":"130131"},{"label":"元氏县","value":"130132"},{"label":"赵县","value":"130133"},{"label":"石家庄高新技术产业开发区","value":"130171"},{"label":"石家庄循环化工园区","value":"130172"},{"label":"辛集市","value":"130181"},{"label":"晋州市","value":"130183"},{"label":"新乐市","value":"130184"}],[{"label":"路南区","value":"130202"},{"label":"路北区","value":"130203"},{"label":"古冶区","value":"130204"},{"label":"开平区","value":"130205"},{"label":"丰南区","value":"130207"},{"label":"丰润区","value":"130208"},{"label":"曹妃甸区","value":"130209"},{"label":"滦县","value":"130223"},{"label":"滦南县","value":"130224"},{"label":"乐亭县","value":"130225"},{"label":"迁西县","value":"130227"},{"label":"玉田县","value":"130229"},{"label":"唐山市芦台经济技术开发区","value":"130271"},{"label":"唐山市汉沽管理区","value":"130272"},{"label":"唐山高新技术产业开发区","value":"130273"},{"label":"河北唐山海港经济开发区","value":"130274"},{"label":"遵化市","value":"130281"},{"label":"迁安市","value":"130283"}],[{"label":"海港区","value":"130302"},{"label":"山海关区","value":"130303"},{"label":"北戴河区","value":"130304"},{"label":"抚宁区","value":"130306"},{"label":"青龙满族自治县","value":"130321"},{"label":"昌黎县","value":"130322"},{"label":"卢龙县","value":"130324"},{"label":"秦皇岛市经济技术开发区","value":"130371"},{"label":"北戴河新区","value":"130372"}],[{"label":"邯山区","value":"130402"},{"label":"丛台区","value":"130403"},{"label":"复兴区","value":"130404"},{"label":"峰峰矿区","value":"130406"},{"label":"肥乡区","value":"130407"},{"label":"永年区","value":"130408"},{"label":"临漳县","value":"130423"},{"label":"成安县","value":"130424"},{"label":"大名县","value":"130425"},{"label":"涉县","value":"130426"},{"label":"磁县","value":"130427"},{"label":"邱县","value":"130430"},{"label":"鸡泽县","value":"130431"},{"label":"广平县","value":"130432"},{"label":"馆陶县","value":"130433"},{"label":"魏县","value":"130434"},{"label":"曲周县","value":"130435"},{"label":"邯郸经济技术开发区","value":"130471"},{"label":"邯郸冀南新区","value":"130473"},{"label":"武安市","value":"130481"}],[{"label":"桥东区","value":"130502"},{"label":"桥西区","value":"130503"},{"label":"邢台县","value":"130521"},{"label":"临城县","value":"130522"},{"label":"内丘县","value":"130523"},{"label":"柏乡县","value":"130524"},{"label":"隆尧县","value":"130525"},{"label":"任县","value":"130526"},{"label":"南和县","value":"130527"},{"label":"宁晋县","value":"130528"},{"label":"巨鹿县","value":"130529"},{"label":"新河县","value":"130530"},{"label":"广宗县","value":"130531"},{"label":"平乡县","value":"130532"},{"label":"威县","value":"130533"},{"label":"清河县","value":"130534"},{"label":"临西县","value":"130535"},{"label":"河北邢台经济开发区","value":"130571"},{"label":"南宫市","value":"130581"},{"label":"沙河市","value":"130582"}],[{"label":"竞秀区","value":"130602"},{"label":"莲池区","value":"130606"},{"label":"满城区","value":"130607"},{"label":"清苑区","value":"130608"},{"label":"徐水区","value":"130609"},{"label":"涞水县","value":"130623"},{"label":"阜平县","value":"130624"},{"label":"定兴县","value":"130626"},{"label":"唐县","value":"130627"},{"label":"高阳县","value":"130628"},{"label":"容城县","value":"130629"},{"label":"涞源县","value":"130630"},{"label":"望都县","value":"130631"},{"label":"安新县","value":"130632"},{"label":"易县","value":"130633"},{"label":"曲阳县","value":"130634"},{"label":"蠡县","value":"130635"},{"label":"顺平县","value":"130636"},{"label":"博野县","value":"130637"},{"label":"雄县","value":"130638"},{"label":"保定高新技术产业开发区","value":"130671"},{"label":"保定白沟新城","value":"130672"},{"label":"涿州市","value":"130681"},{"label":"定州市","value":"130682"},{"label":"安国市","value":"130683"},{"label":"高碑店市","value":"130684"}],[{"label":"桥东区","value":"130702"},{"label":"桥西区","value":"130703"},{"label":"宣化区","value":"130705"},{"label":"下花园区","value":"130706"},{"label":"万全区","value":"130708"},{"label":"崇礼区","value":"130709"},{"label":"张北县","value":"130722"},{"label":"康保县","value":"130723"},{"label":"沽源县","value":"130724"},{"label":"尚义县","value":"130725"},{"label":"蔚县","value":"130726"},{"label":"阳原县","value":"130727"},{"label":"怀安县","value":"130728"},{"label":"怀来县","value":"130730"},{"label":"涿鹿县","value":"130731"},{"label":"赤城县","value":"130732"},{"label":"张家口市高新技术产业开发区","value":"130771"},{"label":"张家口市察北管理区","value":"130772"},{"label":"张家口市塞北管理区","value":"130773"}],[{"label":"双桥区","value":"130802"},{"label":"双滦区","value":"130803"},{"label":"鹰手营子矿区","value":"130804"},{"label":"承德县","value":"130821"},{"label":"兴隆县","value":"130822"},{"label":"滦平县","value":"130824"},{"label":"隆化县","value":"130825"},{"label":"丰宁满族自治县","value":"130826"},{"label":"宽城满族自治县","value":"130827"},{"label":"围场满族蒙古族自治县","value":"130828"},{"label":"承德高新技术产业开发区","value":"130871"},{"label":"平泉市","value":"130881"}],[{"label":"新华区","value":"130902"},{"label":"运河区","value":"130903"},{"label":"沧县","value":"130921"},{"label":"青县","value":"130922"},{"label":"东光县","value":"130923"},{"label":"海兴县","value":"130924"},{"label":"盐山县","value":"130925"},{"label":"肃宁县","value":"130926"},{"label":"南皮县","value":"130927"},{"label":"吴桥县","value":"130928"},{"label":"献县","value":"130929"},{"label":"孟村回族自治县","value":"130930"},{"label":"河北沧州经济开发区","value":"130971"},{"label":"沧州高新技术产业开发区","value":"130972"},{"label":"沧州渤海新区","value":"130973"},{"label":"泊头市","value":"130981"},{"label":"任丘市","value":"130982"},{"label":"黄骅市","value":"130983"},{"label":"河间市","value":"130984"}],[{"label":"安次区","value":"131002"},{"label":"广阳区","value":"131003"},{"label":"固安县","value":"131022"},{"label":"永清县","value":"131023"},{"label":"香河县","value":"131024"},{"label":"大城县","value":"131025"},{"label":"文安县","value":"131026"},{"label":"大厂回族自治县","value":"131028"},{"label":"廊坊经济技术开发区","value":"131071"},{"label":"霸州市","value":"131081"},{"label":"三河市","value":"131082"}],[{"label":"桃城区","value":"131102"},{"label":"冀州区","value":"131103"},{"label":"枣强县","value":"131121"},{"label":"武邑县","value":"131122"},{"label":"武强县","value":"131123"},{"label":"饶阳县","value":"131124"},{"label":"安平县","value":"131125"},{"label":"故城县","value":"131126"},{"label":"景县","value":"131127"},{"label":"阜城县","value":"131128"},{"label":"河北衡水经济开发区","value":"131171"},{"label":"衡水滨湖新区","value":"131172"},{"label":"深州市","value":"131182"}]],[[{"label":"小店区","value":"140105"},{"label":"迎泽区","value":"140106"},{"label":"杏花岭区","value":"140107"},{"label":"尖草坪区","value":"140108"},{"label":"万柏林区","value":"140109"},{"label":"晋源区","value":"140110"},{"label":"清徐县","value":"140121"},{"label":"阳曲县","value":"140122"},{"label":"娄烦县","value":"140123"},{"label":"山西转型综合改革示范区","value":"140171"},{"label":"古交市","value":"140181"}],[{"label":"城区","value":"140202"},{"label":"矿区","value":"140203"},{"label":"南郊区","value":"140211"},{"label":"新荣区","value":"140212"},{"label":"阳高县","value":"140221"},{"label":"天镇县","value":"140222"},{"label":"广灵县","value":"140223"},{"label":"灵丘县","value":"140224"},{"label":"浑源县","value":"140225"},{"label":"左云县","value":"140226"},{"label":"大同县","value":"140227"},{"label":"山西大同经济开发区","value":"140271"}],[{"label":"城区","value":"140302"},{"label":"矿区","value":"140303"},{"label":"郊区","value":"140311"},{"label":"平定县","value":"140321"},{"label":"盂县","value":"140322"},{"label":"山西阳泉经济开发区","value":"140371"}],[{"label":"城区","value":"140402"},{"label":"郊区","value":"140411"},{"label":"长治县","value":"140421"},{"label":"襄垣县","value":"140423"},{"label":"屯留县","value":"140424"},{"label":"平顺县","value":"140425"},{"label":"黎城县","value":"140426"},{"label":"壶关县","value":"140427"},{"label":"长子县","value":"140428"},{"label":"武乡县","value":"140429"},{"label":"沁县","value":"140430"},{"label":"沁源县","value":"140431"},{"label":"山西长治高新技术产业园区","value":"140471"},{"label":"潞城市","value":"140481"}],[{"label":"城区","value":"140502"},{"label":"沁水县","value":"140521"},{"label":"阳城县","value":"140522"},{"label":"陵川县","value":"140524"},{"label":"泽州县","value":"140525"},{"label":"高平市","value":"140581"}],[{"label":"朔城区","value":"140602"},{"label":"平鲁区","value":"140603"},{"label":"山阴县","value":"140621"},{"label":"应县","value":"140622"},{"label":"右玉县","value":"140623"},{"label":"怀仁县","value":"140624"},{"label":"山西朔州经济开发区","value":"140671"}],[{"label":"榆次区","value":"140702"},{"label":"榆社县","value":"140721"},{"label":"左权县","value":"140722"},{"label":"和顺县","value":"140723"},{"label":"昔阳县","value":"140724"},{"label":"寿阳县","value":"140725"},{"label":"太谷县","value":"140726"},{"label":"祁县","value":"140727"},{"label":"平遥县","value":"140728"},{"label":"灵石县","value":"140729"},{"label":"介休市","value":"140781"}],[{"label":"盐湖区","value":"140802"},{"label":"临猗县","value":"140821"},{"label":"万荣县","value":"140822"},{"label":"闻喜县","value":"140823"},{"label":"稷山县","value":"140824"},{"label":"新绛县","value":"140825"},{"label":"绛县","value":"140826"},{"label":"垣曲县","value":"140827"},{"label":"夏县","value":"140828"},{"label":"平陆县","value":"140829"},{"label":"芮城县","value":"140830"},{"label":"永济市","value":"140881"},{"label":"河津市","value":"140882"}],[{"label":"忻府区","value":"140902"},{"label":"定襄县","value":"140921"},{"label":"五台县","value":"140922"},{"label":"代县","value":"140923"},{"label":"繁峙县","value":"140924"},{"label":"宁武县","value":"140925"},{"label":"静乐县","value":"140926"},{"label":"神池县","value":"140927"},{"label":"五寨县","value":"140928"},{"label":"岢岚县","value":"140929"},{"label":"河曲县","value":"140930"},{"label":"保德县","value":"140931"},{"label":"偏关县","value":"140932"},{"label":"五台山风景名胜区","value":"140971"},{"label":"原平市","value":"140981"}],[{"label":"尧都区","value":"141002"},{"label":"曲沃县","value":"141021"},{"label":"翼城县","value":"141022"},{"label":"襄汾县","value":"141023"},{"label":"洪洞县","value":"141024"},{"label":"古县","value":"141025"},{"label":"安泽县","value":"141026"},{"label":"浮山县","value":"141027"},{"label":"吉县","value":"141028"},{"label":"乡宁县","value":"141029"},{"label":"大宁县","value":"141030"},{"label":"隰县","value":"141031"},{"label":"永和县","value":"141032"},{"label":"蒲县","value":"141033"},{"label":"汾西县","value":"141034"},{"label":"侯马市","value":"141081"},{"label":"霍州市","value":"141082"}],[{"label":"离石区","value":"141102"},{"label":"文水县","value":"141121"},{"label":"交城县","value":"141122"},{"label":"兴县","value":"141123"},{"label":"临县","value":"141124"},{"label":"柳林县","value":"141125"},{"label":"石楼县","value":"141126"},{"label":"岚县","value":"141127"},{"label":"方山县","value":"141128"},{"label":"中阳县","value":"141129"},{"label":"交口县","value":"141130"},{"label":"孝义市","value":"141181"},{"label":"汾阳市","value":"141182"}]],[[{"label":"新城区","value":"150102"},{"label":"回民区","value":"150103"},{"label":"玉泉区","value":"150104"},{"label":"赛罕区","value":"150105"},{"label":"土默特左旗","value":"150121"},{"label":"托克托县","value":"150122"},{"label":"和林格尔县","value":"150123"},{"label":"清水河县","value":"150124"},{"label":"武川县","value":"150125"},{"label":"呼和浩特金海工业园区","value":"150171"},{"label":"呼和浩特经济技术开发区","value":"150172"}],[{"label":"东河区","value":"150202"},{"label":"昆都仑区","value":"150203"},{"label":"青山区","value":"150204"},{"label":"石拐区","value":"150205"},{"label":"白云鄂博矿区","value":"150206"},{"label":"九原区","value":"150207"},{"label":"土默特右旗","value":"150221"},{"label":"固阳县","value":"150222"},{"label":"达尔罕茂明安联合旗","value":"150223"},{"label":"包头稀土高新技术产业开发区","value":"150271"}],[{"label":"海勃湾区","value":"150302"},{"label":"海南区","value":"150303"},{"label":"乌达区","value":"150304"}],[{"label":"红山区","value":"150402"},{"label":"元宝山区","value":"150403"},{"label":"松山区","value":"150404"},{"label":"阿鲁科尔沁旗","value":"150421"},{"label":"巴林左旗","value":"150422"},{"label":"巴林右旗","value":"150423"},{"label":"林西县","value":"150424"},{"label":"克什克腾旗","value":"150425"},{"label":"翁牛特旗","value":"150426"},{"label":"喀喇沁旗","value":"150428"},{"label":"宁城县","value":"150429"},{"label":"敖汉旗","value":"150430"}],[{"label":"科尔沁区","value":"150502"},{"label":"科尔沁左翼中旗","value":"150521"},{"label":"科尔沁左翼后旗","value":"150522"},{"label":"开鲁县","value":"150523"},{"label":"库伦旗","value":"150524"},{"label":"奈曼旗","value":"150525"},{"label":"扎鲁特旗","value":"150526"},{"label":"通辽经济技术开发区","value":"150571"},{"label":"霍林郭勒市","value":"150581"}],[{"label":"东胜区","value":"150602"},{"label":"康巴什区","value":"150603"},{"label":"达拉特旗","value":"150621"},{"label":"准格尔旗","value":"150622"},{"label":"鄂托克前旗","value":"150623"},{"label":"鄂托克旗","value":"150624"},{"label":"杭锦旗","value":"150625"},{"label":"乌审旗","value":"150626"},{"label":"伊金霍洛旗","value":"150627"}],[{"label":"海拉尔区","value":"150702"},{"label":"扎赉诺尔区","value":"150703"},{"label":"阿荣旗","value":"150721"},{"label":"莫力达瓦达斡尔族自治旗","value":"150722"},{"label":"鄂伦春自治旗","value":"150723"},{"label":"鄂温克族自治旗","value":"150724"},{"label":"陈巴尔虎旗","value":"150725"},{"label":"新巴尔虎左旗","value":"150726"},{"label":"新巴尔虎右旗","value":"150727"},{"label":"满洲里市","value":"150781"},{"label":"牙克石市","value":"150782"},{"label":"扎兰屯市","value":"150783"},{"label":"额尔古纳市","value":"150784"},{"label":"根河市","value":"150785"}],[{"label":"临河区","value":"150802"},{"label":"五原县","value":"150821"},{"label":"磴口县","value":"150822"},{"label":"乌拉特前旗","value":"150823"},{"label":"乌拉特中旗","value":"150824"},{"label":"乌拉特后旗","value":"150825"},{"label":"杭锦后旗","value":"150826"}],[{"label":"集宁区","value":"150902"},{"label":"卓资县","value":"150921"},{"label":"化德县","value":"150922"},{"label":"商都县","value":"150923"},{"label":"兴和县","value":"150924"},{"label":"凉城县","value":"150925"},{"label":"察哈尔右翼前旗","value":"150926"},{"label":"察哈尔右翼中旗","value":"150927"},{"label":"察哈尔右翼后旗","value":"150928"},{"label":"四子王旗","value":"150929"},{"label":"丰镇市","value":"150981"}],[{"label":"乌兰浩特市","value":"152201"},{"label":"阿尔山市","value":"152202"},{"label":"科尔沁右翼前旗","value":"152221"},{"label":"科尔沁右翼中旗","value":"152222"},{"label":"扎赉特旗","value":"152223"},{"label":"突泉县","value":"152224"}],[{"label":"二连浩特市","value":"152501"},{"label":"锡林浩特市","value":"152502"},{"label":"阿巴嘎旗","value":"152522"},{"label":"苏尼特左旗","value":"152523"},{"label":"苏尼特右旗","value":"152524"},{"label":"东乌珠穆沁旗","value":"152525"},{"label":"西乌珠穆沁旗","value":"152526"},{"label":"太仆寺旗","value":"152527"},{"label":"镶黄旗","value":"152528"},{"label":"正镶白旗","value":"152529"},{"label":"正蓝旗","value":"152530"},{"label":"多伦县","value":"152531"},{"label":"乌拉盖管委会","value":"152571"}],[{"label":"阿拉善左旗","value":"152921"},{"label":"阿拉善右旗","value":"152922"},{"label":"额济纳旗","value":"152923"},{"label":"内蒙古阿拉善经济开发区","value":"152971"}]],[[{"label":"和平区","value":"210102"},{"label":"沈河区","value":"210103"},{"label":"大东区","value":"210104"},{"label":"皇姑区","value":"210105"},{"label":"铁西区","value":"210106"},{"label":"苏家屯区","value":"210111"},{"label":"浑南区","value":"210112"},{"label":"沈北新区","value":"210113"},{"label":"于洪区","value":"210114"},{"label":"辽中区","value":"210115"},{"label":"康平县","value":"210123"},{"label":"法库县","value":"210124"},{"label":"新民市","value":"210181"}],[{"label":"中山区","value":"210202"},{"label":"西岗区","value":"210203"},{"label":"沙河口区","value":"210204"},{"label":"甘井子区","value":"210211"},{"label":"旅顺口区","value":"210212"},{"label":"金州区","value":"210213"},{"label":"普兰店区","value":"210214"},{"label":"长海县","value":"210224"},{"label":"瓦房店市","value":"210281"},{"label":"庄河市","value":"210283"}],[{"label":"铁东区","value":"210302"},{"label":"铁西区","value":"210303"},{"label":"立山区","value":"210304"},{"label":"千山区","value":"210311"},{"label":"台安县","value":"210321"},{"label":"岫岩满族自治县","value":"210323"},{"label":"海城市","value":"210381"}],[{"label":"新抚区","value":"210402"},{"label":"东洲区","value":"210403"},{"label":"望花区","value":"210404"},{"label":"顺城区","value":"210411"},{"label":"抚顺县","value":"210421"},{"label":"新宾满族自治县","value":"210422"},{"label":"清原满族自治县","value":"210423"}],[{"label":"平山区","value":"210502"},{"label":"溪湖区","value":"210503"},{"label":"明山区","value":"210504"},{"label":"南芬区","value":"210505"},{"label":"本溪满族自治县","value":"210521"},{"label":"桓仁满族自治县","value":"210522"}],[{"label":"元宝区","value":"210602"},{"label":"振兴区","value":"210603"},{"label":"振安区","value":"210604"},{"label":"宽甸满族自治县","value":"210624"},{"label":"东港市","value":"210681"},{"label":"凤城市","value":"210682"}],[{"label":"古塔区","value":"210702"},{"label":"凌河区","value":"210703"},{"label":"太和区","value":"210711"},{"label":"黑山县","value":"210726"},{"label":"义县","value":"210727"},{"label":"凌海市","value":"210781"},{"label":"北镇市","value":"210782"}],[{"label":"站前区","value":"210802"},{"label":"西市区","value":"210803"},{"label":"鲅鱼圈区","value":"210804"},{"label":"老边区","value":"210811"},{"label":"盖州市","value":"210881"},{"label":"大石桥市","value":"210882"}],[{"label":"海州区","value":"210902"},{"label":"新邱区","value":"210903"},{"label":"太平区","value":"210904"},{"label":"清河门区","value":"210905"},{"label":"细河区","value":"210911"},{"label":"阜新蒙古族自治县","value":"210921"},{"label":"彰武县","value":"210922"}],[{"label":"白塔区","value":"211002"},{"label":"文圣区","value":"211003"},{"label":"宏伟区","value":"211004"},{"label":"弓长岭区","value":"211005"},{"label":"太子河区","value":"211011"},{"label":"辽阳县","value":"211021"},{"label":"灯塔市","value":"211081"}],[{"label":"双台子区","value":"211102"},{"label":"兴隆台区","value":"211103"},{"label":"大洼区","value":"211104"},{"label":"盘山县","value":"211122"}],[{"label":"银州区","value":"211202"},{"label":"清河区","value":"211204"},{"label":"铁岭县","value":"211221"},{"label":"西丰县","value":"211223"},{"label":"昌图县","value":"211224"},{"label":"调兵山市","value":"211281"},{"label":"开原市","value":"211282"}],[{"label":"双塔区","value":"211302"},{"label":"龙城区","value":"211303"},{"label":"朝阳县","value":"211321"},{"label":"建平县","value":"211322"},{"label":"喀喇沁左翼蒙古族自治县","value":"211324"},{"label":"北票市","value":"211381"},{"label":"凌源市","value":"211382"}],[{"label":"连山区","value":"211402"},{"label":"龙港区","value":"211403"},{"label":"南票区","value":"211404"},{"label":"绥中县","value":"211421"},{"label":"建昌县","value":"211422"},{"label":"兴城市","value":"211481"}]],[[{"label":"南关区","value":"220102"},{"label":"宽城区","value":"220103"},{"label":"朝阳区","value":"220104"},{"label":"二道区","value":"220105"},{"label":"绿园区","value":"220106"},{"label":"双阳区","value":"220112"},{"label":"九台区","value":"220113"},{"label":"农安县","value":"220122"},{"label":"长春经济技术开发区","value":"220171"},{"label":"长春净月高新技术产业开发区","value":"220172"},{"label":"长春高新技术产业开发区","value":"220173"},{"label":"长春汽车经济技术开发区","value":"220174"},{"label":"榆树市","value":"220182"},{"label":"德惠市","value":"220183"}],[{"label":"昌邑区","value":"220202"},{"label":"龙潭区","value":"220203"},{"label":"船营区","value":"220204"},{"label":"丰满区","value":"220211"},{"label":"永吉县","value":"220221"},{"label":"吉林经济开发区","value":"220271"},{"label":"吉林高新技术产业开发区","value":"220272"},{"label":"吉林中国新加坡食品区","value":"220273"},{"label":"蛟河市","value":"220281"},{"label":"桦甸市","value":"220282"},{"label":"舒兰市","value":"220283"},{"label":"磐石市","value":"220284"}],[{"label":"铁西区","value":"220302"},{"label":"铁东区","value":"220303"},{"label":"梨树县","value":"220322"},{"label":"伊通满族自治县","value":"220323"},{"label":"公主岭市","value":"220381"},{"label":"双辽市","value":"220382"}],[{"label":"龙山区","value":"220402"},{"label":"西安区","value":"220403"},{"label":"东丰县","value":"220421"},{"label":"东辽县","value":"220422"}],[{"label":"东昌区","value":"220502"},{"label":"二道江区","value":"220503"},{"label":"通化县","value":"220521"},{"label":"辉南县","value":"220523"},{"label":"柳河县","value":"220524"},{"label":"梅河口市","value":"220581"},{"label":"集安市","value":"220582"}],[{"label":"浑江区","value":"220602"},{"label":"江源区","value":"220605"},{"label":"抚松县","value":"220621"},{"label":"靖宇县","value":"220622"},{"label":"长白朝鲜族自治县","value":"220623"},{"label":"临江市","value":"220681"}],[{"label":"宁江区","value":"220702"},{"label":"前郭尔罗斯蒙古族自治县","value":"220721"},{"label":"长岭县","value":"220722"},{"label":"乾安县","value":"220723"},{"label":"吉林松原经济开发区","value":"220771"},{"label":"扶余市","value":"220781"}],[{"label":"洮北区","value":"220802"},{"label":"镇赉县","value":"220821"},{"label":"通榆县","value":"220822"},{"label":"吉林白城经济开发区","value":"220871"},{"label":"洮南市","value":"220881"},{"label":"大安市","value":"220882"}],[{"label":"延吉市","value":"222401"},{"label":"图们市","value":"222402"},{"label":"敦化市","value":"222403"},{"label":"珲春市","value":"222404"},{"label":"龙井市","value":"222405"},{"label":"和龙市","value":"222406"},{"label":"汪清县","value":"222424"},{"label":"安图县","value":"222426"}]],[[{"label":"道里区","value":"230102"},{"label":"南岗区","value":"230103"},{"label":"道外区","value":"230104"},{"label":"平房区","value":"230108"},{"label":"松北区","value":"230109"},{"label":"香坊区","value":"230110"},{"label":"呼兰区","value":"230111"},{"label":"阿城区","value":"230112"},{"label":"双城区","value":"230113"},{"label":"依兰县","value":"230123"},{"label":"方正县","value":"230124"},{"label":"宾县","value":"230125"},{"label":"巴彦县","value":"230126"},{"label":"木兰县","value":"230127"},{"label":"通河县","value":"230128"},{"label":"延寿县","value":"230129"},{"label":"尚志市","value":"230183"},{"label":"五常市","value":"230184"}],[{"label":"龙沙区","value":"230202"},{"label":"建华区","value":"230203"},{"label":"铁锋区","value":"230204"},{"label":"昂昂溪区","value":"230205"},{"label":"富拉尔基区","value":"230206"},{"label":"碾子山区","value":"230207"},{"label":"梅里斯达斡尔族区","value":"230208"},{"label":"龙江县","value":"230221"},{"label":"依安县","value":"230223"},{"label":"泰来县","value":"230224"},{"label":"甘南县","value":"230225"},{"label":"富裕县","value":"230227"},{"label":"克山县","value":"230229"},{"label":"克东县","value":"230230"},{"label":"拜泉县","value":"230231"},{"label":"讷河市","value":"230281"}],[{"label":"鸡冠区","value":"230302"},{"label":"恒山区","value":"230303"},{"label":"滴道区","value":"230304"},{"label":"梨树区","value":"230305"},{"label":"城子河区","value":"230306"},{"label":"麻山区","value":"230307"},{"label":"鸡东县","value":"230321"},{"label":"虎林市","value":"230381"},{"label":"密山市","value":"230382"}],[{"label":"向阳区","value":"230402"},{"label":"工农区","value":"230403"},{"label":"南山区","value":"230404"},{"label":"兴安区","value":"230405"},{"label":"东山区","value":"230406"},{"label":"兴山区","value":"230407"},{"label":"萝北县","value":"230421"},{"label":"绥滨县","value":"230422"}],[{"label":"尖山区","value":"230502"},{"label":"岭东区","value":"230503"},{"label":"四方台区","value":"230505"},{"label":"宝山区","value":"230506"},{"label":"集贤县","value":"230521"},{"label":"友谊县","value":"230522"},{"label":"宝清县","value":"230523"},{"label":"饶河县","value":"230524"}],[{"label":"萨尔图区","value":"230602"},{"label":"龙凤区","value":"230603"},{"label":"让胡路区","value":"230604"},{"label":"红岗区","value":"230605"},{"label":"大同区","value":"230606"},{"label":"肇州县","value":"230621"},{"label":"肇源县","value":"230622"},{"label":"林甸县","value":"230623"},{"label":"杜尔伯特蒙古族自治县","value":"230624"},{"label":"大庆高新技术产业开发区","value":"230671"}],[{"label":"伊春区","value":"230702"},{"label":"南岔区","value":"230703"},{"label":"友好区","value":"230704"},{"label":"西林区","value":"230705"},{"label":"翠峦区","value":"230706"},{"label":"新青区","value":"230707"},{"label":"美溪区","value":"230708"},{"label":"金山屯区","value":"230709"},{"label":"五营区","value":"230710"},{"label":"乌马河区","value":"230711"},{"label":"汤旺河区","value":"230712"},{"label":"带岭区","value":"230713"},{"label":"乌伊岭区","value":"230714"},{"label":"红星区","value":"230715"},{"label":"上甘岭区","value":"230716"},{"label":"嘉荫县","value":"230722"},{"label":"铁力市","value":"230781"}],[{"label":"向阳区","value":"230803"},{"label":"前进区","value":"230804"},{"label":"东风区","value":"230805"},{"label":"郊区","value":"230811"},{"label":"桦南县","value":"230822"},{"label":"桦川县","value":"230826"},{"label":"汤原县","value":"230828"},{"label":"同江市","value":"230881"},{"label":"富锦市","value":"230882"},{"label":"抚远市","value":"230883"}],[{"label":"新兴区","value":"230902"},{"label":"桃山区","value":"230903"},{"label":"茄子河区","value":"230904"},{"label":"勃利县","value":"230921"}],[{"label":"东安区","value":"231002"},{"label":"阳明区","value":"231003"},{"label":"爱民区","value":"231004"},{"label":"西安区","value":"231005"},{"label":"林口县","value":"231025"},{"label":"牡丹江经济技术开发区","value":"231071"},{"label":"绥芬河市","value":"231081"},{"label":"海林市","value":"231083"},{"label":"宁安市","value":"231084"},{"label":"穆棱市","value":"231085"},{"label":"东宁市","value":"231086"}],[{"label":"爱辉区","value":"231102"},{"label":"嫩江县","value":"231121"},{"label":"逊克县","value":"231123"},{"label":"孙吴县","value":"231124"},{"label":"北安市","value":"231181"},{"label":"五大连池市","value":"231182"}],[{"label":"北林区","value":"231202"},{"label":"望奎县","value":"231221"},{"label":"兰西县","value":"231222"},{"label":"青冈县","value":"231223"},{"label":"庆安县","value":"231224"},{"label":"明水县","value":"231225"},{"label":"绥棱县","value":"231226"},{"label":"安达市","value":"231281"},{"label":"肇东市","value":"231282"},{"label":"海伦市","value":"231283"}],[{"label":"加格达奇区","value":"232701"},{"label":"松岭区","value":"232702"},{"label":"新林区","value":"232703"},{"label":"呼中区","value":"232704"},{"label":"呼玛县","value":"232721"},{"label":"塔河县","value":"232722"},{"label":"漠河县","value":"232723"}]],[[{"label":"黄浦区","value":"310101"},{"label":"徐汇区","value":"310104"},{"label":"长宁区","value":"310105"},{"label":"静安区","value":"310106"},{"label":"普陀区","value":"310107"},{"label":"虹口区","value":"310109"},{"label":"杨浦区","value":"310110"},{"label":"闵行区","value":"310112"},{"label":"宝山区","value":"310113"},{"label":"嘉定区","value":"310114"},{"label":"浦东新区","value":"310115"},{"label":"金山区","value":"310116"},{"label":"松江区","value":"310117"},{"label":"青浦区","value":"310118"},{"label":"奉贤区","value":"310120"},{"label":"崇明区","value":"310151"}]],[[{"label":"玄武区","value":"320102"},{"label":"秦淮区","value":"320104"},{"label":"建邺区","value":"320105"},{"label":"鼓楼区","value":"320106"},{"label":"浦口区","value":"320111"},{"label":"栖霞区","value":"320113"},{"label":"雨花台区","value":"320114"},{"label":"江宁区","value":"320115"},{"label":"六合区","value":"320116"},{"label":"溧水区","value":"320117"},{"label":"高淳区","value":"320118"}],[{"label":"锡山区","value":"320205"},{"label":"惠山区","value":"320206"},{"label":"滨湖区","value":"320211"},{"label":"梁溪区","value":"320213"},{"label":"新吴区","value":"320214"},{"label":"江阴市","value":"320281"},{"label":"宜兴市","value":"320282"}],[{"label":"鼓楼区","value":"320302"},{"label":"云龙区","value":"320303"},{"label":"贾汪区","value":"320305"},{"label":"泉山区","value":"320311"},{"label":"铜山区","value":"320312"},{"label":"丰县","value":"320321"},{"label":"沛县","value":"320322"},{"label":"睢宁县","value":"320324"},{"label":"徐州经济技术开发区","value":"320371"},{"label":"新沂市","value":"320381"},{"label":"邳州市","value":"320382"}],[{"label":"天宁区","value":"320402"},{"label":"钟楼区","value":"320404"},{"label":"新北区","value":"320411"},{"label":"武进区","value":"320412"},{"label":"金坛区","value":"320413"},{"label":"溧阳市","value":"320481"}],[{"label":"虎丘区","value":"320505"},{"label":"吴中区","value":"320506"},{"label":"相城区","value":"320507"},{"label":"姑苏区","value":"320508"},{"label":"吴江区","value":"320509"},{"label":"苏州工业园区","value":"320571"},{"label":"常熟市","value":"320581"},{"label":"张家港市","value":"320582"},{"label":"昆山市","value":"320583"},{"label":"太仓市","value":"320585"}],[{"label":"崇川区","value":"320602"},{"label":"港闸区","value":"320611"},{"label":"通州区","value":"320612"},{"label":"海安县","value":"320621"},{"label":"如东县","value":"320623"},{"label":"南通经济技术开发区","value":"320671"},{"label":"启东市","value":"320681"},{"label":"如皋市","value":"320682"},{"label":"海门市","value":"320684"}],[{"label":"连云区","value":"320703"},{"label":"海州区","value":"320706"},{"label":"赣榆区","value":"320707"},{"label":"东海县","value":"320722"},{"label":"灌云县","value":"320723"},{"label":"灌南县","value":"320724"},{"label":"连云港经济技术开发区","value":"320771"},{"label":"连云港高新技术产业开发区","value":"320772"}],[{"label":"淮安区","value":"320803"},{"label":"淮阴区","value":"320804"},{"label":"清江浦区","value":"320812"},{"label":"洪泽区","value":"320813"},{"label":"涟水县","value":"320826"},{"label":"盱眙县","value":"320830"},{"label":"金湖县","value":"320831"},{"label":"淮安经济技术开发区","value":"320871"}],[{"label":"亭湖区","value":"320902"},{"label":"盐都区","value":"320903"},{"label":"大丰区","value":"320904"},{"label":"响水县","value":"320921"},{"label":"滨海县","value":"320922"},{"label":"阜宁县","value":"320923"},{"label":"射阳县","value":"320924"},{"label":"建湖县","value":"320925"},{"label":"盐城经济技术开发区","value":"320971"},{"label":"东台市","value":"320981"}],[{"label":"广陵区","value":"321002"},{"label":"邗江区","value":"321003"},{"label":"江都区","value":"321012"},{"label":"宝应县","value":"321023"},{"label":"扬州经济技术开发区","value":"321071"},{"label":"仪征市","value":"321081"},{"label":"高邮市","value":"321084"}],[{"label":"京口区","value":"321102"},{"label":"润州区","value":"321111"},{"label":"丹徒区","value":"321112"},{"label":"镇江新区","value":"321171"},{"label":"丹阳市","value":"321181"},{"label":"扬中市","value":"321182"},{"label":"句容市","value":"321183"}],[{"label":"海陵区","value":"321202"},{"label":"高港区","value":"321203"},{"label":"姜堰区","value":"321204"},{"label":"泰州医药高新技术产业开发区","value":"321271"},{"label":"兴化市","value":"321281"},{"label":"靖江市","value":"321282"},{"label":"泰兴市","value":"321283"}],[{"label":"宿城区","value":"321302"},{"label":"宿豫区","value":"321311"},{"label":"沭阳县","value":"321322"},{"label":"泗阳县","value":"321323"},{"label":"泗洪县","value":"321324"},{"label":"宿迁经济技术开发区","value":"321371"}]],[[{"label":"上城区","value":"330102"},{"label":"下城区","value":"330103"},{"label":"江干区","value":"330104"},{"label":"拱墅区","value":"330105"},{"label":"西湖区","value":"330106"},{"label":"滨江区","value":"330108"},{"label":"萧山区","value":"330109"},{"label":"余杭区","value":"330110"},{"label":"富阳区","value":"330111"},{"label":"临安区","value":"330112"},{"label":"桐庐县","value":"330122"},{"label":"淳安县","value":"330127"},{"label":"建德市","value":"330182"}],[{"label":"海曙区","value":"330203"},{"label":"江北区","value":"330205"},{"label":"北仑区","value":"330206"},{"label":"镇海区","value":"330211"},{"label":"鄞州区","value":"330212"},{"label":"奉化区","value":"330213"},{"label":"象山县","value":"330225"},{"label":"宁海县","value":"330226"},{"label":"余姚市","value":"330281"},{"label":"慈溪市","value":"330282"}],[{"label":"鹿城区","value":"330302"},{"label":"龙湾区","value":"330303"},{"label":"瓯海区","value":"330304"},{"label":"洞头区","value":"330305"},{"label":"永嘉县","value":"330324"},{"label":"平阳县","value":"330326"},{"label":"苍南县","value":"330327"},{"label":"文成县","value":"330328"},{"label":"泰顺县","value":"330329"},{"label":"温州经济技术开发区","value":"330371"},{"label":"瑞安市","value":"330381"},{"label":"乐清市","value":"330382"}],[{"label":"南湖区","value":"330402"},{"label":"秀洲区","value":"330411"},{"label":"嘉善县","value":"330421"},{"label":"海盐县","value":"330424"},{"label":"海宁市","value":"330481"},{"label":"平湖市","value":"330482"},{"label":"桐乡市","value":"330483"}],[{"label":"吴兴区","value":"330502"},{"label":"南浔区","value":"330503"},{"label":"德清县","value":"330521"},{"label":"长兴县","value":"330522"},{"label":"安吉县","value":"330523"}],[{"label":"越城区","value":"330602"},{"label":"柯桥区","value":"330603"},{"label":"上虞区","value":"330604"},{"label":"新昌县","value":"330624"},{"label":"诸暨市","value":"330681"},{"label":"嵊州市","value":"330683"}],[{"label":"婺城区","value":"330702"},{"label":"金东区","value":"330703"},{"label":"武义县","value":"330723"},{"label":"浦江县","value":"330726"},{"label":"磐安县","value":"330727"},{"label":"兰溪市","value":"330781"},{"label":"义乌市","value":"330782"},{"label":"东阳市","value":"330783"},{"label":"永康市","value":"330784"}],[{"label":"柯城区","value":"330802"},{"label":"衢江区","value":"330803"},{"label":"常山县","value":"330822"},{"label":"开化县","value":"330824"},{"label":"龙游县","value":"330825"},{"label":"江山市","value":"330881"}],[{"label":"定海区","value":"330902"},{"label":"普陀区","value":"330903"},{"label":"岱山县","value":"330921"},{"label":"嵊泗县","value":"330922"}],[{"label":"椒江区","value":"331002"},{"label":"黄岩区","value":"331003"},{"label":"路桥区","value":"331004"},{"label":"三门县","value":"331022"},{"label":"天台县","value":"331023"},{"label":"仙居县","value":"331024"},{"label":"温岭市","value":"331081"},{"label":"临海市","value":"331082"},{"label":"玉环市","value":"331083"}],[{"label":"莲都区","value":"331102"},{"label":"青田县","value":"331121"},{"label":"缙云县","value":"331122"},{"label":"遂昌县","value":"331123"},{"label":"松阳县","value":"331124"},{"label":"云和县","value":"331125"},{"label":"庆元县","value":"331126"},{"label":"景宁畲族自治县","value":"331127"},{"label":"龙泉市","value":"331181"}]],[[{"label":"瑶海区","value":"340102"},{"label":"庐阳区","value":"340103"},{"label":"蜀山区","value":"340104"},{"label":"包河区","value":"340111"},{"label":"长丰县","value":"340121"},{"label":"肥东县","value":"340122"},{"label":"肥西县","value":"340123"},{"label":"庐江县","value":"340124"},{"label":"合肥高新技术产业开发区","value":"340171"},{"label":"合肥经济技术开发区","value":"340172"},{"label":"合肥新站高新技术产业开发区","value":"340173"},{"label":"巢湖市","value":"340181"}],[{"label":"镜湖区","value":"340202"},{"label":"弋江区","value":"340203"},{"label":"鸠江区","value":"340207"},{"label":"三山区","value":"340208"},{"label":"芜湖县","value":"340221"},{"label":"繁昌县","value":"340222"},{"label":"南陵县","value":"340223"},{"label":"无为县","value":"340225"},{"label":"芜湖经济技术开发区","value":"340271"},{"label":"安徽芜湖长江大桥经济开发区","value":"340272"}],[{"label":"龙子湖区","value":"340302"},{"label":"蚌山区","value":"340303"},{"label":"禹会区","value":"340304"},{"label":"淮上区","value":"340311"},{"label":"怀远县","value":"340321"},{"label":"五河县","value":"340322"},{"label":"固镇县","value":"340323"},{"label":"蚌埠市高新技术开发区","value":"340371"},{"label":"蚌埠市经济开发区","value":"340372"}],[{"label":"大通区","value":"340402"},{"label":"田家庵区","value":"340403"},{"label":"谢家集区","value":"340404"},{"label":"八公山区","value":"340405"},{"label":"潘集区","value":"340406"},{"label":"凤台县","value":"340421"},{"label":"寿县","value":"340422"}],[{"label":"花山区","value":"340503"},{"label":"雨山区","value":"340504"},{"label":"博望区","value":"340506"},{"label":"当涂县","value":"340521"},{"label":"含山县","value":"340522"},{"label":"和县","value":"340523"}],[{"label":"杜集区","value":"340602"},{"label":"相山区","value":"340603"},{"label":"烈山区","value":"340604"},{"label":"濉溪县","value":"340621"}],[{"label":"铜官区","value":"340705"},{"label":"义安区","value":"340706"},{"label":"郊区","value":"340711"},{"label":"枞阳县","value":"340722"}],[{"label":"迎江区","value":"340802"},{"label":"大观区","value":"340803"},{"label":"宜秀区","value":"340811"},{"label":"怀宁县","value":"340822"},{"label":"潜山县","value":"340824"},{"label":"太湖县","value":"340825"},{"label":"宿松县","value":"340826"},{"label":"望江县","value":"340827"},{"label":"岳西县","value":"340828"},{"label":"安徽安庆经济开发区","value":"340871"},{"label":"桐城市","value":"340881"}],[{"label":"屯溪区","value":"341002"},{"label":"黄山区","value":"341003"},{"label":"徽州区","value":"341004"},{"label":"歙县","value":"341021"},{"label":"休宁县","value":"341022"},{"label":"黟县","value":"341023"},{"label":"祁门县","value":"341024"}],[{"label":"琅琊区","value":"341102"},{"label":"南谯区","value":"341103"},{"label":"来安县","value":"341122"},{"label":"全椒县","value":"341124"},{"label":"定远县","value":"341125"},{"label":"凤阳县","value":"341126"},{"label":"苏滁现代产业园","value":"341171"},{"label":"滁州经济技术开发区","value":"341172"},{"label":"天长市","value":"341181"},{"label":"明光市","value":"341182"}],[{"label":"颍州区","value":"341202"},{"label":"颍东区","value":"341203"},{"label":"颍泉区","value":"341204"},{"label":"临泉县","value":"341221"},{"label":"太和县","value":"341222"},{"label":"阜南县","value":"341225"},{"label":"颍上县","value":"341226"},{"label":"阜阳合肥现代产业园区","value":"341271"},{"label":"阜阳经济技术开发区","value":"341272"},{"label":"界首市","value":"341282"}],[{"label":"埇桥区","value":"341302"},{"label":"砀山县","value":"341321"},{"label":"萧县","value":"341322"},{"label":"灵璧县","value":"341323"},{"label":"泗县","value":"341324"},{"label":"宿州马鞍山现代产业园区","value":"341371"},{"label":"宿州经济技术开发区","value":"341372"}],[{"label":"金安区","value":"341502"},{"label":"裕安区","value":"341503"},{"label":"叶集区","value":"341504"},{"label":"霍邱县","value":"341522"},{"label":"舒城县","value":"341523"},{"label":"金寨县","value":"341524"},{"label":"霍山县","value":"341525"}],[{"label":"谯城区","value":"341602"},{"label":"涡阳县","value":"341621"},{"label":"蒙城县","value":"341622"},{"label":"利辛县","value":"341623"}],[{"label":"贵池区","value":"341702"},{"label":"东至县","value":"341721"},{"label":"石台县","value":"341722"},{"label":"青阳县","value":"341723"}],[{"label":"宣州区","value":"341802"},{"label":"郎溪县","value":"341821"},{"label":"广德县","value":"341822"},{"label":"泾县","value":"341823"},{"label":"绩溪县","value":"341824"},{"label":"旌德县","value":"341825"},{"label":"宣城市经济开发区","value":"341871"},{"label":"宁国市","value":"341881"}]],[[{"label":"鼓楼区","value":"350102"},{"label":"台江区","value":"350103"},{"label":"仓山区","value":"350104"},{"label":"马尾区","value":"350105"},{"label":"晋安区","value":"350111"},{"label":"闽侯县","value":"350121"},{"label":"连江县","value":"350122"},{"label":"罗源县","value":"350123"},{"label":"闽清县","value":"350124"},{"label":"永泰县","value":"350125"},{"label":"平潭县","value":"350128"},{"label":"福清市","value":"350181"},{"label":"长乐市","value":"350182"}],[{"label":"思明区","value":"350203"},{"label":"海沧区","value":"350205"},{"label":"湖里区","value":"350206"},{"label":"集美区","value":"350211"},{"label":"同安区","value":"350212"},{"label":"翔安区","value":"350213"}],[{"label":"城厢区","value":"350302"},{"label":"涵江区","value":"350303"},{"label":"荔城区","value":"350304"},{"label":"秀屿区","value":"350305"},{"label":"仙游县","value":"350322"}],[{"label":"梅列区","value":"350402"},{"label":"三元区","value":"350403"},{"label":"明溪县","value":"350421"},{"label":"清流县","value":"350423"},{"label":"宁化县","value":"350424"},{"label":"大田县","value":"350425"},{"label":"尤溪县","value":"350426"},{"label":"沙县","value":"350427"},{"label":"将乐县","value":"350428"},{"label":"泰宁县","value":"350429"},{"label":"建宁县","value":"350430"},{"label":"永安市","value":"350481"}],[{"label":"鲤城区","value":"350502"},{"label":"丰泽区","value":"350503"},{"label":"洛江区","value":"350504"},{"label":"泉港区","value":"350505"},{"label":"惠安县","value":"350521"},{"label":"安溪县","value":"350524"},{"label":"永春县","value":"350525"},{"label":"德化县","value":"350526"},{"label":"金门县","value":"350527"},{"label":"石狮市","value":"350581"},{"label":"晋江市","value":"350582"},{"label":"南安市","value":"350583"}],[{"label":"芗城区","value":"350602"},{"label":"龙文区","value":"350603"},{"label":"云霄县","value":"350622"},{"label":"漳浦县","value":"350623"},{"label":"诏安县","value":"350624"},{"label":"长泰县","value":"350625"},{"label":"东山县","value":"350626"},{"label":"南靖县","value":"350627"},{"label":"平和县","value":"350628"},{"label":"华安县","value":"350629"},{"label":"龙海市","value":"350681"}],[{"label":"延平区","value":"350702"},{"label":"建阳区","value":"350703"},{"label":"顺昌县","value":"350721"},{"label":"浦城县","value":"350722"},{"label":"光泽县","value":"350723"},{"label":"松溪县","value":"350724"},{"label":"政和县","value":"350725"},{"label":"邵武市","value":"350781"},{"label":"武夷山市","value":"350782"},{"label":"建瓯市","value":"350783"}],[{"label":"新罗区","value":"350802"},{"label":"永定区","value":"350803"},{"label":"长汀县","value":"350821"},{"label":"上杭县","value":"350823"},{"label":"武平县","value":"350824"},{"label":"连城县","value":"350825"},{"label":"漳平市","value":"350881"}],[{"label":"蕉城区","value":"350902"},{"label":"霞浦县","value":"350921"},{"label":"古田县","value":"350922"},{"label":"屏南县","value":"350923"},{"label":"寿宁县","value":"350924"},{"label":"周宁县","value":"350925"},{"label":"柘荣县","value":"350926"},{"label":"福安市","value":"350981"},{"label":"福鼎市","value":"350982"}]],[[{"label":"东湖区","value":"360102"},{"label":"西湖区","value":"360103"},{"label":"青云谱区","value":"360104"},{"label":"湾里区","value":"360105"},{"label":"青山湖区","value":"360111"},{"label":"新建区","value":"360112"},{"label":"南昌县","value":"360121"},{"label":"安义县","value":"360123"},{"label":"进贤县","value":"360124"}],[{"label":"昌江区","value":"360202"},{"label":"珠山区","value":"360203"},{"label":"浮梁县","value":"360222"},{"label":"乐平市","value":"360281"}],[{"label":"安源区","value":"360302"},{"label":"湘东区","value":"360313"},{"label":"莲花县","value":"360321"},{"label":"上栗县","value":"360322"},{"label":"芦溪县","value":"360323"}],[{"label":"濂溪区","value":"360402"},{"label":"浔阳区","value":"360403"},{"label":"柴桑区","value":"360404"},{"label":"武宁县","value":"360423"},{"label":"修水县","value":"360424"},{"label":"永修县","value":"360425"},{"label":"德安县","value":"360426"},{"label":"都昌县","value":"360428"},{"label":"湖口县","value":"360429"},{"label":"彭泽县","value":"360430"},{"label":"瑞昌市","value":"360481"},{"label":"共青城市","value":"360482"},{"label":"庐山市","value":"360483"}],[{"label":"渝水区","value":"360502"},{"label":"分宜县","value":"360521"}],[{"label":"月湖区","value":"360602"},{"label":"余江县","value":"360622"},{"label":"贵溪市","value":"360681"}],[{"label":"章贡区","value":"360702"},{"label":"南康区","value":"360703"},{"label":"赣县区","value":"360704"},{"label":"信丰县","value":"360722"},{"label":"大余县","value":"360723"},{"label":"上犹县","value":"360724"},{"label":"崇义县","value":"360725"},{"label":"安远县","value":"360726"},{"label":"龙南县","value":"360727"},{"label":"定南县","value":"360728"},{"label":"全南县","value":"360729"},{"label":"宁都县","value":"360730"},{"label":"于都县","value":"360731"},{"label":"兴国县","value":"360732"},{"label":"会昌县","value":"360733"},{"label":"寻乌县","value":"360734"},{"label":"石城县","value":"360735"},{"label":"瑞金市","value":"360781"}],[{"label":"吉州区","value":"360802"},{"label":"青原区","value":"360803"},{"label":"吉安县","value":"360821"},{"label":"吉水县","value":"360822"},{"label":"峡江县","value":"360823"},{"label":"新干县","value":"360824"},{"label":"永丰县","value":"360825"},{"label":"泰和县","value":"360826"},{"label":"遂川县","value":"360827"},{"label":"万安县","value":"360828"},{"label":"安福县","value":"360829"},{"label":"永新县","value":"360830"},{"label":"井冈山市","value":"360881"}],[{"label":"袁州区","value":"360902"},{"label":"奉新县","value":"360921"},{"label":"万载县","value":"360922"},{"label":"上高县","value":"360923"},{"label":"宜丰县","value":"360924"},{"label":"靖安县","value":"360925"},{"label":"铜鼓县","value":"360926"},{"label":"丰城市","value":"360981"},{"label":"樟树市","value":"360982"},{"label":"高安市","value":"360983"}],[{"label":"临川区","value":"361002"},{"label":"东乡区","value":"361003"},{"label":"南城县","value":"361021"},{"label":"黎川县","value":"361022"},{"label":"南丰县","value":"361023"},{"label":"崇仁县","value":"361024"},{"label":"乐安县","value":"361025"},{"label":"宜黄县","value":"361026"},{"label":"金溪县","value":"361027"},{"label":"资溪县","value":"361028"},{"label":"广昌县","value":"361030"}],[{"label":"信州区","value":"361102"},{"label":"广丰区","value":"361103"},{"label":"上饶县","value":"361121"},{"label":"玉山县","value":"361123"},{"label":"铅山县","value":"361124"},{"label":"横峰县","value":"361125"},{"label":"弋阳县","value":"361126"},{"label":"余干县","value":"361127"},{"label":"鄱阳县","value":"361128"},{"label":"万年县","value":"361129"},{"label":"婺源县","value":"361130"},{"label":"德兴市","value":"361181"}]],[[{"label":"历下区","value":"370102"},{"label":"市中区","value":"370103"},{"label":"槐荫区","value":"370104"},{"label":"天桥区","value":"370105"},{"label":"历城区","value":"370112"},{"label":"长清区","value":"370113"},{"label":"章丘区","value":"370114"},{"label":"平阴县","value":"370124"},{"label":"济阳县","value":"370125"},{"label":"商河县","value":"370126"},{"label":"济南高新技术产业开发区","value":"370171"}],[{"label":"市南区","value":"370202"},{"label":"市北区","value":"370203"},{"label":"黄岛区","value":"370211"},{"label":"崂山区","value":"370212"},{"label":"李沧区","value":"370213"},{"label":"城阳区","value":"370214"},{"label":"即墨区","value":"370215"},{"label":"青岛高新技术产业开发区","value":"370271"},{"label":"胶州市","value":"370281"},{"label":"平度市","value":"370283"},{"label":"莱西市","value":"370285"}],[{"label":"淄川区","value":"370302"},{"label":"张店区","value":"370303"},{"label":"博山区","value":"370304"},{"label":"临淄区","value":"370305"},{"label":"周村区","value":"370306"},{"label":"桓台县","value":"370321"},{"label":"高青县","value":"370322"},{"label":"沂源县","value":"370323"}],[{"label":"市中区","value":"370402"},{"label":"薛城区","value":"370403"},{"label":"峄城区","value":"370404"},{"label":"台儿庄区","value":"370405"},{"label":"山亭区","value":"370406"},{"label":"滕州市","value":"370481"}],[{"label":"东营区","value":"370502"},{"label":"河口区","value":"370503"},{"label":"垦利区","value":"370505"},{"label":"利津县","value":"370522"},{"label":"广饶县","value":"370523"},{"label":"东营经济技术开发区","value":"370571"},{"label":"东营港经济开发区","value":"370572"}],[{"label":"芝罘区","value":"370602"},{"label":"福山区","value":"370611"},{"label":"牟平区","value":"370612"},{"label":"莱山区","value":"370613"},{"label":"长岛县","value":"370634"},{"label":"烟台高新技术产业开发区","value":"370671"},{"label":"烟台经济技术开发区","value":"370672"},{"label":"龙口市","value":"370681"},{"label":"莱阳市","value":"370682"},{"label":"莱州市","value":"370683"},{"label":"蓬莱市","value":"370684"},{"label":"招远市","value":"370685"},{"label":"栖霞市","value":"370686"},{"label":"海阳市","value":"370687"}],[{"label":"潍城区","value":"370702"},{"label":"寒亭区","value":"370703"},{"label":"坊子区","value":"370704"},{"label":"奎文区","value":"370705"},{"label":"临朐县","value":"370724"},{"label":"昌乐县","value":"370725"},{"label":"潍坊滨海经济技术开发区","value":"370772"},{"label":"青州市","value":"370781"},{"label":"诸城市","value":"370782"},{"label":"寿光市","value":"370783"},{"label":"安丘市","value":"370784"},{"label":"高密市","value":"370785"},{"label":"昌邑市","value":"370786"}],[{"label":"任城区","value":"370811"},{"label":"兖州区","value":"370812"},{"label":"微山县","value":"370826"},{"label":"鱼台县","value":"370827"},{"label":"金乡县","value":"370828"},{"label":"嘉祥县","value":"370829"},{"label":"汶上县","value":"370830"},{"label":"泗水县","value":"370831"},{"label":"梁山县","value":"370832"},{"label":"济宁高新技术产业开发区","value":"370871"},{"label":"曲阜市","value":"370881"},{"label":"邹城市","value":"370883"}],[{"label":"泰山区","value":"370902"},{"label":"岱岳区","value":"370911"},{"label":"宁阳县","value":"370921"},{"label":"东平县","value":"370923"},{"label":"新泰市","value":"370982"},{"label":"肥城市","value":"370983"}],[{"label":"环翠区","value":"371002"},{"label":"文登区","value":"371003"},{"label":"威海火炬高技术产业开发区","value":"371071"},{"label":"威海经济技术开发区","value":"371072"},{"label":"威海临港经济技术开发区","value":"371073"},{"label":"荣成市","value":"371082"},{"label":"乳山市","value":"371083"}],[{"label":"东港区","value":"371102"},{"label":"岚山区","value":"371103"},{"label":"五莲县","value":"371121"},{"label":"莒县","value":"371122"},{"label":"日照经济技术开发区","value":"371171"},{"label":"日照国际海洋城","value":"371172"}],[{"label":"莱城区","value":"371202"},{"label":"钢城区","value":"371203"}],[{"label":"兰山区","value":"371302"},{"label":"罗庄区","value":"371311"},{"label":"河东区","value":"371312"},{"label":"沂南县","value":"371321"},{"label":"郯城县","value":"371322"},{"label":"沂水县","value":"371323"},{"label":"兰陵县","value":"371324"},{"label":"费县","value":"371325"},{"label":"平邑县","value":"371326"},{"label":"莒南县","value":"371327"},{"label":"蒙阴县","value":"371328"},{"label":"临沭县","value":"371329"},{"label":"临沂高新技术产业开发区","value":"371371"},{"label":"临沂经济技术开发区","value":"371372"},{"label":"临沂临港经济开发区","value":"371373"}],[{"label":"德城区","value":"371402"},{"label":"陵城区","value":"371403"},{"label":"宁津县","value":"371422"},{"label":"庆云县","value":"371423"},{"label":"临邑县","value":"371424"},{"label":"齐河县","value":"371425"},{"label":"平原县","value":"371426"},{"label":"夏津县","value":"371427"},{"label":"武城县","value":"371428"},{"label":"德州经济技术开发区","value":"371471"},{"label":"德州运河经济开发区","value":"371472"},{"label":"乐陵市","value":"371481"},{"label":"禹城市","value":"371482"}],[{"label":"东昌府区","value":"371502"},{"label":"阳谷县","value":"371521"},{"label":"莘县","value":"371522"},{"label":"茌平县","value":"371523"},{"label":"东阿县","value":"371524"},{"label":"冠县","value":"371525"},{"label":"高唐县","value":"371526"},{"label":"临清市","value":"371581"}],[{"label":"滨城区","value":"371602"},{"label":"沾化区","value":"371603"},{"label":"惠民县","value":"371621"},{"label":"阳信县","value":"371622"},{"label":"无棣县","value":"371623"},{"label":"博兴县","value":"371625"},{"label":"邹平县","value":"371626"}],[{"label":"牡丹区","value":"371702"},{"label":"定陶区","value":"371703"},{"label":"曹县","value":"371721"},{"label":"单县","value":"371722"},{"label":"成武县","value":"371723"},{"label":"巨野县","value":"371724"},{"label":"郓城县","value":"371725"},{"label":"鄄城县","value":"371726"},{"label":"东明县","value":"371728"},{"label":"菏泽经济技术开发区","value":"371771"},{"label":"菏泽高新技术开发区","value":"371772"}]],[[{"label":"中原区","value":"410102"},{"label":"二七区","value":"410103"},{"label":"管城回族区","value":"410104"},{"label":"金水区","value":"410105"},{"label":"上街区","value":"410106"},{"label":"惠济区","value":"410108"},{"label":"中牟县","value":"410122"},{"label":"郑州经济技术开发区","value":"410171"},{"label":"郑州高新技术产业开发区","value":"410172"},{"label":"郑州航空港经济综合实验区","value":"410173"},{"label":"巩义市","value":"410181"},{"label":"荥阳市","value":"410182"},{"label":"新密市","value":"410183"},{"label":"新郑市","value":"410184"},{"label":"登封市","value":"410185"}],[{"label":"龙亭区","value":"410202"},{"label":"顺河回族区","value":"410203"},{"label":"鼓楼区","value":"410204"},{"label":"禹王台区","value":"410205"},{"label":"祥符区","value":"410212"},{"label":"杞县","value":"410221"},{"label":"通许县","value":"410222"},{"label":"尉氏县","value":"410223"},{"label":"兰考县","value":"410225"}],[{"label":"老城区","value":"410302"},{"label":"西工区","value":"410303"},{"label":"瀍河回族区","value":"410304"},{"label":"涧西区","value":"410305"},{"label":"吉利区","value":"410306"},{"label":"洛龙区","value":"410311"},{"label":"孟津县","value":"410322"},{"label":"新安县","value":"410323"},{"label":"栾川县","value":"410324"},{"label":"嵩县","value":"410325"},{"label":"汝阳县","value":"410326"},{"label":"宜阳县","value":"410327"},{"label":"洛宁县","value":"410328"},{"label":"伊川县","value":"410329"},{"label":"洛阳高新技术产业开发区","value":"410371"},{"label":"偃师市","value":"410381"}],[{"label":"新华区","value":"410402"},{"label":"卫东区","value":"410403"},{"label":"石龙区","value":"410404"},{"label":"湛河区","value":"410411"},{"label":"宝丰县","value":"410421"},{"label":"叶县","value":"410422"},{"label":"鲁山县","value":"410423"},{"label":"郏县","value":"410425"},{"label":"平顶山高新技术产业开发区","value":"410471"},{"label":"平顶山市新城区","value":"410472"},{"label":"舞钢市","value":"410481"},{"label":"汝州市","value":"410482"}],[{"label":"文峰区","value":"410502"},{"label":"北关区","value":"410503"},{"label":"殷都区","value":"410505"},{"label":"龙安区","value":"410506"},{"label":"安阳县","value":"410522"},{"label":"汤阴县","value":"410523"},{"label":"滑县","value":"410526"},{"label":"内黄县","value":"410527"},{"label":"安阳高新技术产业开发区","value":"410571"},{"label":"林州市","value":"410581"}],[{"label":"鹤山区","value":"410602"},{"label":"山城区","value":"410603"},{"label":"淇滨区","value":"410611"},{"label":"浚县","value":"410621"},{"label":"淇县","value":"410622"},{"label":"鹤壁经济技术开发区","value":"410671"}],[{"label":"红旗区","value":"410702"},{"label":"卫滨区","value":"410703"},{"label":"凤泉区","value":"410704"},{"label":"牧野区","value":"410711"},{"label":"新乡县","value":"410721"},{"label":"获嘉县","value":"410724"},{"label":"原阳县","value":"410725"},{"label":"延津县","value":"410726"},{"label":"封丘县","value":"410727"},{"label":"长垣县","value":"410728"},{"label":"新乡高新技术产业开发区","value":"410771"},{"label":"新乡经济技术开发区","value":"410772"},{"label":"新乡市平原城乡一体化示范区","value":"410773"},{"label":"卫辉市","value":"410781"},{"label":"辉县市","value":"410782"}],[{"label":"解放区","value":"410802"},{"label":"中站区","value":"410803"},{"label":"马村区","value":"410804"},{"label":"山阳区","value":"410811"},{"label":"修武县","value":"410821"},{"label":"博爱县","value":"410822"},{"label":"武陟县","value":"410823"},{"label":"温县","value":"410825"},{"label":"焦作城乡一体化示范区","value":"410871"},{"label":"沁阳市","value":"410882"},{"label":"孟州市","value":"410883"}],[{"label":"华龙区","value":"410902"},{"label":"清丰县","value":"410922"},{"label":"南乐县","value":"410923"},{"label":"范县","value":"410926"},{"label":"台前县","value":"410927"},{"label":"濮阳县","value":"410928"},{"label":"河南濮阳工业园区","value":"410971"},{"label":"濮阳经济技术开发区","value":"410972"}],[{"label":"魏都区","value":"411002"},{"label":"建安区","value":"411003"},{"label":"鄢陵县","value":"411024"},{"label":"襄城县","value":"411025"},{"label":"许昌经济技术开发区","value":"411071"},{"label":"禹州市","value":"411081"},{"label":"长葛市","value":"411082"}],[{"label":"源汇区","value":"411102"},{"label":"郾城区","value":"411103"},{"label":"召陵区","value":"411104"},{"label":"舞阳县","value":"411121"},{"label":"临颍县","value":"411122"},{"label":"漯河经济技术开发区","value":"411171"}],[{"label":"湖滨区","value":"411202"},{"label":"陕州区","value":"411203"},{"label":"渑池县","value":"411221"},{"label":"卢氏县","value":"411224"},{"label":"河南三门峡经济开发区","value":"411271"},{"label":"义马市","value":"411281"},{"label":"灵宝市","value":"411282"}],[{"label":"宛城区","value":"411302"},{"label":"卧龙区","value":"411303"},{"label":"南召县","value":"411321"},{"label":"方城县","value":"411322"},{"label":"西峡县","value":"411323"},{"label":"镇平县","value":"411324"},{"label":"内乡县","value":"411325"},{"label":"淅川县","value":"411326"},{"label":"社旗县","value":"411327"},{"label":"唐河县","value":"411328"},{"label":"新野县","value":"411329"},{"label":"桐柏县","value":"411330"},{"label":"南阳高新技术产业开发区","value":"411371"},{"label":"南阳市城乡一体化示范区","value":"411372"},{"label":"邓州市","value":"411381"}],[{"label":"梁园区","value":"411402"},{"label":"睢阳区","value":"411403"},{"label":"民权县","value":"411421"},{"label":"睢县","value":"411422"},{"label":"宁陵县","value":"411423"},{"label":"柘城县","value":"411424"},{"label":"虞城县","value":"411425"},{"label":"夏邑县","value":"411426"},{"label":"豫东综合物流产业聚集区","value":"411471"},{"label":"河南商丘经济开发区","value":"411472"},{"label":"永城市","value":"411481"}],[{"label":"浉河区","value":"411502"},{"label":"平桥区","value":"411503"},{"label":"罗山县","value":"411521"},{"label":"光山县","value":"411522"},{"label":"新县","value":"411523"},{"label":"商城县","value":"411524"},{"label":"固始县","value":"411525"},{"label":"潢川县","value":"411526"},{"label":"淮滨县","value":"411527"},{"label":"息县","value":"411528"},{"label":"信阳高新技术产业开发区","value":"411571"}],[{"label":"川汇区","value":"411602"},{"label":"扶沟县","value":"411621"},{"label":"西华县","value":"411622"},{"label":"商水县","value":"411623"},{"label":"沈丘县","value":"411624"},{"label":"郸城县","value":"411625"},{"label":"淮阳县","value":"411626"},{"label":"太康县","value":"411627"},{"label":"鹿邑县","value":"411628"},{"label":"河南周口经济开发区","value":"411671"},{"label":"项城市","value":"411681"}],[{"label":"驿城区","value":"411702"},{"label":"西平县","value":"411721"},{"label":"上蔡县","value":"411722"},{"label":"平舆县","value":"411723"},{"label":"正阳县","value":"411724"},{"label":"确山县","value":"411725"},{"label":"泌阳县","value":"411726"},{"label":"汝南县","value":"411727"},{"label":"遂平县","value":"411728"},{"label":"新蔡县","value":"411729"},{"label":"河南驻马店经济开发区","value":"411771"}],[{"label":"济源市","value":"419001"}]],[[{"label":"江岸区","value":"420102"},{"label":"江汉区","value":"420103"},{"label":"硚口区","value":"420104"},{"label":"汉阳区","value":"420105"},{"label":"武昌区","value":"420106"},{"label":"青山区","value":"420107"},{"label":"洪山区","value":"420111"},{"label":"东西湖区","value":"420112"},{"label":"汉南区","value":"420113"},{"label":"蔡甸区","value":"420114"},{"label":"江夏区","value":"420115"},{"label":"黄陂区","value":"420116"},{"label":"新洲区","value":"420117"}],[{"label":"黄石港区","value":"420202"},{"label":"西塞山区","value":"420203"},{"label":"下陆区","value":"420204"},{"label":"铁山区","value":"420205"},{"label":"阳新县","value":"420222"},{"label":"大冶市","value":"420281"}],[{"label":"茅箭区","value":"420302"},{"label":"张湾区","value":"420303"},{"label":"郧阳区","value":"420304"},{"label":"郧西县","value":"420322"},{"label":"竹山县","value":"420323"},{"label":"竹溪县","value":"420324"},{"label":"房县","value":"420325"},{"label":"丹江口市","value":"420381"}],[{"label":"西陵区","value":"420502"},{"label":"伍家岗区","value":"420503"},{"label":"点军区","value":"420504"},{"label":"猇亭区","value":"420505"},{"label":"夷陵区","value":"420506"},{"label":"远安县","value":"420525"},{"label":"兴山县","value":"420526"},{"label":"秭归县","value":"420527"},{"label":"长阳土家族自治县","value":"420528"},{"label":"五峰土家族自治县","value":"420529"},{"label":"宜都市","value":"420581"},{"label":"当阳市","value":"420582"},{"label":"枝江市","value":"420583"}],[{"label":"襄城区","value":"420602"},{"label":"樊城区","value":"420606"},{"label":"襄州区","value":"420607"},{"label":"南漳县","value":"420624"},{"label":"谷城县","value":"420625"},{"label":"保康县","value":"420626"},{"label":"老河口市","value":"420682"},{"label":"枣阳市","value":"420683"},{"label":"宜城市","value":"420684"}],[{"label":"梁子湖区","value":"420702"},{"label":"华容区","value":"420703"},{"label":"鄂城区","value":"420704"}],[{"label":"东宝区","value":"420802"},{"label":"掇刀区","value":"420804"},{"label":"京山县","value":"420821"},{"label":"沙洋县","value":"420822"},{"label":"钟祥市","value":"420881"}],[{"label":"孝南区","value":"420902"},{"label":"孝昌县","value":"420921"},{"label":"大悟县","value":"420922"},{"label":"云梦县","value":"420923"},{"label":"应城市","value":"420981"},{"label":"安陆市","value":"420982"},{"label":"汉川市","value":"420984"}],[{"label":"沙市区","value":"421002"},{"label":"荆州区","value":"421003"},{"label":"公安县","value":"421022"},{"label":"监利县","value":"421023"},{"label":"江陵县","value":"421024"},{"label":"荆州经济技术开发区","value":"421071"},{"label":"石首市","value":"421081"},{"label":"洪湖市","value":"421083"},{"label":"松滋市","value":"421087"}],[{"label":"黄州区","value":"421102"},{"label":"团风县","value":"421121"},{"label":"红安县","value":"421122"},{"label":"罗田县","value":"421123"},{"label":"英山县","value":"421124"},{"label":"浠水县","value":"421125"},{"label":"蕲春县","value":"421126"},{"label":"黄梅县","value":"421127"},{"label":"龙感湖管理区","value":"421171"},{"label":"麻城市","value":"421181"},{"label":"武穴市","value":"421182"}],[{"label":"咸安区","value":"421202"},{"label":"嘉鱼县","value":"421221"},{"label":"通城县","value":"421222"},{"label":"崇阳县","value":"421223"},{"label":"通山县","value":"421224"},{"label":"赤壁市","value":"421281"}],[{"label":"曾都区","value":"421303"},{"label":"随县","value":"421321"},{"label":"广水市","value":"421381"}],[{"label":"恩施市","value":"422801"},{"label":"利川市","value":"422802"},{"label":"建始县","value":"422822"},{"label":"巴东县","value":"422823"},{"label":"宣恩县","value":"422825"},{"label":"咸丰县","value":"422826"},{"label":"来凤县","value":"422827"},{"label":"鹤峰县","value":"422828"}],[{"label":"仙桃市","value":"429004"},{"label":"潜江市","value":"429005"},{"label":"天门市","value":"429006"},{"label":"神农架林区","value":"429021"}]],[[{"label":"芙蓉区","value":"430102"},{"label":"天心区","value":"430103"},{"label":"岳麓区","value":"430104"},{"label":"开福区","value":"430105"},{"label":"雨花区","value":"430111"},{"label":"望城区","value":"430112"},{"label":"长沙县","value":"430121"},{"label":"浏阳市","value":"430181"},{"label":"宁乡市","value":"430182"}],[{"label":"荷塘区","value":"430202"},{"label":"芦淞区","value":"430203"},{"label":"石峰区","value":"430204"},{"label":"天元区","value":"430211"},{"label":"株洲县","value":"430221"},{"label":"攸县","value":"430223"},{"label":"茶陵县","value":"430224"},{"label":"炎陵县","value":"430225"},{"label":"云龙示范区","value":"430271"},{"label":"醴陵市","value":"430281"}],[{"label":"雨湖区","value":"430302"},{"label":"岳塘区","value":"430304"},{"label":"湘潭县","value":"430321"},{"label":"湖南湘潭高新技术产业园区","value":"430371"},{"label":"湘潭昭山示范区","value":"430372"},{"label":"湘潭九华示范区","value":"430373"},{"label":"湘乡市","value":"430381"},{"label":"韶山市","value":"430382"}],[{"label":"珠晖区","value":"430405"},{"label":"雁峰区","value":"430406"},{"label":"石鼓区","value":"430407"},{"label":"蒸湘区","value":"430408"},{"label":"南岳区","value":"430412"},{"label":"衡阳县","value":"430421"},{"label":"衡南县","value":"430422"},{"label":"衡山县","value":"430423"},{"label":"衡东县","value":"430424"},{"label":"祁东县","value":"430426"},{"label":"衡阳综合保税区","value":"430471"},{"label":"湖南衡阳高新技术产业园区","value":"430472"},{"label":"湖南衡阳松木经济开发区","value":"430473"},{"label":"耒阳市","value":"430481"},{"label":"常宁市","value":"430482"}],[{"label":"双清区","value":"430502"},{"label":"大祥区","value":"430503"},{"label":"北塔区","value":"430511"},{"label":"邵东县","value":"430521"},{"label":"新邵县","value":"430522"},{"label":"邵阳县","value":"430523"},{"label":"隆回县","value":"430524"},{"label":"洞口县","value":"430525"},{"label":"绥宁县","value":"430527"},{"label":"新宁县","value":"430528"},{"label":"城步苗族自治县","value":"430529"},{"label":"武冈市","value":"430581"}],[{"label":"岳阳楼区","value":"430602"},{"label":"云溪区","value":"430603"},{"label":"君山区","value":"430611"},{"label":"岳阳县","value":"430621"},{"label":"华容县","value":"430623"},{"label":"湘阴县","value":"430624"},{"label":"平江县","value":"430626"},{"label":"岳阳市屈原管理区","value":"430671"},{"label":"汨罗市","value":"430681"},{"label":"临湘市","value":"430682"}],[{"label":"武陵区","value":"430702"},{"label":"鼎城区","value":"430703"},{"label":"安乡县","value":"430721"},{"label":"汉寿县","value":"430722"},{"label":"澧县","value":"430723"},{"label":"临澧县","value":"430724"},{"label":"桃源县","value":"430725"},{"label":"石门县","value":"430726"},{"label":"常德市西洞庭管理区","value":"430771"},{"label":"津市市","value":"430781"}],[{"label":"永定区","value":"430802"},{"label":"武陵源区","value":"430811"},{"label":"慈利县","value":"430821"},{"label":"桑植县","value":"430822"}],[{"label":"资阳区","value":"430902"},{"label":"赫山区","value":"430903"},{"label":"南县","value":"430921"},{"label":"桃江县","value":"430922"},{"label":"安化县","value":"430923"},{"label":"益阳市大通湖管理区","value":"430971"},{"label":"湖南益阳高新技术产业园区","value":"430972"},{"label":"沅江市","value":"430981"}],[{"label":"北湖区","value":"431002"},{"label":"苏仙区","value":"431003"},{"label":"桂阳县","value":"431021"},{"label":"宜章县","value":"431022"},{"label":"永兴县","value":"431023"},{"label":"嘉禾县","value":"431024"},{"label":"临武县","value":"431025"},{"label":"汝城县","value":"431026"},{"label":"桂东县","value":"431027"},{"label":"安仁县","value":"431028"},{"label":"资兴市","value":"431081"}],[{"label":"零陵区","value":"431102"},{"label":"冷水滩区","value":"431103"},{"label":"祁阳县","value":"431121"},{"label":"东安县","value":"431122"},{"label":"双牌县","value":"431123"},{"label":"道县","value":"431124"},{"label":"江永县","value":"431125"},{"label":"宁远县","value":"431126"},{"label":"蓝山县","value":"431127"},{"label":"新田县","value":"431128"},{"label":"江华瑶族自治县","value":"431129"},{"label":"永州经济技术开发区","value":"431171"},{"label":"永州市金洞管理区","value":"431172"},{"label":"永州市回龙圩管理区","value":"431173"}],[{"label":"鹤城区","value":"431202"},{"label":"中方县","value":"431221"},{"label":"沅陵县","value":"431222"},{"label":"辰溪县","value":"431223"},{"label":"溆浦县","value":"431224"},{"label":"会同县","value":"431225"},{"label":"麻阳苗族自治县","value":"431226"},{"label":"新晃侗族自治县","value":"431227"},{"label":"芷江侗族自治县","value":"431228"},{"label":"靖州苗族侗族自治县","value":"431229"},{"label":"通道侗族自治县","value":"431230"},{"label":"怀化市洪江管理区","value":"431271"},{"label":"洪江市","value":"431281"}],[{"label":"娄星区","value":"431302"},{"label":"双峰县","value":"431321"},{"label":"新化县","value":"431322"},{"label":"冷水江市","value":"431381"},{"label":"涟源市","value":"431382"}],[{"label":"吉首市","value":"433101"},{"label":"泸溪县","value":"433122"},{"label":"凤凰县","value":"433123"},{"label":"花垣县","value":"433124"},{"label":"保靖县","value":"433125"},{"label":"古丈县","value":"433126"},{"label":"永顺县","value":"433127"},{"label":"龙山县","value":"433130"},{"label":"湖南吉首经济开发区","value":"433172"},{"label":"湖南永顺经济开发区","value":"433173"}]],[[{"label":"荔湾区","value":"440103"},{"label":"越秀区","value":"440104"},{"label":"海珠区","value":"440105"},{"label":"天河区","value":"440106"},{"label":"白云区","value":"440111"},{"label":"黄埔区","value":"440112"},{"label":"番禺区","value":"440113"},{"label":"花都区","value":"440114"},{"label":"南沙区","value":"440115"},{"label":"从化区","value":"440117"},{"label":"增城区","value":"440118"}],[{"label":"武江区","value":"440203"},{"label":"浈江区","value":"440204"},{"label":"曲江区","value":"440205"},{"label":"始兴县","value":"440222"},{"label":"仁化县","value":"440224"},{"label":"翁源县","value":"440229"},{"label":"乳源瑶族自治县","value":"440232"},{"label":"新丰县","value":"440233"},{"label":"乐昌市","value":"440281"},{"label":"南雄市","value":"440282"}],[{"label":"罗湖区","value":"440303"},{"label":"福田区","value":"440304"},{"label":"南山区","value":"440305"},{"label":"宝安区","value":"440306"},{"label":"龙岗区","value":"440307"},{"label":"盐田区","value":"440308"},{"label":"龙华区","value":"440309"},{"label":"坪山区","value":"440310"}],[{"label":"香洲区","value":"440402"},{"label":"斗门区","value":"440403"},{"label":"金湾区","value":"440404"}],[{"label":"龙湖区","value":"440507"},{"label":"金平区","value":"440511"},{"label":"濠江区","value":"440512"},{"label":"潮阳区","value":"440513"},{"label":"潮南区","value":"440514"},{"label":"澄海区","value":"440515"},{"label":"南澳县","value":"440523"}],[{"label":"禅城区","value":"440604"},{"label":"南海区","value":"440605"},{"label":"顺德区","value":"440606"},{"label":"三水区","value":"440607"},{"label":"高明区","value":"440608"}],[{"label":"蓬江区","value":"440703"},{"label":"江海区","value":"440704"},{"label":"新会区","value":"440705"},{"label":"台山市","value":"440781"},{"label":"开平市","value":"440783"},{"label":"鹤山市","value":"440784"},{"label":"恩平市","value":"440785"}],[{"label":"赤坎区","value":"440802"},{"label":"霞山区","value":"440803"},{"label":"坡头区","value":"440804"},{"label":"麻章区","value":"440811"},{"label":"遂溪县","value":"440823"},{"label":"徐闻县","value":"440825"},{"label":"廉江市","value":"440881"},{"label":"雷州市","value":"440882"},{"label":"吴川市","value":"440883"}],[{"label":"茂南区","value":"440902"},{"label":"电白区","value":"440904"},{"label":"高州市","value":"440981"},{"label":"化州市","value":"440982"},{"label":"信宜市","value":"440983"}],[{"label":"端州区","value":"441202"},{"label":"鼎湖区","value":"441203"},{"label":"高要区","value":"441204"},{"label":"广宁县","value":"441223"},{"label":"怀集县","value":"441224"},{"label":"封开县","value":"441225"},{"label":"德庆县","value":"441226"},{"label":"四会市","value":"441284"}],[{"label":"惠城区","value":"441302"},{"label":"惠阳区","value":"441303"},{"label":"博罗县","value":"441322"},{"label":"惠东县","value":"441323"},{"label":"龙门县","value":"441324"}],[{"label":"梅江区","value":"441402"},{"label":"梅县区","value":"441403"},{"label":"大埔县","value":"441422"},{"label":"丰顺县","value":"441423"},{"label":"五华县","value":"441424"},{"label":"平远县","value":"441426"},{"label":"蕉岭县","value":"441427"},{"label":"兴宁市","value":"441481"}],[{"label":"城区","value":"441502"},{"label":"海丰县","value":"441521"},{"label":"陆河县","value":"441523"},{"label":"陆丰市","value":"441581"}],[{"label":"源城区","value":"441602"},{"label":"紫金县","value":"441621"},{"label":"龙川县","value":"441622"},{"label":"连平县","value":"441623"},{"label":"和平县","value":"441624"},{"label":"东源县","value":"441625"}],[{"label":"江城区","value":"441702"},{"label":"阳东区","value":"441704"},{"label":"阳西县","value":"441721"},{"label":"阳春市","value":"441781"}],[{"label":"清城区","value":"441802"},{"label":"清新区","value":"441803"},{"label":"佛冈县","value":"441821"},{"label":"阳山县","value":"441823"},{"label":"连山壮族瑶族自治县","value":"441825"},{"label":"连南瑶族自治县","value":"441826"},{"label":"英德市","value":"441881"},{"label":"连州市","value":"441882"}],[{"label":"东莞市","value":"441900"}],[{"label":"中山市","value":"442000"}],[{"label":"湘桥区","value":"445102"},{"label":"潮安区","value":"445103"},{"label":"饶平县","value":"445122"}],[{"label":"榕城区","value":"445202"},{"label":"揭东区","value":"445203"},{"label":"揭西县","value":"445222"},{"label":"惠来县","value":"445224"},{"label":"普宁市","value":"445281"}],[{"label":"云城区","value":"445302"},{"label":"云安区","value":"445303"},{"label":"新兴县","value":"445321"},{"label":"郁南县","value":"445322"},{"label":"罗定市","value":"445381"}]],[[{"label":"兴宁区","value":"450102"},{"label":"青秀区","value":"450103"},{"label":"江南区","value":"450105"},{"label":"西乡塘区","value":"450107"},{"label":"良庆区","value":"450108"},{"label":"邕宁区","value":"450109"},{"label":"武鸣区","value":"450110"},{"label":"隆安县","value":"450123"},{"label":"马山县","value":"450124"},{"label":"上林县","value":"450125"},{"label":"宾阳县","value":"450126"},{"label":"横县","value":"450127"}],[{"label":"城中区","value":"450202"},{"label":"鱼峰区","value":"450203"},{"label":"柳南区","value":"450204"},{"label":"柳北区","value":"450205"},{"label":"柳江区","value":"450206"},{"label":"柳城县","value":"450222"},{"label":"鹿寨县","value":"450223"},{"label":"融安县","value":"450224"},{"label":"融水苗族自治县","value":"450225"},{"label":"三江侗族自治县","value":"450226"}],[{"label":"秀峰区","value":"450302"},{"label":"叠彩区","value":"450303"},{"label":"象山区","value":"450304"},{"label":"七星区","value":"450305"},{"label":"雁山区","value":"450311"},{"label":"临桂区","value":"450312"},{"label":"阳朔县","value":"450321"},{"label":"灵川县","value":"450323"},{"label":"全州县","value":"450324"},{"label":"兴安县","value":"450325"},{"label":"永福县","value":"450326"},{"label":"灌阳县","value":"450327"},{"label":"龙胜各族自治县","value":"450328"},{"label":"资源县","value":"450329"},{"label":"平乐县","value":"450330"},{"label":"荔浦县","value":"450331"},{"label":"恭城瑶族自治县","value":"450332"}],[{"label":"万秀区","value":"450403"},{"label":"长洲区","value":"450405"},{"label":"龙圩区","value":"450406"},{"label":"苍梧县","value":"450421"},{"label":"藤县","value":"450422"},{"label":"蒙山县","value":"450423"},{"label":"岑溪市","value":"450481"}],[{"label":"海城区","value":"450502"},{"label":"银海区","value":"450503"},{"label":"铁山港区","value":"450512"},{"label":"合浦县","value":"450521"}],[{"label":"港口区","value":"450602"},{"label":"防城区","value":"450603"},{"label":"上思县","value":"450621"},{"label":"东兴市","value":"450681"}],[{"label":"钦南区","value":"450702"},{"label":"钦北区","value":"450703"},{"label":"灵山县","value":"450721"},{"label":"浦北县","value":"450722"}],[{"label":"港北区","value":"450802"},{"label":"港南区","value":"450803"},{"label":"覃塘区","value":"450804"},{"label":"平南县","value":"450821"},{"label":"桂平市","value":"450881"}],[{"label":"玉州区","value":"450902"},{"label":"福绵区","value":"450903"},{"label":"容县","value":"450921"},{"label":"陆川县","value":"450922"},{"label":"博白县","value":"450923"},{"label":"兴业县","value":"450924"},{"label":"北流市","value":"450981"}],[{"label":"右江区","value":"451002"},{"label":"田阳县","value":"451021"},{"label":"田东县","value":"451022"},{"label":"平果县","value":"451023"},{"label":"德保县","value":"451024"},{"label":"那坡县","value":"451026"},{"label":"凌云县","value":"451027"},{"label":"乐业县","value":"451028"},{"label":"田林县","value":"451029"},{"label":"西林县","value":"451030"},{"label":"隆林各族自治县","value":"451031"},{"label":"靖西市","value":"451081"}],[{"label":"八步区","value":"451102"},{"label":"平桂区","value":"451103"},{"label":"昭平县","value":"451121"},{"label":"钟山县","value":"451122"},{"label":"富川瑶族自治县","value":"451123"}],[{"label":"金城江区","value":"451202"},{"label":"宜州区","value":"451203"},{"label":"南丹县","value":"451221"},{"label":"天峨县","value":"451222"},{"label":"凤山县","value":"451223"},{"label":"东兰县","value":"451224"},{"label":"罗城仫佬族自治县","value":"451225"},{"label":"环江毛南族自治县","value":"451226"},{"label":"巴马瑶族自治县","value":"451227"},{"label":"都安瑶族自治县","value":"451228"},{"label":"大化瑶族自治县","value":"451229"}],[{"label":"兴宾区","value":"451302"},{"label":"忻城县","value":"451321"},{"label":"象州县","value":"451322"},{"label":"武宣县","value":"451323"},{"label":"金秀瑶族自治县","value":"451324"},{"label":"合山市","value":"451381"}],[{"label":"江州区","value":"451402"},{"label":"扶绥县","value":"451421"},{"label":"宁明县","value":"451422"},{"label":"龙州县","value":"451423"},{"label":"大新县","value":"451424"},{"label":"天等县","value":"451425"},{"label":"凭祥市","value":"451481"}]],[[{"label":"秀英区","value":"460105"},{"label":"龙华区","value":"460106"},{"label":"琼山区","value":"460107"},{"label":"美兰区","value":"460108"}],[{"label":"海棠区","value":"460202"},{"label":"吉阳区","value":"460203"},{"label":"天涯区","value":"460204"},{"label":"崖州区","value":"460205"}],[{"label":"西沙群岛","value":"460321"},{"label":"南沙群岛","value":"460322"},{"label":"中沙群岛的岛礁及其海域","value":"460323"}],[{"label":"儋州市","value":"460400"}],[{"label":"五指山市","value":"469001"},{"label":"琼海市","value":"469002"},{"label":"文昌市","value":"469005"},{"label":"万宁市","value":"469006"},{"label":"东方市","value":"469007"},{"label":"定安县","value":"469021"},{"label":"屯昌县","value":"469022"},{"label":"澄迈县","value":"469023"},{"label":"临高县","value":"469024"},{"label":"白沙黎族自治县","value":"469025"},{"label":"昌江黎族自治县","value":"469026"},{"label":"乐东黎族自治县","value":"469027"},{"label":"陵水黎族自治县","value":"469028"},{"label":"保亭黎族苗族自治县","value":"469029"},{"label":"琼中黎族苗族自治县","value":"469030"}]],[[{"label":"万州区","value":"500101"},{"label":"涪陵区","value":"500102"},{"label":"渝中区","value":"500103"},{"label":"大渡口区","value":"500104"},{"label":"江北区","value":"500105"},{"label":"沙坪坝区","value":"500106"},{"label":"九龙坡区","value":"500107"},{"label":"南岸区","value":"500108"},{"label":"北碚区","value":"500109"},{"label":"綦江区","value":"500110"},{"label":"大足区","value":"500111"},{"label":"渝北区","value":"500112"},{"label":"巴南区","value":"500113"},{"label":"黔江区","value":"500114"},{"label":"长寿区","value":"500115"},{"label":"江津区","value":"500116"},{"label":"合川区","value":"500117"},{"label":"永川区","value":"500118"},{"label":"南川区","value":"500119"},{"label":"璧山区","value":"500120"},{"label":"铜梁区","value":"500151"},{"label":"潼南区","value":"500152"},{"label":"荣昌区","value":"500153"},{"label":"开州区","value":"500154"},{"label":"梁平区","value":"500155"},{"label":"武隆区","value":"500156"}],[{"label":"城口县","value":"500229"},{"label":"丰都县","value":"500230"},{"label":"垫江县","value":"500231"},{"label":"忠县","value":"500233"},{"label":"云阳县","value":"500235"},{"label":"奉节县","value":"500236"},{"label":"巫山县","value":"500237"},{"label":"巫溪县","value":"500238"},{"label":"石柱土家族自治县","value":"500240"},{"label":"秀山土家族苗族自治县","value":"500241"},{"label":"酉阳土家族苗族自治县","value":"500242"},{"label":"彭水苗族土家族自治县","value":"500243"}]],[[{"label":"锦江区","value":"510104"},{"label":"青羊区","value":"510105"},{"label":"金牛区","value":"510106"},{"label":"武侯区","value":"510107"},{"label":"成华区","value":"510108"},{"label":"龙泉驿区","value":"510112"},{"label":"青白江区","value":"510113"},{"label":"新都区","value":"510114"},{"label":"温江区","value":"510115"},{"label":"双流区","value":"510116"},{"label":"郫都区","value":"510117"},{"label":"金堂县","value":"510121"},{"label":"大邑县","value":"510129"},{"label":"蒲江县","value":"510131"},{"label":"新津县","value":"510132"},{"label":"都江堰市","value":"510181"},{"label":"彭州市","value":"510182"},{"label":"邛崃市","value":"510183"},{"label":"崇州市","value":"510184"},{"label":"简阳市","value":"510185"}],[{"label":"自流井区","value":"510302"},{"label":"贡井区","value":"510303"},{"label":"大安区","value":"510304"},{"label":"沿滩区","value":"510311"},{"label":"荣县","value":"510321"},{"label":"富顺县","value":"510322"}],[{"label":"东区","value":"510402"},{"label":"西区","value":"510403"},{"label":"仁和区","value":"510411"},{"label":"米易县","value":"510421"},{"label":"盐边县","value":"510422"}],[{"label":"江阳区","value":"510502"},{"label":"纳溪区","value":"510503"},{"label":"龙马潭区","value":"510504"},{"label":"泸县","value":"510521"},{"label":"合江县","value":"510522"},{"label":"叙永县","value":"510524"},{"label":"古蔺县","value":"510525"}],[{"label":"旌阳区","value":"510603"},{"label":"罗江区","value":"510604"},{"label":"中江县","value":"510623"},{"label":"广汉市","value":"510681"},{"label":"什邡市","value":"510682"},{"label":"绵竹市","value":"510683"}],[{"label":"涪城区","value":"510703"},{"label":"游仙区","value":"510704"},{"label":"安州区","value":"510705"},{"label":"三台县","value":"510722"},{"label":"盐亭县","value":"510723"},{"label":"梓潼县","value":"510725"},{"label":"北川羌族自治县","value":"510726"},{"label":"平武县","value":"510727"},{"label":"江油市","value":"510781"}],[{"label":"利州区","value":"510802"},{"label":"昭化区","value":"510811"},{"label":"朝天区","value":"510812"},{"label":"旺苍县","value":"510821"},{"label":"青川县","value":"510822"},{"label":"剑阁县","value":"510823"},{"label":"苍溪县","value":"510824"}],[{"label":"船山区","value":"510903"},{"label":"安居区","value":"510904"},{"label":"蓬溪县","value":"510921"},{"label":"射洪县","value":"510922"},{"label":"大英县","value":"510923"}],[{"label":"市中区","value":"511002"},{"label":"东兴区","value":"511011"},{"label":"威远县","value":"511024"},{"label":"资中县","value":"511025"},{"label":"内江经济开发区","value":"511071"},{"label":"隆昌市","value":"511083"}],[{"label":"市中区","value":"511102"},{"label":"沙湾区","value":"511111"},{"label":"五通桥区","value":"511112"},{"label":"金口河区","value":"511113"},{"label":"犍为县","value":"511123"},{"label":"井研县","value":"511124"},{"label":"夹江县","value":"511126"},{"label":"沐川县","value":"511129"},{"label":"峨边彝族自治县","value":"511132"},{"label":"马边彝族自治县","value":"511133"},{"label":"峨眉山市","value":"511181"}],[{"label":"顺庆区","value":"511302"},{"label":"高坪区","value":"511303"},{"label":"嘉陵区","value":"511304"},{"label":"南部县","value":"511321"},{"label":"营山县","value":"511322"},{"label":"蓬安县","value":"511323"},{"label":"仪陇县","value":"511324"},{"label":"西充县","value":"511325"},{"label":"阆中市","value":"511381"}],[{"label":"东坡区","value":"511402"},{"label":"彭山区","value":"511403"},{"label":"仁寿县","value":"511421"},{"label":"洪雅县","value":"511423"},{"label":"丹棱县","value":"511424"},{"label":"青神县","value":"511425"}],[{"label":"翠屏区","value":"511502"},{"label":"南溪区","value":"511503"},{"label":"宜宾县","value":"511521"},{"label":"江安县","value":"511523"},{"label":"长宁县","value":"511524"},{"label":"高县","value":"511525"},{"label":"珙县","value":"511526"},{"label":"筠连县","value":"511527"},{"label":"兴文县","value":"511528"},{"label":"屏山县","value":"511529"}],[{"label":"广安区","value":"511602"},{"label":"前锋区","value":"511603"},{"label":"岳池县","value":"511621"},{"label":"武胜县","value":"511622"},{"label":"邻水县","value":"511623"},{"label":"华蓥市","value":"511681"}],[{"label":"通川区","value":"511702"},{"label":"达川区","value":"511703"},{"label":"宣汉县","value":"511722"},{"label":"开江县","value":"511723"},{"label":"大竹县","value":"511724"},{"label":"渠县","value":"511725"},{"label":"达州经济开发区","value":"511771"},{"label":"万源市","value":"511781"}],[{"label":"雨城区","value":"511802"},{"label":"名山区","value":"511803"},{"label":"荥经县","value":"511822"},{"label":"汉源县","value":"511823"},{"label":"石棉县","value":"511824"},{"label":"天全县","value":"511825"},{"label":"芦山县","value":"511826"},{"label":"宝兴县","value":"511827"}],[{"label":"巴州区","value":"511902"},{"label":"恩阳区","value":"511903"},{"label":"通江县","value":"511921"},{"label":"南江县","value":"511922"},{"label":"平昌县","value":"511923"},{"label":"巴中经济开发区","value":"511971"}],[{"label":"雁江区","value":"512002"},{"label":"安岳县","value":"512021"},{"label":"乐至县","value":"512022"}],[{"label":"马尔康市","value":"513201"},{"label":"汶川县","value":"513221"},{"label":"理县","value":"513222"},{"label":"茂县","value":"513223"},{"label":"松潘县","value":"513224"},{"label":"九寨沟县","value":"513225"},{"label":"金川县","value":"513226"},{"label":"小金县","value":"513227"},{"label":"黑水县","value":"513228"},{"label":"壤塘县","value":"513230"},{"label":"阿坝县","value":"513231"},{"label":"若尔盖县","value":"513232"},{"label":"红原县","value":"513233"}],[{"label":"康定市","value":"513301"},{"label":"泸定县","value":"513322"},{"label":"丹巴县","value":"513323"},{"label":"九龙县","value":"513324"},{"label":"雅江县","value":"513325"},{"label":"道孚县","value":"513326"},{"label":"炉霍县","value":"513327"},{"label":"甘孜县","value":"513328"},{"label":"新龙县","value":"513329"},{"label":"德格县","value":"513330"},{"label":"白玉县","value":"513331"},{"label":"石渠县","value":"513332"},{"label":"色达县","value":"513333"},{"label":"理塘县","value":"513334"},{"label":"巴塘县","value":"513335"},{"label":"乡城县","value":"513336"},{"label":"稻城县","value":"513337"},{"label":"得荣县","value":"513338"}],[{"label":"西昌市","value":"513401"},{"label":"木里藏族自治县","value":"513422"},{"label":"盐源县","value":"513423"},{"label":"德昌县","value":"513424"},{"label":"会理县","value":"513425"},{"label":"会东县","value":"513426"},{"label":"宁南县","value":"513427"},{"label":"普格县","value":"513428"},{"label":"布拖县","value":"513429"},{"label":"金阳县","value":"513430"},{"label":"昭觉县","value":"513431"},{"label":"喜德县","value":"513432"},{"label":"冕宁县","value":"513433"},{"label":"越西县","value":"513434"},{"label":"甘洛县","value":"513435"},{"label":"美姑县","value":"513436"},{"label":"雷波县","value":"513437"}]],[[{"label":"南明区","value":"520102"},{"label":"云岩区","value":"520103"},{"label":"花溪区","value":"520111"},{"label":"乌当区","value":"520112"},{"label":"白云区","value":"520113"},{"label":"观山湖区","value":"520115"},{"label":"开阳县","value":"520121"},{"label":"息烽县","value":"520122"},{"label":"修文县","value":"520123"},{"label":"清镇市","value":"520181"}],[{"label":"钟山区","value":"520201"},{"label":"六枝特区","value":"520203"},{"label":"水城县","value":"520221"},{"label":"盘州市","value":"520281"}],[{"label":"红花岗区","value":"520302"},{"label":"汇川区","value":"520303"},{"label":"播州区","value":"520304"},{"label":"桐梓县","value":"520322"},{"label":"绥阳县","value":"520323"},{"label":"正安县","value":"520324"},{"label":"道真仡佬族苗族自治县","value":"520325"},{"label":"务川仡佬族苗族自治县","value":"520326"},{"label":"凤冈县","value":"520327"},{"label":"湄潭县","value":"520328"},{"label":"余庆县","value":"520329"},{"label":"习水县","value":"520330"},{"label":"赤水市","value":"520381"},{"label":"仁怀市","value":"520382"}],[{"label":"西秀区","value":"520402"},{"label":"平坝区","value":"520403"},{"label":"普定县","value":"520422"},{"label":"镇宁布依族苗族自治县","value":"520423"},{"label":"关岭布依族苗族自治县","value":"520424"},{"label":"紫云苗族布依族自治县","value":"520425"}],[{"label":"七星关区","value":"520502"},{"label":"大方县","value":"520521"},{"label":"黔西县","value":"520522"},{"label":"金沙县","value":"520523"},{"label":"织金县","value":"520524"},{"label":"纳雍县","value":"520525"},{"label":"威宁彝族回族苗族自治县","value":"520526"},{"label":"赫章县","value":"520527"}],[{"label":"碧江区","value":"520602"},{"label":"万山区","value":"520603"},{"label":"江口县","value":"520621"},{"label":"玉屏侗族自治县","value":"520622"},{"label":"石阡县","value":"520623"},{"label":"思南县","value":"520624"},{"label":"印江土家族苗族自治县","value":"520625"},{"label":"德江县","value":"520626"},{"label":"沿河土家族自治县","value":"520627"},{"label":"松桃苗族自治县","value":"520628"}],[{"label":"兴义市","value":"522301"},{"label":"兴仁县","value":"522322"},{"label":"普安县","value":"522323"},{"label":"晴隆县","value":"522324"},{"label":"贞丰县","value":"522325"},{"label":"望谟县","value":"522326"},{"label":"册亨县","value":"522327"},{"label":"安龙县","value":"522328"}],[{"label":"凯里市","value":"522601"},{"label":"黄平县","value":"522622"},{"label":"施秉县","value":"522623"},{"label":"三穗县","value":"522624"},{"label":"镇远县","value":"522625"},{"label":"岑巩县","value":"522626"},{"label":"天柱县","value":"522627"},{"label":"锦屏县","value":"522628"},{"label":"剑河县","value":"522629"},{"label":"台江县","value":"522630"},{"label":"黎平县","value":"522631"},{"label":"榕江县","value":"522632"},{"label":"从江县","value":"522633"},{"label":"雷山县","value":"522634"},{"label":"麻江县","value":"522635"},{"label":"丹寨县","value":"522636"}],[{"label":"都匀市","value":"522701"},{"label":"福泉市","value":"522702"},{"label":"荔波县","value":"522722"},{"label":"贵定县","value":"522723"},{"label":"瓮安县","value":"522725"},{"label":"独山县","value":"522726"},{"label":"平塘县","value":"522727"},{"label":"罗甸县","value":"522728"},{"label":"长顺县","value":"522729"},{"label":"龙里县","value":"522730"},{"label":"惠水县","value":"522731"},{"label":"三都水族自治县","value":"522732"}]],[[{"label":"五华区","value":"530102"},{"label":"盘龙区","value":"530103"},{"label":"官渡区","value":"530111"},{"label":"西山区","value":"530112"},{"label":"东川区","value":"530113"},{"label":"呈贡区","value":"530114"},{"label":"晋宁区","value":"530115"},{"label":"富民县","value":"530124"},{"label":"宜良县","value":"530125"},{"label":"石林彝族自治县","value":"530126"},{"label":"嵩明县","value":"530127"},{"label":"禄劝彝族苗族自治县","value":"530128"},{"label":"寻甸回族彝族自治县","value":"530129"},{"label":"安宁市","value":"530181"}],[{"label":"麒麟区","value":"530302"},{"label":"沾益区","value":"530303"},{"label":"马龙县","value":"530321"},{"label":"陆良县","value":"530322"},{"label":"师宗县","value":"530323"},{"label":"罗平县","value":"530324"},{"label":"富源县","value":"530325"},{"label":"会泽县","value":"530326"},{"label":"宣威市","value":"530381"}],[{"label":"红塔区","value":"530402"},{"label":"江川区","value":"530403"},{"label":"澄江县","value":"530422"},{"label":"通海县","value":"530423"},{"label":"华宁县","value":"530424"},{"label":"易门县","value":"530425"},{"label":"峨山彝族自治县","value":"530426"},{"label":"新平彝族傣族自治县","value":"530427"},{"label":"元江哈尼族彝族傣族自治县","value":"530428"}],[{"label":"隆阳区","value":"530502"},{"label":"施甸县","value":"530521"},{"label":"龙陵县","value":"530523"},{"label":"昌宁县","value":"530524"},{"label":"腾冲市","value":"530581"}],[{"label":"昭阳区","value":"530602"},{"label":"鲁甸县","value":"530621"},{"label":"巧家县","value":"530622"},{"label":"盐津县","value":"530623"},{"label":"大关县","value":"530624"},{"label":"永善县","value":"530625"},{"label":"绥江县","value":"530626"},{"label":"镇雄县","value":"530627"},{"label":"彝良县","value":"530628"},{"label":"威信县","value":"530629"},{"label":"水富县","value":"530630"}],[{"label":"古城区","value":"530702"},{"label":"玉龙纳西族自治县","value":"530721"},{"label":"永胜县","value":"530722"},{"label":"华坪县","value":"530723"},{"label":"宁蒗彝族自治县","value":"530724"}],[{"label":"思茅区","value":"530802"},{"label":"宁洱哈尼族彝族自治县","value":"530821"},{"label":"墨江哈尼族自治县","value":"530822"},{"label":"景东彝族自治县","value":"530823"},{"label":"景谷傣族彝族自治县","value":"530824"},{"label":"镇沅彝族哈尼族拉祜族自治县","value":"530825"},{"label":"江城哈尼族彝族自治县","value":"530826"},{"label":"孟连傣族拉祜族佤族自治县","value":"530827"},{"label":"澜沧拉祜族自治县","value":"530828"},{"label":"西盟佤族自治县","value":"530829"}],[{"label":"临翔区","value":"530902"},{"label":"凤庆县","value":"530921"},{"label":"云县","value":"530922"},{"label":"永德县","value":"530923"},{"label":"镇康县","value":"530924"},{"label":"双江拉祜族佤族布朗族傣族自治县","value":"530925"},{"label":"耿马傣族佤族自治县","value":"530926"},{"label":"沧源佤族自治县","value":"530927"}],[{"label":"楚雄市","value":"532301"},{"label":"双柏县","value":"532322"},{"label":"牟定县","value":"532323"},{"label":"南华县","value":"532324"},{"label":"姚安县","value":"532325"},{"label":"大姚县","value":"532326"},{"label":"永仁县","value":"532327"},{"label":"元谋县","value":"532328"},{"label":"武定县","value":"532329"},{"label":"禄丰县","value":"532331"}],[{"label":"个旧市","value":"532501"},{"label":"开远市","value":"532502"},{"label":"蒙自市","value":"532503"},{"label":"弥勒市","value":"532504"},{"label":"屏边苗族自治县","value":"532523"},{"label":"建水县","value":"532524"},{"label":"石屏县","value":"532525"},{"label":"泸西县","value":"532527"},{"label":"元阳县","value":"532528"},{"label":"红河县","value":"532529"},{"label":"金平苗族瑶族傣族自治县","value":"532530"},{"label":"绿春县","value":"532531"},{"label":"河口瑶族自治县","value":"532532"}],[{"label":"文山市","value":"532601"},{"label":"砚山县","value":"532622"},{"label":"西畴县","value":"532623"},{"label":"麻栗坡县","value":"532624"},{"label":"马关县","value":"532625"},{"label":"丘北县","value":"532626"},{"label":"广南县","value":"532627"},{"label":"富宁县","value":"532628"}],[{"label":"景洪市","value":"532801"},{"label":"勐海县","value":"532822"},{"label":"勐腊县","value":"532823"}],[{"label":"大理市","value":"532901"},{"label":"漾濞彝族自治县","value":"532922"},{"label":"祥云县","value":"532923"},{"label":"宾川县","value":"532924"},{"label":"弥渡县","value":"532925"},{"label":"南涧彝族自治县","value":"532926"},{"label":"巍山彝族回族自治县","value":"532927"},{"label":"永平县","value":"532928"},{"label":"云龙县","value":"532929"},{"label":"洱源县","value":"532930"},{"label":"剑川县","value":"532931"},{"label":"鹤庆县","value":"532932"}],[{"label":"瑞丽市","value":"533102"},{"label":"芒市","value":"533103"},{"label":"梁河县","value":"533122"},{"label":"盈江县","value":"533123"},{"label":"陇川县","value":"533124"}],[{"label":"泸水市","value":"533301"},{"label":"福贡县","value":"533323"},{"label":"贡山独龙族怒族自治县","value":"533324"},{"label":"兰坪白族普米族自治县","value":"533325"}],[{"label":"香格里拉市","value":"533401"},{"label":"德钦县","value":"533422"},{"label":"维西傈僳族自治县","value":"533423"}]],[[{"label":"城关区","value":"540102"},{"label":"堆龙德庆区","value":"540103"},{"label":"林周县","value":"540121"},{"label":"当雄县","value":"540122"},{"label":"尼木县","value":"540123"},{"label":"曲水县","value":"540124"},{"label":"达孜县","value":"540126"},{"label":"墨竹工卡县","value":"540127"},{"label":"格尔木藏青工业园区","value":"540171"},{"label":"拉萨经济技术开发区","value":"540172"},{"label":"西藏文化旅游创意园区","value":"540173"},{"label":"达孜工业园区","value":"540174"}],[{"label":"桑珠孜区","value":"540202"},{"label":"南木林县","value":"540221"},{"label":"江孜县","value":"540222"},{"label":"定日县","value":"540223"},{"label":"萨迦县","value":"540224"},{"label":"拉孜县","value":"540225"},{"label":"昂仁县","value":"540226"},{"label":"谢通门县","value":"540227"},{"label":"白朗县","value":"540228"},{"label":"仁布县","value":"540229"},{"label":"康马县","value":"540230"},{"label":"定结县","value":"540231"},{"label":"仲巴县","value":"540232"},{"label":"亚东县","value":"540233"},{"label":"吉隆县","value":"540234"},{"label":"聂拉木县","value":"540235"},{"label":"萨嘎县","value":"540236"},{"label":"岗巴县","value":"540237"}],[{"label":"卡若区","value":"540302"},{"label":"江达县","value":"540321"},{"label":"贡觉县","value":"540322"},{"label":"类乌齐县","value":"540323"},{"label":"丁青县","value":"540324"},{"label":"察雅县","value":"540325"},{"label":"八宿县","value":"540326"},{"label":"左贡县","value":"540327"},{"label":"芒康县","value":"540328"},{"label":"洛隆县","value":"540329"},{"label":"边坝县","value":"540330"}],[{"label":"巴宜区","value":"540402"},{"label":"工布江达县","value":"540421"},{"label":"米林县","value":"540422"},{"label":"墨脱县","value":"540423"},{"label":"波密县","value":"540424"},{"label":"察隅县","value":"540425"},{"label":"朗县","value":"540426"}],[{"label":"乃东区","value":"540502"},{"label":"扎囊县","value":"540521"},{"label":"贡嘎县","value":"540522"},{"label":"桑日县","value":"540523"},{"label":"琼结县","value":"540524"},{"label":"曲松县","value":"540525"},{"label":"措美县","value":"540526"},{"label":"洛扎县","value":"540527"},{"label":"加查县","value":"540528"},{"label":"隆子县","value":"540529"},{"label":"错那县","value":"540530"},{"label":"浪卡子县","value":"540531"}],[{"label":"那曲县","value":"542421"},{"label":"嘉黎县","value":"542422"},{"label":"比如县","value":"542423"},{"label":"聂荣县","value":"542424"},{"label":"安多县","value":"542425"},{"label":"申扎县","value":"542426"},{"label":"索县","value":"542427"},{"label":"班戈县","value":"542428"},{"label":"巴青县","value":"542429"},{"label":"尼玛县","value":"542430"},{"label":"双湖县","value":"542431"}],[{"label":"普兰县","value":"542521"},{"label":"札达县","value":"542522"},{"label":"噶尔县","value":"542523"},{"label":"日土县","value":"542524"},{"label":"革吉县","value":"542525"},{"label":"改则县","value":"542526"},{"label":"措勤县","value":"542527"}]],[[{"label":"新城区","value":"610102"},{"label":"碑林区","value":"610103"},{"label":"莲湖区","value":"610104"},{"label":"灞桥区","value":"610111"},{"label":"未央区","value":"610112"},{"label":"雁塔区","value":"610113"},{"label":"阎良区","value":"610114"},{"label":"临潼区","value":"610115"},{"label":"长安区","value":"610116"},{"label":"高陵区","value":"610117"},{"label":"鄠邑区","value":"610118"},{"label":"蓝田县","value":"610122"},{"label":"周至县","value":"610124"}],[{"label":"王益区","value":"610202"},{"label":"印台区","value":"610203"},{"label":"耀州区","value":"610204"},{"label":"宜君县","value":"610222"}],[{"label":"渭滨区","value":"610302"},{"label":"金台区","value":"610303"},{"label":"陈仓区","value":"610304"},{"label":"凤翔县","value":"610322"},{"label":"岐山县","value":"610323"},{"label":"扶风县","value":"610324"},{"label":"眉县","value":"610326"},{"label":"陇县","value":"610327"},{"label":"千阳县","value":"610328"},{"label":"麟游县","value":"610329"},{"label":"凤县","value":"610330"},{"label":"太白县","value":"610331"}],[{"label":"秦都区","value":"610402"},{"label":"杨陵区","value":"610403"},{"label":"渭城区","value":"610404"},{"label":"三原县","value":"610422"},{"label":"泾阳县","value":"610423"},{"label":"乾县","value":"610424"},{"label":"礼泉县","value":"610425"},{"label":"永寿县","value":"610426"},{"label":"彬县","value":"610427"},{"label":"长武县","value":"610428"},{"label":"旬邑县","value":"610429"},{"label":"淳化县","value":"610430"},{"label":"武功县","value":"610431"},{"label":"兴平市","value":"610481"}],[{"label":"临渭区","value":"610502"},{"label":"华州区","value":"610503"},{"label":"潼关县","value":"610522"},{"label":"大荔县","value":"610523"},{"label":"合阳县","value":"610524"},{"label":"澄城县","value":"610525"},{"label":"蒲城县","value":"610526"},{"label":"白水县","value":"610527"},{"label":"富平县","value":"610528"},{"label":"韩城市","value":"610581"},{"label":"华阴市","value":"610582"}],[{"label":"宝塔区","value":"610602"},{"label":"安塞区","value":"610603"},{"label":"延长县","value":"610621"},{"label":"延川县","value":"610622"},{"label":"子长县","value":"610623"},{"label":"志丹县","value":"610625"},{"label":"吴起县","value":"610626"},{"label":"甘泉县","value":"610627"},{"label":"富县","value":"610628"},{"label":"洛川县","value":"610629"},{"label":"宜川县","value":"610630"},{"label":"黄龙县","value":"610631"},{"label":"黄陵县","value":"610632"}],[{"label":"汉台区","value":"610702"},{"label":"南郑区","value":"610703"},{"label":"城固县","value":"610722"},{"label":"洋县","value":"610723"},{"label":"西乡县","value":"610724"},{"label":"勉县","value":"610725"},{"label":"宁强县","value":"610726"},{"label":"略阳县","value":"610727"},{"label":"镇巴县","value":"610728"},{"label":"留坝县","value":"610729"},{"label":"佛坪县","value":"610730"}],[{"label":"榆阳区","value":"610802"},{"label":"横山区","value":"610803"},{"label":"府谷县","value":"610822"},{"label":"靖边县","value":"610824"},{"label":"定边县","value":"610825"},{"label":"绥德县","value":"610826"},{"label":"米脂县","value":"610827"},{"label":"佳县","value":"610828"},{"label":"吴堡县","value":"610829"},{"label":"清涧县","value":"610830"},{"label":"子洲县","value":"610831"},{"label":"神木市","value":"610881"}],[{"label":"汉滨区","value":"610902"},{"label":"汉阴县","value":"610921"},{"label":"石泉县","value":"610922"},{"label":"宁陕县","value":"610923"},{"label":"紫阳县","value":"610924"},{"label":"岚皋县","value":"610925"},{"label":"平利县","value":"610926"},{"label":"镇坪县","value":"610927"},{"label":"旬阳县","value":"610928"},{"label":"白河县","value":"610929"}],[{"label":"商州区","value":"611002"},{"label":"洛南县","value":"611021"},{"label":"丹凤县","value":"611022"},{"label":"商南县","value":"611023"},{"label":"山阳县","value":"611024"},{"label":"镇安县","value":"611025"},{"label":"柞水县","value":"611026"}]],[[{"label":"城关区","value":"620102"},{"label":"七里河区","value":"620103"},{"label":"西固区","value":"620104"},{"label":"安宁区","value":"620105"},{"label":"红古区","value":"620111"},{"label":"永登县","value":"620121"},{"label":"皋兰县","value":"620122"},{"label":"榆中县","value":"620123"},{"label":"兰州新区","value":"620171"}],[{"label":"嘉峪关市","value":"620201"}],[{"label":"金川区","value":"620302"},{"label":"永昌县","value":"620321"}],[{"label":"白银区","value":"620402"},{"label":"平川区","value":"620403"},{"label":"靖远县","value":"620421"},{"label":"会宁县","value":"620422"},{"label":"景泰县","value":"620423"}],[{"label":"秦州区","value":"620502"},{"label":"麦积区","value":"620503"},{"label":"清水县","value":"620521"},{"label":"秦安县","value":"620522"},{"label":"甘谷县","value":"620523"},{"label":"武山县","value":"620524"},{"label":"张家川回族自治县","value":"620525"}],[{"label":"凉州区","value":"620602"},{"label":"民勤县","value":"620621"},{"label":"古浪县","value":"620622"},{"label":"天祝藏族自治县","value":"620623"}],[{"label":"甘州区","value":"620702"},{"label":"肃南裕固族自治县","value":"620721"},{"label":"民乐县","value":"620722"},{"label":"临泽县","value":"620723"},{"label":"高台县","value":"620724"},{"label":"山丹县","value":"620725"}],[{"label":"崆峒区","value":"620802"},{"label":"泾川县","value":"620821"},{"label":"灵台县","value":"620822"},{"label":"崇信县","value":"620823"},{"label":"华亭县","value":"620824"},{"label":"庄浪县","value":"620825"},{"label":"静宁县","value":"620826"},{"label":"平凉工业园区","value":"620871"}],[{"label":"肃州区","value":"620902"},{"label":"金塔县","value":"620921"},{"label":"瓜州县","value":"620922"},{"label":"肃北蒙古族自治县","value":"620923"},{"label":"阿克塞哈萨克族自治县","value":"620924"},{"label":"玉门市","value":"620981"},{"label":"敦煌市","value":"620982"}],[{"label":"西峰区","value":"621002"},{"label":"庆城县","value":"621021"},{"label":"环县","value":"621022"},{"label":"华池县","value":"621023"},{"label":"合水县","value":"621024"},{"label":"正宁县","value":"621025"},{"label":"宁县","value":"621026"},{"label":"镇原县","value":"621027"}],[{"label":"安定区","value":"621102"},{"label":"通渭县","value":"621121"},{"label":"陇西县","value":"621122"},{"label":"渭源县","value":"621123"},{"label":"临洮县","value":"621124"},{"label":"漳县","value":"621125"},{"label":"岷县","value":"621126"}],[{"label":"武都区","value":"621202"},{"label":"成县","value":"621221"},{"label":"文县","value":"621222"},{"label":"宕昌县","value":"621223"},{"label":"康县","value":"621224"},{"label":"西和县","value":"621225"},{"label":"礼县","value":"621226"},{"label":"徽县","value":"621227"},{"label":"两当县","value":"621228"}],[{"label":"临夏市","value":"622901"},{"label":"临夏县","value":"622921"},{"label":"康乐县","value":"622922"},{"label":"永靖县","value":"622923"},{"label":"广河县","value":"622924"},{"label":"和政县","value":"622925"},{"label":"东乡族自治县","value":"622926"},{"label":"积石山保安族东乡族撒拉族自治县","value":"622927"}],[{"label":"合作市","value":"623001"},{"label":"临潭县","value":"623021"},{"label":"卓尼县","value":"623022"},{"label":"舟曲县","value":"623023"},{"label":"迭部县","value":"623024"},{"label":"玛曲县","value":"623025"},{"label":"碌曲县","value":"623026"},{"label":"夏河县","value":"623027"}]],[[{"label":"城东区","value":"630102"},{"label":"城中区","value":"630103"},{"label":"城西区","value":"630104"},{"label":"城北区","value":"630105"},{"label":"大通回族土族自治县","value":"630121"},{"label":"湟中县","value":"630122"},{"label":"湟源县","value":"630123"}],[{"label":"乐都区","value":"630202"},{"label":"平安区","value":"630203"},{"label":"民和回族土族自治县","value":"630222"},{"label":"互助土族自治县","value":"630223"},{"label":"化隆回族自治县","value":"630224"},{"label":"循化撒拉族自治县","value":"630225"}],[{"label":"门源回族自治县","value":"632221"},{"label":"祁连县","value":"632222"},{"label":"海晏县","value":"632223"},{"label":"刚察县","value":"632224"}],[{"label":"同仁县","value":"632321"},{"label":"尖扎县","value":"632322"},{"label":"泽库县","value":"632323"},{"label":"河南蒙古族自治县","value":"632324"}],[{"label":"共和县","value":"632521"},{"label":"同德县","value":"632522"},{"label":"贵德县","value":"632523"},{"label":"兴海县","value":"632524"},{"label":"贵南县","value":"632525"}],[{"label":"玛沁县","value":"632621"},{"label":"班玛县","value":"632622"},{"label":"甘德县","value":"632623"},{"label":"达日县","value":"632624"},{"label":"久治县","value":"632625"},{"label":"玛多县","value":"632626"}],[{"label":"玉树市","value":"632701"},{"label":"杂多县","value":"632722"},{"label":"称多县","value":"632723"},{"label":"治多县","value":"632724"},{"label":"囊谦县","value":"632725"},{"label":"曲麻莱县","value":"632726"}],[{"label":"格尔木市","value":"632801"},{"label":"德令哈市","value":"632802"},{"label":"乌兰县","value":"632821"},{"label":"都兰县","value":"632822"},{"label":"天峻县","value":"632823"},{"label":"大柴旦行政委员会","value":"632857"},{"label":"冷湖行政委员会","value":"632858"},{"label":"茫崖行政委员会","value":"632859"}]],[[{"label":"兴庆区","value":"640104"},{"label":"西夏区","value":"640105"},{"label":"金凤区","value":"640106"},{"label":"永宁县","value":"640121"},{"label":"贺兰县","value":"640122"},{"label":"灵武市","value":"640181"}],[{"label":"大武口区","value":"640202"},{"label":"惠农区","value":"640205"},{"label":"平罗县","value":"640221"}],[{"label":"利通区","value":"640302"},{"label":"红寺堡区","value":"640303"},{"label":"盐池县","value":"640323"},{"label":"同心县","value":"640324"},{"label":"青铜峡市","value":"640381"}],[{"label":"原州区","value":"640402"},{"label":"西吉县","value":"640422"},{"label":"隆德县","value":"640423"},{"label":"泾源县","value":"640424"},{"label":"彭阳县","value":"640425"}],[{"label":"沙坡头区","value":"640502"},{"label":"中宁县","value":"640521"},{"label":"海原县","value":"640522"}]],[[{"label":"天山区","value":"650102"},{"label":"沙依巴克区","value":"650103"},{"label":"新市区","value":"650104"},{"label":"水磨沟区","value":"650105"},{"label":"头屯河区","value":"650106"},{"label":"达坂城区","value":"650107"},{"label":"米东区","value":"650109"},{"label":"乌鲁木齐县","value":"650121"},{"label":"乌鲁木齐经济技术开发区","value":"650171"},{"label":"乌鲁木齐高新技术产业开发区","value":"650172"}],[{"label":"独山子区","value":"650202"},{"label":"克拉玛依区","value":"650203"},{"label":"白碱滩区","value":"650204"},{"label":"乌尔禾区","value":"650205"}],[{"label":"高昌区","value":"650402"},{"label":"鄯善县","value":"650421"},{"label":"托克逊县","value":"650422"}],[{"label":"伊州区","value":"650502"},{"label":"巴里坤哈萨克自治县","value":"650521"},{"label":"伊吾县","value":"650522"}],[{"label":"昌吉市","value":"652301"},{"label":"阜康市","value":"652302"},{"label":"呼图壁县","value":"652323"},{"label":"玛纳斯县","value":"652324"},{"label":"奇台县","value":"652325"},{"label":"吉木萨尔县","value":"652327"},{"label":"木垒哈萨克自治县","value":"652328"}],[{"label":"博乐市","value":"652701"},{"label":"阿拉山口市","value":"652702"},{"label":"精河县","value":"652722"},{"label":"温泉县","value":"652723"}],[{"label":"库尔勒市","value":"652801"},{"label":"轮台县","value":"652822"},{"label":"尉犁县","value":"652823"},{"label":"若羌县","value":"652824"},{"label":"且末县","value":"652825"},{"label":"焉耆回族自治县","value":"652826"},{"label":"和静县","value":"652827"},{"label":"和硕县","value":"652828"},{"label":"博湖县","value":"652829"},{"label":"库尔勒经济技术开发区","value":"652871"}],[{"label":"阿克苏市","value":"652901"},{"label":"温宿县","value":"652922"},{"label":"库车县","value":"652923"},{"label":"沙雅县","value":"652924"},{"label":"新和县","value":"652925"},{"label":"拜城县","value":"652926"},{"label":"乌什县","value":"652927"},{"label":"阿瓦提县","value":"652928"},{"label":"柯坪县","value":"652929"}],[{"label":"阿图什市","value":"653001"},{"label":"阿克陶县","value":"653022"},{"label":"阿合奇县","value":"653023"},{"label":"乌恰县","value":"653024"}],[{"label":"喀什市","value":"653101"},{"label":"疏附县","value":"653121"},{"label":"疏勒县","value":"653122"},{"label":"英吉沙县","value":"653123"},{"label":"泽普县","value":"653124"},{"label":"莎车县","value":"653125"},{"label":"叶城县","value":"653126"},{"label":"麦盖提县","value":"653127"},{"label":"岳普湖县","value":"653128"},{"label":"伽师县","value":"653129"},{"label":"巴楚县","value":"653130"},{"label":"塔什库尔干塔吉克自治县","value":"653131"}],[{"label":"和田市","value":"653201"},{"label":"和田县","value":"653221"},{"label":"墨玉县","value":"653222"},{"label":"皮山县","value":"653223"},{"label":"洛浦县","value":"653224"},{"label":"策勒县","value":"653225"},{"label":"于田县","value":"653226"},{"label":"民丰县","value":"653227"}],[{"label":"伊宁市","value":"654002"},{"label":"奎屯市","value":"654003"},{"label":"霍尔果斯市","value":"654004"},{"label":"伊宁县","value":"654021"},{"label":"察布查尔锡伯自治县","value":"654022"},{"label":"霍城县","value":"654023"},{"label":"巩留县","value":"654024"},{"label":"新源县","value":"654025"},{"label":"昭苏县","value":"654026"},{"label":"特克斯县","value":"654027"},{"label":"尼勒克县","value":"654028"}],[{"label":"塔城市","value":"654201"},{"label":"乌苏市","value":"654202"},{"label":"额敏县","value":"654221"},{"label":"沙湾县","value":"654223"},{"label":"托里县","value":"654224"},{"label":"裕民县","value":"654225"},{"label":"和布克赛尔蒙古自治县","value":"654226"}],[{"label":"阿勒泰市","value":"654301"},{"label":"布尔津县","value":"654321"},{"label":"富蕴县","value":"654322"},{"label":"福海县","value":"654323"},{"label":"哈巴河县","value":"654324"},{"label":"青河县","value":"654325"},{"label":"吉木乃县","value":"654326"}],[{"label":"石河子市","value":"659001"},{"label":"阿拉尔市","value":"659002"},{"label":"图木舒克市","value":"659003"},{"label":"五家渠市","value":"659004"},{"label":"铁门关市","value":"659006"}]],[[{"label":"台北","value":"660101"}],[{"label":"高雄","value":"660201"}],[{"label":"基隆","value":"660301"}],[{"label":"台中","value":"660401"}],[{"label":"台南","value":"660501"}],[{"label":"新竹","value":"660601"}],[{"label":"嘉义","value":"660701"}],[{"label":"宜兰","value":"660801"}],[{"label":"桃园","value":"660901"}],[{"label":"苗栗","value":"661001"}],[{"label":"彰化","value":"661101"}],[{"label":"南投","value":"661201"}],[{"label":"云林","value":"661301"}],[{"label":"屏东","value":"661401"}],[{"label":"台东","value":"661501"}],[{"label":"花莲","value":"661601"}],[{"label":"澎湖","value":"661701"}]],[[{"label":"香港岛","value":"670101"}],[{"label":"九龙","value":"670201"}],[{"label":"新界","value":"670301"}]],[[{"label":"澳门半岛","value":"680101"}],[{"label":"氹仔岛","value":"680201"}],[{"label":"路环岛","value":"680301"}],[{"label":"路氹城","value":"680401"}]]];export default areaData;
\ No newline at end of file
diff --git a/tuniao-ui/libs/utils/async-validator.js b/tuniao-ui/libs/utils/async-validator.js
new file mode 100644
index 0000000..d7215b9
--- /dev/null
+++ b/tuniao-ui/libs/utils/async-validator.js
@@ -0,0 +1,1356 @@
+function _extends() {
+ _extends = Object.assign || function(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+ };
+
+ return _extends.apply(this, arguments);
+}
+
+/* eslint no-console:0 */
+var formatRegExp = /%[sdj%]/g;
+var warning = function warning() {}; // don't print warning message when in production env or node runtime
+
+if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !==
+ 'undefined' && typeof document !== 'undefined') {
+ warning = function warning(type, errors) {
+ if (typeof console !== 'undefined' && console.warn) {
+ if (errors.every(function(e) {
+ return typeof e === 'string';
+ })) {
+ console.warn(type, errors);
+ }
+ }
+ };
+}
+
+function convertFieldsError(errors) {
+ if (!errors || !errors.length) return null;
+ var fields = {};
+ errors.forEach(function(error) {
+ var field = error.field;
+ fields[field] = fields[field] || [];
+ fields[field].push(error);
+ });
+ return fields;
+}
+
+function format() {
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ var i = 1;
+ var f = args[0];
+ var len = args.length;
+
+ if (typeof f === 'function') {
+ return f.apply(null, args.slice(1));
+ }
+
+ if (typeof f === 'string') {
+ var str = String(f).replace(formatRegExp, function(x) {
+ if (x === '%%') {
+ return '%';
+ }
+
+ if (i >= len) {
+ return x;
+ }
+
+ switch (x) {
+ case '%s':
+ return String(args[i++]);
+
+ case '%d':
+ return Number(args[i++]);
+
+ case '%j':
+ try {
+ return JSON.stringify(args[i++]);
+ } catch (_) {
+ return '[Circular]';
+ }
+
+ break;
+
+ default:
+ return x;
+ }
+ });
+
+ for (var arg = args[i]; i < len; arg = args[++i]) {
+ str += " " + arg;
+ }
+
+ return str;
+ }
+
+ return f;
+}
+
+function isNativeStringType(type) {
+ return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern';
+}
+
+function isEmptyValue(value, type) {
+ if (value === undefined || value === null) {
+ return true;
+ }
+
+ if (type === 'array' && Array.isArray(value) && !value.length) {
+ return true;
+ }
+
+ if (isNativeStringType(type) && typeof value === 'string' && !value) {
+ return true;
+ }
+
+ return false;
+}
+
+function asyncParallelArray(arr, func, callback) {
+ var results = [];
+ var total = 0;
+ var arrLength = arr.length;
+
+ function count(errors) {
+ results.push.apply(results, errors);
+ total++;
+
+ if (total === arrLength) {
+ callback(results);
+ }
+ }
+
+ arr.forEach(function(a) {
+ func(a, count);
+ });
+}
+
+function asyncSerialArray(arr, func, callback) {
+ var index = 0;
+ var arrLength = arr.length;
+
+ function next(errors) {
+ if (errors && errors.length) {
+ callback(errors);
+ return;
+ }
+
+ var original = index;
+ index = index + 1;
+
+ if (original < arrLength) {
+ func(arr[original], next);
+ } else {
+ callback([]);
+ }
+ }
+
+ next([]);
+}
+
+function flattenObjArr(objArr) {
+ var ret = [];
+ Object.keys(objArr).forEach(function(k) {
+ ret.push.apply(ret, objArr[k]);
+ });
+ return ret;
+}
+
+function asyncMap(objArr, option, func, callback) {
+ if (option.first) {
+ var _pending = new Promise(function(resolve, reject) {
+ var next = function next(errors) {
+ callback(errors);
+ return errors.length ? reject({
+ errors: errors,
+ fields: convertFieldsError(errors)
+ }) : resolve();
+ };
+
+ var flattenArr = flattenObjArr(objArr);
+ asyncSerialArray(flattenArr, func, next);
+ });
+
+ _pending["catch"](function(e) {
+ return e;
+ });
+
+ return _pending;
+ }
+
+ var firstFields = option.firstFields || [];
+
+ if (firstFields === true) {
+ firstFields = Object.keys(objArr);
+ }
+
+ var objArrKeys = Object.keys(objArr);
+ var objArrLength = objArrKeys.length;
+ var total = 0;
+ var results = [];
+ var pending = new Promise(function(resolve, reject) {
+ var next = function next(errors) {
+ results.push.apply(results, errors);
+ total++;
+
+ if (total === objArrLength) {
+ callback(results);
+ return results.length ? reject({
+ errors: results,
+ fields: convertFieldsError(results)
+ }) : resolve();
+ }
+ };
+
+ if (!objArrKeys.length) {
+ callback(results);
+ resolve();
+ }
+
+ objArrKeys.forEach(function(key) {
+ var arr = objArr[key];
+
+ if (firstFields.indexOf(key) !== -1) {
+ asyncSerialArray(arr, func, next);
+ } else {
+ asyncParallelArray(arr, func, next);
+ }
+ });
+ });
+ pending["catch"](function(e) {
+ return e;
+ });
+ return pending;
+}
+
+function complementError(rule) {
+ return function(oe) {
+ if (oe && oe.message) {
+ oe.field = oe.field || rule.fullField;
+ return oe;
+ }
+
+ return {
+ message: typeof oe === 'function' ? oe() : oe,
+ field: oe.field || rule.fullField
+ };
+ };
+}
+
+function deepMerge(target, source) {
+ if (source) {
+ for (var s in source) {
+ if (source.hasOwnProperty(s)) {
+ var value = source[s];
+
+ if (typeof value === 'object' && typeof target[s] === 'object') {
+ target[s] = _extends({}, target[s], {}, value);
+ } else {
+ target[s] = value;
+ }
+ }
+ }
+ }
+
+ return target;
+}
+
+/**
+ * Rule for validating required fields.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function required(rule, value, source, errors, options, type) {
+ if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {
+ errors.push(format(options.messages.required, rule.fullField));
+ }
+}
+
+/**
+ * Rule for validating whitespace.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function whitespace(rule, value, source, errors, options) {
+ if (/^\s+$/.test(value) || value === '') {
+ errors.push(format(options.messages.whitespace, rule.fullField));
+ }
+}
+
+/* eslint max-len:0 */
+
+var pattern = {
+ // http://emailregex.com/
+ email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
+ 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'),
+ hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
+};
+var types = {
+ integer: function integer(value) {
+ return types.number(value) && parseInt(value, 10) === value;
+ },
+ "float": function float(value) {
+ return types.number(value) && !types.integer(value);
+ },
+ array: function array(value) {
+ return Array.isArray(value);
+ },
+ regexp: function regexp(value) {
+ if (value instanceof RegExp) {
+ return true;
+ }
+
+ try {
+ return !!new RegExp(value);
+ } catch (e) {
+ return false;
+ }
+ },
+ date: function date(value) {
+ return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear ===
+ 'function';
+ },
+ number: function number(value) {
+ if (isNaN(value)) {
+ return false;
+ }
+
+ // 修改源码,将字符串数值先转为数值
+ return typeof +value === 'number';
+ },
+ object: function object(value) {
+ return typeof value === 'object' && !types.array(value);
+ },
+ method: function method(value) {
+ return typeof value === 'function';
+ },
+ email: function email(value) {
+ return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;
+ },
+ url: function url(value) {
+ return typeof value === 'string' && !!value.match(pattern.url);
+ },
+ hex: function hex(value) {
+ return typeof value === 'string' && !!value.match(pattern.hex);
+ }
+};
+/**
+ * Rule for validating the type of a value.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function type(rule, value, source, errors, options) {
+ if (rule.required && value === undefined) {
+ required(rule, value, source, errors, options);
+ return;
+ }
+
+ var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];
+ var ruleType = rule.type;
+
+ if (custom.indexOf(ruleType) > -1) {
+ if (!types[ruleType](value)) {
+ errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
+ } // straight typeof check
+
+ } else if (ruleType && typeof value !== rule.type) {
+ errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
+ }
+}
+
+/**
+ * Rule for validating minimum and maximum allowed values.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function range(rule, value, source, errors, options) {
+ var len = typeof rule.len === 'number';
+ var min = typeof rule.min === 'number';
+ var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)
+
+ var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+ var val = value;
+ var key = null;
+ var num = typeof value === 'number';
+ var str = typeof value === 'string';
+ var arr = Array.isArray(value);
+
+ if (num) {
+ key = 'number';
+ } else if (str) {
+ key = 'string';
+ } else if (arr) {
+ key = 'array';
+ } // if the value is not of a supported type for range validation
+ // the validation rule rule should use the
+ // type property to also test for a particular type
+
+
+ if (!key) {
+ return false;
+ }
+
+ if (arr) {
+ val = value.length;
+ }
+
+ if (str) {
+ // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3
+ val = value.replace(spRegexp, '_').length;
+ }
+
+ if (len) {
+ if (val !== rule.len) {
+ errors.push(format(options.messages[key].len, rule.fullField, rule.len));
+ }
+ } else if (min && !max && val < rule.min) {
+ errors.push(format(options.messages[key].min, rule.fullField, rule.min));
+ } else if (max && !min && val > rule.max) {
+ errors.push(format(options.messages[key].max, rule.fullField, rule.max));
+ } else if (min && max && (val < rule.min || val > rule.max)) {
+ errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));
+ }
+}
+
+var ENUM = 'enum';
+/**
+ * Rule for validating a value exists in an enumerable list.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function enumerable(rule, value, source, errors, options) {
+ rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];
+
+ if (rule[ENUM].indexOf(value) === -1) {
+ errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));
+ }
+}
+
+/**
+ * Rule for validating a regular expression pattern.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param source The source object being validated.
+ * @param errors An array of errors that this rule may add
+ * validation errors to.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function pattern$1(rule, value, source, errors, options) {
+ if (rule.pattern) {
+ if (rule.pattern instanceof RegExp) {
+ // if a RegExp instance is passed, reset `lastIndex` in case its `global`
+ // flag is accidentally set to `true`, which in a validation scenario
+ // is not necessary and the result might be misleading
+ rule.pattern.lastIndex = 0;
+
+ if (!rule.pattern.test(value)) {
+ errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
+ }
+ } else if (typeof rule.pattern === 'string') {
+ var _pattern = new RegExp(rule.pattern);
+
+ if (!_pattern.test(value)) {
+ errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
+ }
+ }
+ }
+}
+
+var rules = {
+ required: required,
+ whitespace: whitespace,
+ type: type,
+ range: range,
+ "enum": enumerable,
+ pattern: pattern$1
+};
+
+/**
+ * Performs validation for string types.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function string(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, 'string') && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options, 'string');
+
+ if (!isEmptyValue(value, 'string')) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ rules.pattern(rule, value, source, errors, options);
+
+ if (rule.whitespace === true) {
+ rules.whitespace(rule, value, source, errors, options);
+ }
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a function.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function method(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a number.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function number(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (value === '') {
+ value = undefined;
+ }
+
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a boolean.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function _boolean(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates the regular expression type.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function regexp(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (!isEmptyValue(value)) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a number is an integer.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function integer(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a number is a floating point number.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function floatFn(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates an array.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function array(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, 'array') && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options, 'array');
+
+ if (!isEmptyValue(value, 'array')) {
+ rules.type(rule, value, source, errors, options);
+ rules.range(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates an object.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function object(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+var ENUM$1 = 'enum';
+/**
+ * Validates an enumerable list.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function enumerable$1(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (value !== undefined) {
+ rules[ENUM$1](rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Validates a regular expression pattern.
+ *
+ * Performs validation when a rule only contains
+ * a pattern property but is not declared as a string type.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function pattern$2(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, 'string') && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (!isEmptyValue(value, 'string')) {
+ rules.pattern(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+function date(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+
+ if (!isEmptyValue(value)) {
+ var dateObject;
+
+ if (typeof value === 'number') {
+ dateObject = new Date(value);
+ } else {
+ dateObject = value;
+ }
+
+ rules.type(rule, dateObject, source, errors, options);
+
+ if (dateObject) {
+ rules.range(rule, dateObject.getTime(), source, errors, options);
+ }
+ }
+ }
+
+ callback(errors);
+}
+
+function required$1(rule, value, callback, source, options) {
+ var errors = [];
+ var type = Array.isArray(value) ? 'array' : typeof value;
+ rules.required(rule, value, source, errors, options, type);
+ callback(errors);
+}
+
+function type$1(rule, value, callback, source, options) {
+ var ruleType = rule.type;
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value, ruleType) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options, ruleType);
+
+ if (!isEmptyValue(value, ruleType)) {
+ rules.type(rule, value, source, errors, options);
+ }
+ }
+
+ callback(errors);
+}
+
+/**
+ * Performs validation for any type.
+ *
+ * @param rule The validation rule.
+ * @param value The value of the field on the source object.
+ * @param callback The callback function.
+ * @param source The source object being validated.
+ * @param options The validation options.
+ * @param options.messages The validation messages.
+ */
+
+function any(rule, value, callback, source, options) {
+ var errors = [];
+ var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
+
+ if (validate) {
+ if (isEmptyValue(value) && !rule.required) {
+ return callback();
+ }
+
+ rules.required(rule, value, source, errors, options);
+ }
+
+ callback(errors);
+}
+
+var validators = {
+ string: string,
+ method: method,
+ number: number,
+ "boolean": _boolean,
+ regexp: regexp,
+ integer: integer,
+ "float": floatFn,
+ array: array,
+ object: object,
+ "enum": enumerable$1,
+ pattern: pattern$2,
+ date: date,
+ url: type$1,
+ hex: type$1,
+ email: type$1,
+ required: required$1,
+ any: any
+};
+
+function newMessages() {
+ return {
+ "default": 'Validation error on field %s',
+ required: '%s is required',
+ "enum": '%s must be one of %s',
+ whitespace: '%s cannot be empty',
+ date: {
+ format: '%s date %s is invalid for format %s',
+ parse: '%s date could not be parsed, %s is invalid ',
+ invalid: '%s date %s is invalid'
+ },
+ types: {
+ string: '%s is not a %s',
+ method: '%s is not a %s (function)',
+ array: '%s is not an %s',
+ object: '%s is not an %s',
+ number: '%s is not a %s',
+ date: '%s is not a %s',
+ "boolean": '%s is not a %s',
+ integer: '%s is not an %s',
+ "float": '%s is not a %s',
+ regexp: '%s is not a valid %s',
+ email: '%s is not a valid %s',
+ url: '%s is not a valid %s',
+ hex: '%s is not a valid %s'
+ },
+ string: {
+ len: '%s must be exactly %s characters',
+ min: '%s must be at least %s characters',
+ max: '%s cannot be longer than %s characters',
+ range: '%s must be between %s and %s characters'
+ },
+ number: {
+ len: '%s must equal %s',
+ min: '%s cannot be less than %s',
+ max: '%s cannot be greater than %s',
+ range: '%s must be between %s and %s'
+ },
+ array: {
+ len: '%s must be exactly %s in length',
+ min: '%s cannot be less than %s in length',
+ max: '%s cannot be greater than %s in length',
+ range: '%s must be between %s and %s in length'
+ },
+ pattern: {
+ mismatch: '%s value %s does not match pattern %s'
+ },
+ clone: function clone() {
+ var cloned = JSON.parse(JSON.stringify(this));
+ cloned.clone = this.clone;
+ return cloned;
+ }
+ };
+}
+var messages = newMessages();
+
+/**
+ * Encapsulates a validation schema.
+ *
+ * @param descriptor An object declaring validation rules
+ * for this schema.
+ */
+
+function Schema(descriptor) {
+ this.rules = null;
+ this._messages = messages;
+ this.define(descriptor);
+}
+
+Schema.prototype = {
+ messages: function messages(_messages) {
+ if (_messages) {
+ this._messages = deepMerge(newMessages(), _messages);
+ }
+
+ return this._messages;
+ },
+ define: function define(rules) {
+ if (!rules) {
+ throw new Error('Cannot configure a schema with no rules');
+ }
+
+ if (typeof rules !== 'object' || Array.isArray(rules)) {
+ throw new Error('Rules must be an object');
+ }
+
+ this.rules = {};
+ var z;
+ var item;
+
+ for (z in rules) {
+ if (rules.hasOwnProperty(z)) {
+ item = rules[z];
+ this.rules[z] = Array.isArray(item) ? item : [item];
+ }
+ }
+ },
+ validate: function validate(source_, o, oc) {
+ var _this = this;
+
+ if (o === void 0) {
+ o = {};
+ }
+
+ if (oc === void 0) {
+ oc = function oc() {};
+ }
+
+ var source = source_;
+ var options = o;
+ var callback = oc;
+
+ if (typeof options === 'function') {
+ callback = options;
+ options = {};
+ }
+
+ if (!this.rules || Object.keys(this.rules).length === 0) {
+ if (callback) {
+ callback();
+ }
+
+ return Promise.resolve();
+ }
+
+ function complete(results) {
+ var i;
+ var errors = [];
+ var fields = {};
+
+ function add(e) {
+ if (Array.isArray(e)) {
+ var _errors;
+
+ errors = (_errors = errors).concat.apply(_errors, e);
+ } else {
+ errors.push(e);
+ }
+ }
+
+ for (i = 0; i < results.length; i++) {
+ add(results[i]);
+ }
+
+ if (!errors.length) {
+ errors = null;
+ fields = null;
+ } else {
+ fields = convertFieldsError(errors);
+ }
+
+ callback(errors, fields);
+ }
+
+ if (options.messages) {
+ var messages$1 = this.messages();
+
+ if (messages$1 === messages) {
+ messages$1 = newMessages();
+ }
+
+ deepMerge(messages$1, options.messages);
+ options.messages = messages$1;
+ } else {
+ options.messages = this.messages();
+ }
+
+ var arr;
+ var value;
+ var series = {};
+ var keys = options.keys || Object.keys(this.rules);
+ keys.forEach(function(z) {
+ arr = _this.rules[z];
+ value = source[z];
+ arr.forEach(function(r) {
+ var rule = r;
+
+ if (typeof rule.transform === 'function') {
+ if (source === source_) {
+ source = _extends({}, source);
+ }
+
+ value = source[z] = rule.transform(value);
+ }
+
+ if (typeof rule === 'function') {
+ rule = {
+ validator: rule
+ };
+ } else {
+ rule = _extends({}, rule);
+ }
+
+ rule.validator = _this.getValidationMethod(rule);
+ rule.field = z;
+ rule.fullField = rule.fullField || z;
+ rule.type = _this.getType(rule);
+
+ if (!rule.validator) {
+ return;
+ }
+
+ series[z] = series[z] || [];
+ series[z].push({
+ rule: rule,
+ value: value,
+ source: source,
+ field: z
+ });
+ });
+ });
+ var errorFields = {};
+ return asyncMap(series, options, function(data, doIt) {
+ var rule = data.rule;
+ var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField ===
+ 'object');
+ deep = deep && (rule.required || !rule.required && data.value);
+ rule.field = data.field;
+
+ function addFullfield(key, schema) {
+ return _extends({}, schema, {
+ fullField: rule.fullField + "." + key
+ });
+ }
+
+ function cb(e) {
+ if (e === void 0) {
+ e = [];
+ }
+
+ var errors = e;
+
+ if (!Array.isArray(errors)) {
+ errors = [errors];
+ }
+
+ if (!options.suppressWarning && errors.length) {
+ Schema.warning('async-validator:', errors);
+ }
+
+ if (errors.length && rule.message) {
+ errors = [].concat(rule.message);
+ }
+
+ errors = errors.map(complementError(rule));
+
+ if (options.first && errors.length) {
+ errorFields[rule.field] = 1;
+ return doIt(errors);
+ }
+
+ if (!deep) {
+ doIt(errors);
+ } else {
+ // if rule is required but the target object
+ // does not exist fail at the rule level and don't
+ // go deeper
+ if (rule.required && !data.value) {
+ if (rule.message) {
+ errors = [].concat(rule.message).map(complementError(rule));
+ } else if (options.error) {
+ errors = [options.error(rule, format(options.messages.required, rule.field))];
+ } else {
+ errors = [];
+ }
+
+ return doIt(errors);
+ }
+
+ var fieldsSchema = {};
+
+ if (rule.defaultField) {
+ for (var k in data.value) {
+ if (data.value.hasOwnProperty(k)) {
+ fieldsSchema[k] = rule.defaultField;
+ }
+ }
+ }
+
+ fieldsSchema = _extends({}, fieldsSchema, {}, data.rule.fields);
+
+ for (var f in fieldsSchema) {
+ if (fieldsSchema.hasOwnProperty(f)) {
+ var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];
+ fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));
+ }
+ }
+
+ var schema = new Schema(fieldsSchema);
+ schema.messages(options.messages);
+
+ if (data.rule.options) {
+ data.rule.options.messages = options.messages;
+ data.rule.options.error = options.error;
+ }
+
+ schema.validate(data.value, data.rule.options || options, function(errs) {
+ var finalErrors = [];
+
+ if (errors && errors.length) {
+ finalErrors.push.apply(finalErrors, errors);
+ }
+
+ if (errs && errs.length) {
+ finalErrors.push.apply(finalErrors, errs);
+ }
+
+ doIt(finalErrors.length ? finalErrors : null);
+ });
+ }
+ }
+
+ var res;
+
+ if (rule.asyncValidator) {
+ res = rule.asyncValidator(rule, data.value, cb, data.source, options);
+ } else if (rule.validator) {
+ res = rule.validator(rule, data.value, cb, data.source, options);
+
+ if (res === true) {
+ cb();
+ } else if (res === false) {
+ cb(rule.message || rule.field + " fails");
+ } else if (res instanceof Array) {
+ cb(res);
+ } else if (res instanceof Error) {
+ cb(res.message);
+ }
+ }
+
+ if (res && res.then) {
+ res.then(function() {
+ return cb();
+ }, function(e) {
+ return cb(e);
+ });
+ }
+ }, function(results) {
+ complete(results);
+ });
+ },
+ getType: function getType(rule) {
+ if (rule.type === undefined && rule.pattern instanceof RegExp) {
+ rule.type = 'pattern';
+ }
+
+ if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {
+ throw new Error(format('Unknown rule type %s', rule.type));
+ }
+
+ return rule.type || 'string';
+ },
+ getValidationMethod: function getValidationMethod(rule) {
+ if (typeof rule.validator === 'function') {
+ return rule.validator;
+ }
+
+ var keys = Object.keys(rule);
+ var messageIndex = keys.indexOf('message');
+
+ if (messageIndex !== -1) {
+ keys.splice(messageIndex, 1);
+ }
+
+ if (keys.length === 1 && keys[0] === 'required') {
+ return validators.required;
+ }
+
+ return validators[this.getType(rule)] || false;
+ }
+};
+
+Schema.register = function register(type, validator) {
+ if (typeof validator !== 'function') {
+ throw new Error('Cannot register a validator by type, validator is not a function');
+ }
+
+ validators[type] = validator;
+};
+
+Schema.warning = warning;
+Schema.messages = messages;
+
+export default Schema;
+//# sourceMappingURL=index.js.map
diff --git a/tuniao-ui/libs/utils/calendar.js b/tuniao-ui/libs/utils/calendar.js
new file mode 100644
index 0000000..da1456a
--- /dev/null
+++ b/tuniao-ui/libs/utils/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
\ No newline at end of file
diff --git a/tuniao-ui/libs/utils/city.js b/tuniao-ui/libs/utils/city.js
new file mode 100644
index 0000000..94169eb
--- /dev/null
+++ b/tuniao-ui/libs/utils/city.js
@@ -0,0 +1 @@
+var cityData=[[{"label":"市辖区","value":"1101"}],[{"label":"市辖区","value":"1201"}],[{"label":"石家庄市","value":"1301"},{"label":"唐山市","value":"1302"},{"label":"秦皇岛市","value":"1303"},{"label":"邯郸市","value":"1304"},{"label":"邢台市","value":"1305"},{"label":"保定市","value":"1306"},{"label":"张家口市","value":"1307"},{"label":"承德市","value":"1308"},{"label":"沧州市","value":"1309"},{"label":"廊坊市","value":"1310"},{"label":"衡水市","value":"1311"}],[{"label":"太原市","value":"1401"},{"label":"大同市","value":"1402"},{"label":"阳泉市","value":"1403"},{"label":"长治市","value":"1404"},{"label":"晋城市","value":"1405"},{"label":"朔州市","value":"1406"},{"label":"晋中市","value":"1407"},{"label":"运城市","value":"1408"},{"label":"忻州市","value":"1409"},{"label":"临汾市","value":"1410"},{"label":"吕梁市","value":"1411"}],[{"label":"呼和浩特市","value":"1501"},{"label":"包头市","value":"1502"},{"label":"乌海市","value":"1503"},{"label":"赤峰市","value":"1504"},{"label":"通辽市","value":"1505"},{"label":"鄂尔多斯市","value":"1506"},{"label":"呼伦贝尔市","value":"1507"},{"label":"巴彦淖尔市","value":"1508"},{"label":"乌兰察布市","value":"1509"},{"label":"兴安盟","value":"1522"},{"label":"锡林郭勒盟","value":"1525"},{"label":"阿拉善盟","value":"1529"}],[{"label":"沈阳市","value":"2101"},{"label":"大连市","value":"2102"},{"label":"鞍山市","value":"2103"},{"label":"抚顺市","value":"2104"},{"label":"本溪市","value":"2105"},{"label":"丹东市","value":"2106"},{"label":"锦州市","value":"2107"},{"label":"营口市","value":"2108"},{"label":"阜新市","value":"2109"},{"label":"辽阳市","value":"2110"},{"label":"盘锦市","value":"2111"},{"label":"铁岭市","value":"2112"},{"label":"朝阳市","value":"2113"},{"label":"葫芦岛市","value":"2114"}],[{"label":"长春市","value":"2201"},{"label":"吉林市","value":"2202"},{"label":"四平市","value":"2203"},{"label":"辽源市","value":"2204"},{"label":"通化市","value":"2205"},{"label":"白山市","value":"2206"},{"label":"松原市","value":"2207"},{"label":"白城市","value":"2208"},{"label":"延边朝鲜族自治州","value":"2224"}],[{"label":"哈尔滨市","value":"2301"},{"label":"齐齐哈尔市","value":"2302"},{"label":"鸡西市","value":"2303"},{"label":"鹤岗市","value":"2304"},{"label":"双鸭山市","value":"2305"},{"label":"大庆市","value":"2306"},{"label":"伊春市","value":"2307"},{"label":"佳木斯市","value":"2308"},{"label":"七台河市","value":"2309"},{"label":"牡丹江市","value":"2310"},{"label":"黑河市","value":"2311"},{"label":"绥化市","value":"2312"},{"label":"大兴安岭地区","value":"2327"}],[{"label":"市辖区","value":"3101"}],[{"label":"南京市","value":"3201"},{"label":"无锡市","value":"3202"},{"label":"徐州市","value":"3203"},{"label":"常州市","value":"3204"},{"label":"苏州市","value":"3205"},{"label":"南通市","value":"3206"},{"label":"连云港市","value":"3207"},{"label":"淮安市","value":"3208"},{"label":"盐城市","value":"3209"},{"label":"扬州市","value":"3210"},{"label":"镇江市","value":"3211"},{"label":"泰州市","value":"3212"},{"label":"宿迁市","value":"3213"}],[{"label":"杭州市","value":"3301"},{"label":"宁波市","value":"3302"},{"label":"温州市","value":"3303"},{"label":"嘉兴市","value":"3304"},{"label":"湖州市","value":"3305"},{"label":"绍兴市","value":"3306"},{"label":"金华市","value":"3307"},{"label":"衢州市","value":"3308"},{"label":"舟山市","value":"3309"},{"label":"台州市","value":"3310"},{"label":"丽水市","value":"3311"}],[{"label":"合肥市","value":"3401"},{"label":"芜湖市","value":"3402"},{"label":"蚌埠市","value":"3403"},{"label":"淮南市","value":"3404"},{"label":"马鞍山市","value":"3405"},{"label":"淮北市","value":"3406"},{"label":"铜陵市","value":"3407"},{"label":"安庆市","value":"3408"},{"label":"黄山市","value":"3410"},{"label":"滁州市","value":"3411"},{"label":"阜阳市","value":"3412"},{"label":"宿州市","value":"3413"},{"label":"六安市","value":"3415"},{"label":"亳州市","value":"3416"},{"label":"池州市","value":"3417"},{"label":"宣城市","value":"3418"}],[{"label":"福州市","value":"3501"},{"label":"厦门市","value":"3502"},{"label":"莆田市","value":"3503"},{"label":"三明市","value":"3504"},{"label":"泉州市","value":"3505"},{"label":"漳州市","value":"3506"},{"label":"南平市","value":"3507"},{"label":"龙岩市","value":"3508"},{"label":"宁德市","value":"3509"}],[{"label":"南昌市","value":"3601"},{"label":"景德镇市","value":"3602"},{"label":"萍乡市","value":"3603"},{"label":"九江市","value":"3604"},{"label":"新余市","value":"3605"},{"label":"鹰潭市","value":"3606"},{"label":"赣州市","value":"3607"},{"label":"吉安市","value":"3608"},{"label":"宜春市","value":"3609"},{"label":"抚州市","value":"3610"},{"label":"上饶市","value":"3611"}],[{"label":"济南市","value":"3701"},{"label":"青岛市","value":"3702"},{"label":"淄博市","value":"3703"},{"label":"枣庄市","value":"3704"},{"label":"东营市","value":"3705"},{"label":"烟台市","value":"3706"},{"label":"潍坊市","value":"3707"},{"label":"济宁市","value":"3708"},{"label":"泰安市","value":"3709"},{"label":"威海市","value":"3710"},{"label":"日照市","value":"3711"},{"label":"莱芜市","value":"3712"},{"label":"临沂市","value":"3713"},{"label":"德州市","value":"3714"},{"label":"聊城市","value":"3715"},{"label":"滨州市","value":"3716"},{"label":"菏泽市","value":"3717"}],[{"label":"郑州市","value":"4101"},{"label":"开封市","value":"4102"},{"label":"洛阳市","value":"4103"},{"label":"平顶山市","value":"4104"},{"label":"安阳市","value":"4105"},{"label":"鹤壁市","value":"4106"},{"label":"新乡市","value":"4107"},{"label":"焦作市","value":"4108"},{"label":"濮阳市","value":"4109"},{"label":"许昌市","value":"4110"},{"label":"漯河市","value":"4111"},{"label":"三门峡市","value":"4112"},{"label":"南阳市","value":"4113"},{"label":"商丘市","value":"4114"},{"label":"信阳市","value":"4115"},{"label":"周口市","value":"4116"},{"label":"驻马店市","value":"4117"},{"label":"省直辖县级行政区划","value":"4190"}],[{"label":"武汉市","value":"4201"},{"label":"黄石市","value":"4202"},{"label":"十堰市","value":"4203"},{"label":"宜昌市","value":"4205"},{"label":"襄阳市","value":"4206"},{"label":"鄂州市","value":"4207"},{"label":"荆门市","value":"4208"},{"label":"孝感市","value":"4209"},{"label":"荆州市","value":"4210"},{"label":"黄冈市","value":"4211"},{"label":"咸宁市","value":"4212"},{"label":"随州市","value":"4213"},{"label":"恩施土家族苗族自治州","value":"4228"},{"label":"省直辖县级行政区划","value":"4290"}],[{"label":"长沙市","value":"4301"},{"label":"株洲市","value":"4302"},{"label":"湘潭市","value":"4303"},{"label":"衡阳市","value":"4304"},{"label":"邵阳市","value":"4305"},{"label":"岳阳市","value":"4306"},{"label":"常德市","value":"4307"},{"label":"张家界市","value":"4308"},{"label":"益阳市","value":"4309"},{"label":"郴州市","value":"4310"},{"label":"永州市","value":"4311"},{"label":"怀化市","value":"4312"},{"label":"娄底市","value":"4313"},{"label":"湘西土家族苗族自治州","value":"4331"}],[{"label":"广州市","value":"4401"},{"label":"韶关市","value":"4402"},{"label":"深圳市","value":"4403"},{"label":"珠海市","value":"4404"},{"label":"汕头市","value":"4405"},{"label":"佛山市","value":"4406"},{"label":"江门市","value":"4407"},{"label":"湛江市","value":"4408"},{"label":"茂名市","value":"4409"},{"label":"肇庆市","value":"4412"},{"label":"惠州市","value":"4413"},{"label":"梅州市","value":"4414"},{"label":"汕尾市","value":"4415"},{"label":"河源市","value":"4416"},{"label":"阳江市","value":"4417"},{"label":"清远市","value":"4418"},{"label":"东莞市","value":"4419"},{"label":"中山市","value":"4420"},{"label":"潮州市","value":"4451"},{"label":"揭阳市","value":"4452"},{"label":"云浮市","value":"4453"}],[{"label":"南宁市","value":"4501"},{"label":"柳州市","value":"4502"},{"label":"桂林市","value":"4503"},{"label":"梧州市","value":"4504"},{"label":"北海市","value":"4505"},{"label":"防城港市","value":"4506"},{"label":"钦州市","value":"4507"},{"label":"贵港市","value":"4508"},{"label":"玉林市","value":"4509"},{"label":"百色市","value":"4510"},{"label":"贺州市","value":"4511"},{"label":"河池市","value":"4512"},{"label":"来宾市","value":"4513"},{"label":"崇左市","value":"4514"}],[{"label":"海口市","value":"4601"},{"label":"三亚市","value":"4602"},{"label":"三沙市","value":"4603"},{"label":"儋州市","value":"4604"},{"label":"省直辖县级行政区划","value":"4690"}],[{"label":"市辖区","value":"5001"},{"label":"县","value":"5002"}],[{"label":"成都市","value":"5101"},{"label":"自贡市","value":"5103"},{"label":"攀枝花市","value":"5104"},{"label":"泸州市","value":"5105"},{"label":"德阳市","value":"5106"},{"label":"绵阳市","value":"5107"},{"label":"广元市","value":"5108"},{"label":"遂宁市","value":"5109"},{"label":"内江市","value":"5110"},{"label":"乐山市","value":"5111"},{"label":"南充市","value":"5113"},{"label":"眉山市","value":"5114"},{"label":"宜宾市","value":"5115"},{"label":"广安市","value":"5116"},{"label":"达州市","value":"5117"},{"label":"雅安市","value":"5118"},{"label":"巴中市","value":"5119"},{"label":"资阳市","value":"5120"},{"label":"阿坝藏族羌族自治州","value":"5132"},{"label":"甘孜藏族自治州","value":"5133"},{"label":"凉山彝族自治州","value":"5134"}],[{"label":"贵阳市","value":"5201"},{"label":"六盘水市","value":"5202"},{"label":"遵义市","value":"5203"},{"label":"安顺市","value":"5204"},{"label":"毕节市","value":"5205"},{"label":"铜仁市","value":"5206"},{"label":"黔西南布依族苗族自治州","value":"5223"},{"label":"黔东南苗族侗族自治州","value":"5226"},{"label":"黔南布依族苗族自治州","value":"5227"}],[{"label":"昆明市","value":"5301"},{"label":"曲靖市","value":"5303"},{"label":"玉溪市","value":"5304"},{"label":"保山市","value":"5305"},{"label":"昭通市","value":"5306"},{"label":"丽江市","value":"5307"},{"label":"普洱市","value":"5308"},{"label":"临沧市","value":"5309"},{"label":"楚雄彝族自治州","value":"5323"},{"label":"红河哈尼族彝族自治州","value":"5325"},{"label":"文山壮族苗族自治州","value":"5326"},{"label":"西双版纳傣族自治州","value":"5328"},{"label":"大理白族自治州","value":"5329"},{"label":"德宏傣族景颇族自治州","value":"5331"},{"label":"怒江傈僳族自治州","value":"5333"},{"label":"迪庆藏族自治州","value":"5334"}],[{"label":"拉萨市","value":"5401"},{"label":"日喀则市","value":"5402"},{"label":"昌都市","value":"5403"},{"label":"林芝市","value":"5404"},{"label":"山南市","value":"5405"},{"label":"那曲地区","value":"5424"},{"label":"阿里地区","value":"5425"}],[{"label":"西安市","value":"6101"},{"label":"铜川市","value":"6102"},{"label":"宝鸡市","value":"6103"},{"label":"咸阳市","value":"6104"},{"label":"渭南市","value":"6105"},{"label":"延安市","value":"6106"},{"label":"汉中市","value":"6107"},{"label":"榆林市","value":"6108"},{"label":"安康市","value":"6109"},{"label":"商洛市","value":"6110"}],[{"label":"兰州市","value":"6201"},{"label":"嘉峪关市","value":"6202"},{"label":"金昌市","value":"6203"},{"label":"白银市","value":"6204"},{"label":"天水市","value":"6205"},{"label":"武威市","value":"6206"},{"label":"张掖市","value":"6207"},{"label":"平凉市","value":"6208"},{"label":"酒泉市","value":"6209"},{"label":"庆阳市","value":"6210"},{"label":"定西市","value":"6211"},{"label":"陇南市","value":"6212"},{"label":"临夏回族自治州","value":"6229"},{"label":"甘南藏族自治州","value":"6230"}],[{"label":"西宁市","value":"6301"},{"label":"海东市","value":"6302"},{"label":"海北藏族自治州","value":"6322"},{"label":"黄南藏族自治州","value":"6323"},{"label":"海南藏族自治州","value":"6325"},{"label":"果洛藏族自治州","value":"6326"},{"label":"玉树藏族自治州","value":"6327"},{"label":"海西蒙古族藏族自治州","value":"6328"}],[{"label":"银川市","value":"6401"},{"label":"石嘴山市","value":"6402"},{"label":"吴忠市","value":"6403"},{"label":"固原市","value":"6404"},{"label":"中卫市","value":"6405"}],[{"label":"乌鲁木齐市","value":"6501"},{"label":"克拉玛依市","value":"6502"},{"label":"吐鲁番市","value":"6504"},{"label":"哈密市","value":"6505"},{"label":"昌吉回族自治州","value":"6523"},{"label":"博尔塔拉蒙古自治州","value":"6527"},{"label":"巴音郭楞蒙古自治州","value":"6528"},{"label":"阿克苏地区","value":"6529"},{"label":"克孜勒苏柯尔克孜自治州","value":"6530"},{"label":"喀什地区","value":"6531"},{"label":"和田地区","value":"6532"},{"label":"伊犁哈萨克自治州","value":"6540"},{"label":"塔城地区","value":"6542"},{"label":"阿勒泰地区","value":"6543"},{"label":"自治区直辖县级行政区划","value":"6590"}],[{"label":"台北","value":"6601"},{"label":"高雄","value":"6602"},{"label":"基隆","value":"6603"},{"label":"台中","value":"6604"},{"label":"台南","value":"6605"},{"label":"新竹","value":"6606"},{"label":"嘉义","value":"6607"},{"label":"宜兰","value":"6608"},{"label":"桃园","value":"6609"},{"label":"苗栗","value":"6610"},{"label":"彰化","value":"6611"},{"label":"南投","value":"6612"},{"label":"云林","value":"6613"},{"label":"屏东","value":"6614"},{"label":"台东","value":"6615"},{"label":"花莲","value":"6616"},{"label":"澎湖","value":"6617"}],[{"label":"香港岛","value":"6701"},{"label":"九龙","value":"6702"},{"label":"新界","value":"6703"}],[{"label":"澳门半岛","value":"6801"},{"label":"氹仔岛","value":"6802"},{"label":"路环岛","value":"6803"},{"label":"路氹城","value":"6804"}]];export default cityData;
\ No newline at end of file
diff --git a/tuniao-ui/libs/utils/emitter.js b/tuniao-ui/libs/utils/emitter.js
new file mode 100644
index 0000000..7af43d2
--- /dev/null
+++ b/tuniao-ui/libs/utils/emitter.js
@@ -0,0 +1,55 @@
+/**
+ * 递归使用call方式 this指向
+ *
+ * @param {String} componentName 需要查找的组件的名称
+ * @param {String} eventName 事件名称
+ * @param {Object} params 需要传递的参数
+ */
+function broadcast(componentName, eventName, params) {
+ // 循环子节点找到需要的节点,没有查找到就递归进行查找
+ this.$children.map(child => {
+ if (componentName === child.$options.name) {
+ child.$emit.apply(child, [eventName].concat(params))
+ } else {
+ broadcast.apply(child, [componentName, eventName].concat(params))
+ }
+ })
+}
+
+export default {
+ methods: {
+ /**
+ * 派发 向上查找一个
+ * @param {Object} componentName 需要查找的组件的名称
+ * @param {Object} eventName 事件名称
+ * @param {Object} params 需要传递的参数
+ */
+ dispatch(componentName, eventName, params) {
+ // 找到最近父节点 $root 根节点
+ let parent = this.$parent || this.$root
+ // 获取当前实例的名称
+ let name = parent.$options.name
+
+ // 当前存在节点并且当前节点没有名称或者名称不等于我们要查找的节点名称,则继续遍历
+ while (parent && (!name || name !== componentName)) {
+ parent = parent.$parent
+ if (parent) {
+ name = parent.$options.name
+ }
+ }
+ // 如果有节点则表示找到
+ if (parent) {
+ parent.$emit.apply(parent, [eventName].concat(params))
+ }
+ },
+ /**
+ * 广播 向下查找多个
+ * @param {Object} componentName 需要查找的组件的名称
+ * @param {Object} eventName 事件名称
+ * @param {Object} params 需要传递的参数
+ */
+ broadcast(componentName, eventName, params) {
+ broadcast.call(this, componentName, eventName, params)
+ }
+ }
+}
\ No newline at end of file
diff --git a/tuniao-ui/libs/utils/province.js b/tuniao-ui/libs/utils/province.js
new file mode 100644
index 0000000..436b190
--- /dev/null
+++ b/tuniao-ui/libs/utils/province.js
@@ -0,0 +1 @@
+var provinceData=[{"label":"北京市","value":"11"},{"label":"天津市","value":"12"},{"label":"河北省","value":"13"},{"label":"山西省","value":"14"},{"label":"内蒙古自治区","value":"15"},{"label":"辽宁省","value":"21"},{"label":"吉林省","value":"22"},{"label":"黑龙江省","value":"23"},{"label":"上海市","value":"31"},{"label":"江苏省","value":"32"},{"label":"浙江省","value":"33"},{"label":"安徽省","value":"34"},{"label":"福建省","value":"35"},{"label":"江西省","value":"36"},{"label":"山东省","value":"37"},{"label":"河南省","value":"41"},{"label":"湖北省","value":"42"},{"label":"湖南省","value":"43"},{"label":"广东省","value":"44"},{"label":"广西壮族自治区","value":"45"},{"label":"海南省","value":"46"},{"label":"重庆市","value":"50"},{"label":"四川省","value":"51"},{"label":"贵州省","value":"52"},{"label":"云南省","value":"53"},{"label":"西藏自治区","value":"54"},{"label":"陕西省","value":"61"},{"label":"甘肃省","value":"62"},{"label":"青海省","value":"63"},{"label":"宁夏回族自治区","value":"64"},{"label":"新疆维吾尔自治区","value":"65"},{"label":"台湾","value":"66"},{"label":"香港","value":"67"},{"label":"澳门","value":"68"}];export default provinceData;
\ No newline at end of file
diff --git a/tuniao-ui/theme.scss b/tuniao-ui/theme.scss
new file mode 100644
index 0000000..136a6ec
--- /dev/null
+++ b/tuniao-ui/theme.scss
@@ -0,0 +1,183 @@
+// 此文件为TuniaoUI的主题变量,这些变量目前只能通过uni.scss引入才有效,另外由于
+// uni.scss中引入的样式会同时混入到全局样式文件和单独每一个页面的样式中,造成微信程序包太大,
+// 故uni.scss只建议放scss变量名相关样式,其他的样式可以通过main.js或者App.vue引入
+
+// 组件配置
+$tn-form-item-height: 70rpx;
+
+
+// 主颜色
+$tn-main-color: #01BEFF;
+$tn-main-orange: #FBBD12;
+$tn-embellished-green: #00FFC6;
+$tn-embellished-yellow: #FFF00D;
+$tn-auxiliary-powder: #FF71D2;
+$tn-auxiliary-blue: #82B2FF;
+$tn-bg-color: #FFFFFF;
+$tn-bg-gray-color: #F4F4F4;
+$tn-space-color: #F8F7F8;
+
+// 边框颜色
+$tn-border-solid-color: rgba(0, 0, 0, 0.1);
+$tn-border-solids-color: #eee;
+$tn-border-dashed-color: #ddd;
+
+// 阴影颜色
+$tn-shadow-color: rgba(0, 0, 0, 0.1);
+$tn-box-shadow-color: rgba(0, 0, 0, 0.2);
+
+// 字体颜色
+$tn-font-color: #080808;
+$tn-font-sub-color: #AAAAAA;
+$tn-content-color: #838383;
+$tn-font-holder-color: #E6E6E6;
+
+$tn-mask-bg-color: rgba(0, 0, 0, 0.4);
+
+$tn-progress-bg-color: #f0f0f0;
+
+
+$tn-color-red: #E83A30;
+$tn-color-red-dark: #BA2E26;
+$tn-color-red-disabled: #F39C97;
+$tn-color-red-light: #FAD8D6;
+
+$tn-color-purplered: #E72F8C;
+$tn-color-purplered-dark: #B9266F;
+$tn-color-purplered-disabled: #F397C5;
+$tn-color-purplered-light: #FAD5E8;
+
+$tn-color-purple: #892FE8;
+$tn-color-purple-dark: #6E26BA;
+$tn-color-purple-disabled: #C497F3;
+$tn-color-purple-light: #E7D5FA;
+
+$tn-color-bluepurple: #5F4FD9;
+$tn-color-bluepurple-dark: #4C3FAE;
+$tn-color-bluepurple-disabled: #AFA7EC;
+$tn-color-bluepurple-light: #DFDCF7;
+
+$tn-color-aquablue: #3646FF;
+$tn-color-aquablue-dark: #2B38CC;
+$tn-color-aquablue-disabled: #9AA2FF;
+$tn-color-aquablue-light: #D7DAFF;
+
+$tn-color-blue: #3D7EFF;
+$tn-color-blue-dark: #3165CC;
+$tn-color-blue-disabled: #9EBEFF;
+$tn-color-blue-light: #D8E5FF;
+
+$tn-color-indigo: #31C9E8;
+$tn-color-indigo-dark: #27A1BA;
+$tn-color-indigo-disabled: #98E4F3;
+$tn-color-indigo-light: #D6F4FA;
+
+$tn-color-cyan: #2DE8BD;
+$tn-color-cyan-dark: #24BA97;
+$tn-color-cyan-disabled: #96F3DE;
+$tn-color-cyan-light: #D5FAF2;
+
+$tn-color-teal: #24F083;
+$tn-color-teal-dark: #1DC069;
+$tn-color-teal-disabled: #91F7C1;
+$tn-color-teal-light: #D3FCE6;
+
+$tn-color-green: #31E749;
+$tn-color-green-dark: #27B93A;
+$tn-color-green-disabled: #98F3A4;
+$tn-color-green-light: #D6FADB;
+
+$tn-color-yellowgreen: #A4E82F;
+$tn-color-yellowgreen-dark: #82BA26;
+$tn-color-yellowgreen-disabled: #D1F397;
+$tn-color-yellowgreen-light: #EDFAD5;
+
+$tn-color-lime: #D5EB00;
+$tn-color-lime-dark: #AABC00;
+$tn-color-lime-disabled: #E9F57F;
+$tn-color-lime-light: #F7FBCC;
+
+$tn-color-yellow: #FFF420;
+$tn-color-yellow-dark: #CCC21A;
+$tn-color-yellow-disabled: #FFF88F;
+$tn-color-yellow-light: #FFFDD2;
+
+$tn-color-orangeyellow: #FFCA28;
+$tn-color-orangeyellow-dark: #CCA220;
+$tn-color-orangeyellow-disabled: #FFE493;
+$tn-color-orangeyellow-light: #FFF4D4;
+
+$tn-color-orange: #FFA726;
+$tn-color-orange-dark: #CC851E;
+$tn-color-orange-disabled: #FFD392;
+$tn-color-orange-light: #FFEDD4 ;
+
+$tn-color-orangered: #FF7043;
+$tn-color-orangered-dark: #CC5A36;
+$tn-color-orangered-disabled: #FFB7A1;
+$tn-color-orangered-light: #FFE2D9;
+
+$tn-color-brown: #914F2C;
+$tn-color-brown-dark: #743F23;
+$tn-color-brown-disabled: #C8A795;
+$tn-color-brown-light: #E9DCD5;
+
+$tn-color-grey: #78909C;
+$tn-color-grey-dark: #5F7E8B;
+$tn-color-grey-disabled: #C6D1D8;
+$tn-color-grey-light: #E4E9EC;
+
+$tn-color-gray: #AAAAAA;
+$tn-color-gray-dark: #838383;
+$tn-color-gray-disabled: #E6E6E6;
+$tn-color-gray-light: #F8F7F8;
+
+$tn-cool-bg-color-1-start: #F5317F;
+$tn-cool-bg-color-1-end: #FF7C6E;
+
+$tn-cool-bg-color-2-start: #CA26FF;
+$tn-cool-bg-color-2-end: #F360A7;
+
+$tn-cool-bg-color-3-start: #A26FFC;
+$tn-cool-bg-color-3-end: #9D12FF;
+
+$tn-cool-bg-color-4-start: #AA77F0;
+$tn-cool-bg-color-4-end: #E871E5;
+
+$tn-cool-bg-color-5-start: #40A0F7;
+$tn-cool-bg-color-5-end: #4866E6;
+
+$tn-cool-bg-color-6-start: #209CFF;
+$tn-cool-bg-color-6-end: #68E0CF;
+
+$tn-cool-bg-color-7-start: #00C3FF;
+$tn-cool-bg-color-7-end: #58FFF5;
+
+$tn-cool-bg-color-8-start: #00d1FF;
+$tn-cool-bg-color-8-end: #69FF97;
+
+$tn-cool-bg-color-9-start: #0FD893;
+$tn-cool-bg-color-9-end: #29ECBF;
+
+$tn-cool-bg-color-10-start: #0FD850;
+$tn-cool-bg-color-10-end: #F9F047;
+
+$tn-cool-bg-color-11-start: #24FE41;
+$tn-cool-bg-color-11-end: #F7FD47;
+
+$tn-cool-bg-color-12-start: #D6FF7F;
+$tn-cool-bg-color-12-end: #00F657;
+
+$tn-cool-bg-color-13-start: #FA709A;
+$tn-cool-bg-color-13-end: #FEE140;
+
+$tn-cool-bg-color-14-start: #FE5E9C;
+$tn-cool-bg-color-14-end: #F1AA76;
+
+$tn-cool-bg-color-15-start: #FF3181;
+$tn-cool-bg-color-15-end: #FF8331;
+
+$tn-cool-bg-color-16-start: #ED1C24;
+$tn-cool-bg-color-16-end: #FECE12;
+
+
diff --git a/uni.promisify.adaptor.js b/uni.promisify.adaptor.js
new file mode 100644
index 0000000..47fbce1
--- /dev/null
+++ b/uni.promisify.adaptor.js
@@ -0,0 +1,10 @@
+uni.addInterceptor({
+ returnValue (res) {
+ if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
+ return res;
+ }
+ return new Promise((resolve, reject) => {
+ res.then((res) => res[0] ? reject(res[0]) : resolve(res[1]));
+ });
+ },
+});
\ No newline at end of file
diff --git a/uni.scss b/uni.scss
new file mode 100644
index 0000000..3ceda17
--- /dev/null
+++ b/uni.scss
@@ -0,0 +1,7 @@
+/**
+ * 下方引入的为Tuniao UI的集成样式文件,为scss预处理器,其中包含了一些"tn-"开头的自定义变量
+ * 使用的时候,请将下面的一行复制到您的uniapp项目根目录的uni.scss中即可
+ * Tuniao UI自定义的css类名和scss变量,均以"tn-"开头,不会造成冲突,请放心使用
+ */
+
+@import 'tuniao-ui/theme.scss'
diff --git a/unpackage/dist/dev/.automator/mp-weixin/.automator.json b/unpackage/dist/dev/.automator/mp-weixin/.automator.json
new file mode 100644
index 0000000..e69de29
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map
new file mode 100644
index 0000000..1303151
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["uni-app:///main.js",null,"webpack:///E:/云商会/云商会/App.vue?d694","uni-app:///App.vue","webpack:///E:/云商会/云商会/App.vue?78ff","webpack:///E:/云商会/云商会/App.vue?08e3"],"names":["wx","__webpack_require_UNI_MP_PLUGIN__","__webpack_require__","Vue","config","productionTip","App","mpType","use","TuniaoUI","vuexStore","require","mixin","mpShare","app","store","$mount","onLaunch","uni","success","name","value","updateManager","title","content","showCancel","onShow","onHide"],"mappings":";;;;;;;;;;;;;;AAAA;AAE2D;AAC3D;AAEA;AAKA;AAAgC;AAAA;AAThC;AACAA,EAAE,CAACC,iCAAiC,GAAGC,mBAAmB;AAI1DC,YAAG,CAACC,MAAM,CAACC,aAAa,GAAG,KAAK;AAChCC,YAAG,CAACC,MAAM,GAAG,KAAK;;AAElB;;AAEAJ,YAAG,CAACK,GAAG,CAACC,iBAAQ,CAAC;;AAEjB;AACA,IAAIC,SAAS,GAAGC,mBAAO,CAAC,8BAAsB,CAAC;AAC/CR,YAAG,CAACS,KAAK,CAACF,SAAS,CAAC;;AAEpB;AACA,IAAIG,OAAO,GAAGF,mBAAO,CAAC,yCAAiC,CAAC;AACxDR,YAAG,CAACS,KAAK,CAACC,OAAO,CAAC;AAElB,IAAMC,GAAG,GAAG,IAAIX,YAAG;EAClBY,KAAK,EAALA;AAAK,GACFT,YAAG,EACL;AAEF,UAAAQ,GAAG,EAACE,MAAM,EAAE,C;;;;;;;;;;;;;AC1BZ;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACuD;AACL;AACc;;;AAGhE;AAC+L;AAC/L,gBAAgB,wMAAU;AAC1B,EAAE,yEAAM;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACe,gF;;;;;;;;;;;;ACvBf;AAAA;AAAA;AAAA;AAA+tB,CAAgB,ovBAAG,EAAC,C;;;;;;;;;;;;;;;;;;;ACCnvB;AACA;AACA;AAAA,eAEA;EACAC;IACAC;MACAC;QAEA;QACA;QACA;QACA;QACA,oFACA;UACAhB;QACA;UACAA;QACA;UACAA;QACA;MAEA;IACA;;IAEA;IACA;IACA;MACAY;QACAK;QACAC;MACA;MACAN;QACAK;QACAC;MACA;IACA;;IAGA;IACA;MACA;MACAC;QACA;UACAA;YACAJ;cACAK;cACAC;cACAL;gBACA;kBACAD;kBACAI;gBACA;cACA;YACA;UACA;UAEAA;YACAJ;cACAK;cACAC;cACAC;YACA;UACA;QACA;UACA;QAAA;MAEA;IACA;MACAP;QACAK;QACAC;QACAC;MACA;IACA;EAEA;EACAC;IACA;EAAA,CACA;EACAC;IACA;EAAA;AAEA;AAAA,2B;;;;;;;;;;;;;ACpFA;AAAA;AAAA;AAAA;AAAk3C,CAAgB,+0CAAG,EAAC,C;;;;;;;;;;;ACAt4C;AACA,OAAO,KAAU,EAAE,kBAKd","file":"common/main.js","sourcesContent":["import 'uni-pages';\r\n// @ts-ignore\r\nwx.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;import App from './App'\r\nimport store from './store'\r\n\r\nimport Vue from 'vue'\r\nVue.config.productionTip = false\r\nApp.mpType = 'app'\r\n\r\n// 引入全局TuniaoUI\r\nimport TuniaoUI from 'tuniao-ui'\r\nVue.use(TuniaoUI)\r\n\r\n// 引入TuniaoUI提供的vuex简写方法\r\nlet vuexStore = require('@/store/$tn.mixin.js')\r\nVue.mixin(vuexStore)\r\n\r\n// 引入TuniaoUI对小程序分享的mixin封装\r\nlet mpShare = require('tuniao-ui/libs/mixin/mpShare.js')\r\nVue.mixin(mpShare)\r\n\r\nconst app = new Vue({\r\n\tstore,\r\n\t...App\r\n})\r\n\r\napp.$mount()","var render, staticRenderFns, recyclableRender, components\nvar renderjs\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\vue-loader\\\\lib\\\\runtime\\\\componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null,\n false,\n components,\n renderjs\n)\n\ncomponent.options.__file = \"App.vue\"\nexport default component.exports","import mod from \"-!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\babel-loader\\\\lib\\\\index.js!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\webpack-preprocess-loader\\\\index.js??ref--13-1!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\webpack-uni-mp-loader\\\\lib\\\\script.js!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\vue-loader\\\\lib\\\\index.js??vue-loader-options!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\webpack-uni-mp-loader\\\\lib\\\\style.js!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\babel-loader\\\\lib\\\\index.js!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\webpack-preprocess-loader\\\\index.js??ref--13-1!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\webpack-uni-mp-loader\\\\lib\\\\script.js!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\vue-loader\\\\lib\\\\index.js??vue-loader-options!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\webpack-uni-mp-loader\\\\lib\\\\style.js!./App.vue?vue&type=script&lang=js&\"","\r\n\r\n","import mod from \"-!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\mini-css-extract-plugin\\\\dist\\\\loader.js??ref--8-oneOf-1-0!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\css-loader\\\\dist\\\\cjs.js??ref--8-oneOf-1-1!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\vue-loader\\\\lib\\\\loaders\\\\stylePostLoader.js!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\webpack-preprocess-loader\\\\index.js??ref--8-oneOf-1-2!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\postcss-loader\\\\src\\\\index.js??ref--8-oneOf-1-3!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\sass-loader\\\\dist\\\\cjs.js??ref--8-oneOf-1-4!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\webpack-preprocess-loader\\\\index.js??ref--8-oneOf-1-5!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\vue-loader\\\\lib\\\\index.js??vue-loader-options!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\webpack-uni-mp-loader\\\\lib\\\\style.js!./App.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\mini-css-extract-plugin\\\\dist\\\\loader.js??ref--8-oneOf-1-0!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\css-loader\\\\dist\\\\cjs.js??ref--8-oneOf-1-1!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\vue-loader\\\\lib\\\\loaders\\\\stylePostLoader.js!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\webpack-preprocess-loader\\\\index.js??ref--8-oneOf-1-2!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\postcss-loader\\\\src\\\\index.js??ref--8-oneOf-1-3!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\sass-loader\\\\dist\\\\cjs.js??ref--8-oneOf-1-4!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\webpack-preprocess-loader\\\\index.js??ref--8-oneOf-1-5!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\vue-cli-plugin-uni\\\\packages\\\\vue-loader\\\\lib\\\\index.js??vue-loader-options!F:\\\\HBuilderX.3.5.3.20220729\\\\HBuilderX\\\\plugins\\\\uniapp-cli\\\\node_modules\\\\@dcloudio\\\\webpack-uni-mp-loader\\\\lib\\\\style.js!./App.vue?vue&type=style&index=0&lang=scss&\"","// extracted by mini-css-extract-plugin\n if(module.hot) {\n // 1703210580762\n var cssReload = require(\"F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/mini-css-extract-plugin/dist/hmr/hotModuleReplacement.js\")(module.id, {\"hmr\":true,\"publicPath\":\"../../\",\"locals\":false});\n module.hot.dispose(cssReload);\n module.hot.accept(undefined, cssReload);\n }\n "],"sourceRoot":""}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map
new file mode 100644
index 0000000..79fbada
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/webpack/bootstrap"],"names":[],"mappings":";QAAA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA,QAAQ,oBAAoB;QAC5B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA,iBAAiB,4BAA4B;QAC7C;QACA;QACA,kBAAkB,2BAA2B;QAC7C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;;QAEA;;QAEA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;QACA;QACA;;;QAGA;QACA,oBAAoB;QACpB;QACA;QACA;QACA,uBAAuB,8oBAA8oB;QACrqB;QACA;QACA,mBAAmB,6BAA6B;QAChD;QACA;QACA;QACA;QACA;QACA,mBAAmB,8BAA8B;QACjD;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA,KAAK;QACL;QACA,KAAK;QACL;;QAEA;;QAEA;QACA,iCAAiC;;QAEjC;QACA;QACA;QACA,KAAK;QACL;QACA;QACA;QACA,MAAM;QACN;;QAEA;QACA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,wBAAwB,kCAAkC;QAC1D,MAAM;QACN;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;QAEA;QACA,0CAA0C,oBAAoB,WAAW;;QAEzE;QACA;QACA;QACA;QACA,gBAAgB,uBAAuB;QACvC;;;QAGA;QACA","file":"common/runtime.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"common/runtime\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"common/runtime\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + chunkId + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"tuniao-ui/components/tn-nav-bar/tn-nav-bar\":1,\"tuniao-ui/components/tn-notice-bar/tn-notice-bar\":1,\"tuniao-ui/components/tn-tabbar/tn-tabbar\":1,\"tuniao-ui/components/tn-tabs/tn-tabs\":1,\"tuniao-ui/components/tn-column-notice/tn-column-notice\":1,\"tuniao-ui/components/tn-row-notice/tn-row-notice\":1,\"tuniao-ui/components/tn-badge/tn-badge\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"\" + ({\"tuniao-ui/components/tn-nav-bar/tn-nav-bar\":\"tuniao-ui/components/tn-nav-bar/tn-nav-bar\",\"tuniao-ui/components/tn-notice-bar/tn-notice-bar\":\"tuniao-ui/components/tn-notice-bar/tn-notice-bar\",\"tuniao-ui/components/tn-tabbar/tn-tabbar\":\"tuniao-ui/components/tn-tabbar/tn-tabbar\",\"tuniao-ui/components/tn-tabs/tn-tabs\":\"tuniao-ui/components/tn-tabs/tn-tabs\",\"tuniao-ui/components/tn-column-notice/tn-column-notice\":\"tuniao-ui/components/tn-column-notice/tn-column-notice\",\"tuniao-ui/components/tn-row-notice/tn-row-notice\":\"tuniao-ui/components/tn-row-notice/tn-row-notice\",\"tuniao-ui/components/tn-badge/tn-badge\":\"tuniao-ui/components/tn-badge/tn-badge\"}[chunkId]||chunkId) + \".wxss\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = global[\"webpackJsonp\"] = global[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
new file mode 100644
index 0000000..2013ac0
--- /dev/null
+++ b/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/uni-mp-weixin/dist/wx.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/uni-mp-weixin/dist/index.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/webpack/buildin/global.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/interopRequireDefault.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/slicedToArray.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/arrayWithHoles.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/nonIterableRest.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/defineProperty.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/toPropertyKey.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/typeof.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/toPrimitive.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/construct.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/setPrototypeOf.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/toConsumableArray.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/iterableToArray.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/nonIterableSpread.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/uni-i18n/dist/uni-i18n.es.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/classCallCheck.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/createClass.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js","uni-app:///store/index.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vuex3/dist/vuex.common.js","uni-app:///tuniao-ui/libs/function/updateCustomBarInfo.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js","uni-app:///tuniao-ui/index.js","uni-app:///tuniao-ui/libs/mixin/mixin.js","uni-app:///tuniao-ui/libs/luch-request/index.js","uni-app:///tuniao-ui/libs/luch-request/core/Request.js","uni-app:///tuniao-ui/libs/luch-request/core/dispatchRequest.js","uni-app:///tuniao-ui/libs/luch-request/adapters/index.js","uni-app:///tuniao-ui/libs/luch-request/helpers/buildURL.js","uni-app:///tuniao-ui/libs/luch-request/utils.js","uni-app:///tuniao-ui/libs/luch-request/core/buildFullPath.js","uni-app:///tuniao-ui/libs/luch-request/helpers/isAbsoluteURL.js","uni-app:///tuniao-ui/libs/luch-request/helpers/combineURLs.js","uni-app:///tuniao-ui/libs/luch-request/core/settle.js","uni-app:///tuniao-ui/libs/luch-request/core/InterceptorManager.js","uni-app:///tuniao-ui/libs/luch-request/core/mergeConfig.js","uni-app:///tuniao-ui/libs/luch-request/core/defaults.js","uni-app:///tuniao-ui/libs/luch-request/utils/clone.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/buffer/index.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/base64-js/index.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/ieee754/index.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/isarray/index.js","uni-app:///tuniao-ui/libs/function/color.js","uni-app:///tuniao-ui/libs/function/message.js","uni-app:///tuniao-ui/libs/function/uuid.js","uni-app:///tuniao-ui/libs/function/array.js","uni-app:///tuniao-ui/libs/function/test.js","uni-app:///tuniao-ui/libs/function/$parent.js","uni-app:///tuniao-ui/libs/function/string.js","uni-app:///tuniao-ui/libs/function/number.js","uni-app:///tuniao-ui/libs/function/deepClone.js","uni-app:///tuniao-ui/libs/config/zIndex.js","uni-app:///tuniao-ui/libs/config/color.js","uni-app:///store/$tn.mixin.js","uni-app:///tuniao-ui/libs/mixin/mpShare.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/@babel/runtime/regenerator/index.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/regeneratorRuntime.js","uni-app:///F:/HBuilderX.3.5.3.20220729/HBuilderX/plugins/uniapp-cli/node_modules/@babel/runtime/helpers/asyncToGenerator.js","uni-app:///tuniao-ui/libs/mixin/components_color.js"],"names":["objectKeys","singlePageDisableKey","target","globalThis","key","join","oldWx","launchOption","getLaunchOptionsSync","isWxKey","scene","includes","indexOf","initWx","newWx","realAtob","b64","b64re","atob","str","String","replace","test","Error","slice","length","bitmap","result","r1","r2","i","charAt","fromCharCode","b64DecodeUnicode","decodeURIComponent","split","map","c","charCodeAt","toString","getCurrentUserInfo","token","wx","getStorageSync","tokenArr","uid","role","permission","tokenExpired","userInfo","JSON","parse","error","message","exp","iat","uniIdMixin","Vue","prototype","uniIDHasRole","roleId","uniIDHasPermission","permissionId","uniIDTokenValid","Date","now","_toString","Object","hasOwnProperty","isFn","fn","isStr","isObject","obj","isPlainObject","call","hasOwn","noop","cached","cache","create","cachedFn","hit","camelizeRE","camelize","_","toUpperCase","sortObject","sortObj","keys","sort","forEach","HOOKS","globalInterceptors","scopedInterceptors","mergeHook","parentVal","childVal","res","concat","Array","isArray","dedupeHooks","hooks","push","removeHook","hook","index","splice","mergeInterceptorHook","interceptor","option","removeInterceptorHook","addInterceptor","method","removeInterceptor","wrapperHook","params","data","isPromise","then","queue","promise","Promise","resolve","callback","wrapperOptions","options","name","oldCallback","callbackInterceptor","wrapperReturnValue","returnValue","returnValueHooks","getApiInterceptorHooks","scopedInterceptor","invokeApi","api","invoke","promiseInterceptor","reject","SYNC_API_RE","CONTEXT_API_RE","CONTEXT_API_RE_EXC","ASYNC_API","CALLBACK_API_RE","isContextApi","isSyncApi","isCallbackApi","handlePromise","catch","err","shouldPromise","finally","constructor","value","reason","promisify","promiseApi","success","fail","complete","assign","EPS","BASE_DEVICE_WIDTH","isIOS","deviceWidth","deviceDPR","checkDeviceWidth","getSystemInfoSync","platform","pixelRatio","windowWidth","upx2px","number","newDeviceWidth","Number","Math","floor","LOCALE_ZH_HANS","LOCALE_ZH_HANT","LOCALE_EN","LOCALE_FR","LOCALE_ES","messages","locale","normalizeLocale","language","initI18nMessages","isEnableLocale","localeKeys","__uniConfig","locales","curMessages","userMessages","i18n","initVueI18n","t","i18nMixin","mixin","beforeCreate","unwatch","watchLocale","$forceUpdate","$once","methods","$$t","values","setLocale","getLocale","initAppLocale","appVm","state","observable","localeWatchers","$watchLocale","defineProperty","get","set","v","watch","include","parts","find","part","startsWith","trim","toLowerCase","lang","getLocale$1","getApp","app","allowDefault","$vm","$locale","setLocale$1","oldLocale","onLocaleChangeCallbacks","onLocaleChange","global","interceptors","baseApi","freeze","__proto__","findExistsPageIndex","url","pages","getCurrentPages","len","page","$page","fullPath","redirectTo","fromArgs","exists","delta","args","existsPageIndex","previewImage","currentIndex","parseInt","current","isNaN","urls","filter","item","indicator","loop","UUID_KEY","deviceId","useDeviceId","random","setStorage","addSafeAreaInsets","safeArea","safeAreaInsets","top","left","right","bottom","screenHeight","populateParameters","brand","model","system","theme","version","fontSizeSetting","SDKVersion","deviceOrientation","extraParam","osName","osVersion","hostVersion","deviceType","getGetDeviceType","deviceBrand","getDeviceBrand","_hostName","getHostName","_deviceOrientation","_devicePixelRatio","_SDKVersion","hostLanguage","parameters","appId","process","appName","appVersion","appVersionCode","appLanguage","getAppLanguage","uniCompileVersion","uniRuntimeVersion","uniPlatform","deviceModel","devicePixelRatio","toLocaleLowerCase","hostTheme","hostName","hostSDKVersion","hostFontSizeSetting","windowTop","windowBottom","osLanguage","undefined","osTheme","ua","hostPackageName","browserName","browserVersion","deviceTypeMaps","ipad","windows","mac","deviceTypeMapsKeys","_model","_m","defaultLanguage","_platform","environment","host","env","getSystemInfo","showActionSheet","alertText","title","getAppBaseInfo","getDeviceInfo","getWindowInfo","getAppAuthorizeSetting","locationReducedAccuracy","locationAccuracy","compressImage","compressedHeight","compressHeight","compressedWidth","compressWidth","protocols","todos","canIUses","CALLBACKS","processCallback","methodName","processReturnValue","processArgs","argsOption","keepFromArgs","toArgs","keyOption","console","warn","keepReturnValue","wrapper","protocol","arg1","arg2","apply","todoApis","TODOS","createTodoApi","todoApi","errMsg","providers","oauth","share","payment","getProvider","service","provider","extraApi","getEmitter","Emitter","getUniEmitter","ctx","$on","arguments","$off","$emit","eventApi","tryCatch","e","getApiCallbacks","apiCallbacks","param","cid","cidErrMsg","enabled","normalizePushMessage","invokePushCallback","type","invokeGetPushCidCallbacks","onPushMessageCallbacks","stopped","getPushCidCallbacks","getPushClientId","hasSuccess","hasFail","hasComplete","onPushMessage","offPushMessage","baseInfo","shareVideoMessage","miniapp","mocks","findVmByVueId","vm","vuePid","$children","childVm","$scope","_$vueId","parentVm","initBehavior","Behavior","isPage","route","initRelation","detail","triggerEvent","selectAllComponents","mpInstance","selector","$refs","components","component","ref","dataset","toSkip","vueGeneric","scopedComponent","syncRefs","refs","newRefs","oldKeys","Set","newKeys","oldValue","newValue","every","delete","initRefs","forComponents","handleLink","event","vueOptions","parent","markMPComponent","IS_MP","configurable","enumerable","OB","SKIP","isExtensible","WORKLET_RE","initWorkletMethods","mpMethods","vueMethods","matches","match","workletName","MPPage","Page","MPComponent","Component","customizeRE","customize","initTriggerEvent","oldTriggerEvent","newTriggerEvent","comType","newEvent","_triggerEvent","initHook","isComponent","oldHook","__$wrappered","after","PAGE_EVENT_HOOKS","initMocks","$mp","mpType","mock","hasHook","default","extendOptions","super","mixins","initHooks","mpOptions","__call_hook","initUnknownHooks","excludes","findHooks","initHook$1","initVueComponent","VueComponent","extend","initSlots","vueSlots","$slots","slotName","$scopedSlots","initVueIds","vueIds","_$vuePid","initData","context","VUE_APP_DEBUG","stringify","__lifecycle_hooks__","PROP_TYPES","Boolean","createObserver","observer","newVal","oldVal","initBehaviors","vueBehaviors","behaviors","vueExtends","extends","vueMixins","vueProps","props","behavior","properties","initProperties","vueMixin","parsePropType","defaultValue","file","isBehavior","vueId","virtualHost","virtualHostStyle","virtualHostClass","scopedSlotsCompiler","setData","opts","wrapper$1","mp","stopPropagation","preventDefault","markerId","getExtraValue","dataPathsArray","dataPathArray","dataPath","propPath","valuePath","vFor","isInteger","substr","__get_value","vForItem","vForKey","processEventExtra","extra","__args__","extraObj","getObjByArray","arr","element","processEventArgs","isCustom","isCustomMPEvent","currentTarget","ret","arg","ONCE","CUSTOM","isMatchEventType","eventType","optType","getContextVm","$parent","$options","generic","handleEvent","eventOpts","eventOpt","eventsArray","isOnce","eventArray","handlerCtx","handler","path","is","once","eventChannels","getEventChannel","id","eventChannel","initEventChannel","getOpenerEventChannel","callHook","__id__","__eventChannel__","initScopedSlotsParams","center","parents","currentId","propsData","$hasSSP","slot","$getSSP","needAll","$setSSP","$initSSP","$callSSP","destroyed","parseBaseApp","store","$store","mpHost","$i18n","_i18n","appOptions","onLaunch","canIUse","globalData","_isMounted","parseApp","createApp","App","encodeReserveRE","encodeReserveReplacer","commaRE","encode","encodeURIComponent","stringifyQuery","encodeStr","val","val2","x","parseBaseComponent","vueComponentOptions","needVueOptions","multipleSlots","addGlobalClass","componentOptions","__file","lifetimes","attached","$mount","ready","detached","$destroy","pageLifetimes","show","hide","resize","size","__l","__e","externalClasses","wxsCallMethods","callMethod","parseComponent","hooks$1","parseBasePage","vuePageOptions","pageOptions","onLoad","query","copyQuery","parsePage","createPage","createComponent","createSubpackageApp","onShow","onAppShow","onHide","onAppHide","createPlugin","canIUseApi","apiName","uni","Proxy","uni$1","_interopRequireDefault","__esModule","module","exports","arrayWithHoles","require","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_i","Symbol","iterator","_s","_e","_x","_r","_arr","_n","_d","next","done","arrayLikeToArray","_unsupportedIterableToArray","o","minLen","n","from","_arrayLikeToArray","arr2","_nonIterableRest","TypeError","toPropertyKey","_defineProperty","writable","_typeof","toPrimitive","_toPropertyKey","_toPrimitive","input","hint","prim","setPrototypeOf","isNativeReflectConstruct","_construct","Parent","Class","Reflect","construct","bind","a","Constructor","Function","instance","_setPrototypeOf","p","_isNativeReflectConstruct","sham","valueOf","arrayWithoutHoles","iterableToArray","nonIterableSpread","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","iter","_nonIterableSpread","defaultDelimiters","BaseFormatter","_caches","delimiters","tokens","compile","RE_TOKEN_LIST_VALUE","RE_TOKEN_NAMED_VALUE","format","startDelimiter","endDelimiter","position","text","char","sub","isClosed","compiled","mode","defaultFormatter","I18n","fallbackLocale","watcher","formater","watchers","override","interpolate","watchAppLocale","newLocale","$watch","getDefaultLocale","isWatchedAppLocale","f","add","isString","hasI18nJson","jsonObj","walkJsonObj","isI18nStr","parseI18nJson","compileStr","compileI18nJsonStr","jsonStr","localeValues","unshift","compileJsonObj","compileValue","valueLocales","localValue","walk","resolveLocale","resolveLocaleChain","chain","pop","_classCallCheck","_defineProperties","descriptor","_createClass","protoProps","staticProps","use","Vuex","lifeData","saveStateKeys","saveLifeData","tmpLifeData","setStorageSync","Store","vuex_user","vuex_version","vuex_custom_nav_bar","vuex_status_bar_height","vuex_custom_bar_height","mutations","$tStore","payload","nameArr","saveKey","actions","updateCustomBarInfo","statusBarHeight","customBarHeight","custom","getMenuButtonBoundingClientRect","log","wranning","$tn","http","Request","updateCustomBar","color","uuid","array","string","deepClone","zIndex","colorInfo","install","getRect","_tGetRect","beforeDestory","children","childrenList","child","all","createSelectorQuery","in","boundingClientRect","rect","exec","getParentData","parentName","parentData","preventEvent","config","clone","defaults","request","InterceptorManager","response","mergeConfig","dispatchRequest","unshiftRequestInterceptors","fulfilled","rejected","pushResponseInterceptors","shift","middleware","adapter","mergeKeys","config2","prop","isUndefined","buildURL","buildFullPath","baseURL","_config","header","settle","requestTask","otherConfig","filePath","optionalKeys","uploadFile","downloadFile","getTask","serializedParams","utils","isURLSearchParams","serialize","parseValue","isDate","toISOString","hashmarkIndex","URLSearchParams","l","isBoolean","deepMerge","assignValue","requestedURL","isAbsoluteURL","combineURLs","relativeURL","validateStatus","status","statusCode","handlers","eject","h","globalsConfig","defaultToConfig2Keys","uploadKeys","defaultsKeys","dataType","responseType","timeout","_instanceof","nativeMap","Map","nativeSet","nativePromise","circular","depth","includeNonEnumerable","allParents","allChildren","useBuffer","Buffer","Infinity","_clone","proto","__isArray","__isRegExp","RegExp","source","__getRegExpFlags","lastIndex","__isDate","getTime","isBuffer","copy","getPrototypeOf","keyChild","valueChild","entryChild","attrs","getOwnPropertyDescriptor","objProperty","ReferenceError","getOwnPropertySymbols","symbols","symbol","allPropertyNames","getOwnPropertyNames","propertyName","clonePrototype","__objToStr","re","flags","ignoreCase","multiline","COOL_BG_COLOR_COUNT","getTuniaoColorList","getRandomColorClass","colorValue","getRandomCoolBgClass","getBackgroundColorInternalClass","backgroundColor","some","getBackgroundColorStyle","getFontColorInternalClass","fontColor","getFontColorStyle","colorGradient","startColor","endColor","step","startRGB","hexToRGB","startR","startG","startB","endRGB","endR","endG","endB","R","G","B","colorArr","hex","rgbToHex","round","reg","colorNew","colorChange","rgb","strHex","num","numHex","colorToRGBA","alpha","toast","mask","cb","icon","duration","showToast","setTimeout","loading","showLoading","modal","content","confirmCb","showCancel","cancelCb","confirmText","cancelText","showModal","cancel","confirm","closeToast","hideToast","closeLoading","hideLoading","firstT","radix","chars","r","email","mobile","date","dateISO","digits","idCard","carNo","xreg","creg","amount","chinese","letter","enOrNum","contains","range","rangeLength","landline","empty","jsonString","object","code","isEmpty","getLengthUnitValue","unit","humpConvertChar","charConvertHump","formatNumberString","maxNumber","pow","formatNumberAddZero","formatNumberAddPriceUnit","unitSplit","toFixed","getDigit","digit","min","max","gab","randomInt","NaN","landsacpe","navbar","goodsNav","alert","popup","tips","sticky","indexListSticky","fab","tableTr","tableTd","mainColor","reverseMainColor","femaleColor","maleColor","mainOrange","bgColor","spaceColor","fontSubColor","contentColor","fontHolderColor","maskBgColor","$tStoreKey","vuex","commit","computed","mapState","mpShare","imageUrl","hideShareMenu","onShareAppMessage","onShareTimeline","substring","runtime","_regeneratorRuntime","Op","desc","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","Context","makeInvokeMethod","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","_invoke","AsyncIterator","PromiseImpl","record","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","reverse","skipTempReset","prev","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","finish","_catch","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","fontSize","fontUnit","backgroundColorStyle","backgroundColorClass","fontColorStyle","fontColorClass","fontSizeStyle"],"mappings":"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OAAO,CAAC,SAAS,CAAC,GAAGD,MAAM,CAACC,OAAO,C;;;;;;;;;;;AClB3G;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA,sBAAsB,+BAA+B;AACrD,sBAAsB,iBAAiB;AACvC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iCAAiC,EAAE;AACrF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,cAAc;;AAE3C;;AAEA;AACA;AACA;AACA,6BAA6B,UAAU;;AAEvC;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,aAAoB;;AAErC;AACA;AACA;AACA,YAAY,aAAoB;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG;AACR;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA,oCAAoC;AACpC;;AAEA,IAAI,IAAqC;AACzC;AACA;AACA,iCAAiC;AACjC,uCAAuC,wBAAwB,EAAE;AACjE,0BAA0B;;AAE1B;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,wCAAwC,EAAE;AAC1C;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA,+BAA+B,oBAAoB,EAAE;AACrD;AACA,kCAAkC,OAAO;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B,SAAS,qBAAqB;;AAExD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,IAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAqC;AACzC;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD,iCAAiC,sBAAsB;AACvD;AACA,kBAAkB;AAClB,MAAM,IAAqC;AAC3C;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAoB;AACtC;AACA;AACA,mBAAmB;AACnB;AACA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,OAAO,UAAU,IAAqC;AACtD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,GAAG,UAAU,IAAqC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,mBAAmB,mBAAmB;AACtC,+BAA+B;AAC/B;AACA,GAAG;AACH;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B,WAAW;AACX;AACA,GAAG,UAAU,IAAqC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,oCAAoC;AACpC;AACA,qCAAqC;AACrC;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAEQ;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,6CAA6C,qCAAqC,EAAE;AACpF;;AAEA;AACA;AACA;;AAEA,oCAAoC,yCAAyC,EAAE;AAC/E;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kBAAkB;AAC3C;AACA;AACA,4BAA4B;AAC5B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAsD,EAAE;AACtF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;;AAEA,IAAI,IAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iCAAiC;AACnE,cAAc,6BAA6B;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,iCAAiC;AACnE,cAAc,6BAA6B;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,yBAAyB;AAC1C,GAAG;AACH;AACA;AACA,iBAAiB,+BAA+B;AAChD;AACA;;AAEA;AACA;;AAEA,IAAI,IAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,IAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,qBAAqB;AAClC;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,IAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO,MAAM,EAEN;AACP,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,iBAAiB;AACpC;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,IAAqC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,sBAAsB,mBAAmB;AACzC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,OAAO;AACtC,uCAAuC;AACvC;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB,sCAAsC;AACtC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,OAAO;AACzC;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,4CAA4C,eAAe;AAC3D,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kDAAkD;AAClD,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA,KAAK;AACL,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA,KAAK,UAAU,KAAqC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,qCAAqC,gEAAgE;AACrG;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,4BAA4B,+BAA+B;AAC3D,4BAA4B,+BAA+B;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C,kDAAkD;AAClD;AACA;AACA,mCAAmC;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sEAAsE;;AAEtE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK,uFAAuF;AAC5F;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG,+BAA+B;AAClC,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,oBAAoB,oBAAoB;AACxC,sBAAsB,4BAA4B;AAClD;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,mBAAmB;AACnB,yBAAyB;AACzB;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAA6C;AAC9E;AACA;AACA,6CAA6C,4CAA4C;;AAEzF;AACA;AACA;;AAEA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,GAAG,MAAM,EAGN;AACH;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,UAAU,KAAqC;AAC/C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK,2CAA2C,8BAA8B,EAAE;;AAEhF;AACA,wCAAwC,OAAO;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAqC;AACrD;AACA,oBAAoB,SAAI;AACxB;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;;AAE1B,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,MAAM,IAAqC;AAC3C;AACA;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,0BAA0B;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oBAAoB,EAAE;;AAEpD;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,KAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oBAAoB;AACpB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,oBAAoB,KAAqC;AACzD;AACA,MAAM,SAAE;AACR;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C,qBAAqB,+BAA+B;AACpD;AACA;AACA,GAAG;AACH,yBAAyB;AACzB;AACA,sBAAsB,iCAAiC;AACvD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kGAAkG;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK,MAAM,EAEN;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,KAAqC;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK,UAAU,IAAqC;AACpD;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,8BAA8B;AAC9B,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,KAAqC;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA,KAAK,MAAM,EAEN;AACL;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,sCAAsC;AACtC,8C;;AAEA;AACA,QAAQ,KAAqC;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE;AACtE;AACA;AACA;;AAEA;AACA,QAAQ,KAAqC;AAC7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,YAAY,KAAqC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA,0CAA0C,2BAA2B,EAAE;AACvE,KAAK;AACL;AACA,0CAA0C,4BAA4B,EAAE;AACxE,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,iBAAiB;AACjB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY,iIAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,gCAAgC,EAAE;AAC5E;;AAEA;AACA;AACA;AACA;AACA,WAAW,iIAAW;AACtB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,WAAW,iIAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,0CAA0C;;AAE1C;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,sCAAsC;AACtC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,KAAK;AACL;AACA;AACA,UAAU,iIAAW;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,qDAAqD,EAAE,SAAS;AACtH;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,0BAA0B,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEe,kEAAG,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC97LnB;AACA;AAEAvoB,YAAG,CAACowB,GAAG,CAACC,aAAI,CAAC;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AEA;AACA;AACA;AACA;AACA,2CAA2C,0BAA0B,EAAE;AACvE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0BAA0B,cAAc,qBAAqB;;AAE7D;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAqC;AAC5C;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,SAAS,IAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,OAAO,IAAqC;AAC5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,IAAqC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,oCAAoC,EAAE;AAClE;AACA;;AAEA;AACA,4BAA4B;AAC5B,uEAAuE,EAAE;AACzE;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B;;AAE1B;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAQ;;AAER;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,IAAqC;AAC5C;AACA;AACA;AACA;;AAEA,gCAAgC;AAChC,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAqC,uBAAuB,EAAE;;AAE9D;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,SAAS,qBAAqB;;AAE1D;AACA;AACA;;AAEA;AACA,OAAO,IAAqC;AAC5C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;AACA,SAAS,IAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA,6BAA6B,oCAAoC,EAAE;;AAEnE;AACA,KAAK,KAAqC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA,SAAS,IAAqC;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,mBAAmB,EAAE;AACnD,+BAA+B,yCAAyC,EAAE;AAC1E,GAAG;AACH,SAAS,IAAqC;AAC9C;AACA;AACA;AACA;;AAEA;AACA,gDAAgD,yBAAyB,EAAE;AAC3E;;AAEA;AACA;AACA;AACA;AACA,kCAAkC,kBAAkB,EAAE;AACtD,mCAAmC,wCAAwC,EAAE;AAC7E,OAAO;AACP,aAAa,IAAqC;AAClD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,kBAAkB,EAAE;AACtD,mCAAmC,+CAA+C,EAAE;AACpF,OAAO;AACP,aAAa,IAAqC;AAClD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA,yCAAyC,aAAa;AACtD;AACA;;AAEA;AACA;;AAEA,OAAO,IAAqC;AAC5C;AACA;AACA,6CAA6C,6CAA6C,EAAE;AAC5F;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA,iCAAiC,eAAe;;AAEhD,OAAO,IAAqC;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iCAAiC,eAAe;;AAEhD,OAAO,IAAqC;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,iCAAiC,eAAe;;AAEhD,OAAO,IAAqC;AAC5C;AACA;;AAEA;AACA;;AAEA,yEAAyE,iCAAiC;AAC1G;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB,EAAE;AACjD;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,8BAA8B,yBAAyB,EAAE;AACzD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,aAAoB;AACtE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,IAAqC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,KAAqC;AAClD;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,KAAqC;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C,uBAAuB,2CAA2C;AAClE,KAAK;AACL;AACA,wBAAwB,0CAA0C;AAClE;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;;AAElD;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,4BAA4B,EAAE;AACxD;AACA,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,SAAS,IAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,4BAA4B;AAC5D,SAAS,IAAqC;AAC9C;AACA;AACA,GAAG,GAAG,yBAAyB;AAC/B;;AAEA;AACA,4CAA4C,mBAAmB,EAAE;AACjE;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,IAAqC;AAC5C;AACA;;AAEA,UAAU;AACV;;AAEA;AACA;AACA,SAAS,IAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW;AACX;AACA;AACA;AACA,OAAO,KAAqC;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,YAAY;AACZ;AACA;AACA;AACA,OAAO,KAAqC;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,YAAY;AACZ;AACA;AACA;AACA,OAAO,KAAqC;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAqC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,YAAY;AACZ;AACA;AACA;AACA,OAAO,KAAqC;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,CAAC,EAAE;;AAEH;AACA;AACA,iCAAiC,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AAC1F,iBAAiB,iBAAiB,QAAQ,mBAAmB,GAAG,mBAAmB,GAAG,mBAAmB;AACzG,WAAW,aAAa;AACxB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU,qBAAqB,EAAE,EAAE;AACjE,2CAA2C,UAAU,0BAA0B,EAAE,EAAE;AACnF;;AAEA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA,OAAO,KAAqC;AAC5C;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gCAAgC;AAChC,0BAA0B,iFAAiF,aAAa;AACxH,oCAAoC,+DAA+D,cAAc;AACjH,oDAAoD,6EAA6E,YAAY;AAC7I,sCAAsC,yEAAyE,aAAa;AAC5H,gDAAgD,yEAAyE,YAAY;AACrI,sCAAsC;AACtC,kCAAkC;AAClC,0BAA0B;;AAE1B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD;AACtD,oDAAoD;AACpD,sDAAsD;AACtD;AACA;;AAEA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAkD;AAClD;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;AC3tCA;AACA;AACA;AACA,SAASuN,mBAAmB,GAAI;EAC9B,OAAO,IAAIrtB,OAAO,CAAC,UAACC,OAAO,EAAEgB,MAAM,EAAK;IACtC8iB,GAAG,CAACnW,aAAa,CAAC;MAChBxL,OAAO,EAAE,iBAACkP,CAAC,EAAK;QACd,IAAIgc,eAAe,GAAG,CAAC;QACvB,IAAIC,eAAe,GAAG,CAAC;QAWvBD,eAAe,GAAGhc,CAAC,CAACgc,eAAe;QACnC,IAAIE,MAAM,GAAGzyB,EAAE,CAAC0yB,+BAA+B,EAAE;QACjDF,eAAe,GAAGC,MAAM,CAAC5jB,MAAM,IAAK4jB,MAAM,CAAC/jB,GAAG,GAAG6H,CAAC,CAACgc,eAAe,IAAK,CAAC,GAAIE,MAAM,CAAC/jB,GAAG,GAAG6H,CAAC,CACvFgc,eAAe,GAAI,CAAC,GAAIE,MAAM,CAAC/jB,GAAG,GAAG6H,CAAC,CAACgc,eAAgB,CAAC;QAO3DrtB,OAAO,CAAC;UACNqtB,eAAe,EAAfA,eAAe;UACfC,eAAe,EAAfA;QACF,CAAC,CAAC;MACJ,CAAC;MACDlrB,IAAI,EAAE,cAACT,GAAG,EAAK;QACb2N,OAAO,CAACme,GAAG,CAAC,UAAU,EAAE9rB,GAAG,CAAC;QAC5BX,MAAM,EAAE;MACV;IACF,CAAC,CAAC;EAEJ,CAAC,CAAC;AACJ;AAAC,eAEcosB,mBAAmB;AAAA,2B;;;;;;;;;;;;;;AC3ClC;AAAA;AAAA;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACpHA;AAEA;AAaA;AAEA;AAEA;AAEA;AAEA;AAGA;AAEA;AAEA;AAEA;AAEA;AAGA;AAEA;AAxCA;;AAEA;;AAGA;AACA,SAASM,QAAQ,CAACn0B,GAAG,EAAE;EACrB;EACA;EACA;EACA,IAAI+R,IAAsC,EAAE;IAC3CgE,OAAO,CAACC,IAAI,CAAChW,GAAG,CAAC;EAClB;AACF;;AAEA;;AA2BA,IAAMo0B,GAAG,GAAG;EACVC,IAAI,EAAE,IAAI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ACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,QAAQ;AAChC;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;AC5vDY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,UAAU;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,QAAQ,WAAW;;AAEnB;AACA;AACA,QAAQ,UAAU;;AAElB;AACA;;;;;;;;;;;ACpFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;;;;;;;;;;;;ACJA,IAAIzB,KAAK,GAAG,CACV,KAAK,EACL,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,MAAM,EACN,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,OAAO,EACP,MAAM,EACN,MAAM,CACP;;AAED;AACA,IAAMmI,mBAAmB,GAAG,EAAE;;AAE9B;AACA;AACA;AACA,SAASC,kBAAkB,GAAG;EAC5B,OAAOpI,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA,SAASqI,mBAAmB,GAAc;EAAA,IAAbt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","file":"common/vendor.js","sourcesContent":["const objectKeys = [\r\n 'qy',\r\n 'env',\r\n 'error',\r\n 'version',\r\n 'lanDebug',\r\n 'cloud',\r\n 'serviceMarket',\r\n 'router',\r\n 'worklet',\r\n '__webpack_require_UNI_MP_PLUGIN__'\r\n]\r\nconst singlePageDisableKey = [\r\n 'lanDebug',\r\n 'router',\r\n 'worklet'\r\n]\r\nconst target = typeof globalThis !== 'undefined' ? globalThis : (function () {\r\n return this\r\n})()\r\n\r\nconst key = ['w', 'x'].join('')\r\nconst oldWx = target[key]\r\nconst launchOption = oldWx.getLaunchOptionsSync ? oldWx.getLaunchOptionsSync() : null\r\n\r\nfunction isWxKey (key) {\r\n if (launchOption && launchOption.scene === 1154 && singlePageDisableKey.includes(key)) {\r\n return false\r\n }\r\n return objectKeys.indexOf(key) > -1 || typeof oldWx[key] === 'function'\r\n}\r\n\r\nfunction initWx () {\r\n const newWx = {}\r\n for (const key in oldWx) {\r\n if (isWxKey(key)) {\r\n // TODO wrapper function\r\n newWx[key] = oldWx[key]\r\n }\r\n }\r\n return newWx\r\n}\r\ntarget[key] = initWx()\r\nexport default target[key]\r\n","import { initVueI18n } from '@dcloudio/uni-i18n';\r\nimport Vue from 'vue';\r\n\r\nlet realAtob;\r\n\r\nconst b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\nconst b64re = /^(?:[A-Za-z\\d+/]{4})*?(?:[A-Za-z\\d+/]{2}(?:==)?|[A-Za-z\\d+/]{3}=?)?$/;\r\n\r\nif (typeof atob !== 'function') {\r\n realAtob = function (str) {\r\n str = String(str).replace(/[\\t\\n\\f\\r ]+/g, '');\r\n if (!b64re.test(str)) { throw new Error(\"Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.\") }\r\n\r\n // Adding the padding if missing, for semplicity\r\n str += '=='.slice(2 - (str.length & 3));\r\n var bitmap; var result = ''; var r1; var r2; var i = 0;\r\n for (; i < str.length;) {\r\n bitmap = b64.indexOf(str.charAt(i++)) << 18 | b64.indexOf(str.charAt(i++)) << 12 |\r\n (r1 = b64.indexOf(str.charAt(i++))) << 6 | (r2 = b64.indexOf(str.charAt(i++)));\r\n\r\n result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255)\r\n : r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255)\r\n : String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);\r\n }\r\n return result\r\n };\r\n} else {\r\n // 注意atob只能在全局对象上调用,例如:`const Base64 = {atob};Base64.atob('xxxx')`是错误的用法\r\n realAtob = atob;\r\n}\r\n\r\nfunction b64DecodeUnicode (str) {\r\n return decodeURIComponent(realAtob(str).split('').map(function (c) {\r\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)\r\n }).join(''))\r\n}\r\n\r\nfunction getCurrentUserInfo () {\r\n const token = ( wx).getStorageSync('uni_id_token') || '';\r\n const tokenArr = token.split('.');\r\n if (!token || tokenArr.length !== 3) {\r\n return {\r\n uid: null,\r\n role: [],\r\n permission: [],\r\n tokenExpired: 0\r\n }\r\n }\r\n let userInfo;\r\n try {\r\n userInfo = JSON.parse(b64DecodeUnicode(tokenArr[1]));\r\n } catch (error) {\r\n throw new Error('获取当前用户信息出错,详细错误信息为:' + error.message)\r\n }\r\n userInfo.tokenExpired = userInfo.exp * 1000;\r\n delete userInfo.exp;\r\n delete userInfo.iat;\r\n return userInfo\r\n}\r\n\r\nfunction uniIdMixin (Vue) {\r\n Vue.prototype.uniIDHasRole = function (roleId) {\r\n const {\r\n role\r\n } = getCurrentUserInfo();\r\n return role.indexOf(roleId) > -1\r\n };\r\n Vue.prototype.uniIDHasPermission = function (permissionId) {\r\n const {\r\n permission\r\n } = getCurrentUserInfo();\r\n return this.uniIDHasRole('admin') || permission.indexOf(permissionId) > -1\r\n };\r\n Vue.prototype.uniIDTokenValid = function () {\r\n const {\r\n tokenExpired\r\n } = getCurrentUserInfo();\r\n return tokenExpired > Date.now()\r\n };\r\n}\r\n\r\nconst _toString = Object.prototype.toString;\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nfunction isFn (fn) {\r\n return typeof fn === 'function'\r\n}\r\n\r\nfunction isStr (str) {\r\n return typeof str === 'string'\r\n}\r\n\r\nfunction isObject (obj) {\r\n return obj !== null && typeof obj === 'object'\r\n}\r\n\r\nfunction isPlainObject (obj) {\r\n return _toString.call(obj) === '[object Object]'\r\n}\r\n\r\nfunction hasOwn (obj, key) {\r\n return hasOwnProperty.call(obj, key)\r\n}\r\n\r\nfunction noop () {}\r\n\r\n/**\r\n * Create a cached version of a pure function.\r\n */\r\nfunction cached (fn) {\r\n const cache = Object.create(null);\r\n return function cachedFn (str) {\r\n const hit = cache[str];\r\n return hit || (cache[str] = fn(str))\r\n }\r\n}\r\n\r\n/**\r\n * Camelize a hyphen-delimited string.\r\n */\r\nconst camelizeRE = /-(\\w)/g;\r\nconst camelize = cached((str) => {\r\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')\r\n});\r\n\r\nfunction sortObject (obj) {\r\n const sortObj = {};\r\n if (isPlainObject(obj)) {\r\n Object.keys(obj).sort().forEach(key => {\r\n sortObj[key] = obj[key];\r\n });\r\n }\r\n return !Object.keys(sortObj) ? obj : sortObj\r\n}\r\n\r\nconst HOOKS = [\r\n 'invoke',\r\n 'success',\r\n 'fail',\r\n 'complete',\r\n 'returnValue'\r\n];\r\n\r\nconst globalInterceptors = {};\r\nconst scopedInterceptors = {};\r\n\r\nfunction mergeHook (parentVal, childVal) {\r\n const res = childVal\r\n ? parentVal\r\n ? parentVal.concat(childVal)\r\n : Array.isArray(childVal)\r\n ? childVal : [childVal]\r\n : parentVal;\r\n return res\r\n ? dedupeHooks(res)\r\n : res\r\n}\r\n\r\nfunction dedupeHooks (hooks) {\r\n const res = [];\r\n for (let i = 0; i < hooks.length; i++) {\r\n if (res.indexOf(hooks[i]) === -1) {\r\n res.push(hooks[i]);\r\n }\r\n }\r\n return res\r\n}\r\n\r\nfunction removeHook (hooks, hook) {\r\n const index = hooks.indexOf(hook);\r\n if (index !== -1) {\r\n hooks.splice(index, 1);\r\n }\r\n}\r\n\r\nfunction mergeInterceptorHook (interceptor, option) {\r\n Object.keys(option).forEach(hook => {\r\n if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {\r\n interceptor[hook] = mergeHook(interceptor[hook], option[hook]);\r\n }\r\n });\r\n}\r\n\r\nfunction removeInterceptorHook (interceptor, option) {\r\n if (!interceptor || !option) {\r\n return\r\n }\r\n Object.keys(option).forEach(hook => {\r\n if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {\r\n removeHook(interceptor[hook], option[hook]);\r\n }\r\n });\r\n}\r\n\r\nfunction addInterceptor (method, option) {\r\n if (typeof method === 'string' && isPlainObject(option)) {\r\n mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);\r\n } else if (isPlainObject(method)) {\r\n mergeInterceptorHook(globalInterceptors, method);\r\n }\r\n}\r\n\r\nfunction removeInterceptor (method, option) {\r\n if (typeof method === 'string') {\r\n if (isPlainObject(option)) {\r\n removeInterceptorHook(scopedInterceptors[method], option);\r\n } else {\r\n delete scopedInterceptors[method];\r\n }\r\n } else if (isPlainObject(method)) {\r\n removeInterceptorHook(globalInterceptors, method);\r\n }\r\n}\r\n\r\nfunction wrapperHook (hook, params) {\r\n return function (data) {\r\n return hook(data, params) || data\r\n }\r\n}\r\n\r\nfunction isPromise (obj) {\r\n return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'\r\n}\r\n\r\nfunction queue (hooks, data, params) {\r\n let promise = false;\r\n for (let i = 0; i < hooks.length; i++) {\r\n const hook = hooks[i];\r\n if (promise) {\r\n promise = Promise.resolve(wrapperHook(hook, params));\r\n } else {\r\n const res = hook(data, params);\r\n if (isPromise(res)) {\r\n promise = Promise.resolve(res);\r\n }\r\n if (res === false) {\r\n return {\r\n then () { }\r\n }\r\n }\r\n }\r\n }\r\n return promise || {\r\n then (callback) {\r\n return callback(data)\r\n }\r\n }\r\n}\r\n\r\nfunction wrapperOptions (interceptor, options = {}) {\r\n ['success', 'fail', 'complete'].forEach(name => {\r\n if (Array.isArray(interceptor[name])) {\r\n const oldCallback = options[name];\r\n options[name] = function callbackInterceptor (res) {\r\n queue(interceptor[name], res, options).then((res) => {\r\n /* eslint-disable no-mixed-operators */\r\n return isFn(oldCallback) && oldCallback(res) || res\r\n });\r\n };\r\n }\r\n });\r\n return options\r\n}\r\n\r\nfunction wrapperReturnValue (method, returnValue) {\r\n const returnValueHooks = [];\r\n if (Array.isArray(globalInterceptors.returnValue)) {\r\n returnValueHooks.push(...globalInterceptors.returnValue);\r\n }\r\n const interceptor = scopedInterceptors[method];\r\n if (interceptor && Array.isArray(interceptor.returnValue)) {\r\n returnValueHooks.push(...interceptor.returnValue);\r\n }\r\n returnValueHooks.forEach(hook => {\r\n returnValue = hook(returnValue) || returnValue;\r\n });\r\n return returnValue\r\n}\r\n\r\nfunction getApiInterceptorHooks (method) {\r\n const interceptor = Object.create(null);\r\n Object.keys(globalInterceptors).forEach(hook => {\r\n if (hook !== 'returnValue') {\r\n interceptor[hook] = globalInterceptors[hook].slice();\r\n }\r\n });\r\n const scopedInterceptor = scopedInterceptors[method];\r\n if (scopedInterceptor) {\r\n Object.keys(scopedInterceptor).forEach(hook => {\r\n if (hook !== 'returnValue') {\r\n interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);\r\n }\r\n });\r\n }\r\n return interceptor\r\n}\r\n\r\nfunction invokeApi (method, api, options, ...params) {\r\n const interceptor = getApiInterceptorHooks(method);\r\n if (interceptor && Object.keys(interceptor).length) {\r\n if (Array.isArray(interceptor.invoke)) {\r\n const res = queue(interceptor.invoke, options);\r\n return res.then((options) => {\r\n // 重新访问 getApiInterceptorHooks, 允许 invoke 中再次调用 addInterceptor,removeInterceptor\r\n return api(\r\n wrapperOptions(getApiInterceptorHooks(method), options),\r\n ...params\r\n )\r\n })\r\n } else {\r\n return api(wrapperOptions(interceptor, options), ...params)\r\n }\r\n }\r\n return api(options, ...params)\r\n}\r\n\r\nconst promiseInterceptor = {\r\n returnValue (res) {\r\n if (!isPromise(res)) {\r\n return res\r\n }\r\n return new Promise((resolve, reject) => {\r\n res.then(res => {\r\n if (res[0]) {\r\n reject(res[0]);\r\n } else {\r\n resolve(res[1]);\r\n }\r\n });\r\n })\r\n }\r\n};\r\n\r\nconst SYNC_API_RE =\r\n /^\\$|Window$|WindowStyle$|sendHostEvent|sendNativeEvent|restoreGlobal|requireGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getLocale|setLocale|invokePushCallback|getWindowInfo|getDeviceInfo|getAppBaseInfo|getSystemSetting|getAppAuthorizeSetting|initUTS|requireUTS|registerUTS/;\r\n\r\nconst CONTEXT_API_RE = /^create|Manager$/;\r\n\r\n// Context例外情况\r\nconst CONTEXT_API_RE_EXC = ['createBLEConnection'];\r\n\r\n// 同步例外情况\r\nconst ASYNC_API = ['createBLEConnection', 'createPushMessage'];\r\n\r\nconst CALLBACK_API_RE = /^on|^off/;\r\n\r\nfunction isContextApi (name) {\r\n return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1\r\n}\r\nfunction isSyncApi (name) {\r\n return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1\r\n}\r\n\r\nfunction isCallbackApi (name) {\r\n return CALLBACK_API_RE.test(name) && name !== 'onPush'\r\n}\r\n\r\nfunction handlePromise (promise) {\r\n return promise.then(data => {\r\n return [null, data]\r\n })\r\n .catch(err => [err])\r\n}\r\n\r\nfunction shouldPromise (name) {\r\n if (\r\n isContextApi(name) ||\r\n isSyncApi(name) ||\r\n isCallbackApi(name)\r\n ) {\r\n return false\r\n }\r\n return true\r\n}\r\n\r\n/* eslint-disable no-extend-native */\r\nif (!Promise.prototype.finally) {\r\n Promise.prototype.finally = function (callback) {\r\n const promise = this.constructor;\r\n return this.then(\r\n value => promise.resolve(callback()).then(() => value),\r\n reason => promise.resolve(callback()).then(() => {\r\n throw reason\r\n })\r\n )\r\n };\r\n}\r\n\r\nfunction promisify (name, api) {\r\n if (!shouldPromise(name) || !isFn(api)) {\r\n return api\r\n }\r\n return function promiseApi (options = {}, ...params) {\r\n if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {\r\n return wrapperReturnValue(name, invokeApi(name, api, options, ...params))\r\n }\r\n return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {\r\n invokeApi(name, api, Object.assign({}, options, {\r\n success: resolve,\r\n fail: reject\r\n }), ...params);\r\n })))\r\n }\r\n}\r\n\r\nconst EPS = 1e-4;\r\nconst BASE_DEVICE_WIDTH = 750;\r\nlet isIOS = false;\r\nlet deviceWidth = 0;\r\nlet deviceDPR = 0;\r\n\r\nfunction checkDeviceWidth () {\r\n const {\r\n platform,\r\n pixelRatio,\r\n windowWidth\r\n } = wx.getSystemInfoSync(); // uni=>wx runtime 编译目标是 uni 对象,内部不允许直接使用 uni\r\n\r\n deviceWidth = windowWidth;\r\n deviceDPR = pixelRatio;\r\n isIOS = platform === 'ios';\r\n}\r\n\r\nfunction upx2px (number, newDeviceWidth) {\r\n if (deviceWidth === 0) {\r\n checkDeviceWidth();\r\n }\r\n\r\n number = Number(number);\r\n if (number === 0) {\r\n return 0\r\n }\r\n let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);\r\n if (result < 0) {\r\n result = -result;\r\n }\r\n result = Math.floor(result + EPS);\r\n if (result === 0) {\r\n if (deviceDPR === 1 || !isIOS) {\r\n result = 1;\r\n } else {\r\n result = 0.5;\r\n }\r\n }\r\n return number < 0 ? -result : result\r\n}\r\n\r\nconst LOCALE_ZH_HANS = 'zh-Hans';\r\nconst LOCALE_ZH_HANT = 'zh-Hant';\r\nconst LOCALE_EN = 'en';\r\nconst LOCALE_FR = 'fr';\r\nconst LOCALE_ES = 'es';\r\n\r\nconst messages = {};\r\n\r\nlet locale;\r\n\r\n{\r\n locale = normalizeLocale(wx.getSystemInfoSync().language) || LOCALE_EN;\r\n}\r\n\r\nfunction initI18nMessages () {\r\n if (!isEnableLocale()) {\r\n return\r\n }\r\n const localeKeys = Object.keys(__uniConfig.locales);\r\n if (localeKeys.length) {\r\n localeKeys.forEach((locale) => {\r\n const curMessages = messages[locale];\r\n const userMessages = __uniConfig.locales[locale];\r\n if (curMessages) {\r\n Object.assign(curMessages, userMessages);\r\n } else {\r\n messages[locale] = userMessages;\r\n }\r\n });\r\n }\r\n}\r\n\r\ninitI18nMessages();\r\n\r\nconst i18n = initVueI18n(\r\n locale,\r\n {}\r\n);\r\nconst t = i18n.t;\r\nconst i18nMixin = (i18n.mixin = {\r\n beforeCreate () {\r\n const unwatch = i18n.i18n.watchLocale(() => {\r\n this.$forceUpdate();\r\n });\r\n this.$once('hook:beforeDestroy', function () {\r\n unwatch();\r\n });\r\n },\r\n methods: {\r\n $$t (key, values) {\r\n return t(key, values)\r\n }\r\n }\r\n});\r\nconst setLocale = i18n.setLocale;\r\nconst getLocale = i18n.getLocale;\r\n\r\nfunction initAppLocale (Vue, appVm, locale) {\r\n const state = Vue.observable({\r\n locale: locale || i18n.getLocale()\r\n });\r\n const localeWatchers = [];\r\n appVm.$watchLocale = fn => {\r\n localeWatchers.push(fn);\r\n };\r\n Object.defineProperty(appVm, '$locale', {\r\n get () {\r\n return state.locale\r\n },\r\n set (v) {\r\n state.locale = v;\r\n localeWatchers.forEach(watch => watch(v));\r\n }\r\n });\r\n}\r\n\r\nfunction isEnableLocale () {\r\n return typeof __uniConfig !== 'undefined' && __uniConfig.locales && !!Object.keys(__uniConfig.locales).length\r\n}\r\n\r\nfunction include (str, parts) {\r\n return !!parts.find((part) => str.indexOf(part) !== -1)\r\n}\r\n\r\nfunction startsWith (str, parts) {\r\n return parts.find((part) => str.indexOf(part) === 0)\r\n}\r\n\r\nfunction normalizeLocale (locale, messages) {\r\n if (!locale) {\r\n return\r\n }\r\n locale = locale.trim().replace(/_/g, '-');\r\n if (messages && messages[locale]) {\r\n return locale\r\n }\r\n locale = locale.toLowerCase();\r\n if (locale === 'chinese') {\r\n // 支付宝\r\n return LOCALE_ZH_HANS\r\n }\r\n if (locale.indexOf('zh') === 0) {\r\n if (locale.indexOf('-hans') > -1) {\r\n return LOCALE_ZH_HANS\r\n }\r\n if (locale.indexOf('-hant') > -1) {\r\n return LOCALE_ZH_HANT\r\n }\r\n if (include(locale, ['-tw', '-hk', '-mo', '-cht'])) {\r\n return LOCALE_ZH_HANT\r\n }\r\n return LOCALE_ZH_HANS\r\n }\r\n const lang = startsWith(locale, [LOCALE_EN, LOCALE_FR, LOCALE_ES]);\r\n if (lang) {\r\n return lang\r\n }\r\n}\r\n// export function initI18n() {\r\n// const localeKeys = Object.keys(__uniConfig.locales || {})\r\n// if (localeKeys.length) {\r\n// localeKeys.forEach((locale) =>\r\n// i18n.add(locale, __uniConfig.locales[locale])\r\n// )\r\n// }\r\n// }\r\n\r\nfunction getLocale$1 () {\r\n // 优先使用 $locale\r\n if (isFn(getApp)) {\r\n const app = getApp({\r\n allowDefault: true\r\n });\r\n if (app && app.$vm) {\r\n return app.$vm.$locale\r\n }\r\n }\r\n return normalizeLocale(wx.getSystemInfoSync().language) || LOCALE_EN\r\n}\r\n\r\nfunction setLocale$1 (locale) {\r\n const app = isFn(getApp) ? getApp() : false;\r\n if (!app) {\r\n return false\r\n }\r\n const oldLocale = app.$vm.$locale;\r\n if (oldLocale !== locale) {\r\n app.$vm.$locale = locale;\r\n onLocaleChangeCallbacks.forEach((fn) => fn({\r\n locale\r\n }));\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nconst onLocaleChangeCallbacks = [];\r\nfunction onLocaleChange (fn) {\r\n if (onLocaleChangeCallbacks.indexOf(fn) === -1) {\r\n onLocaleChangeCallbacks.push(fn);\r\n }\r\n}\r\n\r\nif (typeof global !== 'undefined') {\r\n global.getLocale = getLocale$1;\r\n}\r\n\r\nconst interceptors = {\r\n promiseInterceptor\r\n};\r\n\r\nvar baseApi = /*#__PURE__*/Object.freeze({\r\n __proto__: null,\r\n upx2px: upx2px,\r\n getLocale: getLocale$1,\r\n setLocale: setLocale$1,\r\n onLocaleChange: onLocaleChange,\r\n addInterceptor: addInterceptor,\r\n removeInterceptor: removeInterceptor,\r\n interceptors: interceptors\r\n});\r\n\r\nfunction findExistsPageIndex (url) {\r\n const pages = getCurrentPages();\r\n let len = pages.length;\r\n while (len--) {\r\n const page = pages[len];\r\n if (page.$page && page.$page.fullPath === url) {\r\n return len\r\n }\r\n }\r\n return -1\r\n}\r\n\r\nvar redirectTo = {\r\n name (fromArgs) {\r\n if (fromArgs.exists === 'back' && fromArgs.delta) {\r\n return 'navigateBack'\r\n }\r\n return 'redirectTo'\r\n },\r\n args (fromArgs) {\r\n if (fromArgs.exists === 'back' && fromArgs.url) {\r\n const existsPageIndex = findExistsPageIndex(fromArgs.url);\r\n if (existsPageIndex !== -1) {\r\n const delta = getCurrentPages().length - 1 - existsPageIndex;\r\n if (delta > 0) {\r\n fromArgs.delta = delta;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\nvar previewImage = {\r\n args (fromArgs) {\r\n let currentIndex = parseInt(fromArgs.current);\r\n if (isNaN(currentIndex)) {\r\n return\r\n }\r\n const urls = fromArgs.urls;\r\n if (!Array.isArray(urls)) {\r\n return\r\n }\r\n const len = urls.length;\r\n if (!len) {\r\n return\r\n }\r\n if (currentIndex < 0) {\r\n currentIndex = 0;\r\n } else if (currentIndex >= len) {\r\n currentIndex = len - 1;\r\n }\r\n if (currentIndex > 0) {\r\n fromArgs.current = urls[currentIndex];\r\n fromArgs.urls = urls.filter(\r\n (item, index) => index < currentIndex ? item !== urls[currentIndex] : true\r\n );\r\n } else {\r\n fromArgs.current = urls[0];\r\n }\r\n return {\r\n indicator: false,\r\n loop: false\r\n }\r\n }\r\n};\r\n\r\nconst UUID_KEY = '__DC_STAT_UUID';\r\nlet deviceId;\r\nfunction useDeviceId (result) {\r\n deviceId = deviceId || wx.getStorageSync(UUID_KEY);\r\n if (!deviceId) {\r\n deviceId = Date.now() + '' + Math.floor(Math.random() * 1e7);\r\n wx.setStorage({\r\n key: UUID_KEY,\r\n data: deviceId\r\n });\r\n }\r\n result.deviceId = deviceId;\r\n}\r\n\r\nfunction addSafeAreaInsets (result) {\r\n if (result.safeArea) {\r\n const safeArea = result.safeArea;\r\n result.safeAreaInsets = {\r\n top: safeArea.top,\r\n left: safeArea.left,\r\n right: result.windowWidth - safeArea.right,\r\n bottom: result.screenHeight - safeArea.bottom\r\n };\r\n }\r\n}\r\n\r\nfunction populateParameters (result) {\r\n const {\r\n brand = '', model = '', system = '',\r\n language = '', theme, version,\r\n platform, fontSizeSetting,\r\n SDKVersion, pixelRatio, deviceOrientation\r\n } = result;\r\n // const isQuickApp = \"mp-weixin\".indexOf('quickapp-webview') !== -1\r\n\r\n const extraParam = {};\r\n\r\n // osName osVersion\r\n let osName = '';\r\n let osVersion = '';\r\n {\r\n osName = system.split(' ')[0] || '';\r\n osVersion = system.split(' ')[1] || '';\r\n }\r\n let hostVersion = version;\r\n\r\n // deviceType\r\n const deviceType = getGetDeviceType(result, model);\r\n\r\n // deviceModel\r\n const deviceBrand = getDeviceBrand(brand);\r\n\r\n // hostName\r\n const _hostName = getHostName(result);\r\n\r\n // deviceOrientation\r\n let _deviceOrientation = deviceOrientation; // 仅 微信 百度 支持\r\n\r\n // devicePixelRatio\r\n let _devicePixelRatio = pixelRatio;\r\n\r\n // SDKVersion\r\n let _SDKVersion = SDKVersion;\r\n\r\n // hostLanguage\r\n const hostLanguage = language.replace(/_/g, '-');\r\n\r\n // wx.getAccountInfoSync\r\n\r\n const parameters = {\r\n appId: process.env.UNI_APP_ID,\r\n appName: process.env.UNI_APP_NAME,\r\n appVersion: process.env.UNI_APP_VERSION_NAME,\r\n appVersionCode: process.env.UNI_APP_VERSION_CODE,\r\n appLanguage: getAppLanguage(hostLanguage),\r\n uniCompileVersion: process.env.UNI_COMPILER_VERSION,\r\n uniRuntimeVersion: process.env.UNI_COMPILER_VERSION,\r\n uniPlatform: process.env.UNI_SUB_PLATFORM || process.env.UNI_PLATFORM,\r\n deviceBrand,\r\n deviceModel: model,\r\n deviceType,\r\n devicePixelRatio: _devicePixelRatio,\r\n deviceOrientation: _deviceOrientation,\r\n osName: osName.toLocaleLowerCase(),\r\n osVersion,\r\n hostTheme: theme,\r\n hostVersion,\r\n hostLanguage,\r\n hostName: _hostName,\r\n hostSDKVersion: _SDKVersion,\r\n hostFontSizeSetting: fontSizeSetting,\r\n windowTop: 0,\r\n windowBottom: 0,\r\n // TODO\r\n osLanguage: undefined,\r\n osTheme: undefined,\r\n ua: undefined,\r\n hostPackageName: undefined,\r\n browserName: undefined,\r\n browserVersion: undefined\r\n };\r\n\r\n Object.assign(result, parameters, extraParam);\r\n}\r\n\r\nfunction getGetDeviceType (result, model) {\r\n let deviceType = result.deviceType || 'phone';\r\n {\r\n const deviceTypeMaps = {\r\n ipad: 'pad',\r\n windows: 'pc',\r\n mac: 'pc'\r\n };\r\n const deviceTypeMapsKeys = Object.keys(deviceTypeMaps);\r\n const _model = model.toLocaleLowerCase();\r\n for (let index = 0; index < deviceTypeMapsKeys.length; index++) {\r\n const _m = deviceTypeMapsKeys[index];\r\n if (_model.indexOf(_m) !== -1) {\r\n deviceType = deviceTypeMaps[_m];\r\n break\r\n }\r\n }\r\n }\r\n return deviceType\r\n}\r\n\r\nfunction getDeviceBrand (brand) {\r\n let deviceBrand = brand;\r\n if (deviceBrand) {\r\n deviceBrand = brand.toLocaleLowerCase();\r\n }\r\n return deviceBrand\r\n}\r\n\r\nfunction getAppLanguage (defaultLanguage) {\r\n return getLocale$1\r\n ? getLocale$1()\r\n : defaultLanguage\r\n}\r\n\r\nfunction getHostName (result) {\r\n const _platform = 'WeChat' ;\r\n let _hostName = result.hostName || _platform; // mp-jd\r\n {\r\n if (result.environment) {\r\n _hostName = result.environment;\r\n } else if (result.host && result.host.env) {\r\n _hostName = result.host.env;\r\n }\r\n }\r\n\r\n return _hostName\r\n}\r\n\r\nvar getSystemInfo = {\r\n returnValue: function (result) {\r\n useDeviceId(result);\r\n addSafeAreaInsets(result);\r\n populateParameters(result);\r\n }\r\n};\r\n\r\nvar showActionSheet = {\r\n args (fromArgs) {\r\n if (typeof fromArgs === 'object') {\r\n fromArgs.alertText = fromArgs.title;\r\n }\r\n }\r\n};\r\n\r\nvar getAppBaseInfo = {\r\n returnValue: function (result) {\r\n const { version, language, SDKVersion, theme } = result;\r\n\r\n const _hostName = getHostName(result);\r\n\r\n const hostLanguage = language.replace('_', '-');\r\n\r\n result = sortObject(Object.assign(result, {\r\n appId: process.env.UNI_APP_ID,\r\n appName: process.env.UNI_APP_NAME,\r\n appVersion: process.env.UNI_APP_VERSION_NAME,\r\n appVersionCode: process.env.UNI_APP_VERSION_CODE,\r\n appLanguage: getAppLanguage(hostLanguage),\r\n hostVersion: version,\r\n hostLanguage,\r\n hostName: _hostName,\r\n hostSDKVersion: SDKVersion,\r\n hostTheme: theme\r\n }));\r\n }\r\n};\r\n\r\nvar getDeviceInfo = {\r\n returnValue: function (result) {\r\n const { brand, model } = result;\r\n const deviceType = getGetDeviceType(result, model);\r\n const deviceBrand = getDeviceBrand(brand);\r\n useDeviceId(result);\r\n\r\n result = sortObject(Object.assign(result, {\r\n deviceType,\r\n deviceBrand,\r\n deviceModel: model\r\n }));\r\n }\r\n};\r\n\r\nvar getWindowInfo = {\r\n returnValue: function (result) {\r\n addSafeAreaInsets(result);\r\n\r\n result = sortObject(Object.assign(result, {\r\n windowTop: 0,\r\n windowBottom: 0\r\n }));\r\n }\r\n};\r\n\r\nvar getAppAuthorizeSetting = {\r\n returnValue: function (result) {\r\n const { locationReducedAccuracy } = result;\r\n\r\n result.locationAccuracy = 'unsupported';\r\n if (locationReducedAccuracy === true) {\r\n result.locationAccuracy = 'reduced';\r\n } else if (locationReducedAccuracy === false) {\r\n result.locationAccuracy = 'full';\r\n }\r\n }\r\n};\r\n\r\n// import navigateTo from 'uni-helpers/navigate-to'\r\n\r\nconst compressImage = {\r\n args (fromArgs) {\r\n // https://developers.weixin.qq.com/community/develop/doc/000c08940c865011298e0a43256800?highLine=compressHeight\r\n if (fromArgs.compressedHeight && !fromArgs.compressHeight) {\r\n fromArgs.compressHeight = fromArgs.compressedHeight;\r\n }\r\n if (fromArgs.compressedWidth && !fromArgs.compressWidth) {\r\n fromArgs.compressWidth = fromArgs.compressedWidth;\r\n }\r\n }\r\n};\r\n\r\nconst protocols = {\r\n redirectTo,\r\n // navigateTo, // 由于在微信开发者工具的页面参数,会显示__id__参数,因此暂时关闭mp-weixin对于navigateTo的AOP\r\n previewImage,\r\n getSystemInfo,\r\n getSystemInfoSync: getSystemInfo,\r\n showActionSheet,\r\n getAppBaseInfo,\r\n getDeviceInfo,\r\n getWindowInfo,\r\n getAppAuthorizeSetting,\r\n compressImage\r\n};\r\nconst todos = [\r\n 'vibrate',\r\n 'preloadPage',\r\n 'unPreloadPage',\r\n 'loadSubPackage'\r\n];\r\nconst canIUses = [];\r\n\r\nconst CALLBACKS = ['success', 'fail', 'cancel', 'complete'];\r\n\r\nfunction processCallback (methodName, method, returnValue) {\r\n return function (res) {\r\n return method(processReturnValue(methodName, res, returnValue))\r\n }\r\n}\r\n\r\nfunction processArgs (methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) {\r\n if (isPlainObject(fromArgs)) { // 一般 api 的参数解析\r\n const toArgs = keepFromArgs === true ? fromArgs : {}; // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值\r\n if (isFn(argsOption)) {\r\n argsOption = argsOption(fromArgs, toArgs) || {};\r\n }\r\n for (const key in fromArgs) {\r\n if (hasOwn(argsOption, key)) {\r\n let keyOption = argsOption[key];\r\n if (isFn(keyOption)) {\r\n keyOption = keyOption(fromArgs[key], fromArgs, toArgs);\r\n }\r\n if (!keyOption) { // 不支持的参数\r\n console.warn(`The '${methodName}' method of platform '微信小程序' does not support option '${key}'`);\r\n } else if (isStr(keyOption)) { // 重写参数 key\r\n toArgs[keyOption] = fromArgs[key];\r\n } else if (isPlainObject(keyOption)) { // {name:newName,value:value}可重新指定参数 key:value\r\n toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;\r\n }\r\n } else if (CALLBACKS.indexOf(key) !== -1) {\r\n if (isFn(fromArgs[key])) {\r\n toArgs[key] = processCallback(methodName, fromArgs[key], returnValue);\r\n }\r\n } else {\r\n if (!keepFromArgs) {\r\n toArgs[key] = fromArgs[key];\r\n }\r\n }\r\n }\r\n return toArgs\r\n } else if (isFn(fromArgs)) {\r\n fromArgs = processCallback(methodName, fromArgs, returnValue);\r\n }\r\n return fromArgs\r\n}\r\n\r\nfunction processReturnValue (methodName, res, returnValue, keepReturnValue = false) {\r\n if (isFn(protocols.returnValue)) { // 处理通用 returnValue\r\n res = protocols.returnValue(methodName, res);\r\n }\r\n return processArgs(methodName, res, returnValue, {}, keepReturnValue)\r\n}\r\n\r\nfunction wrapper (methodName, method) {\r\n if (hasOwn(protocols, methodName)) {\r\n const protocol = protocols[methodName];\r\n if (!protocol) { // 暂不支持的 api\r\n return function () {\r\n console.error(`Platform '微信小程序' does not support '${methodName}'.`);\r\n }\r\n }\r\n return function (arg1, arg2) { // 目前 api 最多两个参数\r\n let options = protocol;\r\n if (isFn(protocol)) {\r\n options = protocol(arg1);\r\n }\r\n\r\n arg1 = processArgs(methodName, arg1, options.args, options.returnValue);\r\n\r\n const args = [arg1];\r\n if (typeof arg2 !== 'undefined') {\r\n args.push(arg2);\r\n }\r\n if (isFn(options.name)) {\r\n methodName = options.name(arg1);\r\n } else if (isStr(options.name)) {\r\n methodName = options.name;\r\n }\r\n const returnValue = wx[methodName].apply(wx, args);\r\n if (isSyncApi(methodName)) { // 同步 api\r\n return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName))\r\n }\r\n return returnValue\r\n }\r\n }\r\n return method\r\n}\r\n\r\nconst todoApis = Object.create(null);\r\n\r\nconst TODOS = [\r\n 'onTabBarMidButtonTap',\r\n 'subscribePush',\r\n 'unsubscribePush',\r\n 'onPush',\r\n 'offPush',\r\n 'share'\r\n];\r\n\r\nfunction createTodoApi (name) {\r\n return function todoApi ({\r\n fail,\r\n complete\r\n }) {\r\n const res = {\r\n errMsg: `${name}:fail method '${name}' not supported`\r\n };\r\n isFn(fail) && fail(res);\r\n isFn(complete) && complete(res);\r\n }\r\n}\r\n\r\nTODOS.forEach(function (name) {\r\n todoApis[name] = createTodoApi(name);\r\n});\r\n\r\nvar providers = {\r\n oauth: ['weixin'],\r\n share: ['weixin'],\r\n payment: ['wxpay'],\r\n push: ['weixin']\r\n};\r\n\r\nfunction getProvider ({\r\n service,\r\n success,\r\n fail,\r\n complete\r\n}) {\r\n let res = false;\r\n if (providers[service]) {\r\n res = {\r\n errMsg: 'getProvider:ok',\r\n service,\r\n provider: providers[service]\r\n };\r\n isFn(success) && success(res);\r\n } else {\r\n res = {\r\n errMsg: 'getProvider:fail service not found'\r\n };\r\n isFn(fail) && fail(res);\r\n }\r\n isFn(complete) && complete(res);\r\n}\r\n\r\nvar extraApi = /*#__PURE__*/Object.freeze({\r\n __proto__: null,\r\n getProvider: getProvider\r\n});\r\n\r\nconst getEmitter = (function () {\r\n let Emitter;\r\n return function getUniEmitter () {\r\n if (!Emitter) {\r\n Emitter = new Vue();\r\n }\r\n return Emitter\r\n }\r\n})();\r\n\r\nfunction apply (ctx, method, args) {\r\n return ctx[method].apply(ctx, args)\r\n}\r\n\r\nfunction $on () {\r\n return apply(getEmitter(), '$on', [...arguments])\r\n}\r\nfunction $off () {\r\n return apply(getEmitter(), '$off', [...arguments])\r\n}\r\nfunction $once () {\r\n return apply(getEmitter(), '$once', [...arguments])\r\n}\r\nfunction $emit () {\r\n return apply(getEmitter(), '$emit', [...arguments])\r\n}\r\n\r\nvar eventApi = /*#__PURE__*/Object.freeze({\r\n __proto__: null,\r\n $on: $on,\r\n $off: $off,\r\n $once: $once,\r\n $emit: $emit\r\n});\r\n\r\n/**\r\n * 框架内 try-catch\r\n */\r\n/**\r\n * 开发者 try-catch\r\n */\r\nfunction tryCatch (fn) {\r\n return function () {\r\n try {\r\n return fn.apply(fn, arguments)\r\n } catch (e) {\r\n // TODO\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction getApiCallbacks (params) {\r\n const apiCallbacks = {};\r\n for (const name in params) {\r\n const param = params[name];\r\n if (isFn(param)) {\r\n apiCallbacks[name] = tryCatch(param);\r\n delete params[name];\r\n }\r\n }\r\n return apiCallbacks\r\n}\r\n\r\nlet cid;\r\nlet cidErrMsg;\r\nlet enabled;\r\n\r\nfunction normalizePushMessage (message) {\r\n try {\r\n return JSON.parse(message)\r\n } catch (e) {}\r\n return message\r\n}\r\n\r\nfunction invokePushCallback (\r\n args\r\n) {\r\n if (args.type === 'enabled') {\r\n enabled = true;\r\n } else if (args.type === 'clientId') {\r\n cid = args.cid;\r\n cidErrMsg = args.errMsg;\r\n invokeGetPushCidCallbacks(cid, args.errMsg);\r\n } else if (args.type === 'pushMsg') {\r\n const message = {\r\n type: 'receive',\r\n data: normalizePushMessage(args.message)\r\n };\r\n for (let i = 0; i < onPushMessageCallbacks.length; i++) {\r\n const callback = onPushMessageCallbacks[i];\r\n callback(message);\r\n // 该消息已被阻止\r\n if (message.stopped) {\r\n break\r\n }\r\n }\r\n } else if (args.type === 'click') {\r\n onPushMessageCallbacks.forEach((callback) => {\r\n callback({\r\n type: 'click',\r\n data: normalizePushMessage(args.message)\r\n });\r\n });\r\n }\r\n}\r\n\r\nconst getPushCidCallbacks = [];\r\n\r\nfunction invokeGetPushCidCallbacks (cid, errMsg) {\r\n getPushCidCallbacks.forEach((callback) => {\r\n callback(cid, errMsg);\r\n });\r\n getPushCidCallbacks.length = 0;\r\n}\r\n\r\nfunction getPushClientId (args) {\r\n if (!isPlainObject(args)) {\r\n args = {};\r\n }\r\n const {\r\n success,\r\n fail,\r\n complete\r\n } = getApiCallbacks(args);\r\n const hasSuccess = isFn(success);\r\n const hasFail = isFn(fail);\r\n const hasComplete = isFn(complete);\r\n\r\n Promise.resolve().then(() => {\r\n if (typeof enabled === 'undefined') {\r\n enabled = false;\r\n cid = '';\r\n cidErrMsg = 'uniPush is not enabled';\r\n }\r\n getPushCidCallbacks.push((cid, errMsg) => {\r\n let res;\r\n if (cid) {\r\n res = {\r\n errMsg: 'getPushClientId:ok',\r\n cid\r\n };\r\n hasSuccess && success(res);\r\n } else {\r\n res = {\r\n errMsg: 'getPushClientId:fail' + (errMsg ? ' ' + errMsg : '')\r\n };\r\n hasFail && fail(res);\r\n }\r\n hasComplete && complete(res);\r\n });\r\n if (typeof cid !== 'undefined') {\r\n invokeGetPushCidCallbacks(cid, cidErrMsg);\r\n }\r\n });\r\n}\r\n\r\nconst onPushMessageCallbacks = [];\r\n// 不使用 defineOnApi 实现,是因为 defineOnApi 依赖 UniServiceJSBridge ,该对象目前在小程序上未提供,故简单实现\r\nconst onPushMessage = (fn) => {\r\n if (onPushMessageCallbacks.indexOf(fn) === -1) {\r\n onPushMessageCallbacks.push(fn);\r\n }\r\n};\r\n\r\nconst offPushMessage = (fn) => {\r\n if (!fn) {\r\n onPushMessageCallbacks.length = 0;\r\n } else {\r\n const index = onPushMessageCallbacks.indexOf(fn);\r\n if (index > -1) {\r\n onPushMessageCallbacks.splice(index, 1);\r\n }\r\n }\r\n};\r\n\r\nlet baseInfo = wx.getAppBaseInfo && wx.getAppBaseInfo();\r\nif (!baseInfo) {\r\n baseInfo = wx.getSystemInfoSync();\r\n}\r\nconst host = baseInfo ? baseInfo.host : null;\r\nconst shareVideoMessage =\r\n host && host.env === 'SAAASDK' ? wx.miniapp.shareVideoMessage : wx.shareVideoMessage;\r\n\r\nvar api = /*#__PURE__*/Object.freeze({\r\n __proto__: null,\r\n shareVideoMessage: shareVideoMessage,\r\n getPushClientId: getPushClientId,\r\n onPushMessage: onPushMessage,\r\n offPushMessage: offPushMessage,\r\n invokePushCallback: invokePushCallback\r\n});\r\n\r\nconst mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__'];\r\n\r\nfunction findVmByVueId (vm, vuePid) {\r\n const $children = vm.$children;\r\n // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200)\r\n for (let i = $children.length - 1; i >= 0; i--) {\r\n const childVm = $children[i];\r\n if (childVm.$scope._$vueId === vuePid) {\r\n return childVm\r\n }\r\n }\r\n // 反向递归查找\r\n let parentVm;\r\n for (let i = $children.length - 1; i >= 0; i--) {\r\n parentVm = findVmByVueId($children[i], vuePid);\r\n if (parentVm) {\r\n return parentVm\r\n }\r\n }\r\n}\r\n\r\nfunction initBehavior (options) {\r\n return Behavior(options)\r\n}\r\n\r\nfunction isPage () {\r\n return !!this.route\r\n}\r\n\r\nfunction initRelation (detail) {\r\n this.triggerEvent('__l', detail);\r\n}\r\n\r\nfunction selectAllComponents (mpInstance, selector, $refs) {\r\n const components = mpInstance.selectAllComponents(selector) || [];\r\n components.forEach(component => {\r\n const ref = component.dataset.ref;\r\n $refs[ref] = component.$vm || toSkip(component);\r\n {\r\n if (component.dataset.vueGeneric === 'scoped') {\r\n component.selectAllComponents('.scoped-ref').forEach(scopedComponent => {\r\n selectAllComponents(scopedComponent, selector, $refs);\r\n });\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction syncRefs (refs, newRefs) {\r\n const oldKeys = new Set(...Object.keys(refs));\r\n const newKeys = Object.keys(newRefs);\r\n newKeys.forEach(key => {\r\n const oldValue = refs[key];\r\n const newValue = newRefs[key];\r\n if (Array.isArray(oldValue) && Array.isArray(newValue) && oldValue.length === newValue.length && newValue.every(value => oldValue.includes(value))) {\r\n return\r\n }\r\n refs[key] = newValue;\r\n oldKeys.delete(key);\r\n });\r\n oldKeys.forEach(key => {\r\n delete refs[key];\r\n });\r\n return refs\r\n}\r\n\r\nfunction initRefs (vm) {\r\n const mpInstance = vm.$scope;\r\n const refs = {};\r\n Object.defineProperty(vm, '$refs', {\r\n get () {\r\n const $refs = {};\r\n selectAllComponents(mpInstance, '.vue-ref', $refs);\r\n // TODO 暂不考虑 for 中的 scoped\r\n const forComponents = mpInstance.selectAllComponents('.vue-ref-in-for') || [];\r\n forComponents.forEach(component => {\r\n const ref = component.dataset.ref;\r\n if (!$refs[ref]) {\r\n $refs[ref] = [];\r\n }\r\n $refs[ref].push(component.$vm || toSkip(component));\r\n });\r\n return syncRefs(refs, $refs)\r\n }\r\n });\r\n}\r\n\r\nfunction handleLink (event) {\r\n const {\r\n vuePid,\r\n vueOptions\r\n } = event.detail || event.value; // detail 是微信,value 是百度(dipatch)\r\n\r\n let parentVm;\r\n\r\n if (vuePid) {\r\n parentVm = findVmByVueId(this.$vm, vuePid);\r\n }\r\n\r\n if (!parentVm) {\r\n parentVm = this.$vm;\r\n }\r\n\r\n vueOptions.parent = parentVm;\r\n}\r\n\r\nfunction markMPComponent (component) {\r\n // 在 Vue 中标记为小程序组件\r\n const IS_MP = '__v_isMPComponent';\r\n Object.defineProperty(component, IS_MP, {\r\n configurable: true,\r\n enumerable: false,\r\n value: true\r\n });\r\n return component\r\n}\r\n\r\nfunction toSkip (obj) {\r\n const OB = '__ob__';\r\n const SKIP = '__v_skip';\r\n if (isObject(obj) && Object.isExtensible(obj)) {\r\n // 避免被 @vue/composition-api 观测\r\n Object.defineProperty(obj, OB, {\r\n configurable: true,\r\n enumerable: false,\r\n value: {\r\n [SKIP]: true\r\n }\r\n });\r\n }\r\n return obj\r\n}\r\n\r\nconst WORKLET_RE = /_(.*)_worklet_factory_/;\r\nfunction initWorkletMethods (mpMethods, vueMethods) {\r\n if (vueMethods) {\r\n Object.keys(vueMethods).forEach((name) => {\r\n const matches = name.match(WORKLET_RE);\r\n if (matches) {\r\n const workletName = matches[1];\r\n mpMethods[name] = vueMethods[name];\r\n mpMethods[workletName] = vueMethods[workletName];\r\n }\r\n });\r\n }\r\n}\r\n\r\nconst MPPage = Page;\r\nconst MPComponent = Component;\r\n\r\nconst customizeRE = /:/g;\r\n\r\nconst customize = cached((str) => {\r\n return camelize(str.replace(customizeRE, '-'))\r\n});\r\n\r\nfunction initTriggerEvent (mpInstance) {\r\n const oldTriggerEvent = mpInstance.triggerEvent;\r\n const newTriggerEvent = function (event, ...args) {\r\n // 事件名统一转驼峰格式,仅处理:当前组件为 vue 组件、当前组件为 vue 组件子组件\r\n if (this.$vm || (this.dataset && this.dataset.comType)) {\r\n event = customize(event);\r\n } else {\r\n // 针对微信/QQ小程序单独补充驼峰格式事件,以兼容历史项目\r\n const newEvent = customize(event);\r\n if (newEvent !== event) {\r\n oldTriggerEvent.apply(this, [newEvent, ...args]);\r\n }\r\n }\r\n return oldTriggerEvent.apply(this, [event, ...args])\r\n };\r\n try {\r\n // 京东小程序 triggerEvent 为只读\r\n mpInstance.triggerEvent = newTriggerEvent;\r\n } catch (error) {\r\n mpInstance._triggerEvent = newTriggerEvent;\r\n }\r\n}\r\n\r\nfunction initHook (name, options, isComponent) {\r\n const oldHook = options[name];\r\n options[name] = function (...args) {\r\n markMPComponent(this);\r\n initTriggerEvent(this);\r\n if (oldHook) {\r\n return oldHook.apply(this, args)\r\n }\r\n };\r\n}\r\nif (!MPPage.__$wrappered) {\r\n MPPage.__$wrappered = true;\r\n Page = function (options = {}) {\r\n initHook('onLoad', options);\r\n return MPPage(options)\r\n };\r\n Page.after = MPPage.after;\r\n\r\n Component = function (options = {}) {\r\n initHook('created', options);\r\n return MPComponent(options)\r\n };\r\n}\r\n\r\nconst PAGE_EVENT_HOOKS = [\r\n 'onPullDownRefresh',\r\n 'onReachBottom',\r\n 'onAddToFavorites',\r\n 'onShareTimeline',\r\n 'onShareAppMessage',\r\n 'onPageScroll',\r\n 'onResize',\r\n 'onTabItemTap'\r\n];\r\n\r\nfunction initMocks (vm, mocks) {\r\n const mpInstance = vm.$mp[vm.mpType];\r\n mocks.forEach(mock => {\r\n if (hasOwn(mpInstance, mock)) {\r\n vm[mock] = mpInstance[mock];\r\n }\r\n });\r\n}\r\n\r\nfunction hasHook (hook, vueOptions) {\r\n if (!vueOptions) {\r\n return true\r\n }\r\n\r\n if (Vue.options && Array.isArray(Vue.options[hook])) {\r\n return true\r\n }\r\n\r\n vueOptions = vueOptions.default || vueOptions;\r\n\r\n if (isFn(vueOptions)) {\r\n if (isFn(vueOptions.extendOptions[hook])) {\r\n return true\r\n }\r\n if (vueOptions.super &&\r\n vueOptions.super.options &&\r\n Array.isArray(vueOptions.super.options[hook])) {\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n if (isFn(vueOptions[hook]) || Array.isArray(vueOptions[hook])) {\r\n return true\r\n }\r\n const mixins = vueOptions.mixins;\r\n if (Array.isArray(mixins)) {\r\n return !!mixins.find(mixin => hasHook(hook, mixin))\r\n }\r\n}\r\n\r\nfunction initHooks (mpOptions, hooks, vueOptions) {\r\n hooks.forEach(hook => {\r\n if (hasHook(hook, vueOptions)) {\r\n mpOptions[hook] = function (args) {\r\n return this.$vm && this.$vm.__call_hook(hook, args)\r\n };\r\n }\r\n });\r\n}\r\n\r\nfunction initUnknownHooks (mpOptions, vueOptions, excludes = []) {\r\n findHooks(vueOptions).forEach((hook) => initHook$1(mpOptions, hook, excludes));\r\n}\r\n\r\nfunction findHooks (vueOptions, hooks = []) {\r\n if (vueOptions) {\r\n Object.keys(vueOptions).forEach((name) => {\r\n if (name.indexOf('on') === 0 && isFn(vueOptions[name])) {\r\n hooks.push(name);\r\n }\r\n });\r\n }\r\n return hooks\r\n}\r\n\r\nfunction initHook$1 (mpOptions, hook, excludes) {\r\n if (excludes.indexOf(hook) === -1 && !hasOwn(mpOptions, hook)) {\r\n mpOptions[hook] = function (args) {\r\n return this.$vm && this.$vm.__call_hook(hook, args)\r\n };\r\n }\r\n}\r\n\r\nfunction initVueComponent (Vue, vueOptions) {\r\n vueOptions = vueOptions.default || vueOptions;\r\n let VueComponent;\r\n if (isFn(vueOptions)) {\r\n VueComponent = vueOptions;\r\n } else {\r\n VueComponent = Vue.extend(vueOptions);\r\n }\r\n vueOptions = VueComponent.options;\r\n return [VueComponent, vueOptions]\r\n}\r\n\r\nfunction initSlots (vm, vueSlots) {\r\n if (Array.isArray(vueSlots) && vueSlots.length) {\r\n const $slots = Object.create(null);\r\n vueSlots.forEach(slotName => {\r\n $slots[slotName] = true;\r\n });\r\n vm.$scopedSlots = vm.$slots = $slots;\r\n }\r\n}\r\n\r\nfunction initVueIds (vueIds, mpInstance) {\r\n vueIds = (vueIds || '').split(',');\r\n const len = vueIds.length;\r\n\r\n if (len === 1) {\r\n mpInstance._$vueId = vueIds[0];\r\n } else if (len === 2) {\r\n mpInstance._$vueId = vueIds[0];\r\n mpInstance._$vuePid = vueIds[1];\r\n }\r\n}\r\n\r\nfunction initData (vueOptions, context) {\r\n let data = vueOptions.data || {};\r\n const methods = vueOptions.methods || {};\r\n\r\n if (typeof data === 'function') {\r\n try {\r\n data = data.call(context); // 支持 Vue.prototype 上挂的数据\r\n } catch (e) {\r\n if (process.env.VUE_APP_DEBUG) {\r\n console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data);\r\n }\r\n }\r\n } else {\r\n try {\r\n // 对 data 格式化\r\n data = JSON.parse(JSON.stringify(data));\r\n } catch (e) { }\r\n }\r\n\r\n if (!isPlainObject(data)) {\r\n data = {};\r\n }\r\n\r\n Object.keys(methods).forEach(methodName => {\r\n if (context.__lifecycle_hooks__.indexOf(methodName) === -1 && !hasOwn(data, methodName)) {\r\n data[methodName] = methods[methodName];\r\n }\r\n });\r\n\r\n return data\r\n}\r\n\r\nconst PROP_TYPES = [String, Number, Boolean, Object, Array, null];\r\n\r\nfunction createObserver (name) {\r\n return function observer (newVal, oldVal) {\r\n if (this.$vm) {\r\n this.$vm[name] = newVal; // 为了触发其他非 render watcher\r\n }\r\n }\r\n}\r\n\r\nfunction initBehaviors (vueOptions, initBehavior) {\r\n const vueBehaviors = vueOptions.behaviors;\r\n const vueExtends = vueOptions.extends;\r\n const vueMixins = vueOptions.mixins;\r\n\r\n let vueProps = vueOptions.props;\r\n\r\n if (!vueProps) {\r\n vueOptions.props = vueProps = [];\r\n }\r\n\r\n const behaviors = [];\r\n if (Array.isArray(vueBehaviors)) {\r\n vueBehaviors.forEach(behavior => {\r\n behaviors.push(behavior.replace('uni://', `${\"wx\"}://`));\r\n if (behavior === 'uni://form-field') {\r\n if (Array.isArray(vueProps)) {\r\n vueProps.push('name');\r\n vueProps.push('value');\r\n } else {\r\n vueProps.name = {\r\n type: String,\r\n default: ''\r\n };\r\n vueProps.value = {\r\n type: [String, Number, Boolean, Array, Object, Date],\r\n default: ''\r\n };\r\n }\r\n }\r\n });\r\n }\r\n if (isPlainObject(vueExtends) && vueExtends.props) {\r\n behaviors.push(\r\n initBehavior({\r\n properties: initProperties(vueExtends.props, true)\r\n })\r\n );\r\n }\r\n if (Array.isArray(vueMixins)) {\r\n vueMixins.forEach(vueMixin => {\r\n if (isPlainObject(vueMixin) && vueMixin.props) {\r\n behaviors.push(\r\n initBehavior({\r\n properties: initProperties(vueMixin.props, true)\r\n })\r\n );\r\n }\r\n });\r\n }\r\n return behaviors\r\n}\r\n\r\nfunction parsePropType (key, type, defaultValue, file) {\r\n // [String]=>String\r\n if (Array.isArray(type) && type.length === 1) {\r\n return type[0]\r\n }\r\n return type\r\n}\r\n\r\nfunction initProperties (props, isBehavior = false, file = '', options) {\r\n const properties = {};\r\n if (!isBehavior) {\r\n properties.vueId = {\r\n type: String,\r\n value: ''\r\n };\r\n {\r\n if ( options.virtualHost) {\r\n properties.virtualHostStyle = {\r\n type: null,\r\n value: ''\r\n };\r\n properties.virtualHostClass = {\r\n type: null,\r\n value: ''\r\n };\r\n }\r\n }\r\n // scopedSlotsCompiler auto\r\n properties.scopedSlotsCompiler = {\r\n type: String,\r\n value: ''\r\n };\r\n properties.vueSlots = { // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots\r\n type: null,\r\n value: [],\r\n observer: function (newVal, oldVal) {\r\n const $slots = Object.create(null);\r\n newVal.forEach(slotName => {\r\n $slots[slotName] = true;\r\n });\r\n this.setData({\r\n $slots\r\n });\r\n }\r\n };\r\n }\r\n if (Array.isArray(props)) { // ['title']\r\n props.forEach(key => {\r\n properties[key] = {\r\n type: null,\r\n observer: createObserver(key)\r\n };\r\n });\r\n } else if (isPlainObject(props)) { // {title:{type:String,default:''},content:String}\r\n Object.keys(props).forEach(key => {\r\n const opts = props[key];\r\n if (isPlainObject(opts)) { // title:{type:String,default:''}\r\n let value = opts.default;\r\n if (isFn(value)) {\r\n value = value();\r\n }\r\n\r\n opts.type = parsePropType(key, opts.type);\r\n\r\n properties[key] = {\r\n type: PROP_TYPES.indexOf(opts.type) !== -1 ? opts.type : null,\r\n value,\r\n observer: createObserver(key)\r\n };\r\n } else { // content:String\r\n const type = parsePropType(key, opts);\r\n properties[key] = {\r\n type: PROP_TYPES.indexOf(type) !== -1 ? type : null,\r\n observer: createObserver(key)\r\n };\r\n }\r\n });\r\n }\r\n return properties\r\n}\r\n\r\nfunction wrapper$1 (event) {\r\n // TODO 又得兼容 mpvue 的 mp 对象\r\n try {\r\n event.mp = JSON.parse(JSON.stringify(event));\r\n } catch (e) { }\r\n\r\n event.stopPropagation = noop;\r\n event.preventDefault = noop;\r\n\r\n event.target = event.target || {};\r\n\r\n if (!hasOwn(event, 'detail')) {\r\n event.detail = {};\r\n }\r\n\r\n if (hasOwn(event, 'markerId')) {\r\n event.detail = typeof event.detail === 'object' ? event.detail : {};\r\n event.detail.markerId = event.markerId;\r\n }\r\n\r\n if (isPlainObject(event.detail)) {\r\n event.target = Object.assign({}, event.target, event.detail);\r\n }\r\n\r\n return event\r\n}\r\n\r\nfunction getExtraValue (vm, dataPathsArray) {\r\n let context = vm;\r\n dataPathsArray.forEach(dataPathArray => {\r\n const dataPath = dataPathArray[0];\r\n const value = dataPathArray[2];\r\n if (dataPath || typeof value !== 'undefined') { // ['','',index,'disable']\r\n const propPath = dataPathArray[1];\r\n const valuePath = dataPathArray[3];\r\n\r\n let vFor;\r\n if (Number.isInteger(dataPath)) {\r\n vFor = dataPath;\r\n } else if (!dataPath) {\r\n vFor = context;\r\n } else if (typeof dataPath === 'string' && dataPath) {\r\n if (dataPath.indexOf('#s#') === 0) {\r\n vFor = dataPath.substr(3);\r\n } else {\r\n vFor = vm.__get_value(dataPath, context);\r\n }\r\n }\r\n\r\n if (Number.isInteger(vFor)) {\r\n context = value;\r\n } else if (!propPath) {\r\n context = vFor[value];\r\n } else {\r\n if (Array.isArray(vFor)) {\r\n context = vFor.find(vForItem => {\r\n return vm.__get_value(propPath, vForItem) === value\r\n });\r\n } else if (isPlainObject(vFor)) {\r\n context = Object.keys(vFor).find(vForKey => {\r\n return vm.__get_value(propPath, vFor[vForKey]) === value\r\n });\r\n } else {\r\n console.error('v-for 暂不支持循环数据:', vFor);\r\n }\r\n }\r\n\r\n if (valuePath) {\r\n context = vm.__get_value(valuePath, context);\r\n }\r\n }\r\n });\r\n return context\r\n}\r\n\r\nfunction processEventExtra (vm, extra, event, __args__) {\r\n const extraObj = {};\r\n\r\n if (Array.isArray(extra) && extra.length) {\r\n /**\r\n *[\r\n * ['data.items', 'data.id', item.data.id],\r\n * ['metas', 'id', meta.id]\r\n *],\r\n *[\r\n * ['data.items', 'data.id', item.data.id],\r\n * ['metas', 'id', meta.id]\r\n *],\r\n *'test'\r\n */\r\n extra.forEach((dataPath, index) => {\r\n if (typeof dataPath === 'string') {\r\n if (!dataPath) { // model,prop.sync\r\n extraObj['$' + index] = vm;\r\n } else {\r\n if (dataPath === '$event') { // $event\r\n extraObj['$' + index] = event;\r\n } else if (dataPath === 'arguments') {\r\n extraObj['$' + index] = event.detail ? event.detail.__args__ || __args__ : __args__;\r\n } else if (dataPath.indexOf('$event.') === 0) { // $event.target.value\r\n extraObj['$' + index] = vm.__get_value(dataPath.replace('$event.', ''), event);\r\n } else {\r\n extraObj['$' + index] = vm.__get_value(dataPath);\r\n }\r\n }\r\n } else {\r\n extraObj['$' + index] = getExtraValue(vm, dataPath);\r\n }\r\n });\r\n }\r\n\r\n return extraObj\r\n}\r\n\r\nfunction getObjByArray (arr) {\r\n const obj = {};\r\n for (let i = 1; i < arr.length; i++) {\r\n const element = arr[i];\r\n obj[element[0]] = element[1];\r\n }\r\n return obj\r\n}\r\n\r\nfunction processEventArgs (vm, event, args = [], extra = [], isCustom, methodName) {\r\n let isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象\r\n\r\n // fixed 用户直接触发 mpInstance.triggerEvent\r\n const __args__ = isPlainObject(event.detail)\r\n ? event.detail.__args__ || [event.detail]\r\n : [event.detail];\r\n\r\n if (isCustom) { // 自定义事件\r\n isCustomMPEvent = event.currentTarget &&\r\n event.currentTarget.dataset &&\r\n event.currentTarget.dataset.comType === 'wx';\r\n if (!args.length) { // 无参数,直接传入 event 或 detail 数组\r\n if (isCustomMPEvent) {\r\n return [event]\r\n }\r\n return __args__\r\n }\r\n }\r\n\r\n const extraObj = processEventExtra(vm, extra, event, __args__);\r\n\r\n const ret = [];\r\n args.forEach(arg => {\r\n if (arg === '$event') {\r\n if (methodName === '__set_model' && !isCustom) { // input v-model value\r\n ret.push(event.target.value);\r\n } else {\r\n if (isCustom && !isCustomMPEvent) {\r\n ret.push(__args__[0]);\r\n } else { // wxcomponent 组件或内置组件\r\n ret.push(event);\r\n }\r\n }\r\n } else {\r\n if (Array.isArray(arg) && arg[0] === 'o') {\r\n ret.push(getObjByArray(arg));\r\n } else if (typeof arg === 'string' && hasOwn(extraObj, arg)) {\r\n ret.push(extraObj[arg]);\r\n } else {\r\n ret.push(arg);\r\n }\r\n }\r\n });\r\n\r\n return ret\r\n}\r\n\r\nconst ONCE = '~';\r\nconst CUSTOM = '^';\r\n\r\nfunction isMatchEventType (eventType, optType) {\r\n return (eventType === optType) ||\r\n (\r\n optType === 'regionchange' &&\r\n (\r\n eventType === 'begin' ||\r\n eventType === 'end'\r\n )\r\n )\r\n}\r\n\r\nfunction getContextVm (vm) {\r\n let $parent = vm.$parent;\r\n // 父组件是 scoped slots 或者其他自定义组件时继续查找\r\n while ($parent && $parent.$parent && ($parent.$options.generic || $parent.$parent.$options.generic || $parent.$scope._$vuePid)) {\r\n $parent = $parent.$parent;\r\n }\r\n return $parent && $parent.$parent\r\n}\r\n\r\nfunction handleEvent (event) {\r\n event = wrapper$1(event);\r\n\r\n // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]]\r\n const dataset = (event.currentTarget || event.target).dataset;\r\n if (!dataset) {\r\n return console.warn('事件信息不存在')\r\n }\r\n const eventOpts = dataset.eventOpts || dataset['event-opts']; // 支付宝 web-view 组件 dataset 非驼峰\r\n if (!eventOpts) {\r\n return console.warn('事件信息不存在')\r\n }\r\n\r\n // [['handle',[1,2,a]],['handle1',[1,2,a]]]\r\n const eventType = event.type;\r\n\r\n const ret = [];\r\n\r\n eventOpts.forEach(eventOpt => {\r\n let type = eventOpt[0];\r\n const eventsArray = eventOpt[1];\r\n\r\n const isCustom = type.charAt(0) === CUSTOM;\r\n type = isCustom ? type.slice(1) : type;\r\n const isOnce = type.charAt(0) === ONCE;\r\n type = isOnce ? type.slice(1) : type;\r\n\r\n if (eventsArray && isMatchEventType(eventType, type)) {\r\n eventsArray.forEach(eventArray => {\r\n const methodName = eventArray[0];\r\n if (methodName) {\r\n let handlerCtx = this.$vm;\r\n if (handlerCtx.$options.generic) { // mp-weixin,mp-toutiao 抽象节点模拟 scoped slots\r\n handlerCtx = getContextVm(handlerCtx) || handlerCtx;\r\n }\r\n if (methodName === '$emit') {\r\n handlerCtx.$emit.apply(handlerCtx,\r\n processEventArgs(\r\n this.$vm,\r\n event,\r\n eventArray[1],\r\n eventArray[2],\r\n isCustom,\r\n methodName\r\n ));\r\n return\r\n }\r\n const handler = handlerCtx[methodName];\r\n if (!isFn(handler)) {\r\n const type = this.$vm.mpType === 'page' ? 'Page' : 'Component';\r\n const path = this.route || this.is;\r\n throw new Error(`${type} \"${path}\" does not have a method \"${methodName}\"`)\r\n }\r\n if (isOnce) {\r\n if (handler.once) {\r\n return\r\n }\r\n handler.once = true;\r\n }\r\n let params = processEventArgs(\r\n this.$vm,\r\n event,\r\n eventArray[1],\r\n eventArray[2],\r\n isCustom,\r\n methodName\r\n );\r\n params = Array.isArray(params) ? params : [];\r\n // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据\r\n if (/=\\s*\\S+\\.eventParams\\s*\\|\\|\\s*\\S+\\[['\"]event-params['\"]\\]/.test(handler.toString())) {\r\n // eslint-disable-next-line no-sparse-arrays\r\n params = params.concat([, , , , , , , , , , event]);\r\n }\r\n ret.push(handler.apply(handlerCtx, params));\r\n }\r\n });\r\n }\r\n });\r\n\r\n if (\r\n eventType === 'input' &&\r\n ret.length === 1 &&\r\n typeof ret[0] !== 'undefined'\r\n ) {\r\n return ret[0]\r\n }\r\n}\r\n\r\nconst eventChannels = {};\r\n\r\nfunction getEventChannel (id) {\r\n const eventChannel = eventChannels[id];\r\n delete eventChannels[id];\r\n return eventChannel\r\n}\r\n\r\nconst hooks = [\r\n 'onShow',\r\n 'onHide',\r\n 'onError',\r\n 'onPageNotFound',\r\n 'onThemeChange',\r\n 'onUnhandledRejection'\r\n];\r\n\r\nfunction initEventChannel () {\r\n Vue.prototype.getOpenerEventChannel = function () {\r\n // 微信小程序使用自身getOpenerEventChannel\r\n {\r\n return this.$scope.getOpenerEventChannel()\r\n }\r\n };\r\n const callHook = Vue.prototype.__call_hook;\r\n Vue.prototype.__call_hook = function (hook, args) {\r\n if (hook === 'onLoad' && args && args.__id__) {\r\n this.__eventChannel__ = getEventChannel(args.__id__);\r\n delete args.__id__;\r\n }\r\n return callHook.call(this, hook, args)\r\n };\r\n}\r\n\r\nfunction initScopedSlotsParams () {\r\n const center = {};\r\n const parents = {};\r\n\r\n function currentId (fn) {\r\n const vueIds = this.$options.propsData.vueId;\r\n if (vueIds) {\r\n const vueId = vueIds.split(',')[0];\r\n fn(vueId);\r\n }\r\n }\r\n\r\n Vue.prototype.$hasSSP = function (vueId) {\r\n const slot = center[vueId];\r\n if (!slot) {\r\n parents[vueId] = this;\r\n this.$on('hook:destroyed', () => {\r\n delete parents[vueId];\r\n });\r\n }\r\n return slot\r\n };\r\n\r\n Vue.prototype.$getSSP = function (vueId, name, needAll) {\r\n const slot = center[vueId];\r\n if (slot) {\r\n const params = slot[name] || [];\r\n if (needAll) {\r\n return params\r\n }\r\n return params[0]\r\n }\r\n };\r\n\r\n Vue.prototype.$setSSP = function (name, value) {\r\n let index = 0;\r\n currentId.call(this, vueId => {\r\n const slot = center[vueId];\r\n const params = slot[name] = slot[name] || [];\r\n params.push(value);\r\n index = params.length - 1;\r\n });\r\n return index\r\n };\r\n\r\n Vue.prototype.$initSSP = function () {\r\n currentId.call(this, vueId => {\r\n center[vueId] = {};\r\n });\r\n };\r\n\r\n Vue.prototype.$callSSP = function () {\r\n currentId.call(this, vueId => {\r\n if (parents[vueId]) {\r\n parents[vueId].$forceUpdate();\r\n }\r\n });\r\n };\r\n\r\n Vue.mixin({\r\n destroyed () {\r\n const propsData = this.$options.propsData;\r\n const vueId = propsData && propsData.vueId;\r\n if (vueId) {\r\n delete center[vueId];\r\n delete parents[vueId];\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction parseBaseApp (vm, {\r\n mocks,\r\n initRefs\r\n}) {\r\n initEventChannel();\r\n {\r\n initScopedSlotsParams();\r\n }\r\n if (vm.$options.store) {\r\n Vue.prototype.$store = vm.$options.store;\r\n }\r\n uniIdMixin(Vue);\r\n\r\n Vue.prototype.mpHost = \"mp-weixin\";\r\n\r\n Vue.mixin({\r\n beforeCreate () {\r\n if (!this.$options.mpType) {\r\n return\r\n }\r\n\r\n this.mpType = this.$options.mpType;\r\n\r\n this.$mp = {\r\n data: {},\r\n [this.mpType]: this.$options.mpInstance\r\n };\r\n\r\n this.$scope = this.$options.mpInstance;\r\n\r\n delete this.$options.mpType;\r\n delete this.$options.mpInstance;\r\n if (this.mpType === 'page' && typeof getApp === 'function') { // hack vue-i18n\r\n const app = getApp();\r\n if (app.$vm && app.$vm.$i18n) {\r\n this._i18n = app.$vm.$i18n;\r\n }\r\n }\r\n if (this.mpType !== 'app') {\r\n initRefs(this);\r\n initMocks(this, mocks);\r\n }\r\n }\r\n });\r\n\r\n const appOptions = {\r\n onLaunch (args) {\r\n if (this.$vm) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前\r\n return\r\n }\r\n {\r\n if (wx.canIUse && !wx.canIUse('nextTick')) { // 事实 上2.2.3 即可,简单使用 2.3.0 的 nextTick 判断\r\n console.error('当前微信基础库版本过低,请将 微信开发者工具-详情-项目设置-调试基础库版本 更换为`2.3.0`以上');\r\n }\r\n }\r\n\r\n this.$vm = vm;\r\n\r\n this.$vm.$mp = {\r\n app: this\r\n };\r\n\r\n this.$vm.$scope = this;\r\n // vm 上也挂载 globalData\r\n this.$vm.globalData = this.globalData;\r\n\r\n this.$vm._isMounted = true;\r\n this.$vm.__call_hook('mounted', args);\r\n\r\n this.$vm.__call_hook('onLaunch', args);\r\n }\r\n };\r\n\r\n // 兼容旧版本 globalData\r\n appOptions.globalData = vm.$options.globalData || {};\r\n // 将 methods 中的方法挂在 getApp() 中\r\n const methods = vm.$options.methods;\r\n if (methods) {\r\n Object.keys(methods).forEach(name => {\r\n appOptions[name] = methods[name];\r\n });\r\n }\r\n\r\n initAppLocale(Vue, vm, normalizeLocale(wx.getSystemInfoSync().language) || LOCALE_EN);\r\n\r\n initHooks(appOptions, hooks);\r\n initUnknownHooks(appOptions, vm.$options);\r\n\r\n return appOptions\r\n}\r\n\r\nfunction parseApp (vm) {\r\n return parseBaseApp(vm, {\r\n mocks,\r\n initRefs\r\n })\r\n}\r\n\r\nfunction createApp (vm) {\r\n App(parseApp(vm));\r\n return vm\r\n}\r\n\r\nconst encodeReserveRE = /[!'()*]/g;\r\nconst encodeReserveReplacer = c => '%' + c.charCodeAt(0).toString(16);\r\nconst commaRE = /%2C/g;\r\n\r\n// fixed encodeURIComponent which is more conformant to RFC3986:\r\n// - escapes [!'()*]\r\n// - preserve commas\r\nconst encode = str => encodeURIComponent(str)\r\n .replace(encodeReserveRE, encodeReserveReplacer)\r\n .replace(commaRE, ',');\r\n\r\nfunction stringifyQuery (obj, encodeStr = encode) {\r\n const res = obj ? Object.keys(obj).map(key => {\r\n const val = obj[key];\r\n\r\n if (val === undefined) {\r\n return ''\r\n }\r\n\r\n if (val === null) {\r\n return encodeStr(key)\r\n }\r\n\r\n if (Array.isArray(val)) {\r\n const result = [];\r\n val.forEach(val2 => {\r\n if (val2 === undefined) {\r\n return\r\n }\r\n if (val2 === null) {\r\n result.push(encodeStr(key));\r\n } else {\r\n result.push(encodeStr(key) + '=' + encodeStr(val2));\r\n }\r\n });\r\n return result.join('&')\r\n }\r\n\r\n return encodeStr(key) + '=' + encodeStr(val)\r\n }).filter(x => x.length > 0).join('&') : null;\r\n return res ? `?${res}` : ''\r\n}\r\n\r\nfunction parseBaseComponent (vueComponentOptions, {\r\n isPage,\r\n initRelation\r\n} = {}, needVueOptions) {\r\n const [VueComponent, vueOptions] = initVueComponent(Vue, vueComponentOptions);\r\n\r\n const options = {\r\n multipleSlots: true,\r\n // styleIsolation: 'apply-shared',\r\n addGlobalClass: true,\r\n ...(vueOptions.options || {})\r\n };\r\n\r\n {\r\n // 微信 multipleSlots 部分情况有 bug,导致内容顺序错乱 如 u-list,提供覆盖选项\r\n if (vueOptions['mp-weixin'] && vueOptions['mp-weixin'].options) {\r\n Object.assign(options, vueOptions['mp-weixin'].options);\r\n }\r\n }\r\n\r\n const componentOptions = {\r\n options,\r\n data: initData(vueOptions, Vue.prototype),\r\n behaviors: initBehaviors(vueOptions, initBehavior),\r\n properties: initProperties(vueOptions.props, false, vueOptions.__file, options),\r\n lifetimes: {\r\n attached () {\r\n const properties = this.properties;\r\n\r\n const options = {\r\n mpType: isPage.call(this) ? 'page' : 'component',\r\n mpInstance: this,\r\n propsData: properties\r\n };\r\n\r\n initVueIds(properties.vueId, this);\r\n\r\n // 处理父子关系\r\n initRelation.call(this, {\r\n vuePid: this._$vuePid,\r\n vueOptions: options\r\n });\r\n\r\n // 初始化 vue 实例\r\n this.$vm = new VueComponent(options);\r\n\r\n // 处理$slots,$scopedSlots(暂不支持动态变化$slots)\r\n initSlots(this.$vm, properties.vueSlots);\r\n\r\n // 触发首次 setData\r\n this.$vm.$mount();\r\n },\r\n ready () {\r\n // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发\r\n // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800\r\n if (this.$vm) {\r\n this.$vm._isMounted = true;\r\n this.$vm.__call_hook('mounted');\r\n this.$vm.__call_hook('onReady');\r\n }\r\n },\r\n detached () {\r\n this.$vm && this.$vm.$destroy();\r\n }\r\n },\r\n pageLifetimes: {\r\n show (args) {\r\n this.$vm && this.$vm.__call_hook('onPageShow', args);\r\n },\r\n hide () {\r\n this.$vm && this.$vm.__call_hook('onPageHide');\r\n },\r\n resize (size) {\r\n this.$vm && this.$vm.__call_hook('onPageResize', size);\r\n }\r\n },\r\n methods: {\r\n __l: handleLink,\r\n __e: handleEvent\r\n }\r\n };\r\n // externalClasses\r\n if (vueOptions.externalClasses) {\r\n componentOptions.externalClasses = vueOptions.externalClasses;\r\n }\r\n\r\n if (Array.isArray(vueOptions.wxsCallMethods)) {\r\n vueOptions.wxsCallMethods.forEach(callMethod => {\r\n componentOptions.methods[callMethod] = function (args) {\r\n return this.$vm[callMethod](args)\r\n };\r\n });\r\n }\r\n\r\n if (needVueOptions) {\r\n return [componentOptions, vueOptions, VueComponent]\r\n }\r\n if (isPage) {\r\n return componentOptions\r\n }\r\n return [componentOptions, VueComponent]\r\n}\r\n\r\nfunction parseComponent (vueComponentOptions, needVueOptions) {\r\n return parseBaseComponent(vueComponentOptions, {\r\n isPage,\r\n initRelation\r\n }, needVueOptions)\r\n}\r\n\r\nconst hooks$1 = [\r\n 'onShow',\r\n 'onHide',\r\n 'onUnload'\r\n];\r\n\r\nhooks$1.push(...PAGE_EVENT_HOOKS);\r\n\r\nfunction parseBasePage (vuePageOptions) {\r\n const [pageOptions, vueOptions] = parseComponent(vuePageOptions, true);\r\n\r\n initHooks(pageOptions.methods, hooks$1, vueOptions);\r\n\r\n pageOptions.methods.onLoad = function (query) {\r\n this.options = query;\r\n const copyQuery = Object.assign({}, query);\r\n delete copyQuery.__id__;\r\n this.$page = {\r\n fullPath: '/' + (this.route || this.is) + stringifyQuery(copyQuery)\r\n };\r\n this.$vm.$mp.query = query; // 兼容 mpvue\r\n this.$vm.__call_hook('onLoad', query);\r\n };\r\n {\r\n initUnknownHooks(pageOptions.methods, vuePageOptions, ['onReady']);\r\n }\r\n {\r\n initWorkletMethods(pageOptions.methods, vueOptions.methods);\r\n }\r\n\r\n return pageOptions\r\n}\r\n\r\nfunction parsePage (vuePageOptions) {\r\n return parseBasePage(vuePageOptions)\r\n}\r\n\r\nfunction createPage (vuePageOptions) {\r\n {\r\n return Component(parsePage(vuePageOptions))\r\n }\r\n}\r\n\r\nfunction createComponent (vueOptions) {\r\n {\r\n return Component(parseComponent(vueOptions))\r\n }\r\n}\r\n\r\nfunction createSubpackageApp (vm) {\r\n const appOptions = parseApp(vm);\r\n const app = getApp({\r\n allowDefault: true\r\n });\r\n vm.$scope = app;\r\n const globalData = app.globalData;\r\n if (globalData) {\r\n Object.keys(appOptions.globalData).forEach(name => {\r\n if (!hasOwn(globalData, name)) {\r\n globalData[name] = appOptions.globalData[name];\r\n }\r\n });\r\n }\r\n Object.keys(appOptions).forEach(name => {\r\n if (!hasOwn(app, name)) {\r\n app[name] = appOptions[name];\r\n }\r\n });\r\n if (isFn(appOptions.onShow) && wx.onAppShow) {\r\n wx.onAppShow((...args) => {\r\n vm.__call_hook('onShow', args);\r\n });\r\n }\r\n if (isFn(appOptions.onHide) && wx.onAppHide) {\r\n wx.onAppHide((...args) => {\r\n vm.__call_hook('onHide', args);\r\n });\r\n }\r\n if (isFn(appOptions.onLaunch)) {\r\n const args = wx.getLaunchOptionsSync && wx.getLaunchOptionsSync();\r\n vm.__call_hook('onLaunch', args);\r\n }\r\n return vm\r\n}\r\n\r\nfunction createPlugin (vm) {\r\n const appOptions = parseApp(vm);\r\n if (isFn(appOptions.onShow) && wx.onAppShow) {\r\n wx.onAppShow((...args) => {\r\n vm.__call_hook('onShow', args);\r\n });\r\n }\r\n if (isFn(appOptions.onHide) && wx.onAppHide) {\r\n wx.onAppHide((...args) => {\r\n vm.__call_hook('onHide', args);\r\n });\r\n }\r\n if (isFn(appOptions.onLaunch)) {\r\n const args = wx.getLaunchOptionsSync && wx.getLaunchOptionsSync();\r\n vm.__call_hook('onLaunch', args);\r\n }\r\n return vm\r\n}\r\n\r\ntodos.forEach(todoApi => {\r\n protocols[todoApi] = false;\r\n});\r\n\r\ncanIUses.forEach(canIUseApi => {\r\n const apiName = protocols[canIUseApi] && protocols[canIUseApi].name ? protocols[canIUseApi].name\r\n : canIUseApi;\r\n if (!wx.canIUse(apiName)) {\r\n protocols[canIUseApi] = false;\r\n }\r\n});\r\n\r\nlet uni = {};\r\n\r\nif (typeof Proxy !== 'undefined' && \"mp-weixin\" !== 'app-plus') {\r\n uni = new Proxy({}, {\r\n get (target, name) {\r\n if (hasOwn(target, name)) {\r\n return target[name]\r\n }\r\n if (baseApi[name]) {\r\n return baseApi[name]\r\n }\r\n if (api[name]) {\r\n return promisify(name, api[name])\r\n }\r\n {\r\n if (extraApi[name]) {\r\n return promisify(name, extraApi[name])\r\n }\r\n if (todoApis[name]) {\r\n return promisify(name, todoApis[name])\r\n }\r\n }\r\n if (eventApi[name]) {\r\n return eventApi[name]\r\n }\r\n return promisify(name, wrapper(name, wx[name]))\r\n },\r\n set (target, name, value) {\r\n target[name] = value;\r\n return true\r\n }\r\n });\r\n} else {\r\n Object.keys(baseApi).forEach(name => {\r\n uni[name] = baseApi[name];\r\n });\r\n\r\n {\r\n Object.keys(todoApis).forEach(name => {\r\n uni[name] = promisify(name, todoApis[name]);\r\n });\r\n Object.keys(extraApi).forEach(name => {\r\n uni[name] = promisify(name, extraApi[name]);\r\n });\r\n }\r\n\r\n Object.keys(eventApi).forEach(name => {\r\n uni[name] = eventApi[name];\r\n });\r\n\r\n Object.keys(api).forEach(name => {\r\n uni[name] = promisify(name, api[name]);\r\n });\r\n\r\n Object.keys(wx).forEach(name => {\r\n if (hasOwn(wx, name) || hasOwn(protocols, name)) {\r\n uni[name] = promisify(name, wrapper(name, wx[name]));\r\n }\r\n });\r\n}\r\n\r\nwx.createApp = createApp;\r\nwx.createPage = createPage;\r\nwx.createComponent = createComponent;\r\nwx.createSubpackageApp = createSubpackageApp;\r\nwx.createPlugin = createPlugin;\r\n\r\nvar uni$1 = uni;\r\n\r\nexport default uni$1;\r\nexport { createApp, createComponent, createPage, createPlugin, createSubpackageApp };\r\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (null != _i) {\n var _s,\n _e,\n _x,\n _r,\n _arr = [],\n _n = !0,\n _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) {\n ;\n }\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}\nmodule.exports = _toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nmodule.exports = _toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct.bind(), module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n }\n return _construct.apply(null, arguments);\n}\nmodule.exports = _construct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nmodule.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","const isObject = (val) => val !== null && typeof val === 'object';\nconst defaultDelimiters = ['{', '}'];\nclass BaseFormatter {\n constructor() {\n this._caches = Object.create(null);\n }\n interpolate(message, values, delimiters = defaultDelimiters) {\n if (!values) {\n return [message];\n }\n let tokens = this._caches[message];\n if (!tokens) {\n tokens = parse(message, delimiters);\n this._caches[message] = tokens;\n }\n return compile(tokens, values);\n }\n}\nconst RE_TOKEN_LIST_VALUE = /^(?:\\d)+/;\nconst RE_TOKEN_NAMED_VALUE = /^(?:\\w)+/;\nfunction parse(format, [startDelimiter, endDelimiter]) {\n const tokens = [];\n let position = 0;\n let text = '';\n while (position < format.length) {\n let char = format[position++];\n if (char === startDelimiter) {\n if (text) {\n tokens.push({ type: 'text', value: text });\n }\n text = '';\n let sub = '';\n char = format[position++];\n while (char !== undefined && char !== endDelimiter) {\n sub += char;\n char = format[position++];\n }\n const isClosed = char === endDelimiter;\n const type = RE_TOKEN_LIST_VALUE.test(sub)\n ? 'list'\n : isClosed && RE_TOKEN_NAMED_VALUE.test(sub)\n ? 'named'\n : 'unknown';\n tokens.push({ value: sub, type });\n }\n // else if (char === '%') {\n // // when found rails i18n syntax, skip text capture\n // if (format[position] !== '{') {\n // text += char\n // }\n // }\n else {\n text += char;\n }\n }\n text && tokens.push({ type: 'text', value: text });\n return tokens;\n}\nfunction compile(tokens, values) {\n const compiled = [];\n let index = 0;\n const mode = Array.isArray(values)\n ? 'list'\n : isObject(values)\n ? 'named'\n : 'unknown';\n if (mode === 'unknown') {\n return compiled;\n }\n while (index < tokens.length) {\n const token = tokens[index];\n switch (token.type) {\n case 'text':\n compiled.push(token.value);\n break;\n case 'list':\n compiled.push(values[parseInt(token.value, 10)]);\n break;\n case 'named':\n if (mode === 'named') {\n compiled.push(values[token.value]);\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Type of token '${token.type}' and format of value '${mode}' don't match!`);\n }\n }\n break;\n case 'unknown':\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Detect 'unknown' type of token!`);\n }\n break;\n }\n index++;\n }\n return compiled;\n}\n\nconst LOCALE_ZH_HANS = 'zh-Hans';\nconst LOCALE_ZH_HANT = 'zh-Hant';\nconst LOCALE_EN = 'en';\nconst LOCALE_FR = 'fr';\nconst LOCALE_ES = 'es';\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst defaultFormatter = new BaseFormatter();\nfunction include(str, parts) {\n return !!parts.find((part) => str.indexOf(part) !== -1);\n}\nfunction startsWith(str, parts) {\n return parts.find((part) => str.indexOf(part) === 0);\n}\nfunction normalizeLocale(locale, messages) {\n if (!locale) {\n return;\n }\n locale = locale.trim().replace(/_/g, '-');\n if (messages && messages[locale]) {\n return locale;\n }\n locale = locale.toLowerCase();\n if (locale === 'chinese') {\n // 支付宝\n return LOCALE_ZH_HANS;\n }\n if (locale.indexOf('zh') === 0) {\n if (locale.indexOf('-hans') > -1) {\n return LOCALE_ZH_HANS;\n }\n if (locale.indexOf('-hant') > -1) {\n return LOCALE_ZH_HANT;\n }\n if (include(locale, ['-tw', '-hk', '-mo', '-cht'])) {\n return LOCALE_ZH_HANT;\n }\n return LOCALE_ZH_HANS;\n }\n let locales = [LOCALE_EN, LOCALE_FR, LOCALE_ES];\n if (messages && Object.keys(messages).length > 0) {\n locales = Object.keys(messages);\n }\n const lang = startsWith(locale, locales);\n if (lang) {\n return lang;\n }\n}\nclass I18n {\n constructor({ locale, fallbackLocale, messages, watcher, formater, }) {\n this.locale = LOCALE_EN;\n this.fallbackLocale = LOCALE_EN;\n this.message = {};\n this.messages = {};\n this.watchers = [];\n if (fallbackLocale) {\n this.fallbackLocale = fallbackLocale;\n }\n this.formater = formater || defaultFormatter;\n this.messages = messages || {};\n this.setLocale(locale || LOCALE_EN);\n if (watcher) {\n this.watchLocale(watcher);\n }\n }\n setLocale(locale) {\n const oldLocale = this.locale;\n this.locale = normalizeLocale(locale, this.messages) || this.fallbackLocale;\n if (!this.messages[this.locale]) {\n // 可能初始化时不存在\n this.messages[this.locale] = {};\n }\n this.message = this.messages[this.locale];\n // 仅发生变化时,通知\n if (oldLocale !== this.locale) {\n this.watchers.forEach((watcher) => {\n watcher(this.locale, oldLocale);\n });\n }\n }\n getLocale() {\n return this.locale;\n }\n watchLocale(fn) {\n const index = this.watchers.push(fn) - 1;\n return () => {\n this.watchers.splice(index, 1);\n };\n }\n add(locale, message, override = true) {\n const curMessages = this.messages[locale];\n if (curMessages) {\n if (override) {\n Object.assign(curMessages, message);\n }\n else {\n Object.keys(message).forEach((key) => {\n if (!hasOwn(curMessages, key)) {\n curMessages[key] = message[key];\n }\n });\n }\n }\n else {\n this.messages[locale] = message;\n }\n }\n f(message, values, delimiters) {\n return this.formater.interpolate(message, values, delimiters).join('');\n }\n t(key, locale, values) {\n let message = this.message;\n if (typeof locale === 'string') {\n locale = normalizeLocale(locale, this.messages);\n locale && (message = this.messages[locale]);\n }\n else {\n values = locale;\n }\n if (!hasOwn(message, key)) {\n console.warn(`Cannot translate the value of keypath ${key}. Use the value of keypath as default.`);\n return key;\n }\n return this.formater.interpolate(message[key], values).join('');\n }\n}\n\nfunction watchAppLocale(appVm, i18n) {\n // 需要保证 watch 的触发在组件渲染之前\n if (appVm.$watchLocale) {\n // vue2\n appVm.$watchLocale((newLocale) => {\n i18n.setLocale(newLocale);\n });\n }\n else {\n appVm.$watch(() => appVm.$locale, (newLocale) => {\n i18n.setLocale(newLocale);\n });\n }\n}\nfunction getDefaultLocale() {\n if (typeof uni !== 'undefined' && uni.getLocale) {\n return uni.getLocale();\n }\n // 小程序平台,uni 和 uni-i18n 互相引用,导致访问不到 uni,故在 global 上挂了 getLocale\n if (typeof global !== 'undefined' && global.getLocale) {\n return global.getLocale();\n }\n return LOCALE_EN;\n}\nfunction initVueI18n(locale, messages = {}, fallbackLocale, watcher) {\n // 兼容旧版本入参\n if (typeof locale !== 'string') {\n [locale, messages] = [\n messages,\n locale,\n ];\n }\n if (typeof locale !== 'string') {\n // 因为小程序平台,uni-i18n 和 uni 互相引用,导致此时访问 uni 时,为 undefined\n locale = getDefaultLocale();\n }\n if (typeof fallbackLocale !== 'string') {\n fallbackLocale =\n (typeof __uniConfig !== 'undefined' && __uniConfig.fallbackLocale) ||\n LOCALE_EN;\n }\n const i18n = new I18n({\n locale,\n fallbackLocale,\n messages,\n watcher,\n });\n let t = (key, values) => {\n if (typeof getApp !== 'function') {\n // app view\n /* eslint-disable no-func-assign */\n t = function (key, values) {\n return i18n.t(key, values);\n };\n }\n else {\n let isWatchedAppLocale = false;\n t = function (key, values) {\n const appVm = getApp().$vm;\n // 可能$vm还不存在,比如在支付宝小程序中,组件定义较早,在props的default里使用了t()函数(如uni-goods-nav),此时app还未初始化\n // options: {\n // \ttype: Array,\n // \tdefault () {\n // \t\treturn [{\n // \t\t\ticon: 'shop',\n // \t\t\ttext: t(\"uni-goods-nav.options.shop\"),\n // \t\t}, {\n // \t\t\ticon: 'cart',\n // \t\t\ttext: t(\"uni-goods-nav.options.cart\")\n // \t\t}]\n // \t}\n // },\n if (appVm) {\n // 触发响应式\n appVm.$locale;\n if (!isWatchedAppLocale) {\n isWatchedAppLocale = true;\n watchAppLocale(appVm, i18n);\n }\n }\n return i18n.t(key, values);\n };\n }\n return t(key, values);\n };\n return {\n i18n,\n f(message, values, delimiters) {\n return i18n.f(message, values, delimiters);\n },\n t(key, values) {\n return t(key, values);\n },\n add(locale, message, override = true) {\n return i18n.add(locale, message, override);\n },\n watch(fn) {\n return i18n.watchLocale(fn);\n },\n getLocale() {\n return i18n.getLocale();\n },\n setLocale(newLocale) {\n return i18n.setLocale(newLocale);\n },\n };\n}\n\nconst isString = (val) => typeof val === 'string';\nlet formater;\nfunction hasI18nJson(jsonObj, delimiters) {\n if (!formater) {\n formater = new BaseFormatter();\n }\n return walkJsonObj(jsonObj, (jsonObj, key) => {\n const value = jsonObj[key];\n if (isString(value)) {\n if (isI18nStr(value, delimiters)) {\n return true;\n }\n }\n else {\n return hasI18nJson(value, delimiters);\n }\n });\n}\nfunction parseI18nJson(jsonObj, values, delimiters) {\n if (!formater) {\n formater = new BaseFormatter();\n }\n walkJsonObj(jsonObj, (jsonObj, key) => {\n const value = jsonObj[key];\n if (isString(value)) {\n if (isI18nStr(value, delimiters)) {\n jsonObj[key] = compileStr(value, values, delimiters);\n }\n }\n else {\n parseI18nJson(value, values, delimiters);\n }\n });\n return jsonObj;\n}\nfunction compileI18nJsonStr(jsonStr, { locale, locales, delimiters, }) {\n if (!isI18nStr(jsonStr, delimiters)) {\n return jsonStr;\n }\n if (!formater) {\n formater = new BaseFormatter();\n }\n const localeValues = [];\n Object.keys(locales).forEach((name) => {\n if (name !== locale) {\n localeValues.push({\n locale: name,\n values: locales[name],\n });\n }\n });\n localeValues.unshift({ locale, values: locales[locale] });\n try {\n return JSON.stringify(compileJsonObj(JSON.parse(jsonStr), localeValues, delimiters), null, 2);\n }\n catch (e) { }\n return jsonStr;\n}\nfunction isI18nStr(value, delimiters) {\n return value.indexOf(delimiters[0]) > -1;\n}\nfunction compileStr(value, values, delimiters) {\n return formater.interpolate(value, values, delimiters).join('');\n}\nfunction compileValue(jsonObj, key, localeValues, delimiters) {\n const value = jsonObj[key];\n if (isString(value)) {\n // 存在国际化\n if (isI18nStr(value, delimiters)) {\n jsonObj[key] = compileStr(value, localeValues[0].values, delimiters);\n if (localeValues.length > 1) {\n // 格式化国际化语言\n const valueLocales = (jsonObj[key + 'Locales'] = {});\n localeValues.forEach((localValue) => {\n valueLocales[localValue.locale] = compileStr(value, localValue.values, delimiters);\n });\n }\n }\n }\n else {\n compileJsonObj(value, localeValues, delimiters);\n }\n}\nfunction compileJsonObj(jsonObj, localeValues, delimiters) {\n walkJsonObj(jsonObj, (jsonObj, key) => {\n compileValue(jsonObj, key, localeValues, delimiters);\n });\n return jsonObj;\n}\nfunction walkJsonObj(jsonObj, walk) {\n if (Array.isArray(jsonObj)) {\n for (let i = 0; i < jsonObj.length; i++) {\n if (walk(jsonObj, i)) {\n return true;\n }\n }\n }\n else if (isObject(jsonObj)) {\n for (const key in jsonObj) {\n if (walk(jsonObj, key)) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction resolveLocale(locales) {\n return (locale) => {\n if (!locale) {\n return locale;\n }\n locale = normalizeLocale(locale) || locale;\n return resolveLocaleChain(locale).find((locale) => locales.indexOf(locale) > -1);\n };\n}\nfunction resolveLocaleChain(locale) {\n const chain = [];\n const tokens = locale.split('-');\n while (tokens.length) {\n chain.push(tokens.join('-'));\n tokens.pop();\n }\n return chain;\n}\n\nexport { BaseFormatter as Formatter, I18n, LOCALE_EN, LOCALE_ES, LOCALE_FR, LOCALE_ZH_HANS, LOCALE_ZH_HANT, compileI18nJsonStr, hasI18nJson, initVueI18n, isI18nStr, isString, normalizeLocale, parseI18nJson, resolveLocale };\n","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/*!\n * Vue.js v2.6.11\n * (c) 2014-2023 Evan You\n * Released under the MIT License.\n */\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n return (\n isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function'\n )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch'\n];\n\n/* */\n\n\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /*@__PURE__*/(function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (process.env.NODE_ENV !== 'production') {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n if (vm.$options && vm.$options.__file) { // fixed by xxxxxx\n return ('') + vm.$options.__file\n }\n return ''\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm;\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm && vm.$options.name !== 'PageBody') {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n !vm.$options.isReserved && tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.SharedObject.target) {\n Dep.SharedObject.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n if (process.env.NODE_ENV !== 'production' && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\n// fixed by xxxxxx (nvue shared vuex)\n/* eslint-disable no-undef */\nDep.SharedObject = {};\nDep.SharedObject.target = null;\nDep.SharedObject.targetStack = [];\n\nfunction pushTarget (target) {\n Dep.SharedObject.targetStack.push(target);\n Dep.SharedObject.target = target;\n Dep.target = target;\n}\n\nfunction popTarget () {\n Dep.SharedObject.targetStack.pop();\n Dep.SharedObject.target = Dep.SharedObject.targetStack[Dep.SharedObject.targetStack.length - 1];\n Dep.target = Dep.SharedObject.target;\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(),\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n if (hasProto) {\n {// fixed by xxxxxx 微信小程序使用 plugins 之后,数组方法被直接挂载到了数组对象上,需要执行 copyAugment 逻辑\n if(value.push !== value.__proto__.push){\n copyAugment(value, arrayMethods, arrayKeys);\n } else {\n protoAugment(value, arrayMethods);\n }\n }\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue &&\n !value.__v_isMPComponent\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.SharedObject.target) { // fixed by xxxxxx\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if (process.env.NODE_ENV !== 'production' && customSetter) {\n customSetter();\n }\n // #7981: for accessor properties without setter\n if (getter && !setter) { return }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive$$1(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (process.env.NODE_ENV !== 'production') {\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n\n var keys = hasSymbol\n ? Reflect.ownKeys(from)\n : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') { continue }\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (\n toVal !== fromVal &&\n isPlainObject(toVal) &&\n isPlainObject(fromVal)\n ) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n process.env.NODE_ENV !== 'production' && warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n var res = childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n return res\n ? dedupeHooks(res)\n : res\n}\n\nfunction dedupeHooks (hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n if (process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'should conform to valid custom element name in html5 specification.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else if (process.env.NODE_ENV !== 'production') {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def$$1 = dirs[key];\n if (typeof def$$1 === 'function') {\n dirs[key] = { bind: def$$1, update: def$$1 };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n if (process.env.NODE_ENV !== 'production') {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\n\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (\n process.env.NODE_ENV !== 'production' &&\n // skip validation for weex recycle-list child component props\n !(false)\n ) {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (process.env.NODE_ENV !== 'production' && isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n\n if (!valid) {\n warn(\n getInvalidTypeMessage(name, value, expectedTypes),\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n var expectedValue = styleValue(value, expectedType);\n var receivedValue = styleValue(value, receivedType);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n !isBoolean(expectedType, receivedType)) {\n message += \" with value \" + expectedValue;\n }\n message += \", got \" + receivedType + \" \";\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \" + receivedValue + \".\";\n }\n return message\n}\n\nfunction styleValue (value, type) {\n if (type === 'String') {\n return (\"\\\"\" + value + \"\\\"\")\n } else if (type === 'Number') {\n return (\"\" + (Number(value)))\n } else {\n return (\"\" + value)\n }\n}\n\nfunction isExplicable (value) {\n var explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling (\n handler,\n context,\n args,\n vm,\n info\n) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n // issue #9511\n // avoid catch triggering multiple times when nested calls\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n timerFunc = function () {\n p.then(flushCallbacks);\n // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Technically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (process.env.NODE_ENV !== 'production') {\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var warnReservedPrefix = function (target, key) {\n warn(\n \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n 'prevent conflicts with Vue internals. ' +\n 'See: https://vuejs.org/v2/api/#data',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) ||\n (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n if (!has && !isAllowed) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\nvar mark;\nvar measure;\n\nif (process.env.NODE_ENV !== 'production') {\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n // perf.clearMeasures(name)\n };\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns, vm) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n createOnceHandler,\n vm\n) {\n var name, def$$1, cur, old, event;\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\n/* */\n\n// fixed by xxxxxx (mp properties)\r\nfunction extractPropertiesFromVNodeData(data, Ctor, res, context) {\r\n var propOptions = Ctor.options.mpOptions && Ctor.options.mpOptions.properties;\r\n if (isUndef(propOptions)) {\r\n return res\r\n }\n var externalClasses = Ctor.options.mpOptions.externalClasses || [];\r\n var attrs = data.attrs;\n var props = data.props;\r\n if (isDef(attrs) || isDef(props)) {\r\n for (var key in propOptions) {\r\n var altKey = hyphenate(key);\n var result = checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n // externalClass\n if (\n result &&\n res[key] &&\n externalClasses.indexOf(altKey) !== -1 &&\n context[camelize(res[key])]\n ) {\n // 赋值 externalClass 真正的值(模板里 externalClass 的值可能是字符串)\n res[key] = context[camelize(res[key])];\n }\r\n }\r\n }\r\n return res\r\n}\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag,\n context// fixed by xxxxxx\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n // fixed by xxxxxx\n return extractPropertiesFromVNodeData(data, Ctor, {}, context)\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (process.env.NODE_ENV !== 'production') {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n // fixed by xxxxxx\n return extractPropertiesFromVNodeData(data, Ctor, res, context)\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. , , v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n return isPrimitive(children)\n ? [createTextVNode(children)]\n : Array.isArray(children)\n ? normalizeArrayChildren(children)\n : undefined\n}\n\nfunction isTextNode (node) {\n return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n var res = [];\n var i, c, lastIndex, last;\n for (i = 0; i < children.length; i++) {\n c = children[i];\n if (isUndef(c) || typeof c === 'boolean') { continue }\n lastIndex = res.length - 1;\n last = res[lastIndex];\n // nested\n if (Array.isArray(c)) {\n if (c.length > 0) {\n c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n // merge adjacent text nodes\n if (isTextNode(c[0]) && isTextNode(last)) {\n res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n c.shift();\n }\n res.push.apply(res, c);\n }\n } else if (isPrimitive(c)) {\n if (isTextNode(last)) {\n // merge adjacent text nodes\n // this is necessary for SSR hydration because text nodes are\n // essentially merged when rendered to HTML strings\n res[lastIndex] = createTextVNode(last.text + c);\n } else if (c !== '') {\n // convert primitive to vnode\n res.push(createTextVNode(c));\n }\n } else {\n if (isTextNode(c) && isTextNode(last)) {\n // merge adjacent text nodes\n res[lastIndex] = createTextVNode(last.text + c.text);\n } else {\n // default key for nested array children (likely generated by v-for)\n if (isTrue(children._isVList) &&\n isDef(c.tag) &&\n isUndef(c.key) &&\n isDef(nestedIndex)) {\n c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n }\n res.push(c);\n }\n }\n }\n return res\n}\n\n/* */\n\nfunction initProvide (vm) {\n var provide = vm.$options.provide;\n if (provide) {\n vm._provided = typeof provide === 'function'\n ? provide.call(vm)\n : provide;\n }\n}\n\nfunction initInjections (vm) {\n var result = resolveInject(vm.$options.inject, vm);\n if (result) {\n toggleObserving(false);\n Object.keys(result).forEach(function (key) {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n defineReactive$$1(vm, key, result[key], function () {\n warn(\n \"Avoid mutating an injected value directly since the changes will be \" +\n \"overwritten whenever the provided component re-renders. \" +\n \"injection being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n });\n } else {\n defineReactive$$1(vm, key, result[key]);\n }\n });\n toggleObserving(true);\n }\n}\n\nfunction resolveInject (inject, vm) {\n if (inject) {\n // inject is :any because flow is not smart enough to figure out cached\n var result = Object.create(null);\n var keys = hasSymbol\n ? Reflect.ownKeys(inject)\n : Object.keys(inject);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n // #6574 in case the inject object is observed...\n if (key === '__ob__') { continue }\n var provideKey = inject[key].from;\n var source = vm;\n while (source) {\n if (source._provided && hasOwn(source._provided, provideKey)) {\n result[key] = source._provided[provideKey];\n break\n }\n source = source.$parent;\n }\n if (!source) {\n if ('default' in inject[key]) {\n var provideDefault = inject[key].default;\n result[key] = typeof provideDefault === 'function'\n ? provideDefault.call(vm)\n : provideDefault;\n } else if (process.env.NODE_ENV !== 'production') {\n warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n }\n }\n }\n return result\n }\n}\n\n/* */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n children,\n context\n) {\n if (!children || !children.length) {\n return {}\n }\n var slots = {};\n for (var i = 0, l = children.length; i < l; i++) {\n var child = children[i];\n var data = child.data;\n // remove slot attribute if the node is resolved as a Vue slot node\n if (data && data.attrs && data.attrs.slot) {\n delete data.attrs.slot;\n }\n // named slots should only be respected if the vnode was rendered in the\n // same context.\n if ((child.context === context || child.fnContext === context) &&\n data && data.slot != null\n ) {\n var name = data.slot;\n var slot = (slots[name] || (slots[name] = []));\n if (child.tag === 'template') {\n slot.push.apply(slot, child.children || []);\n } else {\n slot.push(child);\n }\n } else {\n // fixed by xxxxxx 临时 hack 掉 uni-app 中的异步 name slot page\n if(child.asyncMeta && child.asyncMeta.data && child.asyncMeta.data.slot === 'page'){\n (slots['page'] || (slots['page'] = [])).push(child);\n }else{\n (slots.default || (slots.default = [])).push(child);\n }\n }\n }\n // ignore slots that contains only whitespace\n for (var name$1 in slots) {\n if (slots[name$1].every(isWhitespace)) {\n delete slots[name$1];\n }\n }\n return slots\n}\n\nfunction isWhitespace (node) {\n return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\n/* */\n\nfunction normalizeScopedSlots (\n slots,\n normalSlots,\n prevSlots\n) {\n var res;\n var hasNormalSlots = Object.keys(normalSlots).length > 0;\n var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n var key = slots && slots.$key;\n if (!slots) {\n res = {};\n } else if (slots._normalized) {\n // fast path 1: child component re-render only, parent did not change\n return slots._normalized\n } else if (\n isStable &&\n prevSlots &&\n prevSlots !== emptyObject &&\n key === prevSlots.$key &&\n !hasNormalSlots &&\n !prevSlots.$hasNormal\n ) {\n // fast path 2: stable scoped slots w/ no normal slots to proxy,\n // only need to normalize once\n return prevSlots\n } else {\n res = {};\n for (var key$1 in slots) {\n if (slots[key$1] && key$1[0] !== '$') {\n res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n }\n }\n }\n // expose normal slots on scopedSlots\n for (var key$2 in normalSlots) {\n if (!(key$2 in res)) {\n res[key$2] = proxyNormalSlot(normalSlots, key$2);\n }\n }\n // avoriaz seems to mock a non-extensible $scopedSlots object\n // and when that is passed down this would cause an error\n if (slots && Object.isExtensible(slots)) {\n (slots)._normalized = res;\n }\n def(res, '$stable', isStable);\n def(res, '$key', key);\n def(res, '$hasNormal', hasNormalSlots);\n return res\n}\n\nfunction normalizeScopedSlot(normalSlots, key, fn) {\n var normalized = function () {\n var res = arguments.length ? fn.apply(null, arguments) : fn({});\n res = res && typeof res === 'object' && !Array.isArray(res)\n ? [res] // single vnode\n : normalizeChildren(res);\n return res && (\n res.length === 0 ||\n (res.length === 1 && res[0].isComment) // #9658\n ) ? undefined\n : res\n };\n // this is a slot using the new v-slot syntax without scope. although it is\n // compiled as a scoped slot, render fn users would expect it to be present\n // on this.$slots because the usage is semantically a normal slot.\n if (fn.proxy) {\n Object.defineProperty(normalSlots, key, {\n get: normalized,\n enumerable: true,\n configurable: true\n });\n }\n return normalized\n}\n\nfunction proxyNormalSlot(slots, key) {\n return function () { return slots[key]; }\n}\n\n/* */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n val,\n render\n) {\n var ret, i, l, keys, key;\n if (Array.isArray(val) || typeof val === 'string') {\n ret = new Array(val.length);\n for (i = 0, l = val.length; i < l; i++) {\n ret[i] = render(val[i], i, i, i); // fixed by xxxxxx\n }\n } else if (typeof val === 'number') {\n ret = new Array(val);\n for (i = 0; i < val; i++) {\n ret[i] = render(i + 1, i, i, i); // fixed by xxxxxx\n }\n } else if (isObject(val)) {\n if (hasSymbol && val[Symbol.iterator]) {\n ret = [];\n var iterator = val[Symbol.iterator]();\n var result = iterator.next();\n while (!result.done) {\n ret.push(render(result.value, ret.length, i, i++)); // fixed by xxxxxx\n result = iterator.next();\n }\n } else {\n keys = Object.keys(val);\n ret = new Array(keys.length);\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n ret[i] = render(val[key], key, i, i); // fixed by xxxxxx\n }\n }\n }\n if (!isDef(ret)) {\n ret = [];\n }\n (ret)._isVList = true;\n return ret\n}\n\n/* */\n\n/**\n * Runtime helper for rendering \n */\nfunction renderSlot (\n name,\n fallback,\n props,\n bindObject\n) {\n var scopedSlotFn = this.$scopedSlots[name];\n var nodes;\n if (scopedSlotFn) { // scoped slot\n props = props || {};\n if (bindObject) {\n if (process.env.NODE_ENV !== 'production' && !isObject(bindObject)) {\n warn(\n 'slot v-bind without argument expects an Object',\n this\n );\n }\n props = extend(extend({}, bindObject), props);\n }\n // fixed by xxxxxx app-plus scopedSlot\n nodes = scopedSlotFn(props, this, props._i) || fallback;\n } else {\n nodes = this.$slots[name] || fallback;\n }\n\n var target = props && props.slot;\n if (target) {\n return this.$createElement('template', { slot: target }, nodes)\n } else {\n return nodes\n }\n}\n\n/* */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/* */\n\nfunction isKeyNotMatch (expect, actual) {\n if (Array.isArray(expect)) {\n return expect.indexOf(actual) === -1\n } else {\n return expect !== actual\n }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n eventKeyCode,\n key,\n builtInKeyCode,\n eventKeyName,\n builtInKeyName\n) {\n var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n return isKeyNotMatch(builtInKeyName, eventKeyName)\n } else if (mappedKeyCode) {\n return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n } else if (eventKeyName) {\n return hyphenate(eventKeyName) !== key\n }\n}\n\n/* */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n data,\n tag,\n value,\n asProp,\n isSync\n) {\n if (value) {\n if (!isObject(value)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'v-bind without argument expects an Object or Array value',\n this\n );\n } else {\n if (Array.isArray(value)) {\n value = toObject(value);\n }\n var hash;\n var loop = function ( key ) {\n if (\n key === 'class' ||\n key === 'style' ||\n isReservedAttribute(key)\n ) {\n hash = data;\n } else {\n var type = data.attrs && data.attrs.type;\n hash = asProp || config.mustUseProp(tag, type, key)\n ? data.domProps || (data.domProps = {})\n : data.attrs || (data.attrs = {});\n }\n var camelizedKey = camelize(key);\n var hyphenatedKey = hyphenate(key);\n if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n hash[key] = value[key];\n\n if (isSync) {\n var on = data.on || (data.on = {});\n on[(\"update:\" + key)] = function ($event) {\n value[key] = $event;\n };\n }\n }\n };\n\n for (var key in value) loop( key );\n }\n }\n return data\n}\n\n/* */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n index,\n isInFor\n) {\n var cached = this._staticTrees || (this._staticTrees = []);\n var tree = cached[index];\n // if has already-rendered static tree and not inside v-for,\n // we can reuse the same tree.\n if (tree && !isInFor) {\n return tree\n }\n // otherwise, render a fresh tree.\n tree = cached[index] = this.$options.staticRenderFns[index].call(\n this._renderProxy,\n null,\n this // for render fns generated for functional component templates\n );\n markStatic(tree, (\"__static__\" + index), false);\n return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n tree,\n index,\n key\n) {\n markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n return tree\n}\n\nfunction markStatic (\n tree,\n key,\n isOnce\n) {\n if (Array.isArray(tree)) {\n for (var i = 0; i < tree.length; i++) {\n if (tree[i] && typeof tree[i] !== 'string') {\n markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n }\n }\n } else {\n markStaticNode(tree, key, isOnce);\n }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n node.isStatic = true;\n node.key = key;\n node.isOnce = isOnce;\n}\n\n/* */\n\nfunction bindObjectListeners (data, value) {\n if (value) {\n if (!isPlainObject(value)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'v-on without argument expects an Object value',\n this\n );\n } else {\n var on = data.on = data.on ? extend({}, data.on) : {};\n for (var key in value) {\n var existing = on[key];\n var ours = value[key];\n on[key] = existing ? [].concat(existing, ours) : ours;\n }\n }\n }\n return data\n}\n\n/* */\n\nfunction resolveScopedSlots (\n fns, // see flow/vnode\n res,\n // the following are added in 2.6\n hasDynamicKeys,\n contentHashKey\n) {\n res = res || { $stable: !hasDynamicKeys };\n for (var i = 0; i < fns.length; i++) {\n var slot = fns[i];\n if (Array.isArray(slot)) {\n resolveScopedSlots(slot, res, hasDynamicKeys);\n } else if (slot) {\n // marker for reverse proxying v-slot without scope on this.$slots\n if (slot.proxy) {\n slot.fn.proxy = true;\n }\n res[slot.key] = slot.fn;\n }\n }\n if (contentHashKey) {\n (res).$key = contentHashKey;\n }\n return res\n}\n\n/* */\n\nfunction bindDynamicKeys (baseObj, values) {\n for (var i = 0; i < values.length; i += 2) {\n var key = values[i];\n if (typeof key === 'string' && key) {\n baseObj[values[i]] = values[i + 1];\n } else if (process.env.NODE_ENV !== 'production' && key !== '' && key !== null) {\n // null is a special value for explicitly removing a binding\n warn(\n (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n this\n );\n }\n }\n return baseObj\n}\n\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier (value, symbol) {\n return typeof value === 'string' ? symbol + value : value\n}\n\n/* */\n\nfunction installRenderHelpers (target) {\n target._o = markOnce;\n target._n = toNumber;\n target._s = toString;\n target._l = renderList;\n target._t = renderSlot;\n target._q = looseEqual;\n target._i = looseIndexOf;\n target._m = renderStatic;\n target._f = resolveFilter;\n target._k = checkKeyCodes;\n target._b = bindObjectProps;\n target._v = createTextVNode;\n target._e = createEmptyVNode;\n target._u = resolveScopedSlots;\n target._g = bindObjectListeners;\n target._d = bindDynamicKeys;\n target._p = prependModifier;\n}\n\n/* */\n\nfunction FunctionalRenderContext (\n data,\n props,\n children,\n parent,\n Ctor\n) {\n var this$1 = this;\n\n var options = Ctor.options;\n // ensure the createElement function in functional components\n // gets a unique context - this is necessary for correct named slot check\n var contextVm;\n if (hasOwn(parent, '_uid')) {\n contextVm = Object.create(parent);\n // $flow-disable-line\n contextVm._original = parent;\n } else {\n // the context vm passed in is a functional context as well.\n // in this case we want to make sure we are able to get a hold to the\n // real context instance.\n contextVm = parent;\n // $flow-disable-line\n parent = parent._original;\n }\n var isCompiled = isTrue(options._compiled);\n var needNormalization = !isCompiled;\n\n this.data = data;\n this.props = props;\n this.children = children;\n this.parent = parent;\n this.listeners = data.on || emptyObject;\n this.injections = resolveInject(options.inject, parent);\n this.slots = function () {\n if (!this$1.$slots) {\n normalizeScopedSlots(\n data.scopedSlots,\n this$1.$slots = resolveSlots(children, parent)\n );\n }\n return this$1.$slots\n };\n\n Object.defineProperty(this, 'scopedSlots', ({\n enumerable: true,\n get: function get () {\n return normalizeScopedSlots(data.scopedSlots, this.slots())\n }\n }));\n\n // support for compiled functional template\n if (isCompiled) {\n // exposing $options for renderStatic()\n this.$options = options;\n // pre-resolve slots for renderSlot()\n this.$slots = this.slots();\n this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n }\n\n if (options._scopeId) {\n this._c = function (a, b, c, d) {\n var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n if (vnode && !Array.isArray(vnode)) {\n vnode.fnScopeId = options._scopeId;\n vnode.fnContext = parent;\n }\n return vnode\n };\n } else {\n this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n Ctor,\n propsData,\n data,\n contextVm,\n children\n) {\n var options = Ctor.options;\n var props = {};\n var propOptions = options.props;\n if (isDef(propOptions)) {\n for (var key in propOptions) {\n props[key] = validateProp(key, propOptions, propsData || emptyObject);\n }\n } else {\n if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n if (isDef(data.props)) { mergeProps(props, data.props); }\n }\n\n var renderContext = new FunctionalRenderContext(\n data,\n props,\n children,\n contextVm,\n Ctor\n );\n\n var vnode = options.render.call(null, renderContext._c, renderContext);\n\n if (vnode instanceof VNode) {\n return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n } else if (Array.isArray(vnode)) {\n var vnodes = normalizeChildren(vnode) || [];\n var res = new Array(vnodes.length);\n for (var i = 0; i < vnodes.length; i++) {\n res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n }\n return res\n }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n // #7817 clone node before setting fnContext, otherwise if the node is reused\n // (e.g. it was from a cached normal slot) the fnContext causes named slots\n // that should not be matched to match.\n var clone = cloneVNode(vnode);\n clone.fnContext = contextVm;\n clone.fnOptions = options;\n if (process.env.NODE_ENV !== 'production') {\n (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n }\n if (data.slot) {\n (clone.data || (clone.data = {})).slot = data.slot;\n }\n return clone\n}\n\nfunction mergeProps (to, from) {\n for (var key in from) {\n to[camelize(key)] = from[key];\n }\n}\n\n/* */\n\n/* */\n\n/* */\n\n/* */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n init: function init (vnode, hydrating) {\n if (\n vnode.componentInstance &&\n !vnode.componentInstance._isDestroyed &&\n vnode.data.keepAlive\n ) {\n // kept-alive components, treat as a patch\n var mountedNode = vnode; // work around flow\n componentVNodeHooks.prepatch(mountedNode, mountedNode);\n } else {\n var child = vnode.componentInstance = createComponentInstanceForVnode(\n vnode,\n activeInstance\n );\n child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n }\n },\n\n prepatch: function prepatch (oldVnode, vnode) {\n var options = vnode.componentOptions;\n var child = vnode.componentInstance = oldVnode.componentInstance;\n updateChildComponent(\n child,\n options.propsData, // updated props\n options.listeners, // updated listeners\n vnode, // new parent vnode\n options.children // new children\n );\n },\n\n insert: function insert (vnode) {\n var context = vnode.context;\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isMounted) {\n callHook(componentInstance, 'onServiceCreated');\n callHook(componentInstance, 'onServiceAttached');\n componentInstance._isMounted = true;\n callHook(componentInstance, 'mounted');\n }\n if (vnode.data.keepAlive) {\n if (context._isMounted) {\n // vue-router#1212\n // During updates, a kept-alive component's child components may\n // change, so directly walking the tree here may call activated hooks\n // on incorrect children. Instead we push them into a queue which will\n // be processed after the whole patch process ended.\n queueActivatedComponent(componentInstance);\n } else {\n activateChildComponent(componentInstance, true /* direct */);\n }\n }\n },\n\n destroy: function destroy (vnode) {\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isDestroyed) {\n if (!vnode.data.keepAlive) {\n componentInstance.$destroy();\n } else {\n deactivateChildComponent(componentInstance, true /* direct */);\n }\n }\n }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n Ctor,\n data,\n context,\n children,\n tag\n) {\n if (isUndef(Ctor)) {\n return\n }\n\n var baseCtor = context.$options._base;\n\n // plain options object: turn it into a constructor\n if (isObject(Ctor)) {\n Ctor = baseCtor.extend(Ctor);\n }\n\n // if at this stage it's not a constructor or an async component factory,\n // reject.\n if (typeof Ctor !== 'function') {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n }\n return\n }\n\n // async component\n var asyncFactory;\n if (isUndef(Ctor.cid)) {\n asyncFactory = Ctor;\n Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n if (Ctor === undefined) {\n // return a placeholder node for async component, which is rendered\n // as a comment node but preserves all the raw information for the node.\n // the information will be used for async server-rendering and hydration.\n return createAsyncPlaceholder(\n asyncFactory,\n data,\n context,\n children,\n tag\n )\n }\n }\n\n data = data || {};\n\n // resolve constructor options in case global mixins are applied after\n // component constructor creation\n resolveConstructorOptions(Ctor);\n\n // transform component v-model data into props & events\n if (isDef(data.model)) {\n transformModel(Ctor.options, data);\n }\n\n // extract props\n var propsData = extractPropsFromVNodeData(data, Ctor, tag, context); // fixed by xxxxxx\n\n // functional component\n if (isTrue(Ctor.options.functional)) {\n return createFunctionalComponent(Ctor, propsData, data, context, children)\n }\n\n // extract listeners, since these needs to be treated as\n // child component listeners instead of DOM listeners\n var listeners = data.on;\n // replace with listeners with .native modifier\n // so it gets processed during parent component patch.\n data.on = data.nativeOn;\n\n if (isTrue(Ctor.options.abstract)) {\n // abstract components do not keep anything\n // other than props & listeners & slot\n\n // work around flow\n var slot = data.slot;\n data = {};\n if (slot) {\n data.slot = slot;\n }\n }\n\n // install component management hooks onto the placeholder node\n installComponentHooks(data);\n\n // return a placeholder vnode\n var name = Ctor.options.name || tag;\n var vnode = new VNode(\n (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n data, undefined, undefined, undefined, context,\n { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n asyncFactory\n );\n\n return vnode\n}\n\nfunction createComponentInstanceForVnode (\n vnode, // we know it's MountedComponentVNode but flow doesn't\n parent // activeInstance in lifecycle state\n) {\n var options = {\n _isComponent: true,\n _parentVnode: vnode,\n parent: parent\n };\n // check inline-template render functions\n var inlineTemplate = vnode.data.inlineTemplate;\n if (isDef(inlineTemplate)) {\n options.render = inlineTemplate.render;\n options.staticRenderFns = inlineTemplate.staticRenderFns;\n }\n return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n var hooks = data.hook || (data.hook = {});\n for (var i = 0; i < hooksToMerge.length; i++) {\n var key = hooksToMerge[i];\n var existing = hooks[key];\n var toMerge = componentVNodeHooks[key];\n if (existing !== toMerge && !(existing && existing._merged)) {\n hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n }\n }\n}\n\nfunction mergeHook$1 (f1, f2) {\n var merged = function (a, b) {\n // flow complains about extra args which is why we use any\n f1(a, b);\n f2(a, b);\n };\n merged._merged = true;\n return merged\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n var prop = (options.model && options.model.prop) || 'value';\n var event = (options.model && options.model.event) || 'input'\n ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n var on = data.on || (data.on = {});\n var existing = on[event];\n var callback = data.model.callback;\n if (isDef(existing)) {\n if (\n Array.isArray(existing)\n ? existing.indexOf(callback) === -1\n : existing !== callback\n ) {\n on[event] = [callback].concat(existing);\n }\n } else {\n on[event] = callback;\n }\n}\n\n/* */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n context,\n tag,\n data,\n children,\n normalizationType,\n alwaysNormalize\n) {\n if (Array.isArray(data) || isPrimitive(data)) {\n normalizationType = children;\n children = data;\n data = undefined;\n }\n if (isTrue(alwaysNormalize)) {\n normalizationType = ALWAYS_NORMALIZE;\n }\n return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n context,\n tag,\n data,\n children,\n normalizationType\n) {\n if (isDef(data) && isDef((data).__ob__)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n 'Always create fresh vnode data objects in each render!',\n context\n );\n return createEmptyVNode()\n }\n // object syntax in v-bind\n if (isDef(data) && isDef(data.is)) {\n tag = data.is;\n }\n if (!tag) {\n // in case of component :is set to falsy value\n return createEmptyVNode()\n }\n // warn against non-primitive key\n if (process.env.NODE_ENV !== 'production' &&\n isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n ) {\n {\n warn(\n 'Avoid using non-primitive value as key, ' +\n 'use string/number value instead.',\n context\n );\n }\n }\n // support single function children as default scoped slot\n if (Array.isArray(children) &&\n typeof children[0] === 'function'\n ) {\n data = data || {};\n data.scopedSlots = { default: children[0] };\n children.length = 0;\n }\n if (normalizationType === ALWAYS_NORMALIZE) {\n children = normalizeChildren(children);\n } else if (normalizationType === SIMPLE_NORMALIZE) {\n children = simpleNormalizeChildren(children);\n }\n var vnode, ns;\n if (typeof tag === 'string') {\n var Ctor;\n ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n if (config.isReservedTag(tag)) {\n // platform built-in elements\n if (process.env.NODE_ENV !== 'production' && isDef(data) && isDef(data.nativeOn)) {\n warn(\n (\"The .native modifier for v-on is only valid on components but it was used on <\" + tag + \">.\"),\n context\n );\n }\n vnode = new VNode(\n config.parsePlatformTagName(tag), data, children,\n undefined, undefined, context\n );\n } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n // component\n vnode = createComponent(Ctor, data, context, children, tag);\n } else {\n // unknown or unlisted namespaced elements\n // check at runtime because it may get assigned a namespace when its\n // parent normalizes children\n vnode = new VNode(\n tag, data, children,\n undefined, undefined, context\n );\n }\n } else {\n // direct component options / constructor\n vnode = createComponent(tag, data, context, children);\n }\n if (Array.isArray(vnode)) {\n return vnode\n } else if (isDef(vnode)) {\n if (isDef(ns)) { applyNS(vnode, ns); }\n if (isDef(data)) { registerDeepBindings(data); }\n return vnode\n } else {\n return createEmptyVNode()\n }\n}\n\nfunction applyNS (vnode, ns, force) {\n vnode.ns = ns;\n if (vnode.tag === 'foreignObject') {\n // use default namespace inside foreignObject\n ns = undefined;\n force = true;\n }\n if (isDef(vnode.children)) {\n for (var i = 0, l = vnode.children.length; i < l; i++) {\n var child = vnode.children[i];\n if (isDef(child.tag) && (\n isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n applyNS(child, ns, force);\n }\n }\n }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n if (isObject(data.style)) {\n traverse(data.style);\n }\n if (isObject(data.class)) {\n traverse(data.class);\n }\n}\n\n/* */\n\nfunction initRender (vm) {\n vm._vnode = null; // the root of the child tree\n vm._staticTrees = null; // v-once cached trees\n var options = vm.$options;\n var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n var renderContext = parentVnode && parentVnode.context;\n vm.$slots = resolveSlots(options._renderChildren, renderContext);\n vm.$scopedSlots = emptyObject;\n // bind the createElement fn to this instance\n // so that we get proper render context inside it.\n // args order: tag, data, children, normalizationType, alwaysNormalize\n // internal version is used by render functions compiled from templates\n vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n // normalization is always applied for the public version, used in\n // user-written render functions.\n vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n // $attrs & $listeners are exposed for easier HOC creation.\n // they need to be reactive so that HOCs using them are always updated\n var parentData = parentVnode && parentVnode.data;\n\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n }, true);\n defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n }, true);\n } else {\n defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, null, true);\n defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, null, true);\n }\n}\n\nvar currentRenderingInstance = null;\n\nfunction renderMixin (Vue) {\n // install runtime convenience helpers\n installRenderHelpers(Vue.prototype);\n\n Vue.prototype.$nextTick = function (fn) {\n return nextTick(fn, this)\n };\n\n Vue.prototype._render = function () {\n var vm = this;\n var ref = vm.$options;\n var render = ref.render;\n var _parentVnode = ref._parentVnode;\n\n if (_parentVnode) {\n vm.$scopedSlots = normalizeScopedSlots(\n _parentVnode.data.scopedSlots,\n vm.$slots,\n vm.$scopedSlots\n );\n }\n\n // set parent vnode. this allows render functions to have access\n // to the data on the placeholder node.\n vm.$vnode = _parentVnode;\n // render self\n var vnode;\n try {\n // There's no need to maintain a stack because all render fns are called\n // separately from one another. Nested component's render fns are called\n // when parent component is patched.\n currentRenderingInstance = vm;\n vnode = render.call(vm._renderProxy, vm.$createElement);\n } catch (e) {\n handleError(e, vm, \"render\");\n // return error render result,\n // or previous vnode to prevent render error causing blank component\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production' && vm.$options.renderError) {\n try {\n vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n } catch (e) {\n handleError(e, vm, \"renderError\");\n vnode = vm._vnode;\n }\n } else {\n vnode = vm._vnode;\n }\n } finally {\n currentRenderingInstance = null;\n }\n // if the returned array contains only a single node, allow it\n if (Array.isArray(vnode) && vnode.length === 1) {\n vnode = vnode[0];\n }\n // return empty vnode in case the render function errored out\n if (!(vnode instanceof VNode)) {\n if (process.env.NODE_ENV !== 'production' && Array.isArray(vnode)) {\n warn(\n 'Multiple root nodes returned from render function. Render function ' +\n 'should return a single root node.',\n vm\n );\n }\n vnode = createEmptyVNode();\n }\n // set parent\n vnode.parent = _parentVnode;\n return vnode\n };\n}\n\n/* */\n\nfunction ensureCtor (comp, base) {\n if (\n comp.__esModule ||\n (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n ) {\n comp = comp.default;\n }\n return isObject(comp)\n ? base.extend(comp)\n : comp\n}\n\nfunction createAsyncPlaceholder (\n factory,\n data,\n context,\n children,\n tag\n) {\n var node = createEmptyVNode();\n node.asyncFactory = factory;\n node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n return node\n}\n\nfunction resolveAsyncComponent (\n factory,\n baseCtor\n) {\n if (isTrue(factory.error) && isDef(factory.errorComp)) {\n return factory.errorComp\n }\n\n if (isDef(factory.resolved)) {\n return factory.resolved\n }\n\n var owner = currentRenderingInstance;\n if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n // already pending\n factory.owners.push(owner);\n }\n\n if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n return factory.loadingComp\n }\n\n if (owner && !isDef(factory.owners)) {\n var owners = factory.owners = [owner];\n var sync = true;\n var timerLoading = null;\n var timerTimeout = null\n\n ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n\n var forceRender = function (renderCompleted) {\n for (var i = 0, l = owners.length; i < l; i++) {\n (owners[i]).$forceUpdate();\n }\n\n if (renderCompleted) {\n owners.length = 0;\n if (timerLoading !== null) {\n clearTimeout(timerLoading);\n timerLoading = null;\n }\n if (timerTimeout !== null) {\n clearTimeout(timerTimeout);\n timerTimeout = null;\n }\n }\n };\n\n var resolve = once(function (res) {\n // cache resolved\n factory.resolved = ensureCtor(res, baseCtor);\n // invoke callbacks only if this is not a synchronous resolve\n // (async resolves are shimmed as synchronous during SSR)\n if (!sync) {\n forceRender(true);\n } else {\n owners.length = 0;\n }\n });\n\n var reject = once(function (reason) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Failed to resolve async component: \" + (String(factory)) +\n (reason ? (\"\\nReason: \" + reason) : '')\n );\n if (isDef(factory.errorComp)) {\n factory.error = true;\n forceRender(true);\n }\n });\n\n var res = factory(resolve, reject);\n\n if (isObject(res)) {\n if (isPromise(res)) {\n // () => Promise\n if (isUndef(factory.resolved)) {\n res.then(resolve, reject);\n }\n } else if (isPromise(res.component)) {\n res.component.then(resolve, reject);\n\n if (isDef(res.error)) {\n factory.errorComp = ensureCtor(res.error, baseCtor);\n }\n\n if (isDef(res.loading)) {\n factory.loadingComp = ensureCtor(res.loading, baseCtor);\n if (res.delay === 0) {\n factory.loading = true;\n } else {\n timerLoading = setTimeout(function () {\n timerLoading = null;\n if (isUndef(factory.resolved) && isUndef(factory.error)) {\n factory.loading = true;\n forceRender(false);\n }\n }, res.delay || 200);\n }\n }\n\n if (isDef(res.timeout)) {\n timerTimeout = setTimeout(function () {\n timerTimeout = null;\n if (isUndef(factory.resolved)) {\n reject(\n process.env.NODE_ENV !== 'production'\n ? (\"timeout (\" + (res.timeout) + \"ms)\")\n : null\n );\n }\n }, res.timeout);\n }\n }\n }\n\n sync = false;\n // return in case resolved synchronously\n return factory.loading\n ? factory.loadingComp\n : factory.resolved\n }\n}\n\n/* */\n\nfunction isAsyncPlaceholder (node) {\n return node.isComment && node.asyncFactory\n}\n\n/* */\n\nfunction getFirstComponentChild (children) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n var c = children[i];\n if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n return c\n }\n }\n }\n}\n\n/* */\n\n/* */\n\nfunction initEvents (vm) {\n vm._events = Object.create(null);\n vm._hasHookEvent = false;\n // init parent attached events\n var listeners = vm.$options._parentListeners;\n if (listeners) {\n updateComponentListeners(vm, listeners);\n }\n}\n\nvar target;\n\nfunction add (event, fn) {\n target.$on(event, fn);\n}\n\nfunction remove$1 (event, fn) {\n target.$off(event, fn);\n}\n\nfunction createOnceHandler (event, fn) {\n var _target = target;\n return function onceHandler () {\n var res = fn.apply(null, arguments);\n if (res !== null) {\n _target.$off(event, onceHandler);\n }\n }\n}\n\nfunction updateComponentListeners (\n vm,\n listeners,\n oldListeners\n) {\n target = vm;\n updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n var hookRE = /^hook:/;\n Vue.prototype.$on = function (event, fn) {\n var vm = this;\n if (Array.isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n vm.$on(event[i], fn);\n }\n } else {\n (vm._events[event] || (vm._events[event] = [])).push(fn);\n // optimize hook:event cost by using a boolean flag marked at registration\n // instead of a hash lookup\n if (hookRE.test(event)) {\n vm._hasHookEvent = true;\n }\n }\n return vm\n };\n\n Vue.prototype.$once = function (event, fn) {\n var vm = this;\n function on () {\n vm.$off(event, on);\n fn.apply(vm, arguments);\n }\n on.fn = fn;\n vm.$on(event, on);\n return vm\n };\n\n Vue.prototype.$off = function (event, fn) {\n var vm = this;\n // all\n if (!arguments.length) {\n vm._events = Object.create(null);\n return vm\n }\n // array of events\n if (Array.isArray(event)) {\n for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {\n vm.$off(event[i$1], fn);\n }\n return vm\n }\n // specific event\n var cbs = vm._events[event];\n if (!cbs) {\n return vm\n }\n if (!fn) {\n vm._events[event] = null;\n return vm\n }\n // specific handler\n var cb;\n var i = cbs.length;\n while (i--) {\n cb = cbs[i];\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i, 1);\n break\n }\n }\n return vm\n };\n\n Vue.prototype.$emit = function (event) {\n var vm = this;\n if (process.env.NODE_ENV !== 'production') {\n var lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n tip(\n \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and you cannot use \" +\n \"v-on to listen to camelCase events when using in-DOM templates. \" +\n \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n );\n }\n }\n var cbs = vm._events[event];\n if (cbs) {\n cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n var args = toArray(arguments, 1);\n var info = \"event handler for \\\"\" + event + \"\\\"\";\n for (var i = 0, l = cbs.length; i < l; i++) {\n invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n }\n }\n return vm\n };\n}\n\n/* */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction setActiveInstance(vm) {\n var prevActiveInstance = activeInstance;\n activeInstance = vm;\n return function () {\n activeInstance = prevActiveInstance;\n }\n}\n\nfunction initLifecycle (vm) {\n var options = vm.$options;\n\n // locate first non-abstract parent\n var parent = options.parent;\n if (parent && !options.abstract) {\n while (parent.$options.abstract && parent.$parent) {\n parent = parent.$parent;\n }\n parent.$children.push(vm);\n }\n\n vm.$parent = parent;\n vm.$root = parent ? parent.$root : vm;\n\n vm.$children = [];\n vm.$refs = {};\n\n vm._watcher = null;\n vm._inactive = null;\n vm._directInactive = false;\n vm._isMounted = false;\n vm._isDestroyed = false;\n vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n Vue.prototype._update = function (vnode, hydrating) {\n var vm = this;\n var prevEl = vm.$el;\n var prevVnode = vm._vnode;\n var restoreActiveInstance = setActiveInstance(vm);\n vm._vnode = vnode;\n // Vue.prototype.__patch__ is injected in entry points\n // based on the rendering backend used.\n if (!prevVnode) {\n // initial render\n vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n } else {\n // updates\n vm.$el = vm.__patch__(prevVnode, vnode);\n }\n restoreActiveInstance();\n // update __vue__ reference\n if (prevEl) {\n prevEl.__vue__ = null;\n }\n if (vm.$el) {\n vm.$el.__vue__ = vm;\n }\n // if parent is an HOC, update its $el as well\n if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n vm.$parent.$el = vm.$el;\n }\n // updated hook is called by the scheduler to ensure that children are\n // updated in a parent's updated hook.\n };\n\n Vue.prototype.$forceUpdate = function () {\n var vm = this;\n if (vm._watcher) {\n vm._watcher.update();\n }\n };\n\n Vue.prototype.$destroy = function () {\n var vm = this;\n if (vm._isBeingDestroyed) {\n return\n }\n callHook(vm, 'beforeDestroy');\n vm._isBeingDestroyed = true;\n // remove self from parent\n var parent = vm.$parent;\n if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n remove(parent.$children, vm);\n }\n // teardown watchers\n if (vm._watcher) {\n vm._watcher.teardown();\n }\n var i = vm._watchers.length;\n while (i--) {\n vm._watchers[i].teardown();\n }\n // remove reference from data ob\n // frozen object may not have observer.\n if (vm._data.__ob__) {\n vm._data.__ob__.vmCount--;\n }\n // call the last hook...\n vm._isDestroyed = true;\n // invoke destroy hooks on current rendered tree\n vm.__patch__(vm._vnode, null);\n // fire destroyed hook\n callHook(vm, 'destroyed');\n // turn off all instance listeners.\n vm.$off();\n // remove __vue__ reference\n if (vm.$el) {\n vm.$el.__vue__ = null;\n }\n // release circular reference (#6759)\n if (vm.$vnode) {\n vm.$vnode.parent = null;\n }\n };\n}\n\nfunction updateChildComponent (\n vm,\n propsData,\n listeners,\n parentVnode,\n renderChildren\n) {\n if (process.env.NODE_ENV !== 'production') {\n isUpdatingChildComponent = true;\n }\n\n // determine whether component has slot children\n // we need to do this before overwriting $options._renderChildren.\n\n // check if there are dynamic scopedSlots (hand-written or compiled but with\n // dynamic slot names). Static scoped slots compiled from template has the\n // \"$stable\" marker.\n var newScopedSlots = parentVnode.data.scopedSlots;\n var oldScopedSlots = vm.$scopedSlots;\n var hasDynamicScopedSlot = !!(\n (newScopedSlots && !newScopedSlots.$stable) ||\n (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n );\n\n // Any static slot children from the parent may have changed during parent's\n // update. Dynamic scoped slots may also have changed. In such cases, a forced\n // update is necessary to ensure correctness.\n var needsForceUpdate = !!(\n renderChildren || // has new static slots\n vm.$options._renderChildren || // has old static slots\n hasDynamicScopedSlot\n );\n\n vm.$options._parentVnode = parentVnode;\n vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n if (vm._vnode) { // update child tree's parent\n vm._vnode.parent = parentVnode;\n }\n vm.$options._renderChildren = renderChildren;\n\n // update $attrs and $listeners hash\n // these are also reactive so they may trigger child update if the child\n // used them during render\n vm.$attrs = parentVnode.data.attrs || emptyObject;\n vm.$listeners = listeners || emptyObject;\n\n // update props\n if (propsData && vm.$options.props) {\n toggleObserving(false);\n var props = vm._props;\n var propKeys = vm.$options._propKeys || [];\n for (var i = 0; i < propKeys.length; i++) {\n var key = propKeys[i];\n var propOptions = vm.$options.props; // wtf flow?\n props[key] = validateProp(key, propOptions, propsData, vm);\n }\n toggleObserving(true);\n // keep a copy of raw propsData\n vm.$options.propsData = propsData;\n }\n \n // fixed by xxxxxx update properties(mp runtime)\n vm._$updateProperties && vm._$updateProperties(vm);\n \n // update listeners\n listeners = listeners || emptyObject;\n var oldListeners = vm.$options._parentListeners;\n vm.$options._parentListeners = listeners;\n updateComponentListeners(vm, listeners, oldListeners);\n\n // resolve slots + force update if has children\n if (needsForceUpdate) {\n vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n vm.$forceUpdate();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n isUpdatingChildComponent = false;\n }\n}\n\nfunction isInInactiveTree (vm) {\n while (vm && (vm = vm.$parent)) {\n if (vm._inactive) { return true }\n }\n return false\n}\n\nfunction activateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = false;\n if (isInInactiveTree(vm)) {\n return\n }\n } else if (vm._directInactive) {\n return\n }\n if (vm._inactive || vm._inactive === null) {\n vm._inactive = false;\n for (var i = 0; i < vm.$children.length; i++) {\n activateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'activated');\n }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = true;\n if (isInInactiveTree(vm)) {\n return\n }\n }\n if (!vm._inactive) {\n vm._inactive = true;\n for (var i = 0; i < vm.$children.length; i++) {\n deactivateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'deactivated');\n }\n}\n\nfunction callHook (vm, hook) {\n // #7573 disable dep collection when invoking lifecycle hooks\n pushTarget();\n var handlers = vm.$options[hook];\n var info = hook + \" hook\";\n if (handlers) {\n for (var i = 0, j = handlers.length; i < j; i++) {\n invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n }\n }\n if (vm._hasHookEvent) {\n vm.$emit('hook:' + hook);\n }\n popTarget();\n}\n\n/* */\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n index = queue.length = activatedChildren.length = 0;\n has = {};\n if (process.env.NODE_ENV !== 'production') {\n circular = {};\n }\n waiting = flushing = false;\n}\n\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n var performance = window.performance;\n if (\n performance &&\n typeof performance.now === 'function' &&\n getNow() > document.createEvent('Event').timeStamp\n ) {\n // if the event timestamp, although evaluated AFTER the Date.now(), is\n // smaller than it, it means the event is using a hi-res timestamp,\n // and we need to use the hi-res version for event listener timestamps as\n // well.\n getNow = function () { return performance.now(); };\n }\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n currentFlushTimestamp = getNow();\n flushing = true;\n var watcher, id;\n\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child)\n // 2. A component's user watchers are run before its render watcher (because\n // user watchers are created before the render watcher)\n // 3. If a component is destroyed during a parent component's watcher run,\n // its watchers can be skipped.\n queue.sort(function (a, b) { return a.id - b.id; });\n\n // do not cache length because more watchers might be pushed\n // as we run existing watchers\n for (index = 0; index < queue.length; index++) {\n watcher = queue[index];\n if (watcher.before) {\n watcher.before();\n }\n id = watcher.id;\n has[id] = null;\n watcher.run();\n // in dev build, check and stop circular updates.\n if (process.env.NODE_ENV !== 'production' && has[id] != null) {\n circular[id] = (circular[id] || 0) + 1;\n if (circular[id] > MAX_UPDATE_COUNT) {\n warn(\n 'You may have an infinite update loop ' + (\n watcher.user\n ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n : \"in a component render function.\"\n ),\n watcher.vm\n );\n break\n }\n }\n }\n\n // keep copies of post queues before resetting state\n var activatedQueue = activatedChildren.slice();\n var updatedQueue = queue.slice();\n\n resetSchedulerState();\n\n // call component updated and activated hooks\n callActivatedHooks(activatedQueue);\n callUpdatedHooks(updatedQueue);\n\n // devtool hook\n /* istanbul ignore if */\n if (devtools && config.devtools) {\n devtools.emit('flush');\n }\n}\n\nfunction callUpdatedHooks (queue) {\n var i = queue.length;\n while (i--) {\n var watcher = queue[i];\n var vm = watcher.vm;\n if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n callHook(vm, 'updated');\n }\n }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n // setting _inactive to false here so that a render function can\n // rely on checking whether it's in an inactive tree (e.g. router-view)\n vm._inactive = false;\n activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n for (var i = 0; i < queue.length; i++) {\n queue[i]._inactive = true;\n activateChildComponent(queue[i], true /* true */);\n }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n var id = watcher.id;\n if (has[id] == null) {\n has[id] = true;\n if (!flushing) {\n queue.push(watcher);\n } else {\n // if already flushing, splice the watcher based on its id\n // if already past its id, it will be run next immediately.\n var i = queue.length - 1;\n while (i > index && queue[i].id > watcher.id) {\n i--;\n }\n queue.splice(i + 1, 0, watcher);\n }\n // queue the flush\n if (!waiting) {\n waiting = true;\n\n if (process.env.NODE_ENV !== 'production' && !config.async) {\n flushSchedulerQueue();\n return\n }\n nextTick(flushSchedulerQueue);\n }\n }\n}\n\n/* */\n\n\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n vm,\n expOrFn,\n cb,\n options,\n isRenderWatcher\n) {\n this.vm = vm;\n if (isRenderWatcher) {\n vm._watcher = this;\n }\n vm._watchers.push(this);\n // options\n if (options) {\n this.deep = !!options.deep;\n this.user = !!options.user;\n this.lazy = !!options.lazy;\n this.sync = !!options.sync;\n this.before = options.before;\n } else {\n this.deep = this.user = this.lazy = this.sync = false;\n }\n this.cb = cb;\n this.id = ++uid$2; // uid for batching\n this.active = true;\n this.dirty = this.lazy; // for lazy watchers\n this.deps = [];\n this.newDeps = [];\n this.depIds = new _Set();\n this.newDepIds = new _Set();\n this.expression = process.env.NODE_ENV !== 'production'\n ? expOrFn.toString()\n : '';\n // parse expression for getter\n if (typeof expOrFn === 'function') {\n this.getter = expOrFn;\n } else {\n this.getter = parsePath(expOrFn);\n if (!this.getter) {\n this.getter = noop;\n process.env.NODE_ENV !== 'production' && warn(\n \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n 'Watcher only accepts simple dot-delimited paths. ' +\n 'For full control, use a function instead.',\n vm\n );\n }\n }\n this.value = this.lazy\n ? undefined\n : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n pushTarget(this);\n var value;\n var vm = this.vm;\n try {\n value = this.getter.call(vm, vm);\n } catch (e) {\n if (this.user) {\n handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n } else {\n throw e\n }\n } finally {\n // \"touch\" every property so they are all tracked as\n // dependencies for deep watching\n if (this.deep) {\n traverse(value);\n }\n popTarget();\n this.cleanupDeps();\n }\n return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n var id = dep.id;\n if (!this.newDepIds.has(id)) {\n this.newDepIds.add(id);\n this.newDeps.push(dep);\n if (!this.depIds.has(id)) {\n dep.addSub(this);\n }\n }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n var i = this.deps.length;\n while (i--) {\n var dep = this.deps[i];\n if (!this.newDepIds.has(dep.id)) {\n dep.removeSub(this);\n }\n }\n var tmp = this.depIds;\n this.depIds = this.newDepIds;\n this.newDepIds = tmp;\n this.newDepIds.clear();\n tmp = this.deps;\n this.deps = this.newDeps;\n this.newDeps = tmp;\n this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n /* istanbul ignore else */\n if (this.lazy) {\n this.dirty = true;\n } else if (this.sync) {\n this.run();\n } else {\n queueWatcher(this);\n }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n if (this.active) {\n var value = this.get();\n if (\n value !== this.value ||\n // Deep watchers and watchers on Object/Arrays should fire even\n // when the value is the same, because the value may\n // have mutated.\n isObject(value) ||\n this.deep\n ) {\n // set new value\n var oldValue = this.value;\n this.value = value;\n if (this.user) {\n try {\n this.cb.call(this.vm, value, oldValue);\n } catch (e) {\n handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n }\n } else {\n this.cb.call(this.vm, value, oldValue);\n }\n }\n }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n this.value = this.get();\n this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n var i = this.deps.length;\n while (i--) {\n this.deps[i].depend();\n }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n if (this.active) {\n // remove self from vm's watcher list\n // this is a somewhat expensive operation so we skip it\n // if the vm is being destroyed.\n if (!this.vm._isBeingDestroyed) {\n remove(this.vm._watchers, this);\n }\n var i = this.deps.length;\n while (i--) {\n this.deps[i].removeSub(this);\n }\n this.active = false;\n }\n};\n\n/* */\n\nvar sharedPropertyDefinition = {\n enumerable: true,\n configurable: true,\n get: noop,\n set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n sharedPropertyDefinition.get = function proxyGetter () {\n return this[sourceKey][key]\n };\n sharedPropertyDefinition.set = function proxySetter (val) {\n this[sourceKey][key] = val;\n };\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n vm._watchers = [];\n var opts = vm.$options;\n if (opts.props) { initProps(vm, opts.props); }\n if (opts.methods) { initMethods(vm, opts.methods); }\n if (opts.data) {\n initData(vm);\n } else {\n observe(vm._data = {}, true /* asRootData */);\n }\n if (opts.computed) { initComputed(vm, opts.computed); }\n if (opts.watch && opts.watch !== nativeWatch) {\n initWatch(vm, opts.watch);\n }\n}\n\nfunction initProps (vm, propsOptions) {\n var propsData = vm.$options.propsData || {};\n var props = vm._props = {};\n // cache prop keys so that future props updates can iterate using Array\n // instead of dynamic object key enumeration.\n var keys = vm.$options._propKeys = [];\n var isRoot = !vm.$parent;\n // root instance props should be converted\n if (!isRoot) {\n toggleObserving(false);\n }\n var loop = function ( key ) {\n keys.push(key);\n var value = validateProp(key, propsOptions, propsData, vm);\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n var hyphenatedKey = hyphenate(key);\n if (isReservedAttribute(hyphenatedKey) ||\n config.isReservedAttr(hyphenatedKey)) {\n warn(\n (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n vm\n );\n }\n defineReactive$$1(props, key, value, function () {\n if (!isRoot && !isUpdatingChildComponent) {\n {\n if(vm.mpHost === 'mp-baidu' || vm.mpHost === 'mp-kuaishou' || vm.mpHost === 'mp-xhs'){//百度、快手、小红书 observer 在 setData callback 之后触发,直接忽略该 warn\n return\n }\n //fixed by xxxxxx __next_tick_pending,uni://form-field 时不告警\n if(\n key === 'value' && \n Array.isArray(vm.$options.behaviors) &&\n vm.$options.behaviors.indexOf('uni://form-field') !== -1\n ){\n return\n }\n if(vm._getFormData){\n return\n }\n var $parent = vm.$parent;\n while($parent){\n if($parent.__next_tick_pending){\n return \n }\n $parent = $parent.$parent;\n }\n }\n warn(\n \"Avoid mutating a prop directly since the value will be \" +\n \"overwritten whenever the parent component re-renders. \" +\n \"Instead, use a data or computed property based on the prop's \" +\n \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n }\n });\n } else {\n defineReactive$$1(props, key, value);\n }\n // static props are already proxied on the component's prototype\n // during Vue.extend(). We only need to proxy props defined at\n // instantiation here.\n if (!(key in vm)) {\n proxy(vm, \"_props\", key);\n }\n };\n\n for (var key in propsOptions) loop( key );\n toggleObserving(true);\n}\n\nfunction initData (vm) {\n var data = vm.$options.data;\n data = vm._data = typeof data === 'function'\n ? getData(data, vm)\n : data || {};\n if (!isPlainObject(data)) {\n data = {};\n process.env.NODE_ENV !== 'production' && warn(\n 'data functions should return an object:\\n' +\n 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n vm\n );\n }\n // proxy data on instance\n var keys = Object.keys(data);\n var props = vm.$options.props;\n var methods = vm.$options.methods;\n var i = keys.length;\n while (i--) {\n var key = keys[i];\n if (process.env.NODE_ENV !== 'production') {\n if (methods && hasOwn(methods, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n vm\n );\n }\n }\n if (props && hasOwn(props, key)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n \"Use prop default value instead.\",\n vm\n );\n } else if (!isReserved(key)) {\n proxy(vm, \"_data\", key);\n }\n }\n // observe data\n observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n // #7573 disable dep collection when invoking data getters\n pushTarget();\n try {\n return data.call(vm, vm)\n } catch (e) {\n handleError(e, vm, \"data()\");\n return {}\n } finally {\n popTarget();\n }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n // $flow-disable-line\n var watchers = vm._computedWatchers = Object.create(null);\n // computed properties are just getters during SSR\n var isSSR = isServerRendering();\n\n for (var key in computed) {\n var userDef = computed[key];\n var getter = typeof userDef === 'function' ? userDef : userDef.get;\n if (process.env.NODE_ENV !== 'production' && getter == null) {\n warn(\n (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n vm\n );\n }\n\n if (!isSSR) {\n // create internal watcher for the computed property.\n watchers[key] = new Watcher(\n vm,\n getter || noop,\n noop,\n computedWatcherOptions\n );\n }\n\n // component-defined computed properties are already defined on the\n // component prototype. We only need to define computed properties defined\n // at instantiation here.\n if (!(key in vm)) {\n defineComputed(vm, key, userDef);\n } else if (process.env.NODE_ENV !== 'production') {\n if (key in vm.$data) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n } else if (vm.$options.props && key in vm.$options.props) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n }\n }\n }\n}\n\nfunction defineComputed (\n target,\n key,\n userDef\n) {\n var shouldCache = !isServerRendering();\n if (typeof userDef === 'function') {\n sharedPropertyDefinition.get = shouldCache\n ? createComputedGetter(key)\n : createGetterInvoker(userDef);\n sharedPropertyDefinition.set = noop;\n } else {\n sharedPropertyDefinition.get = userDef.get\n ? shouldCache && userDef.cache !== false\n ? createComputedGetter(key)\n : createGetterInvoker(userDef.get)\n : noop;\n sharedPropertyDefinition.set = userDef.set || noop;\n }\n if (process.env.NODE_ENV !== 'production' &&\n sharedPropertyDefinition.set === noop) {\n sharedPropertyDefinition.set = function () {\n warn(\n (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n this\n );\n };\n }\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n return function computedGetter () {\n var watcher = this._computedWatchers && this._computedWatchers[key];\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.SharedObject.target) {// fixed by xxxxxx\n watcher.depend();\n }\n return watcher.value\n }\n }\n}\n\nfunction createGetterInvoker(fn) {\n return function computedGetter () {\n return fn.call(this, this)\n }\n}\n\nfunction initMethods (vm, methods) {\n var props = vm.$options.props;\n for (var key in methods) {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof methods[key] !== 'function') {\n warn(\n \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n \"Did you reference the function correctly?\",\n vm\n );\n }\n if (props && hasOwn(props, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n vm\n );\n }\n if ((key in vm) && isReserved(key)) {\n warn(\n \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n \"Avoid defining component methods that start with _ or $.\"\n );\n }\n }\n vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n }\n}\n\nfunction initWatch (vm, watch) {\n for (var key in watch) {\n var handler = watch[key];\n if (Array.isArray(handler)) {\n for (var i = 0; i < handler.length; i++) {\n createWatcher(vm, key, handler[i]);\n }\n } else {\n createWatcher(vm, key, handler);\n }\n }\n}\n\nfunction createWatcher (\n vm,\n expOrFn,\n handler,\n options\n) {\n if (isPlainObject(handler)) {\n options = handler;\n handler = handler.handler;\n }\n if (typeof handler === 'string') {\n handler = vm[handler];\n }\n return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n // flow somehow has problems with directly declared definition object\n // when using Object.defineProperty, so we have to procedurally build up\n // the object here.\n var dataDef = {};\n dataDef.get = function () { return this._data };\n var propsDef = {};\n propsDef.get = function () { return this._props };\n if (process.env.NODE_ENV !== 'production') {\n dataDef.set = function () {\n warn(\n 'Avoid replacing instance root $data. ' +\n 'Use nested data properties instead.',\n this\n );\n };\n propsDef.set = function () {\n warn(\"$props is readonly.\", this);\n };\n }\n Object.defineProperty(Vue.prototype, '$data', dataDef);\n Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n Vue.prototype.$set = set;\n Vue.prototype.$delete = del;\n\n Vue.prototype.$watch = function (\n expOrFn,\n cb,\n options\n ) {\n var vm = this;\n if (isPlainObject(cb)) {\n return createWatcher(vm, expOrFn, cb, options)\n }\n options = options || {};\n options.user = true;\n var watcher = new Watcher(vm, expOrFn, cb, options);\n if (options.immediate) {\n try {\n cb.call(vm, watcher.value);\n } catch (error) {\n handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n }\n }\n return function unwatchFn () {\n watcher.teardown();\n }\n };\n}\n\n/* */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n Vue.prototype._init = function (options) {\n var vm = this;\n // a uid\n vm._uid = uid$3++;\n\n var startTag, endTag;\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n startTag = \"vue-perf-start:\" + (vm._uid);\n endTag = \"vue-perf-end:\" + (vm._uid);\n mark(startTag);\n }\n\n // a flag to avoid this being observed\n vm._isVue = true;\n // merge options\n if (options && options._isComponent) {\n // optimize internal component instantiation\n // since dynamic options merging is pretty slow, and none of the\n // internal component options needs special treatment.\n initInternalComponent(vm, options);\n } else {\n vm.$options = mergeOptions(\n resolveConstructorOptions(vm.constructor),\n options || {},\n vm\n );\n }\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n initProxy(vm);\n } else {\n vm._renderProxy = vm;\n }\n // expose real self\n vm._self = vm;\n initLifecycle(vm);\n initEvents(vm);\n initRender(vm);\n callHook(vm, 'beforeCreate');\n !vm._$fallback && initInjections(vm); // resolve injections before data/props \n initState(vm);\n !vm._$fallback && initProvide(vm); // resolve provide after data/props\n !vm._$fallback && callHook(vm, 'created'); \n\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n vm._name = formatComponentName(vm, false);\n mark(endTag);\n measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n }\n\n if (vm.$options.el) {\n vm.$mount(vm.$options.el);\n }\n };\n}\n\nfunction initInternalComponent (vm, options) {\n var opts = vm.$options = Object.create(vm.constructor.options);\n // doing this because it's faster than dynamic enumeration.\n var parentVnode = options._parentVnode;\n opts.parent = options.parent;\n opts._parentVnode = parentVnode;\n\n var vnodeComponentOptions = parentVnode.componentOptions;\n opts.propsData = vnodeComponentOptions.propsData;\n opts._parentListeners = vnodeComponentOptions.listeners;\n opts._renderChildren = vnodeComponentOptions.children;\n opts._componentTag = vnodeComponentOptions.tag;\n\n if (options.render) {\n opts.render = options.render;\n opts.staticRenderFns = options.staticRenderFns;\n }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n var options = Ctor.options;\n if (Ctor.super) {\n var superOptions = resolveConstructorOptions(Ctor.super);\n var cachedSuperOptions = Ctor.superOptions;\n if (superOptions !== cachedSuperOptions) {\n // super option changed,\n // need to resolve new options.\n Ctor.superOptions = superOptions;\n // check if there are any late-modified/attached options (#4976)\n var modifiedOptions = resolveModifiedOptions(Ctor);\n // update base extend options\n if (modifiedOptions) {\n extend(Ctor.extendOptions, modifiedOptions);\n }\n options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n if (options.name) {\n options.components[options.name] = Ctor;\n }\n }\n }\n return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n var modified;\n var latest = Ctor.options;\n var sealed = Ctor.sealedOptions;\n for (var key in latest) {\n if (latest[key] !== sealed[key]) {\n if (!modified) { modified = {}; }\n modified[key] = latest[key];\n }\n }\n return modified\n}\n\nfunction Vue (options) {\n if (process.env.NODE_ENV !== 'production' &&\n !(this instanceof Vue)\n ) {\n warn('Vue is a constructor and should be called with the `new` keyword');\n }\n this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/* */\n\nfunction initUse (Vue) {\n Vue.use = function (plugin) {\n var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n if (installedPlugins.indexOf(plugin) > -1) {\n return this\n }\n\n // additional parameters\n var args = toArray(arguments, 1);\n args.unshift(this);\n if (typeof plugin.install === 'function') {\n plugin.install.apply(plugin, args);\n } else if (typeof plugin === 'function') {\n plugin.apply(null, args);\n }\n installedPlugins.push(plugin);\n return this\n };\n}\n\n/* */\n\nfunction initMixin$1 (Vue) {\n Vue.mixin = function (mixin) {\n this.options = mergeOptions(this.options, mixin);\n return this\n };\n}\n\n/* */\n\nfunction initExtend (Vue) {\n /**\n * Each instance constructor, including Vue, has a unique\n * cid. This enables us to create wrapped \"child\n * constructors\" for prototypal inheritance and cache them.\n */\n Vue.cid = 0;\n var cid = 1;\n\n /**\n * Class inheritance\n */\n Vue.extend = function (extendOptions) {\n extendOptions = extendOptions || {};\n var Super = this;\n var SuperId = Super.cid;\n var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n if (cachedCtors[SuperId]) {\n return cachedCtors[SuperId]\n }\n\n var name = extendOptions.name || Super.options.name;\n if (process.env.NODE_ENV !== 'production' && name) {\n validateComponentName(name);\n }\n\n var Sub = function VueComponent (options) {\n this._init(options);\n };\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.cid = cid++;\n Sub.options = mergeOptions(\n Super.options,\n extendOptions\n );\n Sub['super'] = Super;\n\n // For props and computed properties, we define the proxy getters on\n // the Vue instances at extension time, on the extended prototype. This\n // avoids Object.defineProperty calls for each instance created.\n if (Sub.options.props) {\n initProps$1(Sub);\n }\n if (Sub.options.computed) {\n initComputed$1(Sub);\n }\n\n // allow further extension/mixin/plugin usage\n Sub.extend = Super.extend;\n Sub.mixin = Super.mixin;\n Sub.use = Super.use;\n\n // create asset registers, so extended classes\n // can have their private assets too.\n ASSET_TYPES.forEach(function (type) {\n Sub[type] = Super[type];\n });\n // enable recursive self-lookup\n if (name) {\n Sub.options.components[name] = Sub;\n }\n\n // keep a reference to the super options at extension time.\n // later at instantiation we can check if Super's options have\n // been updated.\n Sub.superOptions = Super.options;\n Sub.extendOptions = extendOptions;\n Sub.sealedOptions = extend({}, Sub.options);\n\n // cache constructor\n cachedCtors[SuperId] = Sub;\n return Sub\n };\n}\n\nfunction initProps$1 (Comp) {\n var props = Comp.options.props;\n for (var key in props) {\n proxy(Comp.prototype, \"_props\", key);\n }\n}\n\nfunction initComputed$1 (Comp) {\n var computed = Comp.options.computed;\n for (var key in computed) {\n defineComputed(Comp.prototype, key, computed[key]);\n }\n}\n\n/* */\n\nfunction initAssetRegisters (Vue) {\n /**\n * Create asset registration methods.\n */\n ASSET_TYPES.forEach(function (type) {\n Vue[type] = function (\n id,\n definition\n ) {\n if (!definition) {\n return this.options[type + 's'][id]\n } else {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && type === 'component') {\n validateComponentName(id);\n }\n if (type === 'component' && isPlainObject(definition)) {\n definition.name = definition.name || id;\n definition = this.options._base.extend(definition);\n }\n if (type === 'directive' && typeof definition === 'function') {\n definition = { bind: definition, update: definition };\n }\n this.options[type + 's'][id] = definition;\n return definition\n }\n };\n });\n}\n\n/* */\n\n\n\nfunction getComponentName (opts) {\n return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n if (Array.isArray(pattern)) {\n return pattern.indexOf(name) > -1\n } else if (typeof pattern === 'string') {\n return pattern.split(',').indexOf(name) > -1\n } else if (isRegExp(pattern)) {\n return pattern.test(name)\n }\n /* istanbul ignore next */\n return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n var cache = keepAliveInstance.cache;\n var keys = keepAliveInstance.keys;\n var _vnode = keepAliveInstance._vnode;\n for (var key in cache) {\n var cachedNode = cache[key];\n if (cachedNode) {\n var name = getComponentName(cachedNode.componentOptions);\n if (name && !filter(name)) {\n pruneCacheEntry(cache, key, keys, _vnode);\n }\n }\n }\n}\n\nfunction pruneCacheEntry (\n cache,\n key,\n keys,\n current\n) {\n var cached$$1 = cache[key];\n if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n cached$$1.componentInstance.$destroy();\n }\n cache[key] = null;\n remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n name: 'keep-alive',\n abstract: true,\n\n props: {\n include: patternTypes,\n exclude: patternTypes,\n max: [String, Number]\n },\n\n created: function created () {\n this.cache = Object.create(null);\n this.keys = [];\n },\n\n destroyed: function destroyed () {\n for (var key in this.cache) {\n pruneCacheEntry(this.cache, key, this.keys);\n }\n },\n\n mounted: function mounted () {\n var this$1 = this;\n\n this.$watch('include', function (val) {\n pruneCache(this$1, function (name) { return matches(val, name); });\n });\n this.$watch('exclude', function (val) {\n pruneCache(this$1, function (name) { return !matches(val, name); });\n });\n },\n\n render: function render () {\n var slot = this.$slots.default;\n var vnode = getFirstComponentChild(slot);\n var componentOptions = vnode && vnode.componentOptions;\n if (componentOptions) {\n // check pattern\n var name = getComponentName(componentOptions);\n var ref = this;\n var include = ref.include;\n var exclude = ref.exclude;\n if (\n // not included\n (include && (!name || !matches(include, name))) ||\n // excluded\n (exclude && name && matches(exclude, name))\n ) {\n return vnode\n }\n\n var ref$1 = this;\n var cache = ref$1.cache;\n var keys = ref$1.keys;\n var key = vnode.key == null\n // same constructor may get registered as different local components\n // so cid alone is not enough (#3269)\n ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n : vnode.key;\n if (cache[key]) {\n vnode.componentInstance = cache[key].componentInstance;\n // make current key freshest\n remove(keys, key);\n keys.push(key);\n } else {\n cache[key] = vnode;\n keys.push(key);\n // prune oldest entry\n if (this.max && keys.length > parseInt(this.max)) {\n pruneCacheEntry(cache, keys[0], keys, this._vnode);\n }\n }\n\n vnode.data.keepAlive = true;\n }\n return vnode || (slot && slot[0])\n }\n};\n\nvar builtInComponents = {\n KeepAlive: KeepAlive\n};\n\n/* */\n\nfunction initGlobalAPI (Vue) {\n // config\n var configDef = {};\n configDef.get = function () { return config; };\n if (process.env.NODE_ENV !== 'production') {\n configDef.set = function () {\n warn(\n 'Do not replace the Vue.config object, set individual fields instead.'\n );\n };\n }\n Object.defineProperty(Vue, 'config', configDef);\n\n // exposed util methods.\n // NOTE: these are not considered part of the public API - avoid relying on\n // them unless you are aware of the risk.\n Vue.util = {\n warn: warn,\n extend: extend,\n mergeOptions: mergeOptions,\n defineReactive: defineReactive$$1\n };\n\n Vue.set = set;\n Vue.delete = del;\n Vue.nextTick = nextTick;\n\n // 2.6 explicit observable API\n Vue.observable = function (obj) {\n observe(obj);\n return obj\n };\n\n Vue.options = Object.create(null);\n ASSET_TYPES.forEach(function (type) {\n Vue.options[type + 's'] = Object.create(null);\n });\n\n // this is used to identify the \"base\" constructor to extend all plain-object\n // components with in Weex's multi-instance scenarios.\n Vue.options._base = Vue;\n\n extend(Vue.options.components, builtInComponents);\n\n initUse(Vue);\n initMixin$1(Vue);\n initExtend(Vue);\n initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n get: function get () {\n /* istanbul ignore next */\n return this.$vnode && this.$vnode.ssrContext\n }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n value: FunctionalRenderContext\n});\n\nVue.version = '2.6.11';\n\n/**\n * https://raw.githubusercontent.com/Tencent/westore/master/packages/westore/utils/diff.js\n */\nvar ARRAYTYPE = '[object Array]';\nvar OBJECTTYPE = '[object Object]';\nvar NULLTYPE = '[object Null]';\nvar UNDEFINEDTYPE = '[object Undefined]';\n// const FUNCTIONTYPE = '[object Function]'\n\nfunction diff(current, pre) {\n var result = {};\n syncKeys(current, pre);\n _diff(current, pre, '', result);\n return result\n}\n\nfunction syncKeys(current, pre) {\n if (current === pre) { return }\n var rootCurrentType = type(current);\n var rootPreType = type(pre);\n if (rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE) {\n if(Object.keys(current).length >= Object.keys(pre).length){\n for (var key in pre) {\n var currentValue = current[key];\n if (currentValue === undefined) {\n current[key] = null;\n } else {\n syncKeys(currentValue, pre[key]);\n }\n }\n }\n } else if (rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE) {\n if (current.length >= pre.length) {\n pre.forEach(function (item, index) {\n syncKeys(current[index], item);\n });\n }\n }\n}\n\nfunction nullOrUndefined(currentType, preType) {\n if(\n (currentType === NULLTYPE || currentType === UNDEFINEDTYPE) && \n (preType === NULLTYPE || preType === UNDEFINEDTYPE)\n ) {\n return false\n }\n return true\n}\n\nfunction _diff(current, pre, path, result) {\n if (current === pre) { return }\n var rootCurrentType = type(current);\n var rootPreType = type(pre);\n if (rootCurrentType == OBJECTTYPE) {\n if (rootPreType != OBJECTTYPE || Object.keys(current).length < Object.keys(pre).length) {\n setResult(result, path, current);\n } else {\n var loop = function ( key ) {\n var currentValue = current[key];\n var preValue = pre[key];\n var currentType = type(currentValue);\n var preType = type(preValue);\n if (currentType != ARRAYTYPE && currentType != OBJECTTYPE) {\n if (currentValue !== pre[key] && nullOrUndefined(currentType, preType)) {\n setResult(result, (path == '' ? '' : path + \".\") + key, currentValue);\n }\n } else if (currentType == ARRAYTYPE) {\n if (preType != ARRAYTYPE) {\n setResult(result, (path == '' ? '' : path + \".\") + key, currentValue);\n } else {\n if (currentValue.length < preValue.length) {\n setResult(result, (path == '' ? '' : path + \".\") + key, currentValue);\n } else {\n currentValue.forEach(function (item, index) {\n _diff(item, preValue[index], (path == '' ? '' : path + \".\") + key + '[' + index + ']', result);\n });\n }\n }\n } else if (currentType == OBJECTTYPE) {\n if (preType != OBJECTTYPE || Object.keys(currentValue).length < Object.keys(preValue).length) {\n setResult(result, (path == '' ? '' : path + \".\") + key, currentValue);\n } else {\n for (var subKey in currentValue) {\n _diff(currentValue[subKey], preValue[subKey], (path == '' ? '' : path + \".\") + key + '.' + subKey, result);\n }\n }\n }\n };\n\n for (var key in current) loop( key );\n }\n } else if (rootCurrentType == ARRAYTYPE) {\n if (rootPreType != ARRAYTYPE) {\n setResult(result, path, current);\n } else {\n if (current.length < pre.length) {\n setResult(result, path, current);\n } else {\n current.forEach(function (item, index) {\n _diff(item, pre[index], path + '[' + index + ']', result);\n });\n }\n }\n } else {\n setResult(result, path, current);\n }\n}\n\nfunction setResult(result, k, v) {\n // if (type(v) != FUNCTIONTYPE) {\n result[k] = v;\n // }\n}\n\nfunction type(obj) {\n return Object.prototype.toString.call(obj)\n}\n\n/* */\r\n\r\nfunction flushCallbacks$1(vm) {\r\n if (vm.__next_tick_callbacks && vm.__next_tick_callbacks.length) {\r\n if (process.env.VUE_APP_DEBUG) {\r\n var mpInstance = vm.$scope;\r\n console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +\r\n ']:flushCallbacks[' + vm.__next_tick_callbacks.length + ']');\r\n }\r\n var copies = vm.__next_tick_callbacks.slice(0);\r\n vm.__next_tick_callbacks.length = 0;\r\n for (var i = 0; i < copies.length; i++) {\r\n copies[i]();\r\n }\r\n }\r\n}\r\n\r\nfunction hasRenderWatcher(vm) {\r\n return queue.find(function (watcher) { return vm._watcher === watcher; })\r\n}\r\n\r\nfunction nextTick$1(vm, cb) {\r\n //1.nextTick 之前 已 setData 且 setData 还未回调完成\r\n //2.nextTick 之前存在 render watcher\r\n if (!vm.__next_tick_pending && !hasRenderWatcher(vm)) {\n if(process.env.VUE_APP_DEBUG){\n var mpInstance = vm.$scope;\n console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +\n ']:nextVueTick');\n }\r\n return nextTick(cb, vm)\r\n }else{\n if(process.env.VUE_APP_DEBUG){\n var mpInstance$1 = vm.$scope;\n console.log('[' + (+new Date) + '][' + (mpInstance$1.is || mpInstance$1.route) + '][' + vm._uid +\n ']:nextMPTick');\n }\n }\r\n var _resolve;\r\n if (!vm.__next_tick_callbacks) {\r\n vm.__next_tick_callbacks = [];\r\n }\r\n vm.__next_tick_callbacks.push(function () {\r\n if (cb) {\r\n try {\r\n cb.call(vm);\r\n } catch (e) {\r\n handleError(e, vm, 'nextTick');\r\n }\r\n } else if (_resolve) {\r\n _resolve(vm);\r\n }\r\n });\r\n // $flow-disable-line\r\n if (!cb && typeof Promise !== 'undefined') {\r\n return new Promise(function (resolve) {\r\n _resolve = resolve;\r\n })\r\n }\r\n}\n\n/* */\r\n\r\nfunction clearInstance(key, value) {\r\n // 简易去除 Vue 和小程序组件实例\r\n if (value) {\r\n if (value._isVue || value.__v_isMPComponent) {\r\n return {}\r\n }\r\n }\r\n return value\r\n}\r\n\r\nfunction cloneWithData(vm) {\r\n // 确保当前 vm 所有数据被同步\r\n var ret = Object.create(null);\r\n var dataKeys = [].concat(\r\n Object.keys(vm._data || {}),\r\n Object.keys(vm._computedWatchers || {}));\r\n\r\n dataKeys.reduce(function(ret, key) {\r\n ret[key] = vm[key];\r\n return ret\r\n }, ret);\r\n\r\n // vue-composition-api\r\n var compositionApiState = vm.__composition_api_state__ || vm.__secret_vfa_state__;\r\n var rawBindings = compositionApiState && compositionApiState.rawBindings;\r\n if (rawBindings) {\r\n Object.keys(rawBindings).forEach(function (key) {\r\n ret[key] = vm[key];\r\n });\r\n }\r\n\r\n //TODO 需要把无用数据处理掉,比如 list=>l0 则 list 需要移除,否则多传输一份数据\r\n Object.assign(ret, vm.$mp.data || {});\r\n if (\r\n Array.isArray(vm.$options.behaviors) &&\r\n vm.$options.behaviors.indexOf('uni://form-field') !== -1\r\n ) { //form-field\r\n ret['name'] = vm.name;\r\n ret['value'] = vm.value;\r\n }\r\n\r\n return JSON.parse(JSON.stringify(ret, clearInstance))\r\n}\r\n\r\nvar patch = function(oldVnode, vnode) {\n var this$1 = this;\n\r\n if (vnode === null) { //destroy\r\n return\r\n }\r\n if (this.mpType === 'page' || this.mpType === 'component') {\r\n var mpInstance = this.$scope;\r\n var data = Object.create(null);\r\n try {\r\n data = cloneWithData(this);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n data.__webviewId__ = mpInstance.data.__webviewId__;\r\n var mpData = Object.create(null);\r\n Object.keys(data).forEach(function (key) { //仅同步 data 中有的数据\r\n mpData[key] = mpInstance.data[key];\r\n });\r\n var diffData = this.$shouldDiffData === false ? data : diff(data, mpData);\r\n if (Object.keys(diffData).length) {\r\n if (process.env.VUE_APP_DEBUG) {\r\n console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + this._uid +\r\n ']差量更新',\r\n JSON.stringify(diffData));\r\n }\r\n this.__next_tick_pending = true;\r\n mpInstance.setData(diffData, function () {\r\n this$1.__next_tick_pending = false;\r\n flushCallbacks$1(this$1);\r\n });\r\n } else {\r\n flushCallbacks$1(this);\r\n }\r\n }\r\n};\n\n/* */\n\nfunction createEmptyRender() {\n\n}\n\nfunction mountComponent$1(\n vm,\n el,\n hydrating\n) {\n if (!vm.mpType) {//main.js 中的 new Vue\n return vm\n }\n if (vm.mpType === 'app') {\n vm.$options.render = createEmptyRender;\n }\n if (!vm.$options.render) {\n vm.$options.render = createEmptyRender;\n if (process.env.NODE_ENV !== 'production') {\n /* istanbul ignore if */\n if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n vm.$options.el || el) {\n warn(\n 'You are using the runtime-only build of Vue where the template ' +\n 'compiler is not available. Either pre-compile the templates into ' +\n 'render functions, or use the compiler-included build.',\n vm\n );\n } else {\n warn(\n 'Failed to mount component: template or render function not defined.',\n vm\n );\n }\n }\n }\n \n !vm._$fallback && callHook(vm, 'beforeMount');\n\n var updateComponent = function () {\n vm._update(vm._render(), hydrating);\n };\n\n // we set this to vm._watcher inside the watcher's constructor\n // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n // component's mounted hook), which relies on vm._watcher being already defined\n new Watcher(vm, updateComponent, noop, {\n before: function before() {\n if (vm._isMounted && !vm._isDestroyed) {\n callHook(vm, 'beforeUpdate');\n }\n }\n }, true /* isRenderWatcher */);\n hydrating = false;\n return vm\n}\n\n/* */\n\nfunction renderClass (\n staticClass,\n dynamicClass\n) {\n if (isDef(staticClass) || isDef(dynamicClass)) {\n return concat(staticClass, stringifyClass(dynamicClass))\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction concat (a, b) {\n return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n if (Array.isArray(value)) {\n return stringifyArray(value)\n }\n if (isObject(value)) {\n return stringifyObject(value)\n }\n if (typeof value === 'string') {\n return value\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction stringifyArray (value) {\n var res = '';\n var stringified;\n for (var i = 0, l = value.length; i < l; i++) {\n if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n if (res) { res += ' '; }\n res += stringified;\n }\n }\n return res\n}\n\nfunction stringifyObject (value) {\n var res = '';\n for (var key in value) {\n if (value[key]) {\n if (res) { res += ' '; }\n res += key;\n }\n }\n return res\n}\n\n/* */\n\nvar parseStyleText = cached(function (cssText) {\n var res = {};\n var listDelimiter = /;(?![^(]*\\))/g;\n var propertyDelimiter = /:(.+)/;\n cssText.split(listDelimiter).forEach(function (item) {\n if (item) {\n var tmp = item.split(propertyDelimiter);\n tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return res\n});\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n if (Array.isArray(bindingStyle)) {\n return toObject(bindingStyle)\n }\n if (typeof bindingStyle === 'string') {\n return parseStyleText(bindingStyle)\n }\n return bindingStyle\n}\n\n/* */\r\n\r\nvar MP_METHODS = ['createSelectorQuery', 'createIntersectionObserver', 'selectAllComponents', 'selectComponent'];\r\n\r\nfunction getTarget(obj, path) {\r\n var parts = path.split('.');\r\n var key = parts[0];\r\n if (key.indexOf('__$n') === 0) { //number index\r\n key = parseInt(key.replace('__$n', ''));\r\n }\r\n if (parts.length === 1) {\r\n return obj[key]\r\n }\r\n return getTarget(obj[key], parts.slice(1).join('.'))\r\n}\r\n\r\nfunction internalMixin(Vue) {\r\n\r\n Vue.config.errorHandler = function(err, vm, info) {\r\n Vue.util.warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\r\n console.error(err);\r\n /* eslint-disable no-undef */\r\n var app = typeof getApp === 'function' && getApp();\r\n if (app && app.onError) {\r\n app.onError(err);\r\n }\r\n };\r\n\r\n var oldEmit = Vue.prototype.$emit;\r\n\r\n Vue.prototype.$emit = function(event) {\r\n if (this.$scope && event) {\r\n var triggerEvent = this.$scope['_triggerEvent'] || this.$scope['triggerEvent'];\r\n if (triggerEvent) {\r\n try {\r\n triggerEvent.call(this.$scope, event, {\r\n __args__: toArray(arguments, 1)\r\n });\r\n } catch (error) {\r\n\r\n }\r\n }\r\n }\r\n return oldEmit.apply(this, arguments)\r\n };\r\n\r\n Vue.prototype.$nextTick = function(fn) {\r\n return nextTick$1(this, fn)\r\n };\r\n\r\n MP_METHODS.forEach(function (method) {\r\n Vue.prototype[method] = function(args) {\r\n if (this.$scope && this.$scope[method]) {\r\n return this.$scope[method](args)\r\n }\r\n // mp-alipay\r\n if (typeof my === 'undefined') {\r\n return\r\n }\r\n if (method === 'createSelectorQuery') {\r\n /* eslint-disable no-undef */\r\n return my.createSelectorQuery(args)\r\n } else if (method === 'createIntersectionObserver') {\r\n /* eslint-disable no-undef */\r\n return my.createIntersectionObserver(args)\r\n }\r\n // TODO mp-alipay 暂不支持 selectAllComponents,selectComponent\r\n };\r\n });\r\n\r\n Vue.prototype.__init_provide = initProvide;\r\n\r\n Vue.prototype.__init_injections = initInjections;\r\n\r\n Vue.prototype.__call_hook = function(hook, args) {\r\n var vm = this;\r\n // #7573 disable dep collection when invoking lifecycle hooks\r\n pushTarget();\r\n var handlers = vm.$options[hook];\r\n var info = hook + \" hook\";\r\n var ret;\r\n if (handlers) {\r\n for (var i = 0, j = handlers.length; i < j; i++) {\r\n ret = invokeWithErrorHandling(handlers[i], vm, args ? [args] : null, vm, info);\r\n }\r\n }\r\n if (vm._hasHookEvent) {\r\n vm.$emit('hook:' + hook, args);\r\n }\r\n popTarget();\r\n return ret\r\n };\r\n\r\n Vue.prototype.__set_model = function(target, key, value, modifiers) {\r\n if (Array.isArray(modifiers)) {\r\n if (modifiers.indexOf('trim') !== -1) {\r\n value = value.trim();\r\n }\r\n if (modifiers.indexOf('number') !== -1) {\r\n value = this._n(value);\r\n }\r\n }\r\n if (!target) {\r\n target = this;\r\n }\r\n // 解决动态属性添加\r\n Vue.set(target, key, value);\r\n };\r\n\r\n Vue.prototype.__set_sync = function(target, key, value) {\r\n if (!target) {\r\n target = this;\r\n }\r\n // 解决动态属性添加\r\n Vue.set(target, key, value);\r\n };\r\n\r\n Vue.prototype.__get_orig = function(item) {\r\n if (isPlainObject(item)) {\r\n return item['$orig'] || item\r\n }\r\n return item\r\n };\r\n\r\n Vue.prototype.__get_value = function(dataPath, target) {\r\n return getTarget(target || this, dataPath)\r\n };\r\n\r\n\r\n Vue.prototype.__get_class = function(dynamicClass, staticClass) {\r\n return renderClass(staticClass, dynamicClass)\r\n };\r\n\r\n Vue.prototype.__get_style = function(dynamicStyle, staticStyle) {\r\n if (!dynamicStyle && !staticStyle) {\r\n return ''\r\n }\r\n var dynamicStyleObj = normalizeStyleBinding(dynamicStyle);\r\n var styleObj = staticStyle ? extend(staticStyle, dynamicStyleObj) : dynamicStyleObj;\r\n return Object.keys(styleObj).map(function (name) { return ((hyphenate(name)) + \":\" + (styleObj[name])); }).join(';')\r\n };\r\n\r\n Vue.prototype.__map = function(val, iteratee) {\r\n //TODO 暂不考虑 string\r\n var ret, i, l, keys, key;\r\n if (Array.isArray(val)) {\r\n ret = new Array(val.length);\r\n for (i = 0, l = val.length; i < l; i++) {\r\n ret[i] = iteratee(val[i], i);\r\n }\r\n return ret\r\n } else if (isObject(val)) {\r\n keys = Object.keys(val);\r\n ret = Object.create(null);\r\n for (i = 0, l = keys.length; i < l; i++) {\r\n key = keys[i];\r\n ret[key] = iteratee(val[key], key, i);\r\n }\r\n return ret\r\n } else if (typeof val === 'number') {\r\n ret = new Array(val);\r\n for (i = 0, l = val; i < l; i++) {\r\n // 第一个参数暂时仍和小程序一致\r\n ret[i] = iteratee(i, i);\r\n }\r\n return ret\r\n }\r\n return []\r\n };\r\n\r\n}\n\n/* */\r\n\r\nvar LIFECYCLE_HOOKS$1 = [\r\n //App\r\n 'onLaunch',\r\n 'onShow',\r\n 'onHide',\r\n 'onUniNViewMessage',\r\n 'onPageNotFound',\r\n 'onThemeChange',\r\n 'onError',\r\n 'onUnhandledRejection',\r\n //Page\r\n 'onInit',\r\n 'onLoad',\r\n // 'onShow',\r\n 'onReady',\r\n // 'onHide',\r\n 'onUnload',\r\n 'onPullDownRefresh',\r\n 'onReachBottom',\r\n 'onTabItemTap',\r\n 'onAddToFavorites',\r\n 'onShareTimeline',\r\n 'onShareAppMessage',\r\n 'onResize',\r\n 'onPageScroll',\r\n 'onNavigationBarButtonTap',\r\n 'onBackPress',\r\n 'onNavigationBarSearchInputChanged',\r\n 'onNavigationBarSearchInputConfirmed',\r\n 'onNavigationBarSearchInputClicked',\r\n 'onUploadDouyinVideo',\r\n 'onNFCReadMessage',\r\n //Component\r\n // 'onReady', // 兼容旧版本,应该移除该事件\r\n 'onPageShow',\r\n 'onPageHide',\r\n 'onPageResize'\r\n];\r\nfunction lifecycleMixin$1(Vue) {\r\n\r\n //fixed vue-class-component\r\n var oldExtend = Vue.extend;\r\n Vue.extend = function(extendOptions) {\r\n extendOptions = extendOptions || {};\r\n\r\n var methods = extendOptions.methods;\r\n if (methods) {\r\n Object.keys(methods).forEach(function (methodName) {\r\n if (LIFECYCLE_HOOKS$1.indexOf(methodName)!==-1) {\r\n extendOptions[methodName] = methods[methodName];\r\n delete methods[methodName];\r\n }\r\n });\r\n }\r\n\r\n return oldExtend.call(this, extendOptions)\r\n };\r\n\r\n var strategies = Vue.config.optionMergeStrategies;\r\n var mergeHook = strategies.created;\r\n LIFECYCLE_HOOKS$1.forEach(function (hook) {\r\n strategies[hook] = mergeHook;\r\n });\r\n\r\n Vue.prototype.__lifecycle_hooks__ = LIFECYCLE_HOOKS$1;\r\n}\n\n/* */\r\n\n// install platform patch function\r\nVue.prototype.__patch__ = patch;\r\n\r\n// public mount method\r\nVue.prototype.$mount = function(\r\n el ,\r\n hydrating \r\n) {\r\n return mountComponent$1(this, el, hydrating)\r\n};\r\n\r\nlifecycleMixin$1(Vue);\r\ninternalMixin(Vue);\n\n/* */\n\nexport default Vue;\n","import Vue from 'vue'\r\nimport Vuex from 'vuex'\r\n\r\nVue.use(Vuex)\r\n\r\nlet lifeData = {}\r\n\r\n// 尝试获取本地是否存在lifeData变量,第一次启动时不存在\r\ntry {\r\n lifeData = uni.getStorageSync('lifeData')\r\n} catch(e) {\r\n \r\n}\r\n\r\n// 标记需要永久存储的变量,在每次启动时取出,在state中的变量名\r\nlet saveStateKeys = ['vuex_user']\r\n\r\n// 保存变量到本地存储\r\nconst saveLifeData = function(key, value) {\r\n // 判断变量是否在存储数组中\r\n if (saveStateKeys.indexOf(key) != -1) {\r\n // 获取本地存储的lifeData对象,将变量添加到对象中\r\n let tmpLifeData = uni.getStorageSync('lifeData')\r\n // 第一次启动时不存在,则放一个空对象\r\n tmpLifeData = tmpLifeData ? tmpLifeData : {},\r\n tmpLifeData[key] = value\r\n // 将变量再次放回本地存储中\r\n uni.setStorageSync('lifeData', tmpLifeData)\r\n }\r\n}\r\n\r\nconst store = new Vuex.Store({\r\n state: {\r\n // 如果上面从本地获取的lifeData对象下有对应的属性,就赋值给state中对应的变量\r\n // 加上vuex_前缀,是防止变量名冲突,也让人一目了然\r\n vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {name: '图鸟'},\r\n \r\n // 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式\r\n // app版本\r\n vuex_version: \"1.0.0\",\r\n // 是否使用自定义导航栏\r\n vuex_custom_nav_bar: true,\r\n // 状态栏高度\r\n vuex_status_bar_height: 0,\r\n // 自定义导航栏的高度\r\n vuex_custom_bar_height: 0\r\n },\r\n mutations: {\r\n $tStore(state, payload) {\r\n // 判断是否多层调用,state中为对象存在的情况,例如user.info.score = 1\r\n let nameArr = payload.name.split('.')\r\n let saveKey = ''\r\n let len = nameArr.length\r\n if (len >= 2) {\r\n let obj = state[nameArr[0]]\r\n for (let i= 1; i < len - 1; i++) {\r\n obj = obj[nameArr[i]]\r\n }\r\n obj[nameArr[len - 1]] = payload.value\r\n saveKey = nameArr[0]\r\n } else {\r\n // 单层级变量\r\n state[payload.name] = payload.value\r\n saveKey = payload.name\r\n }\r\n \r\n // 保存变量到本地中\r\n saveLifeData(saveKey, state[saveKey])\r\n }\r\n },\r\n actions: {\r\n }\r\n})\r\n\r\nexport default store","/*!\n * vuex v3.6.2\n * (c) 2021 Evan You\n * @license MIT\n */\n'use strict';\n\nfunction applyMixin (Vue) {\n var version = Number(Vue.version.split('.')[0]);\n\n if (version >= 2) {\n Vue.mixin({ beforeCreate: vuexInit });\n } else {\n // override init and inject vuex init procedure\n // for 1.x backwards compatibility.\n var _init = Vue.prototype._init;\n Vue.prototype._init = function (options) {\n if ( options === void 0 ) options = {};\n\n options.init = options.init\n ? [vuexInit].concat(options.init)\n : vuexInit;\n _init.call(this, options);\n };\n }\n\n /**\n * Vuex init hook, injected into each instances init hooks list.\n */\n\n function vuexInit () {\n var options = this.$options;\n // store injection\n if (options.store) {\n this.$store = typeof options.store === 'function'\n ? options.store()\n : options.store;\n } else if (options.parent && options.parent.$store) {\n this.$store = options.parent.$store;\n }\n }\n}\n\nvar target = typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\nvar devtoolHook = target.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\nfunction devtoolPlugin (store) {\n if (!devtoolHook) { return }\n\n store._devtoolHook = devtoolHook;\n\n devtoolHook.emit('vuex:init', store);\n\n devtoolHook.on('vuex:travel-to-state', function (targetState) {\n store.replaceState(targetState);\n });\n\n store.subscribe(function (mutation, state) {\n devtoolHook.emit('vuex:mutation', mutation, state);\n }, { prepend: true });\n\n store.subscribeAction(function (action, state) {\n devtoolHook.emit('vuex:action', action, state);\n }, { prepend: true });\n}\n\n/**\n * Get the first item that pass the test\n * by second argument function\n *\n * @param {Array} list\n * @param {Function} f\n * @return {*}\n */\nfunction find (list, f) {\n return list.filter(f)[0]\n}\n\n/**\n * Deep copy the given object considering circular structure.\n * This function caches all nested objects and its copies.\n * If it detects circular structure, use cached copy to avoid infinite loop.\n *\n * @param {*} obj\n * @param {Array